[READ-ONLY] Mirror of https://github.com/probablykasper/ferrum. Music library app for Mac, Linux and Windows ferrum.kasper.space
electron linux macos music music-library music-player napi windows
0

Configure Feed

Select the types of activity you want to include in your feed.

Remove `methods` object

Unused/naming lints weren't happening for the object methods

Kasper (Sep 26, 2024, 3:20 AM +0200) 0a4c4507 4d30b99c

+163 -155
+4 -4
src/App.svelte
··· 9 9 import PlaylistInfoModal from './components/PlaylistInfo.svelte' 10 10 import { queue_visible } from './lib/queue' 11 11 import { ipc_listen, ipc_renderer } from '@/lib/window' 12 - import { import_tracks, type PlaylistInfo, methods } from './lib/data' 12 + import { delete_track_list, get_track_list, import_tracks, type PlaylistInfo } from '@/lib/data' 13 13 import { play_pause } from './lib/player' 14 14 import DragGhost from './components/DragGhost.svelte' 15 15 import ItunesImport from './components/ItunesImport.svelte' ··· 120 120 let playlist_info: PlaylistInfo | null = null 121 121 onDestroy( 122 122 ipc_listen('context.playlist.edit', (_, id) => { 123 - const list = methods.getTrackList(id) 123 + const list = get_track_list(id) 124 124 if (list.type !== 'special' && $modal_count === 0) { 125 125 playlist_info = { 126 126 name: list.name, ··· 134 134 ) 135 135 onDestroy( 136 136 ipc_listen('context.playlist.delete', async (_, id) => { 137 - const list = methods.getTrackList(id) 137 + const list = get_track_list(id) 138 138 const result = await ipc_renderer.invoke('showMessageBox', false, { 139 139 type: 'info', 140 140 message: `Delete the ${list.type} "${list.name}"?`, ··· 143 143 defaultId: 0, 144 144 }) 145 145 if (result.response === 0) { 146 - methods.deleteTrackList(id) 146 + delete_track_list(id) 147 147 } 148 148 }), 149 149 )
+1 -1
src/components/Filter.svelte
··· 1 1 <script lang="ts"> 2 2 import { onDestroy } from 'svelte' 3 - import { filter } from '../lib/data' 3 + import { filter } from '@/lib/data' 4 4 import { ipc_listen } from '../lib/window' 5 5 6 6 let filter_input: HTMLInputElement
+2 -2
src/components/Player.svelte
··· 13 13 } from '../lib/player' 14 14 import { get_duration } from '../lib/helpers' 15 15 import { queue_visible, toggle_queue_visibility, queue, shuffle, repeat } from '../lib/queue' 16 - import { is_dev, methods } from '../lib/data' 16 + import { get_track, is_dev } from '@/lib/data' 17 17 import { dragged } from '@/lib/drag-drop' 18 18 import * as dragGhost from './DragGhost.svelte' 19 19 import Slider from './Slider.svelte' ··· 42 42 function drag_start(e: DragEvent) { 43 43 if (e.dataTransfer && $playing_id) { 44 44 e.dataTransfer.effectAllowed = 'move' 45 - const track = methods.getTrack($playing_id) 45 + const track = get_track($playing_id) 46 46 dragGhost.set_inner_text(track.artist + ' - ' + track.name) 47 47 dragged.tracks = { 48 48 ids: [$playing_id],
+1 -1
src/components/PlaylistInfo.svelte
··· 1 1 <script lang="ts"> 2 2 import { check_shortcut } from '../lib/helpers' 3 - import { new_playlist, type PlaylistInfo, update_playlist } from '../lib/data' 3 + import { new_playlist, type PlaylistInfo, update_playlist } from '@/lib/data' 4 4 import Modal from './Modal.svelte' 5 5 import Button from './Button.svelte' 6 6
+2 -2
src/components/Queue.svelte
··· 12 12 import QueueItemComponent from './QueueItem.svelte' 13 13 import { new_selection } from '@/lib/selection' 14 14 import { dragged } from '@/lib/drag-drop' 15 - import { methods } from '@/lib/data' 15 + import { get_track } from '@/lib/data' 16 16 import * as dragGhost from './DragGhost.svelte' 17 17 import { ipc_listen, ipc_renderer } from '@/lib/window' 18 18 import { check_shortcut } from '@/lib/helpers' ··· 117 117 } 118 118 e.dataTransfer.effectAllowed = 'move' 119 119 if (dagged_indexes.length === 1) { 120 - const track = methods.getTrack(get_by_queue_index(dagged_indexes[0]).id) 120 + const track = get_track(get_by_queue_index(dagged_indexes[0]).id) 121 121 dragGhost.set_inner_text(track.artist + ' - ' + track.name) 122 122 } else { 123 123 dragGhost.set_inner_text(dagged_indexes.length + ' items')
+2 -2
src/components/QueueItem.svelte
··· 1 1 <script lang="ts"> 2 - import { methods, paths, tracks_updated } from '@/lib/data' 2 + import { get_track, paths, tracks_updated } from '@/lib/data' 3 3 import type { Track } from '../../ferrum-addon' 4 4 import { join_paths } from '@/lib/window' 5 5 6 6 export let id: string 7 7 8 8 let track: Track 9 - $: $tracks_updated, (track = methods.getTrack(id)) 9 + $: $tracks_updated, (track = get_track(id)) 10 10 11 11 $: src = 12 12 'trackimg:?path=' +
+1 -1
src/components/Sidebar.svelte
··· 8 8 <script lang="ts"> 9 9 import SidebarItems, { type SidebarItemHandle } from './SidebarItems.svelte' 10 10 import Filter from './Filter.svelte' 11 - import { is_mac, track_lists_details_map, move_playlist } from '../lib/data' 11 + import { is_mac, track_lists_details_map, move_playlist } from '@/lib/data' 12 12 import { ipc_listen, ipc_renderer } from '../lib/window' 13 13 import { writable } from 'svelte/store' 14 14 import { onDestroy, setContext, tick } from 'svelte'
+6 -5
src/components/SidebarItems.svelte
··· 1 1 <script lang="ts" context="module"> 2 2 import { 3 3 track_lists_details_map, 4 - methods, 5 4 add_tracks_to_playlist, 6 5 move_playlist, 7 - } from '../lib/data' 6 + shown_playlist_folders, 7 + view_folder_set_show, 8 + } from '@/lib/data' 8 9 import Self from './SidebarItems.svelte' 9 10 10 11 export type SidebarItemHandle = { 11 12 handleKey(e: KeyboardEvent): void 12 13 } 13 14 14 - let shown_folders = writable(new Set(methods.shownPlaylistFolders())) 15 + let shown_folders = writable(new Set(shown_playlist_folders())) 15 16 function show_folder(id: string) { 16 17 shown_folders.update((folders) => { 17 18 folders.add(id) 18 19 return folders 19 20 }) 20 - methods.viewFolderSetShow(id, true) 21 + view_folder_set_show(id, true) 21 22 } 22 23 function hide_folder(id: string) { 23 24 shown_folders.update((folders) => { 24 25 folders.delete(id) 25 26 return folders 26 27 }) 27 - methods.viewFolderSetShow(id, false) 28 + view_folder_set_show(id, false) 28 29 } 29 30 </script> 30 31
+17 -9
src/components/TrackInfo.svelte
··· 20 20 <script lang="ts"> 21 21 import { check_shortcut } from '@/lib/helpers' 22 22 import Button from './Button.svelte' 23 - import { methods } from '@/lib/data' 24 23 import type { Track, TrackID } from '../../ferrum-addon' 25 24 import { ipc_listen, ipc_renderer } from '@/lib/window' 26 25 import { playing_id, reload } from '@/lib/player' 27 26 import { onDestroy, tick } from 'svelte' 28 27 import { get, writable } from 'svelte/store' 29 28 import Modal, { modal_count } from './Modal.svelte' 29 + import { 30 + get_image, 31 + get_track, 32 + load_tags, 33 + remove_image, 34 + set_image, 35 + set_image_data, 36 + update_track_info, 37 + } from '@/lib/data' 30 38 31 39 function cancel() { 32 40 current_list.set(null) ··· 45 53 $: if ($current_list) open_index($current_list) 46 54 function open_index(list: TrackInfoList) { 47 55 id = list.ids[list.index] 48 - track = methods.getTrack(list.ids[list.index]) 49 - methods.loadTags(list.ids[list.index]) 56 + track = get_track(list.ids[list.index]) 57 + load_tags(list.ids[list.index]) 50 58 load_image(0) 51 59 } 52 60 async function load_image(index: number) { ··· 55 63 } 56 64 image = undefined 57 65 await tick() 58 - const image_info = methods.getImage(index) 66 + const image_info = get_image(index) 59 67 60 68 if (image_info === null) { 61 69 image = null ··· 160 168 } 161 169 function save(hide_after = true) { 162 170 if (is_edited()) { 163 - methods.updateTrackInfo(id, { 171 + update_track_info(id, { 164 172 name, 165 173 artist, 166 174 albumName: album_name, ··· 256 264 droppable = false 257 265 const path = get_file_path(e) 258 266 if (path !== null) { 259 - methods.setImage(image?.index || 0, path) 267 + set_image(image?.index || 0, path) 260 268 image_edited = true 261 269 load_image(image?.index || 0) 262 270 } 263 271 } 264 272 function cover_keydown(e: KeyboardEvent) { 265 273 if (check_shortcut(e, 'Backspace') && image) { 266 - methods.removeImage(image.index) 274 + remove_image(image.index) 267 275 image_edited = true 268 276 if (image.index < image.totalImages - 1) { 269 277 load_image(image.index) ··· 290 298 } 291 299 } 292 300 function replace_cover(file_path: string) { 293 - methods.setImage(image?.index || 0, file_path) 301 + set_image(image?.index || 0, file_path) 294 302 image_edited = true 295 303 load_image(image?.index || 0) 296 304 } 297 305 function replace_cover_data(data: ArrayBuffer) { 298 - methods.setImageData(image?.index || 0, data) 306 + set_image_data(image?.index || 0, data) 299 307 image_edited = true 300 308 load_image(image?.index || 0) 301 309 }
+23 -22
src/components/TrackList.svelte
··· 19 19 <script lang="ts"> 20 20 import { 21 21 filter, 22 - methods, 23 22 move_tracks, 24 23 remove_from_playlist, 25 24 tracklist_updated, 26 25 get_default_sort_desc, 27 26 delete_tracks_with_item_ids, 28 27 tracks_updated, 29 - } from '../lib/data' 28 + get_tracks_page, 29 + get_track_ids, 30 + load_view_options, 31 + save_view_options, 32 + get_track_by_item_id, 33 + } from '@/lib/data' 30 34 import { new_playback_instance, playing_id } from '../lib/player' 31 35 import { get_duration, format_date, check_mouse_shortcut, check_shortcut } from '../lib/helpers' 32 36 import { tracklist_actions } from '../lib/page' ··· 51 55 $current_playlist_id = params.playlist_id 52 56 } 53 57 54 - let tracks_page = get_tracks_page() 55 - function get_tracks_page() { 56 - return methods.get_tracks_page({ 57 - playlistId: params.playlist_id, 58 - filterQuery: $filter, 59 - sortKey: $sort_key, 60 - sortDesc: $sort_desc, 61 - groupAlbumTracks: $group_album_tracks, 62 - }) 63 - } 58 + let tracks_page = get_tracks_page({ 59 + playlistId: params.playlist_id, 60 + filterQuery: $filter, 61 + sortKey: $sort_key, 62 + sortDesc: $sort_desc, 63 + groupAlbumTracks: $group_album_tracks, 64 + }) 64 65 $: if ($tracklist_updated || $tracks_updated) { 65 - tracks_page = methods.get_tracks_page({ 66 + tracks_page = get_tracks_page({ 66 67 playlistId: params.playlist_id, 67 68 filterQuery: $filter, 68 69 sortKey: $sort_key, ··· 80 81 } else { 81 82 handle_selected_tracks_action({ 82 83 action, 83 - track_ids: methods.get_track_ids(selection.items_as_array()), 84 - all_ids: methods.get_track_ids(tracks_page.itemIds), 84 + track_ids: get_track_ids(selection.items_as_array()), 85 + all_ids: get_track_ids(tracks_page.itemIds), 85 86 first_index: selection.find_first_index(), 86 87 }) 87 88 } ··· 168 169 } 169 170 170 171 function play_row(index: number) { 171 - const all_track_ids = methods.get_track_ids(tracks_page.itemIds) 172 + const all_track_ids = get_track_ids(tracks_page.itemIds) 172 173 new_playback_instance(all_track_ids, index) 173 174 } 174 175 ··· 179 180 drag_item_ids = Array.from(selection.items) 180 181 e.dataTransfer.effectAllowed = 'move' 181 182 if (drag_item_ids.length === 1) { 182 - const { track } = methods.get_track_by_item_id(drag_item_ids[0]) 183 + const { track } = get_track_by_item_id(drag_item_ids[0]) 183 184 dragGhost.set_inner_text(track.artist + ' - ' + track.name) 184 185 } else { 185 186 dragGhost.set_inner_text(drag_item_ids.length + ' items') 186 187 } 187 188 dragged.tracks = { 188 - ids: methods.get_track_ids(drag_item_ids), 189 + ids: get_track_ids(drag_item_ids), 189 190 playlist_indexes: drag_item_ids, 190 191 } 191 192 e.dataTransfer.setDragImage(dragGhost.drag_el, 0, 0) ··· 235 236 236 237 function get_item(item_id: ItemId) { 237 238 try { 238 - return methods.get_track_by_item_id(item_id) 239 + return get_track_by_item_id(item_id) 239 240 } catch (_) { 240 241 return { id: null, track: null } 241 242 } ··· 312 313 ] 313 314 let columns: Column[] = load_columns() 314 315 function load_columns(): Column[] { 315 - let loaded_columns = methods.load_view_options().columns 316 + let loaded_columns = load_view_options().columns 316 317 if (loaded_columns.length === 0) { 317 318 loaded_columns = [...default_columns] 318 319 } ··· 326 327 .filter((col) => col !== undefined) 327 328 } 328 329 function save_columns() { 329 - const view_options = methods.load_view_options() 330 + const view_options = load_view_options() 330 331 view_options.columns = columns.map((col) => col.key) 331 332 if (JSON.stringify(view_options.columns) === JSON.stringify(default_columns)) { 332 333 view_options.columns = [] 333 334 } 334 - methods.save_view_options(view_options) 335 + save_view_options(view_options) 335 336 } 336 337 function on_column_context_menu() { 337 338 ipc_renderer.invoke('show_columns_menu', {
+91 -93
src/lib/data.ts
··· 111 111 if (track_ids.length >= 1) { 112 112 call((addon) => addon.add_tracks_to_playlist(playlist_id, track_ids)) 113 113 tracklist_updated.emit() 114 - methods.save() 114 + save() 115 115 } 116 116 } 117 117 export function remove_from_playlist(playlist_id: TrackListID, item_ids: ItemId[]) { 118 118 call((addon) => addon.remove_from_playlist(playlist_id, item_ids)) 119 119 tracklist_updated.emit() 120 - methods.save() 120 + save() 121 121 } 122 122 export function delete_tracks_with_item_ids(item_ids: ItemId[]) { 123 123 call((addon) => addon.delete_tracks_with_item_ids(item_ids)) 124 124 tracklist_updated.emit() 125 125 queue.removeDeleted() 126 - methods.save() 126 + save() 127 127 } 128 128 export type PlaylistInfo = { 129 129 name: string ··· 136 136 export function new_playlist(info: PlaylistInfo) { 137 137 call((addon) => addon.new_playlist(info.name, info.description, info.isFolder, info.id)) 138 138 track_lists_details_map.refresh() 139 - methods.save() 139 + save() 140 140 } 141 141 export function update_playlist(id: string, name: string, description: string) { 142 142 call((addon) => addon.update_playlist(id, name, description)) 143 143 track_lists_details_map.refresh() 144 144 tracklist_updated.emit() 145 - methods.save() 145 + save() 146 146 } 147 147 export function move_playlist( 148 148 id: TrackListID, ··· 152 152 ) { 153 153 call((addon) => addon.move_playlist(id, from_parent, to_parent, to_index)) 154 154 track_lists_details_map.refresh() 155 - methods.save() 155 + save() 156 156 } 157 157 158 158 export const paths = call((addon) => addon.get_paths()) ··· 177 177 } 178 178 } 179 179 tracklist_updated.emit() 180 - methods.save() 180 + save() 181 181 } 182 182 183 183 export function get_default_sort_desc(field: string) { 184 184 return call((data) => data.get_default_sort_desc(field)) 185 185 } 186 186 187 - export const methods = { 188 - importTrack: (path: string, now: MsSinceUnixEpoch) => { 189 - call((data) => data.import_file(path, now)) 190 - }, 191 - getTrack: (id: TrackID) => { 192 - return call((data) => data.get_track(id)) 193 - }, 194 - get_track_by_item_id(item_id: ItemId) { 195 - return call((data) => data.get_track_by_item_id(item_id)) 196 - }, 197 - get_track_ids(item_ids: ItemId[]) { 198 - return call((data) => data.get_track_ids(item_ids)) 199 - }, 200 - get_tracks_page: (options: TracksPageOptions) => { 201 - return call((data) => data.get_tracks_page(options)) 202 - }, 203 - trackExists: (id: TrackID) => { 204 - return call((data) => data.track_exists(id)) 205 - }, 206 - getTrackList: (id: TrackListID) => { 207 - return call((data) => data.get_track_list(id)) as TrackList 208 - }, 209 - deleteTrackList: (id: TrackListID) => { 210 - call((data) => data.delete_track_list(id)) 211 - if (id === get(current_playlist_id)) { 212 - navigate('/playlist/root') 213 - } 214 - track_lists_details_map.refresh() 215 - methods.save() 216 - }, 217 - save: () => { 218 - return call((addon) => addon.save()) 219 - }, 220 - addPlay: (id: TrackID) => { 221 - call((data) => data.add_play(id)) 222 - tracklist_updated.emit() 223 - methods.save() 224 - }, 225 - addSkip: (id: TrackID) => { 226 - call((data) => data.add_skip(id)) 227 - tracklist_updated.emit() 228 - methods.save() 229 - }, 230 - addPlayTime: (id: TrackID, start_time: MsSinceUnixEpoch, duration_ms: number) => { 231 - call((data) => data.add_play_time(id, start_time, duration_ms)) 232 - methods.save() 233 - }, 234 - readCoverAsync(id: TrackID, index: number) { 235 - return inner_addon.read_cover_async(id, index).catch((error) => { 236 - console.log('Could not read cover', error) 237 - throw error 238 - }) 239 - }, 240 - updateTrackInfo: (id: TrackID, md: TrackMd) => { 241 - call((data) => data.update_track_info(id, md)) 242 - tracks_updated.emit() 243 - methods.save() 244 - }, 245 - loadTags: (id: TrackID) => { 246 - return call((data) => data.load_tags(id)) 247 - }, 248 - getImage: (index: number) => { 249 - return call((data) => data.get_image(index)) 250 - }, 251 - setImage: (index: number, path: string) => { 252 - return call((data) => data.set_image(index, path)) 253 - }, 254 - setImageData: (index: number, bytes: ArrayBuffer) => { 255 - return call((data) => data.set_image_data(index, bytes)) 256 - }, 257 - removeImage: (index: number) => { 258 - return call((data) => data.remove_image(index)) 259 - }, 260 - shownPlaylistFolders: () => { 261 - return call((data) => data.shown_playlist_folders()) 262 - }, 263 - viewFolderSetShow: (id: string, show: boolean) => { 264 - return call((data) => data.view_folder_set_show(id, show)) 265 - }, 266 - load_view_options: () => { 267 - return call((data) => data.load_view_options()) 268 - }, 269 - save_view_options: (view_options: ViewOptions) => { 270 - return call((data) => data.save_view_options(view_options)) 271 - }, 187 + export function import_track(path: string, now: MsSinceUnixEpoch) { 188 + call((data) => data.import_file(path, now)) 189 + } 190 + export function get_track(id: TrackID) { 191 + return call((data) => data.get_track(id)) 192 + } 193 + export function get_track_by_item_id(item_id: ItemId) { 194 + return call((data) => data.get_track_by_item_id(item_id)) 195 + } 196 + export function get_track_ids(item_ids: ItemId[]) { 197 + return call((data) => data.get_track_ids(item_ids)) 198 + } 199 + export function get_tracks_page(options: TracksPageOptions) { 200 + return call((data) => data.get_tracks_page(options)) 201 + } 202 + export function track_exists(id: TrackID) { 203 + return call((data) => data.track_exists(id)) 204 + } 205 + export function get_track_list(id: TrackListID) { 206 + return call((data) => data.get_track_list(id)) as TrackList 207 + } 208 + export function delete_track_list(id: TrackListID) { 209 + call((data) => data.delete_track_list(id)) 210 + if (id === get(current_playlist_id)) { 211 + navigate('/playlist/root') 212 + } 213 + track_lists_details_map.refresh() 214 + save() 215 + } 216 + export function save() { 217 + return call((addon) => addon.save()) 218 + } 219 + export function add_play(id: TrackID) { 220 + call((data) => data.add_play(id)) 221 + tracklist_updated.emit() 222 + save() 223 + } 224 + export function add_skip(id: TrackID) { 225 + call((data) => data.add_skip(id)) 226 + tracklist_updated.emit() 227 + save() 228 + } 229 + export function add_play_time(id: TrackID, start_time: MsSinceUnixEpoch, duration_ms: number) { 230 + call((data) => data.add_play_time(id, start_time, duration_ms)) 231 + save() 232 + } 233 + export function read_cover_async(id: TrackID, index: number) { 234 + return inner_addon.read_cover_async(id, index).catch((error) => { 235 + console.log('Could not read cover', error) 236 + throw error 237 + }) 238 + } 239 + export function update_track_info(id: TrackID, md: TrackMd) { 240 + call((data) => data.update_track_info(id, md)) 241 + tracks_updated.emit() 242 + save() 243 + } 244 + export function load_tags(id: TrackID) { 245 + return call((data) => data.load_tags(id)) 246 + } 247 + export function get_image(index: number) { 248 + return call((data) => data.get_image(index)) 249 + } 250 + export function set_image(index: number, path: string) { 251 + return call((data) => data.set_image(index, path)) 252 + } 253 + export function set_image_data(index: number, bytes: ArrayBuffer) { 254 + return call((data) => data.set_image_data(index, bytes)) 255 + } 256 + export function remove_image(index: number) { 257 + return call((data) => data.remove_image(index)) 258 + } 259 + export function shown_playlist_folders() { 260 + return call((data) => data.shown_playlist_folders()) 261 + } 262 + export function view_folder_set_show(id: string, show: boolean) { 263 + return call((data) => data.view_folder_set_show(id, show)) 264 + } 265 + export function load_view_options() { 266 + return call((data) => data.load_view_options()) 267 + } 268 + export function save_view_options(view_options: ViewOptions) { 269 + return call((data) => data.save_view_options(view_options)) 272 270 } 273 271 274 272 export const filter = writable('') ··· 291 289 export function move_tracks(playlist_id: TrackListID, indexes: ItemId[], to_index: number) { 292 290 call((data) => data.move_tracks(playlist_id, indexes, to_index)) 293 291 tracklist_updated.emit() 294 - methods.save() 292 + save() 295 293 }
+2 -2
src/lib/menus.ts
··· 1 - import { add_tracks_to_playlist, methods, paths, track_lists_details_map } from '@/lib/data' 1 + import { add_tracks_to_playlist, get_track, paths, track_lists_details_map } from '@/lib/data' 2 2 import { flatten_child_lists } from '@/lib/helpers' 3 3 import { ipc_renderer } from '@/lib/window' 4 4 import type { TrackID } from '../../ferrum-addon' ··· 35 35 } else if (action === 'Get Info') { 36 36 open_track_info(all_ids, first_index) 37 37 } else if (action === 'reveal_track_file') { 38 - const track = methods.getTrack(first_track_id) 38 + const track = get_track(first_track_id) 39 39 ipc_renderer.invoke('revealTrackFile', paths.tracksDir, track.file) 40 40 } else if (typeof action === 'object' && action.action === 'Add to Playlist') { 41 41 add_tracks_to_playlist(action.playlist_id, track_ids)
+6 -6
src/lib/player.ts
··· 2 2 import type { Writable } from 'svelte/store' 3 3 import { clamp } from './helpers' 4 4 import quit from './quit' 5 - import { methods, paths } from './data' 5 + import { add_play, add_play_time, add_skip, get_track, paths, read_cover_async } from '@/lib/data' 6 6 import type { Track, TrackID } from '../../ferrum-addon' 7 7 import { ipc_renderer, join_paths } from './window' 8 8 import { queue, set_new_queue, next as queueNext, prev as queuePrev } from './queue' ··· 79 79 return { 80 80 async newFromTrackId(id: TrackID) { 81 81 try { 82 - const buf = await methods.readCoverAsync(id, 0) 82 + const buf = await read_cover_async(id, 0) 83 83 const url = URL.createObjectURL(new Blob([buf], {})) 84 84 set(url) 85 85 } catch (_) { ··· 126 126 } 127 127 128 128 function set_playing_file(id: TrackID, paused = false) { 129 - const track = methods.getTrack(id) 129 + const track = get_track(id) 130 130 const file_url = 'track:' + join_paths(paths.tracksDir, track.file) 131 131 waiting_to_play = !paused 132 132 audio.src = file_url ··· 156 156 function reset_and_save_play_time() { 157 157 const current_id = queue.getCurrent()?.id 158 158 if (set_play_time() >= 1000 && current_id) { 159 - methods.addPlayTime(current_id, start_time, set_play_time()) 159 + add_play_time(current_id, start_time, set_play_time()) 160 160 } 161 161 start_time = Date.now() 162 162 } ··· 225 225 const current_id = queue.getCurrent()?.id 226 226 if (current_id) { 227 227 if (skip) { 228 - methods.addSkip(current_id) 228 + add_skip(current_id) 229 229 } else { 230 - methods.addPlay(current_id) 230 + add_play(current_id) 231 231 } 232 232 reset_and_save_play_time() 233 233 queueNext()
+5 -5
src/lib/queue.ts
··· 1 1 import type { TrackID } from '../../ferrum-addon' 2 2 import { get, writable } from 'svelte/store' 3 - import { methods } from './data' 4 3 import { getter_writable } from './helpers' 5 4 import { ipc_renderer } from './window' 5 + import { track_exists } from '@/lib/data' 6 6 7 7 export const queue_visible = writable(false) 8 8 export function toggle_queue_visibility() { ··· 232 232 } 233 233 export function remove_deleted() { 234 234 const q = queue.get() 235 - const past = q.past.filter((qi) => methods.trackExists(qi.id)) 236 - const current = q.current && methods.trackExists(q.current.item.id) ? q.current : null 237 - const user_queue = q.user_queue.filter((qi) => methods.trackExists(qi.id)) 238 - const auto_queue = q.auto_queue.filter((qi) => methods.trackExists(qi.id)) 235 + const past = q.past.filter((qi) => track_exists(qi.id)) 236 + const current = q.current && track_exists(q.current.item.id) ? q.current : null 237 + const user_queue = q.user_queue.filter((qi) => track_exists(qi.id)) 238 + const auto_queue = q.auto_queue.filter((qi) => track_exists(qi.id)) 239 239 if ( 240 240 past.length !== q.past.length || 241 241 current !== null ||