Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package ncspot for openSUSE:Factory checked in at 2022-10-17 14:58:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ncspot (Old) and /work/SRC/openSUSE:Factory/.ncspot.new.2275 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ncspot" Mon Oct 17 14:58:32 2022 rev:8 rq:1012063 version:0.11.2 Changes: -------- --- /work/SRC/openSUSE:Factory/ncspot/ncspot.changes 2022-09-18 18:48:48.702513158 +0200 +++ /work/SRC/openSUSE:Factory/.ncspot.new.2275/ncspot.changes 2022-10-17 14:58:33.738192133 +0200 @@ -1,0 +2,11 @@ +Mon Oct 17 10:36:29 UTC 2022 - Jan-Luca Kiok <[email protected]> + +- Update to version 0.11.2 + Maintenance + * Cleanup: Remove PlayTrackMenu + * Fix: Crash on liked artist but no liked music + Features + * Improve context menus to make the UX/UI more consistent + * Exit gracefully on SIGTERM and SIGHUP + +------------------------------------------------------------------- Old: ---- ncspot-0.11.1.tar.gz New: ---- ncspot-0.11.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ncspot.spec ++++++ --- /var/tmp/diff_new_pack.A7R7jn/_old 2022-10-17 14:58:35.214194969 +0200 +++ /var/tmp/diff_new_pack.A7R7jn/_new 2022-10-17 14:58:35.218194977 +0200 @@ -18,7 +18,7 @@ Name: ncspot -Version: 0.11.1 +Version: 0.11.2 Release: 0 Summary: Ncurses Spotify client License: BSD-2-Clause ++++++ _service ++++++ --- /var/tmp/diff_new_pack.A7R7jn/_old 2022-10-17 14:58:35.246195030 +0200 +++ /var/tmp/diff_new_pack.A7R7jn/_new 2022-10-17 14:58:35.250195038 +0200 @@ -1,6 +1,6 @@ <services> <service name="cargo_vendor" mode="disabled"> - <param name="srcdir">ncspot-0.11.1</param> + <param name="srcdir">ncspot-0.11.2</param> </service> </services> ++++++ ncspot-0.11.1.tar.gz -> ncspot-0.11.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ncspot-0.11.1/Cargo.lock new/ncspot-0.11.2/Cargo.lock --- old/ncspot-0.11.1/Cargo.lock 2022-09-17 14:27:18.000000000 +0200 +++ new/ncspot-0.11.2/Cargo.lock 2022-10-15 12:48:44.000000000 +0200 @@ -298,9 +298,9 @@ [[package]] name = "clang-sys" -version = "1.3.3" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a050e2153c5be08febd6734e29298e844fdb0fa21aeddd63b4eb7baa106c69b" +checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" dependencies = [ "glob", "libc", @@ -309,24 +309,22 @@ [[package]] name = "clap" -version = "3.2.22" +version = "4.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750" +checksum = "6bf8832993da70a4c6d13c581f4463c2bdda27b9bf1c5498dc4365543abe6d6f" dependencies = [ "atty", "bitflags", "clap_lex", - "indexmap", "strsim", "termcolor", - "textwrap", ] [[package]] name = "clap_lex" -version = "0.2.4" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8" dependencies = [ "os_str_bytes", ] @@ -354,6 +352,16 @@ ] [[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] name = "combine" version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -364,19 +372,13 @@ ] [[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] name = "cookie" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94d4706de1b0fa5b132270cddffa8585166037822e260a944fe161acd137ca05" +checksum = "344adc371239ef32293cb1c4fe519592fcf21206c79c02854320afcdf3ab4917" dependencies = [ "percent-encoding", - "time 0.3.14", + "time 0.3.15", "version_check", ] @@ -393,7 +395,7 @@ "publicsuffix", "serde", "serde_json", - "time 0.3.14", + "time 0.3.15", "url", ] @@ -478,12 +480,11 @@ [[package]] name = "crossbeam-utils" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc" +checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac" dependencies = [ "cfg-if", - "once_cell", ] [[package]] @@ -565,20 +566,74 @@ "log", "num 0.4.0", "owning_ref", - "time 0.3.14", + "time 0.3.15", "unicode-segmentation", "unicode-width", "xi-unicode", ] [[package]] +name = "cxx" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19f39818dcfc97d45b03953c1292efc4e80954e1583c4aa770bac1383e2310a4" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e580d70777c116df50c390d1211993f62d40302881e54d4b79727acb83d0199" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56a46460b88d1cec95112c8c363f0e2c39afdb237f60583b0b36343bf627ea9c" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "747b608fecf06b0d72d440f27acc99288207324b793be2c17991839f3d4995ea" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] name = "darling" version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.13.4", + "darling_macro 0.13.4", +] + +[[package]] +name = "darling" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4529658bdda7fd6769b8614be250cdcfc3aeb0ee72fe66f9e41e5e5eb73eac02" +dependencies = [ + "darling_core 0.14.1", + "darling_macro 0.14.1", ] [[package]] @@ -596,12 +651,36 @@ ] [[package]] +name = "darling_core" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "649c91bc01e8b1eac09fb91e8dbc7d517684ca6be8ebc75bb9cafc894f9fdb6f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "syn", +] + +[[package]] name = "darling_macro" version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" dependencies = [ - "darling_core", + "darling_core 0.13.4", + "quote", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc69c5bfcbd2fc09a0f38451d2daf0e372e367986a83906d1b0dbc88134fb5" +dependencies = [ + "darling_core 0.14.1", "quote", "syn", ] @@ -638,19 +717,6 @@ ] [[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version", - "syn", -] - -[[package]] name = "digest" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -737,20 +803,20 @@ [[package]] name = "enumset" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4799cdb24d48f1f8a7a98d06b7fde65a85a2d1e42b25a889f5406aa1fbefe074" +checksum = "19be8061a06ab6f3a6cf21106c873578bf01bd42ad15e0311a9c76161cb1c753" dependencies = [ "enumset_derive", ] [[package]] name = "enumset_derive" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea83a3fbdc1d999ccfbcbee717eab36f8edf2d71693a23ce0d7cca19e085304c" +checksum = "03e7b551eba279bf0fa88b83a46330168c1560a52a94f5126f892f0b364ab3e0" dependencies = [ - "darling", + "darling 0.14.1", "proc-macro2", "quote", "syn", @@ -1110,19 +1176,29 @@ [[package]] name = "iana-time-zone" -version = "0.1.48" +version = "0.1.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "237a0714f28b1ee39ccec0770ccb544eb02c9ef2c82bb096230eefcffa6468b0" +checksum = "f5a6ef98976b22b3b7f2f3a806f858cb862044cfa66805aa3ad84cb3d3b785ed" dependencies = [ "android_system_properties", "core-foundation-sys", + "iana-time-zone-haiku", "js-sys", - "once_cell", "wasm-bindgen", "winapi", ] [[package]] +name = "iana-time-zone-haiku" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fde6edd6cef363e9359ed3c98ba64590ba9eecba2293eb5a723ab32aee8926aa" +dependencies = [ + "cxx", + "cxx-build", +] + +[[package]] name = "ident_case" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1185,9 +1261,9 @@ [[package]] name = "itoa" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" +checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" [[package]] name = "jni" @@ -1211,9 +1287,9 @@ [[package]] name = "jobserver" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" +checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" dependencies = [ "libc", ] @@ -1252,9 +1328,9 @@ [[package]] name = "libc" -version = "0.2.132" +version = "0.2.135" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5" +checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c" [[package]] name = "libdbus-sys" @@ -1442,10 +1518,19 @@ ] [[package]] +name = "link-cplusplus" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369" +dependencies = [ + "cc", +] + +[[package]] name = "lock_api" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f80bf5aacaf25cbfc8210d1cfb718f2bf3b11c4c54e5afe36c236853a8ec390" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" dependencies = [ "autocfg", "scopeguard", @@ -1470,7 +1555,7 @@ "dirs-next 2.0.0", "objc-foundation", "objc_id", - "time 0.3.14", + "time 0.3.15", ] [[package]] @@ -1582,7 +1667,7 @@ [[package]] name = "ncspot" -version = "0.11.1" +version = "0.11.2" dependencies = [ "chrono", "clap", @@ -1612,6 +1697,7 @@ "serde", "serde_cbor", "serde_json", + "signal-hook", "strum 0.24.1", "strum_macros 0.24.3", "tokio", @@ -1673,7 +1759,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c" dependencies = [ - "darling", + "darling 0.13.4", "proc-macro-crate", "proc-macro2", "quote", @@ -1726,13 +1812,13 @@ [[package]] name = "notify-rust" -version = "4.5.8" +version = "4.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a995a3d2834cefa389218e7a35156e8ce544bc95f836900da01ee0b26a07e9d4" +checksum = "368e89ea58df747ce88be669ae44e79783c1d30bfd540ad0fc520b3f41f0b3b0" dependencies = [ "dbus", "mac-notification-sys", - "winrt-notification", + "tauri-winrt-notification", ] [[package]] @@ -1987,9 +2073,9 @@ [[package]] name = "once_cell" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7254b99e31cad77da24b08ebf628882739a608578bb1bcdfc1f9c21260d7c0" +checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" [[package]] name = "opaque-debug" @@ -1999,9 +2085,9 @@ [[package]] name = "openssl" -version = "0.10.41" +version = "0.10.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "618febf65336490dfcf20b73f885f5651a0c89c64c2d4a8c3662585a70bf5bd0" +checksum = "12fc0523e3bd51a692c8850d075d74dc062ccf251c0110668cbd921917118a13" dependencies = [ "bitflags", "cfg-if", @@ -2031,9 +2117,9 @@ [[package]] name = "openssl-sys" -version = "0.9.75" +version = "0.9.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5f9bd0c2710541a3cda73d6f9ac4f1b240de4ae261065d309dbe73d9dceb42f" +checksum = "5230151e44c0f05157effb743e8d517472843121cf9243e8b81393edb5acd9ce" dependencies = [ "autocfg", "cc", @@ -2044,9 +2130,9 @@ [[package]] name = "os_pipe" -version = "1.0.1" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c92f2b54f081d635c77e7120862d48db8e91f7f21cef23ab1b4fe9971c59f55" +checksum = "0dceb7e43f59c35ee1548045b2c72945a5a3bb6ce6d6f07cdc13dc8f6bc4930a" dependencies = [ "libc", "winapi", @@ -2261,33 +2347,33 @@ [[package]] name = "proc-macro2" -version = "1.0.43" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" +checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" dependencies = [ "unicode-ident", ] [[package]] name = "protobuf" -version = "2.27.1" +version = "2.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf7e6d18738ecd0902d30d1ad232c9125985a3422929b16c65517b38adc14f96" +checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" [[package]] name = "protobuf-codegen" -version = "2.27.1" +version = "2.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aec1632b7c8f2e620343439a7dfd1f3c47b18906c4be58982079911482b5d707" +checksum = "033460afb75cf755fcfc16dfaed20b86468082a2ea24e05ac35ab4a099a017d6" dependencies = [ "protobuf", ] [[package]] name = "protobuf-codegen-pure" -version = "2.27.1" +version = "2.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f8122fdb18e55190c796b088a16bdb70cd7acdcd48f7a8b796b58c62e532cc6" +checksum = "95a29399fc94bcd3eeaa951c715f7bea69409b2445356b00519740bcd6ddd865" dependencies = [ "protobuf", "protobuf-codegen", @@ -2301,15 +2387,24 @@ [[package]] name = "publicsuffix" -version = "2.2.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aeeedb0b429dc462f30ad27ef3de97058b060016f47790c066757be38ef792b4" +checksum = "96a8c1bda5ae1af7f99a2962e49df150414a43d62404644d98dd5c3a93d07457" dependencies = [ - "idna 0.2.3", + "idna 0.3.0", "psl-types", ] [[package]] +name = "quick-xml" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea" +dependencies = [ + "memchr", +] + +[[package]] name = "quote" version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2415,9 +2510,9 @@ [[package]] name = "reqwest" -version = "0.11.11" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92" +checksum = "431949c384f4e2ae07605ccaa56d1d9d2ecdb5cadd4f9577ccfab29f2e5149fc" dependencies = [ "base64", "bytes", @@ -2431,10 +2526,10 @@ "hyper-tls", "ipnet", "js-sys", - "lazy_static", "log", "mime", "native-tls", + "once_cell", "percent-encoding", "pin-project-lite", "serde", @@ -2604,6 +2699,12 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] +name = "scratch" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898" + +[[package]] name = "sct" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2644,9 +2745,9 @@ [[package]] name = "serde" -version = "1.0.144" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" +checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" dependencies = [ "serde_derive", ] @@ -2663,9 +2764,9 @@ [[package]] name = "serde_derive" -version = "1.0.144" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" +checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" dependencies = [ "proc-macro2", "quote", @@ -2674,9 +2775,9 @@ [[package]] name = "serde_json" -version = "1.0.85" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" +checksum = "41feea4228a6f1cd09ec7a3593a682276702cd67b5273544757dae23c096f074" dependencies = [ "itoa", "ryu", @@ -2781,9 +2882,9 @@ [[package]] name = "smallvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "socket2" @@ -2870,9 +2971,9 @@ [[package]] name = "syn" -version = "1.0.99" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" +checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1" dependencies = [ "proc-macro2", "quote", @@ -2880,15 +2981,14 @@ ] [[package]] -name = "synstructure" -version = "0.12.6" +name = "tauri-winrt-notification" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +checksum = "c58de036c4d2e20717024de2a3c4bf56c301f07b21bc8ef9b57189fce06f1f3b" dependencies = [ - "proc-macro2", - "quote", - "syn", - "unicode-xid", + "quick-xml", + "strum 0.22.0", + "windows", ] [[package]] @@ -2937,25 +3037,19 @@ ] [[package]] -name = "textwrap" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16" - -[[package]] name = "thiserror" -version = "1.0.35" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c53f98874615aea268107765aa1ed8f6116782501d18e53d08b471733bea6c85" +checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.35" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8b463991b4eab2d801e724172285ec4195c650e8ec79b149e6c2a8e6dd3f783" +checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" dependencies = [ "proc-macro2", "quote", @@ -2986,9 +3080,9 @@ [[package]] name = "time" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3f9a28b618c3a6b9251b6908e9c99e04b9e5c02e6581ccbb67d59c34ef7f9b" +checksum = "d634a985c4d4238ec39cacaed2e7ae552fbd3c476b552c1deac3021b7d7eaf0c" dependencies = [ "itoa", "libc", @@ -3019,9 +3113,9 @@ [[package]] name = "tokio" -version = "1.21.1" +version = "1.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0020c875007ad96677dcc890298f4b942882c5d4eb7cc8f439fc3bf813dc9c95" +checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099" dependencies = [ "autocfg", "bytes", @@ -3029,7 +3123,6 @@ "memchr", "mio", "num_cpus", - "once_cell", "parking_lot 0.12.1", "pin-project-lite", "socket2", @@ -3060,9 +3153,9 @@ [[package]] name = "tokio-stream" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9" +checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" dependencies = [ "futures-core", "pin-project-lite", @@ -3100,9 +3193,9 @@ [[package]] name = "tracing" -version = "0.1.36" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", "pin-project-lite", @@ -3111,9 +3204,9 @@ [[package]] name = "tracing-core" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" dependencies = [ "once_cell", ] @@ -3152,9 +3245,9 @@ [[package]] name = "unicode-ident" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd" +checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" [[package]] name = "unicode-normalization" @@ -3178,12 +3271,6 @@ checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - -[[package]] name = "untrusted" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3222,9 +3309,9 @@ [[package]] name = "uuid" -version = "1.1.2" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd6469f4314d5f1ffec476e05f17cc9a78bc7a27a6a857842170bdf8d6f98d2f" +checksum = "feb41e78f93363bb2df8b0e86a2ca30eed7806ea16ea0c790d757cf93f79be83" dependencies = [ "getrandom", ] @@ -3432,9 +3519,9 @@ [[package]] name = "webpki-roots" -version = "0.22.4" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1c760f0d366a6c24a02ed7816e23e691f5d92291f94d15e836006fd11b04daf" +checksum = "368bfe657969fb01238bb756d351dcade285e0f6fcbd36dcb23359a5169975be" dependencies = [ "webpki", ] @@ -3472,14 +3559,15 @@ [[package]] name = "windows" -version = "0.24.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9f39345ae0c8ab072c0ac7fe8a8b411636aa34f89be19ddd0d9226544f13944" +checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a" dependencies = [ - "windows_i686_gnu 0.24.0", - "windows_i686_msvc 0.24.0", - "windows_x86_64_gnu 0.24.0", - "windows_x86_64_msvc 0.24.0", + "windows_aarch64_msvc 0.39.0", + "windows_i686_gnu 0.39.0", + "windows_i686_msvc 0.39.0", + "windows_x86_64_gnu 0.39.0", + "windows_x86_64_msvc 0.39.0", ] [[package]] @@ -3488,7 +3576,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" dependencies = [ - "windows_aarch64_msvc", + "windows_aarch64_msvc 0.36.1", "windows_i686_gnu 0.36.1", "windows_i686_msvc 0.36.1", "windows_x86_64_gnu 0.36.1", @@ -3502,10 +3590,10 @@ checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" [[package]] -name = "windows_i686_gnu" -version = "0.24.0" +name = "windows_aarch64_msvc" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0866510a3eca9aed73a077490bbbf03e5eaac4e1fd70849d89539e5830501fd" +checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" [[package]] name = "windows_i686_gnu" @@ -3514,10 +3602,10 @@ checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" [[package]] -name = "windows_i686_msvc" -version = "0.24.0" +name = "windows_i686_gnu" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf0ffed56b7e9369a29078d2ab3aaeceea48eb58999d2cff3aa2494a275b95c6" +checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" [[package]] name = "windows_i686_msvc" @@ -3526,10 +3614,10 @@ checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" [[package]] -name = "windows_x86_64_gnu" -version = "0.24.0" +name = "windows_i686_msvc" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384a173630588044205a2993b6864a2f56e5a8c1e7668c07b93ec18cf4888dc4" +checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" [[package]] name = "windows_x86_64_gnu" @@ -3538,10 +3626,10 @@ checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" [[package]] -name = "windows_x86_64_msvc" -version = "0.24.0" +name = "windows_x86_64_gnu" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd8f062d8ca5446358159d79a90be12c543b3a965c847c8f3eedf14b321d399" +checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" [[package]] name = "windows_x86_64_msvc" @@ -3550,6 +3638,12 @@ checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" [[package]] +name = "windows_x86_64_msvc" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" + +[[package]] name = "winreg" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3568,29 +3662,18 @@ ] [[package]] -name = "winrt-notification" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "007a0353840b23e0c6dc73e5b962ff58ed7f6bc9ceff3ce7fe6fbad8d496edf4" -dependencies = [ - "strum 0.22.0", - "windows", - "xml-rs", -] - -[[package]] name = "wl-clipboard-rs" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be5ca3d1bf382a9baf6ef08b635e8f417c83a8a459bc88b4179a663abd8acd8b" +checksum = "981a303dfbb75d659f6612d05a14b2e363c103d24f676a2d44a00d18507a1ad9" dependencies = [ "derive-new", - "derive_more", "libc", "log", - "nix 0.23.1", + "nix 0.24.2", "os_pipe", "tempfile", + "thiserror", "tree_magic_mini", "wayland-client", "wayland-protocols", @@ -3639,11 +3722,11 @@ [[package]] name = "zerocopy-derive" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0fbc82b82efe24da867ee52e015e58178684bd9dd64c34e66bdf21da2582a9f" +checksum = "6505e6815af7de1746a08f69c69606bb45695a17149517680f3b2149713b19a3" dependencies = [ "proc-macro2", + "quote", "syn", - "synstructure", ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ncspot-0.11.1/Cargo.toml new/ncspot-0.11.2/Cargo.toml --- old/ncspot-0.11.1/Cargo.toml 2022-09-17 14:27:18.000000000 +0200 +++ new/ncspot-0.11.2/Cargo.toml 2022-10-15 12:48:44.000000000 +0200 @@ -8,14 +8,14 @@ name = "ncspot" readme = "README.md" repository = "https://github.com/hrkfdn/ncspot" -version = "0.11.1" +version = "0.11.2" [badges] maintenance = {status = "actively-developed"} [dependencies] chrono = "0.4" -clap = "3.2.17" +clap = "4.0.0" clipboard = {version = "0.5", optional = true} crossbeam-channel = "0.5" dbus = {version = "0.9.6", optional = true} @@ -46,8 +46,12 @@ unicode-width = "0.1.9" url = "2.2" cursive_buffered_backend = "0.6.1" + [target.'cfg(target_os = "linux")'.dependencies] -wl-clipboard-rs = {version = "0.6", optional = true} +wl-clipboard-rs = {version = "0.7", optional = true} + +[target.'cfg(unix)'.dependencies] +signal-hook = "0.3.0" [dependencies.rspotify] default-features = false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ncspot-0.11.1/src/commands.rs new/ncspot-0.11.2/src/commands.rs --- old/ncspot-0.11.1/src/commands.rs 2022-09-17 14:27:18.000000000 +0200 +++ new/ncspot-0.11.2/src/commands.rs 2022-10-15 12:48:44.000000000 +0200 @@ -13,7 +13,7 @@ use crate::spotify::{Spotify, VOLUME_PERCENT}; use crate::traits::{IntoBoxedViewExt, ViewExt}; use crate::ui::contextmenu::{ - AddToPlaylistMenu, ContextMenu, PlayTrackMenu, SelectArtistActionMenu, SelectArtistMenu, + AddToPlaylistMenu, ContextMenu, SelectArtistActionMenu, SelectArtistMenu, }; use crate::ui::help::HelpView; use crate::ui::layout::Layout; @@ -308,8 +308,6 @@ s.find_name::<SelectArtistActionMenu>("selectartistaction") { select_artist_action.on_command(s, cmd)? - } else if let Some(mut play_track) = s.find_name::<PlayTrackMenu>("playtrackmenu") { - play_track.on_command(s, cmd)? } else { s.on_layout(|siv, mut l| l.on_command(siv, cmd))? }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ncspot-0.11.1/src/main.rs new/ncspot-0.11.2/src/main.rs --- old/ncspot-0.11.1/src/main.rs 2022-09-17 14:27:18.000000000 +0200 +++ new/ncspot-0.11.2/src/main.rs 2022-10-15 12:48:44.000000000 +0200 @@ -18,6 +18,9 @@ use librespot_playback::audio_backend; use log::{error, info, trace}; +#[cfg(unix)] +use signal_hook::{consts::SIGHUP, consts::SIGTERM, iterator::Signals}; + mod authentication; mod command; mod commands; @@ -103,22 +106,20 @@ .version(env!("CARGO_PKG_VERSION")) .author("Henrik Friedrichsen <[email protected]> and contributors") .about("cross-platform ncurses Spotify client") - .after_help(&*backends) + .after_help(backends) .arg( Arg::new("debug") .short('d') .long("debug") .value_name("FILE") - .help("Enable debug logging to the specified file") - .takes_value(true), + .help("Enable debug logging to the specified file"), ) .arg( Arg::new("basepath") .short('b') .long("basepath") .value_name("PATH") - .help("custom basepath to config/cache files") - .takes_value(true), + .help("custom basepath to config/cache files"), ) .arg( Arg::new("config") @@ -126,16 +127,15 @@ .long("config") .value_name("FILE") .help("Filename of config file in basepath") - .takes_value(true) .default_value("config.toml"), ) .get_matches(); - if let Some(filename) = matches.value_of("debug") { + if let Some(filename) = matches.get_one::<String>("debug") { setup_logging(filename).expect("can't setup logging"); } - if let Some(basepath) = matches.value_of("basepath") { + if let Some(basepath) = matches.get_one::<String>("basepath") { let path = PathBuf::from_str(basepath).expect("invalid path"); if !path.exists() { fs::create_dir_all(&path).expect("could not create basepath directory"); @@ -146,7 +146,9 @@ // Things here may cause the process to abort; we must do them before creating curses windows // otherwise the error message will not be seen by a user let cfg: Arc<crate::config::Config> = Arc::new(Config::new( - matches.value_of("config").unwrap_or("config.toml"), + matches + .get_one::<String>("config") + .unwrap_or(&"config.toml".to_string()), )); let mut credentials = { let cache = Cache::new(Some(config::cache_path("librespot")), None, None, None) @@ -314,9 +316,21 @@ cursive.add_fullscreen_layer(layout.with_name("main")); + #[cfg(unix)] + let mut signals = Signals::new(&[SIGTERM, SIGHUP]).expect("could not register signal handler"); + // cursive event loop while cursive.is_running() { cursive.step(); + #[cfg(unix)] + for signal in signals.pending() { + if signal == SIGTERM || signal == SIGHUP { + info!("Caught {}, cleaning up and closing", signal); + if let Some(data) = cursive.user_data::<UserData>().cloned() { + data.cmd.handle(&mut cursive, Command::Quit); + } + } + } for event in event_manager.msg_iter() { match event { Event::Player(state) => { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ncspot-0.11.1/src/model/album.rs new/ncspot-0.11.2/src/model/album.rs --- old/ncspot-0.11.1/src/model/album.rs 2022-09-17 14:27:18.000000000 +0200 +++ new/ncspot-0.11.2/src/model/album.rs 2022-10-15 12:48:44.000000000 +0200 @@ -302,6 +302,16 @@ ) } + #[inline] + fn is_saved(&self, library: Arc<Library>) -> Option<bool> { + Some(library.is_saved_album(self)) + } + + #[inline] + fn is_playable(&self) -> bool { + true + } + fn as_listitem(&self) -> Box<dyn ListItem> { Box::new(self.clone()) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ncspot-0.11.1/src/model/artist.rs new/ncspot-0.11.2/src/model/artist.rs --- old/ncspot-0.11.1/src/model/artist.rs 2022-09-17 14:27:18.000000000 +0200 +++ new/ncspot-0.11.2/src/model/artist.rs 2022-10-15 12:48:44.000000000 +0200 @@ -202,6 +202,16 @@ .map(|id| format!("https://open.spotify.com/artist/{}", id)) } + #[inline] + fn is_saved(&self, library: Arc<Library>) -> Option<bool> { + Some(library.is_followed_artist(self)) + } + + #[inline] + fn is_playable(&self) -> bool { + true + } + fn as_listitem(&self) -> Box<dyn ListItem> { Box::new(self.clone()) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ncspot-0.11.1/src/model/episode.rs new/ncspot-0.11.2/src/model/episode.rs --- old/ncspot-0.11.1/src/model/episode.rs 2022-09-17 14:27:18.000000000 +0200 +++ new/ncspot-0.11.2/src/model/episode.rs 2022-10-15 12:48:44.000000000 +0200 @@ -110,6 +110,11 @@ Some(format!("https://open.spotify.com/episode/{}", self.id)) } + #[inline] + fn is_playable(&self) -> bool { + true + } + fn as_listitem(&self) -> Box<dyn ListItem> { Box::new(self.clone()) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ncspot-0.11.1/src/model/playlist.rs new/ncspot-0.11.2/src/model/playlist.rs --- old/ncspot-0.11.1/src/model/playlist.rs 2022-09-17 14:27:18.000000000 +0200 +++ new/ncspot-0.11.2/src/model/playlist.rs 2022-10-15 12:48:44.000000000 +0200 @@ -324,6 +324,20 @@ )) } + fn is_saved(&self, library: Arc<Library>) -> Option<bool> { + // save status of personal playlists can't be toggled for safety + if !library.is_followed_playlist(self) { + return None; + } + + Some(library.is_saved_playlist(self)) + } + + #[inline] + fn is_playable(&self) -> bool { + true + } + fn as_listitem(&self) -> Box<dyn ListItem> { Box::new(self.clone()) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ncspot-0.11.1/src/model/show.rs new/ncspot-0.11.2/src/model/show.rs --- old/ncspot-0.11.1/src/model/show.rs 2022-09-17 14:27:18.000000000 +0200 +++ new/ncspot-0.11.2/src/model/show.rs 2022-10-15 12:48:44.000000000 +0200 @@ -150,6 +150,16 @@ Some(format!("https://open.spotify.com/show/{}", self.id)) } + #[inline] + fn is_saved(&self, library: Arc<Library>) -> Option<bool> { + Some(library.is_saved_show(self)) + } + + #[inline] + fn is_playable(&self) -> bool { + true + } + fn as_listitem(&self) -> Box<dyn ListItem> { Box::new(self.clone()) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ncspot-0.11.1/src/model/track.rs new/ncspot-0.11.2/src/model/track.rs --- old/ncspot-0.11.1/src/model/track.rs 2022-09-17 14:27:18.000000000 +0200 +++ new/ncspot-0.11.2/src/model/track.rs 2022-10-15 12:48:44.000000000 +0200 @@ -333,6 +333,16 @@ Some(self.clone()) } + #[inline] + fn is_saved(&self, library: Arc<Library>) -> Option<bool> { + Some(library.is_saved_track(&Playable::Track(self.clone()))) + } + + #[inline] + fn is_playable(&self) -> bool { + true + } + fn as_listitem(&self) -> Box<dyn ListItem> { Box::new(self.clone()) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ncspot-0.11.1/src/queue.rs new/ncspot-0.11.2/src/queue.rs --- old/ncspot-0.11.1/src/queue.rs 2022-09-17 14:27:18.000000000 +0200 +++ new/ncspot-0.11.2/src/queue.rs 2022-10-15 12:48:44.000000000 +0200 @@ -273,9 +273,11 @@ } pub fn play(&self, mut index: usize, reshuffle: bool, shuffle_index: bool) { - if shuffle_index && self.get_shuffle() { + let queue_length = self.queue.read().unwrap().len(); + // The length of the queue must be bigger than 0 or gen_range panics! + if queue_length > 0 && shuffle_index && self.get_shuffle() { let mut rng = rand::thread_rng(); - index = rng.gen_range(0..self.queue.read().unwrap().len()); + index = rng.gen_range(0..queue_length); } if let Some(track) = &self.queue.read().unwrap().get(index) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ncspot-0.11.1/src/traits.rs new/ncspot-0.11.2/src/traits.rs --- old/ncspot-0.11.1/src/traits.rs 2022-09-17 14:27:18.000000000 +0200 +++ new/ncspot-0.11.2/src/traits.rs 2022-10-15 12:48:44.000000000 +0200 @@ -47,6 +47,17 @@ None } + #[allow(unused_variables)] + #[inline] + fn is_saved(&self, library: Arc<Library>) -> Option<bool> { + None + } + + #[inline] + fn is_playable(&self) -> bool { + false + } + fn as_listitem(&self) -> Box<dyn ListItem>; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ncspot-0.11.1/src/ui/contextmenu.rs new/ncspot-0.11.2/src/ui/contextmenu.rs --- old/ncspot-0.11.1/src/ui/contextmenu.rs 2022-09-17 14:27:18.000000000 +0200 +++ new/ncspot-0.11.2/src/ui/contextmenu.rs 2022-10-15 12:48:44.000000000 +0200 @@ -1,4 +1,3 @@ -use std::borrow::Borrow; use std::sync::Arc; use cursive::view::{Margins, ViewWrapper}; @@ -15,6 +14,7 @@ use crate::queue::Queue; #[cfg(feature = "share_clipboard")] use crate::sharing::write_share; +use crate::spotify::PlayerEvent; use crate::traits::{ListItem, ViewExt}; use crate::ui::layout::Layout; use crate::ui::modal::Modal; @@ -25,10 +25,6 @@ dialog: Modal<Dialog>, } -pub struct PlayTrackMenu { - dialog: Modal<Dialog>, -} - pub struct AddToPlaylistMenu { dialog: Modal<Dialog>, } @@ -42,7 +38,6 @@ } enum ContextMenuAction { - PlayTrack(Box<Track>), ShowItem(Box<dyn ListItem>), SelectArtist(Vec<Artist>), SelectArtistAction(Artist), @@ -50,36 +45,14 @@ ShareUrl(String), AddToPlaylist(Box<Track>), ShowRecommendations(Box<Track>), - ToggleTrackSavedStatus(Box<Track>), + ToggleSavedStatus(Box<dyn ListItem>), + Play(Box<dyn ListItem>), + PlayNext(Box<dyn ListItem>), + TogglePlayback, + Queue(Box<dyn ListItem>), } impl ContextMenu { - pub fn play_track_dialog(queue: Arc<Queue>, track: Track) -> NamedView<PlayTrackMenu> { - let track_title = track.title.clone(); - let mut track_action_select = SelectView::<bool>::new(); - track_action_select.add_item("Play now", true); - track_action_select.add_item("Add to queue", false); - track_action_select.set_on_submit(move |s, selected| { - match selected { - true => track.borrow().clone().play(queue.clone()), - false => track.borrow().clone().queue(queue.clone()), - } - s.pop_layer(); - }); - let dialog = Dialog::new() - .title(format!("Play track: {}", track_title)) - .dismiss_button("Cancel") - .padding(Margins::lrtb(1, 1, 1, 0)) - .content(ScrollView::new( - track_action_select.with_name("playtrack_select"), - )); - - PlayTrackMenu { - dialog: Modal::new_ext(dialog), - } - .with_name("playtrackmenu") - } - pub fn add_track_dialog( library: Arc<Library>, spotify: Spotify, @@ -126,7 +99,7 @@ let dialog = Dialog::new() .title("Add track to playlist") - .dismiss_button("Cancel") + .dismiss_button("Close") .padding(Margins::lrtb(1, 1, 1, 0)) .content(ScrollView::new(list_select.with_name("addplaylist_select"))); @@ -159,7 +132,7 @@ let dialog = Dialog::new() .title("Select artist") - .dismiss_button("Cancel") + .dismiss_button("Close") .padding(Margins::lrtb(1, 1, 1, 0)) .content(ScrollView::new(artist_select.with_name("artist_select"))); @@ -210,7 +183,7 @@ "Select action for artist: {}", artist.name.as_str() )) - .dismiss_button("Cancel") + .dismiss_button("Close") .padding(Margins::lrtb(1, 1, 1, 0)) .content(ScrollView::new( artist_action_select.with_name("artist_action_select"), @@ -225,11 +198,34 @@ Dialog::text("This track is already in your playlist") .title("Track already exists") .padding(Margins::lrtb(1, 1, 1, 0)) - .dismiss_button("Cancel") + .dismiss_button("Close") } pub fn new(item: &dyn ListItem, queue: Arc<Queue>, library: Arc<Library>) -> NamedView<Self> { let mut content: SelectView<ContextMenuAction> = SelectView::new(); + + if item.is_playable() { + if item.is_playing(queue.clone()) + && queue.get_spotify().get_current_status() + == PlayerEvent::Paused(queue.get_spotify().get_current_progress()) + { + // the item is the current track, but paused + content.insert_item(0, "Resume", ContextMenuAction::TogglePlayback); + } else if !item.is_playing(queue.clone()) { + // the item is not the current track + content.insert_item(0, "Play", ContextMenuAction::Play(item.as_listitem())); + } else { + // the item is the current track and playing + content.insert_item(0, "Pause", ContextMenuAction::TogglePlayback); + } + content.insert_item( + 1, + "Play next", + ContextMenuAction::PlayNext(item.as_listitem()), + ); + content.insert_item(2, "Queue", ContextMenuAction::Queue(item.as_listitem())); + } + if let Some(artists) = item.artists() { let action = match artists.len() { 0 => None, @@ -244,9 +240,11 @@ ) } } + if let Some(a) = item.album(queue.clone()) { content.add_item("Show album", ContextMenuAction::ShowItem(Box::new(a))); } + #[cfg(feature = "share_clipboard")] { if let Some(url) = item.share_url() { @@ -256,27 +254,26 @@ content.add_item("Share album", ContextMenuAction::ShareUrl(url)); } } + if let Some(t) = item.track() { - content.insert_item( - 0, - "Play track", - ContextMenuAction::PlayTrack(Box::new(t.clone())), - ); content.add_item( "Add to playlist", ContextMenuAction::AddToPlaylist(Box::new(t.clone())), ); content.add_item( "Similar tracks", - ContextMenuAction::ShowRecommendations(Box::new(t.clone())), - ); + ContextMenuAction::ShowRecommendations(Box::new(t)), + ) + } + // If the item is saveable, its save state will be set + if let Some(savestatus) = item.is_saved(library.clone()) { content.add_item( - match library.is_saved_track(&Playable::Track(t.clone())) { - true => "Unsave track", - false => "Save track", + match savestatus { + true => "Unsave", + false => "Save", }, - ContextMenuAction::ToggleTrackSavedStatus(Box::new(t)), - ) + ContextMenuAction::ToggleSavedStatus(item.as_listitem()), + ); } // open detail view of artist/album @@ -288,10 +285,6 @@ s.pop_layer(); match action { - ContextMenuAction::PlayTrack(track) => { - let dialog = Self::play_track_dialog(queue, *track.clone()); - s.add_layer(dialog); - } ContextMenuAction::ShowItem(item) => { if let Some(view) = item.open(queue, library) { s.call_on_name("main", move |v: &mut Layout| v.push_view(view)); @@ -311,10 +304,6 @@ s.call_on_name("main", move |v: &mut Layout| v.push_view(view)); } } - ContextMenuAction::ToggleTrackSavedStatus(track) => { - let mut track: Track = *track.clone(); - track.toggle_saved(library); - } ContextMenuAction::SelectArtist(artists) => { let dialog = Self::select_artist_dialog(library, queue, artists.clone()); s.add_layer(dialog); @@ -324,13 +313,20 @@ Self::select_artist_action_dialog(library, queue, artist.clone()); s.add_layer(dialog); } + ContextMenuAction::ToggleSavedStatus(item) => { + item.as_listitem().toggle_saved(library) + } + ContextMenuAction::Play(item) => item.as_listitem().play(queue), + ContextMenuAction::PlayNext(item) => item.as_listitem().play_next(queue), + ContextMenuAction::TogglePlayback => queue.toggleplayback(), + ContextMenuAction::Queue(item) => item.as_listitem().queue(queue), } }); } let dialog = Dialog::new() .title(item.display_left(library)) - .dismiss_button("Cancel") + .dismiss_button("Close") .padding(Margins::lrtb(1, 1, 1, 0)) .content(content.with_name("contextmenu_select")); Self { @@ -340,13 +336,6 @@ } } -impl ViewExt for PlayTrackMenu { - fn on_command(&mut self, s: &mut Cursive, cmd: &Command) -> Result<CommandResult, String> { - log::info!("playtrack command: {:?}", cmd); - handle_move_command::<bool>(&mut self.dialog, s, cmd, "playtrack_select") - } -} - impl ViewExt for AddToPlaylistMenu { fn on_command(&mut self, s: &mut Cursive, cmd: &Command) -> Result<CommandResult, String> { log::info!("playlist command: {:?}", cmd); @@ -393,10 +382,6 @@ } } -impl ViewWrapper for PlayTrackMenu { - wrap_impl!(self.dialog: Modal<Dialog>); -} - impl ViewWrapper for AddToPlaylistMenu { wrap_impl!(self.dialog: Modal<Dialog>); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ncspot-0.11.1/src/ui/cover.rs new/ncspot-0.11.2/src/ui/cover.rs --- old/ncspot-0.11.1/src/ui/cover.rs 2022-09-17 14:27:18.000000000 +0200 +++ new/ncspot-0.11.2/src/ui/cover.rs 2022-10-15 12:48:44.000000000 +0200 @@ -204,7 +204,7 @@ } }); - let cover_url = self.queue.get_current().map(|t| t.cover_url()).flatten(); + let cover_url = self.queue.get_current().and_then(|t| t.cover_url()); if let Some(url) = cover_url { self.draw_cover(url, printer.offset, printer.size); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ncspot-0.11.1/src/ui/layout.rs new/ncspot-0.11.2/src/ui/layout.rs --- old/ncspot-0.11.1/src/ui/layout.rs 2022-09-17 14:27:18.000000000 +0200 +++ new/ncspot-0.11.2/src/ui/layout.rs 2022-10-15 12:48:44.000000000 +0200 @@ -143,6 +143,7 @@ self.get_focussed_stack_mut().map(|stack| stack.pop()); } + #[allow(clippy::borrowed_box)] fn get_current_screen(&self) -> Option<&Box<dyn ViewExt>> { self.focus .as_ref() @@ -168,6 +169,7 @@ .unwrap_or(false) } + #[allow(clippy::borrowed_box)] fn get_top_view(&self) -> Option<&Box<dyn ViewExt>> { let focussed_stack = self.get_focussed_stack(); if focussed_stack.map(|s| s.len()).unwrap_or_default() > 0 { ++++++ vendor.tar.xz ++++++ /work/SRC/openSUSE:Factory/ncspot/vendor.tar.xz /work/SRC/openSUSE:Factory/.ncspot.new.2275/vendor.tar.xz differ: char 26, line 1
