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