diff --git a/DEV.md b/DEV.md
index 0476442..00ca25f 100644
--- a/DEV.md
+++ b/DEV.md
@@ -1 +1,5 @@
-listen along feature using ws and or p2p, downloading music when connectedd if you dont have it, matched by either the url, or a global id set by server
+[ ] listen along feature using ws and or p2p, downloading music when connectedd if you dont have it, matched by either the url, or a global id set by server
+[ ] Internationalisation
+[ ] Music Player
+[ ] Playlist exporting to folder, zip, tar balls, etc
+
diff --git a/assets/burger_menu.svg b/assets/burger_menu.svg
new file mode 100644
index 0000000..4dce6a1
--- /dev/null
+++ b/assets/burger_menu.svg
@@ -0,0 +1 @@
+
diff --git a/assets/plus.svg b/assets/plus.svg
new file mode 100644
index 0000000..84453ce
--- /dev/null
+++ b/assets/plus.svg
@@ -0,0 +1,39 @@
+
+
diff --git a/xmpd-cache/src/downloader/song.rs b/xmpd-cache/src/downloader/song.rs
index dba01d0..d2b5627 100644
--- a/xmpd-cache/src/downloader/song.rs
+++ b/xmpd-cache/src/downloader/song.rs
@@ -120,7 +120,16 @@ impl SongCacheDl {
cache.jobs.insert(sid, SongStatus::Done);
cache.current_jobs -= 1;
});
- }
+ }
+ SourceType::HttpBare => {
+ todo!()
+ }
+ SourceType::Http7z => {
+ todo!()
+ }
+ SourceType::HttpZip => {
+ todo!()
+ }
}
Ok(())
}
diff --git a/xmpd-gui/src/components/song_list/song_list_nav.rs b/xmpd-gui/src/components/song_list/song_list_nav.rs
index 362436d..0224ed7 100644
--- a/xmpd-gui/src/components/song_list/song_list_nav.rs
+++ b/xmpd-gui/src/components/song_list/song_list_nav.rs
@@ -32,13 +32,19 @@ impl CompUi for SongListNav {
}
ui.with_layout(egui::Layout::right_to_left(egui::Align::RIGHT), |ui| {
- let img = ui.add(
+ let download_all = 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 add_song = ui.add(
+ egui::Image::new(crate::data::PLUS_ICON)
+ .tint(theme.accent_color)
+ .sense(egui::Sense::click())
+ .fit_to_exact_size(egui::Vec2::new(16.0, 16.0))
+ );
+ if download_all.clicked() {
let songs: Vec<_>;
match pid {
Some(pid) => {
@@ -60,6 +66,10 @@ impl CompUi for SongListNav {
ToastType::Info
);
}
+
+ if add_song.clicked() {
+ todo!()
+ }
});
});
Ok(())
diff --git a/xmpd-gui/src/data.rs b/xmpd-gui/src/data.rs
index 491d85b..92917ac 100644
--- a/xmpd-gui/src/data.rs
+++ b/xmpd-gui/src/data.rs
@@ -11,6 +11,8 @@ pub const DL_ICON: egui::ImageSource = egui::include_image!("../../assets/downl
pub const INFO_ICON: egui::ImageSource = egui::include_image!("../../assets/info.svg");
pub const WARN_ICON: egui::ImageSource = egui::include_image!("../../assets/warning.svg");
pub const ERROR_ICON: egui::ImageSource = egui::include_image!("../../assets/error.svg");
+pub const PLUS_ICON: egui::ImageSource = egui::include_image!("../../assets/plus.svg");
+pub const BURGER_ICON: egui::ImageSource = egui::include_image!("../../assets/burger_menu.svg");
pub const C_WARN: egui::Color32 = egui::Color32::from_rgb(255, 183, 0); // #ffb700
diff --git a/xmpd-manifest/src/song.rs b/xmpd-manifest/src/song.rs
index 2564bfc..b5986cc 100644
--- a/xmpd-manifest/src/song.rs
+++ b/xmpd-manifest/src/song.rs
@@ -1,4 +1,4 @@
-use std::str::FromStr;
+use std::{path::PathBuf, str::FromStr};
@@ -11,16 +11,16 @@ pub struct Song {
}
impl Song {
- pub fn new(url: &url::Url) -> crate::Result {
+ pub fn new(url: &url::Url, source_type: SourceType) -> crate::Result {
Ok(Self {
name: String::default(),
author: String::default(),
- source_type: SourceType::from_url(url)?,
+ source_type,
url: url.clone()
})
}
- pub fn new_from_str(url: &str) -> crate::Result {
- Self::new(&url::Url::from_str(url)?)
+ pub fn new_from_str(url: &str, source_type: SourceType) -> crate::Result {
+ Self::new(&url::Url::from_str(url)?, source_type)
}
pub fn name(&self) -> &str {
&self.name
@@ -48,21 +48,26 @@ impl Song {
}
}
-#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq, PartialOrd)]
+#[derive(Debug, Clone, Copy, serde::Serialize, serde::Deserialize, PartialEq, PartialOrd)]
pub enum SourceType {
Youtube,
Spotify,
Soundcloud,
+ HttpBare,
+ HttpZip,
+ Http7z
}
impl SourceType {
- fn from_url(url: &url::Url) -> crate::Result {
+ fn from_url(url: &url::Url) -> Option {
match url.host_str() {
- Some("youtube.com") | Some("youtu.be") => Ok(Self::Youtube),
- Some("open.spotify.com") => Ok(Self::Spotify),
- Some("soundcloud.com") |Some("on.soundcloud.com") => Ok(Self::Soundcloud),
- Some(host) => anyhow::bail!("Unknown host {host:?}"),
- None => anyhow::bail!("Unknown host: (none)"),
+ Some("youtube.com") | Some("youtu.be") =>
+ Some(Self::Youtube),
+ Some("open.spotify.com") =>
+ Some(Self::Spotify),
+ Some("soundcloud.com") | Some("on.soundcloud.com") =>
+ Some(Self::Soundcloud),
+ _ => None
}
}
}