modified: src/db.rs

modified:   src/dlp.rs
	modified:   src/main.rs
	modified:   src/main_screen.rs
	modified:   src/sync.rs
This commit is contained in:
Michael Wain 2025-02-13 02:56:59 +03:00
parent 1657e328fb
commit fc23d3a7b6
5 changed files with 19 additions and 20 deletions

View File

@ -19,7 +19,7 @@ pub struct Track {
size: u32, size: u32,
length: u32, length: u32,
year: u32, year: u32,
bitrate: u32, pub bitrate: u32,
sample_rate: u32, sample_rate: u32,
play_count: u32, play_count: u32,
pub dbid: u64, pub dbid: u64,
@ -30,7 +30,7 @@ pub struct Track {
pub title: String, pub title: String,
location: String, location: String,
album: String, album: String,
artist: String, pub artist: String,
genre: String, genre: String,
} }

View File

@ -23,6 +23,9 @@ pub async fn download_from_soundcloud(
download_dir: &PathBuf, download_dir: &PathBuf,
sender: Sender<AppEvent>, sender: Sender<AppEvent>,
) -> std::result::Result<(), Box<dyn std::error::Error>> { ) -> std::result::Result<(), Box<dyn std::error::Error>> {
let _ = sender
.send(AppEvent::SwitchScreen(crate::AppState::LoadingScreen))
.await;
let dl_rx: Regex = Regex::new(r"\[download\] Downloading item \d+ of \d+").unwrap(); let dl_rx: Regex = Regex::new(r"\[download\] Downloading item \d+ of \d+").unwrap();
if download_dir.exists() { if download_dir.exists() {

View File

@ -101,10 +101,6 @@ impl App {
}, },
Some(event) = self.receiver.recv() => { Some(event) = self.receiver.recv() => {
match event { match event {
AppEvent::IPodFound(path) => {
self.state = AppState::MainScreen;
let _ = self.sender.send(AppEvent::ParseItunes(path));
},
AppEvent::IPodNotFound => { AppEvent::IPodNotFound => {
let _ = self.sender.send(AppEvent::SearchIPod); let _ = self.sender.send(AppEvent::SearchIPod);
}, },
@ -117,15 +113,16 @@ impl App {
screen.set_soundcloud_playlists(playlists); screen.set_soundcloud_playlists(playlists);
}, },
AppEvent::OverallProgress((c, max)) => { AppEvent::OverallProgress((c, max)) => {
self.state = AppState::LoadingScreen;
let screen: &mut LoadingScreen = self.get_screen(&AppState::LoadingScreen); let screen: &mut LoadingScreen = self.get_screen(&AppState::LoadingScreen);
screen.progress = Some((c, max)); screen.progress = Some((c, max));
}, },
AppEvent::CurrentProgress(progress) => { AppEvent::CurrentProgress(progress) => {
self.state = AppState::LoadingScreen;
let screen: &mut LoadingScreen = self.get_screen(&AppState::LoadingScreen); let screen: &mut LoadingScreen = self.get_screen(&AppState::LoadingScreen);
screen.s_progress = Some(progress); screen.s_progress = Some(progress);
}, },
AppEvent::SwitchScreen(screen) => {
self.state = screen;
}
_ => {} _ => {}
} }
} }

View File

@ -193,15 +193,14 @@ impl MainScreen {
Row::new(vec!["Id", "Title", "Artist", "Bitrate", "Hash"]) Row::new(vec!["Id", "Title", "Artist", "Bitrate", "Hash"])
.style(Style::default().fg(Color::Gray)), .style(Style::default().fg(Color::Gray)),
); );
if let Some(s) = &self.soundcloud { if let Some(s) = &self.tracks {
for (i, playlist) in s.iter().enumerate() { for (i, track) in s.iter().enumerate() {
let date: DateTime<Utc> = playlist.created_at.parse().unwrap();
let mut row = Row::new(vec![ let mut row = Row::new(vec![
playlist.id.to_string(), track.unique_id.to_string(),
playlist.title.clone(), track.title.clone(),
[playlist.track_count.to_string(), " songs".to_string()].concat(), track.artist.clone(),
format!("{}", date.format("%Y-%m-%d %H:%M")), track.bitrate.to_string(),
"NO".to_string(), format!("{:X}", track.dbid),
]); ]);
if self.selected_row == i as i32 { if self.selected_row == i as i32 {
row = row.style(Style::default().bg(Color::Yellow)); row = row.style(Style::default().bg(Color::Yellow));

View File

@ -16,18 +16,18 @@ use crate::{
}, },
db::{self, Track}, db::{self, Track},
dlp::{self, DownloadProgress}, dlp::{self, DownloadProgress},
AppState,
}; };
pub enum AppEvent { pub enum AppEvent {
SearchIPod, SearchIPod,
IPodFound(String),
IPodNotFound, IPodNotFound,
ParseItunes(String),
ITunesParsed(Vec<Track>), ITunesParsed(Vec<Track>),
SoundcloudGot(CloudPlaylists), SoundcloudGot(CloudPlaylists),
DownloadPlaylist(CloudPlaylist), DownloadPlaylist(CloudPlaylist),
CurrentProgress(DownloadProgress), CurrentProgress(DownloadProgress),
OverallProgress((u32, u32)), OverallProgress((u32, u32)),
SwitchScreen(AppState),
} }
pub fn initialize_async_service( pub fn initialize_async_service(
@ -54,9 +54,9 @@ pub fn initialize_async_service(
} else { } else {
let _ = sender.send(AppEvent::IPodNotFound).await; 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, AppEvent::DownloadPlaylist(playlist) => download_playlist(playlist, &database, &sender).await,
_ => {} _ => {}
} }