diff --git a/src/db.rs b/src/db.rs index 26cd010..13cb0bb 100644 --- a/src/db.rs +++ b/src/db.rs @@ -19,7 +19,7 @@ pub struct Track { size: u32, length: u32, year: u32, - bitrate: u32, + pub bitrate: u32, sample_rate: u32, play_count: u32, pub dbid: u64, @@ -30,7 +30,7 @@ pub struct Track { pub title: String, location: String, album: String, - artist: String, + pub artist: String, genre: String, } diff --git a/src/dlp.rs b/src/dlp.rs index 7f15ee4..1522961 100644 --- a/src/dlp.rs +++ b/src/dlp.rs @@ -23,6 +23,9 @@ pub async fn download_from_soundcloud( download_dir: &PathBuf, sender: Sender, ) -> std::result::Result<(), Box> { + let _ = sender + .send(AppEvent::SwitchScreen(crate::AppState::LoadingScreen)) + .await; let dl_rx: Regex = Regex::new(r"\[download\] Downloading item \d+ of \d+").unwrap(); if download_dir.exists() { diff --git a/src/main.rs b/src/main.rs index c509f99..2f6ff90 100644 --- a/src/main.rs +++ b/src/main.rs @@ -101,10 +101,6 @@ impl App { }, Some(event) = self.receiver.recv() => { match event { - AppEvent::IPodFound(path) => { - self.state = AppState::MainScreen; - let _ = self.sender.send(AppEvent::ParseItunes(path)); - }, AppEvent::IPodNotFound => { let _ = self.sender.send(AppEvent::SearchIPod); }, @@ -117,15 +113,16 @@ impl App { screen.set_soundcloud_playlists(playlists); }, AppEvent::OverallProgress((c, max)) => { - self.state = AppState::LoadingScreen; let screen: &mut LoadingScreen = self.get_screen(&AppState::LoadingScreen); screen.progress = Some((c, max)); }, AppEvent::CurrentProgress(progress) => { - self.state = AppState::LoadingScreen; let screen: &mut LoadingScreen = self.get_screen(&AppState::LoadingScreen); screen.s_progress = Some(progress); }, + AppEvent::SwitchScreen(screen) => { + self.state = screen; + } _ => {} } } diff --git a/src/main_screen.rs b/src/main_screen.rs index d0804c2..a33f063 100644 --- a/src/main_screen.rs +++ b/src/main_screen.rs @@ -193,15 +193,14 @@ impl MainScreen { Row::new(vec!["Id", "Title", "Artist", "Bitrate", "Hash"]) .style(Style::default().fg(Color::Gray)), ); - if let Some(s) = &self.soundcloud { - for (i, playlist) in s.iter().enumerate() { - let date: DateTime = playlist.created_at.parse().unwrap(); + if let Some(s) = &self.tracks { + for (i, track) in s.iter().enumerate() { let mut row = Row::new(vec![ - playlist.id.to_string(), - playlist.title.clone(), - [playlist.track_count.to_string(), " songs".to_string()].concat(), - format!("{}", date.format("%Y-%m-%d %H:%M")), - "NO".to_string(), + track.unique_id.to_string(), + track.title.clone(), + track.artist.clone(), + track.bitrate.to_string(), + format!("{:X}", track.dbid), ]); if self.selected_row == i as i32 { row = row.style(Style::default().bg(Color::Yellow)); diff --git a/src/sync.rs b/src/sync.rs index 6460902..07200a8 100644 --- a/src/sync.rs +++ b/src/sync.rs @@ -16,18 +16,18 @@ use crate::{ }, db::{self, Track}, dlp::{self, DownloadProgress}, + AppState, }; pub enum AppEvent { SearchIPod, - IPodFound(String), IPodNotFound, - ParseItunes(String), ITunesParsed(Vec), SoundcloudGot(CloudPlaylists), DownloadPlaylist(CloudPlaylist), CurrentProgress(DownloadProgress), OverallProgress((u32, u32)), + SwitchScreen(AppState), } pub fn initialize_async_service( @@ -54,9 +54,9 @@ pub fn initialize_async_service( } else { let _ = sender.send(AppEvent::IPodNotFound).await; }*/ - let _ = sender.send(AppEvent::IPodFound("/Users/michael/Documents/ipod/iTunes/iTunesDB".to_string())).await; + let _ = sender.send(AppEvent::SwitchScreen(AppState::MainScreen)).await; + parse_itunes(&database, &sender, "/Users/michael/Documents/ipod/iTunes/iTunesDB".to_string()).await; }, - AppEvent::ParseItunes(path) => parse_itunes(&database, &sender, path).await, AppEvent::DownloadPlaylist(playlist) => download_playlist(playlist, &database, &sender).await, _ => {} }