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,
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,
}

View File

@ -23,6 +23,9 @@ pub async fn download_from_soundcloud(
download_dir: &PathBuf,
sender: Sender<AppEvent>,
) -> 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();
if download_dir.exists() {

View File

@ -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;
}
_ => {}
}
}

View File

@ -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<Utc> = 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));

View File

@ -16,18 +16,18 @@ use crate::{
},
db::{self, Track},
dlp::{self, DownloadProgress},
AppState,
};
pub enum AppEvent {
SearchIPod,
IPodFound(String),
IPodNotFound,
ParseItunes(String),
ITunesParsed(Vec<Track>),
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,
_ => {}
}