Migrate to native_db 0.8.1
This commit is contained in:
parent
f4009a7fa7
commit
b1770fc17e
3 changed files with 77 additions and 46 deletions
87
Cargo.lock
generated
87
Cargo.lock
generated
|
@ -26,7 +26,7 @@ dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"version_check",
|
"version_check",
|
||||||
"zerocopy",
|
"zerocopy 0.7.35",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -372,9 +372,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cargo-platform"
|
name = "cargo-platform"
|
||||||
version = "0.1.8"
|
version = "0.1.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc"
|
checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
@ -602,12 +602,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "errno"
|
name = "errno"
|
||||||
version = "0.3.9"
|
version = "0.3.10"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
|
checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -639,9 +639,9 @@ checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fastrand"
|
name = "fastrand"
|
||||||
version = "2.1.0"
|
version = "2.3.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
|
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fdeflate"
|
name = "fdeflate"
|
||||||
|
@ -842,9 +842,9 @@ checksum = "779ae4bf7e8421cf91c0b3b64e7e8b40b862fba4d393f59150042de7c4965a94"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glob"
|
name = "glob"
|
||||||
version = "0.3.1"
|
version = "0.3.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
|
checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hashbrown"
|
name = "hashbrown"
|
||||||
|
@ -1308,9 +1308,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "linux-raw-sys"
|
name = "linux-raw-sys"
|
||||||
version = "0.4.14"
|
version = "0.4.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
|
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "litemap"
|
name = "litemap"
|
||||||
|
@ -1467,13 +1467,14 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "native_db"
|
name = "native_db"
|
||||||
version = "0.7.1"
|
version = "0.8.1"
|
||||||
source = "git+https://github.com/vincent-herlemont/native_db#6daae43c5461e5944f076d40b4026be6c9730107"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "db7c6b50f9889052a3c1bbd3aa70cc33b76ec1761092aeb0ec0e1ac3cfdb881a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"native_db_macro",
|
"native_db_macro",
|
||||||
"native_model",
|
"native_model",
|
||||||
"redb 1.5.1",
|
"redb 1.5.1",
|
||||||
"redb 2.1.3",
|
"redb 2.4.0",
|
||||||
"semver",
|
"semver",
|
||||||
"serde",
|
"serde",
|
||||||
"skeptic",
|
"skeptic",
|
||||||
|
@ -1482,8 +1483,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "native_db_macro"
|
name = "native_db_macro"
|
||||||
version = "0.7.1"
|
version = "0.8.1"
|
||||||
source = "git+https://github.com/vincent-herlemont/native_db#6daae43c5461e5944f076d40b4026be6c9730107"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "434acde56fc4485e0b62533bb2fbc08155ee7e47408b1358348acff556c31b3c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -1492,9 +1494,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "native_model"
|
name = "native_model"
|
||||||
version = "0.4.19"
|
version = "0.4.20"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "360da481893ec9bfa71593193b796400d8616c3b2aa8145b7b72e561224e6259"
|
checksum = "c10f4542302b7fa69ef18b49d93106e27f20b59d695555121d9ed22fe5d716a8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bincode",
|
"bincode",
|
||||||
|
@ -1502,14 +1504,14 @@ dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"skeptic",
|
"skeptic",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"zerocopy",
|
"zerocopy 0.8.14",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "native_model_macro"
|
name = "native_model_macro"
|
||||||
version = "0.4.19"
|
version = "0.4.20"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "35ade955118c8776435064b3c0e95b75e89867ed19eaaf6709a2f3eea9c46420"
|
checksum = "2f385f3d57adaea8d8868e65a0bc821bcb8ba2228bbf87a1c3c6144ac48f3791"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -1835,7 +1837,7 @@ version = "0.2.20"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
|
checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"zerocopy",
|
"zerocopy 0.7.35",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1965,9 +1967,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redb"
|
name = "redb"
|
||||||
version = "2.1.3"
|
version = "2.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e4760ad04a88ef77075ba86ba9ea79b919e6bab29c1764c5747237cd6eaedcaa"
|
checksum = "ea0a72cd7140de9fc3e318823b883abf819c20d478ec89ce880466dc2ef263c6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
@ -2097,15 +2099,15 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustix"
|
name = "rustix"
|
||||||
version = "0.38.34"
|
version = "0.38.43"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
|
checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.6.0",
|
"bitflags 2.6.0",
|
||||||
"errno",
|
"errno",
|
||||||
"libc",
|
"libc",
|
||||||
"linux-raw-sys",
|
"linux-raw-sys",
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -2598,15 +2600,16 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tempfile"
|
name = "tempfile"
|
||||||
version = "3.11.0"
|
version = "3.15.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b8fcd239983515c23a32fb82099f97d0b11b8c72f654ed659363a95c3dad7a53"
|
checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"fastrand",
|
"fastrand",
|
||||||
|
"getrandom",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"rustix",
|
"rustix",
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -3365,7 +3368,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
|
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"byteorder",
|
"byteorder",
|
||||||
"zerocopy-derive",
|
"zerocopy-derive 0.7.35",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "zerocopy"
|
||||||
|
version = "0.8.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a367f292d93d4eab890745e75a778da40909cab4d6ff8173693812f79c4a2468"
|
||||||
|
dependencies = [
|
||||||
|
"zerocopy-derive 0.8.14",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -3379,6 +3391,17 @@ dependencies = [
|
||||||
"syn 2.0.96",
|
"syn 2.0.96",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "zerocopy-derive"
|
||||||
|
version = "0.8.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d3931cb58c62c13adec22e38686b559c86a30565e16ad6e8510a337cedc611e1"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.96",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zerofrom"
|
name = "zerofrom"
|
||||||
version = "0.1.4"
|
version = "0.1.4"
|
||||||
|
|
|
@ -30,8 +30,8 @@ log = "0.4.22"
|
||||||
metaflac = "0.2.7"
|
metaflac = "0.2.7"
|
||||||
mp3-duration = "0.1.10"
|
mp3-duration = "0.1.10"
|
||||||
mp4ameta = "0.11.0"
|
mp4ameta = "0.11.0"
|
||||||
native_db = { git = "https://github.com/vincent-herlemont/native_db" }
|
native_db = "0.8.1"
|
||||||
native_model = "0.4.19"
|
native_model = "0.4.20"
|
||||||
nohash-hasher = "0.2.0"
|
nohash-hasher = "0.2.0"
|
||||||
notify = { version = "6.1.1", default-features = false }
|
notify = { version = "6.1.1", default-features = false }
|
||||||
notify-debouncer-full = { version = "0.3.1", default-features = false }
|
notify-debouncer-full = { version = "0.3.1", default-features = false }
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
use core::clone::Clone;
|
use core::clone::Clone;
|
||||||
use std::collections::HashMap;
|
use std::collections::{BTreeMap, HashMap};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
|
@ -38,13 +38,13 @@ pub mod v1 {
|
||||||
|
|
||||||
#[derive(Debug, Default, Serialize, Deserialize)]
|
#[derive(Debug, Default, Serialize, Deserialize)]
|
||||||
#[native_model(id = 1, version = 1)]
|
#[native_model(id = 1, version = 1)]
|
||||||
#[native_db(primary_key(custom_id))]
|
#[native_db(primary_key(custom_id -> (&str, &str)))]
|
||||||
pub struct PlaylistModel {
|
pub struct PlaylistModel {
|
||||||
#[secondary_key]
|
#[secondary_key]
|
||||||
pub owner: String,
|
pub owner: String,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub duration: Duration,
|
pub duration: Duration,
|
||||||
pub num_songs_by_genre: HashMap<String, u32>,
|
pub num_songs_by_genre: BTreeMap<String, u32>,
|
||||||
pub virtual_paths: Vec<PathBuf>,
|
pub virtual_paths: Vec<PathBuf>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ impl From<PlaylistModel> for PlaylistHeader {
|
||||||
Self {
|
Self {
|
||||||
name: p.name,
|
name: p.name,
|
||||||
duration: p.duration,
|
duration: p.duration,
|
||||||
num_songs_by_genre: p.num_songs_by_genre,
|
num_songs_by_genre: p.num_songs_by_genre.into_iter().collect(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -126,7 +126,7 @@ impl Manager {
|
||||||
.filter_map(|s| s.duration.map(|d| d as u64))
|
.filter_map(|s| s.duration.map(|d| d as u64))
|
||||||
.sum();
|
.sum();
|
||||||
|
|
||||||
let mut num_songs_by_genre = HashMap::<String, u32>::new();
|
let mut num_songs_by_genre = BTreeMap::<String, u32>::new();
|
||||||
for song in &songs {
|
for song in &songs {
|
||||||
for genre in &song.genres {
|
for genre in &song.genres {
|
||||||
*num_songs_by_genre.entry(genre.clone()).or_default() += 1;
|
*num_songs_by_genre.entry(genre.clone()).or_default() += 1;
|
||||||
|
@ -158,7 +158,7 @@ impl Manager {
|
||||||
let name = name.to_owned();
|
let name = name.to_owned();
|
||||||
move || {
|
move || {
|
||||||
let transaction = manager.db.r_transaction()?;
|
let transaction = manager.db.r_transaction()?;
|
||||||
match transaction.get().primary::<PlaylistModel>((&owner, &name)) {
|
match transaction.get().primary::<PlaylistModel>((owner, name)) {
|
||||||
Ok(Some(p)) => Ok(Playlist::from(p)),
|
Ok(Some(p)) => Ok(Playlist::from(p)),
|
||||||
Ok(None) => Err(Error::PlaylistNotFound),
|
Ok(None) => Err(Error::PlaylistNotFound),
|
||||||
Err(e) => Err(Error::NativeDatabase(e)),
|
Err(e) => Err(Error::NativeDatabase(e)),
|
||||||
|
@ -175,11 +175,15 @@ impl Manager {
|
||||||
let name = name.to_owned();
|
let name = name.to_owned();
|
||||||
move || {
|
move || {
|
||||||
let transaction = manager.db.rw_transaction()?;
|
let transaction = manager.db.rw_transaction()?;
|
||||||
transaction.remove::<PlaylistModel>(PlaylistModel {
|
let playlist = match transaction
|
||||||
name: name.to_owned(),
|
.get()
|
||||||
owner: owner.to_owned(),
|
.primary::<PlaylistModel>((owner.as_str(), name.as_str()))
|
||||||
..Default::default()
|
{
|
||||||
})?;
|
Ok(Some(p)) => Ok(p),
|
||||||
|
Ok(None) => Err(Error::PlaylistNotFound),
|
||||||
|
Err(e) => Err(Error::NativeDatabase(e)),
|
||||||
|
}?;
|
||||||
|
transaction.remove::<PlaylistModel>(playlist)?;
|
||||||
transaction.commit()?;
|
transaction.commit()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -278,11 +282,15 @@ mod test {
|
||||||
async fn delete_playlist_golden_path() {
|
async fn delete_playlist_golden_path() {
|
||||||
let ctx = test::ContextBuilder::new(test_name!())
|
let ctx = test::ContextBuilder::new(test_name!())
|
||||||
.user(TEST_USER, TEST_PASSWORD, false)
|
.user(TEST_USER, TEST_PASSWORD, false)
|
||||||
|
.mount(TEST_MOUNT_NAME, "test-data/small-collection")
|
||||||
.build()
|
.build()
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
|
ctx.scanner.run_scan().await.unwrap();
|
||||||
|
let songs = list_all_songs(&ctx).await;
|
||||||
|
|
||||||
ctx.playlist_manager
|
ctx.playlist_manager
|
||||||
.save_playlist(TEST_PLAYLIST_NAME, TEST_USER, Vec::new())
|
.save_playlist(TEST_PLAYLIST_NAME, TEST_USER, songs)
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue