A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 53 lines 1.1 kB view raw
1use std::collections::HashMap; 2 3use anyhow::Error; 4use rockbox_library::{entity, repo}; 5use sqlx::{Pool, Sqlite}; 6 7#[derive(Clone)] 8pub struct KV<V> { 9 store: HashMap<String, V>, 10} 11 12impl<V> KV<V> { 13 pub fn new() -> Self { 14 Self { 15 store: HashMap::new(), 16 } 17 } 18 19 pub fn get(&self, key: &str) -> Option<&V> { 20 self.store.get(key) 21 } 22 23 pub fn set(&mut self, key: &str, value: V) { 24 self.store.insert(key.to_string(), value); 25 } 26 27 pub fn remove(&mut self, key: &str) { 28 self.store.remove(key); 29 } 30 31 pub fn keys(&self) -> Vec<String> { 32 self.store.keys().cloned().collect() 33 } 34 35 pub fn values(&self) -> Vec<&V> { 36 self.store.values().collect() 37 } 38 39 pub fn id(&self, key: &str) -> Option<usize> { 40 self.keys().iter().position(|x| x == key) 41 } 42} 43 44pub async fn build_tracks_kv(pool: Pool<Sqlite>) -> Result<KV<entity::track::Track>, Error> { 45 let tracks = repo::track::all(pool.clone()).await?; 46 let mut kv = KV::new(); 47 48 for track in tracks { 49 kv.set(&track.path, track.clone()); 50 } 51 52 Ok(kv) 53}