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:
parent
1657e328fb
commit
fc23d3a7b6
@ -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,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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() {
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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));
|
||||||
|
@ -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,
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user