diff --git a/Cargo.lock b/Cargo.lock index 240f493..52995f3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,6 +23,10 @@ name = "accesskit" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74a4b14f3d99c1255dcba8f45621ab1a2e7540a0009652d33989005a4d0bfc6b" +dependencies = [ + "enumn", + "serde", +] [[package]] name = "accesskit_consumer" @@ -113,6 +117,7 @@ dependencies = [ "cfg-if", "getrandom", "once_cell", + "serde", "version_check", "zerocopy", ] @@ -515,6 +520,18 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "bit-set" version = "0.5.3" @@ -988,6 +1005,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" +[[package]] +name = "data-url" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" + [[package]] name = "derivative" version = "2.2.0" @@ -1047,6 +1070,16 @@ checksum = "20930a432bbd57a6d55e07976089708d4893f3d556cf42a0d79e9e321fa73b10" dependencies = [ "bytemuck", "color-hex", + "serde", +] + +[[package]] +name = "ecolor" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e6b451ff1143f6de0f33fc7f1b68fecfd2c7de06e104de96c4514de3f5396f8" +dependencies = [ + "emath 0.28.1", ] [[package]] @@ -1058,7 +1091,7 @@ dependencies = [ "bytemuck", "cocoa", "document-features", - "egui", + "egui 0.27.2", "egui-wgpu", "egui-winit", "egui_glow", @@ -1091,9 +1124,31 @@ checksum = "584c5d1bf9a67b25778a3323af222dbe1a1feb532190e103901187f92c7fe29a" dependencies = [ "accesskit", "ahash", - "epaint", + "epaint 0.27.2", "log", "nohash-hasher", + "serde", +] + +[[package]] +name = "egui" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20c97e70a2768de630f161bb5392cbd3874fcf72868f14df0e002e82e06cb798" +dependencies = [ + "ahash", + "emath 0.28.1", + "epaint 0.28.1", + "nohash-hasher", +] + +[[package]] +name = "egui-aesthetix" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b91e1b07193fa9bc71849e39a76d30ffd6a2f57bfc54552e3a2df263da577b" +dependencies = [ + "egui 0.28.1", ] [[package]] @@ -1104,8 +1159,8 @@ checksum = "469ff65843f88a702b731a1532b7d03b0e8e96d283e70f3a22b0e06c46cb9b37" dependencies = [ "bytemuck", "document-features", - "egui", - "epaint", + "egui 0.27.2", + "epaint 0.27.2", "log", "thiserror", "type-map", @@ -1122,7 +1177,7 @@ checksum = "2e3da0cbe020f341450c599b35b92de4af7b00abde85624fd16f09c885573609" dependencies = [ "accesskit_winit", "arboard", - "egui", + "egui 0.27.2", "log", "raw-window-handle 0.6.2", "smithay-clipboard", @@ -1131,6 +1186,22 @@ dependencies = [ "winit", ] +[[package]] +name = "egui_extras" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b78779f35ded1a853786c9ce0b43fe1053e10a21ea3b23ebea411805ce41593" +dependencies = [ + "egui 0.27.2", + "ehttp", + "enum-map", + "image", + "log", + "mime_guess2", + "resvg", + "serde", +] + [[package]] name = "egui_glow" version = "0.27.2" @@ -1138,7 +1209,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0e5d975f3c86edc3d35b1db88bb27c15dde7c55d3b5af164968ab5ede3f44ca" dependencies = [ "bytemuck", - "egui", + "egui 0.27.2", "glow", "log", "memoffset 0.9.1", @@ -1147,6 +1218,20 @@ dependencies = [ "winit", ] +[[package]] +name = "ehttp" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59a81c221a1e4dad06cb9c9deb19aea1193a5eea084e8cd42d869068132bf876" +dependencies = [ + "document-features", + "js-sys", + "ureq", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "emath" version = "0.27.2" @@ -1154,6 +1239,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4c3a552cfca14630702449d35f41c84a0d15963273771c6059175a803620f3f" dependencies = [ "bytemuck", + "serde", +] + +[[package]] +name = "emath" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6a21708405ea88f63d8309650b4d77431f4bc28fb9d8e6f77d3963b51249e6" + +[[package]] +name = "enum-map" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" +dependencies = [ + "enum-map-derive", + "serde", +] + +[[package]] +name = "enum-map-derive" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] @@ -1177,6 +1290,17 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "enumn" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "env_filter" version = "0.1.2" @@ -1209,11 +1333,26 @@ dependencies = [ "ab_glyph", "ahash", "bytemuck", - "ecolor", - "emath", + "ecolor 0.27.2", + "emath 0.27.2", "log", "nohash-hasher", "parking_lot", + "serde", +] + +[[package]] +name = "epaint" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f0dcc0a0771e7500e94cd1cb797bd13c9f23b9409bdc3c824e2cbc562b7fa01" +dependencies = [ + "ab_glyph", + "ahash", + "ecolor 0.28.1", + "emath 0.28.1", + "nohash-hasher", + "parking_lot", ] [[package]] @@ -1310,6 +1449,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" + [[package]] name = "foreign-types" version = "0.5.0" @@ -1701,6 +1846,12 @@ dependencies = [ "png", ] +[[package]] +name = "imagesize" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" + [[package]] name = "indexmap" version = "2.6.0" @@ -1800,6 +1951,15 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" +[[package]] +name = "kurbo" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd85a5776cd9500c2e2059c8c76c3b01528566b7fcbaf8098b55a33fc298849b" +dependencies = [ + "arrayvec", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -1934,6 +2094,22 @@ dependencies = [ "paste", ] +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess2" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a3333bb1609500601edc766a39b4c1772874a4ce26022f4d866854dc020c41" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "miniz_oxide" version = "0.8.0" @@ -2299,6 +2475,12 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" + [[package]] name = "pin-project-lite" version = "0.2.15" @@ -2481,6 +2663,12 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" +[[package]] +name = "rctree" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b42e27ef78c35d3998403c1d26f3efd9e135d3e5121b0a4845cc5cc27547f4f" + [[package]] name = "redox_syscall" version = "0.3.5" @@ -2534,6 +2722,50 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" +[[package]] +name = "resvg" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cadccb3d99a9efb8e5e00c16fbb732cbe400db2ec7fc004697ee7d97d86cf1f4" +dependencies = [ + "log", + "pico-args", + "rgb", + "svgtypes", + "tiny-skia", + "usvg", +] + +[[package]] +name = "rgb" +version = "0.8.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "roxmltree" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cd14fd5e3b777a7422cca79358c57a8f6e3a703d9ac187448d0daf220c2407f" + [[package]] name = "rustc-demangle" version = "0.1.24" @@ -2573,6 +2805,38 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rustls" +version = "0.23.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eee87ff5d9b36712a58574e12e9f0ea80f915a5b0ac518d322b24a465617925e" +dependencies = [ + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "ryu" version = "1.0.18" @@ -2688,6 +2952,21 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +[[package]] +name = "simplecss" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a11be7c62927d9427e9f40f3444d5499d868648e2edbc4e2116de69e7ec0e89d" +dependencies = [ + "log", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + [[package]] name = "slab" version = "0.4.9" @@ -2792,6 +3071,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "spirv" version = "0.3.0+sdk-1.3.268.0" @@ -2812,6 +3097,9 @@ name = "strict-num" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" +dependencies = [ + "float-cmp", +] [[package]] name = "strsim" @@ -2819,6 +3107,22 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "svgtypes" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e44e288cd960318917cbd540340968b90becc8bc81f171345d706e7a89d9d70" +dependencies = [ + "kurbo", + "siphasher", +] + [[package]] name = "syn" version = "1.0.109" @@ -2894,6 +3198,7 @@ dependencies = [ "bytemuck", "cfg-if", "log", + "png", "tiny-skia-path", ] @@ -3041,6 +3346,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "unicase" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" + [[package]] name = "unicode-bidi" version = "0.3.17" @@ -3080,6 +3391,28 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "ureq" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" +dependencies = [ + "base64 0.22.1", + "flate2", + "log", + "once_cell", + "rustls", + "rustls-pki-types", + "url", + "webpki-roots", +] + [[package]] name = "url" version = "2.5.2" @@ -3092,6 +3425,50 @@ dependencies = [ "serde", ] +[[package]] +name = "usvg" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b0a51b72ab80ca511d126b77feeeb4fb1e972764653e61feac30adc161a756" +dependencies = [ + "base64 0.21.7", + "log", + "pico-args", + "usvg-parser", + "usvg-tree", + "xmlwriter", +] + +[[package]] +name = "usvg-parser" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd4e3c291f45d152929a31f0f6c819245e2921bfd01e7bd91201a9af39a2bdc" +dependencies = [ + "data-url", + "flate2", + "imagesize", + "kurbo", + "log", + "roxmltree", + "simplecss", + "siphasher", + "svgtypes", + "usvg-tree", +] + +[[package]] +name = "usvg-tree" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ee3d202ebdb97a6215604b8f5b4d6ef9024efd623cf2e373a6416ba976ec7d3" +dependencies = [ + "rctree", + "strict-num", + "svgtypes", + "tiny-skia-path", +] + [[package]] name = "utf8parse" version = "0.2.2" @@ -3374,6 +3751,15 @@ dependencies = [ "web-sys", ] +[[package]] +name = "webpki-roots" +version = "0.26.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "wgpu" version = "0.19.4" @@ -3919,6 +4305,12 @@ version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af4e2e2f7cba5a093896c1e150fbfe177d1883e7448200efb81d40b9d339ef26" +[[package]] +name = "xmlwriter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" + [[package]] name = "xmpd-cli" version = "2.0.0" @@ -3937,6 +4329,14 @@ dependencies = [ "xmpd-manifest", ] +[[package]] +name = "xmpd-derive" +version = "2.0.0" +dependencies = [ + "quote", + "syn 2.0.87", +] + [[package]] name = "xmpd-dl" version = "2.0.0" @@ -3947,10 +4347,13 @@ version = "2.0.0" dependencies = [ "anyhow", "eframe", - "egui", + "egui 0.27.2", + "egui-aesthetix", + "egui_extras", "lazy_static", "log", "tokio", + "xmpd-derive", "xmpd-manifest", ] @@ -4052,6 +4455,12 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + [[package]] name = "zvariant" version = "3.15.2" diff --git a/Cargo.toml b/Cargo.toml index abdd582..176ce37 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ members=[ "xmpd-core", "xmpd-manifest", "xmpd-gui", - "xmpd-cli", "xmpd-dl", + "xmpd-cli", "xmpd-dl", "xmpd-derive", # "xmpd-tui" ] diff --git a/assets/next.svg b/assets/next.svg new file mode 100644 index 0000000..61e1c71 --- /dev/null +++ b/assets/next.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/pause.svg b/assets/pause.svg new file mode 100644 index 0000000..b1a5b94 --- /dev/null +++ b/assets/pause.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/play.svg b/assets/play.svg new file mode 100644 index 0000000..efa4dcc --- /dev/null +++ b/assets/play.svg @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/assets/prev.svg b/assets/prev.svg new file mode 100644 index 0000000..35d7dfe --- /dev/null +++ b/assets/prev.svg @@ -0,0 +1,4 @@ + + + + diff --git a/manifest.json b/manifest.json index 867a938..5ae1a58 100644 --- a/manifest.json +++ b/manifest.json @@ -1,4 +1 @@ -{ - "songs": {}, - "playlists": {} -} \ No newline at end of file +{"songs": {"59c20651-6ffe-493d-886b-ccd8b7fe6dee": {"name": "EVERYTHING WHAT", "author": "Unknown", "url": "https://www.youtube.com/watch?v=Gjdsq4kc5cA", "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"}, "7da79c32-9eda-4897-be69-69fb39437404": {"name": "Tricky Disco", "author": "DR. VODKA", "url": "https://www.youtube.com/watch?v=IknAUhl3i2o", "source_type": "Youtube"}, "0ee56450-2942-4805-9f08-b49652472258": {"name": "Tricky Disco", "author": "Unknown", "url": "https://www.youtube.com/watch?v=t78qVdbAiXw", "source_type": "Youtube"}, "192a8655-7dfc-4c4b-b351-87c75cbbe048": {"name": "It Wasn't Me", "author": "Shaggy", "url": "https://www.youtube.com/watch?v=ssVj50ombaM", "source_type": "Youtube"}, "e71a61d4-b54a-47d1-b0ad-db6695bd0739": {"name": "Hey Lover!", "author": "Wabie", "url": "https://open.spotify.com/track/7rC3P7tpWriaC4hYWKwGQd", "source_type": "Spotify"}, "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"}, "7e32803d-a5a9-453c-8c81-b479c51e5bc9": {"name": "Looking Out for You", "author": "Joy Again", "url": "https://open.spotify.com/track/3jfZ9M23l0L7RxzYMTgBTv", "source_type": "Spotify"}, "6dd614cd-ba76-483c-bf6d-26eb1f3b6f1a": {"name": "99 Red Balloons", "author": "Nena", "url": "https://open.spotify.com/track/7p8HVe22aGW1XtO1hoDHGo", "source_type": "Spotify"}, "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"}, "ee1e8d12-75ac-43f7-bf85-a1b69eb66e86": {"name": "Vanished", "author": "Crystal Castles", "url": "https://open.spotify.com/track/3gGMsx3jxYKfhXq8LMj1tz", "source_type": "Spotify"}, "5c2ee27e-d564-404a-8259-87d1d336f106": {"name": "Money", "author": "The Drums", "url": "https://open.spotify.com/track/3VIJBrMpvimHEw5wtPh2wB", "source_type": "Spotify"}, "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"}, "877c24e4-c0c0-4e9c-a553-221e381c8a00": {"name": "Stumblin' In", "author": "CYRIL", "url": "https://open.spotify.com/track/0h3Xy4V4apMraB5NuM8U7Z", "source_type": "Spotify"}, "d563619a-344e-41cf-99d1-5a52214ada49": {"name": "Sports", "author": "Beach Bunny", "url": "https://open.spotify.com/track/77G0k1La0c5Dw8bAFANcyp", "source_type": "Spotify"}, "92561031-92ae-471a-b154-8519c715011d": {"name": "On The Rob", "author": "Cheap Dirty Horse", "url": "https://open.spotify.com/track/2kZ2fD3ohaGhDHMBTAppto", "source_type": "Spotify"}, "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"}, "9d93859c-dae3-4c03-8f8d-d4f6bc0e287e": {"name": "Jealous", "author": "Eyedress", "url": "https://open.spotify.com/track/1aXV8GrmQLvgoFtBPERP7E", "source_type": "Spotify"}, "bb16708f-0cd7-4918-8014-d374d68acbd2": {"name": "Not Allowed", "author": "TV Girl", "url": "https://open.spotify.com/track/3IznIgmXtrUaoPWpQTy5jB", "source_type": "Spotify"}, "be09f147-cda5-4e5f-ac29-eef9c3a7414f": {"name": "Blue Monday", "author": "MOGUAI, Tim Hox, Iggy", "url": "https://open.spotify.com/track/4vAP9OY2Ci79fUCuc9EBdD", "source_type": "Spotify"}, "7ed02ac9-cb84-4a34-870d-56b226f0a6be": {"name": "Always Forever", "author": "Cults", "url": "https://open.spotify.com/track/2enPRFda84VE2wtI8c86Uf", "source_type": "Spotify"}, "47f2a63e-e9eb-48df-a61b-dbcdfa3aaf35": {"name": "Everlong", "author": "Foo Fighters", "url": "https://open.spotify.com/track/5UWwZ5lm5PKu6eKsHAGxOk", "source_type": "Spotify"}, "e37c6cb6-ad8e-43a7-83d1-8b795db8aa1c": {"name": "Harness Your Hopes", "author": "Pavement", "url": "https://open.spotify.com/track/4vsoWZcvtvSsE0OiVvDDvX", "source_type": "Spotify"}, "3d543d58-e33d-4158-9956-049309baa35c": {"name": "Movin' Out (Anthony's Song)", "author": "Billy Joel", "url": "https://open.spotify.com/track/16GUMo6u3D2qo9a19AkYct", "source_type": "Spotify"}, "2e9ef729-1560-446c-af6a-8a9d4c43ac9a": {"name": "Big Sis", "author": "SALES", "url": "https://open.spotify.com/track/0ARp9mXXpPflIwehy25kCa", "source_type": "Spotify"}, "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"}, "cbc90bff-5476-408c-9cc8-afd1af5b536d": {"name": "Vienna", "author": "Billy Joel", "url": "https://open.spotify.com/track/4U45aEWtQhrm8A5mxPaFZ7", "source_type": "Spotify"}, "2bd2e64e-28f0-4bd7-aee3-e1d27ed0797d": {"name": "In the End", "author": "Linkin Park", "url": "https://open.spotify.com/track/60a0Rd6pjrkxjPbaKzXjfq", "source_type": "Spotify"}, "08995ab0-2954-4d6b-913e-27609e90b354": {"name": "Caramelldansen", "author": "Alfons, LOOKET, DJ BERIT", "url": "https://open.spotify.com/track/1v7aZHBUwKxeCgmpe6fVUH", "source_type": "Spotify"}, "862ddd87-68c4-4bed-a8cd-0e2021a0ce79": {"name": "Renee", "author": "SALES", "url": "https://open.spotify.com/track/5MeUMSRreLHYLhw8ZTyqpk", "source_type": "Spotify"}, "0679475a-259c-4c98-9ae7-a58c10dfeedb": {"name": "New Flesh", "author": "Current Joys", "url": "https://open.spotify.com/track/6HJxxqHWMdidwTVZmZWeHU", "source_type": "Spotify"}, "6895e921-91f2-4713-b604-c2cdd9f3f1c2": {"name": "We Didn\u2019t Start The Fire", "author": "Fall Out Boy", "url": "https://open.spotify.com/track/60glT2wsoSHV3B8yCRSB8v", "source_type": "Spotify"}, "8bf09666-9aba-4c71-a58a-a64200d49f9e": {"name": "Cloud 9", "author": "Beach Bunny", "url": "https://open.spotify.com/track/6vFsBXYczYsP0H3lgunZOm", "source_type": "Spotify"}, "81426b49-3511-4e48-be21-3c24acba0fb9": {"name": "Kernkraft 400", "author": "Zombie Nation", "url": "https://www.youtube.com/watch?v=z5LW07FTJbI", "source_type": "Youtube"}, "2c650e29-9f87-4253-8074-146f3653051d": {"name": "Satisfaction", "author": "Benny Benassi", "url": "https://www.youtube.com/watch?v=a0fkNdPiIL4", "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"}, "3453b523-e1f0-49d3-b60b-5ba063b6c26d": {"name": "The Love Parade ( Bounce Invaderz )", "author": "Unknown", "url": "https://www.youtube.com/watch?v=xogT6KBWjCU3", "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"}, "41a8d7c8-4b75-46f6-9940-7f0b8f5f5feb": {"name": "Beggin' (Techno)", "author": "Unknown", "url": "https://www.youtube.com/watch?v=tXPs1FwW6lk", "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"}, "22f18d88-fb39-4cec-98be-02d4ebe3a6ee": {"name": "Party maker", "author": "MUTA", "url": "https://www.youtube.com/watch?v=LT9VNK1aCXY", "source_type": "Youtube"}, "4a56c71c-70f0-45e7-a9b8-2304d41e1877": {"name": "Big Jet Plane", "author": "Restricted", "url": "https://www.youtube.com/watch?v=NpVF0z5N-tE", "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"}, "2f179aab-c51b-4501-b5d1-8a2e51b19a80": {"name": "Applause", "author": "Nicolas Julian", "url": "https://www.youtube.com/watch?v=9qHLELnq1B0", "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"}, "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"}, "83808446-bd43-4140-86ff-853fea897a89": {"name": "Bla Bla Bla", "author": "Gigi D'Agostino", "url": "https://www.youtube.com/watch?v=yKapqR2XRJE", "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"}, "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"}, "91629850-33e2-4e18-8c37-6eafdfcde3f4": {"name": "Give It To Me", "author": "Unknown", "url": "https://www.youtube.com/watch?v=upQe8EeSyZU", "source_type": "Youtube"}, "d8e93863-6102-4cda-a0b2-3728d20c9cf8": {"name": "dashstar", "author": "Knock2", "url": "https://www.youtube.com/watch?v=58ml5b_On6w", "source_type": "Youtube"}, "cec368bd-6b4c-4c89-9eeb-1b88bed0efc3": {"name": "PARIS (TECHNO)", "author": "$UICIDEBOY$", "url": "https://www.youtube.com/watch?v=YYDJmGDkEyw", "source_type": "Youtube"}, "88fe04aa-a7be-4f6c-b32f-d3d25e58bbf8": {"name": "Because I Got High", "author": "Afroman", "url": "https://www.youtube.com/watch?v=WeYsTmIzjkw", "source_type": "Youtube"}, "484b9560-731b-447d-9e7f-3d32eb68b05f": {"name": "Freed from Desire", "author": "Drenchill", "url": "https://www.youtube.com/watch?v=6b6FBneAENQ", "source_type": "Youtube"}, "60214f0e-9a37-49b4-92bf-b7b548e501ad": {"name": "Uzmerkiu akis", "author": "SEL", "url": "https://youtu.be/SdWj06XRZms?si=9TNGzjK9ITom-jaD", "source_type": "Youtube"}, "e1cb8b00-713b-4a0e-bc61-dbf2d2596fcf": {"name": "Tik Tok", "author": "SEL", "url": "https://youtu.be/RkaIUateIxg", "source_type": "Youtube"}, "abd6a036-f17a-4a6a-8420-2cc3e7e4a181": {"name": "Ten kazkur giliai", "author": "SEL", "url": "https://youtu.be/N7YNlegeiqs?si=9BBH6hjrgOjJ01Nz", "source_type": "Youtube"}, "a0bd5ffe-4be8-498e-8f43-c5a9505a4872": {"name": "Ten kur sapnai", "author": "SEL", "url": "https://youtu.be/GDj3NgjDbRo", "source_type": "Youtube"}, "201c6680-7dcf-4d75-8bdc-76ff9a715167": {"name": "Gyvenimo man vieno neuztenka", "author": "SEL", "url": "https://youtu.be/7Gd9XaEG5o4", "source_type": "Youtube"}, "18c2b9bc-6403-4a67-94bd-1e9f5413d83b": {"name": "Skrendu", "author": "SEL", "url": "https://youtu.be/G5Q_asvrXlA", "source_type": "Youtube"}, "c374f3c2-b498-49b3-88c5-a2e6e741e1e8": {"name": "Leisk", "author": "SEL", "url": "https://youtu.be/DDPmFMrffXQ", "source_type": "Youtube"}, "0c5a22fc-2a61-4171-a5b9-f24da0c71466": {"name": "As ziuriu i tave pasauli", "author": "SEL", "url": "https://youtu.be/_SPDjl80kKw", "source_type": "Youtube"}, "0c77785e-7149-45a7-84a1-a9c8ccaa9f7f": {"name": "Lyja", "author": "SEL", "url": "https://www.youtube.com/watch?v=KL6JBWnXCxw", "source_type": "Youtube"}, "98b04764-39cc-4c82-a2e2-420dd85573ca": {"name": "Tarp amzinybes", "author": "SEL", "url": "https://youtu.be/UfPj-0QpGFA", "source_type": "Youtube"}, "101166d0-1b7c-4d1c-b0ce-35b9a89b0822": {"name": "Nes as tik vejas", "author": "SEL", "url": "https://youtu.be/acMG37IZ6z8", "source_type": "Youtube"}, "8e8c3f6c-e34b-4f4e-b9be-f36be5901435": {"name": "biznis", "author": "PROFLAME", "url": "https://www.youtube.com/watch?v=t139Vd83pgs", "source_type": "Youtube"}, "7d232736-f977-4645-bd64-106e94f91bb0": {"name": "Judam Lietuvoj", "author": "Unknown", "url": "https://www.youtube.com/watch?v=WDzWSEgSy5U", "source_type": "Youtube"}, "ae2c4c10-4fac-4d80-a114-81adf209c6a1": {"name": "Kaip Diena", "author": "morre", "url": "https://www.youtube.com/watch?v=6LDgLWCQSSM", "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"}, "858d8645-8637-4d3f-b4b7-c9c75743d90a": {"name": "Dviratukas", "author": "Eugenijus Ostapenko", "url": "https://www.youtube.com/watch?v=ILFHZQK33Mw", "source_type": "Youtube"}, "a1ab9370-70bc-488d-a78b-5cdc09c82f73": {"name": "Trys Trys Trys", "author": "Riaukenzo", "url": "https://www.youtube.com/watch?v=qJv6GRQCnCk", "source_type": "Youtube"}, "8858c7a1-ea6d-409b-9fc3-7256a39d4d8b": {"name": "PENKTADIENIS", "author": "NIERKA", "url": "https://www.youtube.com/watch?v=h3TuZj_OAf0", "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"}, "8dca8d6c-3388-4133-b773-79b9f076e467": {"name": "0,7", "author": "Depresinis feat. Deivas", "url": "https://www.youtube.com/watch?v=rjwFjBgTzAA", "source_type": "Youtube"}, "9be83d96-6dfb-47a0-b58e-a1aed1cf6031": {"name": "Pasitusinam", "author": "NL", "url": "https://www.youtube.com/watch?v=WhSFudvloog", "source_type": "Youtube"}, "0e969066-b7f9-4e60-a24f-989aad28dfac": {"name": "Svajoklis", "author": "Vairas", "url": "https://www.youtube.com/watch?v=hs8_KTV0Vrw", "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"}, "6d78099b-042c-4b19-b3d9-15af1bf4ef10": {"name": "JUODA ORCHIDEJA", "author": "MG INTERNATIONAL", "url": "https://www.youtube.com/watch?v=HQvceFRBq9M", "source_type": "Youtube"}, "bd85a9d7-1fb6-4154-a290-e5137590e419": {"name": "I gamta", "author": "Andzikas", "url": "https://www.youtube.com/watch?v=UyLdjC-hihM", "source_type": "Youtube"}, "131ab436-869b-4b3b-8ce4-3b5087d3461f": {"name": "1.9 TDI", "author": "Grupe MX", "url": "https://www.youtube.com/watch?v=8FBr5GQXsI8", "source_type": "Youtube"}, "1a22e35a-0af1-4326-b59c-00d59504446b": {"name": "Virs debesu", "author": "Andzikas", "url": "https://www.youtube.com/watch?v=PHJcVGhxra8", "source_type": "Youtube"}, "bcb9af16-7bdb-458a-b092-42225abf2645": {"name": "LEDUKAI", "author": "Depresinis feat. Deivas", "url": "https://www.youtube.com/watch?v=R2-MtpkKgGI", "source_type": "Youtube"}, "3525668b-4402-4fb8-b106-bed44d8c9db2": {"name": "I Kluba", "author": "Raketa", "url": "https://www.youtube.com/watch?v=FkSjtpYN3EI", "source_type": "Youtube"}, "4c849092-b6c4-450c-b69c-304e54f63611": {"name": "Deginam", "author": "SADBOY", "url": "https://www.youtube.com/watch?v=w3R0Aq1EGXg", "source_type": "Youtube"}, "8c641f7f-e151-4abc-932c-a9895823a278": {"name": "Nevaidink", "author": "SixthBoi", "url": "https://www.youtube.com/watch?v=nOTNnnrqTII", "source_type": "Youtube"}, "c393d1a6-b265-4a73-a7bd-d33667b08445": {"name": "Kauniete", "author": "DJ Dalgis", "url": "https://www.youtube.com/watch?v=b3xPE9Iyuzc", "source_type": "Youtube"}, "ea41c37c-7b62-4fd6-9fec-650e94d184f2": {"name": "tipo daina", "author": "Tipo Grupe", "url": "https://www.youtube.com/watch?v=PTIOaSjEgIU", "source_type": "Youtube"}, "8e82aa7c-a9e0-42ee-a845-6ba7d3439452": {"name": "Apzavai", "author": "Vaidas Baumila", "url": "https://www.youtube.com/watch?v=H8uGi4ZMgHA", "source_type": "Youtube"}, "9000f22e-83ff-4261-be0c-625fe1d806ab": {"name": "MAMA MANE RODYS PER FARUS", "author": "Unknown", "url": "https://www.youtube.com/watch?v=F5HqXYRDZaE", "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"}, "4b61344d-fa89-4b79-bd45-3b1fc8c8cc1c": {"name": "Rycka klipas", "author": "Unknown", "url": "https://www.youtube.com/watch?v=nuTUDSQ3BBI", "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"}, "9fabb799-f6aa-45a0-93b7-8cb08ab8f0a8": {"name": "16 metu", "author": "69 Danguje", "url": "https://www.youtube.com/watch?v=nwjoqPcUPrw", "source_type": "Youtube"}, "ca765223-e4e6-4b5d-8928-919c3f491b43": {"name": "Kaifuok", "author": "SADBOY", "url": "https://www.youtube.com/watch?v=vclryWgfy8I", "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"}, "95a3350c-c62f-4543-8cfe-6c512861b229": {"name": "Ryk Zuvedra ryk", "author": "Zilviokas", "url": "https://www.youtube.com/watch?v=eN6BOI7UlSE", "source_type": "Youtube"}, "720d5b94-ac54-4162-8da7-ba8d258139e6": {"name": "KINO FILMAI", "author": "RADVIS", "url": "https://www.youtube.com/watch?v=vhAEkC3xNMo", "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"}, "6a00704f-6da9-44d7-8fee-75cf487036f0": {"name": "Lovoj Vezi", "author": "Tipo grupe", "url": "https://www.youtube.com/watch?v=M3zVMzWCy_c", "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"}, "b0732ead-9a8c-4537-b98a-a4618d33959f": {"name": "O Mazuti", "author": "Depresinis, Jypas", "url": "https://www.youtube.com/watch?v=4t_DPbe2r3M", "source_type": "Youtube"}, "2b33d0b1-aecb-4ff9-841a-3a7b2861f28d": {"name": "Degtine", "author": "Grupiokai", "url": "https://www.youtube.com/watch?v=8SqbG2VmEFw", "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"}, "f1878fda-ecec-4303-a6df-dc6adf1ea3c0": {"name": "Juodas Garvezys (Remix)", "author": "Unknown", "url": "https://www.youtube.com/watch?v=D-7qQbXHSAw", "source_type": "Youtube"}, "7f2b2809-1b38-45b5-876c-cbdb42b26bdf": {"name": "Volkswagina", "author": "Depresinis", "url": "https://www.youtube.com/watch?v=1lZR1VKsQHo", "source_type": "Youtube"}, "65fe7b10-2395-47f4-b920-089fe0d129ac": {"name": "Kelyje", "author": "Kastaneda", "url": "https://www.youtube.com/watch?v=JVE6NQqKPL4", "source_type": "Youtube"}, "dfc0782c-33f2-414d-9b56-76a77902bcc5": {"name": "Baliavojam", "author": "16Hz", "url": "https://www.youtube.com/watch?v=Ia-qERX8WLs", "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"}, "0e33d04e-776e-4746-ab17-c4602d556716": {"name": "1001 Naktis", "author": "SADBOY", "url": "https://www.youtube.com/watch?v=mLJIjGvWmKI", "source_type": "Youtube"}, "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"}, "fa339b0b-8d3a-45e7-aed9-f744afb4a666": {"name": "Eik Tu NA", "author": "AVA", "url": "https://www.youtube.com/watch?v=yRf3ijaIgOg", "source_type": "Youtube"}, "eb91fc63-4e0e-49e9-99c7-ea7fe5770a5b": {"name": "LEDINE", "author": "Depresinis", "url": "https://www.youtube.com/watch?v=qugvChkXMLk", "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"}, "d01635a4-1a28-4d86-a524-9876eb3094de": {"name": "VAIKAI PO LELIJOM (REMIX)", "author": "Unknown", "url": "https://www.youtube.com/watch?v=k1amBbsAZuo", "source_type": "Youtube"}, "017e1086-7ca7-4788-834d-5490e0cf8276": {"name": "Mersas", "author": "Tweaxx", "url": "https://www.youtube.com/watch?v=7ljAzgALPdA", "source_type": "Youtube"}, "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"}, "d71c0e55-5d40-4045-853e-b32da713c0b8": {"name": "Lietuva (Nebelinksmas musu kaimas)", "author": "Vytautas siskauskas", "url": "https://www.youtube.com/watch?v=31UkGzde14c", "source_type": "Youtube"}, "70a80d91-581e-4599-81e6-d047f28e9068": {"name": "Margarita", "author": "Rondo", "url": "https://www.youtube.com/watch?v=rF4w-Rxsiv4", "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"}, "4f368ef5-08d0-4d1f-b8ba-a34ee9fc6aa2": {"name": "Blizgantys Naikai", "author": "SADBOY", "url": "https://www.youtube.com/watch?v=p5KsYJGcfOM", "source_type": "Youtube"}, "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"}, "75c6e1aa-21c7-4626-9def-602d656282bc": {"name": "Ka Tu Ka Vakare", "author": "Unknown", "url": "https://www.youtube.com/watch?v=6SOS4ljHbJY", "source_type": "Youtube"}, "a59cb678-f229-43cf-b438-4ce53b7264ae": {"name": "R1", "author": "NL", "url": "https://www.youtube.com/watch?v=hSgav4fYnZ8", "source_type": "Youtube"}, "a950fac9-3b5f-4215-8a49-7680fd5b90bf": {"name": "Gyvenu", "author": "69 Danguje", "url": "https://www.youtube.com/watch?v=HMXlhmAoux4", "source_type": "Youtube"}, "9d7a0837-04d4-40f7-92dc-48c7db70be51": {"name": "As Judu", "author": "Adomas Vysniauskas", "url": "https://www.youtube.com/watch?v=dMm16TzZrjg", "source_type": "Youtube"}, "e9495391-8a6c-4942-9dc6-09b764f9d1e9": {"name": "Zalias Pasas", "author": "Zas", "url": "https://www.youtube.com/watch?v=SZA7IjlCfyI", "source_type": "Youtube"}, "2eae7db0-4263-4870-b0c0-638a0d944c8e": {"name": "Negeriau", "author": "DJ Dalgis", "url": "https://www.youtube.com/watch?v=c89YvG3MCcs", "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"}, "05a28184-e58e-42c3-a803-512bb0817a07": {"name": "Vakareja", "author": "Karaliska Erdve", "url": "https://www.youtube.com/watch?v=g0HmrlJ7fhE", "source_type": "Youtube"}, "457bc1f5-f804-4665-a595-8e56a6558d1d": {"name": "Sombrero", "author": "Kastanenda", "url": "https://www.youtube.com/watch?v=3Z3_4TknCfQ", "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"}, "dc6c36b0-f595-457f-8fc3-641710b0e3b9": {"name": "I Pajuri", "author": "Mercy Dance", "url": "https://www.youtube.com/watch?v=RPpkMh47l9w", "source_type": "Youtube"}, "0e1d36ed-d07d-48c0-a101-1bf1ac6d7a26": {"name": "Be taves", "author": "Funky", "url": "https://www.youtube.com/watch?v=heTDrDukLWU", "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"}, "b26f7338-0d1f-4dba-b639-3bdae9d7e10e": {"name": "Po stikliuka", "author": "Tipo grupe ir Kastaneda", "url": "https://www.youtube.com/watch?v=EtmE60nE7fI", "source_type": "Youtube"}, "639dc5af-b3e6-4d38-a003-80deac01d326": {"name": "Myliu kina", "author": "Zas", "url": "https://www.youtube.com/watch?v=ImFrfmi-qT8", "source_type": "Youtube"}, "e53d24bf-930d-490a-b41b-9b3382e24e3c": {"name": "Truputi", "author": "Ganja", "url": "https://www.youtube.com/watch?v=Pxve7CwiCHM", "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"}, "407155fd-3174-4778-ae93-bb01b7518f9f": {"name": "Cia Mano Rojus", "author": "Robertas Kupstas", "url": "https://www.youtube.com/watch?v=xij_YeEInr8", "source_type": "Youtube"}, "df2e369f-2fee-49e5-b52c-33f73c34ffb2": {"name": "Autostrada Vilnius", "author": "16Hz", "url": "https://www.youtube.com/watch?v=ANS2TSegr40", "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"}, "383cb60f-13fd-4947-9924-6c5d8c39d453": {"name": "Kur Tu", "author": "Patruliai", "url": "https://www.youtube.com/watch?v=OPWhiu3cvj0", "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"}, "eaf1cc63-3eb6-4d86-a986-e8129fff7fcb": {"name": "Zalia Siera", "author": "DJ Dalgis", "url": "https://www.youtube.com/watch?v=nfentq_pez4", "source_type": "Youtube"}, "9e6095bb-8b05-40eb-b5d3-b6410ac65171": {"name": "C'est Beau La Bourgeoisie", "author": "Discobitch", "url": "https://www.youtube.com/watch?v=RCeQN2aEWxo", "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"}, "518e23e8-72df-42de-a918-6a9a197deb9a": {"name": "Whiskey, Cola i Tequila", "author": "Maco Mamuko", "url": "https://www.youtube.com/watch?v=aBrN0k0Phtc", "source_type": "Youtube"}, "2645c0f2-fade-489a-87ad-261d5d983ef6": {"name": "Bad Boys", "author": "Unknown", "url": "https://www.youtube.com/watch?v=NTC7RD8xzCY", "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"}, "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"}, "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"}, "f3edb436-bf04-4ad5-ad45-684a601846c3": {"name": "We are the winners", "author": "LT United", "url": "https://www.youtube.com/watch?v=DBAdOlQPbwg", "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"}, "90ae639e-0214-4a8e-b582-4949674ffaa2": {"name": "Coco Jumbo", "author": "Mr President", "url": "https://www.youtube.com/watch?v=cOrc37wNUqU", "source_type": "Youtube"}, "615d63ee-51aa-4ac2-b826-9a41f59b8622": {"name": "I Love It", "author": "Icona Pop", "url": "https://www.youtube.com/watch?v=UxxajLWwzqY", "source_type": "Youtube"}, "190a5577-124a-4232-9e6f-1d0a50f4d881": {"name": "Cheri cheri lady", "author": "Unknown", "url": "https://www.youtube.com/watch?v=lrIKt5uDWZo", "source_type": "Youtube"}, "47001462-76c8-4aee-8ed4-65242600f840": {"name": "Fireball", "author": "Pitbul", "url": "https://www.youtube.com/watch?v=HMqgVXSvwGo", "source_type": "Youtube"}, "d8423579-1225-4865-9955-149e6878b59d": {"name": "Black Sabbath", "author": "Unknown", "url": "https://www.youtube.com/watch?v=BOTIIw76qiE", "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"}, "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"}, "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"}, "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"}, "6bc8cd16-722b-42e4-9824-a1de9c67029f": {"name": "Tears Drop", "author": "Baltra", "url": "https://www.youtube.com/watch?v=EXXMtKPfuzY", "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"}, "35877af8-65ad-4d85-9f18-93b98fd3ebd4": {"name": "Le Son Dancefloor", "author": "Sweely", "url": "https://www.youtube.com/watch?v=5uEvZgmoG6Y", "source_type": "Youtube"}, "a6a20f00-cbf9-4506-9655-d6fd27944fea": {"name": "Rhodes Trip", "author": "THEOS", "url": "https://www.youtube.com/watch?v=m7guRO0Uz_c", "source_type": "Youtube"}, "d286a3a7-ab7b-488c-9c68-b7521e290c5e": {"name": "Bossa Nova (Lewii Edit)", "author": "Billie Eilish", "url": "https://www.youtube.com/watch?v=gNawHj2NCxA", "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"}, "4e903bfb-e9bf-49dc-a299-e08949ab78f9": {"name": "DANCE", "author": "ROMANCEPLANET", "url": "https://www.youtube.com/watch?v=ircOfMb4gEw", "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"}, "8fcad64e-bb63-414b-9cad-243f1f4c4293": {"name": "FALL FROM THE SKY", "author": "ROMANCEPLANET", "url": "https://www.youtube.com/watch?v=HMhzxzXBisw", "source_type": "Youtube"}, "795b22ae-d19e-4571-a5d7-fba5a66d5b6e": {"name": "PLAIN WHITE TEE", "author": "ROMANCEPLANET", "url": "https://www.youtube.com/watch?v=tdVQbNwjGac", "source_type": "Youtube"}, "76f7945f-e677-4297-a98a-708314f92de8": {"name": "Kanikuli", "author": "Unknown", "url": "https://www.youtube.com/watch?v=GNMiDZTL7jo", "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"}, "4a7b1853-7529-498d-addf-25e894a37ccf": {"name": "Temptation", "author": "Arash", "url": "https://www.youtube.com/watch?v=6X3ZJh762-I", "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"}, "3b2573d4-2e1b-4446-a377-5fcb2b0a70c5": {"name": "18 mne uze", "author": "Ruki Verch", "url": "https://www.youtube.com/watch?v=Hxab_Sr132o", "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"}, "85098bbc-86fa-4da4-b342-d2a512738060": {"name": "Topolini puh", "author": "Unknown", "url": "https://www.youtube.com/watch?v=UUryvYF8tUs", "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"}, "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"}}, "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"]}, "c3ebcdd5-82b6-49b3-a340-dc786a66eee6": {"name": "reggea", "author": "Unknown", "songs": ["192a8655-7dfc-4c4b-b351-87c75cbbe048"]}, "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"]}, "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"]}, "4230f218-7de4-463c-a42f-ad05c745de5a": {"name": "techno", "author": "Unknown", "songs": ["3453b523-e1f0-49d3-b60b-5ba063b6c26d", "6bfe21f8-b6e5-409b-b6cb-a5692f6dfeeb", "41a8d7c8-4b75-46f6-9940-7f0b8f5f5feb", "fc3f499b-2c33-41d0-b79c-ca68486b2a4d", "22f18d88-fb39-4cec-98be-02d4ebe3a6ee", "4a56c71c-70f0-45e7-a9b8-2304d41e1877", "5015106c-abcb-45c2-aed3-1f28674f92f6", "2f179aab-c51b-4501-b5d1-8a2e51b19a80", "83b50be2-c286-4dcc-9e7f-cacf5e4031fe", "22565196-5757-4767-8f1f-f1c9b8a87dcc", "83808446-bd43-4140-86ff-853fea897a89", "50186034-e8b4-4778-81e3-ab327e54dbff", "afdc69fa-c2ee-4dee-9794-e3166fc9dd20", "91629850-33e2-4e18-8c37-6eafdfcde3f4", "d8e93863-6102-4cda-a0b2-3728d20c9cf8", "cec368bd-6b4c-4c89-9eeb-1b88bed0efc3"]}, "e4203363-48dd-430c-8a63-f997ebe7e2bc": {"name": "hip-hop", "author": "Unknown", "songs": ["88fe04aa-a7be-4f6c-b32f-d3d25e58bbf8", "484b9560-731b-447d-9e7f-3d32eb68b05f"]}, "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"]}, "27afdb2f-2672-43f1-8a55-b7c6bbb7927a": {"name": "lietuviskos", "author": "Unknown", "songs": ["8e8c3f6c-e34b-4f4e-b9be-f36be5901435", "7d232736-f977-4645-bd64-106e94f91bb0", "ae2c4c10-4fac-4d80-a114-81adf209c6a1", "34e3c90b-7763-4154-9035-367e22ed7d75", "858d8645-8637-4d3f-b4b7-c9c75743d90a", "a1ab9370-70bc-488d-a78b-5cdc09c82f73", "8858c7a1-ea6d-409b-9fc3-7256a39d4d8b", "009b9458-3205-4b13-9c65-03f16fea2293", "8dca8d6c-3388-4133-b773-79b9f076e467", "9be83d96-6dfb-47a0-b58e-a1aed1cf6031", "0e969066-b7f9-4e60-a24f-989aad28dfac", "9d482849-d488-4222-adc0-727f92babcab", "6d78099b-042c-4b19-b3d9-15af1bf4ef10", "bd85a9d7-1fb6-4154-a290-e5137590e419", "131ab436-869b-4b3b-8ce4-3b5087d3461f", "1a22e35a-0af1-4326-b59c-00d59504446b", "bcb9af16-7bdb-458a-b092-42225abf2645", "3525668b-4402-4fb8-b106-bed44d8c9db2", "4c849092-b6c4-450c-b69c-304e54f63611", "8c641f7f-e151-4abc-932c-a9895823a278", "c393d1a6-b265-4a73-a7bd-d33667b08445", "ea41c37c-7b62-4fd6-9fec-650e94d184f2", "8e82aa7c-a9e0-42ee-a845-6ba7d3439452", "9000f22e-83ff-4261-be0c-625fe1d806ab", "402a9066-127a-4a62-b711-50e979abbd51", "4b61344d-fa89-4b79-bd45-3b1fc8c8cc1c", "7e1d6501-ec53-4513-9917-84886d7523e5", "9fabb799-f6aa-45a0-93b7-8cb08ab8f0a8", "ca765223-e4e6-4b5d-8928-919c3f491b43", "16dafb40-ebac-4e04-961a-99d79789f1a3", "95a3350c-c62f-4543-8cfe-6c512861b229", "720d5b94-ac54-4162-8da7-ba8d258139e6", "c28f14ca-ec10-469a-b0cc-3e26e9f56007", "6a00704f-6da9-44d7-8fee-75cf487036f0", "4eafd817-d75a-451e-b6b4-38ef29e66fdf", "b0732ead-9a8c-4537-b98a-a4618d33959f", "2b33d0b1-aecb-4ff9-841a-3a7b2861f28d", "2374179d-d6a8-41b9-9cac-21147303fc8e", "f1878fda-ecec-4303-a6df-dc6adf1ea3c0", "7f2b2809-1b38-45b5-876c-cbdb42b26bdf", "65fe7b10-2395-47f4-b920-089fe0d129ac", "dfc0782c-33f2-414d-9b56-76a77902bcc5", "b23f9b7f-1668-43f0-a1bd-9471759db18f", "0e33d04e-776e-4746-ab17-c4602d556716", "0b907d17-e3f9-4dbb-9c2d-e10327316f6e", "fa339b0b-8d3a-45e7-aed9-f744afb4a666", "eb91fc63-4e0e-49e9-99c7-ea7fe5770a5b", "4cf5e323-5e79-4471-816a-5fa345854cea", "d01635a4-1a28-4d86-a524-9876eb3094de", "017e1086-7ca7-4788-834d-5490e0cf8276", "c332ce2b-6b1c-4979-9977-dc00aa6e710b", "d71c0e55-5d40-4045-853e-b32da713c0b8", "70a80d91-581e-4599-81e6-d047f28e9068", "3ea2a490-749f-4956-b7ef-bb0c428663a9", "4f368ef5-08d0-4d1f-b8ba-a34ee9fc6aa2", "870502f1-e3a9-419b-9ba6-d8100d1198a5", "75c6e1aa-21c7-4626-9def-602d656282bc", "a59cb678-f229-43cf-b438-4ce53b7264ae", "a950fac9-3b5f-4215-8a49-7680fd5b90bf", "9d7a0837-04d4-40f7-92dc-48c7db70be51", "e9495391-8a6c-4942-9dc6-09b764f9d1e9", "2eae7db0-4263-4870-b0c0-638a0d944c8e", "6f28b04a-588e-4a81-8b4e-aa4ed4f88e31", "05a28184-e58e-42c3-a803-512bb0817a07", "457bc1f5-f804-4665-a595-8e56a6558d1d", "4a4abe26-de77-4e0f-83c9-8eab9ca32281", "dc6c36b0-f595-457f-8fc3-641710b0e3b9", "0e1d36ed-d07d-48c0-a101-1bf1ac6d7a26", "56684f28-ff1a-4f65-a585-e9ea532babb2", "73ddd372-4853-4182-b212-b021e7dc8988", "b26f7338-0d1f-4dba-b639-3bdae9d7e10e", "639dc5af-b3e6-4d38-a003-80deac01d326", "e53d24bf-930d-490a-b41b-9b3382e24e3c", "02d90830-7b5f-430f-b82c-f45998862e81", "407155fd-3174-4778-ae93-bb01b7518f9f", "df2e369f-2fee-49e5-b52c-33f73c34ffb2", "27d61e87-deec-4e4c-8015-ad8b691eea40", "383cb60f-13fd-4947-9924-6c5d8c39d453", "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"]}, "a906d80f-2028-407e-8263-6eacb53325a2": {"name": "lietuviskos/rave", "author": "Unknown", "songs": ["2b19ae9f-2321-41fc-8a1f-2bb4c2975380", "fa7d62b1-2f9a-4499-b07b-ac3127c0f69f"]}, "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"]}, "a37e3c7c-584d-4803-981b-5be9244dd7c1": {"name": "rock", "author": "Unknown", "songs": ["d8423579-1225-4865-9955-149e6878b59d"]}, "5f2e4043-cb32-4e90-9fb6-69f0466d6398": {"name": "house", "author": "Unknown", "songs": ["80a169ba-f711-408c-834c-744bac3660ca", "b0c0d44c-86ca-4b80-a081-734a4178c870", "eadbd827-0f71-4401-97bd-d11c365c3243", "eb08806a-5fe3-46d7-a989-89f6a55187cc", "6bc8cd16-722b-42e4-9824-a1de9c67029f", "1e77552d-702f-4c61-8e9f-bd02bbafe434", "35877af8-65ad-4d85-9f18-93b98fd3ebd4", "a6a20f00-cbf9-4506-9655-d6fd27944fea", "d286a3a7-ab7b-488c-9c68-b7521e290c5e", "f81f8f9d-6c56-4ae3-8f5f-28c04632d3b5"]}, "ff11b5bc-6bf7-4cdd-a47a-023dcc68a8c3": {"name": "alt", "author": "Unknown", "songs": ["4e903bfb-e9bf-49dc-a299-e08949ab78f9", "bc5fe406-040b-4c46-82ce-bb4505b81947", "8fcad64e-bb63-414b-9cad-243f1f4c4293", "795b22ae-d19e-4571-a5d7-fba5a66d5b6e"]}, "8e806ac3-63d9-4366-95d6-04f5a0aae31e": {"name": "rusiskos", "author": "Unknown", "songs": ["76f7945f-e677-4297-a98a-708314f92de8", "0491fd9f-149d-4e70-bc5c-0fae9a21d9b0", "4a7b1853-7529-498d-addf-25e894a37ccf", "6c3f2503-0160-4c42-8b17-25ff402f3fa7", "3b2573d4-2e1b-4446-a377-5fcb2b0a70c5", "03f406b5-d5e9-4d22-b9bc-d0b36354400a", "85098bbc-86fa-4da4-b342-d2a512738060", "d617c8c2-6237-40c4-8b47-b612a93c3689", "080d60fb-bdf1-40f3-8b81-967c5ea2fe44"]}}} \ No newline at end of file diff --git a/scripts/manifest_legacy_to_v1_json.py b/scripts/manifest_legacy_to_v1_json.py new file mode 100644 index 0000000..cebc388 --- /dev/null +++ b/scripts/manifest_legacy_to_v1_json.py @@ -0,0 +1,52 @@ +""" +Converts legacy manifest to v1 json +""" + +import uuid +import json +import sys + +def main(inp: str, out: str): + manifest = { + "songs": {}, + "playlists": {} + } + with open(inp, "r", encoding="utf-8") as f: + data = json.load(f) + _format = data["format"] # unused + for pname in data["playlists"]: + pid = str(uuid.uuid4()) + manifest["playlists"][pid] = { + "name": pname, + "author": "Unknown", + "songs": [] + } + for sname in data["playlists"][pname]["songs"]: + asn = sname.split(" - ", 2) + author = None + name = None + if len(asn) < 2: + author = "Unknown" + name = sname + else: + author = asn[0] + name = asn[1] + song = data["playlists"][pname]["songs"][sname] + + sid = str(uuid.uuid4()) + manifest["playlists"][pid]["songs"].append(sid) + manifest["songs"][sid] = { + "name": name, + "author": author, + "url": song["url"], + "source_type": song["typ"] + } + converted = json.dumps(manifest) + with open(out, "w", encoding="utf-8") as f: + f.write(converted) + +if __name__ == "__main__": + if len(sys.argv) < 3: + print(f"Usage: {sys.argv[0]} [in] [out]") + sys.exit(1) + main(sys.argv[1], sys.argv[2]) diff --git a/xmpd-derive/Cargo.toml b/xmpd-derive/Cargo.toml new file mode 100644 index 0000000..241c8e1 --- /dev/null +++ b/xmpd-derive/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "xmpd-derive" +edition = "2021" +version.workspace = true +repository.workspace = true +license.workspace = true +authors.workspace = true + +[lib] +proc-macro=true + +[dependencies] +quote = "1.0.37" +syn = "2.0.87" +# xmpd-gui.path = "../xmpd-gui" diff --git a/xmpd-derive/src/lib.rs b/xmpd-derive/src/lib.rs new file mode 100644 index 0000000..9319f66 --- /dev/null +++ b/xmpd-derive/src/lib.rs @@ -0,0 +1,26 @@ +use proc_macro::TokenStream; + +#[macro_use] +extern crate quote; +#[macro_use] +extern crate syn; +extern crate proc_macro; + + +#[proc_macro_derive(UiComponent)] +pub fn ui_comp_impl(input: TokenStream) -> TokenStream { + let ast: syn::DeriveInput = syn::parse(input).unwrap(); + + let name = &ast.ident; + let vis = &ast.vis; + let attr = &ast.attrs; + let data = &ast.data; + let generics = &ast.generics; + + let gen = quote! { + impl xmp + + }; + + gen.into() +} diff --git a/xmpd-gui/Cargo.toml b/xmpd-gui/Cargo.toml index ff5b79b..76c4849 100644 --- a/xmpd-gui/Cargo.toml +++ b/xmpd-gui/Cargo.toml @@ -19,9 +19,12 @@ bench = false [dependencies] xmpd-manifest.path = "../xmpd-manifest" +xmpd-derive.path = "../xmpd-derive" egui.workspace = true eframe.workspace = true tokio.workspace = true anyhow.workspace = true lazy_static.workspace = true log.workspace = true +egui_extras.workspace = true +egui-aesthetix = "0.2.4" diff --git a/xmpd-gui/src/components/left_nav.rs b/xmpd-gui/src/components/left_nav.rs new file mode 100644 index 0000000..a532510 --- /dev/null +++ b/xmpd-gui/src/components/left_nav.rs @@ -0,0 +1,40 @@ +use xmpd_manifest::store::BaseStore; + +use super::CompUi; + +#[derive(Debug, Default)] +pub struct LeftNav; + +component_register!(LeftNav); + +impl CompUi for LeftNav { + fn draw(ui: &mut egui::Ui, state: &mut crate::GuiState) -> crate::Result<()> { + let height = ui.available_height(); + egui::ScrollArea::vertical().id_source("left_nav").show(ui, |ui| { + //ui.horizontal(|ui| { + ui.vertical(|ui| { + let playlists = state.manifest.store().get_playlists(); + for (_pid, playlist) in playlists.iter() { + ui.horizontal(|ui| { + ui.add_space(5.0); + ui.add( + egui::Image::new(crate::data::NOTE_ICON) + .tint(crate::data::C_ACCENT) + .fit_to_exact_size(egui::Vec2::new(32.0, 32.0)) + ); + ui.label(playlist.name()); + ui.with_layout(egui::Layout::bottom_up(egui::Align::RIGHT), |ui| { + ui.label(format!("{}", playlist.songs().len())); + }); + }); + ui.separator(); + } + }); + // }); + }); + + Ok(()) + } +} + + diff --git a/xmpd-gui/src/components/mod.rs b/xmpd-gui/src/components/mod.rs index e69de29..ea33e3e 100644 --- a/xmpd-gui/src/components/mod.rs +++ b/xmpd-gui/src/components/mod.rs @@ -0,0 +1,16 @@ +use std::sync::{MutexGuard, PoisonError}; + +use crate::GuiState; + +pub mod left_nav; +pub mod song_list; +pub mod top_nav; +pub mod player; + +pub trait CompUi { + fn draw(ui: &mut egui::Ui, state: &mut GuiState) -> crate::Result<()>; +} + +pub trait CompGetter { + fn get() -> crate::Result>; +} diff --git a/xmpd-gui/src/components/player.rs b/xmpd-gui/src/components/player.rs new file mode 100644 index 0000000..176e527 --- /dev/null +++ b/xmpd-gui/src/components/player.rs @@ -0,0 +1,55 @@ +use egui::{Stroke, Vec2}; + +use super::{CompGetter, CompUi}; + + +#[derive(Debug, Default)] +pub struct Player { + slider_progress: usize +} + +component_register!(Player); + + +impl CompUi for Player { + fn draw(ui: &mut egui::Ui, state: &mut crate::GuiState) -> crate::Result<()> { + 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); + let mut slf = handle_error_ui!(Player::get()); + let slider = egui::Slider::new(&mut slf.slider_progress, 0..=100) + .show_value(false); + ui.style_mut().spacing.slider_width = avail.x * 0.90; + let s = Stroke { + color: crate::data::C_ACCENT, + width: 2.0 + }; + ui.style_mut().visuals.widgets.inactive.fg_stroke = s; + ui.style_mut().visuals.widgets.active.fg_stroke = s; + ui.add(slider); + ui.label("00:00"); + } + }); + ui.horizontal(|ui| { + ui.add_space((avail.x / 2.0) - 16.0 - 8.0 - ui.spacing().item_spacing.x); + let prev = egui::Image::new(crate::data::PREV_ICON) + .tint(crate::data::C_ACCENT) + .max_size(Vec2::new(16.0, 16.0)); + let play = egui::Image::new(crate::data::PLAY_ICON) + .tint(crate::data::C_ACCENT) + .max_size(Vec2::new(16.0, 16.0)); + let next = egui::Image::new(crate::data::NEXT_ICON) + .tint(crate::data::C_ACCENT) + .max_size(Vec2::new(16.0, 16.0)); + if ui.add(prev).clicked() {} + if ui.add(play).clicked() {} + if ui.add(next).clicked() {} + }); + ui.add_space(3.0); + }); + Ok(()) + } +} diff --git a/xmpd-gui/src/components/song_list.rs b/xmpd-gui/src/components/song_list.rs new file mode 100644 index 0000000..642876f --- /dev/null +++ b/xmpd-gui/src/components/song_list.rs @@ -0,0 +1,34 @@ +use egui::{Color32, Vec2}; +use xmpd_manifest::store::BaseStore; + +use super::CompUi; + + +#[derive(Debug, Default)] +pub struct SongList; + +component_register!(SongList); + +impl CompUi for SongList { + fn draw(ui: &mut egui::Ui, state: &mut crate::GuiState) -> crate::Result<()> { + egui::ScrollArea::vertical().id_source("song_list").show(ui, |ui| { + ui.vertical(|ui| { + let songs = state.manifest.store().get_songs(); + for (sid, song) in songs.iter() { + ui.horizontal(|ui| { + ui.add( + egui::Image::new(crate::data::NOTE_ICON) + .tint(crate::data::C_ACCENT) + .fit_to_exact_size(Vec2::new(32.0, 32.0)) + ); + ui.label(song.author()); + ui.strong(" - "); + ui.label(song.name()); + }); + ui.separator(); + } + }); + }); + Ok(()) + } +} diff --git a/xmpd-gui/src/components/top_nav.rs b/xmpd-gui/src/components/top_nav.rs new file mode 100644 index 0000000..0e1cab3 --- /dev/null +++ b/xmpd-gui/src/components/top_nav.rs @@ -0,0 +1,30 @@ +use super::CompUi; + + + +#[derive(Debug, Default)] +pub struct TopNav; + +component_register!(TopNav); + +impl CompUi for TopNav { + fn draw(ui: &mut egui::Ui, state: &mut crate::GuiState) -> crate::Result<()> { + ui.add_space(3.0); + ui.horizontal(|ui| { + ui.add_space(3.0); + egui::menu::bar(ui, |ui| { + ui.menu_button("File", |ui| { + // TBD + }); + ui.menu_button("Help", |ui| { + if ui.button("Source").clicked() { + ui.ctx().open_url(egui::OpenUrl::new_tab("https://git.mcorangehq.xyz/XOR64/music")); + } + + }) + }); + }); + + Ok(()) + } +} diff --git a/xmpd-gui/src/data.rs b/xmpd-gui/src/data.rs new file mode 100644 index 0000000..7e37165 --- /dev/null +++ b/xmpd-gui/src/data.rs @@ -0,0 +1,18 @@ +// pub const APP_ICON: egui::ImageSource = egui::include_image!("../../assets/app_icon.png"); +pub const APP_ICON_BYTES: &[u8] = include_bytes!("../../assets/app_icon.png"); +pub const NOTE_ICON: egui::ImageSource = egui::include_image!("../../assets/note.svg"); +pub const SEARCH_ICON: egui::ImageSource = egui::include_image!("../../assets/search.svg"); +pub const PREV_ICON: egui::ImageSource = egui::include_image!("../../assets/prev.svg"); +pub const NEXT_ICON: egui::ImageSource = egui::include_image!("../../assets/next.svg"); +pub const PLAY_ICON: egui::ImageSource = egui::include_image!("../../assets/play.svg"); +pub const PAUSE_ICON: egui::ImageSource = egui::include_image!("../../assets/pause.svg"); + + +// TODO: Replace this with config for theming +// pub const C_ACCENT: egui::Color32 = egui::Color32::from_rgb(51, 51, 119); +pub const C_ACCENT: egui::Color32 = egui::Color32::from_rgb(5, 102, 146); // #0566F6 +pub const C_PRIM_BG: egui::Color32 = egui::Color32::from_rgb(31, 34, 40); // #1F2228 +pub const C_SEC_BG: egui::Color32 = egui::Color32::from_rgb(47, 53, 61); // #2f353d +pub const C_TEXT: egui::Color32 = egui::Color32::from_rgb(223, 223, 223); // #dfdfdf + + diff --git a/xmpd-gui/src/lib.rs b/xmpd-gui/src/lib.rs index 0af7a73..8f95455 100644 --- a/xmpd-gui/src/lib.rs +++ b/xmpd-gui/src/lib.rs @@ -1,12 +1,17 @@ #![feature(async_closure)] -use std::{path::{Path, PathBuf}, sync::mpsc, thread::JoinHandle}; +use std::{path::{Path, PathBuf}, time::Duration}; +use egui::TextStyle; use windows::WindowId; use xmpd_manifest::{store::JsonStore, Manifest}; +#[macro_use] +mod macros; mod main_window; mod windows; - +mod components; +mod data; +mod utils; const W_NAME: &str = "xmpd v2.0.0a"; @@ -15,12 +20,24 @@ type Result = anyhow::Result; pub fn start(manifest_path: PathBuf) -> Result<()> { let options = eframe::NativeOptions::default(); let mut state = GuiState::new(&manifest_path)?; - state.windows.toggle(&WindowId::Error, true); let res = eframe::run_simple_native(W_NAME, options, move |ctx, _frame| { + egui_extras::install_image_loaders(ctx); state.windows.clone().draw_all(ctx, &mut state); - egui::CentralPanel::default().show(ctx, |ui| main_window::draw(ui, &mut state)); - ctx.request_repaint(); + egui::CentralPanel::default() + .frame( + egui::Frame::none() + .fill(data::C_PRIM_BG) + .stroke(egui::Stroke::new( + 1.0, + data::C_SEC_BG, + )), + ) + .show(ctx, |ui| { + ui.style_mut().visuals.override_text_color = Some(crate::data::C_TEXT); + main_window::draw(ui, &mut state) + }); + ctx.request_repaint_after(Duration::from_millis(500)); }); if let Err(e) = res { // dumb err value by eframe anyhow::bail!(e.to_string()); diff --git a/xmpd-gui/src/macros.rs b/xmpd-gui/src/macros.rs new file mode 100644 index 0000000..f32d7e7 --- /dev/null +++ b/xmpd-gui/src/macros.rs @@ -0,0 +1,29 @@ + +macro_rules! component_register { + ($comp:ident) => { + lazy_static::lazy_static! { + static ref __COMPONENT: std::sync::Arc> = + std::sync::Arc::new(std::sync::Mutex::new($comp::default())); + } + impl crate::components::CompGetter for $comp { + fn get() -> crate::Result> { + match __COMPONENT.lock() { + Ok(l) => Ok(l), + Err(e) => Err(anyhow::anyhow!(format!("{e:?}"))), + } + } + } + }; +} + +macro_rules! handle_error_ui { + ($val:expr) => { + match $val { + Ok(v) => v, + Err(e) => { + log::error!("Error in ui: {e:?}"); + return; + } + } + }; +} diff --git a/xmpd-gui/src/main_window.rs b/xmpd-gui/src/main_window.rs index 70c4390..013c8b5 100644 --- a/xmpd-gui/src/main_window.rs +++ b/xmpd-gui/src/main_window.rs @@ -1,14 +1,71 @@ use egui::ViewportId; use xmpd_manifest::store::JsonStore; -use crate::GuiState; +use crate::{components::{CompGetter, CompUi}, GuiState}; pub fn draw(ui: &mut egui::Ui, state: &mut GuiState) -> crate::Result<()> { - ui.label("Hello! this is root of main window"); - if ui.button("open iwndow").clicked() { - state.windows.toggle(&crate::windows::WindowId::Error, true); - } + // The central panel the region left after adding TopPanel's and SidePanel's + // ui.heading(format!("Songs ({})", self.manifest.get_song_count())); + let avail = ui.available_size(); + ui.vertical(|ui| { + handle_error_ui!(crate::components::top_nav::TopNav::draw(ui, state)); + crate::utils::super_separator(ui, crate::data::C_ACCENT, avail.x, 2.0); + let avail = ui.available_size(); + + ui.horizontal(|ui| { + ui.set_height(avail.y); + ui.group(|ui| { + ui.set_height(avail.y); + ui.set_width(avail.x * 0.25); + handle_error_ui!(crate::components::left_nav::LeftNav::draw(ui, state)); + }); + handle_error_ui!(crate::components::song_list::SongList::draw(ui, state)); + }); + egui::TopBottomPanel::new(egui::panel::TopBottomSide::Bottom, "player") + .frame( + egui::Frame::none() + .fill(crate::data::C_PRIM_BG) + .stroke(egui::Stroke::new( + 1.0, + crate::data::C_SEC_BG, + )), + ) + .show(ui.ctx(), |ui| { + + ui.style_mut().visuals.override_text_color = Some(crate::data::C_TEXT); + handle_error_ui!(crate::components::player::Player::draw(ui, state)); + }); + }); + //ui.vertical_centered_justified(|ui| { + // ui.with_layout(egui::Layout::top_down_justified(egui::Align::TOP), |ui| { + // let avail = ui.available_size(); + // ui.vertical(|ui| { + // let avail_width = ui.available_width(); + // ui.set_height(avail.y); + // ui.vertical(|ui| { + // ui.set_height(avail.y * 0.9); + // ui.horizontal(|ui| { +// + // ui.group(|ui| { + // ui.set_width(avail_width * 0.25); + // handle_error_ui!(crate::components::left_nav::LeftNav::draw(ui, state)); + // }); + // // crate::utils::super_separator(ui, crate::data::C_ACCENT, 3.0, avail_width); + // // handle_error_ui!(crate::components::song_list::SongList::draw(ui, state)); + // }); + // // handle_error_ui!(crate::components::player::Player::draw(ui, state)); + // }); + // }); + // + // ui.with_layout(egui::Layout::bottom_up(egui::Align::LEFT), |ui| { + // egui::warn_if_debug_build(ui); + // }); + // }); + //}); + // Ok(()) } + + diff --git a/xmpd-gui/src/utils.rs b/xmpd-gui/src/utils.rs new file mode 100644 index 0000000..b023854 --- /dev/null +++ b/xmpd-gui/src/utils.rs @@ -0,0 +1,11 @@ + +pub fn super_separator(ui: &mut egui::Ui, color: egui::Color32, width: f32, height: f32) { + egui::Frame::none() + .fill(color) + // .stroke(egui::Stroke { color: crate::data::C_ACCENT, width: 1.0 }) + .show(ui, |ui| { + ui.set_width(width); + ui.set_height(height); + }); +} + diff --git a/xmpd-gui/src/windows/mod.rs b/xmpd-gui/src/windows/mod.rs index 4f16ca7..5d9610c 100644 --- a/xmpd-gui/src/windows/mod.rs +++ b/xmpd-gui/src/windows/mod.rs @@ -64,7 +64,6 @@ impl Windows { if status { OPEN_WINDOWS.lock().unwrap().insert(id.clone()); } else { - log::debug!("tried to kill"); OPEN_WINDOWS.lock().unwrap().remove(id); } }