From fda77f69815f4086d888b2f281aaf2c12ef4c39e Mon Sep 17 00:00:00 2001 From: MCorange Date: Tue, 19 Nov 2024 14:35:33 +0200 Subject: [PATCH] Downloading prototype works --- .gitignore | 2 + Cargo.lock | 42 +- Cargo.toml | 9 +- assets/check.svg | 1 + assets/cross.svg | 1 + assets/download.svg | 1 + assets/warning.svg | 1 + manifest.json | 2356 ++++++++--------- {xmpd-dl => xmpd-cache}/Cargo.toml | 10 +- {xmpd-cli => xmpd-cache}/README.md | 0 .../src/downloader/icon.rs | 0 .../src/downloader/metadata.rs | 0 xmpd-cache/src/downloader/mod.rs | 4 + xmpd-cache/src/downloader/song.rs | 127 + xmpd-cache/src/lib.rs | 122 + xmpd-cli/src/lib.rs | 3 - {xmpd-cli => xmpd-cliargs}/Cargo.toml | 6 +- xmpd-cliargs/README.md | 0 .../src/cli.rs => xmpd-cliargs/src/lib.rs | 12 +- xmpd-core/Cargo.toml | 3 +- xmpd-core/src/logger.rs | 4 +- xmpd-core/src/main.rs | 11 +- xmpd-gui/Cargo.toml | 3 + xmpd-gui/src/components/song_list/mod.rs | 83 +- .../src/components/song_list/song_list_nav.rs | 36 +- xmpd-gui/src/components/top_nav.rs | 3 + xmpd-gui/src/data.rs | 3 + xmpd-gui/src/lib.rs | 19 +- xmpd-gui/src/main_window.rs | 11 +- xmpd-gui/src/windows/settings.rs | 86 +- xmpd-settings/Cargo.toml | 1 + xmpd-settings/src/lib.rs | 10 + xmpd-settings/src/tooling.rs | 42 + xmpd-tooling/Cargo.toml | 9 + xmpd-tooling/src/lib.rs | 0 35 files changed, 1764 insertions(+), 1257 deletions(-) create mode 100644 assets/check.svg create mode 100644 assets/cross.svg create mode 100644 assets/download.svg create mode 100644 assets/warning.svg rename {xmpd-dl => xmpd-cache}/Cargo.toml (52%) rename {xmpd-cli => xmpd-cache}/README.md (100%) rename xmpd-dl/README.md => xmpd-cache/src/downloader/icon.rs (100%) rename xmpd-dl/src/lib.rs => xmpd-cache/src/downloader/metadata.rs (100%) create mode 100644 xmpd-cache/src/downloader/mod.rs create mode 100644 xmpd-cache/src/downloader/song.rs create mode 100644 xmpd-cache/src/lib.rs delete mode 100644 xmpd-cli/src/lib.rs rename {xmpd-cli => xmpd-cliargs}/Cargo.toml (70%) create mode 100644 xmpd-cliargs/README.md rename xmpd-core/src/cli.rs => xmpd-cliargs/src/lib.rs (88%) create mode 100644 xmpd-settings/src/tooling.rs create mode 100644 xmpd-tooling/Cargo.toml create mode 100644 xmpd-tooling/src/lib.rs diff --git a/.gitignore b/.gitignore index ca25715..2e2237e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ /target/ +/cache/ settings.toml +valgrind.log diff --git a/Cargo.lock b/Cargo.lock index 1517f5a..1db9dec 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "ab_glyph" @@ -729,6 +729,9 @@ name = "camino" version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +dependencies = [ + "serde", +] [[package]] name = "cc" @@ -4376,8 +4379,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" [[package]] -name = "xmpd-cli" +name = "xmpd-cache" version = "2.0.0" +dependencies = [ + "anyhow", + "camino", + "lazy_static", + "log", + "uuid", + "xmpd-cliargs", + "xmpd-manifest", + "xmpd-settings", +] + +[[package]] +name = "xmpd-cliargs" +version = "2.0.0" +dependencies = [ + "camino", + "clap", + "dirs", + "lazy_static", +] [[package]] name = "xmpd-core" @@ -4386,24 +4409,20 @@ dependencies = [ "anyhow", "camino", "clap", - "dirs", "env_logger", "log", - "xmpd-cli", + "xmpd-cliargs", "xmpd-gui", "xmpd-manifest", "xmpd-settings", ] -[[package]] -name = "xmpd-dl" -version = "2.0.0" - [[package]] name = "xmpd-gui" version = "2.0.0" dependencies = [ "anyhow", + "camino", "eframe", "egui 0.27.2", "egui-aesthetix", @@ -4412,6 +4431,8 @@ dependencies = [ "log", "tokio", "uuid", + "xmpd-cache", + "xmpd-cliargs", "xmpd-manifest", "xmpd-settings", ] @@ -4432,12 +4453,17 @@ name = "xmpd-settings" version = "2.0.0" dependencies = [ "anyhow", + "camino", "egui 0.27.2", "lazy_static", "serde", "toml", ] +[[package]] +name = "xmpd-tooling" +version = "2.0.0" + [[package]] name = "zbus" version = "3.15.2" diff --git a/Cargo.toml b/Cargo.toml index 9b4eb7e..cb51893 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,9 +4,10 @@ members=[ "xmpd-core", "xmpd-manifest", "xmpd-gui", - #"xmpd-cli", - "xmpd-dl", - "xmpd-settings", + "xmpd-cliargs", + "xmpd-cache", + "xmpd-settings", + "xmpd-tooling", # "xmpd-tui" ] @@ -24,7 +25,7 @@ authors=[ anstyle = "1.0.6" anyhow = "1.0.81" bitflags = { version = "2.6.0", features = ["serde"] } -camino = "1.1.6" +camino = { version="1.1.6", features = ["serde1"] } clap = { version = "4.5.4", features = ["derive"] } eframe = "0.27.2" egui = { version = "0.27.2", features = ["color-hex", "serde"] } diff --git a/assets/check.svg b/assets/check.svg new file mode 100644 index 0000000..b0ffff3 --- /dev/null +++ b/assets/check.svg @@ -0,0 +1 @@ + diff --git a/assets/cross.svg b/assets/cross.svg new file mode 100644 index 0000000..ffb94a9 --- /dev/null +++ b/assets/cross.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/download.svg b/assets/download.svg new file mode 100644 index 0000000..1d40fb2 --- /dev/null +++ b/assets/download.svg @@ -0,0 +1 @@ + diff --git a/assets/warning.svg b/assets/warning.svg new file mode 100644 index 0000000..30165d3 --- /dev/null +++ b/assets/warning.svg @@ -0,0 +1 @@ + diff --git a/manifest.json b/manifest.json index a232ac9..27c1693 100644 --- a/manifest.json +++ b/manifest.json @@ -1,741 +1,15 @@ { "songs": { - "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" - }, - "8e82aa7c-a9e0-42ee-a845-6ba7d3439452": { - "name": "Apzavai", - "author": "Vaidas Baumila", - "url": "https://www.youtube.com/watch?v=H8uGi4ZMgHA", - "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" - }, - "201c6680-7dcf-4d75-8bdc-76ff9a715167": { - "name": "Gyvenimo man vieno neuztenka", - "author": "SEL", - "url": "https://youtu.be/7Gd9XaEG5o4", - "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" - }, - "407155fd-3174-4778-ae93-bb01b7518f9f": { - "name": "Cia Mano Rojus", - "author": "Robertas Kupstas", - "url": "https://www.youtube.com/watch?v=xij_YeEInr8", - "source_type": "Youtube" - }, - "3453b523-e1f0-49d3-b60b-5ba063b6c26d": { - "name": "The Love Parade ( Bounce Invaderz )", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=xogT6KBWjCU3", - "source_type": "Youtube" - }, - "0c5a22fc-2a61-4171-a5b9-f24da0c71466": { - "name": "As ziuriu i tave pasauli", - "author": "SEL", - "url": "https://youtu.be/_SPDjl80kKw", - "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" - }, - "131ab436-869b-4b3b-8ce4-3b5087d3461f": { - "name": "1.9 TDI", - "author": "Grupe MX", - "url": "https://www.youtube.com/watch?v=8FBr5GQXsI8", - "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" - }, - "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" - }, - "7ed02ac9-cb84-4a34-870d-56b226f0a6be": { - "name": "Always Forever", - "author": "Cults", - "url": "https://open.spotify.com/track/2enPRFda84VE2wtI8c86Uf", - "source_type": "Spotify" - }, - "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" - }, - "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" - }, - "4e903bfb-e9bf-49dc-a299-e08949ab78f9": { - "name": "DANCE", - "author": "ROMANCEPLANET", - "url": "https://www.youtube.com/watch?v=ircOfMb4gEw", - "source_type": "Youtube" - }, - "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" - }, - "a0bd5ffe-4be8-498e-8f43-c5a9505a4872": { - "name": "Ten kur sapnai", - "author": "SEL", - "url": "https://youtu.be/GDj3NgjDbRo", - "source_type": "Youtube" - }, - "4b61344d-fa89-4b79-bd45-3b1fc8c8cc1c": { - "name": "Rycka klipas", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=nuTUDSQ3BBI", - "source_type": "Youtube" - }, - "05a28184-e58e-42c3-a803-512bb0817a07": { - "name": "Vakareja", - "author": "Karaliska Erdve", - "url": "https://www.youtube.com/watch?v=g0HmrlJ7fhE", - "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" - }, - "8e8c3f6c-e34b-4f4e-b9be-f36be5901435": { - "name": "biznis", - "author": "PROFLAME", - "url": "https://www.youtube.com/watch?v=t139Vd83pgs", - "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" - }, - "8dca8d6c-3388-4133-b773-79b9f076e467": { - "name": "0,7", - "author": "Depresinis feat. Deivas", - "url": "https://www.youtube.com/watch?v=rjwFjBgTzAA", - "source_type": "Youtube" - }, - "e9495391-8a6c-4942-9dc6-09b764f9d1e9": { - "name": "Zalias Pasas", - "author": "Zas", - "url": "https://www.youtube.com/watch?v=SZA7IjlCfyI", - "source_type": "Youtube" - }, - "0e1d36ed-d07d-48c0-a101-1bf1ac6d7a26": { - "name": "Be taves", - "author": "Funky", - "url": "https://www.youtube.com/watch?v=heTDrDukLWU", - "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" - }, - "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" - }, - "4cf5e323-5e79-4471-816a-5fa345854cea": { - "name": "rytmecio rasos", - "author": "nemuno krantai", - "url": "https://www.youtube.com/watch?v=2-fGbsrofv4", - "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" - }, - "18c2b9bc-6403-4a67-94bd-1e9f5413d83b": { - "name": "Skrendu", - "author": "SEL", - "url": "https://youtu.be/G5Q_asvrXlA", - "source_type": "Youtube" - }, - "4a7b1853-7529-498d-addf-25e894a37ccf": { - "name": "Temptation", - "author": "Arash", - "url": "https://www.youtube.com/watch?v=6X3ZJh762-I", - "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" - }, - "9d7a0837-04d4-40f7-92dc-48c7db70be51": { - "name": "As Judu", - "author": "Adomas Vysniauskas", - "url": "https://www.youtube.com/watch?v=dMm16TzZrjg", - "source_type": "Youtube" - }, - "7b680328-e576-4185-a5da-3c37de98ca42": { - "name": "cabin fever", - "author": "re6ce", - "url": "https://open.spotify.com/track/3c3oUMxOr2cVFBY6V3v08C", - "source_type": "Spotify" - }, - "9be83d96-6dfb-47a0-b58e-a1aed1cf6031": { - "name": "Pasitusinam", - "author": "NL", - "url": "https://www.youtube.com/watch?v=WhSFudvloog", - "source_type": "Youtube" - }, - "7f2b2809-1b38-45b5-876c-cbdb42b26bdf": { - "name": "Volkswagina", - "author": "Depresinis", - "url": "https://www.youtube.com/watch?v=1lZR1VKsQHo", - "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" }, - "9fabb799-f6aa-45a0-93b7-8cb08ab8f0a8": { - "name": "16 metu", - "author": "69 Danguje", - "url": "https://www.youtube.com/watch?v=nwjoqPcUPrw", - "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" - }, - "08995ab0-2954-4d6b-913e-27609e90b354": { - "name": "Caramelldansen", - "author": "Alfons, LOOKET, DJ BERIT", - "url": "https://open.spotify.com/track/1v7aZHBUwKxeCgmpe6fVUH", - "source_type": "Spotify" - }, - "383cb60f-13fd-4947-9924-6c5d8c39d453": { - "name": "Kur Tu", - "author": "Patruliai", - "url": "https://www.youtube.com/watch?v=OPWhiu3cvj0", - "source_type": "Youtube" - }, - "ae2c4c10-4fac-4d80-a114-81adf209c6a1": { - "name": "Kaip Diena", - "author": "morre", - "url": "https://www.youtube.com/watch?v=6LDgLWCQSSM", - "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" - }, - "ca765223-e4e6-4b5d-8928-919c3f491b43": { - "name": "Kaifuok", - "author": "SADBOY", - "url": "https://www.youtube.com/watch?v=vclryWgfy8I", - "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" - }, - "877c24e4-c0c0-4e9c-a553-221e381c8a00": { - "name": "Stumblin' In", - "author": "CYRIL", - "url": "https://open.spotify.com/track/0h3Xy4V4apMraB5NuM8U7Z", - "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" - }, - "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" - }, - "ec3edf2d-1e19-4c71-8f5c-e53d9cd06c3b": { - "name": "Cigarette Daydreams", - "author": "Cage The Elephant", - "url": "https://open.spotify.com/track/6jHvX8ZnHKC1PnrPMJ0Emt", - "source_type": "Spotify" - }, - "5c2ee27e-d564-404a-8259-87d1d336f106": { - "name": "Money", - "author": "The Drums", - "url": "https://open.spotify.com/track/3VIJBrMpvimHEw5wtPh2wB", - "source_type": "Spotify" - }, - "c28f14ca-ec10-469a-b0cc-3e26e9f56007": { - "name": "VASARA ZJBS", - "author": "Depresinis & MERAKI2004", - "url": "https://www.youtube.com/watch?v=BD-pBjRy-5A", - "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" - }, - "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" - }, - "a1ab9370-70bc-488d-a78b-5cdc09c82f73": { - "name": "Trys Trys Trys", - "author": "Riaukenzo", - "url": "https://www.youtube.com/watch?v=qJv6GRQCnCk", - "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" - }, - "402a9066-127a-4a62-b711-50e979abbd51": { - "name": "Naktinis Tusas", - "author": "Dove", - "url": "https://www.youtube.com/watch?v=pz-HEAwFEnk", - "source_type": "Youtube" - }, - "2645c0f2-fade-489a-87ad-261d5d983ef6": { - "name": "Bad Boys", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=NTC7RD8xzCY", - "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" - }, - "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" - }, - "9000f22e-83ff-4261-be0c-625fe1d806ab": { - "name": "MAMA MANE RODYS PER FARUS", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=F5HqXYRDZaE", - "source_type": "Youtube" - }, - "6bc8cd16-722b-42e4-9824-a1de9c67029f": { - "name": "Tears Drop", - "author": "Baltra", - "url": "https://www.youtube.com/watch?v=EXXMtKPfuzY", - "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" - }, - "85098bbc-86fa-4da4-b342-d2a512738060": { - "name": "Topolini puh", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=UUryvYF8tUs", - "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" - }, - "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" - }, - "192a8655-7dfc-4c4b-b351-87c75cbbe048": { - "name": "It Wasn't Me", - "author": "Shaggy", - "url": "https://www.youtube.com/watch?v=ssVj50ombaM", - "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" - }, - "cec368bd-6b4c-4c89-9eeb-1b88bed0efc3": { - "name": "PARIS (TECHNO)", - "author": "$UICIDEBOY$", - "url": "https://www.youtube.com/watch?v=YYDJmGDkEyw", - "source_type": "Youtube" - }, - "cbc90bff-5476-408c-9cc8-afd1af5b536d": { - "name": "Vienna", - "author": "Billy Joel", - "url": "https://open.spotify.com/track/4U45aEWtQhrm8A5mxPaFZ7", - "source_type": "Spotify" - }, - "0c77785e-7149-45a7-84a1-a9c8ccaa9f7f": { - "name": "Lyja", - "author": "SEL", - "url": "https://www.youtube.com/watch?v=KL6JBWnXCxw", - "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" - }, - "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" - }, - "d8e93863-6102-4cda-a0b2-3728d20c9cf8": { - "name": "dashstar", - "author": "Knock2", - "url": "https://www.youtube.com/watch?v=58ml5b_On6w", - "source_type": "Youtube" - }, - "e71a61d4-b54a-47d1-b0ad-db6695bd0739": { - "name": "Hey Lover!", - "author": "Wabie", - "url": "https://open.spotify.com/track/7rC3P7tpWriaC4hYWKwGQd", - "source_type": "Spotify" - }, - "c393d1a6-b265-4a73-a7bd-d33667b08445": { - "name": "Kauniete", - "author": "DJ Dalgis", - "url": "https://www.youtube.com/watch?v=b3xPE9Iyuzc", - "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" - }, - "b26f7338-0d1f-4dba-b639-3bdae9d7e10e": { - "name": "Po stikliuka", - "author": "Tipo grupe ir Kastaneda", - "url": "https://www.youtube.com/watch?v=EtmE60nE7fI", - "source_type": "Youtube" - }, - "3525668b-4402-4fb8-b106-bed44d8c9db2": { - "name": "I Kluba", - "author": "Raketa", - "url": "https://www.youtube.com/watch?v=FkSjtpYN3EI", - "source_type": "Youtube" - }, - "abd6a036-f17a-4a6a-8420-2cc3e7e4a181": { - "name": "Ten kazkur giliai", - "author": "SEL", - "url": "https://youtu.be/N7YNlegeiqs?si=9BBH6hjrgOjJ01Nz", - "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" - }, - "ee1e8d12-75ac-43f7-bf85-a1b69eb66e86": { - "name": "Vanished", - "author": "Crystal Castles", - "url": "https://open.spotify.com/track/3gGMsx3jxYKfhXq8LMj1tz", - "source_type": "Spotify" - }, - "8c641f7f-e151-4abc-932c-a9895823a278": { - "name": "Nevaidink", - "author": "SixthBoi", - "url": "https://www.youtube.com/watch?v=nOTNnnrqTII", - "source_type": "Youtube" - }, - "101166d0-1b7c-4d1c-b0ce-35b9a89b0822": { - "name": "Nes as tik vejas", - "author": "SEL", - "url": "https://youtu.be/acMG37IZ6z8", - "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" - }, - "16dafb40-ebac-4e04-961a-99d79789f1a3": { - "name": "Topine Panele", - "author": "Wenona Waves", - "url": "https://www.youtube.com/watch?v=MPHuhmUomfE", - "source_type": "Youtube" - }, - "a950fac9-3b5f-4215-8a49-7680fd5b90bf": { - "name": "Gyvenu", - "author": "69 Danguje", - "url": "https://www.youtube.com/watch?v=HMXlhmAoux4", - "source_type": "Youtube" - }, - "2e9ef729-1560-446c-af6a-8a9d4c43ac9a": { - "name": "Big Sis", - "author": "SALES", - "url": "https://open.spotify.com/track/0ARp9mXXpPflIwehy25kCa", - "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" - }, - "22f18d88-fb39-4cec-98be-02d4ebe3a6ee": { - "name": "Party maker", - "author": "MUTA", - "url": "https://www.youtube.com/watch?v=LT9VNK1aCXY", - "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" - }, - "7d232736-f977-4645-bd64-106e94f91bb0": { - "name": "Judam Lietuvoj", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=WDzWSEgSy5U", - "source_type": "Youtube" - }, - "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" - }, - "dfc0782c-33f2-414d-9b56-76a77902bcc5": { - "name": "Baliavojam", - "author": "16Hz", - "url": "https://www.youtube.com/watch?v=Ia-qERX8WLs", - "source_type": "Youtube" - }, - "e37c6cb6-ad8e-43a7-83d1-8b795db8aa1c": { - "name": "Harness Your Hopes", - "author": "Pavement", - "url": "https://open.spotify.com/track/4vsoWZcvtvSsE0OiVvDDvX", - "source_type": "Spotify" - }, - "f81f8f9d-6c56-4ae3-8f5f-28c04632d3b5": { - "name": "Kcik 23", - "author": "Unknown Artist", - "url": "https://www.youtube.com/watch?v=SnnqDdZJpzA", - "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" - }, - "95a3350c-c62f-4543-8cfe-6c512861b229": { - "name": "Ryk Zuvedra ryk", - "author": "Zilviokas", - "url": "https://www.youtube.com/watch?v=eN6BOI7UlSE", - "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" - }, - "35877af8-65ad-4d85-9f18-93b98fd3ebd4": { - "name": "Le Son Dancefloor", - "author": "Sweely", - "url": "https://www.youtube.com/watch?v=5uEvZgmoG6Y", - "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" - }, - "78d3766c-7d79-43a1-aa37-f680cfd253e0": { - "name": "Perfect remix 1991", - "author": "Mason", - "url": "https://open.spotify.com/track/1VKWQgq0g2uKtgNfL0ceNM?si=b3f1dc504ddb41ed", - "source_type": "Spotify" - }, - "7e1d6501-ec53-4513-9917-84886d7523e5": { - "name": "Amerikonas grizo sunus", - "author": "Zilvinas Zvagulis", - "url": "https://www.youtube.com/watch?v=UvzJEz5ADY8", - "source_type": "Youtube" - }, - "bb16708f-0cd7-4918-8014-d374d68acbd2": { - "name": "Not Allowed", - "author": "TV Girl", - "url": "https://open.spotify.com/track/3IznIgmXtrUaoPWpQTy5jB", - "source_type": "Spotify" - }, - "83b50be2-c286-4dcc-9e7f-cacf5e4031fe": { - "name": "Not Fair", - "author": "Lily Allen", - "url": "https://www.youtube.com/watch?v=WON_YIbeLis", - "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" - }, - "0491fd9f-149d-4e70-bc5c-0fae9a21d9b0": { - "name": "Rozovoe vino", - "author": "Eldzej and Feduk", - "url": "https://www.youtube.com/watch?v=S9oXj3a4gZ4", - "source_type": "Youtube" - }, - "720d5b94-ac54-4162-8da7-ba8d258139e6": { - "name": "KINO FILMAI", - "author": "RADVIS", - "url": "https://www.youtube.com/watch?v=vhAEkC3xNMo", - "source_type": "Youtube" - }, - "0e33d04e-776e-4746-ab17-c4602d556716": { - "name": "1001 Naktis", - "author": "SADBOY", - "url": "https://www.youtube.com/watch?v=mLJIjGvWmKI", - "source_type": "Youtube" - }, - "eb91fc63-4e0e-49e9-99c7-ea7fe5770a5b": { - "name": "LEDINE", - "author": "Depresinis", - "url": "https://www.youtube.com/watch?v=qugvChkXMLk", - "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" - }, - "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" - }, - "9ef33d55-972d-490c-95c6-bf046bf4f979": { - "name": "MONEY ON THE DASH", - "author": "Unknown", - "url": "https://open.spotify.com/track/6nVEV8CIU4dw12oVZbKJtl", - "source_type": "Spotify" - }, - "df2e369f-2fee-49e5-b52c-33f73c34ffb2": { - "name": "Autostrada Vilnius", - "author": "16Hz", - "url": "https://www.youtube.com/watch?v=ANS2TSegr40", - "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" - }, - "d8423579-1225-4865-9955-149e6878b59d": { - "name": "Black Sabbath", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=BOTIIw76qiE", - "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" - }, - "a59cb678-f229-43cf-b438-4ce53b7264ae": { - "name": "R1", - "author": "NL", - "url": "https://www.youtube.com/watch?v=hSgav4fYnZ8", - "source_type": "Youtube" - }, - "2eae7db0-4263-4870-b0c0-638a0d944c8e": { - "name": "Negeriau", - "author": "DJ Dalgis", - "url": "https://www.youtube.com/watch?v=c89YvG3MCcs", - "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" - }, - "f1878fda-ecec-4303-a6df-dc6adf1ea3c0": { - "name": "Juodas Garvezys (Remix)", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=D-7qQbXHSAw", + "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": { @@ -744,22 +18,754 @@ "url": "https://www.youtube.com/watch?v=erDHG-QpbPY", "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" - }, - "70a80d91-581e-4599-81e6-d047f28e9068": { - "name": "Margarita", - "author": "Rondo", - "url": "https://www.youtube.com/watch?v=rF4w-Rxsiv4", + "6bc8cd16-722b-42e4-9824-a1de9c67029f": { + "name": "Tears Drop", + "author": "Baltra", + "url": "https://www.youtube.com/watch?v=EXXMtKPfuzY", "source_type": "Youtube" }, - "e1cb8b00-713b-4a0e-bc61-dbf2d2596fcf": { - "name": "Tik Tok", + "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/RkaIUateIxg", + "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" + }, + "d01635a4-1a28-4d86-a524-9876eb3094de": { + "name": "VAIKAI PO LELIJOM (REMIX)", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=k1amBbsAZuo", + "source_type": "Youtube" + }, + "59c20651-6ffe-493d-886b-ccd8b7fe6dee": { + "name": "EVERYTHING WHAT", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=Gjdsq4kc5cA", + "source_type": "Youtube" + }, + "4a7b1853-7529-498d-addf-25e894a37ccf": { + "name": "Temptation", + "author": "Arash", + "url": "https://www.youtube.com/watch?v=6X3ZJh762-I", + "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" + }, + "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", + "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" + }, + "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" + }, + "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" }, "ea41c37c-7b62-4fd6-9fec-650e94d184f2": { @@ -774,154 +780,112 @@ "url": "https://www.youtube.com/watch?v=9qHLELnq1B0", "source_type": "Youtube" }, - "b23f9b7f-1668-43f0-a1bd-9471759db18f": { - "name": "Juda Tavo rankos", - "author": "Elektra", - "url": "https://www.youtube.com/watch?v=k2RuDoudnOE", + "4cf5e323-5e79-4471-816a-5fa345854cea": { + "name": "rytmecio rasos", + "author": "nemuno krantai", + "url": "https://www.youtube.com/watch?v=2-fGbsrofv4", "source_type": "Youtube" }, - "858d8645-8637-4d3f-b4b7-c9c75743d90a": { - "name": "Dviratukas", - "author": "Eugenijus Ostapenko", - "url": "https://www.youtube.com/watch?v=ILFHZQK33Mw", + "7f2b2809-1b38-45b5-876c-cbdb42b26bdf": { + "name": "Volkswagina", + "author": "Depresinis", + "url": "https://www.youtube.com/watch?v=1lZR1VKsQHo", "source_type": "Youtube" }, - "1a22e35a-0af1-4326-b59c-00d59504446b": { - "name": "Virs debesu", - "author": "Andzikas", - "url": "https://www.youtube.com/watch?v=PHJcVGhxra8", + "2b19ae9f-2321-41fc-8a1f-2bb4c2975380": { + "name": "Malunas Prie Kelio", + "author": "VainHouse", + "url": "https://www.youtube.com/watch?v=bbwuNjDXCiM", "source_type": "Youtube" }, - "65fe7b10-2395-47f4-b920-089fe0d129ac": { - "name": "Kelyje", - "author": "Kastaneda", - "url": "https://www.youtube.com/watch?v=JVE6NQqKPL4", - "source_type": "Youtube" - }, - "6dd614cd-ba76-483c-bf6d-26eb1f3b6f1a": { - "name": "99 Red Balloons", - "author": "Nena", - "url": "https://open.spotify.com/track/7p8HVe22aGW1XtO1hoDHGo", + "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" }, - "47f2a63e-e9eb-48df-a61b-dbcdfa3aaf35": { - "name": "Everlong", - "author": "Foo Fighters", - "url": "https://open.spotify.com/track/5UWwZ5lm5PKu6eKsHAGxOk", - "source_type": "Spotify" - }, - "4f368ef5-08d0-4d1f-b8ba-a34ee9fc6aa2": { - "name": "Blizgantys Naikai", - "author": "SADBOY", - "url": "https://www.youtube.com/watch?v=p5KsYJGcfOM", - "source_type": "Youtube" - }, - "8858c7a1-ea6d-409b-9fc3-7256a39d4d8b": { - "name": "PENKTADIENIS", - "author": "NIERKA", - "url": "https://www.youtube.com/watch?v=h3TuZj_OAf0", - "source_type": "Youtube" - }, - "2b33d0b1-aecb-4ff9-841a-3a7b2861f28d": { - "name": "Degtine", - "author": "Grupiokai", - "url": "https://www.youtube.com/watch?v=8SqbG2VmEFw", - "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" - }, - "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" - }, - "c374f3c2-b498-49b3-88c5-a2e6e741e1e8": { - "name": "Leisk", - "author": "SEL", - "url": "https://youtu.be/DDPmFMrffXQ", - "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" - }, - "615d63ee-51aa-4ac2-b826-9a41f59b8622": { - "name": "I Love It", - "author": "Icona Pop", - "url": "https://www.youtube.com/watch?v=UxxajLWwzqY", - "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" - }, - "76f7945f-e677-4297-a98a-708314f92de8": { - "name": "Kanikuli", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=GNMiDZTL7jo", - "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" - }, - "0679475a-259c-4c98-9ae7-a58c10dfeedb": { - "name": "New Flesh", - "author": "Current Joys", - "url": "https://open.spotify.com/track/6HJxxqHWMdidwTVZmZWeHU", - "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" - }, - "d563619a-344e-41cf-99d1-5a52214ada49": { - "name": "Sports", - "author": "Beach Bunny", - "url": "https://open.spotify.com/track/77G0k1La0c5Dw8bAFANcyp", - "source_type": "Spotify" - }, - "4c849092-b6c4-450c-b69c-304e54f63611": { - "name": "Deginam", - "author": "SADBOY", - "url": "https://www.youtube.com/watch?v=w3R0Aq1EGXg", - "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" - }, - "73ddd372-4853-4182-b212-b021e7dc8988": { - "name": "Parukom", - "author": "Tnn", - "url": "https://www.youtube.com/watch?v=v9pBZK2RIPI", - "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", + "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": { @@ -930,64 +894,154 @@ "url": "https://www.youtube.com/watch?v=Pxve7CwiCHM", "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" - }, - "0ee56450-2942-4805-9f08-b49652472258": { - "name": "Tricky Disco", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=t78qVdbAiXw", - "source_type": "Youtube" - }, - "0e969066-b7f9-4e60-a24f-989aad28dfac": { - "name": "Svajoklis", - "author": "Vairas", - "url": "https://www.youtube.com/watch?v=hs8_KTV0Vrw", - "source_type": "Youtube" - }, - "c7867d88-60f2-483b-b435-883d4ff5b2f9": { - "name": "Alien Blues", - "author": "Vundabar", - "url": "https://open.spotify.com/track/11iIikXxC6NP0Ma8vMD27x", - "source_type": "Spotify" - }, - "9d93859c-dae3-4c03-8f8d-d4f6bc0e287e": { - "name": "Jealous", - "author": "Eyedress", - "url": "https://open.spotify.com/track/1aXV8GrmQLvgoFtBPERP7E", - "source_type": "Spotify" - }, - "dc6c36b0-f595-457f-8fc3-641710b0e3b9": { - "name": "I Pajuri", - "author": "Mercy Dance", - "url": "https://www.youtube.com/watch?v=RPpkMh47l9w", - "source_type": "Youtube" - }, "56684f28-ff1a-4f65-a585-e9ea532babb2": { "name": "AUDI", "author": "MC ENDRAY", "url": "https://www.youtube.com/watch?v=oIjNoMGEuRg", "source_type": "Youtube" }, - "88fe04aa-a7be-4f6c-b32f-d3d25e58bbf8": { - "name": "Because I Got High", - "author": "Afroman", - "url": "https://www.youtube.com/watch?v=WeYsTmIzjkw", + "73ddd372-4853-4182-b212-b021e7dc8988": { + "name": "Parukom", + "author": "Tnn", + "url": "https://www.youtube.com/watch?v=v9pBZK2RIPI", "source_type": "Youtube" }, - "90ae639e-0214-4a8e-b582-4949674ffaa2": { - "name": "Coco Jumbo", - "author": "Mr President", - "url": "https://www.youtube.com/watch?v=cOrc37wNUqU", + "60214f0e-9a37-49b4-92bf-b7b548e501ad": { + "name": "Uzmerkiu akis", + "author": "SEL", + "url": "https://youtu.be/SdWj06XRZms?si=9TNGzjK9ITom-jaD", "source_type": "Youtube" }, - "2c650e29-9f87-4253-8074-146f3653051d": { - "name": "Satisfaction", - "author": "Benny Benassi", - "url": "https://www.youtube.com/watch?v=a0fkNdPiIL4", + "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", + "author": "SEL", + "url": "https://youtu.be/GDj3NgjDbRo", + "source_type": "Youtube" + }, + "05a28184-e58e-42c3-a803-512bb0817a07": { + "name": "Vakareja", + "author": "Karaliska Erdve", + "url": "https://www.youtube.com/watch?v=g0HmrlJ7fhE", + "source_type": "Youtube" + }, + "ca765223-e4e6-4b5d-8928-919c3f491b43": { + "name": "Kaifuok", + "author": "SADBOY", + "url": "https://www.youtube.com/watch?v=vclryWgfy8I", + "source_type": "Youtube" + }, + "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" + }, + "131ab436-869b-4b3b-8ce4-3b5087d3461f": { + "name": "1.9 TDI", + "author": "Grupe MX", + "url": "https://www.youtube.com/watch?v=8FBr5GQXsI8", + "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" + }, + "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" + }, + "639dc5af-b3e6-4d38-a003-80deac01d326": { + "name": "Myliu kina", + "author": "Zas", + "url": "https://www.youtube.com/watch?v=ImFrfmi-qT8", + "source_type": "Youtube" + }, + "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" + }, + "190a5577-124a-4232-9e6f-1d0a50f4d881": { + "name": "Cheri cheri lady", + "author": "Unknown", + "url": "https://www.youtube.com/watch?v=lrIKt5uDWZo", + "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" }, "457bc1f5-f804-4665-a595-8e56a6558d1d": { @@ -996,121 +1050,135 @@ "url": "https://www.youtube.com/watch?v=3Z3_4TknCfQ", "source_type": "Youtube" }, - "2bd2e64e-28f0-4bd7-aee3-e1d27ed0797d": { - "name": "In the End", - "author": "Linkin Park", - "url": "https://open.spotify.com/track/60a0Rd6pjrkxjPbaKzXjfq", + "df2e369f-2fee-49e5-b52c-33f73c34ffb2": { + "name": "Autostrada Vilnius", + "author": "16Hz", + "url": "https://www.youtube.com/watch?v=ANS2TSegr40", + "source_type": "Youtube" + }, + "ae2c4c10-4fac-4d80-a114-81adf209c6a1": { + "name": "Kaip Diena", + "author": "morre", + "url": "https://www.youtube.com/watch?v=6LDgLWCQSSM", + "source_type": "Youtube" + }, + "70a80d91-581e-4599-81e6-d047f28e9068": { + "name": "Margarita", + "author": "Rondo", + "url": "https://www.youtube.com/watch?v=rF4w-Rxsiv4", + "source_type": "Youtube" + }, + "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" }, - "8bf09666-9aba-4c71-a58a-a64200d49f9e": { - "name": "Cloud 9", - "author": "Beach Bunny", - "url": "https://open.spotify.com/track/6vFsBXYczYsP0H3lgunZOm", - "source_type": "Spotify" - }, - "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" - }, - "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" - }, - "d01635a4-1a28-4d86-a524-9876eb3094de": { - "name": "VAIKAI PO LELIJOM (REMIX)", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=k1amBbsAZuo", - "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" - }, - "83808446-bd43-4140-86ff-853fea897a89": { - "name": "Bla Bla Bla", - "author": "Gigi D'Agostino", - "url": "https://www.youtube.com/watch?v=yKapqR2XRJE", - "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" - }, - "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" - }, - "6a00704f-6da9-44d7-8fee-75cf487036f0": { - "name": "Lovoj Vezi", - "author": "Tipo grupe", - "url": "https://www.youtube.com/watch?v=M3zVMzWCy_c", - "source_type": "Youtube" - }, - "59c20651-6ffe-493d-886b-ccd8b7fe6dee": { - "name": "EVERYTHING WHAT", - "author": "Unknown", - "url": "https://www.youtube.com/watch?v=Gjdsq4kc5cA", - "source_type": "Youtube" - }, - "017e1086-7ca7-4788-834d-5490e0cf8276": { - "name": "Mersas", - "author": "Tweaxx", - "url": "https://www.youtube.com/watch?v=7ljAzgALPdA", - "source_type": "Youtube" - }, - "f5a31a44-fc62-4cce-b65e-05e4085864fe": { - "name": "End of Beginning", - "author": "Djo", - "url": "https://open.spotify.com/track/3qhlB30KknSejmIvZZLjOD", - "source_type": "Spotify" - }, - "862ddd87-68c4-4bed-a8cd-0e2021a0ce79": { - "name": "Renee", - "author": "SALES", - "url": "https://open.spotify.com/track/5MeUMSRreLHYLhw8ZTyqpk", - "source_type": "Spotify" - }, - "60214f0e-9a37-49b4-92bf-b7b548e501ad": { - "name": "Uzmerkiu akis", + "c374f3c2-b498-49b3-88c5-a2e6e741e1e8": { + "name": "Leisk", "author": "SEL", - "url": "https://youtu.be/SdWj06XRZms?si=9TNGzjK9ITom-jaD", + "url": "https://youtu.be/DDPmFMrffXQ", "source_type": "Youtube" }, - "98b04764-39cc-4c82-a2e2-420dd85573ca": { - "name": "Tarp amzinybes", - "author": "SEL", - "url": "https://youtu.be/UfPj-0QpGFA", + "65fe7b10-2395-47f4-b920-089fe0d129ac": { + "name": "Kelyje", + "author": "Kastaneda", + "url": "https://www.youtube.com/watch?v=JVE6NQqKPL4", "source_type": "Youtube" }, - "6d78099b-042c-4b19-b3d9-15af1bf4ef10": { - "name": "JUODA ORCHIDEJA", - "author": "MG INTERNATIONAL", - "url": "https://www.youtube.com/watch?v=HQvceFRBq9M", + "8858c7a1-ea6d-409b-9fc3-7256a39d4d8b": { + "name": "PENKTADIENIS", + "author": "NIERKA", + "url": "https://www.youtube.com/watch?v=h3TuZj_OAf0", + "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" + }, + "a1ab9370-70bc-488d-a78b-5cdc09c82f73": { + "name": "Trys Trys Trys", + "author": "Riaukenzo", + "url": "https://www.youtube.com/watch?v=qJv6GRQCnCk", "source_type": "Youtube" } }, "playlists": { - "c3ebcdd5-82b6-49b3-a340-dc786a66eee6": { - "name": "reggea", + "8c9d2cf1-6f0b-4ea9-993a-c3193867a914": { + "name": "rave", "author": "Unknown", "songs": [ - "192a8655-7dfc-4c4b-b351-87c75cbbe048" + "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", + "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" + ] + }, + "a906d80f-2028-407e-8263-6eacb53325a2": { + "name": "lietuviskos/rave", + "author": "Unknown", + "songs": [ + "2b19ae9f-2321-41fc-8a1f-2bb4c2975380", + "fa7d62b1-2f9a-4499-b07b-ac3127c0f69f" + ] + }, + "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" + ] + }, + "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" ] }, "5f2e4043-cb32-4e90-9fb6-69f0466d6398": { @@ -1129,12 +1197,66 @@ "f81f8f9d-6c56-4ae3-8f5f-28c04632d3b5" ] }, - "e4203363-48dd-430c-8a63-f997ebe7e2bc": { - "name": "hip-hop", + "ba68f47d-384d-4808-a69d-48c6a85be479": { + "name": "electronic", "author": "Unknown", "songs": [ - "88fe04aa-a7be-4f6c-b32f-d3d25e58bbf8", - "484b9560-731b-447d-9e7f-3d32eb68b05f" + "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": { @@ -1147,6 +1269,31 @@ "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", + "songs": [ + "4e903bfb-e9bf-49dc-a299-e08949ab78f9", + "bc5fe406-040b-4c46-82ce-bb4505b81947", + "8fcad64e-bb63-414b-9cad-243f1f4c4293", + "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", @@ -1232,153 +1379,6 @@ "c72768c0-1f2e-4992-b66f-e569c572435a", "eaf1cc63-3eb6-4d86-a986-e8129fff7fcb" ] - }, - "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" - ] - }, - "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" - ] - }, - "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" - ] - }, - "a37e3c7c-584d-4803-981b-5be9244dd7c1": { - "name": "rock", - "author": "Unknown", - "songs": [ - "d8423579-1225-4865-9955-149e6878b59d" - ] - }, - "a906d80f-2028-407e-8263-6eacb53325a2": { - "name": "lietuviskos/rave", - "author": "Unknown", - "songs": [ - "2b19ae9f-2321-41fc-8a1f-2bb4c2975380", - "fa7d62b1-2f9a-4499-b07b-ac3127c0f69f" - ] - }, - "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" - ] - }, - "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" - ] - }, - "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" - ] - }, - "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" - ] - }, - "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" - ] } } } \ No newline at end of file diff --git a/xmpd-dl/Cargo.toml b/xmpd-cache/Cargo.toml similarity index 52% rename from xmpd-dl/Cargo.toml rename to xmpd-cache/Cargo.toml index 2e6ee85..ccf5cd1 100644 --- a/xmpd-dl/Cargo.toml +++ b/xmpd-cache/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "xmpd-dl" +name = "xmpd-cache" edition = "2021" readme="README.md" authors.workspace = true @@ -18,3 +18,11 @@ crate-type = ["rlib"] bench = false [dependencies] +xmpd-settings.path = "../xmpd-settings" +xmpd-manifest.path = "../xmpd-manifest" +xmpd-cliargs.path = "../xmpd-cliargs" +anyhow.workspace = true +camino.workspace = true +lazy_static.workspace = true +log.workspace = true +uuid.workspace = true diff --git a/xmpd-cli/README.md b/xmpd-cache/README.md similarity index 100% rename from xmpd-cli/README.md rename to xmpd-cache/README.md diff --git a/xmpd-dl/README.md b/xmpd-cache/src/downloader/icon.rs similarity index 100% rename from xmpd-dl/README.md rename to xmpd-cache/src/downloader/icon.rs diff --git a/xmpd-dl/src/lib.rs b/xmpd-cache/src/downloader/metadata.rs similarity index 100% rename from xmpd-dl/src/lib.rs rename to xmpd-cache/src/downloader/metadata.rs diff --git a/xmpd-cache/src/downloader/mod.rs b/xmpd-cache/src/downloader/mod.rs new file mode 100644 index 0000000..f4cfce7 --- /dev/null +++ b/xmpd-cache/src/downloader/mod.rs @@ -0,0 +1,4 @@ + +pub mod song; +pub mod icon; +pub mod metadata; diff --git a/xmpd-cache/src/downloader/song.rs b/xmpd-cache/src/downloader/song.rs new file mode 100644 index 0000000..dba01d0 --- /dev/null +++ b/xmpd-cache/src/downloader/song.rs @@ -0,0 +1,127 @@ +use std::{collections::HashMap, ffi::OsStr, process::{Command, Stdio}, sync::{Arc, Mutex, MutexGuard}}; +use xmpd_manifest::song::{Song, SourceType}; + + +lazy_static::lazy_static!( + static ref SONG_CACHE_DL: Arc> = Arc::default(); +); + +#[derive(Debug, Clone, Hash, PartialEq, PartialOrd, Eq, Ord)] +pub enum SongStatus { + Downloading, + Converting, + Done +} + +#[derive(Debug, Default, Clone)] +pub struct SongCacheDl { + pub jobs: HashMap, + pub current_jobs: usize, +} + +impl SongCacheDl { + pub fn get() -> crate::Result> { + match SONG_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<()> { + self.current_jobs += 1; + let song_format = xmpd_settings::Settings::get().unwrap().tooling.song_format.clone(); + let tooling = xmpd_settings::Settings::get()?.tooling.clone(); + let mut song_cache_d = xmpd_cliargs::CLIARGS.cache_path(); + song_cache_d.push("songs"); + match song.source_type() { + SourceType::Youtube | + SourceType::Soundcloud => { + let mut song_p = song_cache_d.clone(); + song_p.push(sid.to_string()); + let song_p = song_p.with_extension(&song_format); + + let mut dl_cmd = Command::new(&tooling.ytdlp_path); + dl_cmd.arg(song.url().as_str()); + dl_cmd.args(["-x", "--audio-format", &song_format]); + dl_cmd.arg("-o"); + dl_cmd.arg(&song_p); + + if xmpd_cliargs::CLIARGS.debug { + dl_cmd.stdout(Stdio::piped()); + dl_cmd.stderr(Stdio::piped()); + } else { + dl_cmd.stdout(Stdio::null()); + dl_cmd.stderr(Stdio::null()); + } + let dl_child = dl_cmd.spawn()?; + self.jobs.insert(sid, SongStatus::Downloading); + std::thread::spawn(move || { + if let Ok(output) = dl_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 mut cache = SONG_CACHE_DL.lock().unwrap(); + cache.jobs.insert(sid, SongStatus::Done); + cache.current_jobs -= 1; + }); + } + + SourceType::Spotify => { + // Spotdl doesnt have webm as a format so its fucking annoying, oh well + let mut song_p = song_cache_d.clone(); + song_p.push(sid.to_string()); + song_p.push("{output-ext}"); + let mut dl_cmd = Command::new(&tooling.spotdl_path); + dl_cmd.arg(song.url().as_str()); + dl_cmd.arg("--ffmpeg"); + dl_cmd.arg(&tooling.ffmpeg_path); + dl_cmd.args(["--format", &song_format, "--output"]); + dl_cmd.arg(&song_p); + let arg_str = dl_cmd.get_args(); + let arg_str: Vec<_> = arg_str.collect(); + let arg_str = arg_str.join(OsStr::new(" ")).to_string_lossy().to_string(); + log::debug!("spotify cli: {} {}", tooling.spotdl_path, arg_str); + if xmpd_cliargs::CLIARGS.debug { + dl_cmd.stdout(Stdio::piped()); + dl_cmd.stderr(Stdio::piped()); + } else { + dl_cmd.stdout(Stdio::null()); + dl_cmd.stderr(Stdio::null()); + } + let child = dl_cmd.spawn()?; + self.jobs.insert(sid, SongStatus::Downloading); + 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 mut from = song_p.clone(); + from.pop(); + from.push("{song_format}.{song_format}"); + + let mut to = song_p.clone(); + to.pop(); + to.set_extension(&song_format); + std::fs::copy(&from, &to).unwrap(); + from.pop(); + std::fs::remove_dir_all(from).unwrap(); + let mut cache = SONG_CACHE_DL.lock().unwrap(); + cache.jobs.insert(sid, SongStatus::Done); + cache.current_jobs -= 1; + }); + } + } + Ok(()) + } +} diff --git a/xmpd-cache/src/lib.rs b/xmpd-cache/src/lib.rs new file mode 100644 index 0000000..caed2f0 --- /dev/null +++ b/xmpd-cache/src/lib.rs @@ -0,0 +1,122 @@ +use std::{collections::HashMap, str::FromStr, sync::{Arc, Mutex, MutexGuard}, time::Duration}; +use downloader::song::SongStatus; +use xmpd_manifest::song::Song; + +pub mod downloader; + +type Result = anyhow::Result; + +lazy_static::lazy_static!( + static ref CACHE: Arc> = Arc::new(Mutex::new(Cache::default())); +); + +#[derive(Debug, Default)] +pub struct Cache { + cache_dir: camino::Utf8PathBuf, + song_cache: HashMap, + queue: Vec<(uuid::Uuid, Song)> + // TODO: Add Icon, metadata cache +} + +#[derive(Debug, Clone)] +pub enum DlStatus { + Done(camino::Utf8PathBuf), + Downloading, + Error(String), +} + +impl Cache { + pub fn get() -> crate::Result> { + match CACHE.lock() { + Ok(l) => Ok(l), + Err(e) => Err(anyhow::anyhow!(format!("{e:?}"))), + } + } + + pub fn init(&mut self) -> Result<()> { + start_cache_mv_thread(); + self.cache_dir = xmpd_cliargs::CLIARGS.cache_path(); + + { // Get cached songs + let mut song_cache_dir = self.cache_dir.clone(); + song_cache_dir.push("songs"); + for file in song_cache_dir.read_dir_utf8()? { + if let Ok(file) = file { + if !file.file_type()?.is_file() { + log::warn!("Non song file in: {}", file.path()); + continue; + } + let file_path = file.path(); + let file2 = file_path.with_extension(""); + if let Some(file_name) = file2.file_name() { + 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())); + } + + } + } + } + { // Get cached icons + } + { // Get Cached meta + } + Ok(()) + } + + pub fn download_to_cache(&mut self, sid: uuid::Uuid, song: Song) { + self.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 get_cached_song_status(&mut self, sid: &uuid::Uuid) -> Option { + Some(self.song_cache.get(sid)?.clone()) + } +} + +fn start_cache_mv_thread() { + std::thread::spawn(|| { + loop { + { + std::thread::sleep(Duration::from_millis(500)); + let song_format = xmpd_settings::Settings::get().unwrap().tooling.song_format.clone(); + let mut done_jobs = Vec::new(); + let mut dlc = downloader::song::SongCacheDl::get().unwrap(); + for (sid, status) in &dlc.jobs { + if *status == SongStatus::Done { + let mut cache = CACHE.lock().unwrap(); + 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); + log::debug!("Found done: {:?}: {}", song_p, song_p.exists()); + if song_p.exists() { + cache.song_cache.insert(sid.clone(), DlStatus::Done(song_p)); + 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(); + } + } + } + } + }); +} diff --git a/xmpd-cli/src/lib.rs b/xmpd-cli/src/lib.rs deleted file mode 100644 index 9815d27..0000000 --- a/xmpd-cli/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub fn test() { - println!("Hello, world!"); -} diff --git a/xmpd-cli/Cargo.toml b/xmpd-cliargs/Cargo.toml similarity index 70% rename from xmpd-cli/Cargo.toml rename to xmpd-cliargs/Cargo.toml index 22df51b..8a48ecb 100644 --- a/xmpd-cli/Cargo.toml +++ b/xmpd-cliargs/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "xmpd-cli" +name = "xmpd-cliargs" edition = "2021" readme="README.md" version.workspace = true @@ -18,3 +18,7 @@ crate-type = ["rlib"] bench = false [dependencies] +camino.workspace = true +clap.workspace = true +dirs.workspace = true +lazy_static.workspace = true diff --git a/xmpd-cliargs/README.md b/xmpd-cliargs/README.md new file mode 100644 index 0000000..e69de29 diff --git a/xmpd-core/src/cli.rs b/xmpd-cliargs/src/lib.rs similarity index 88% rename from xmpd-core/src/cli.rs rename to xmpd-cliargs/src/lib.rs index af74445..589fdf5 100644 --- a/xmpd-core/src/cli.rs +++ b/xmpd-cliargs/src/lib.rs @@ -1,5 +1,11 @@ -use std::{path::PathBuf, str::FromStr}; +use std::{path::PathBuf, str::FromStr, sync::Arc}; +use camino::Utf8PathBuf; +use clap::Parser; + +lazy_static::lazy_static!( + pub static ref CLIARGS: Arc = Arc::new(CliArgs::parse()); +); #[derive(Debug, clap::Parser)] pub struct CliArgs { @@ -24,8 +30,8 @@ impl CliArgs { pub fn settings_path(&self) -> PathBuf { self.settings.clone().into_std_path_buf() } - pub fn cache_path(&self) -> PathBuf { - self.cache.clone().into_std_path_buf() + pub fn cache_path(&self) -> Utf8PathBuf { + self.cache.clone() } } diff --git a/xmpd-core/Cargo.toml b/xmpd-core/Cargo.toml index b28266b..ec37421 100644 --- a/xmpd-core/Cargo.toml +++ b/xmpd-core/Cargo.toml @@ -21,7 +21,7 @@ name="xmpd" path="src/main.rs" [dependencies] -xmpd-cli.path="../xmpd-cli" +xmpd-cliargs.path="../xmpd-cliargs" xmpd-gui.path="../xmpd-gui" xmpd-manifest.path="../xmpd-manifest" xmpd-settings.path = "../xmpd-settings" @@ -30,4 +30,3 @@ camino.workspace = true anyhow.workspace = true log.workspace = true env_logger.workspace = true -dirs.workspace = true diff --git a/xmpd-core/src/logger.rs b/xmpd-core/src/logger.rs index 5347cf2..25bbadc 100644 --- a/xmpd-core/src/logger.rs +++ b/xmpd-core/src/logger.rs @@ -1,7 +1,5 @@ use log::LevelFilter; - -use crate::cli::CliArgs; - +use xmpd_cliargs::CliArgs; pub fn init(cliargs: &CliArgs) { diff --git a/xmpd-core/src/main.rs b/xmpd-core/src/main.rs index 6cd9278..bac3260 100644 --- a/xmpd-core/src/main.rs +++ b/xmpd-core/src/main.rs @@ -1,15 +1,18 @@ +use std::borrow::BorrowMut; + use clap::Parser; -mod cli; mod logger; type Result = anyhow::Result; fn main() -> Result<()> { - let cliargs = cli::CliArgs::parse(); + // NOTE: Parses on first load + let cliargs = &xmpd_cliargs::CLIARGS; logger::init(&cliargs); - log::debug!("Cli: {cliargs:?}"); + log::debug!("Initialising settings"); xmpd_settings::Settings::get()?.load(Some(cliargs.settings_path()))?; - xmpd_gui::start(cliargs.manifest_path())?; + log::debug!("Starting gui"); + xmpd_gui::start()?; Ok(()) } diff --git a/xmpd-gui/Cargo.toml b/xmpd-gui/Cargo.toml index 45b00d6..7d43d71 100644 --- a/xmpd-gui/Cargo.toml +++ b/xmpd-gui/Cargo.toml @@ -20,6 +20,8 @@ bench = false [dependencies] xmpd-manifest.path = "../xmpd-manifest" xmpd-settings.path = "../xmpd-settings" +xmpd-cliargs.path = "../xmpd-cliargs" +xmpd-cache.path = "../xmpd-cache" egui.workspace = true eframe.workspace = true tokio.workspace = true @@ -29,3 +31,4 @@ log.workspace = true egui_extras.workspace = true egui-aesthetix = "0.2.4" uuid.workspace = true +camino.workspace = true diff --git a/xmpd-gui/src/components/song_list/mod.rs b/xmpd-gui/src/components/song_list/mod.rs index 13e052c..5f3bc3d 100644 --- a/xmpd-gui/src/components/song_list/mod.rs +++ b/xmpd-gui/src/components/song_list/mod.rs @@ -1,5 +1,8 @@ -use egui::{RichText, Vec2}; +use std::fmt::write; + +use egui::{Color32, RichText, Sense, Vec2}; use song_list_nav::SearchType; +use xmpd_cache::DlStatus; use xmpd_manifest::{song::Song, store::BaseStore}; use super::{CompGetter, CompUi}; @@ -80,34 +83,92 @@ impl CompUi for SongList { fn display_song_tab(ui: &mut egui::Ui, sid: &uuid::Uuid, song: &Song) { let theme = handle_error_ui!(xmpd_settings::Settings::get()).theme.clone(); - let rct = ui.horizontal(|ui| { - ui.add( + ui.horizontal(|ui| { + let mut clicked = 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)) - ); + ).clicked(); + ui.vertical(|ui| { let selected_song_id = {handle_error_ui!(SongList::get()).selected_song_id}; - if selected_song_id == *sid { + let label = if selected_song_id == *sid { ui.label( RichText::new(song.name()) .color(theme.accent_color) - ); + ) } else { ui.label( RichText::new(song.name()) .color(theme.text_color) - ); + ) }; + + if label.clicked() { + clicked = true; + } ui.monospace( RichText::new(format!("By {}", song.author())) .color(theme.dim_text_color) .size(10.0) ); + }); - }).response.rect; - if ui.interact(rct, format!("song_list_{sid:?}").into(), egui::Sense::click()).clicked() { - handle_error_ui!(SongList::get()).selected_song_id = sid.clone(); - } + + ui.with_layout(egui::Layout::right_to_left(egui::Align::RIGHT), |ui| { + ui.add_space(3.0); + let status = { + handle_error_ui!(xmpd_cache::Cache::get()).get_cached_song_status(&sid).clone() + }; + match status { + Some(DlStatus::Done(p)) => { + let img = ui.add( + egui::Image::new(crate::data::CHECK_ICON) + .tint(Color32::LIGHT_GREEN) + .sense(Sense::hover()) + .fit_to_exact_size(Vec2::new(16.0, 16.0)) + ); + + img.on_hover_ui(|ui| { + ui.label(format!("Path: {p}")); + }); + } + Some(DlStatus::Downloading) => { + ui.add( + egui::Spinner::new() + .color(theme.accent_color) + .size(16.0) + ); + } + Some(DlStatus::Error(e)) => { + let img = ui.add( + egui::Image::new(crate::data::WARN_ICON) + .tint(Color32::LIGHT_YELLOW) + .sense(Sense::hover()) + .fit_to_exact_size(Vec2::new(16.0, 16.0)) + ); + img.on_hover_ui(|ui| { + ui.label(e); + }); + } + None => { + let img = ui.add( + egui::Image::new(crate::data::DL_ICON) + .tint(theme.accent_color) + .sense(Sense::click()) + .fit_to_exact_size(Vec2::new(16.0, 16.0)) + ); + if img.clicked() { + handle_error_ui!(xmpd_cache::Cache::get()).download_to_cache(sid.clone(), song.clone()) + } + } + } + }); + if clicked { + handle_error_ui!(SongList::get()).selected_song_id = sid.clone(); + } + }); + ui.separator(); } 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 a6a159f..1eceb83 100644 --- a/xmpd-gui/src/components/song_list/song_list_nav.rs +++ b/xmpd-gui/src/components/song_list/song_list_nav.rs @@ -1,4 +1,7 @@ -use crate::components::{CompGetter, CompUi}; +use uuid::Uuid; +use xmpd_manifest::store::BaseStore; + +use crate::components::{left_nav::LeftNav, CompGetter, CompUi}; #[derive(Debug, Clone)] pub enum SearchType { @@ -9,14 +12,16 @@ pub enum SearchType { #[derive(Debug, Default)] pub struct SongListNav { - text: String + text: String, } component_register!(SongListNav); impl CompUi for SongListNav { - fn draw(ui: &mut egui::Ui, _: &mut crate::GuiState) -> crate::Result<()> { + fn draw(ui: &mut egui::Ui, state: &mut crate::GuiState) -> crate::Result<()> { let theme = xmpd_settings::Settings::get()?.theme.clone(); + let pid = {LeftNav::get()?.selected_playlist_id.clone()}; + ui.horizontal(|ui| { let search_icon = egui::Image::new(crate::data::SEARCH_ICON) .fit_to_exact_size(egui::Vec2::new(16.0, 16.0)) @@ -25,6 +30,31 @@ impl CompUi for SongListNav { { ui.text_edit_singleline(&mut handle_error_ui!(SongListNav::get()).text); } + + ui.with_layout(egui::Layout::right_to_left(egui::Align::RIGHT), |ui| { + let img = ui.add( + egui::Image::new(crate::data::DL_ICON) + .tint(theme.accent_color) + .sense(egui::Sense::click()) + .fit_to_exact_size(egui::Vec2::new(16.0, 16.0)) + ); + if img.clicked() { + let songs: Vec<_>; + match pid { + Some(pid) => { + songs = state.manifest.store().get_playlist(&pid).unwrap().songs().to_vec(); + } + None => { + songs = state.manifest.store().get_songs().keys().cloned().collect(); + } + } + for sid in &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()) + } + } + } + }); }); Ok(()) } diff --git a/xmpd-gui/src/components/top_nav.rs b/xmpd-gui/src/components/top_nav.rs index b665c4f..ace61a2 100644 --- a/xmpd-gui/src/components/top_nav.rs +++ b/xmpd-gui/src/components/top_nav.rs @@ -14,16 +14,19 @@ impl CompUi for TopNav { ui.menu_button("File", |ui| { if ui.button("Settings").clicked() { state.windows.toggle(&WindowId::Settings, true); + ui.close_menu(); } }); ui.menu_button("Manifest", |ui| { if ui.button("Save").clicked() { handle_error_ui!(state.manifest.save()); + ui.close_menu(); } }); ui.menu_button("Help", |ui| { if ui.button("Source").clicked() { ui.ctx().open_url(egui::OpenUrl::new_tab("https://git.mcorangehq.xyz/XOR64/music")); + ui.close_menu(); } }); diff --git a/xmpd-gui/src/data.rs b/xmpd-gui/src/data.rs index 8c86217..b1dd09e 100644 --- a/xmpd-gui/src/data.rs +++ b/xmpd-gui/src/data.rs @@ -6,3 +6,6 @@ pub const PREV_ICON: egui::ImageSource = egui::include_image!("../../assets/pre 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"); +pub const CHECK_ICON: egui::ImageSource = egui::include_image!("../../assets/check.svg"); +pub const DL_ICON: egui::ImageSource = egui::include_image!("../../assets/download.svg"); +pub const WARN_ICON: egui::ImageSource = egui::include_image!("../../assets/warning.svg"); diff --git a/xmpd-gui/src/lib.rs b/xmpd-gui/src/lib.rs index ef49f07..004e10f 100644 --- a/xmpd-gui/src/lib.rs +++ b/xmpd-gui/src/lib.rs @@ -1,6 +1,6 @@ #![feature(async_closure)] -use std::{path::{Path, PathBuf}, time::Duration}; +use std::time::Duration; use xmpd_manifest::{store::JsonStore, Manifest}; #[macro_use] @@ -15,10 +15,10 @@ const W_NAME: &str = "xmpd v2.0.0a"; type Result = anyhow::Result; -pub fn start(manifest_path: PathBuf) -> Result<()> { +pub fn start() -> Result<()> { + xmpd_cache::Cache::get()?.init(); let options = eframe::NativeOptions::default(); - let mut state = GuiState::new(&manifest_path)?; - let theme = xmpd_settings::Settings::get()?.theme.clone(); + let mut state = GuiState::new()?; 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); @@ -31,20 +31,15 @@ pub fn start(manifest_path: PathBuf) -> Result<()> { Ok(()) } - -pub enum Message { - -} - pub struct GuiState { pub manifest: Manifest, - pub windows: windows::Windows + pub windows: windows::Windows, } impl GuiState { - pub fn new(manifest_path: &Path) -> Result { + pub fn new() -> Result { Ok(Self { - manifest: Manifest::new(manifest_path)?, + manifest: Manifest::new(&xmpd_cliargs::CLIARGS.manifest_path())?, windows: windows::Windows::new(), }) } diff --git a/xmpd-gui/src/main_window.rs b/xmpd-gui/src/main_window.rs index eb8a8af..fb7a575 100644 --- a/xmpd-gui/src/main_window.rs +++ b/xmpd-gui/src/main_window.rs @@ -1,6 +1,6 @@ use xmpd_settings::theme::Theme; -use crate::{components::CompUi, GuiState}; +use crate::{components::{song_list, CompUi}, GuiState}; pub fn draw(ctx: &egui::Context, state: &mut GuiState) -> crate::Result<()> { // The central panel the region left after adding TopPanel's and SidePanel's @@ -22,19 +22,22 @@ pub fn draw(ctx: &egui::Context, state: &mut GuiState) -> crate::Result<()> { let avail = ui.available_size(); let main_height = avail.y * 0.91; + let left_nav_width = (avail.x * 0.25).clamp(0.0, 200.0); + let song_list_width = (avail.x - left_nav_width - 35.0); ui.horizontal(|ui| { ui.set_height(main_height); ui.group(|ui| { ui.set_height(main_height); - ui.set_max_width((avail.x * 0.25).clamp(0.0, 200.0)); + ui.set_max_width(left_nav_width); handle_error_ui!(crate::components::left_nav::LeftNav::draw(ui, state)); }); ui.vertical(|ui| { ui.group(|ui| { - ui.set_width(avail.x * 0.75); + ui.set_width(song_list_width); handle_error_ui!(crate::components::song_list::song_list_nav::SongListNav::draw(ui, state)); }); ui.group(|ui| { + ui.set_width(song_list_width); handle_error_ui!(crate::components::song_list::SongList::draw(ui, state)); }); }); @@ -58,7 +61,7 @@ fn get_themed_frame(theme: &Theme) -> egui::Frame { egui::Frame::none() .fill(theme.primary_bg_color) .stroke(egui::Stroke::new( - 1.0, + 5.0, theme.secondary_bg_color, )) } diff --git a/xmpd-gui/src/windows/settings.rs b/xmpd-gui/src/windows/settings.rs index d831384..922e1aa 100644 --- a/xmpd-gui/src/windows/settings.rs +++ b/xmpd-gui/src/windows/settings.rs @@ -1,40 +1,80 @@ +use std::str::FromStr; + use super::Window; #[derive(Debug, Clone)] pub struct SettingsW { - accent_color: egui::Color32, - primary_bg_color: egui::Color32, - secondary_bg_color: egui::Color32, - text_color: egui::Color32, - dim_text_color: egui::Color32, + ytdlp_p: String, + spotdl_p: String, + ffmpeg_p: String, + song_fmt: String, } impl Default for SettingsW { fn default() -> Self { - let def = xmpd_settings::theme::Theme::default(); - Self { - accent_color: def.accent_color, - primary_bg_color: def.primary_bg_color, - secondary_bg_color: def.secondary_bg_color, - text_color: def.text_color, - dim_text_color: def.dim_text_color + let tooling = xmpd_settings::Settings::get().unwrap().tooling.clone(); + Self { + ytdlp_p: tooling.ytdlp_path.to_string(), + spotdl_p: tooling.spotdl_path.to_string(), + ffmpeg_p: tooling.ffmpeg_path.to_string(), + song_fmt: tooling.song_format } } - } + impl Window for SettingsW { + #[allow(irrefutable_let_patterns)] fn draw(&mut self, ui: &mut egui::Ui, _: &mut crate::GuiState) -> crate::Result<()> { - let theme = &mut xmpd_settings::Settings::get()?.theme; ui.group(|ui| { ui.vertical(|ui| { - ui.heading("Theme"); - Self::add_theme_button(&mut theme.accent_color, ui, "Accent"); - Self::add_theme_button(&mut theme.primary_bg_color, ui, "Primary BG"); - Self::add_theme_button(&mut theme.secondary_bg_color, ui, "Secondary BG"); - Self::add_theme_button(&mut theme.text_color, ui, "Text"); - Self::add_theme_button(&mut theme.dim_text_color, ui, "Dim Text"); + ui.horizontal(|ui| { + { + let theme = &mut handle_error_ui!(xmpd_settings::Settings::get()).theme; + ui.group(|ui| { + ui.vertical(|ui| { + ui.heading("Theme"); + Self::add_theme_button(&mut theme.accent_color, ui, "Accent"); + Self::add_theme_button(&mut theme.primary_bg_color, ui, "Primary BG"); + Self::add_theme_button(&mut theme.secondary_bg_color, ui, "Secondary BG"); + Self::add_theme_button(&mut theme.text_color, ui, "Text"); + Self::add_theme_button(&mut theme.dim_text_color, ui, "Dim Text"); + if ui.button("Reset").clicked() { + *theme = xmpd_settings::theme::Theme::default(); + } + }); + }); + + } + { + ui.group(|ui| { + ui.vertical(|ui| { + ui.heading("Tooling paths"); + Self::add_tooling_input(&mut self.ytdlp_p, ui, "stdlp"); + Self::add_tooling_input(&mut self.spotdl_p, ui, "spotdl"); + Self::add_tooling_input(&mut self.ffmpeg_p, ui, "ffmpeg"); + Self::add_tooling_input(&mut self.song_fmt, ui, "Format"); + }); + }); + } + }); + ui.with_layout(egui::Layout::bottom_up(egui::Align::RIGHT), |ui| { + if ui.button("Save").clicked() { + let mut settings = handle_error_ui!(xmpd_settings::Settings::get()); + if let Ok(p) = camino::Utf8PathBuf::from_str(&self.ytdlp_p) { + settings.tooling.ytdlp_path = p; + } + if let Ok(p) = camino::Utf8PathBuf::from_str(&self.spotdl_p) { + settings.tooling.spotdl_path = p; + } + if let Ok(p) = camino::Utf8PathBuf::from_str(&self.ffmpeg_p) { + settings.tooling.ffmpeg_path = p; + } + settings.tooling.song_format.clone_from(&self.song_fmt); + handle_error_ui!(settings.save(None)); + } + }); }); }); Ok(()) @@ -48,4 +88,10 @@ impl SettingsW { ui.color_edit_button_srgba(rf); }); } + fn add_tooling_input(inp: &mut String, ui: &mut egui::Ui, name: &str) { + ui.horizontal(|ui|{ + ui.label(format!("{name}: ")); + ui.text_edit_singleline(inp); + }); + } } diff --git a/xmpd-settings/Cargo.toml b/xmpd-settings/Cargo.toml index ec744d6..ff2c216 100644 --- a/xmpd-settings/Cargo.toml +++ b/xmpd-settings/Cargo.toml @@ -8,6 +8,7 @@ authors.workspace = true [dependencies] anyhow.workspace = true +camino.workspace = true egui.workspace = true lazy_static.workspace = true serde.workspace = true diff --git a/xmpd-settings/src/lib.rs b/xmpd-settings/src/lib.rs index 36978bf..a065288 100644 --- a/xmpd-settings/src/lib.rs +++ b/xmpd-settings/src/lib.rs @@ -1,8 +1,10 @@ use std::{path::PathBuf, sync::{Arc, Mutex, MutexGuard}}; use serde::{Deserialize, Serialize}; use theme::Theme; +use tooling::Tooling; pub mod theme; +pub mod tooling; lazy_static::lazy_static!( static ref SETTINGS: Arc> = Arc::new(Mutex::new(Settings::default())); @@ -14,7 +16,10 @@ pub type Result = anyhow::Result; pub struct Settings { #[serde(skip)] settings_path: PathBuf, + #[serde(default)] pub theme: Theme, + #[serde(default)] + pub tooling: Tooling, } impl Settings { @@ -27,6 +32,11 @@ impl Settings { pub fn load(&mut self, path: Option) -> Result<()> { let path = path.unwrap_or(self.settings_path.clone()); if !path.exists() { + let mut dir = path.clone(); + dir.pop(); + if !dir.exists() { + std::fs::create_dir_all(dir)?; + } std::fs::write(&path, "[theme]")?; self.save(Some(path.clone()))?; } diff --git a/xmpd-settings/src/tooling.rs b/xmpd-settings/src/tooling.rs new file mode 100644 index 0000000..7475762 --- /dev/null +++ b/xmpd-settings/src/tooling.rs @@ -0,0 +1,42 @@ +use std::str::FromStr; + +use serde::{Deserialize, Serialize}; + + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Tooling { + #[serde(default="Tooling::default_ytdlp_path")] + pub ytdlp_path: camino::Utf8PathBuf, + #[serde(default="Tooling::default_spotdl_path")] + pub spotdl_path: camino::Utf8PathBuf, + #[serde(default="Tooling::default_ffmpeg_path")] + pub ffmpeg_path: camino::Utf8PathBuf, + #[serde(default="Tooling::default_song_format")] + pub song_format: String, +} + +impl Default for Tooling { + fn default() -> Self { + Self { + ytdlp_path: Self::default_ytdlp_path(), + spotdl_path: Self::default_spotdl_path(), + ffmpeg_path: Self::default_ffmpeg_path(), + song_format: Self::default_song_format(), + } + } +} + +impl Tooling { + fn default_ytdlp_path() -> camino::Utf8PathBuf { + camino::Utf8PathBuf::from_str("yt-dlp").unwrap() + } + fn default_spotdl_path() -> camino::Utf8PathBuf { + camino::Utf8PathBuf::from_str("spotdl").unwrap() + } + fn default_ffmpeg_path() -> camino::Utf8PathBuf { + camino::Utf8PathBuf::from_str("ffmpeg").unwrap() + } + fn default_song_format() -> String { + String::from("flac") + } +} diff --git a/xmpd-tooling/Cargo.toml b/xmpd-tooling/Cargo.toml new file mode 100644 index 0000000..e61380a --- /dev/null +++ b/xmpd-tooling/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "xmpd-tooling" +edition = "2021" +version.workspace = true +repository.workspace = true +license.workspace = true +authors.workspace = true + +[dependencies] diff --git a/xmpd-tooling/src/lib.rs b/xmpd-tooling/src/lib.rs new file mode 100644 index 0000000..e69de29