[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 `LOCAL_DATA` environment variable

Kasper (Sep 17, 2024, 6:10 PM +0200) 74de1851 a506e264

+36 -13
+1 -1
ferrum-addon/addon.d.ts
··· 4 4 /* auto-generated by NAPI-RS */ 5 5 6 6 export declare function get_artists(): Array<string> 7 - export declare function load_data(isDev: boolean, libraryPath?: string | undefined | null): void 7 + export declare function load_data(isDev: boolean, localDataPath?: string | undefined | null, libraryPath?: string | undefined | null): void 8 8 export interface PathsJs { 9 9 libraryDir: string 10 10 tracksDir: string
+19 -7
src-native/data.rs
··· 62 62 None => &self.open_playlist_track_ids, 63 63 } 64 64 } 65 - pub fn load(is_dev: bool, library_path: Option<String>) -> UniResult<Data> { 65 + pub fn load( 66 + is_dev: bool, 67 + local_data_path: Option<String>, 68 + library_path: Option<String>, 69 + ) -> UniResult<Data> { 66 70 if is_dev { 67 71 println!("Starting in dev mode"); 68 72 } ··· 79 83 library_dir: library_dir.clone(), 80 84 tracks_dir: library_dir.join("Tracks"), 81 85 library_json: library_dir.join("Library.json"), 82 - local_data_dir: dirs::data_local_dir() 83 - .ok_or("Local data folder not found")? 84 - .join("space.kasper.ferrum.dev"), 86 + local_data_dir: match local_data_path { 87 + Some(path) => PathBuf::from(path), 88 + None => env::current_dir() 89 + .unwrap() 90 + .join("src-native") 91 + .join("appdata") 92 + .join("local_data"), 93 + }, 85 94 } 86 95 } else { 87 96 let library_dir = match library_path { ··· 95 104 library_dir: library_dir.clone(), 96 105 tracks_dir: library_dir.join("Tracks"), 97 106 library_json: library_dir.join("Library.json"), 98 - local_data_dir: dirs::data_local_dir() 99 - .ok_or("Local data folder not found")? 100 - .join("space.kasper.ferrum"), 107 + local_data_dir: match local_data_path { 108 + Some(path) => PathBuf::from(path), 109 + None => dirs::data_local_dir() 110 + .ok_or("Local data folder not found")? 111 + .join("space.kasper.ferrum"), 112 + }, 101 113 } 102 114 }; 103 115
+7 -2
src-native/data_js.rs
··· 8 8 9 9 #[napi(js_name = "load_data")] 10 10 #[allow(dead_code)] 11 - pub fn load_data(is_dev: bool, library_path: Option<String>, env: Env) -> Result<()> { 12 - let data = Data::load(is_dev, library_path)?; 11 + pub fn load_data( 12 + is_dev: bool, 13 + local_data_path: Option<String>, 14 + library_path: Option<String>, 15 + env: Env, 16 + ) -> Result<()> { 17 + let data = Data::load(is_dev, local_data_path, library_path)?; 13 18 env.set_instance_data(data, 0, |_ctx| {})?; 14 19 return Ok(()); 15 20 }
+5 -2
src/electron/main.ts
··· 28 28 }) 29 29 30 30 const app_data = app.getPath('appData') 31 + const local_data_path = process.env.LOCAL_DATA ? path.resolve(process.env.LOCAL_DATA) : null 31 32 if (is.dev) { 32 - const electron_data_path = path.join(app_data, 'space.kasper.ferrum.dev', 'Electron Data') 33 + const data_path = local_data_path ?? path.join(__dirname, '../../src-native/appdata/local_data') 34 + const electron_data_path = path.join(data_path, 'Electron Data') 33 35 app.setPath('userData', electron_data_path) 34 36 } else { 35 - const electron_data_path = path.join(app_data, 'space.kasper.ferrum', 'Electron Data') 37 + const data_path = local_data_path ?? path.join(app_data, 'space.kasper.ferrum') 38 + const electron_data_path = path.join(data_path, 'Electron Data') 36 39 app.setPath('userData', electron_data_path) 37 40 } 38 41
+1
src/electron/preload.ts
··· 4 4 5 5 window.addon = addon 6 6 window.is_dev = is.dev 7 + window.local_data_path = process.env.LOCAL_DATA 7 8 window.library_path = process.env.LIBRARY 8 9 window.is_mac = is.mac 9 10 window.is_windows = is.windows
+2 -1
src/lib/data.ts
··· 12 12 import { queue } from './queue' 13 13 14 14 export const is_dev = window.is_dev 15 + export const local_data_path = window.local_data_path 15 16 export const library_path = window.library_path 16 17 export const is_mac = window.is_mac 17 18 export const is_windws = window.is_windows ··· 19 20 // eslint-disable-next-line @typescript-eslint/naming-convention 20 21 export const ItunesImport = inner_addon.ItunesImport 21 22 22 - call((addon) => addon.load_data(is_dev, library_path)) 23 + call((addon) => addon.load_data(is_dev, local_data_path, library_path)) 23 24 24 25 export const view_as_songs: ViewAs.Songs = 0 25 26 export const view_as_artists: ViewAs.Artists = 1
+1
src/lib/window.ts
··· 15 15 interface Window { 16 16 addon: typeof Addon 17 17 is_dev: boolean 18 + local_data_path?: string 18 19 library_path?: string 19 20 is_mac: boolean 20 21 is_windows: boolean