[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 deleted tracks from queue

Kasper (Oct 20, 2022, 8:24 AM +0200) 210ab446 12aca777

+32 -1
+1
CHANGELOG.md
··· 15 15 - Fix sidebar icons showing over dialogs 16 16 - Fix playlist liked/disliked types 17 17 - Fix page playlist info not refreshing when edited 18 + - Fix tracks staying in queue after being deleted from library 18 19 19 20 ## 0.15.0 - 2022 Sep 22 20 21 - Support pasting track artworks
+1
ferrum-addon/addon.d.ts
··· 162 162 comments: string 163 163 } 164 164 export function get_track(id: string): Track 165 + export function track_exists(id: string): boolean 165 166 export function add_play(trackId: string): void 166 167 export function add_skip(trackId: string): void 167 168 export function add_play_time(id: TrackID, start: MsSinceUnixEpoch, durMs: number): void
+8
src-native/tracks/mod.rs
··· 29 29 Ok(track.clone()) 30 30 } 31 31 32 + #[napi(js_name = "track_exists")] 33 + #[allow(dead_code)] 34 + pub fn track_exists(id: String, env: Env) -> Result<bool> { 35 + let data: &mut Data = get_data(&env)?; 36 + let tracks = &data.library.tracks; 37 + Ok(tracks.contains_key(&id)) 38 + } 39 + 32 40 #[napi(js_name = "add_play")] 33 41 #[allow(dead_code)] 34 42 pub fn add_play(track_id: String, env: Env) -> Result<()> {
+5
src/lib/data.ts
··· 2 2 import { ipcRenderer } from '@/lib/window' 3 3 import type { MsSinceUnixEpoch, TrackID, TrackListID, TrackMd } from 'ferrum-addon' 4 4 import { selection as pageSelection } from './page' 5 + import { queue } from './queue' 5 6 6 7 export const isDev = window.isDev 7 8 export const isMac = window.isMac ··· 112 113 call((addon) => addon.delete_tracks_in_open(indexes)) 113 114 page.refreshIdsAndKeepSelection() 114 115 pageSelection.clear() 116 + queue.removeDeleted() 115 117 methods.save() 116 118 } 117 119 export type PlaylistInfo = { ··· 171 173 }, 172 174 getTrack: (id: TrackID) => { 173 175 return call((data) => data.get_track(id)) 176 + }, 177 + trackExists: (id: TrackID) => { 178 + return call((data) => data.track_exists(id)) 174 179 }, 175 180 getTrackList: (id: TrackListID) => { 176 181 return call((data) => data.get_track_list(id))
+17 -1
src/lib/queue.ts
··· 1 1 /* eslint-disable @typescript-eslint/no-non-null-assertion */ 2 2 import type { TrackID } from 'ferrum-addon' 3 3 import { writable } from 'svelte/store' 4 + import { methods } from './data' 4 5 import { getterWritable } from './helpers' 5 6 6 7 export const queueVisible = writable(false) ··· 45 46 prependToUserQueue, 46 47 appendToUserQueue, 47 48 removeIndexes, 49 + removeDeleted, 48 50 } 49 51 })() 50 52 ··· 142 144 return q 143 145 }) 144 146 } 147 + export function removeDeleted() { 148 + const q = queue.get() 149 + const past = q.past.filter((qi) => methods.trackExists(qi.id)) 150 + const userQueue = q.userQueue.filter((qi) => methods.trackExists(qi.id)) 151 + const autoQueue = q.autoQueue.filter((qi) => methods.trackExists(qi.id)) 152 + if ( 153 + past.length !== q.past.length || 154 + userQueue.length !== q.userQueue.length || 155 + autoQueue.length !== q.autoQueue.length 156 + ) { 157 + queue.set({ userQueue, autoQueue, past }) 158 + } 159 + } 145 160 146 161 export function next() { 147 162 const q = queue.get() ··· 167 182 export function setNewQueue(newIds: TrackID[], newCurrentIndex: number) { 168 183 const autoQueue = newIds.splice(newCurrentIndex + 1) 169 184 queue.set({ 170 - userQueue: [], 185 + userQueue: [{ qId: 23818328, id: 'dss' }], 171 186 autoQueue: autoQueue.map(newQueueItem), 172 187 past: newIds.map(newQueueItem), 173 188 }) 189 + queue.removeDeleted() 174 190 }