From 86cf5542beea6535ebc27cdf9a3a9967a253efec Mon Sep 17 00:00:00 2001 From: MCorange Date: Thu, 21 Nov 2024 22:52:57 +0200 Subject: [PATCH] Added, but disabled icon dl impl. Player improvements --- Cargo.lock | 982 ++++++- Cargo.toml | 3 +- manifest.json | 2428 +++++++++-------- xmpd-cache/Cargo.toml | 3 + xmpd-cache/src/downloader/icon.rs | 133 + xmpd-cache/src/lib.rs | 89 +- xmpd-gui/src/components/player.rs | 165 +- xmpd-gui/src/components/song_list/mod.rs | 44 +- .../src/components/song_list/song_list_nav.rs | 2 +- xmpd-gui/src/main_window.rs | 9 + xmpd-manifest/src/song.rs | 41 +- 11 files changed, 2643 insertions(+), 1256 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 90d2631..e6e4ffd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -93,6 +93,15 @@ dependencies = [ "winit", ] +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + [[package]] name = "adler2" version = "2.0.0" @@ -122,6 +131,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "aligned-vec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" + [[package]] name = "allocator-api2" version = "0.2.18" @@ -168,7 +183,7 @@ dependencies = [ "ndk-context", "ndk-sys", "num_enum", - "thiserror", + "thiserror 1.0.68", ] [[package]] @@ -241,6 +256,12 @@ version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8" +[[package]] +name = "arbitrary" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" + [[package]] name = "arboard" version = "3.4.1" @@ -256,6 +277,17 @@ dependencies = [ "x11rb", ] +[[package]] +name = "arg_enum_proc_macro" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "arrayref" version = "0.3.9" @@ -391,7 +423,7 @@ dependencies = [ "polling 2.8.0", "rustix 0.37.27", "slab", - "socket2", + "socket2 0.4.10", "waker-fn", ] @@ -593,6 +625,44 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +[[package]] +name = "av1-grain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" +dependencies = [ + "anyhow", + "arrayvec", + "log", + "nom", + "num-rational", + "v_frame", +] + +[[package]] +name = "avif-serialize" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e335041290c43101ca215eed6f43ec437eb5a42125573f600fc3fa42b9bddd62" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] + [[package]] name = "base64" version = "0.21.7" @@ -614,11 +684,11 @@ dependencies = [ "bitflags 2.6.0", "cexpr", "clang-sys", - "itertools", + "itertools 0.13.0", "proc-macro2", "quote", "regex", - "rustc-hash", + "rustc-hash 1.1.0", "shlex", "syn 2.0.87", ] @@ -638,6 +708,12 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + [[package]] name = "bitflags" version = "1.3.2" @@ -650,6 +726,12 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +[[package]] +name = "bitstream-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" + [[package]] name = "block" version = "0.1.6" @@ -725,6 +807,12 @@ dependencies = [ "piper", ] +[[package]] +name = "built" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c360505aed52b7ec96a3636c3f039d99103c37d1d9b4f7a8c743d3ea9ffcd03b" + [[package]] name = "bumpalo" version = "3.16.0" @@ -757,6 +845,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + [[package]] name = "bytes" version = "1.8.0" @@ -774,7 +868,7 @@ dependencies = [ "polling 3.7.3", "rustix 0.38.39", "slab", - "thiserror", + "thiserror 1.0.68", ] [[package]] @@ -788,7 +882,7 @@ dependencies = [ "polling 3.7.3", "rustix 0.38.39", "slab", - "thiserror", + "thiserror 1.0.68", ] [[package]] @@ -850,6 +944,16 @@ dependencies = [ "nom", ] +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -1152,12 +1256,37 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + [[package]] name = "crypto-common" version = "0.1.6" @@ -1285,7 +1414,7 @@ dependencies = [ "glow", "glutin", "glutin-winit", - "image", + "image 0.24.9", "js-sys", "log", "objc", @@ -1294,11 +1423,11 @@ dependencies = [ "raw-window-handle 0.5.2", "raw-window-handle 0.6.2", "static_assertions", - "thiserror", + "thiserror 1.0.68", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "web-time", + "web-time 0.2.4", "winapi", "winit", ] @@ -1328,9 +1457,9 @@ dependencies = [ "egui", "epaint", "log", - "thiserror", + "thiserror 1.0.68", "type-map", - "web-time", + "web-time 0.2.4", "wgpu", "winit", ] @@ -1347,7 +1476,7 @@ dependencies = [ "log", "raw-window-handle 0.6.2", "smithay-clipboard", - "web-time", + "web-time 0.2.4", "webbrowser", "winit", ] @@ -1361,7 +1490,7 @@ dependencies = [ "egui", "ehttp", "enum-map", - "image", + "image 0.24.9", "log", "mime_guess2", "resvg", @@ -1582,6 +1711,21 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "exr" +version = "1.73.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0" +dependencies = [ + "bit_field", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + [[package]] name = "extended" version = "0.1.0" @@ -1628,6 +1772,12 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "foreign-types" version = "0.5.0" @@ -1671,6 +1821,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", + "futures-sink", ] [[package]] @@ -1780,10 +1931,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] +[[package]] +name = "gif" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + [[package]] name = "gl_generator" version = "0.14.0" @@ -1905,7 +2074,7 @@ checksum = "6f56f6318968d03c18e1bcf4857ff88c61157e9da8e47c5f29055d60e1228884" dependencies = [ "log", "presser", - "thiserror", + "thiserror 1.0.68", "winapi", "windows 0.52.0", ] @@ -1930,6 +2099,35 @@ dependencies = [ "bitflags 2.6.0", ] +[[package]] +name = "h2" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + [[package]] name = "hashbrown" version = "0.14.5" @@ -1956,7 +2154,7 @@ dependencies = [ "com", "libc", "libloading 0.8.5", - "thiserror", + "thiserror 1.0.68", "widestring", "winapi", ] @@ -2006,12 +2204,109 @@ version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62adaabb884c94955b19907d60019f4e145d091c75345379e70d1ee696f7854f" +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" + [[package]] name = "humantime" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +[[package]] +name = "hyper" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +dependencies = [ + "futures-util", + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2 0.5.7", + "tokio", + "tower-service", + "tracing", +] + [[package]] name = "icrate" version = "0.0.4" @@ -2046,12 +2341,51 @@ dependencies = [ "png", ] +[[package]] +name = "image" +version = "0.25.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b" +dependencies = [ + "bytemuck", + "byteorder-lite", + "color_quant", + "exr", + "gif", + "image-webp", + "num-traits", + "png", + "qoi", + "ravif", + "rayon", + "rgb", + "tiff", + "zune-core", + "zune-jpeg", +] + +[[package]] +name = "image-webp" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e031e8e3d94711a9ccb5d6ea357439ef3dcbed361798bd4071dc4d9793fbe22f" +dependencies = [ + "byteorder-lite", + "quick-error", +] + [[package]] name = "imagesize" version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" +[[package]] +name = "imgref" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" + [[package]] name = "indexmap" version = "2.6.0" @@ -2071,6 +2405,17 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "interpolate_name" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "io-lifetimes" version = "1.0.11" @@ -2082,12 +2427,27 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "ipnet" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" + [[package]] name = "is_terminal_polyfill" version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.13.0" @@ -2114,7 +2474,7 @@ dependencies = [ "combine", "jni-sys", "log", - "thiserror", + "thiserror 1.0.68", "walkdir", "windows-sys 0.45.0", ] @@ -2134,6 +2494,12 @@ dependencies = [ "libc", ] +[[package]] +name = "jpeg-decoder" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" + [[package]] name = "js-sys" version = "0.3.72" @@ -2175,6 +2541,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + [[package]] name = "lewton" version = "0.10.2" @@ -2192,6 +2564,16 @@ version = "0.2.161" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" +[[package]] +name = "libfuzzer-sys" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b9569d2f74e257076d8c6bfa73fb505b46b851e51ddaecc825944aa3bed17fa" +dependencies = [ + "arbitrary", + "cc", +] + [[package]] name = "libloading" version = "0.7.4" @@ -2257,6 +2639,15 @@ version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +[[package]] +name = "loop9" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +dependencies = [ + "imgref", +] + [[package]] name = "mach2" version = "0.4.2" @@ -2275,6 +2666,16 @@ dependencies = [ "libc", ] +[[package]] +name = "maybe-rayon" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" +dependencies = [ + "cfg-if", + "rayon", +] + [[package]] name = "memchr" version = "2.7.4" @@ -2355,6 +2756,18 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "wasi", + "windows-sys 0.52.0", +] + [[package]] name = "naga" version = "0.19.2" @@ -2368,10 +2781,10 @@ dependencies = [ "indexmap", "log", "num-traits", - "rustc-hash", + "rustc-hash 1.1.0", "spirv", "termcolor", - "thiserror", + "thiserror 1.0.68", "unicode-xid", ] @@ -2388,7 +2801,7 @@ dependencies = [ "num_enum", "raw-window-handle 0.5.2", "raw-window-handle 0.6.2", - "thiserror", + "thiserror 1.0.68", ] [[package]] @@ -2406,6 +2819,12 @@ dependencies = [ "jni-sys", ] +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + [[package]] name = "nix" version = "0.26.4" @@ -2447,6 +2866,22 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "noop_proc_macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + [[package]] name = "num-derive" version = "0.4.2" @@ -2458,6 +2893,26 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -2649,6 +3104,15 @@ dependencies = [ "cc", ] +[[package]] +name = "object" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +dependencies = [ + "memchr", +] + [[package]] name = "oboe" version = "0.6.1" @@ -2895,6 +3359,34 @@ name = "profiling" version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" +dependencies = [ + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" +dependencies = [ + "quote", + "syn 2.0.87", +] + +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quick-xml" @@ -2905,6 +3397,58 @@ dependencies = [ "memchr", ] +[[package]] +name = "quinn" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.0.0", + "rustls", + "socket2 0.5.7", + "thiserror 2.0.3", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +dependencies = [ + "bytes", + "getrandom", + "rand", + "ring", + "rustc-hash 2.0.0", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.3", + "tinyvec", + "tracing", + "web-time 1.1.0", +] + +[[package]] +name = "quinn-udp" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a626c6807713b15cac82a6acaccd6043c9a5408c24baae07611fec3f243da" +dependencies = [ + "cfg_aliases 0.2.1", + "libc", + "once_cell", + "socket2 0.5.7", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "quote" version = "1.0.37" @@ -2944,6 +3488,56 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rav1e" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" +dependencies = [ + "arbitrary", + "arg_enum_proc_macro", + "arrayvec", + "av1-grain", + "bitstream-io", + "built", + "cfg-if", + "interpolate_name", + "itertools 0.12.1", + "libc", + "libfuzzer-sys", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive", + "num-traits", + "once_cell", + "paste", + "profiling", + "rand", + "rand_chacha", + "simd_helpers", + "system-deps", + "thiserror 1.0.68", + "v_frame", + "wasm-bindgen", +] + +[[package]] +name = "ravif" +version = "0.11.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2413fd96bd0ea5cdeeb37eaf446a22e6ed7b981d792828721e74ded1980a45c6" +dependencies = [ + "avif-serialize", + "imgref", + "loop9", + "quick-error", + "rav1e", + "rayon", + "rgb", +] + [[package]] name = "raw-window-handle" version = "0.5.2" @@ -2956,6 +3550,26 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "rctree" version = "0.5.0" @@ -2988,7 +3602,7 @@ checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", "libredox", - "thiserror", + "thiserror 1.0.68", ] [[package]] @@ -3026,6 +3640,50 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" +[[package]] +name = "reqwest" +version = "0.12.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pemfile", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "windows-registry", +] + [[package]] name = "resvg" version = "0.37.0" @@ -3105,12 +3763,24 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3cd14fd5e3b777a7422cca79358c57a8f6e3a703d9ac187448d0daf220c2407f" +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + [[package]] name = "rustc-hash" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" + [[package]] name = "rustix" version = "0.37.27" @@ -3153,11 +3823,23 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "rustls-pki-types" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" +dependencies = [ + "web-time 1.1.0", +] [[package]] name = "rustls-webpki" @@ -3262,6 +3944,18 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "sha1" version = "0.10.6" @@ -3294,6 +3988,15 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +[[package]] +name = "simd_helpers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" +dependencies = [ + "quote", +] + [[package]] name = "simplecss" version = "0.2.1" @@ -3347,7 +4050,7 @@ dependencies = [ "log", "memmap2", "rustix 0.38.39", - "thiserror", + "thiserror 1.0.68", "wayland-backend", "wayland-client", "wayland-csd-frame", @@ -3372,7 +4075,7 @@ dependencies = [ "log", "memmap2", "rustix 0.38.39", - "thiserror", + "thiserror 1.0.68", "wayland-backend", "wayland-client", "wayland-csd-frame", @@ -3413,6 +4116,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "spin" version = "0.9.8" @@ -3632,6 +4345,34 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml 0.8.19", + "version-compare", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + [[package]] name = "tempfile" version = "3.13.0" @@ -3660,7 +4401,16 @@ version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02dd99dc800bbb97186339685293e1cc5d9df1f8fae2d0aecd9ff1c77efea892" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.68", +] + +[[package]] +name = "thiserror" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +dependencies = [ + "thiserror-impl 2.0.3", ] [[package]] @@ -3674,6 +4424,28 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "thiserror-impl" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "tiff" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + [[package]] name = "tiny-skia" version = "0.11.4" @@ -3715,6 +4487,45 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "tokio" +version = "1.41.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2 0.5.7", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + [[package]] name = "toml" version = "0.7.8" @@ -3774,6 +4585,12 @@ dependencies = [ "winnow 0.6.20", ] +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + [[package]] name = "tracing" version = "0.1.40" @@ -3805,6 +4622,12 @@ dependencies = [ "once_cell", ] +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + [[package]] name = "ttf-parser" version = "0.25.0" @@ -3817,7 +4640,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" dependencies = [ - "rustc-hash", + "rustc-hash 1.1.0", ] [[package]] @@ -3982,6 +4805,23 @@ dependencies = [ "serde", ] +[[package]] +name = "v_frame" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" +dependencies = [ + "aligned-vec", + "num-traits", + "wasm-bindgen", +] + +[[package]] +name = "version-compare" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + [[package]] name = "version_check" version = "0.9.5" @@ -4004,6 +4844,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -4231,6 +5080,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "webbrowser" version = "0.8.15" @@ -4257,6 +5116,12 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "weezl" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" + [[package]] name = "wgpu" version = "0.19.4" @@ -4299,9 +5164,9 @@ dependencies = [ "parking_lot", "profiling", "raw-window-handle 0.6.2", - "rustc-hash", + "rustc-hash 1.1.0", "smallvec", - "thiserror", + "thiserror 1.0.68", "web-sys", "wgpu-hal", "wgpu-types", @@ -4339,9 +5204,9 @@ dependencies = [ "profiling", "raw-window-handle 0.6.2", "renderdoc-sys", - "rustc-hash", + "rustc-hash 1.1.0", "smallvec", - "thiserror", + "thiserror 1.0.68", "wasm-bindgen", "web-sys", "wgpu-types", @@ -4442,7 +5307,7 @@ version = "0.54.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" dependencies = [ - "windows-result", + "windows-result 0.1.2", "windows-targets 0.52.6", ] @@ -4468,6 +5333,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result 0.2.0", + "windows-strings", + "windows-targets 0.52.6", +] + [[package]] name = "windows-result" version = "0.1.2" @@ -4477,6 +5353,25 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result 0.2.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.45.0" @@ -4733,7 +5628,7 @@ dependencies = [ "wayland-protocols 0.31.2", "wayland-protocols-plasma", "web-sys", - "web-time", + "web-time 0.2.4", "windows-sys 0.48.0", "x11-dl", "x11rb", @@ -4853,8 +5748,11 @@ version = "2.0.0" dependencies = [ "anyhow", "camino", + "image 0.25.5", "lazy_static", "log", + "reqwest", + "url", "uuid", "xmpd-cliargs", "xmpd-manifest", @@ -5104,6 +6002,30 @@ version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "zune-jpeg" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16099418600b4d8f028622f73ff6e3deaabdff330fb9a2a131dea781ee8b0768" +dependencies = [ + "zune-core", +] + [[package]] name = "zvariant" version = "3.15.2" diff --git a/Cargo.toml b/Cargo.toml index 11853d8..059d874 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,7 +35,7 @@ lazy_static = "1.4.0" log = "0.4.21" # notify-rust = "4.11.3" # open = "5.3.0" -# reqwest = { version = "0.12.3", features = ["blocking", "h2", "http2", "rustls-tls"], default-features = false } +reqwest = { version = "0.12.3", features = ["blocking", "h2", "http2", "rustls-tls"], default-features = false } serde = { version = "1.0.197", features = ["derive"] } serde_json = "1.0.115" url = { version = "2.5.0", features = ["serde"] } @@ -47,3 +47,4 @@ winresource = "0.1.17" toml = "0.8.19" rfd = "0.15.1" rodio = { version = "0.20.1", features = ["symphonia-all"] } +image = "0.25.5" diff --git a/manifest.json b/manifest.json index 27c1693..4103103 100644 --- a/manifest.json +++ b/manifest.json @@ -1,1121 +1,1295 @@ { "songs": { - "d286a3a7-ab7b-488c-9c68-b7521e290c5e": { - "name": "Bossa Nova (Lewii Edit)", - "author": "Billie Eilish", - "url": "https://www.youtube.com/watch?v=gNawHj2NCxA", - "source_type": "Youtube" - }, - "dc6c36b0-f595-457f-8fc3-641710b0e3b9": { - "name": "I Pajuri", - "author": "Mercy Dance", - "url": "https://www.youtube.com/watch?v=RPpkMh47l9w", - "source_type": "Youtube" - }, - "34e3c90b-7763-4154-9035-367e22ed7d75": { - "name": "Robinzonas", - "author": "Vitalija Katunskyte", - "url": "https://www.youtube.com/watch?v=erDHG-QpbPY", - "source_type": "Youtube" - }, - "6bc8cd16-722b-42e4-9824-a1de9c67029f": { - "name": "Tears Drop", - "author": "Baltra", - "url": "https://www.youtube.com/watch?v=EXXMtKPfuzY", - "source_type": "Youtube" - }, - "4a4abe26-de77-4e0f-83c9-8eab9ca32281": { - "name": "Parnesk alaus OG", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=e7cB1JIlZ2k", - "source_type": "Youtube" - }, - "3525668b-4402-4fb8-b106-bed44d8c9db2": { - "name": "I Kluba", - "author": "Raketa", - "url": "https://www.youtube.com/watch?v=FkSjtpYN3EI", - "source_type": "Youtube" - }, - "2eae7db0-4263-4870-b0c0-638a0d944c8e": { - "name": "Negeriau", - "author": "DJ Dalgis", - "url": "https://www.youtube.com/watch?v=c89YvG3MCcs", - "source_type": "Youtube" - }, - "08995ab0-2954-4d6b-913e-27609e90b354": { - "name": "Caramelldansen", - "author": "Alfons, LOOKET, DJ BERIT", - "url": "https://open.spotify.com/track/1v7aZHBUwKxeCgmpe6fVUH", - "source_type": "Spotify" - }, - "47f2a63e-e9eb-48df-a61b-dbcdfa3aaf35": { - "name": "Everlong", - "author": "Foo Fighters", - "url": "https://open.spotify.com/track/5UWwZ5lm5PKu6eKsHAGxOk", - "source_type": "Spotify" - }, - "2645c0f2-fade-489a-87ad-261d5d983ef6": { - "name": "Bad Boys", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=NTC7RD8xzCY", - "source_type": "Youtube" - }, - "d71c0e55-5d40-4045-853e-b32da713c0b8": { - "name": "Lietuva (Nebelinksmas musu kaimas)", - "author": "Vytautas siskauskas", - "url": "https://www.youtube.com/watch?v=31UkGzde14c", - "source_type": "Youtube" - }, - "101166d0-1b7c-4d1c-b0ce-35b9a89b0822": { - "name": "Nes as tik vejas", - "author": "SEL", - "url": "https://youtu.be/acMG37IZ6z8", - "source_type": "Youtube" - }, - "c393d1a6-b265-4a73-a7bd-d33667b08445": { - "name": "Kauniete", - "author": "DJ Dalgis", - "url": "https://www.youtube.com/watch?v=b3xPE9Iyuzc", - "source_type": "Youtube" - }, - "a950fac9-3b5f-4215-8a49-7680fd5b90bf": { - "name": "Gyvenu", - "author": "69 Danguje", - "url": "https://www.youtube.com/watch?v=HMXlhmAoux4", - "source_type": "Youtube" - }, - "7da79c32-9eda-4897-be69-69fb39437404": { - "name": "Tricky Disco", - "author": "DR. VODKA", - "url": "https://www.youtube.com/watch?v=IknAUhl3i2o", - "source_type": "Youtube" - }, - "0491fd9f-149d-4e70-bc5c-0fae9a21d9b0": { - "name": "Rozovoe vino", - "author": "Eldzej and Feduk", - "url": "https://www.youtube.com/watch?v=S9oXj3a4gZ4", - "source_type": "Youtube" - }, - "90ae639e-0214-4a8e-b582-4949674ffaa2": { - "name": "Coco Jumbo", - "author": "Mr President", - "url": "https://www.youtube.com/watch?v=cOrc37wNUqU", - "source_type": "Youtube" - }, - "cbc90bff-5476-408c-9cc8-afd1af5b536d": { - "name": "Vienna", - "author": "Billy Joel", - "url": "https://open.spotify.com/track/4U45aEWtQhrm8A5mxPaFZ7", - "source_type": "Spotify" - }, - "4c849092-b6c4-450c-b69c-304e54f63611": { - "name": "Deginam", - "author": "SADBOY", - "url": "https://www.youtube.com/watch?v=w3R0Aq1EGXg", - "source_type": "Youtube" - }, - "27d61e87-deec-4e4c-8015-ad8b691eea40": { - "name": "Klaipeda On Top", - "author": "Deivas", - "url": "https://www.youtube.com/watch?v=g_h2M3e2OYU", - "source_type": "Youtube" - }, - "b26f7338-0d1f-4dba-b639-3bdae9d7e10e": { - "name": "Po stikliuka", - "author": "Tipo grupe ir Kastaneda", - "url": "https://www.youtube.com/watch?v=EtmE60nE7fI", - "source_type": "Youtube" - }, - "78d3766c-7d79-43a1-aa37-f680cfd253e0": { - "name": "Perfect remix 1991", - "author": "Mason", - "url": "https://open.spotify.com/track/1VKWQgq0g2uKtgNfL0ceNM?si=b3f1dc504ddb41ed", - "source_type": "Spotify" - }, - "b0732ead-9a8c-4537-b98a-a4618d33959f": { - "name": "O Mazuti", - "author": "Depresinis, Jypas", - "url": "https://www.youtube.com/watch?v=4t_DPbe2r3M", - "source_type": "Youtube" - }, - "4eafd817-d75a-451e-b6b4-38ef29e66fdf": { - "name": "Ne, nereikia asaru", - "author": "Rytis Cicinas", - "url": "https://www.youtube.com/watch?v=48GSg1q2kPE", - "source_type": "Youtube" - }, - "0ee56450-2942-4805-9f08-b49652472258": { - "name": "Tricky Disco", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=t78qVdbAiXw", - "source_type": "Youtube" - }, - "8e82aa7c-a9e0-42ee-a845-6ba7d3439452": { - "name": "Apzavai", - "author": "Vaidas Baumila", - "url": "https://www.youtube.com/watch?v=H8uGi4ZMgHA", - "source_type": "Youtube" - }, - "35877af8-65ad-4d85-9f18-93b98fd3ebd4": { - "name": "Le Son Dancefloor", - "author": "Sweely", - "url": "https://www.youtube.com/watch?v=5uEvZgmoG6Y", - "source_type": "Youtube" - }, - "4f368ef5-08d0-4d1f-b8ba-a34ee9fc6aa2": { - "name": "Blizgantys Naikai", - "author": "SADBOY", - "url": "https://www.youtube.com/watch?v=p5KsYJGcfOM", - "source_type": "Youtube" - }, - "92561031-92ae-471a-b154-8519c715011d": { - "name": "On The Rob", - "author": "Cheap Dirty Horse", - "url": "https://open.spotify.com/track/2kZ2fD3ohaGhDHMBTAppto", - "source_type": "Spotify" - }, - "88fe04aa-a7be-4f6c-b32f-d3d25e58bbf8": { - "name": "Because I Got High", - "author": "Afroman", - "url": "https://www.youtube.com/watch?v=WeYsTmIzjkw", - "source_type": "Youtube" - }, - "83ff90a9-4a19-4a66-a452-c2bafdfb884b": { - "name": "You're My Heart, You're My Soul", - "author": "Modern Talking", - "url": "https://www.youtube.com/watch?v=4kHl4FoK1Ys", - "source_type": "Youtube" - }, - "0e1d36ed-d07d-48c0-a101-1bf1ac6d7a26": { - "name": "Be taves", - "author": "Funky", - "url": "https://www.youtube.com/watch?v=heTDrDukLWU", - "source_type": "Youtube" - }, - "518e23e8-72df-42de-a918-6a9a197deb9a": { - "name": "Whiskey, Cola i Tequila", - "author": "Maco Mamuko", - "url": "https://www.youtube.com/watch?v=aBrN0k0Phtc", - "source_type": "Youtube" - }, - "7e1d6501-ec53-4513-9917-84886d7523e5": { - "name": "Amerikonas grizo sunus", - "author": "Zilvinas Zvagulis", - "url": "https://www.youtube.com/watch?v=UvzJEz5ADY8", - "source_type": "Youtube" - }, - "0679475a-259c-4c98-9ae7-a58c10dfeedb": { - "name": "New Flesh", - "author": "Current Joys", - "url": "https://open.spotify.com/track/6HJxxqHWMdidwTVZmZWeHU", - "source_type": "Spotify" - }, - "5c2ee27e-d564-404a-8259-87d1d336f106": { - "name": "Money", - "author": "The Drums", - "url": "https://open.spotify.com/track/3VIJBrMpvimHEw5wtPh2wB", - "source_type": "Spotify" - }, - "1a22e35a-0af1-4326-b59c-00d59504446b": { - "name": "Virs debesu", - "author": "Andzikas", - "url": "https://www.youtube.com/watch?v=PHJcVGhxra8", - "source_type": "Youtube" - }, - "cec368bd-6b4c-4c89-9eeb-1b88bed0efc3": { - "name": "PARIS (TECHNO)", - "author": "$UICIDEBOY$", - "url": "https://www.youtube.com/watch?v=YYDJmGDkEyw", - "source_type": "Youtube" - }, - "6bfe21f8-b6e5-409b-b6cb-a5692f6dfeeb": { - "name": "Welcome To The Club", - "author": "Manian", - "url": "https://www.youtube.com/watch?v=7F9xDewtgNA", - "source_type": "Youtube" - }, - "9d93859c-dae3-4c03-8f8d-d4f6bc0e287e": { - "name": "Jealous", - "author": "Eyedress", - "url": "https://open.spotify.com/track/1aXV8GrmQLvgoFtBPERP7E", - "source_type": "Spotify" - }, - "eb08806a-5fe3-46d7-a989-89f6a55187cc": { - "name": "Tailwhip (Lewii Edit)", - "author": "Men I Trust", - "url": "https://www.youtube.com/watch?v=XhyM-JUWwWQ", - "source_type": "Youtube" - }, - "720d5b94-ac54-4162-8da7-ba8d258139e6": { - "name": "KINO FILMAI", - "author": "RADVIS", - "url": "https://www.youtube.com/watch?v=vhAEkC3xNMo", - "source_type": "Youtube" - }, - "080d60fb-bdf1-40f3-8b81-967c5ea2fe44": { - "name": "moi marmeladni (paprobui mua mua)", - "author": "Katja lel", - "url": "https://www.youtube.com/watch?v=0JMdXFHo5SY", - "source_type": "Youtube" - }, - "f5a31a44-fc62-4cce-b65e-05e4085864fe": { - "name": "End of Beginning", - "author": "Djo", - "url": "https://open.spotify.com/track/3qhlB30KknSejmIvZZLjOD", - "source_type": "Spotify" - }, - "7b680328-e576-4185-a5da-3c37de98ca42": { - "name": "cabin fever", - "author": "re6ce", - "url": "https://open.spotify.com/track/3c3oUMxOr2cVFBY6V3v08C", - "source_type": "Spotify" - }, - "76f7945f-e677-4297-a98a-708314f92de8": { - "name": "Kanikuli", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=GNMiDZTL7jo", - "source_type": "Youtube" - }, - "862ddd87-68c4-4bed-a8cd-0e2021a0ce79": { - "name": "Renee", - "author": "SALES", - "url": "https://open.spotify.com/track/5MeUMSRreLHYLhw8ZTyqpk", - "source_type": "Spotify" - }, - "3453b523-e1f0-49d3-b60b-5ba063b6c26d": { - "name": "The Love Parade ( Bounce Invaderz )", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=xogT6KBWjCU3", - "source_type": "Youtube" - }, - "02d90830-7b5f-430f-b82c-f45998862e81": { - "name": "Juodas Golfas", - "author": "NL", - "url": "https://www.youtube.com/watch?v=f2-ZmElSvPc", - "source_type": "Youtube" - }, - "bb16708f-0cd7-4918-8014-d374d68acbd2": { - "name": "Not Allowed", - "author": "TV Girl", - "url": "https://open.spotify.com/track/3IznIgmXtrUaoPWpQTy5jB", - "source_type": "Spotify" - }, - "dfc0782c-33f2-414d-9b56-76a77902bcc5": { - "name": "Baliavojam", - "author": "16Hz", - "url": "https://www.youtube.com/watch?v=Ia-qERX8WLs", - "source_type": "Youtube" - }, - "017e1086-7ca7-4788-834d-5490e0cf8276": { - "name": "Mersas", - "author": "Tweaxx", - "url": "https://www.youtube.com/watch?v=7ljAzgALPdA", - "source_type": "Youtube" - }, - "1e77552d-702f-4c61-8e9f-bd02bbafe434": { - "name": "Morning Sex (Mochakk Remix)", - "author": "Ralph Castelli", - "url": "https://www.youtube.com/watch?v=6bCwJ_TIDG4", - "source_type": "Youtube" - }, - "6c3f2503-0160-4c42-8b17-25ff402f3fa7": { - "name": "Visky Kola karaleva trans pola", - "author": "Dzaro and hansa", - "url": "https://www.youtube.com/watch?v=fflrMvZ2HtA", - "source_type": "Youtube" - }, - "b23f9b7f-1668-43f0-a1bd-9471759db18f": { - "name": "Juda Tavo rankos", - "author": "Elektra", - "url": "https://www.youtube.com/watch?v=k2RuDoudnOE", - "source_type": "Youtube" - }, - "47001462-76c8-4aee-8ed4-65242600f840": { - "name": "Fireball", - "author": "Pitbul", - "url": "https://www.youtube.com/watch?v=HMqgVXSvwGo", - "source_type": "Youtube" - }, - "0e969066-b7f9-4e60-a24f-989aad28dfac": { - "name": "Svajoklis", - "author": "Vairas", - "url": "https://www.youtube.com/watch?v=hs8_KTV0Vrw", - "source_type": "Youtube" - }, - "0e33d04e-776e-4746-ab17-c4602d556716": { - "name": "1001 Naktis", - "author": "SADBOY", - "url": "https://www.youtube.com/watch?v=mLJIjGvWmKI", - "source_type": "Youtube" - }, - "91629850-33e2-4e18-8c37-6eafdfcde3f4": { - "name": "Give It To Me", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=upQe8EeSyZU", - "source_type": "Youtube" - }, - "8fcad64e-bb63-414b-9cad-243f1f4c4293": { - "name": "FALL FROM THE SKY", - "author": "ROMANCEPLANET", - "url": "https://www.youtube.com/watch?v=HMhzxzXBisw", - "source_type": "Youtube" - }, - "f3edb436-bf04-4ad5-ad45-684a601846c3": { - "name": "We are the winners", - "author": "LT United", - "url": "https://www.youtube.com/watch?v=DBAdOlQPbwg", - "source_type": "Youtube" - }, - "383cb60f-13fd-4947-9924-6c5d8c39d453": { - "name": "Kur Tu", - "author": "Patruliai", - "url": "https://www.youtube.com/watch?v=OPWhiu3cvj0", - "source_type": "Youtube" - }, - "402a9066-127a-4a62-b711-50e979abbd51": { - "name": "Naktinis Tusas", - "author": "Dove", - "url": "https://www.youtube.com/watch?v=pz-HEAwFEnk", - "source_type": "Youtube" - }, - "fa7d62b1-2f9a-4499-b07b-ac3127c0f69f": { - "name": "Mano Skonis Sokolado (Matuze & Arnisxd Remix)", - "author": "Sokoledas", - "url": "https://soundcloud.com/matuze/sokoledas-mano-skonis-sokolado-matuze-arnisxd-remix", - "source_type": "Soundcloud" - }, - "a59cb678-f229-43cf-b438-4ce53b7264ae": { - "name": "R1", - "author": "NL", - "url": "https://www.youtube.com/watch?v=hSgav4fYnZ8", - "source_type": "Youtube" - }, - "85098bbc-86fa-4da4-b342-d2a512738060": { - "name": "Topolini puh", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=UUryvYF8tUs", - "source_type": "Youtube" - }, - "877c24e4-c0c0-4e9c-a553-221e381c8a00": { - "name": "Stumblin' In", - "author": "CYRIL", - "url": "https://open.spotify.com/track/0h3Xy4V4apMraB5NuM8U7Z", - "source_type": "Spotify" - }, - "2c650e29-9f87-4253-8074-146f3653051d": { - "name": "Satisfaction", - "author": "Benny Benassi", - "url": "https://www.youtube.com/watch?v=a0fkNdPiIL4", - "source_type": "Youtube" - }, - "bf529d54-1ad0-4396-84c7-82bd7fe495c6": { - "name": "P.R.O.T.E.C.T.T.R.A.N.S.K.I.D.S.", - "author": "Cheap Dirty Horse", - "url": "https://open.spotify.com/track/1ytHY16pP1P6A2noeiPXuU", - "source_type": "Spotify" - }, - "795b22ae-d19e-4571-a5d7-fba5a66d5b6e": { - "name": "PLAIN WHITE TEE", - "author": "ROMANCEPLANET", - "url": "https://www.youtube.com/watch?v=tdVQbNwjGac", - "source_type": "Youtube" - }, - "22f18d88-fb39-4cec-98be-02d4ebe3a6ee": { - "name": "Party maker", - "author": "MUTA", - "url": "https://www.youtube.com/watch?v=LT9VNK1aCXY", - "source_type": "Youtube" - }, - "009b9458-3205-4b13-9c65-03f16fea2293": { - "name": "Whiskey Cola Lietuviskai (sultys degtinele) remix", - "author": "L1GHT CASH", - "url": "https://www.youtube.com/watch?v=YVaqDaf1KXU", - "source_type": "Youtube" - }, - "ec3edf2d-1e19-4c71-8f5c-e53d9cd06c3b": { - "name": "Cigarette Daydreams", - "author": "Cage The Elephant", - "url": "https://open.spotify.com/track/6jHvX8ZnHKC1PnrPMJ0Emt", - "source_type": "Spotify" - }, - "c7867d88-60f2-483b-b435-883d4ff5b2f9": { - "name": "Alien Blues", - "author": "Vundabar", - "url": "https://open.spotify.com/track/11iIikXxC6NP0Ma8vMD27x", - "source_type": "Spotify" - }, - "eadbd827-0f71-4401-97bd-d11c365c3243": { - "name": "I Only See Things I Dont Have", - "author": "Fidde", - "url": "https://www.youtube.com/watch?v=vX_Ye_ZzI-Y", - "source_type": "Youtube" - }, - "d617c8c2-6237-40c4-8b47-b612a93c3689": { - "name": "vse shto nas ne Ubivaet", - "author": "Pimp Schwab", - "url": "https://www.youtube.com/watch?v=NTEXFyUE9Ww", - "source_type": "Youtube" - }, - "abd6a036-f17a-4a6a-8420-2cc3e7e4a181": { - "name": "Ten kazkur giliai", - "author": "SEL", - "url": "https://youtu.be/N7YNlegeiqs?si=9BBH6hjrgOjJ01Nz", - "source_type": "Youtube" - }, - "9fabb799-f6aa-45a0-93b7-8cb08ab8f0a8": { - "name": "16 metu", - "author": "69 Danguje", - "url": "https://www.youtube.com/watch?v=nwjoqPcUPrw", - "source_type": "Youtube" - }, - "eb91fc63-4e0e-49e9-99c7-ea7fe5770a5b": { - "name": "LEDINE", - "author": "Depresinis", - "url": "https://www.youtube.com/watch?v=qugvChkXMLk", - "source_type": "Youtube" - }, "03f406b5-d5e9-4d22-b9bc-d0b36354400a": { "name": "Diskoteka is 90 hit", "author": "Raim & Artur feat. Zhenis", "url": "https://www.youtube.com/watch?v=GfBhxlNhrn0", - "source_type": "Youtube" + "source_type": "Youtube", + "icon_type": "FromSource" }, "d01635a4-1a28-4d86-a524-9876eb3094de": { "name": "VAIKAI PO LELIJOM (REMIX)", "author": "Unknown", "url": "https://www.youtube.com/watch?v=k1amBbsAZuo", - "source_type": "Youtube" + "source_type": "Youtube", + "icon_type": "FromSource" }, - "59c20651-6ffe-493d-886b-ccd8b7fe6dee": { - "name": "EVERYTHING WHAT", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=Gjdsq4kc5cA", - "source_type": "Youtube" + "b0732ead-9a8c-4537-b98a-a4618d33959f": { + "name": "O Mazuti", + "author": "Depresinis, Jypas", + "url": "https://www.youtube.com/watch?v=4t_DPbe2r3M", + "source_type": "Youtube", + "icon_type": "FromSource" }, - "4a7b1853-7529-498d-addf-25e894a37ccf": { - "name": "Temptation", - "author": "Arash", - "url": "https://www.youtube.com/watch?v=6X3ZJh762-I", - "source_type": "Youtube" + "017e1086-7ca7-4788-834d-5490e0cf8276": { + "name": "Mersas", + "author": "Tweaxx", + "url": "https://www.youtube.com/watch?v=7ljAzgALPdA", + "source_type": "Youtube", + "icon_type": "FromSource" }, - "bcb9af16-7bdb-458a-b092-42225abf2645": { - "name": "LEDUKAI", - "author": "Depresinis feat. Deivas", - "url": "https://www.youtube.com/watch?v=R2-MtpkKgGI", - "source_type": "Youtube" - }, - "8dca8d6c-3388-4133-b773-79b9f076e467": { - "name": "0,7", - "author": "Depresinis feat. Deivas", - "url": "https://www.youtube.com/watch?v=rjwFjBgTzAA", - "source_type": "Youtube" - }, - "fc3f499b-2c33-41d0-b79c-ca68486b2a4d": { - "name": "Blaue Augen", - "author": "08 Blumchen", - "url": "https://www.youtube.com/watch?v=mE4PZcUfiwE", - "source_type": "Youtube" - }, - "6a00704f-6da9-44d7-8fee-75cf487036f0": { - "name": "Lovoj Vezi", - "author": "Tipo grupe", - "url": "https://www.youtube.com/watch?v=M3zVMzWCy_c", - "source_type": "Youtube" - }, - "ee1e8d12-75ac-43f7-bf85-a1b69eb66e86": { - "name": "Vanished", - "author": "Crystal Castles", - "url": "https://open.spotify.com/track/3gGMsx3jxYKfhXq8LMj1tz", - "source_type": "Spotify" - }, - "d8e93863-6102-4cda-a0b2-3728d20c9cf8": { - "name": "dashstar", - "author": "Knock2", - "url": "https://www.youtube.com/watch?v=58ml5b_On6w", - "source_type": "Youtube" - }, - "7832d70f-2af3-417f-88dd-e193622ac599": { - "name": "DZIEWCZYNO Z TIKTOKA", - "author": "DR. VODKA", - "url": "https://www.youtube.com/watch?v=HLbw1WQt64o", - "source_type": "Youtube" - }, - "75c6e1aa-21c7-4626-9def-602d656282bc": { - "name": "Ka Tu Ka Vakare", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=6SOS4ljHbJY", - "source_type": "Youtube" - }, - "eaf1cc63-3eb6-4d86-a986-e8129fff7fcb": { - "name": "Zalia Siera", - "author": "DJ Dalgis", - "url": "https://www.youtube.com/watch?v=nfentq_pez4", - "source_type": "Youtube" - }, - "0c5a22fc-2a61-4171-a5b9-f24da0c71466": { - "name": "As ziuriu i tave pasauli", + "101166d0-1b7c-4d1c-b0ce-35b9a89b0822": { + "name": "Nes as tik vejas", "author": "SEL", - "url": "https://youtu.be/_SPDjl80kKw", - "source_type": "Youtube" - }, - "8bf09666-9aba-4c71-a58a-a64200d49f9e": { - "name": "Cloud 9", - "author": "Beach Bunny", - "url": "https://open.spotify.com/track/6vFsBXYczYsP0H3lgunZOm", - "source_type": "Spotify" - }, - "8c641f7f-e151-4abc-932c-a9895823a278": { - "name": "Nevaidink", - "author": "SixthBoi", - "url": "https://www.youtube.com/watch?v=nOTNnnrqTII", - "source_type": "Youtube" - }, - "6f28b04a-588e-4a81-8b4e-aa4ed4f88e31": { - "name": "Pavasaris", - "author": "Depresinis feat. Deivas", - "url": "https://www.youtube.com/watch?v=yWWAucfQdN4", - "source_type": "Youtube" - }, - "e9495391-8a6c-4942-9dc6-09b764f9d1e9": { - "name": "Zalias Pasas", - "author": "Zas", - "url": "https://www.youtube.com/watch?v=SZA7IjlCfyI", - "source_type": "Youtube" - }, - "20945b3f-e9d6-4023-9a97-4a04424cc8a3": { - "name": "Basket Case", - "author": "Green Day", - "url": "https://www.youtube.com/watch?v=wZ8eZRxFA-0", - "source_type": "Youtube" - }, - "7d232736-f977-4645-bd64-106e94f91bb0": { - "name": "Judam Lietuvoj", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=WDzWSEgSy5U", - "source_type": "Youtube" - }, - "e71a61d4-b54a-47d1-b0ad-db6695bd0739": { - "name": "Hey Lover!", - "author": "Wabie", - "url": "https://open.spotify.com/track/7rC3P7tpWriaC4hYWKwGQd", - "source_type": "Spotify" - }, - "9000f22e-83ff-4261-be0c-625fe1d806ab": { - "name": "MAMA MANE RODYS PER FARUS", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=F5HqXYRDZaE", - "source_type": "Youtube" - }, - "8e8c3f6c-e34b-4f4e-b9be-f36be5901435": { - "name": "biznis", - "author": "PROFLAME", - "url": "https://www.youtube.com/watch?v=t139Vd83pgs", - "source_type": "Youtube" - }, - "2e9ef729-1560-446c-af6a-8a9d4c43ac9a": { - "name": "Big Sis", - "author": "SALES", - "url": "https://open.spotify.com/track/0ARp9mXXpPflIwehy25kCa", - "source_type": "Spotify" - }, - "4a56c71c-70f0-45e7-a9b8-2304d41e1877": { - "name": "Big Jet Plane", - "author": "Restricted", - "url": "https://www.youtube.com/watch?v=NpVF0z5N-tE", - "source_type": "Youtube" - }, - "c28f14ca-ec10-469a-b0cc-3e26e9f56007": { - "name": "VASARA ZJBS", - "author": "Depresinis & MERAKI2004", - "url": "https://www.youtube.com/watch?v=BD-pBjRy-5A", - "source_type": "Youtube" - }, - "3ea2a490-749f-4956-b7ef-bb0c428663a9": { - "name": "Dabar Geriausi Musu Vakarai", - "author": "Vilija ir Marijonas mikutavicius", - "url": "https://www.youtube.com/watch?v=MPnZkEscWo0", - "source_type": "Youtube" - }, - "4e903bfb-e9bf-49dc-a299-e08949ab78f9": { - "name": "DANCE", - "author": "ROMANCEPLANET", - "url": "https://www.youtube.com/watch?v=ircOfMb4gEw", - "source_type": "Youtube" - }, - "b0c0d44c-86ca-4b80-a081-734a4178c870": { - "name": "After Marvins Dance (Marvin Gaye's 'After The Dance' Edit)", - "author": "Bauhouse", - "url": "https://www.youtube.com/watch?v=J-cgyYiExh8", - "source_type": "Youtube" - }, - "16dafb40-ebac-4e04-961a-99d79789f1a3": { - "name": "Topine Panele", - "author": "Wenona Waves", - "url": "https://www.youtube.com/watch?v=MPHuhmUomfE", - "source_type": "Youtube" - }, - "e37c6cb6-ad8e-43a7-83d1-8b795db8aa1c": { - "name": "Harness Your Hopes", - "author": "Pavement", - "url": "https://open.spotify.com/track/4vsoWZcvtvSsE0OiVvDDvX", - "source_type": "Spotify" - }, - "a6a20f00-cbf9-4506-9655-d6fd27944fea": { - "name": "Rhodes Trip", - "author": "THEOS", - "url": "https://www.youtube.com/watch?v=m7guRO0Uz_c", - "source_type": "Youtube" - }, - "4b61344d-fa89-4b79-bd45-3b1fc8c8cc1c": { - "name": "Rycka klipas", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=nuTUDSQ3BBI", - "source_type": "Youtube" + "url": "https://youtu.be/acMG37IZ6z8", + "source_type": "Youtube", + "icon_type": "FromSource" }, "9e6095bb-8b05-40eb-b5d3-b6410ac65171": { "name": "C'est Beau La Bourgeoisie", "author": "Discobitch", "url": "https://www.youtube.com/watch?v=RCeQN2aEWxo", - "source_type": "Youtube" - }, - "9d482849-d488-4222-adc0-727f92babcab": { - "name": "Jau Nutilo Sirgaliai", - "author": "Ciulpuoneliai", - "url": "https://www.youtube.com/watch?v=s8qIVA1U0C0", - "source_type": "Youtube" - }, - "98b04764-39cc-4c82-a2e2-420dd85573ca": { - "name": "Tarp amzinybes", - "author": "SEL", - "url": "https://youtu.be/UfPj-0QpGFA", - "source_type": "Youtube" - }, - "6d78099b-042c-4b19-b3d9-15af1bf4ef10": { - "name": "JUODA ORCHIDEJA", - "author": "MG INTERNATIONAL", - "url": "https://www.youtube.com/watch?v=HQvceFRBq9M", - "source_type": "Youtube" - }, - "201c6680-7dcf-4d75-8bdc-76ff9a715167": { - "name": "Gyvenimo man vieno neuztenka", - "author": "SEL", - "url": "https://youtu.be/7Gd9XaEG5o4", - "source_type": "Youtube" - }, - "80a169ba-f711-408c-834c-744bac3660ca": { - "name": "If Theres A Heaven I Wanna See It", - "author": "Fidde", - "url": "https://www.youtube.com/watch?v=l2Nw7cIh7qg", - "source_type": "Youtube" - }, - "83808446-bd43-4140-86ff-853fea897a89": { - "name": "Bla Bla Bla", - "author": "Gigi D'Agostino", - "url": "https://www.youtube.com/watch?v=yKapqR2XRJE", - "source_type": "Youtube" - }, - "81426b49-3511-4e48-be21-3c24acba0fb9": { - "name": "Kernkraft 400", - "author": "Zombie Nation", - "url": "https://www.youtube.com/watch?v=z5LW07FTJbI", - "source_type": "Youtube" - }, - "d563619a-344e-41cf-99d1-5a52214ada49": { - "name": "Sports", - "author": "Beach Bunny", - "url": "https://open.spotify.com/track/77G0k1La0c5Dw8bAFANcyp", - "source_type": "Spotify" - }, - "615d63ee-51aa-4ac2-b826-9a41f59b8622": { - "name": "I Love It", - "author": "Icona Pop", - "url": "https://www.youtube.com/watch?v=UxxajLWwzqY", - "source_type": "Youtube" - }, - "afdc69fa-c2ee-4dee-9794-e3166fc9dd20": { - "name": "Pedro (Jaxomy & Agatino Romero Remix)", - "author": "Raffaella Carra", - "url": "https://www.youtube.com/watch?v=AIGnRc7F86Q", - "source_type": "Youtube" - }, - "2bd2e64e-28f0-4bd7-aee3-e1d27ed0797d": { - "name": "In the End", - "author": "Linkin Park", - "url": "https://open.spotify.com/track/60a0Rd6pjrkxjPbaKzXjfq", - "source_type": "Spotify" - }, - "9d7a0837-04d4-40f7-92dc-48c7db70be51": { - "name": "As Judu", - "author": "Adomas Vysniauskas", - "url": "https://www.youtube.com/watch?v=dMm16TzZrjg", - "source_type": "Youtube" + "source_type": "Youtube", + "icon_type": "FromSource" }, "cd72e9db-aaa4-485e-b3a5-7fbeed2cff36": { "name": "I.M.P Jingle (From \"Helluva Boss\")", "author": "Geek Music", "url": "https://open.spotify.com/track/5x0bvS385Ata1irjLMyLTn", - "source_type": "Spotify" - }, - "870502f1-e3a9-419b-9ba6-d8100d1198a5": { - "name": "Is Leto Leidziasi Saule", - "author": "Jovani, Karaliska Erdve", - "url": "https://www.youtube.com/watch?v=VqSu8iG1_DE", - "source_type": "Youtube" - }, - "d8423579-1225-4865-9955-149e6878b59d": { - "name": "Black Sabbath", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=BOTIIw76qiE", - "source_type": "Youtube" + "source_type": "Spotify", + "icon_type": "FromSource" }, "ea41c37c-7b62-4fd6-9fec-650e94d184f2": { "name": "tipo daina", "author": "Tipo Grupe", "url": "https://www.youtube.com/watch?v=PTIOaSjEgIU", - "source_type": "Youtube" - }, - "2f179aab-c51b-4501-b5d1-8a2e51b19a80": { - "name": "Applause", - "author": "Nicolas Julian", - "url": "https://www.youtube.com/watch?v=9qHLELnq1B0", - "source_type": "Youtube" - }, - "4cf5e323-5e79-4471-816a-5fa345854cea": { - "name": "rytmecio rasos", - "author": "nemuno krantai", - "url": "https://www.youtube.com/watch?v=2-fGbsrofv4", - "source_type": "Youtube" - }, - "7f2b2809-1b38-45b5-876c-cbdb42b26bdf": { - "name": "Volkswagina", - "author": "Depresinis", - "url": "https://www.youtube.com/watch?v=1lZR1VKsQHo", - "source_type": "Youtube" - }, - "2b19ae9f-2321-41fc-8a1f-2bb4c2975380": { - "name": "Malunas Prie Kelio", - "author": "VainHouse", - "url": "https://www.youtube.com/watch?v=bbwuNjDXCiM", - "source_type": "Youtube" - }, - "3d543d58-e33d-4158-9956-049309baa35c": { - "name": "Movin' Out (Anthony's Song)", - "author": "Billy Joel", - "url": "https://open.spotify.com/track/16GUMo6u3D2qo9a19AkYct", - "source_type": "Spotify" - }, - "41a8d7c8-4b75-46f6-9940-7f0b8f5f5feb": { - "name": "Beggin' (Techno)", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=tXPs1FwW6lk", - "source_type": "Youtube" - }, - "18c2b9bc-6403-4a67-94bd-1e9f5413d83b": { - "name": "Skrendu", - "author": "SEL", - "url": "https://youtu.be/G5Q_asvrXlA", - "source_type": "Youtube" - }, - "c72768c0-1f2e-4992-b66f-e569c572435a": { - "name": "Nezinau, Kodel...", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=A-i2CkCnPoc", - "source_type": "Youtube" - }, - "9ef33d55-972d-490c-95c6-bf046bf4f979": { - "name": "MONEY ON THE DASH", - "author": "Unknown", - "url": "https://open.spotify.com/track/6nVEV8CIU4dw12oVZbKJtl", - "source_type": "Spotify" - }, - "484b9560-731b-447d-9e7f-3d32eb68b05f": { - "name": "Freed from Desire", - "author": "Drenchill", - "url": "https://www.youtube.com/watch?v=6b6FBneAENQ", - "source_type": "Youtube" - }, - "83b50be2-c286-4dcc-9e7f-cacf5e4031fe": { - "name": "Not Fair", - "author": "Lily Allen", - "url": "https://www.youtube.com/watch?v=WON_YIbeLis", - "source_type": "Youtube" - }, - "7e32803d-a5a9-453c-8c81-b479c51e5bc9": { - "name": "Looking Out for You", - "author": "Joy Again", - "url": "https://open.spotify.com/track/3jfZ9M23l0L7RxzYMTgBTv", - "source_type": "Spotify" - }, - "22565196-5757-4767-8f1f-f1c9b8a87dcc": { - "name": "I WAS MADE FOR LOVIN' YOU (TECHNO)", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=asVznhccYao", - "source_type": "Youtube" - }, - "be09f147-cda5-4e5f-ac29-eef9c3a7414f": { - "name": "Blue Monday", - "author": "MOGUAI, Tim Hox, Iggy", - "url": "https://open.spotify.com/track/4vAP9OY2Ci79fUCuc9EBdD", - "source_type": "Spotify" - }, - "0b907d17-e3f9-4dbb-9c2d-e10327316f6e": { - "name": "UZ MUS IR JUS", - "author": "Mr.Bullet", - "url": "https://www.youtube.com/watch?v=85q_7jXEgH8", - "source_type": "Youtube" - }, - "e1cb8b00-713b-4a0e-bc61-dbf2d2596fcf": { - "name": "Tik Tok", - "author": "SEL", - "url": "https://youtu.be/RkaIUateIxg", - "source_type": "Youtube" - }, - "50186034-e8b4-4778-81e3-ab327e54dbff": { - "name": "We Are The People", - "author": "Empire Of The Sun, southstar", - "url": "https://www.youtube.com/watch?v=qguEGR5BK2k", - "source_type": "Youtube" - }, - "2374179d-d6a8-41b9-9cac-21147303fc8e": { - "name": "Nebenoriu Laukt", - "author": "Dzordana Butkute", - "url": "https://www.youtube.com/watch?v=_AozFrAqNMk", - "source_type": "Youtube" - }, - "3b2573d4-2e1b-4446-a377-5fcb2b0a70c5": { - "name": "18 mne uze", - "author": "Ruki Verch", - "url": "https://www.youtube.com/watch?v=Hxab_Sr132o", - "source_type": "Youtube" - }, - "e53d24bf-930d-490a-b41b-9b3382e24e3c": { - "name": "Truputi", - "author": "Ganja", - "url": "https://www.youtube.com/watch?v=Pxve7CwiCHM", - "source_type": "Youtube" - }, - "56684f28-ff1a-4f65-a585-e9ea532babb2": { - "name": "AUDI", - "author": "MC ENDRAY", - "url": "https://www.youtube.com/watch?v=oIjNoMGEuRg", - "source_type": "Youtube" - }, - "73ddd372-4853-4182-b212-b021e7dc8988": { - "name": "Parukom", - "author": "Tnn", - "url": "https://www.youtube.com/watch?v=v9pBZK2RIPI", - "source_type": "Youtube" + "source_type": "Youtube", + "icon_type": "FromSource" }, "60214f0e-9a37-49b4-92bf-b7b548e501ad": { "name": "Uzmerkiu akis", "author": "SEL", "url": "https://youtu.be/SdWj06XRZms?si=9TNGzjK9ITom-jaD", - "source_type": "Youtube" + "source_type": "Youtube", + "icon_type": "FromSource" }, - "95a3350c-c62f-4543-8cfe-6c512861b229": { - "name": "Ryk Zuvedra ryk", - "author": "Zilviokas", - "url": "https://www.youtube.com/watch?v=eN6BOI7UlSE", - "source_type": "Youtube" - }, - "6895e921-91f2-4713-b604-c2cdd9f3f1c2": { - "name": "We Didn’t Start The Fire", - "author": "Fall Out Boy", - "url": "https://open.spotify.com/track/60glT2wsoSHV3B8yCRSB8v", - "source_type": "Spotify" - }, - "407155fd-3174-4778-ae93-bb01b7518f9f": { - "name": "Cia Mano Rojus", - "author": "Robertas Kupstas", - "url": "https://www.youtube.com/watch?v=xij_YeEInr8", - "source_type": "Youtube" - }, - "a0bd5ffe-4be8-498e-8f43-c5a9505a4872": { - "name": "Ten kur sapnai", + "e1cb8b00-713b-4a0e-bc61-dbf2d2596fcf": { + "name": "Tik Tok", "author": "SEL", - "url": "https://youtu.be/GDj3NgjDbRo", - "source_type": "Youtube" + "url": "https://youtu.be/RkaIUateIxg", + "source_type": "Youtube", + "icon_type": "FromSource" }, - "05a28184-e58e-42c3-a803-512bb0817a07": { - "name": "Vakareja", - "author": "Karaliska Erdve", - "url": "https://www.youtube.com/watch?v=g0HmrlJ7fhE", - "source_type": "Youtube" + "92561031-92ae-471a-b154-8519c715011d": { + "name": "On The Rob", + "author": "Cheap Dirty Horse", + "url": "https://open.spotify.com/track/2kZ2fD3ohaGhDHMBTAppto", + "source_type": "Spotify", + "icon_type": "FromSource" }, - "ca765223-e4e6-4b5d-8928-919c3f491b43": { - "name": "Kaifuok", - "author": "SADBOY", - "url": "https://www.youtube.com/watch?v=vclryWgfy8I", - "source_type": "Youtube" + "91629850-33e2-4e18-8c37-6eafdfcde3f4": { + "name": "Give It To Me", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=upQe8EeSyZU", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "c393d1a6-b265-4a73-a7bd-d33667b08445": { + "name": "Kauniete", + "author": "DJ Dalgis", + "url": "https://www.youtube.com/watch?v=b3xPE9Iyuzc", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "0ee56450-2942-4805-9f08-b49652472258": { + "name": "Tricky Disco", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=t78qVdbAiXw", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "bb16708f-0cd7-4918-8014-d374d68acbd2": { + "name": "Not Allowed", + "author": "TV Girl", + "url": "https://open.spotify.com/track/3IznIgmXtrUaoPWpQTy5jB", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "d617c8c2-6237-40c4-8b47-b612a93c3689": { + "name": "vse shto nas ne Ubivaet", + "author": "Pimp Schwab", + "url": "https://www.youtube.com/watch?v=NTEXFyUE9Ww", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "7e1d6501-ec53-4513-9917-84886d7523e5": { + "name": "Amerikonas grizo sunus", + "author": "Zilvinas Zvagulis", + "url": "https://www.youtube.com/watch?v=UvzJEz5ADY8", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "d563619a-344e-41cf-99d1-5a52214ada49": { + "name": "Sports", + "author": "Beach Bunny", + "url": "https://open.spotify.com/track/77G0k1La0c5Dw8bAFANcyp", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "afdc69fa-c2ee-4dee-9794-e3166fc9dd20": { + "name": "Pedro (Jaxomy & Agatino Romero Remix)", + "author": "Raffaella Carra", + "url": "https://www.youtube.com/watch?v=AIGnRc7F86Q", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "0e969066-b7f9-4e60-a24f-989aad28dfac": { + "name": "Svajoklis", + "author": "Vairas", + "url": "https://www.youtube.com/watch?v=hs8_KTV0Vrw", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "720d5b94-ac54-4162-8da7-ba8d258139e6": { + "name": "KINO FILMAI", + "author": "RADVIS", + "url": "https://www.youtube.com/watch?v=vhAEkC3xNMo", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "eaf1cc63-3eb6-4d86-a986-e8129fff7fcb": { + "name": "Zalia Siera", + "author": "DJ Dalgis", + "url": "https://www.youtube.com/watch?v=nfentq_pez4", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "6f28b04a-588e-4a81-8b4e-aa4ed4f88e31": { + "name": "Pavasaris", + "author": "Depresinis feat. Deivas", + "url": "https://www.youtube.com/watch?v=yWWAucfQdN4", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "b26f7338-0d1f-4dba-b639-3bdae9d7e10e": { + "name": "Po stikliuka", + "author": "Tipo grupe ir Kastaneda", + "url": "https://www.youtube.com/watch?v=EtmE60nE7fI", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "b0c0d44c-86ca-4b80-a081-734a4178c870": { + "name": "After Marvins Dance (Marvin Gaye's 'After The Dance' Edit)", + "author": "Bauhouse", + "url": "https://www.youtube.com/watch?v=J-cgyYiExh8", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "83b50be2-c286-4dcc-9e7f-cacf5e4031fe": { + "name": "Not Fair", + "author": "Lily Allen", + "url": "https://www.youtube.com/watch?v=WON_YIbeLis", + "source_type": "Youtube", + "icon_type": "FromSource" }, "7ed02ac9-cb84-4a34-870d-56b226f0a6be": { "name": "Always Forever", "author": "Cults", "url": "https://open.spotify.com/track/2enPRFda84VE2wtI8c86Uf", - "source_type": "Spotify" - }, - "fa339b0b-8d3a-45e7-aed9-f744afb4a666": { - "name": "Eik Tu NA", - "author": "AVA", - "url": "https://www.youtube.com/watch?v=yRf3ijaIgOg", - "source_type": "Youtube" - }, - "9be83d96-6dfb-47a0-b58e-a1aed1cf6031": { - "name": "Pasitusinam", - "author": "NL", - "url": "https://www.youtube.com/watch?v=WhSFudvloog", - "source_type": "Youtube" + "source_type": "Spotify", + "icon_type": "FromSource" }, "131ab436-869b-4b3b-8ce4-3b5087d3461f": { "name": "1.9 TDI", "author": "Grupe MX", "url": "https://www.youtube.com/watch?v=8FBr5GQXsI8", - "source_type": "Youtube" + "source_type": "Youtube", + "icon_type": "FromSource" }, "c332ce2b-6b1c-4979-9977-dc00aa6e710b": { "name": "TU ESI MELAGIS (Techno Extended)", "author": "Radvis", "url": "https://www.youtube.com/watch?v=kmvvP7GW_bw", - "source_type": "Youtube" - }, - "bc5fe406-040b-4c46-82ce-bb4505b81947": { - "name": "i like the way you kiss me", - "author": "Artemas", - "url": "https://www.youtube.com/watch?v=ODDRRXMi22E", - "source_type": "Youtube" - }, - "f81f8f9d-6c56-4ae3-8f5f-28c04632d3b5": { - "name": "Kcik 23", - "author": "Unknown Artist", - "url": "https://www.youtube.com/watch?v=SnnqDdZJpzA", - "source_type": "Youtube" - }, - "f1878fda-ecec-4303-a6df-dc6adf1ea3c0": { - "name": "Juodas Garvezys (Remix)", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=D-7qQbXHSAw", - "source_type": "Youtube" + "source_type": "Youtube", + "icon_type": "FromSource" }, "639dc5af-b3e6-4d38-a003-80deac01d326": { "name": "Myliu kina", "author": "Zas", "url": "https://www.youtube.com/watch?v=ImFrfmi-qT8", - "source_type": "Youtube" + "source_type": "Youtube", + "icon_type": "FromSource" }, - "858d8645-8637-4d3f-b4b7-c9c75743d90a": { - "name": "Dviratukas", - "author": "Eugenijus Ostapenko", - "url": "https://www.youtube.com/watch?v=ILFHZQK33Mw", - "source_type": "Youtube" - }, - "6dd614cd-ba76-483c-bf6d-26eb1f3b6f1a": { - "name": "99 Red Balloons", - "author": "Nena", - "url": "https://open.spotify.com/track/7p8HVe22aGW1XtO1hoDHGo", - "source_type": "Spotify" - }, - "2b33d0b1-aecb-4ff9-841a-3a7b2861f28d": { - "name": "Degtine", - "author": "Grupiokai", - "url": "https://www.youtube.com/watch?v=8SqbG2VmEFw", - "source_type": "Youtube" - }, - "5015106c-abcb-45c2-aed3-1f28674f92f6": { - "name": "Dance For Me", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=5DTSvGO_944", - "source_type": "Youtube" - }, - "0c77785e-7149-45a7-84a1-a9c8ccaa9f7f": { - "name": "Lyja", - "author": "SEL", - "url": "https://www.youtube.com/watch?v=KL6JBWnXCxw", - "source_type": "Youtube" + "27d61e87-deec-4e4c-8015-ad8b691eea40": { + "name": "Klaipeda On Top", + "author": "Deivas", + "url": "https://www.youtube.com/watch?v=g_h2M3e2OYU", + "source_type": "Youtube", + "icon_type": "FromSource" }, "190a5577-124a-4232-9e6f-1d0a50f4d881": { "name": "Cheri cheri lady", "author": "Unknown", "url": "https://www.youtube.com/watch?v=lrIKt5uDWZo", - "source_type": "Youtube" + "source_type": "Youtube", + "icon_type": "FromSource" }, - "bd85a9d7-1fb6-4154-a290-e5137590e419": { - "name": "I gamta", - "author": "Andzikas", - "url": "https://www.youtube.com/watch?v=UyLdjC-hihM", - "source_type": "Youtube" + "4c849092-b6c4-450c-b69c-304e54f63611": { + "name": "Deginam", + "author": "SADBOY", + "url": "https://www.youtube.com/watch?v=w3R0Aq1EGXg", + "source_type": "Youtube", + "icon_type": "FromSource" }, - "457bc1f5-f804-4665-a595-8e56a6558d1d": { - "name": "Sombrero", - "author": "Kastanenda", - "url": "https://www.youtube.com/watch?v=3Z3_4TknCfQ", - "source_type": "Youtube" + "56684f28-ff1a-4f65-a585-e9ea532babb2": { + "name": "AUDI", + "author": "MC ENDRAY", + "url": "https://www.youtube.com/watch?v=oIjNoMGEuRg", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "98b04764-39cc-4c82-a2e2-420dd85573ca": { + "name": "Tarp amzinybes", + "author": "SEL", + "url": "https://youtu.be/UfPj-0QpGFA", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "e9495391-8a6c-4942-9dc6-09b764f9d1e9": { + "name": "Zalias Pasas", + "author": "Zas", + "url": "https://www.youtube.com/watch?v=SZA7IjlCfyI", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "bc5fe406-040b-4c46-82ce-bb4505b81947": { + "name": "i like the way you kiss me", + "author": "Artemas", + "url": "https://www.youtube.com/watch?v=ODDRRXMi22E", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "858d8645-8637-4d3f-b4b7-c9c75743d90a": { + "name": "Dviratukas", + "author": "Eugenijus Ostapenko", + "url": "https://www.youtube.com/watch?v=ILFHZQK33Mw", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "76f7945f-e677-4297-a98a-708314f92de8": { + "name": "Kanikuli", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=GNMiDZTL7jo", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "862ddd87-68c4-4bed-a8cd-0e2021a0ce79": { + "name": "Renee", + "author": "SALES", + "url": "https://open.spotify.com/track/5MeUMSRreLHYLhw8ZTyqpk", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "be09f147-cda5-4e5f-ac29-eef9c3a7414f": { + "name": "Blue Monday", + "author": "MOGUAI, Tim Hox, Iggy", + "url": "https://open.spotify.com/track/4vAP9OY2Ci79fUCuc9EBdD", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "7da79c32-9eda-4897-be69-69fb39437404": { + "name": "Tricky Disco", + "author": "DR. VODKA", + "url": "https://www.youtube.com/watch?v=IknAUhl3i2o", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "dfc0782c-33f2-414d-9b56-76a77902bcc5": { + "name": "Baliavojam", + "author": "16Hz", + "url": "https://www.youtube.com/watch?v=Ia-qERX8WLs", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "8bf09666-9aba-4c71-a58a-a64200d49f9e": { + "name": "Cloud 9", + "author": "Beach Bunny", + "url": "https://open.spotify.com/track/6vFsBXYczYsP0H3lgunZOm", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "518e23e8-72df-42de-a918-6a9a197deb9a": { + "name": "Whiskey, Cola i Tequila", + "author": "Maco Mamuko", + "url": "https://www.youtube.com/watch?v=aBrN0k0Phtc", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "59c20651-6ffe-493d-886b-ccd8b7fe6dee": { + "name": "EVERYTHING WHAT", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=Gjdsq4kc5cA", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "c7867d88-60f2-483b-b435-883d4ff5b2f9": { + "name": "Alien Blues", + "author": "Vundabar", + "url": "https://open.spotify.com/track/11iIikXxC6NP0Ma8vMD27x", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "73ddd372-4853-4182-b212-b021e7dc8988": { + "name": "Parukom", + "author": "Tnn", + "url": "https://www.youtube.com/watch?v=v9pBZK2RIPI", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "47f2a63e-e9eb-48df-a61b-dbcdfa3aaf35": { + "name": "Everlong", + "author": "Foo Fighters", + "url": "https://open.spotify.com/track/5UWwZ5lm5PKu6eKsHAGxOk", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "2b33d0b1-aecb-4ff9-841a-3a7b2861f28d": { + "name": "Degtine", + "author": "Grupiokai", + "url": "https://www.youtube.com/watch?v=8SqbG2VmEFw", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "0e1d36ed-d07d-48c0-a101-1bf1ac6d7a26": { + "name": "Be taves", + "author": "Funky", + "url": "https://www.youtube.com/watch?v=heTDrDukLWU", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "9000f22e-83ff-4261-be0c-625fe1d806ab": { + "name": "MAMA MANE RODYS PER FARUS", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=F5HqXYRDZaE", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "8e82aa7c-a9e0-42ee-a845-6ba7d3439452": { + "name": "Apzavai", + "author": "Vaidas Baumila", + "url": "https://www.youtube.com/watch?v=H8uGi4ZMgHA", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "eb91fc63-4e0e-49e9-99c7-ea7fe5770a5b": { + "name": "LEDINE", + "author": "Depresinis", + "url": "https://www.youtube.com/watch?v=qugvChkXMLk", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "870502f1-e3a9-419b-9ba6-d8100d1198a5": { + "name": "Is Leto Leidziasi Saule", + "author": "Jovani, Karaliska Erdve", + "url": "https://www.youtube.com/watch?v=VqSu8iG1_DE", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "d8423579-1225-4865-9955-149e6878b59d": { + "name": "Black Sabbath", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=BOTIIw76qiE", + "source_type": "Youtube", + "icon_type": "FromSource" }, "df2e369f-2fee-49e5-b52c-33f73c34ffb2": { "name": "Autostrada Vilnius", "author": "16Hz", "url": "https://www.youtube.com/watch?v=ANS2TSegr40", - "source_type": "Youtube" + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "d8e93863-6102-4cda-a0b2-3728d20c9cf8": { + "name": "dashstar", + "author": "Knock2", + "url": "https://www.youtube.com/watch?v=58ml5b_On6w", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "78d3766c-7d79-43a1-aa37-f680cfd253e0": { + "name": "Perfect remix 1991", + "author": "Mason", + "url": "https://open.spotify.com/track/1VKWQgq0g2uKtgNfL0ceNM?si=b3f1dc504ddb41ed", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "4a4abe26-de77-4e0f-83c9-8eab9ca32281": { + "name": "Parnesk alaus OG", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=e7cB1JIlZ2k", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "ec3edf2d-1e19-4c71-8f5c-e53d9cd06c3b": { + "name": "Cigarette Daydreams", + "author": "Cage The Elephant", + "url": "https://open.spotify.com/track/6jHvX8ZnHKC1PnrPMJ0Emt", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "20945b3f-e9d6-4023-9a97-4a04424cc8a3": { + "name": "Basket Case", + "author": "Green Day", + "url": "https://www.youtube.com/watch?v=wZ8eZRxFA-0", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "3ea2a490-749f-4956-b7ef-bb0c428663a9": { + "name": "Dabar Geriausi Musu Vakarai", + "author": "Vilija ir Marijonas mikutavicius", + "url": "https://www.youtube.com/watch?v=MPnZkEscWo0", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "d71c0e55-5d40-4045-853e-b32da713c0b8": { + "name": "Lietuva (Nebelinksmas musu kaimas)", + "author": "Vytautas siskauskas", + "url": "https://www.youtube.com/watch?v=31UkGzde14c", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "c72768c0-1f2e-4992-b66f-e569c572435a": { + "name": "Nezinau, Kodel...", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=A-i2CkCnPoc", + "source_type": "Youtube", + "icon_type": "FromSource" }, "ae2c4c10-4fac-4d80-a114-81adf209c6a1": { "name": "Kaip Diena", "author": "morre", "url": "https://www.youtube.com/watch?v=6LDgLWCQSSM", - "source_type": "Youtube" + "source_type": "Youtube", + "icon_type": "FromSource" }, - "70a80d91-581e-4599-81e6-d047f28e9068": { - "name": "Margarita", - "author": "Rondo", - "url": "https://www.youtube.com/watch?v=rF4w-Rxsiv4", - "source_type": "Youtube" + "f3edb436-bf04-4ad5-ad45-684a601846c3": { + "name": "We are the winners", + "author": "LT United", + "url": "https://www.youtube.com/watch?v=DBAdOlQPbwg", + "source_type": "Youtube", + "icon_type": "FromSource" }, - "9866acdd-97ee-4e19-ba20-a64caa9b02ee": { - "name": "Where'd All the Time Go?", - "author": "Dr. Dog", - "url": "https://open.spotify.com/track/0UV5zxRMz6AO4ZwUOZNIKI", - "source_type": "Spotify" + "0679475a-259c-4c98-9ae7-a58c10dfeedb": { + "name": "New Flesh", + "author": "Current Joys", + "url": "https://open.spotify.com/track/6HJxxqHWMdidwTVZmZWeHU", + "source_type": "Spotify", + "icon_type": "FromSource" }, - "c374f3c2-b498-49b3-88c5-a2e6e741e1e8": { - "name": "Leisk", + "3d543d58-e33d-4158-9956-049309baa35c": { + "name": "Movin' Out (Anthony's Song)", + "author": "Billy Joel", + "url": "https://open.spotify.com/track/16GUMo6u3D2qo9a19AkYct", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "2eae7db0-4263-4870-b0c0-638a0d944c8e": { + "name": "Negeriau", + "author": "DJ Dalgis", + "url": "https://www.youtube.com/watch?v=c89YvG3MCcs", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "a0bd5ffe-4be8-498e-8f43-c5a9505a4872": { + "name": "Ten kur sapnai", "author": "SEL", - "url": "https://youtu.be/DDPmFMrffXQ", - "source_type": "Youtube" + "url": "https://youtu.be/GDj3NgjDbRo", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "90ae639e-0214-4a8e-b582-4949674ffaa2": { + "name": "Coco Jumbo", + "author": "Mr President", + "url": "https://www.youtube.com/watch?v=cOrc37wNUqU", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "abd6a036-f17a-4a6a-8420-2cc3e7e4a181": { + "name": "Ten kazkur giliai", + "author": "SEL", + "url": "https://youtu.be/N7YNlegeiqs?si=9BBH6hjrgOjJ01Nz", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "18c2b9bc-6403-4a67-94bd-1e9f5413d83b": { + "name": "Skrendu", + "author": "SEL", + "url": "https://youtu.be/G5Q_asvrXlA", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "6895e921-91f2-4713-b604-c2cdd9f3f1c2": { + "name": "We Didn’t Start The Fire", + "author": "Fall Out Boy", + "url": "https://open.spotify.com/track/60glT2wsoSHV3B8yCRSB8v", + "source_type": "Spotify", + "icon_type": "FromSource" }, "65fe7b10-2395-47f4-b920-089fe0d129ac": { "name": "Kelyje", "author": "Kastaneda", "url": "https://www.youtube.com/watch?v=JVE6NQqKPL4", - "source_type": "Youtube" + "source_type": "Youtube", + "icon_type": "FromSource" }, - "8858c7a1-ea6d-409b-9fc3-7256a39d4d8b": { - "name": "PENKTADIENIS", - "author": "NIERKA", - "url": "https://www.youtube.com/watch?v=h3TuZj_OAf0", - "source_type": "Youtube" + "407155fd-3174-4778-ae93-bb01b7518f9f": { + "name": "Cia Mano Rojus", + "author": "Robertas Kupstas", + "url": "https://www.youtube.com/watch?v=xij_YeEInr8", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "2f179aab-c51b-4501-b5d1-8a2e51b19a80": { + "name": "Applause", + "author": "Nicolas Julian", + "url": "https://www.youtube.com/watch?v=9qHLELnq1B0", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "2b19ae9f-2321-41fc-8a1f-2bb4c2975380": { + "name": "Malunas Prie Kelio", + "author": "VainHouse", + "url": "https://www.youtube.com/watch?v=bbwuNjDXCiM", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "a6a20f00-cbf9-4506-9655-d6fd27944fea": { + "name": "Rhodes Trip", + "author": "THEOS", + "url": "https://www.youtube.com/watch?v=m7guRO0Uz_c", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "fc3f499b-2c33-41d0-b79c-ca68486b2a4d": { + "name": "Blaue Augen", + "author": "08 Blumchen", + "url": "https://www.youtube.com/watch?v=mE4PZcUfiwE", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "f5a31a44-fc62-4cce-b65e-05e4085864fe": { + "name": "End of Beginning", + "author": "Djo", + "url": "https://open.spotify.com/track/3qhlB30KknSejmIvZZLjOD", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "9d482849-d488-4222-adc0-727f92babcab": { + "name": "Jau Nutilo Sirgaliai", + "author": "Ciulpuoneliai", + "url": "https://www.youtube.com/watch?v=s8qIVA1U0C0", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "dc6c36b0-f595-457f-8fc3-641710b0e3b9": { + "name": "I Pajuri", + "author": "Mercy Dance", + "url": "https://www.youtube.com/watch?v=RPpkMh47l9w", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "02d90830-7b5f-430f-b82c-f45998862e81": { + "name": "Juodas Golfas", + "author": "NL", + "url": "https://www.youtube.com/watch?v=f2-ZmElSvPc", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "f81f8f9d-6c56-4ae3-8f5f-28c04632d3b5": { + "name": "Kcik 23", + "author": "Unknown Artist", + "url": "https://www.youtube.com/watch?v=SnnqDdZJpzA", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "a950fac9-3b5f-4215-8a49-7680fd5b90bf": { + "name": "Gyvenu", + "author": "69 Danguje", + "url": "https://www.youtube.com/watch?v=HMXlhmAoux4", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "6dd614cd-ba76-483c-bf6d-26eb1f3b6f1a": { + "name": "99 Red Balloons", + "author": "Nena", + "url": "https://open.spotify.com/track/7p8HVe22aGW1XtO1hoDHGo", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "7f2b2809-1b38-45b5-876c-cbdb42b26bdf": { + "name": "Volkswagina", + "author": "Depresinis", + "url": "https://www.youtube.com/watch?v=1lZR1VKsQHo", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "0e33d04e-776e-4746-ab17-c4602d556716": { + "name": "1001 Naktis", + "author": "SADBOY", + "url": "https://www.youtube.com/watch?v=mLJIjGvWmKI", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "34e3c90b-7763-4154-9035-367e22ed7d75": { + "name": "Robinzonas", + "author": "Vitalija Katunskyte", + "url": "https://www.youtube.com/watch?v=erDHG-QpbPY", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "b23f9b7f-1668-43f0-a1bd-9471759db18f": { + "name": "Juda Tavo rankos", + "author": "Elektra", + "url": "https://www.youtube.com/watch?v=k2RuDoudnOE", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "7b680328-e576-4185-a5da-3c37de98ca42": { + "name": "cabin fever", + "author": "re6ce", + "url": "https://open.spotify.com/track/3c3oUMxOr2cVFBY6V3v08C", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "22f18d88-fb39-4cec-98be-02d4ebe3a6ee": { + "name": "Party maker", + "author": "MUTA", + "url": "https://www.youtube.com/watch?v=LT9VNK1aCXY", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "83808446-bd43-4140-86ff-853fea897a89": { + "name": "Bla Bla Bla", + "author": "Gigi D'Agostino", + "url": "https://www.youtube.com/watch?v=yKapqR2XRJE", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "4cf5e323-5e79-4471-816a-5fa345854cea": { + "name": "rytmecio rasos", + "author": "nemuno krantai", + "url": "https://www.youtube.com/watch?v=2-fGbsrofv4", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "484b9560-731b-447d-9e7f-3d32eb68b05f": { + "name": "Freed from Desire", + "author": "Drenchill", + "url": "https://www.youtube.com/watch?v=6b6FBneAENQ", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "bd85a9d7-1fb6-4154-a290-e5137590e419": { + "name": "I gamta", + "author": "Andzikas", + "url": "https://www.youtube.com/watch?v=UyLdjC-hihM", + "source_type": "Youtube", + "icon_type": "FromSource" }, "192a8655-7dfc-4c4b-b351-87c75cbbe048": { "name": "It Wasn't Me", "author": "Shaggy", "url": "https://www.youtube.com/watch?v=ssVj50ombaM", - "source_type": "Youtube" + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "0c77785e-7149-45a7-84a1-a9c8ccaa9f7f": { + "name": "Lyja", + "author": "SEL", + "url": "https://www.youtube.com/watch?v=KL6JBWnXCxw", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "1e77552d-702f-4c61-8e9f-bd02bbafe434": { + "name": "Morning Sex (Mochakk Remix)", + "author": "Ralph Castelli", + "url": "https://www.youtube.com/watch?v=6bCwJ_TIDG4", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "080d60fb-bdf1-40f3-8b81-967c5ea2fe44": { + "name": "moi marmeladni (paprobui mua mua)", + "author": "Katja lel", + "url": "https://www.youtube.com/watch?v=0JMdXFHo5SY", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "81426b49-3511-4e48-be21-3c24acba0fb9": { + "name": "Kernkraft 400", + "author": "Zombie Nation", + "url": "https://www.youtube.com/watch?v=z5LW07FTJbI", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "05a28184-e58e-42c3-a803-512bb0817a07": { + "name": "Vakareja", + "author": "Karaliska Erdve", + "url": "https://www.youtube.com/watch?v=g0HmrlJ7fhE", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "457bc1f5-f804-4665-a595-8e56a6558d1d": { + "name": "Sombrero", + "author": "Kastanenda", + "url": "https://www.youtube.com/watch?v=3Z3_4TknCfQ", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "2374179d-d6a8-41b9-9cac-21147303fc8e": { + "name": "Nebenoriu Laukt", + "author": "Dzordana Butkute", + "url": "https://www.youtube.com/watch?v=_AozFrAqNMk", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "3b2573d4-2e1b-4446-a377-5fcb2b0a70c5": { + "name": "18 mne uze", + "author": "Ruki Verch", + "url": "https://www.youtube.com/watch?v=Hxab_Sr132o", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "35877af8-65ad-4d85-9f18-93b98fd3ebd4": { + "name": "Le Son Dancefloor", + "author": "Sweely", + "url": "https://www.youtube.com/watch?v=5uEvZgmoG6Y", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "201c6680-7dcf-4d75-8bdc-76ff9a715167": { + "name": "Gyvenimo man vieno neuztenka", + "author": "SEL", + "url": "https://youtu.be/7Gd9XaEG5o4", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "d286a3a7-ab7b-488c-9c68-b7521e290c5e": { + "name": "Bossa Nova (Lewii Edit)", + "author": "Billie Eilish", + "url": "https://www.youtube.com/watch?v=gNawHj2NCxA", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "75c6e1aa-21c7-4626-9def-602d656282bc": { + "name": "Ka Tu Ka Vakare", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=6SOS4ljHbJY", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "eb08806a-5fe3-46d7-a989-89f6a55187cc": { + "name": "Tailwhip (Lewii Edit)", + "author": "Men I Trust", + "url": "https://www.youtube.com/watch?v=XhyM-JUWwWQ", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "9ef33d55-972d-490c-95c6-bf046bf4f979": { + "name": "MONEY ON THE DASH", + "author": "Unknown", + "url": "https://open.spotify.com/track/6nVEV8CIU4dw12oVZbKJtl", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "7832d70f-2af3-417f-88dd-e193622ac599": { + "name": "DZIEWCZYNO Z TIKTOKA", + "author": "DR. VODKA", + "url": "https://www.youtube.com/watch?v=HLbw1WQt64o", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "a59cb678-f229-43cf-b438-4ce53b7264ae": { + "name": "R1", + "author": "NL", + "url": "https://www.youtube.com/watch?v=hSgav4fYnZ8", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "bcb9af16-7bdb-458a-b092-42225abf2645": { + "name": "LEDUKAI", + "author": "Depresinis feat. Deivas", + "url": "https://www.youtube.com/watch?v=R2-MtpkKgGI", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "0491fd9f-149d-4e70-bc5c-0fae9a21d9b0": { + "name": "Rozovoe vino", + "author": "Eldzej and Feduk", + "url": "https://www.youtube.com/watch?v=S9oXj3a4gZ4", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "70a80d91-581e-4599-81e6-d047f28e9068": { + "name": "Margarita", + "author": "Rondo", + "url": "https://www.youtube.com/watch?v=rF4w-Rxsiv4", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "5015106c-abcb-45c2-aed3-1f28674f92f6": { + "name": "Dance For Me", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=5DTSvGO_944", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "41a8d7c8-4b75-46f6-9940-7f0b8f5f5feb": { + "name": "Beggin' (Techno)", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=tXPs1FwW6lk", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "2645c0f2-fade-489a-87ad-261d5d983ef6": { + "name": "Bad Boys", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=NTC7RD8xzCY", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "cbc90bff-5476-408c-9cc8-afd1af5b536d": { + "name": "Vienna", + "author": "Billy Joel", + "url": "https://open.spotify.com/track/4U45aEWtQhrm8A5mxPaFZ7", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "4eafd817-d75a-451e-b6b4-38ef29e66fdf": { + "name": "Ne, nereikia asaru", + "author": "Rytis Cicinas", + "url": "https://www.youtube.com/watch?v=48GSg1q2kPE", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "383cb60f-13fd-4947-9924-6c5d8c39d453": { + "name": "Kur Tu", + "author": "Patruliai", + "url": "https://www.youtube.com/watch?v=OPWhiu3cvj0", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "85098bbc-86fa-4da4-b342-d2a512738060": { + "name": "Topolini puh", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=UUryvYF8tUs", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "877c24e4-c0c0-4e9c-a553-221e381c8a00": { + "name": "Stumblin' In", + "author": "CYRIL", + "url": "https://open.spotify.com/track/0h3Xy4V4apMraB5NuM8U7Z", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "e37c6cb6-ad8e-43a7-83d1-8b795db8aa1c": { + "name": "Harness Your Hopes", + "author": "Pavement", + "url": "https://open.spotify.com/track/4vsoWZcvtvSsE0OiVvDDvX", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "6d78099b-042c-4b19-b3d9-15af1bf4ef10": { + "name": "JUODA ORCHIDEJA", + "author": "MG INTERNATIONAL", + "url": "https://www.youtube.com/watch?v=HQvceFRBq9M", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "8c641f7f-e151-4abc-932c-a9895823a278": { + "name": "Nevaidink", + "author": "SixthBoi", + "url": "https://www.youtube.com/watch?v=nOTNnnrqTII", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "2c650e29-9f87-4253-8074-146f3653051d": { + "name": "Satisfaction", + "author": "Benny Benassi", + "url": "https://www.youtube.com/watch?v=a0fkNdPiIL4", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "cec368bd-6b4c-4c89-9eeb-1b88bed0efc3": { + "name": "PARIS (TECHNO)", + "author": "$UICIDEBOY$", + "url": "https://www.youtube.com/watch?v=YYDJmGDkEyw", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "0c5a22fc-2a61-4171-a5b9-f24da0c71466": { + "name": "As ziuriu i tave pasauli", + "author": "SEL", + "url": "https://youtu.be/_SPDjl80kKw", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "7e32803d-a5a9-453c-8c81-b479c51e5bc9": { + "name": "Looking Out for You", + "author": "Joy Again", + "url": "https://open.spotify.com/track/3jfZ9M23l0L7RxzYMTgBTv", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "4a7b1853-7529-498d-addf-25e894a37ccf": { + "name": "Temptation", + "author": "Arash", + "url": "https://www.youtube.com/watch?v=6X3ZJh762-I", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "6a00704f-6da9-44d7-8fee-75cf487036f0": { + "name": "Lovoj Vezi", + "author": "Tipo grupe", + "url": "https://www.youtube.com/watch?v=M3zVMzWCy_c", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "9866acdd-97ee-4e19-ba20-a64caa9b02ee": { + "name": "Where'd All the Time Go?", + "author": "Dr. Dog", + "url": "https://open.spotify.com/track/0UV5zxRMz6AO4ZwUOZNIKI", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "6bfe21f8-b6e5-409b-b6cb-a5692f6dfeeb": { + "name": "Welcome To The Club", + "author": "Manian", + "url": "https://www.youtube.com/watch?v=7F9xDewtgNA", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "c374f3c2-b498-49b3-88c5-a2e6e741e1e8": { + "name": "Leisk", + "author": "SEL", + "url": "https://youtu.be/DDPmFMrffXQ", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "e53d24bf-930d-490a-b41b-9b3382e24e3c": { + "name": "Truputi", + "author": "Ganja", + "url": "https://www.youtube.com/watch?v=Pxve7CwiCHM", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "08995ab0-2954-4d6b-913e-27609e90b354": { + "name": "Caramelldansen", + "author": "Alfons, LOOKET, DJ BERIT", + "url": "https://open.spotify.com/track/1v7aZHBUwKxeCgmpe6fVUH", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "4e903bfb-e9bf-49dc-a299-e08949ab78f9": { + "name": "DANCE", + "author": "ROMANCEPLANET", + "url": "https://www.youtube.com/watch?v=ircOfMb4gEw", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "2bd2e64e-28f0-4bd7-aee3-e1d27ed0797d": { + "name": "In the End", + "author": "Linkin Park", + "url": "https://open.spotify.com/track/60a0Rd6pjrkxjPbaKzXjfq", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "ca765223-e4e6-4b5d-8928-919c3f491b43": { + "name": "Kaifuok", + "author": "SADBOY", + "url": "https://www.youtube.com/watch?v=vclryWgfy8I", + "source_type": "Youtube", + "icon_type": "FromSource" }, "a1ab9370-70bc-488d-a78b-5cdc09c82f73": { "name": "Trys Trys Trys", "author": "Riaukenzo", "url": "https://www.youtube.com/watch?v=qJv6GRQCnCk", - "source_type": "Youtube" + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "402a9066-127a-4a62-b711-50e979abbd51": { + "name": "Naktinis Tusas", + "author": "Dove", + "url": "https://www.youtube.com/watch?v=pz-HEAwFEnk", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "95a3350c-c62f-4543-8cfe-6c512861b229": { + "name": "Ryk Zuvedra ryk", + "author": "Zilviokas", + "url": "https://www.youtube.com/watch?v=eN6BOI7UlSE", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "8e8c3f6c-e34b-4f4e-b9be-f36be5901435": { + "name": "biznis", + "author": "PROFLAME", + "url": "https://www.youtube.com/watch?v=t139Vd83pgs", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "1a22e35a-0af1-4326-b59c-00d59504446b": { + "name": "Virs debesu", + "author": "Andzikas", + "url": "https://www.youtube.com/watch?v=PHJcVGhxra8", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "80a169ba-f711-408c-834c-744bac3660ca": { + "name": "If Theres A Heaven I Wanna See It", + "author": "Fidde", + "url": "https://www.youtube.com/watch?v=l2Nw7cIh7qg", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "88fe04aa-a7be-4f6c-b32f-d3d25e58bbf8": { + "name": "Because I Got High", + "author": "Afroman", + "url": "https://www.youtube.com/watch?v=WeYsTmIzjkw", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "e71a61d4-b54a-47d1-b0ad-db6695bd0739": { + "name": "Hey Lover!", + "author": "Wabie", + "url": "https://open.spotify.com/track/7rC3P7tpWriaC4hYWKwGQd", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "f1878fda-ecec-4303-a6df-dc6adf1ea3c0": { + "name": "Juodas Garvezys (Remix)", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=D-7qQbXHSAw", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "009b9458-3205-4b13-9c65-03f16fea2293": { + "name": "Whiskey Cola Lietuviskai (sultys degtinele) remix", + "author": "L1GHT CASH", + "url": "https://www.youtube.com/watch?v=YVaqDaf1KXU", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "4b61344d-fa89-4b79-bd45-3b1fc8c8cc1c": { + "name": "Rycka klipas", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=nuTUDSQ3BBI", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "c28f14ca-ec10-469a-b0cc-3e26e9f56007": { + "name": "VASARA ZJBS", + "author": "Depresinis & MERAKI2004", + "url": "https://www.youtube.com/watch?v=BD-pBjRy-5A", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "5c2ee27e-d564-404a-8259-87d1d336f106": { + "name": "Money", + "author": "The Drums", + "url": "https://open.spotify.com/track/3VIJBrMpvimHEw5wtPh2wB", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "fa339b0b-8d3a-45e7-aed9-f744afb4a666": { + "name": "Eik Tu NA", + "author": "AVA", + "url": "https://www.youtube.com/watch?v=yRf3ijaIgOg", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "83ff90a9-4a19-4a66-a452-c2bafdfb884b": { + "name": "You're My Heart, You're My Soul", + "author": "Modern Talking", + "url": "https://www.youtube.com/watch?v=4kHl4FoK1Ys", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "9fabb799-f6aa-45a0-93b7-8cb08ab8f0a8": { + "name": "16 metu", + "author": "69 Danguje", + "url": "https://www.youtube.com/watch?v=nwjoqPcUPrw", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "3453b523-e1f0-49d3-b60b-5ba063b6c26d": { + "name": "The Love Parade ( Bounce Invaderz )", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=xogT6KBWjCU3", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "7d232736-f977-4645-bd64-106e94f91bb0": { + "name": "Judam Lietuvoj", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=WDzWSEgSy5U", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "47001462-76c8-4aee-8ed4-65242600f840": { + "name": "Fireball", + "author": "Pitbul", + "url": "https://www.youtube.com/watch?v=HMqgVXSvwGo", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "22565196-5757-4767-8f1f-f1c9b8a87dcc": { + "name": "I WAS MADE FOR LOVIN' YOU (TECHNO)", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=asVznhccYao", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "3525668b-4402-4fb8-b106-bed44d8c9db2": { + "name": "I Kluba", + "author": "Raketa", + "url": "https://www.youtube.com/watch?v=FkSjtpYN3EI", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "fa7d62b1-2f9a-4499-b07b-ac3127c0f69f": { + "name": "Mano Skonis Sokolado (Matuze & Arnisxd Remix)", + "author": "Sokoledas", + "url": "https://soundcloud.com/matuze/sokoledas-mano-skonis-sokolado-matuze-arnisxd-remix", + "source_type": "Soundcloud", + "icon_type": "FromSource" + }, + "615d63ee-51aa-4ac2-b826-9a41f59b8622": { + "name": "I Love It", + "author": "Icona Pop", + "url": "https://www.youtube.com/watch?v=UxxajLWwzqY", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "8858c7a1-ea6d-409b-9fc3-7256a39d4d8b": { + "name": "PENKTADIENIS", + "author": "NIERKA", + "url": "https://www.youtube.com/watch?v=h3TuZj_OAf0", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "eadbd827-0f71-4401-97bd-d11c365c3243": { + "name": "I Only See Things I Dont Have", + "author": "Fidde", + "url": "https://www.youtube.com/watch?v=vX_Ye_ZzI-Y", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "795b22ae-d19e-4571-a5d7-fba5a66d5b6e": { + "name": "PLAIN WHITE TEE", + "author": "ROMANCEPLANET", + "url": "https://www.youtube.com/watch?v=tdVQbNwjGac", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "8dca8d6c-3388-4133-b773-79b9f076e467": { + "name": "0,7", + "author": "Depresinis feat. Deivas", + "url": "https://www.youtube.com/watch?v=rjwFjBgTzAA", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "2e9ef729-1560-446c-af6a-8a9d4c43ac9a": { + "name": "Big Sis", + "author": "SALES", + "url": "https://open.spotify.com/track/0ARp9mXXpPflIwehy25kCa", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "6bc8cd16-722b-42e4-9824-a1de9c67029f": { + "name": "Tears Drop", + "author": "Baltra", + "url": "https://www.youtube.com/watch?v=EXXMtKPfuzY", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "bf529d54-1ad0-4396-84c7-82bd7fe495c6": { + "name": "P.R.O.T.E.C.T.T.R.A.N.S.K.I.D.S.", + "author": "Cheap Dirty Horse", + "url": "https://open.spotify.com/track/1ytHY16pP1P6A2noeiPXuU", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "9d7a0837-04d4-40f7-92dc-48c7db70be51": { + "name": "As Judu", + "author": "Adomas Vysniauskas", + "url": "https://www.youtube.com/watch?v=dMm16TzZrjg", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "0b907d17-e3f9-4dbb-9c2d-e10327316f6e": { + "name": "UZ MUS IR JUS", + "author": "Mr.Bullet", + "url": "https://www.youtube.com/watch?v=85q_7jXEgH8", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "4a56c71c-70f0-45e7-a9b8-2304d41e1877": { + "name": "Big Jet Plane", + "author": "Restricted", + "url": "https://www.youtube.com/watch?v=NpVF0z5N-tE", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "9d93859c-dae3-4c03-8f8d-d4f6bc0e287e": { + "name": "Jealous", + "author": "Eyedress", + "url": "https://open.spotify.com/track/1aXV8GrmQLvgoFtBPERP7E", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "9be83d96-6dfb-47a0-b58e-a1aed1cf6031": { + "name": "Pasitusinam", + "author": "NL", + "url": "https://www.youtube.com/watch?v=WhSFudvloog", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "50186034-e8b4-4778-81e3-ab327e54dbff": { + "name": "We Are The People", + "author": "Empire Of The Sun, southstar", + "url": "https://www.youtube.com/watch?v=qguEGR5BK2k", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "6c3f2503-0160-4c42-8b17-25ff402f3fa7": { + "name": "Visky Kola karaleva trans pola", + "author": "Dzaro and hansa", + "url": "https://www.youtube.com/watch?v=fflrMvZ2HtA", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "ee1e8d12-75ac-43f7-bf85-a1b69eb66e86": { + "name": "Vanished", + "author": "Crystal Castles", + "url": "https://open.spotify.com/track/3gGMsx3jxYKfhXq8LMj1tz", + "source_type": "Spotify", + "icon_type": "FromSource" + }, + "4f368ef5-08d0-4d1f-b8ba-a34ee9fc6aa2": { + "name": "Blizgantys Naikai", + "author": "SADBOY", + "url": "https://www.youtube.com/watch?v=p5KsYJGcfOM", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "8fcad64e-bb63-414b-9cad-243f1f4c4293": { + "name": "FALL FROM THE SKY", + "author": "ROMANCEPLANET", + "url": "https://www.youtube.com/watch?v=HMhzxzXBisw", + "source_type": "Youtube", + "icon_type": "FromSource" + }, + "16dafb40-ebac-4e04-961a-99d79789f1a3": { + "name": "Topine Panele", + "author": "Wenona Waves", + "url": "https://www.youtube.com/watch?v=MPHuhmUomfE", + "source_type": "Youtube", + "icon_type": "FromSource" } }, "playlists": { - "8c9d2cf1-6f0b-4ea9-993a-c3193867a914": { - "name": "rave", - "author": "Unknown", - "songs": [ - "59c20651-6ffe-493d-886b-ccd8b7fe6dee", - "78d3766c-7d79-43a1-aa37-f680cfd253e0", - "7da79c32-9eda-4897-be69-69fb39437404", - "0ee56450-2942-4805-9f08-b49652472258" - ] - }, "8e806ac3-63d9-4366-95d6-04f5a0aae31e": { "name": "rusiskos", "author": "Unknown", @@ -1131,12 +1305,31 @@ "080d60fb-bdf1-40f3-8b81-967c5ea2fe44" ] }, - "a906d80f-2028-407e-8263-6eacb53325a2": { - "name": "lietuviskos/rave", + "c3ebcdd5-82b6-49b3-a340-dc786a66eee6": { + "name": "reggea", "author": "Unknown", "songs": [ - "2b19ae9f-2321-41fc-8a1f-2bb4c2975380", - "fa7d62b1-2f9a-4499-b07b-ac3127c0f69f" + "192a8655-7dfc-4c4b-b351-87c75cbbe048" + ] + }, + "a37e3c7c-584d-4803-981b-5be9244dd7c1": { + "name": "rock", + "author": "Unknown", + "songs": [ + "d8423579-1225-4865-9955-149e6878b59d" + ] + }, + "cb15d471-58bc-4d5a-9e3c-b13e1433818c": { + "name": "pop", + "author": "Unknown", + "songs": [ + "83ff90a9-4a19-4a66-a452-c2bafdfb884b", + "f3edb436-bf04-4ad5-ad45-684a601846c3", + "20945b3f-e9d6-4023-9a97-4a04424cc8a3", + "90ae639e-0214-4a8e-b582-4949674ffaa2", + "615d63ee-51aa-4ac2-b826-9a41f59b8622", + "190a5577-124a-4232-9e6f-1d0a50f4d881", + "47001462-76c8-4aee-8ed4-65242600f840" ] }, "4230f218-7de4-463c-a42f-ad05c745de5a": { @@ -1161,24 +1354,39 @@ "cec368bd-6b4c-4c89-9eeb-1b88bed0efc3" ] }, - "a37e3c7c-584d-4803-981b-5be9244dd7c1": { - "name": "rock", + "7d7c0020-7daa-4d85-8aa9-311f24eeb702": { + "name": "lietuviskos/sel", "author": "Unknown", "songs": [ - "d8423579-1225-4865-9955-149e6878b59d" + "60214f0e-9a37-49b4-92bf-b7b548e501ad", + "e1cb8b00-713b-4a0e-bc61-dbf2d2596fcf", + "abd6a036-f17a-4a6a-8420-2cc3e7e4a181", + "a0bd5ffe-4be8-498e-8f43-c5a9505a4872", + "201c6680-7dcf-4d75-8bdc-76ff9a715167", + "18c2b9bc-6403-4a67-94bd-1e9f5413d83b", + "c374f3c2-b498-49b3-88c5-a2e6e741e1e8", + "0c5a22fc-2a61-4171-a5b9-f24da0c71466", + "0c77785e-7149-45a7-84a1-a9c8ccaa9f7f", + "98b04764-39cc-4c82-a2e2-420dd85573ca", + "101166d0-1b7c-4d1c-b0ce-35b9a89b0822" ] }, - "cb15d471-58bc-4d5a-9e3c-b13e1433818c": { - "name": "pop", + "8c9d2cf1-6f0b-4ea9-993a-c3193867a914": { + "name": "rave", "author": "Unknown", "songs": [ - "83ff90a9-4a19-4a66-a452-c2bafdfb884b", - "f3edb436-bf04-4ad5-ad45-684a601846c3", - "20945b3f-e9d6-4023-9a97-4a04424cc8a3", - "90ae639e-0214-4a8e-b582-4949674ffaa2", - "615d63ee-51aa-4ac2-b826-9a41f59b8622", - "190a5577-124a-4232-9e6f-1d0a50f4d881", - "47001462-76c8-4aee-8ed4-65242600f840" + "59c20651-6ffe-493d-886b-ccd8b7fe6dee", + "78d3766c-7d79-43a1-aa37-f680cfd253e0", + "7da79c32-9eda-4897-be69-69fb39437404", + "0ee56450-2942-4805-9f08-b49652472258" + ] + }, + "a906d80f-2028-407e-8263-6eacb53325a2": { + "name": "lietuviskos/rave", + "author": "Unknown", + "songs": [ + "2b19ae9f-2321-41fc-8a1f-2bb4c2975380", + "fa7d62b1-2f9a-4499-b07b-ac3127c0f69f" ] }, "5f2e4043-cb32-4e90-9fb6-69f0466d6398": { @@ -1197,85 +1405,6 @@ "f81f8f9d-6c56-4ae3-8f5f-28c04632d3b5" ] }, - "ba68f47d-384d-4808-a69d-48c6a85be479": { - "name": "electronic", - "author": "Unknown", - "songs": [ - "81426b49-3511-4e48-be21-3c24acba0fb9", - "2c650e29-9f87-4253-8074-146f3653051d", - "9ef33d55-972d-490c-95c6-bf046bf4f979" - ] - }, - "b633b0c7-8151-4b5c-bf18-a0b8d2f85f27": { - "name": "Ours <3", - "author": "Unknown", - "songs": [ - "e71a61d4-b54a-47d1-b0ad-db6695bd0739", - "bf529d54-1ad0-4396-84c7-82bd7fe495c6", - "7e32803d-a5a9-453c-8c81-b479c51e5bc9", - "6dd614cd-ba76-483c-bf6d-26eb1f3b6f1a", - "9866acdd-97ee-4e19-ba20-a64caa9b02ee", - "ee1e8d12-75ac-43f7-bf85-a1b69eb66e86", - "5c2ee27e-d564-404a-8259-87d1d336f106", - "f5a31a44-fc62-4cce-b65e-05e4085864fe", - "7b680328-e576-4185-a5da-3c37de98ca42", - "877c24e4-c0c0-4e9c-a553-221e381c8a00", - "d563619a-344e-41cf-99d1-5a52214ada49", - "92561031-92ae-471a-b154-8519c715011d", - "cd72e9db-aaa4-485e-b3a5-7fbeed2cff36", - "9d93859c-dae3-4c03-8f8d-d4f6bc0e287e", - "bb16708f-0cd7-4918-8014-d374d68acbd2", - "be09f147-cda5-4e5f-ac29-eef9c3a7414f", - "7ed02ac9-cb84-4a34-870d-56b226f0a6be", - "47f2a63e-e9eb-48df-a61b-dbcdfa3aaf35", - "e37c6cb6-ad8e-43a7-83d1-8b795db8aa1c", - "3d543d58-e33d-4158-9956-049309baa35c", - "2e9ef729-1560-446c-af6a-8a9d4c43ac9a", - "ec3edf2d-1e19-4c71-8f5c-e53d9cd06c3b", - "c7867d88-60f2-483b-b435-883d4ff5b2f9", - "cbc90bff-5476-408c-9cc8-afd1af5b536d", - "2bd2e64e-28f0-4bd7-aee3-e1d27ed0797d", - "08995ab0-2954-4d6b-913e-27609e90b354", - "862ddd87-68c4-4bed-a8cd-0e2021a0ce79", - "0679475a-259c-4c98-9ae7-a58c10dfeedb", - "6895e921-91f2-4713-b604-c2cdd9f3f1c2", - "8bf09666-9aba-4c71-a58a-a64200d49f9e" - ] - }, - "7d7c0020-7daa-4d85-8aa9-311f24eeb702": { - "name": "lietuviskos/sel", - "author": "Unknown", - "songs": [ - "60214f0e-9a37-49b4-92bf-b7b548e501ad", - "e1cb8b00-713b-4a0e-bc61-dbf2d2596fcf", - "abd6a036-f17a-4a6a-8420-2cc3e7e4a181", - "a0bd5ffe-4be8-498e-8f43-c5a9505a4872", - "201c6680-7dcf-4d75-8bdc-76ff9a715167", - "18c2b9bc-6403-4a67-94bd-1e9f5413d83b", - "c374f3c2-b498-49b3-88c5-a2e6e741e1e8", - "0c5a22fc-2a61-4171-a5b9-f24da0c71466", - "0c77785e-7149-45a7-84a1-a9c8ccaa9f7f", - "98b04764-39cc-4c82-a2e2-420dd85573ca", - "101166d0-1b7c-4d1c-b0ce-35b9a89b0822" - ] - }, - "2391911d-2d2c-4c33-b8f5-1a6e543512cc": { - "name": "noclue", - "author": "Unknown", - "songs": [ - "9e6095bb-8b05-40eb-b5d3-b6410ac65171", - "7832d70f-2af3-417f-88dd-e193622ac599", - "518e23e8-72df-42de-a918-6a9a197deb9a", - "2645c0f2-fade-489a-87ad-261d5d983ef6" - ] - }, - "c3ebcdd5-82b6-49b3-a340-dc786a66eee6": { - "name": "reggea", - "author": "Unknown", - "songs": [ - "192a8655-7dfc-4c4b-b351-87c75cbbe048" - ] - }, "ff11b5bc-6bf7-4cdd-a47a-023dcc68a8c3": { "name": "alt", "author": "Unknown", @@ -1286,14 +1415,6 @@ "795b22ae-d19e-4571-a5d7-fba5a66d5b6e" ] }, - "e4203363-48dd-430c-8a63-f997ebe7e2bc": { - "name": "hip-hop", - "author": "Unknown", - "songs": [ - "88fe04aa-a7be-4f6c-b32f-d3d25e58bbf8", - "484b9560-731b-447d-9e7f-3d32eb68b05f" - ] - }, "27afdb2f-2672-43f1-8a55-b7c6bbb7927a": { "name": "lietuviskos", "author": "Unknown", @@ -1379,6 +1500,69 @@ "c72768c0-1f2e-4992-b66f-e569c572435a", "eaf1cc63-3eb6-4d86-a986-e8129fff7fcb" ] + }, + "2391911d-2d2c-4c33-b8f5-1a6e543512cc": { + "name": "noclue", + "author": "Unknown", + "songs": [ + "9e6095bb-8b05-40eb-b5d3-b6410ac65171", + "7832d70f-2af3-417f-88dd-e193622ac599", + "518e23e8-72df-42de-a918-6a9a197deb9a", + "2645c0f2-fade-489a-87ad-261d5d983ef6" + ] + }, + "ba68f47d-384d-4808-a69d-48c6a85be479": { + "name": "electronic", + "author": "Unknown", + "songs": [ + "81426b49-3511-4e48-be21-3c24acba0fb9", + "2c650e29-9f87-4253-8074-146f3653051d", + "9ef33d55-972d-490c-95c6-bf046bf4f979" + ] + }, + "e4203363-48dd-430c-8a63-f997ebe7e2bc": { + "name": "hip-hop", + "author": "Unknown", + "songs": [ + "88fe04aa-a7be-4f6c-b32f-d3d25e58bbf8", + "484b9560-731b-447d-9e7f-3d32eb68b05f" + ] + }, + "b633b0c7-8151-4b5c-bf18-a0b8d2f85f27": { + "name": "Ours <3", + "author": "Unknown", + "songs": [ + "e71a61d4-b54a-47d1-b0ad-db6695bd0739", + "bf529d54-1ad0-4396-84c7-82bd7fe495c6", + "7e32803d-a5a9-453c-8c81-b479c51e5bc9", + "6dd614cd-ba76-483c-bf6d-26eb1f3b6f1a", + "9866acdd-97ee-4e19-ba20-a64caa9b02ee", + "ee1e8d12-75ac-43f7-bf85-a1b69eb66e86", + "5c2ee27e-d564-404a-8259-87d1d336f106", + "f5a31a44-fc62-4cce-b65e-05e4085864fe", + "7b680328-e576-4185-a5da-3c37de98ca42", + "877c24e4-c0c0-4e9c-a553-221e381c8a00", + "d563619a-344e-41cf-99d1-5a52214ada49", + "92561031-92ae-471a-b154-8519c715011d", + "cd72e9db-aaa4-485e-b3a5-7fbeed2cff36", + "9d93859c-dae3-4c03-8f8d-d4f6bc0e287e", + "bb16708f-0cd7-4918-8014-d374d68acbd2", + "be09f147-cda5-4e5f-ac29-eef9c3a7414f", + "7ed02ac9-cb84-4a34-870d-56b226f0a6be", + "47f2a63e-e9eb-48df-a61b-dbcdfa3aaf35", + "e37c6cb6-ad8e-43a7-83d1-8b795db8aa1c", + "3d543d58-e33d-4158-9956-049309baa35c", + "2e9ef729-1560-446c-af6a-8a9d4c43ac9a", + "ec3edf2d-1e19-4c71-8f5c-e53d9cd06c3b", + "c7867d88-60f2-483b-b435-883d4ff5b2f9", + "cbc90bff-5476-408c-9cc8-afd1af5b536d", + "2bd2e64e-28f0-4bd7-aee3-e1d27ed0797d", + "08995ab0-2954-4d6b-913e-27609e90b354", + "862ddd87-68c4-4bed-a8cd-0e2021a0ce79", + "0679475a-259c-4c98-9ae7-a58c10dfeedb", + "6895e921-91f2-4713-b604-c2cdd9f3f1c2", + "8bf09666-9aba-4c71-a58a-a64200d49f9e" + ] } } -} \ No newline at end of file +} diff --git a/xmpd-cache/Cargo.toml b/xmpd-cache/Cargo.toml index ccf5cd1..674ad3a 100644 --- a/xmpd-cache/Cargo.toml +++ b/xmpd-cache/Cargo.toml @@ -26,3 +26,6 @@ camino.workspace = true lazy_static.workspace = true log.workspace = true uuid.workspace = true +reqwest.workspace = true +url.workspace = true +image.workspace = true diff --git a/xmpd-cache/src/downloader/icon.rs b/xmpd-cache/src/downloader/icon.rs index e69de29..72c84fa 100644 --- a/xmpd-cache/src/downloader/icon.rs +++ b/xmpd-cache/src/downloader/icon.rs @@ -0,0 +1,133 @@ +use std::{collections::HashMap, ffi::OsStr, io::{BufReader, Cursor}, path::PathBuf, process::{Command, Stdio}, str::FromStr, sync::{Arc, Mutex, MutexGuard}}; + +use anyhow::anyhow; +use image::ImageReader; +use xmpd_manifest::song::{IconType, Song, SourceType}; + +use crate::{downloader::song::SongStatus, DlStatus}; + +lazy_static::lazy_static!( + static ref ICON_CACHE_DL: Arc> = Arc::default(); +); + +#[derive(Debug, Default, Clone)] +pub struct IconCacheDl { + pub jobs: HashMap, + pub current_jobs: usize, +} + +impl IconCacheDl { + pub fn get() -> crate::Result> { + match ICON_CACHE_DL.lock() { + Ok(v) => Ok(v), + Err(e) => anyhow::bail!(format!("{e:?}")) + } + } + pub fn is_job_list_full(&self) -> bool { + self.current_jobs >= 5 + } + + pub fn download(&mut self, sid: uuid::Uuid, song: Song) -> crate::Result<()> { + match song.icon_type().clone() { + IconType::FromSource => { + let tooling = xmpd_settings::Settings::get()?.tooling.clone(); + match song.source_type() { + SourceType::Youtube => { + self.jobs.insert(sid.clone(), DlStatus::Downloading); + let mut path = xmpd_cliargs::CLIARGS.cache_path(); + path.push("icons"); + path.push(sid.to_string()); + + let mut cmd = Command::new(tooling.ytdlp_path); + cmd.arg(song.url().to_string()); + cmd.arg("-o"); + cmd.arg(&path); + cmd.args(["--write-thumbnail", "--skip-download"]); + if xmpd_cliargs::CLIARGS.debug { + cmd.stdout(Stdio::piped()); + cmd.stderr(Stdio::piped()); + } else { + cmd.stdout(Stdio::null()); + cmd.stderr(Stdio::null()); + } + let child = cmd.spawn()?; + std::thread::spawn(move || { + if let Ok(output) = child.wait_with_output() { + for line in String::from_utf8(output.stdout).unwrap().lines() { + log::info!("CMD: {}", line); + } + for line in String::from_utf8(output.stderr).unwrap().lines() { + log::error!("CMD: {}", line); + } + } + let old_p = path.with_extension("webp"); // Default for yt-dlp + let new_p = path.with_extension("png"); // Default for all + let old_img = ImageReader::open(&old_p).unwrap().decode().unwrap(); + old_img.save(&new_p).unwrap(); + std::fs::remove_file(old_p).unwrap(); + let mut cache = IconCacheDl::get().unwrap(); + cache.jobs.insert(sid, DlStatus::Done(Some(new_p.into()))); + }); + } + SourceType::Spotify => { + todo!() + } + SourceType::Soundcloud => { + todo!() + } + _ => (), + } + } + IconType::CustomUrl(url) => self.download_custom_url_icon(&sid, &url)?, + IconType::None => () + } + Ok(()) + } + + pub fn download_custom_url_icon(&mut self, sid: &uuid::Uuid, url: &url::Url) -> crate::Result<()> { + self.jobs.insert(sid.clone(), DlStatus::Downloading); + let url_p = PathBuf::from_str(url.path())?; + let Some(ext) = url_p.extension() else { + anyhow::bail!("Url without extension, cant continue"); + }; + let ext = ext.to_string_lossy().to_string(); + let mut path = xmpd_cliargs::CLIARGS.cache_path(); + path.push("icons"); + path.push(sid.to_string()); + path.set_extension(ext); + let sid = sid.clone(); + let url = url.clone(); + std::thread::spawn(move || { + match reqwest::blocking::get(url.clone()) { + Ok(v) => { + match v.bytes() { + Ok(bytes) => { + if let Err(e) = std::fs::write(path, bytes) { + if let Ok(mut cache) = IconCacheDl::get() { + if let Some(job) = cache.jobs.get_mut(&sid) { + *job = DlStatus::Error(file!(), line!() as usize, format!("{e:?}")); + } + } + } + } + Err(e) => { + if let Ok(mut cache) = IconCacheDl::get() { + if let Some(job) = cache.jobs.get_mut(&sid) { + *job = DlStatus::Error(file!(), line!() as usize, format!("{e:?}")); + } + } + } + } + } + Err(e) => { + if let Ok(mut cache) = IconCacheDl::get() { + if let Some(job) = cache.jobs.get_mut(&sid) { + *job = DlStatus::Error(file!(), line!() as usize, format!("{e:?}")); + } + } + } + } + }); + Ok(()) + } +} diff --git a/xmpd-cache/src/lib.rs b/xmpd-cache/src/lib.rs index ed3774d..4715af8 100644 --- a/xmpd-cache/src/lib.rs +++ b/xmpd-cache/src/lib.rs @@ -1,4 +1,4 @@ -use std::{collections::HashMap, str::FromStr, sync::{mpsc::{self, Receiver, Sender}, Arc, Mutex, MutexGuard}, time::Duration}; +use std::{collections::HashMap, path::PathBuf, str::FromStr, sync::{mpsc::{self, Receiver, Sender}, Arc, Mutex, MutexGuard}, time::Duration}; use downloader::song::SongStatus; use xmpd_manifest::song::Song; @@ -14,20 +14,24 @@ lazy_static::lazy_static!( pub struct Cache { cache_dir: camino::Utf8PathBuf, song_cache: HashMap, - queue: Vec<(uuid::Uuid, Song)> + icon_cache: HashMap, + song_queue: Vec<(uuid::Uuid, Song)>, + icon_queue: Vec<(uuid::Uuid, Song)>, + //meta_queue: Vec<(uuid::Uuid, Song)> // TODO: Add Icon, metadata cache } #[derive(Debug, Clone)] pub enum DlStatus { - Done(camino::Utf8PathBuf), + Done(Option), Downloading, - Error(String), + Error(&'static str, usize, String), } #[derive(Debug, Clone)] pub enum Message { DownloadDone(uuid::Uuid), + Error(&'static str, usize, String) } impl Cache { @@ -60,7 +64,7 @@ impl Cache { let id = uuid::Uuid::from_str(file_name)?; log::debug!("Found song {id}"); // TODO: Check if id is in manifest - self.song_cache.insert(id, DlStatus::Done(file_path.to_path_buf())); + self.song_cache.insert(id, DlStatus::Done(Some(file_path.into()))); } } @@ -73,21 +77,35 @@ impl Cache { Ok(cache_rx) } - pub fn download_to_cache(&mut self, sid: uuid::Uuid, song: Song) { - self.queue.push((sid, song)); + pub fn download_song_to_cache(&mut self, sid: uuid::Uuid, song: Song) { + self.song_queue.push((sid, song)); self.song_cache.insert(sid, DlStatus::Downloading); } - - pub fn download_to_cache_multiple(&mut self, mut songs: Vec<(uuid::Uuid, Song)>) { - while let Some((sid, song)) = songs.pop() { - self.download_to_cache(sid, song); - } - } + pub fn download_icon_to_cache(&mut self, sid: uuid::Uuid, song: Song) { + self.icon_queue.push((sid, song)); + self.icon_cache.insert(sid, DlStatus::Downloading); + } pub fn get_cached_song_status(&mut self, sid: &uuid::Uuid) -> Option { let original = self.song_cache.get(sid)?.clone(); Some(original) } + pub fn get_cached_icon_status(&mut self, sid: &uuid::Uuid) -> Option { + let original = self.icon_cache.get(sid)?.clone(); + Some(original) + } +} + +macro_rules! he { + ($tx:expr, $val:expr) => { + match $val { + Ok(v) => v, + Err(e) => { + let _ = $tx.send(Message::Error(std::file!(), std::line!() as usize, format!("{e:?}"))); + continue; + } + } + }; } fn start_cache_mv_thread(tx: Sender) { @@ -95,19 +113,19 @@ fn start_cache_mv_thread(tx: Sender) { loop { { std::thread::sleep(Duration::from_millis(500)); - let song_format = xmpd_settings::Settings::get().unwrap().tooling.song_format.clone(); + let song_format = he!(tx, xmpd_settings::Settings::get()).tooling.song_format.clone(); let mut done_jobs = Vec::new(); - let mut dlc = downloader::song::SongCacheDl::get().unwrap(); + let mut dlc = he!(tx, downloader::song::SongCacheDl::get()); for (sid, status) in &dlc.jobs { if *status == SongStatus::Done { - let mut cache = CACHE.lock().unwrap(); + let mut cache = he!(tx, CACHE.lock()); let mut song_p = xmpd_cliargs::CLIARGS.cache_path().clone(); song_p.push("songs"); song_p.push(sid.clone().to_string()); let song_p = song_p.with_extension(&song_format); if song_p.exists() { let _ = tx.send(Message::DownloadDone(sid.clone())); - cache.song_cache.insert(sid.clone(), DlStatus::Done(song_p)); + cache.song_cache.insert(sid.clone(), DlStatus::Done(Some(song_p.into()))); done_jobs.push(sid.clone()); } } @@ -115,17 +133,44 @@ fn start_cache_mv_thread(tx: Sender) { for sid in done_jobs { dlc.jobs.remove(&sid); } + { + let mut done_jobs = Vec::new(); + let mut dlc = he!(tx, downloader::icon::IconCacheDl::get()); + for (sid, status) in &dlc.jobs { + if let DlStatus::Done(path) = status { + let mut cache = he!(tx, CACHE.lock()); + cache.icon_cache.insert(sid.clone(), DlStatus::Done(path.clone())); + done_jobs.push(sid.clone()); + } + } + for sid in done_jobs { + dlc.jobs.remove(&sid); + } + } } { - let mut cache = Cache::get().unwrap(); - let mut dlc = downloader::song::SongCacheDl::get().unwrap(); - if !dlc.is_job_list_full() { - if let Some((sid, song)) = cache.queue.pop() { - dlc.download(sid, song).unwrap(); + let mut cache = he!(tx, Cache::get()); + { + let mut dlc = he!(tx, downloader::song::SongCacheDl::get()); + if !dlc.is_job_list_full() { + if let Some((sid, song)) = cache.song_queue.pop() { + he!(tx, dlc.download(sid, song)); + } + } + } + { + let mut icnc = he!(tx, downloader::icon::IconCacheDl::get()); + if !icnc.is_job_list_full() { + if let Some((sid, song)) = cache.icon_queue.pop() { + log::debug!("Downloading {sid:?}"); + he!(tx, icnc.download(sid, song)); + } } } } } }); } + + diff --git a/xmpd-gui/src/components/player.rs b/xmpd-gui/src/components/player.rs index bfd97ec..c7a462e 100644 --- a/xmpd-gui/src/components/player.rs +++ b/xmpd-gui/src/components/player.rs @@ -1,4 +1,5 @@ -use egui::{Sense, Stroke, Vec2}; +use egui::{RichText, Sense, Stroke, Vec2}; +use xmpd_manifest::store::BaseStore; use super::{song_list::SongList, CompGetter, CompUi}; @@ -26,78 +27,110 @@ component_register!(Player); impl CompUi for Player { fn draw(ui: &mut egui::Ui, state: &mut crate::GuiState) -> crate::Result<()> { let theme = xmpd_settings::Settings::get()?.theme.clone(); - let avail = ui.available_size(); - ui.vertical_centered_justified(|ui| { - ui.add_space(3.0); - ui.horizontal(|ui| { - { - ui.add_space(avail.x * 0.05 / 2.0); - ui.style_mut().spacing.slider_width = avail.x * 0.87; - let s = Stroke { - color: theme.accent_color, - width: 2.0 - }; - ui.style_mut().visuals.widgets.inactive.fg_stroke = s; - ui.style_mut().visuals.widgets.active.fg_stroke = s; - ui.style_mut().visuals.widgets.hovered.fg_stroke = s; - - let mut slf = handle_error_ui!(Player::get()); - ui.add( - egui::Slider::new(&mut slf.slider_progress, 0..=100) - .show_value(false) - ); - if slf.slider_progress == slf.old_slider_progress { - slf.slider_progress = (state.player.get_played_f() * 100.0) as usize; - slf.old_slider_progress = slf.slider_progress; - } else { - handle_error_ui!(state.player.seek_to_f(slf.slider_progress as f64 / 100.0 )); - slf.old_slider_progress = slf.slider_progress; + let full_avail = ui.available_size(); + ui.horizontal_centered(|ui| { + ui.add_space(10.0); + let icon = egui::Image::new(crate::data::NOTE_ICON) + .tint(theme.accent_color) + .sense(Sense::click()) + .fit_to_exact_size(Vec2::new(32.0, 32.0)); + ui.add(icon); + ui.vertical(|ui| { + + ui.add_space(5.0); + let sid = &handle_error_ui!(SongList::get()).selected_sid; + if let Some(song) = state.manifest.store().get_song(sid) { + let mut name = song.name().to_string(); + if name.len() > 16 { + name = (&name)[..16].to_string(); + name.push_str("..."); } - let secs_left = state.player.get_ms_left() as f64 / 1000.0; - let h = (secs_left/60.0/60.0).floor(); - let m = ((secs_left - h * 60.0)/60.0).floor(); - let s = (secs_left - m * 60.0).floor(); - - ui.label(format!("{h:02}:{m:02}:{s:02}")); + ui.label( + RichText::new(name) + .size(12.0) + ); + ui.label( + RichText::new(song.author()) + .size(8.0) + .monospace() + ); } }); - ui.horizontal(|ui| { - ui.add_space((avail.x / 2.0) - 16.0 - 8.0 - ui.spacing().item_spacing.x); - let pp = if state.player.is_paused() { - crate::data::PLAY_ICON - } else { - crate::data::PAUSE_ICON - }; + ui.vertical_centered_justified(|ui| { + let avail = ui.available_size(); + let song_info_w = full_avail.x - avail.x; + ui.add_space(3.0); + ui.horizontal(|ui| { + + { + let slider_width = full_avail.x * 0.60; + ui.add_space((((full_avail.x / 2.0) - song_info_w) - slider_width / 2.0).clamp(0.0, f32::MAX)); + ui.style_mut().spacing.slider_width = avail.x * 0.75; + let s = Stroke { + color: theme.accent_color, + width: 2.0 + }; + ui.style_mut().visuals.widgets.inactive.fg_stroke = s; + ui.style_mut().visuals.widgets.active.fg_stroke = s; + ui.style_mut().visuals.widgets.hovered.fg_stroke = s; - let prev = egui::Image::new(crate::data::PREV_ICON) - .tint(theme.accent_color) - .sense(Sense::click()) - .max_size(Vec2::new(16.0, 16.0)); - let pp = egui::Image::new(pp) - .tint(theme.accent_color) - .sense(Sense::click()) - .max_size(Vec2::new(16.0, 16.0)); - let next = egui::Image::new(crate::data::NEXT_ICON) - .tint(theme.accent_color) - .sense(Sense::click()) - .max_size(Vec2::new(16.0, 16.0)); - if ui.add(prev).clicked() { - handle_error_ui!(handle_error_ui!(SongList::get()).play_prev(state)); - } - if ui.add(pp).clicked() { - if state.player.is_paused() { - state.player.play(); - } else { - state.player.pause(); + let mut slf = handle_error_ui!(Player::get()); + ui.add( + egui::Slider::new(&mut slf.slider_progress, 0..=100) + .show_value(false) + ); + if slf.slider_progress == slf.old_slider_progress { + slf.slider_progress = (state.player.get_played_f() * 100.0) as usize; + slf.old_slider_progress = slf.slider_progress; + } else { + handle_error_ui!(state.player.seek_to_f(slf.slider_progress as f64 / 100.0 )); + slf.old_slider_progress = slf.slider_progress; + } + let secs_left = state.player.get_ms_left() as f64 / 1000.0; + let h = (secs_left/60.0/60.0).floor(); + let m = ((secs_left - h * 60.0)/60.0).floor(); + let s = (secs_left - m * 60.0).floor(); + + ui.label(format!("{h:02}:{m:02}:{s:02}")); + } + }); + ui.horizontal(|ui| { + let icon_size = 16.0; + ui.add_space(((full_avail.x / 2.0) - song_info_w) - icon_size * 1.5 - ui.spacing().item_spacing.x); + let pp = if state.player.is_paused() { + crate::data::PLAY_ICON + } else { + crate::data::PAUSE_ICON + }; + + let prev = egui::Image::new(crate::data::PREV_ICON) + .tint(theme.accent_color) + .sense(Sense::click()) + .max_size(Vec2::new(icon_size, icon_size)); + let pp = egui::Image::new(pp) + .tint(theme.accent_color) + .sense(Sense::click()) + .max_size(Vec2::new(icon_size, icon_size)); + let next = egui::Image::new(crate::data::NEXT_ICON) + .tint(theme.accent_color) + .sense(Sense::click()) + .max_size(Vec2::new(icon_size, icon_size)); + if ui.add(prev).clicked() { + handle_error_ui!(handle_error_ui!(SongList::get()).play_prev(state)); + } + if ui.add(pp).clicked() { + if state.player.is_paused() { + state.player.play(); + } else { + state.player.pause(); + } + } + if ui.add(next).clicked() || state.player.just_stopped() { + handle_error_ui!(handle_error_ui!(SongList::get()).play_next(state)); } - } - if ui.add(next).clicked() || state.player.just_stopped() { - handle_error_ui!(handle_error_ui!(SongList::get()).play_next(state)); - } - ui.with_layout(egui::Layout::right_to_left(egui::Align::RIGHT), |ui| { ui.add_space(15.0); ui.style_mut().spacing.slider_width = avail.x * 0.15; let s = Stroke { @@ -118,8 +151,8 @@ impl CompUi for Player { state.player.set_volume(slf.volume_slider); } }); + ui.add_space(3.0); }); - ui.add_space(3.0); }); Ok(()) } diff --git a/xmpd-gui/src/components/song_list/mod.rs b/xmpd-gui/src/components/song_list/mod.rs index 0c4e158..6012015 100644 --- a/xmpd-gui/src/components/song_list/mod.rs +++ b/xmpd-gui/src/components/song_list/mod.rs @@ -1,4 +1,6 @@ -use egui::{Color32, CursorIcon, RichText, Sense, Vec2}; +use std::borrow::Cow; + +use egui::{Color32, CursorIcon, ImageSource, RichText, Sense, Vec2}; use song_list_nav::SearchType; use xmpd_cache::DlStatus; use xmpd_manifest::{song::Song, store::BaseStore}; @@ -8,7 +10,7 @@ pub mod song_list_nav; #[derive(Debug, Default)] pub struct SongList { - selected_sid: uuid::Uuid, + pub selected_sid: uuid::Uuid, playable_songs: Vec, } @@ -113,11 +115,21 @@ impl SongList { let mut clicked = false; ui.horizontal(|ui| { let theme = handle_error_ui!(xmpd_settings::Settings::get()).theme.clone(); + // let icon_status = handle_error_ui!(xmpd_cache::Cache::get()).get_cached_icon_status(&sid).clone(); let img = ui.add( - egui::Image::new(crate::data::NOTE_ICON) - .tint(theme.accent_color) - .sense(Sense::click()) - .fit_to_exact_size(Vec2::new(32.0, 32.0)) + //if let Some(DlStatus::Done(Some(p))) = icon_status { + // let uri: Cow = Cow::Owned(p.to_string_lossy().to_string()); + // let bytes = handle_error_ui!(std::fs::read(p)); + // ui.ctx().include_bytes(uri.clone(), bytes); + // egui::Image::new(ImageSource::Uri(uri)) + // .sense(Sense::click()) + // .fit_to_exact_size(Vec2::new(32.0, 32.0)) + // } else { + egui::Image::new(crate::data::NOTE_ICON) + .tint(theme.accent_color) + .sense(Sense::click()) + .fit_to_exact_size(Vec2::new(32.0, 32.0)) + //} ); let status = { handle_error_ui!(xmpd_cache::Cache::get()).get_cached_song_status(&sid).clone() @@ -131,8 +143,9 @@ impl SongList { } else { ui.output_mut(|o| o.cursor_icon = CursorIcon::Default); } - } - + } + // img.context_menu(|ui| handle_error_ui!(Self::show_context_menu(ui, sid, song))); + ui.vertical(|ui| { let slf = handle_error_ui!(SongList::get()); let label = if slf.selected_sid == *sid { @@ -157,6 +170,8 @@ impl SongList { ui.output_mut(|o| o.cursor_icon = CursorIcon::Default); } } + + // label.context_menu(|ui| handle_error_ui!(Self::show_context_menu(ui, sid, song))); ui.monospace( RichText::new(format!("By {}", song.author())) .color(theme.dim_text_color) @@ -169,7 +184,7 @@ impl SongList { ui.add_space(3.0); match status { - Some(DlStatus::Done(_p)) => { + Some(DlStatus::Done(_)) => { //let img = egui::Image::new(crate::data::CHECK_ICON) // .tint(Color32::LIGHT_GREEN) // .sense(Sense::hover()) @@ -185,7 +200,7 @@ impl SongList { .size(16.0); ui.add(spinner); } - Some(DlStatus::Error(e)) => { + Some(DlStatus::Error(e, ..)) => { let img = egui::Image::new(crate::data::WARN_ICON) .tint(Color32::LIGHT_YELLOW) .sense(Sense::hover()) @@ -202,7 +217,7 @@ impl SongList { .fit_to_exact_size(Vec2::new(16.0, 16.0)); if ui.add(img).clicked() { - handle_error_ui!(xmpd_cache::Cache::get()).download_to_cache(sid.clone(), song.clone()); + handle_error_ui!(xmpd_cache::Cache::get()).download_song_to_cache(sid.clone(), song.clone()); let mut toast = handle_error_ui!(crate::components::toast::Toast::get()); toast.show_toast( "Downloading Song", @@ -214,6 +229,7 @@ impl SongList { } }); }); + ui.separator(); if clicked { let mut sl = SongList::get()?; @@ -268,4 +284,10 @@ impl SongList { } Ok(playable_songs) } + //fn show_context_menu(ui: &mut egui::Ui, sid: &uuid::Uuid, song: &Song) -> crate::Result<()> { + // if ui.button("Download icon").clicked() { + // xmpd_cache::Cache::get()?.download_icon_to_cache(sid.clone(), song.clone()); + // } + // Ok(()) + //} } diff --git a/xmpd-gui/src/components/song_list/song_list_nav.rs b/xmpd-gui/src/components/song_list/song_list_nav.rs index 7dc3c80..ef332cd 100644 --- a/xmpd-gui/src/components/song_list/song_list_nav.rs +++ b/xmpd-gui/src/components/song_list/song_list_nav.rs @@ -60,7 +60,7 @@ impl CompUi for SongListNav { } for sid in handle_error_ui!(Self::get_songs_to_download(&songs)) { if let Some(song) = state.manifest.store().get_song(&sid) { - handle_error_ui!(xmpd_cache::Cache::get()).download_to_cache(sid.clone(), song.clone()) + handle_error_ui!(xmpd_cache::Cache::get()).download_song_to_cache(sid.clone(), song.clone()) } } let mut toast = handle_error_ui!(crate::components::toast::Toast::get()); diff --git a/xmpd-gui/src/main_window.rs b/xmpd-gui/src/main_window.rs index 0dbffff..6e90e0c 100644 --- a/xmpd-gui/src/main_window.rs +++ b/xmpd-gui/src/main_window.rs @@ -69,6 +69,15 @@ pub fn draw(ctx: &egui::Context, state: &mut GuiState, cache_rx: &Receiver { + if let Ok(mut toast) = crate::components::toast::Toast::get() { + toast.show_toast( + &format!("Error in {file}:{line}"), + &format!("{e}"), + crate::components::toast::ToastType::Error, + ); + } + } } } diff --git a/xmpd-manifest/src/song.rs b/xmpd-manifest/src/song.rs index 9bbf5d3..28a7359 100644 --- a/xmpd-manifest/src/song.rs +++ b/xmpd-manifest/src/song.rs @@ -1,5 +1,12 @@ -use std::{fmt::Display, path::PathBuf, str::FromStr}; +use std::{fmt::Display, str::FromStr}; +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq, PartialOrd, Default)] +pub enum IconType { + CustomUrl(url::Url), + FromSource, + #[default] + None +} #[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq, PartialOrd)] @@ -7,7 +14,14 @@ pub struct Song { name: String, author: String, url: url::Url, - source_type: SourceType, + source_type: SourceType, + #[serde(default)] + icon_type: IconType, + #[serde(default)] + genres: Vec, + /// Seconds + #[serde(default)] + length: usize, } impl Song { @@ -16,7 +30,10 @@ impl Song { name: String::default(), author: String::default(), source_type, - url: url.clone() + icon_type: IconType::None, + url: url.clone(), + genres: Vec::new(), + length: 0 }) } pub fn new_from_str(url: &str, source_type: SourceType) -> crate::Result { @@ -34,6 +51,15 @@ impl Song { pub fn source_type(&self) -> &SourceType { &self.source_type } + pub fn icon_type(&self) -> &IconType { + &self.icon_type + } + pub fn genres(&self) -> &[String] { + &self.genres + } + pub fn length(&self) -> usize { + self.length + } pub fn set_name(&mut self, v: &str) { self.name = v.to_string(); } @@ -46,6 +72,15 @@ impl Song { pub fn set_source_type(&mut self, v: &SourceType) { self.source_type.clone_from(v); } + pub fn set_icon_type(&mut self, v: &IconType) { + self.icon_type.clone_from(v); + } + pub fn genres_mut(&mut self) -> &mut Vec { + &mut self.genres + } + pub fn set_length(&mut self, l: usize) { + self.length = l; + } } #[derive(Debug, Clone, Copy, serde::Serialize, serde::Deserialize, PartialEq, PartialOrd)]