A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita
audio
rust
zig
deno
mpris
rockbox
mpd
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}