diff --git a/Cargo.lock b/Cargo.lock index f25a3b0..271bdda 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,12 +11,6 @@ dependencies = [ "gimli", ] -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - [[package]] name = "adler2" version = "2.0.0" @@ -61,9 +55,9 @@ checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] name = "atomicwrites" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7b2dbe9169059af0f821e811180fddc971fc210c776c133c7819ccd6e478db" +checksum = "3ef1bb8d1b645fe38d51dfc331d720fb5fc2c94b440c76cc79c80ff265ca33e3" dependencies = [ "rustix", "tempfile", @@ -72,9 +66,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" @@ -85,7 +79,7 @@ dependencies = [ "addr2line", "cfg-if", "libc", - "miniz_oxide 0.8.0", + "miniz_oxide", "object", "rustc-demangle", "windows-targets", @@ -144,9 +138,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "cc" -version = "1.1.20" +version = "1.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45bcde016d64c21da4be18b655631e5ab6d3107607e71a73a9f53eb48aae23fb" +checksum = "3bbb537bb4a30b90362caddba8f360c0a56bc13d3a5570028e7197204cb54a17" dependencies = [ "shlex", ] @@ -318,9 +312,9 @@ checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fdeflate" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +checksum = "d8090f921a24b04994d9929e204f50b498a33ea6ba559ffaa05e04f7ee7fb5ab" dependencies = [ "simd-adler32", ] @@ -359,12 +353,12 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.33" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" +checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", - "miniz_oxide 0.8.0", + "miniz_oxide", ] [[package]] @@ -401,9 +395,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -475,9 +469,9 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "js-sys" -version = "0.3.55" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", ] @@ -490,9 +484,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" [[package]] name = "libloading" @@ -573,16 +567,6 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" -[[package]] -name = "miniz_oxide" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" -dependencies = [ - "adler", - "simd-adler32", -] - [[package]] name = "miniz_oxide" version = "0.8.0" @@ -590,6 +574,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ "adler2", + "simd-adler32", ] [[package]] @@ -625,16 +610,15 @@ dependencies = [ [[package]] name = "napi" -version = "2.16.10" +version = "3.0.0-alpha.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04409e8c2d61995696e44d2181b79b68c1dd41f7e24a17cde60bbd9f54ddddef" +checksum = "3b9a0181ed74b13126d877e7a4c1f267c4fcb955b417fb884c56cb358827cef4" dependencies = [ "anyhow", "bitflags 2.6.0", "ctor", - "napi-derive", + "napi-build", "napi-sys", - "once_cell", "serde", "serde_json", "tokio", @@ -753,9 +737,12 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "82881c4be219ab5faaf2ad5e5e5ecdff8c66bd7402ca3160975c93b24961afd1" +dependencies = [ + "portable-atomic", +] [[package]] name = "paste" @@ -790,17 +777,23 @@ dependencies = [ [[package]] name = "png" -version = "0.17.13" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" +checksum = "52f9d46a34a05a6a57566bc2bfae066ef07585a6e3fa30fbbdff5936380623f0" dependencies = [ "bitflags 1.3.2", "crc32fast", "fdeflate", "flate2", - "miniz_oxide 0.7.4", + "miniz_oxide", ] +[[package]] +name = "portable-atomic" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" + [[package]] name = "powerfmt" version = "0.2.0" @@ -915,9 +908,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.6" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" dependencies = [ "aho-corasick", "memchr", @@ -927,9 +920,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ "aho-corasick", "memchr", @@ -938,9 +931,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "rustc-demangle" @@ -1001,11 +994,12 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.109" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0652c533506ad7a2e353cce269330d6afd8bdfb6d75e0ace5b35aacbd7b9e9" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -1024,9 +1018,9 @@ checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" [[package]] name = "syn" -version = "2.0.77" +version = "2.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" dependencies = [ "proc-macro2", "quote", @@ -1035,9 +1029,9 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" dependencies = [ "cfg-if", "fastrand", @@ -1048,18 +1042,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 845992e..c15f4ad 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ crate-type = ["cdylib"] napi-build = "2.0" [dependencies] -napi = { version = "2.13", features = [ +napi = { version = "3.0.0-alpha.12", features = [ "serde-json", "napi6", "tokio_rt", diff --git a/src-native/data_js.rs b/src-native/data_js.rs index 720b574..ee3b3ea 100644 --- a/src-native/data_js.rs +++ b/src-native/data_js.rs @@ -1,6 +1,6 @@ use crate::data::Data; use anyhow::{Context, Result}; -use napi::{Env, JsUndefined}; +use napi::Env; pub fn get_data(env: &Env) -> Result<&mut Data> { let data = env.get_instance_data::()?.context("No data")?; @@ -44,8 +44,8 @@ pub fn get_paths(env: Env) -> Result { #[napi(js_name = "save")] #[allow(dead_code)] -pub fn save(env: Env) -> napi::Result { +pub fn save(env: Env) -> Result<()> { let data: &mut Data = get_data(&env)?; data.save()?; - env.get_undefined() + Ok(()) } diff --git a/src-native/itunes_import.rs b/src-native/itunes_import.rs index d15765d..45a48e0 100644 --- a/src-native/itunes_import.rs +++ b/src-native/itunes_import.rs @@ -588,7 +588,7 @@ pub struct ItunesImport { #[napi] impl ItunesImport { #[napi(factory)] - pub fn new(env: Env) -> napi::Result { + pub fn new(env: Env) -> Result { let data = get_data(&env)?; Ok(Self { new_library: Some(data.library.clone()).into(), @@ -596,11 +596,11 @@ impl ItunesImport { }) } #[napi] - pub async fn start(&self, path: String, tracks_dir: String) -> napi::Result { + pub async fn start(&self, path: String, tracks_dir: String) -> Result { Ok(import_itunes(self, path, tracks_dir).await?) } #[napi] - pub fn finish(&mut self, env: Env) -> napi::Result<()> { + pub fn finish(&mut self, env: Env) -> Result<()> { let data = get_data(&env)?; let itunes_track_paths = &mut *self.itunes_track_paths.lock().unwrap(); for (itunes_path, ferrum_file) in itunes_track_paths { diff --git a/src-native/tracks/cover.rs b/src-native/tracks/cover.rs index 070a0b0..d4ed0b3 100644 --- a/src-native/tracks/cover.rs +++ b/src-native/tracks/cover.rs @@ -9,7 +9,7 @@ use image::codecs::jpeg::JpegEncoder; use image::codecs::png::PngEncoder; use image::{ImageEncoder, ImageFormat, ImageReader}; use lazy_static::lazy_static; -use napi::bindgen_prelude::Buffer; +use napi::bindgen_prelude::{Buffer, PromiseRaw}; use napi::{Env, JsBuffer, JsObject, Task}; use redb::{Database, TableDefinition}; use std::fs; @@ -223,7 +223,7 @@ struct ReadCover(PathBuf, usize); impl Task for ReadCover { type Output = Option>; type JsValue = Option; - fn compute(&mut self) -> napi::Result { + fn compute(&mut self) -> napi::Result>> { let path = &self.0; let index = self.1; @@ -237,7 +237,7 @@ impl Task for ReadCover { Ok(Some(image.data)) } - fn resolve(&mut self, env: Env, output: Self::Output) -> napi::Result { + fn resolve(&mut self, env: Env, output: Self::Output) -> napi::Result> { match output { Some(output) => Ok(Some(env.create_buffer_copy(output)?.into_raw())), None => Ok(None), @@ -249,11 +249,15 @@ impl Task for ReadCover { ts_return_type = "Promise" )] #[allow(dead_code)] -pub fn read_cover_async(track_id: String, index: u16, env: Env) -> napi::Result { +pub fn read_cover_async( + track_id: String, + index: u16, + env: Env, +) -> Result>> { let data: &mut Data = get_data(&env)?; let track = id_to_track(&env, &track_id)?; let tracks_dir = &data.paths.tracks_dir; let file_path = tracks_dir.join(&track.file); let task = ReadCover(file_path, index.into()); - env.spawn(task).map(|t| t.promise_object()) + Ok(env.spawn(task).map(|t| t.promise_object())?) }