[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.

Add album track grouping menu bar checkbox

Kasper (Jun 7, 2024, 10:59 AM +0200) 7061b3ad 32231196

+38 -7
+3 -2
CHANGELOG.md
··· 1 1 # Changelog 2 2 3 3 ## Next 4 - - Fix album grouping 4 + - Add View menu bar checkbox for album track grouping 5 + - Use album track grouping when sorting by album, date added, comments, genre, year & artist 5 6 - Fix menu bar checkboxes 6 7 7 8 ## 0.17.3 - 2024 Apr 30 8 - - Sub-sort albums by track number when sorting by album 9 + - Sub-sort albums by track number when sorting by album (album track grouping) 9 10 - Add `Escape` shortcut for de-focusing the sidebar and filter 10 11 - Fix rare error with updating artwork 11 12 - Fix importing of iTunes playlist likes. These aren't visible in the app, but they do get imported. If you previously imported playlists, the likes got lost in Ferrum.
+1
ferrum-addon/addon.d.ts
··· 118 118 length: number 119 119 } 120 120 export function get_page_info(): PageInfo 121 + export function set_group_album_tracks(value: boolean): void 121 122 export function sort(sortKey: string, keepFilter: boolean): void 122 123 export interface SelectionInfo { 123 124 from: number
+2
src-native/data.rs
··· 25 25 pub filter: String, 26 26 pub sort_key: String, 27 27 pub sort_desc: bool, 28 + pub group_album_tracks: bool, 28 29 /// Current tag being edited 29 30 pub current_tag: Option<Tag>, 30 31 } ··· 98 99 filter: "".to_string(), 99 100 sort_key: "index".to_string(), 100 101 sort_desc: true, 102 + group_album_tracks: true, 101 103 current_tag: None, 102 104 }; 103 105 data.open_playlist_track_ids = page::get_track_ids(&data)?;
+8
src-native/page.rs
··· 122 122 }) 123 123 } 124 124 125 + #[napi(js_name = "set_group_album_tracks")] 126 + #[allow(dead_code)] 127 + pub fn set_group_album_tracks(value: bool, env: Env) -> Result<JsUndefined> { 128 + let data: &mut Data = get_data(&env)?; 129 + data.group_album_tracks = value; 130 + env.get_undefined() 131 + } 132 + 125 133 #[napi(js_name = "sort")] 126 134 #[allow(dead_code)] 127 135 pub fn sort_js(sort_key: String, keep_filter: bool, env: Env) -> Result<JsUndefined> {
+5 -4
src-native/sort.rs
··· 115 115 Some(field) => field, 116 116 None => throw!("Field type not found for {sort_key}"), 117 117 }; 118 - let subsort_field = match sort_key { 119 - "dateAdded" | "albumName" | "comments" | "genre" | "year" | "artist" => true, 120 - _ => false, 121 - }; 118 + let subsort_field = data.group_album_tracks 119 + && match sort_key { 120 + "dateAdded" | "albumName" | "comments" | "genre" | "year" | "artist" => true, 121 + _ => false, 122 + }; 122 123 data.open_playlist_track_ids.sort_by(|id_a, id_b| { 123 124 let track_a = tracks.get(id_a).expect("Track ID non-existant (1)"); 124 125 let track_b = tracks.get(id_b).expect("Track ID non-existant (2)");
+5 -1
src/components/TrackList.svelte
··· 15 15 import { onDestroy } from 'svelte' 16 16 import { dragged } from '../lib/drag-drop' 17 17 import * as dragGhost from './DragGhost.svelte' 18 - import type { TrackID } from '../../ferrum-addon' 18 + import type { TrackID } from 'ferrum-addon/addon' 19 19 import { modalCount } from './Modal.svelte' 20 20 21 21 export let onTrackInfo: (allIds: TrackID[], index: number) => void ··· 50 50 51 51 const sortBy = page.sortBy 52 52 $: sortKey = $page.sortKey 53 + 54 + ipcRenderer.on('Group Album Tracks', (_, checked) => { 55 + page.set_group_album_tracks(checked) 56 + }) 53 57 54 58 $: if ($scrollToIndex !== null) { 55 59 virtualList.scrollToItem($scrollToIndex)
+8
src/electron/menubar.ts
··· 168 168 webContents.send('ToggleQuickNav') 169 169 }, 170 170 }, 171 + { 172 + label: 'Group Album Tracks', 173 + type: 'checkbox', 174 + checked: true, 175 + click: (item) => { 176 + webContents.send('Group Album Tracks', item.checked) 177 + }, 178 + }, 171 179 { type: 'separator' }, 172 180 { role: 'reload', accelerator: 'CmdOrCtrl+Option+R' }, 173 181 { role: 'forceReload', accelerator: 'Shift+CmdOrCtrl+Option+R' },
+1
src/electron/typed_ipc.ts
··· 107 107 volumeDown: () => void 108 108 'Show Queue': () => void 109 109 ToggleQuickNav: () => void 110 + 'Group Album Tracks': (checked: boolean) => void 110 111 111 112 selectedTracksAction: ( 112 113 action:
+5
src/lib/data.ts
··· 299 299 refreshIdsAndKeepSelection() 300 300 pageSelection.clear() 301 301 }, 302 + set_group_album_tracks: (value: boolean) => { 303 + call((addon) => addon.set_group_album_tracks(value)) 304 + refreshIdsAndKeepSelection() 305 + pageSelection.clear() 306 + }, 302 307 getTrack: (index: number) => { 303 308 return call((addon) => addon.get_page_track(index)) 304 309 },