File system move to parent directory fix

This commit is contained in:
Michael Wain 2025-03-07 15:48:34 +03:00
parent 913da0c0ef
commit 0f52d10198
2 changed files with 40 additions and 26 deletions

View File

@ -85,7 +85,6 @@ impl AppScreen for FileSystem {
} }
KeyCode::F(5) => self.download_as_is(), KeyCode::F(5) => self.download_as_is(),
KeyCode::F(6) => self.download_as_playlist(), KeyCode::F(6) => self.download_as_playlist(),
KeyCode::Tab => self.move_up(),
KeyCode::Enter => self.enter_directory(), KeyCode::Enter => self.enter_directory(),
_ => {} _ => {}
} }
@ -104,8 +103,6 @@ impl AppScreen for FileSystem {
// Render Status Bar // Render Status Bar
let status_bar = Paragraph::new(Line::from(vec![ let status_bar = Paragraph::new(Line::from(vec![
"<TAB> MOVE UP".bold(),
" | ".dark_gray(),
"<F4> SWITCH TO NORMAL".bold(), "<F4> SWITCH TO NORMAL".bold(),
" | ".dark_gray(), " | ".dark_gray(),
"<F5> SAVE AS IS".bold(), "<F5> SAVE AS IS".bold(),
@ -195,6 +192,8 @@ impl FileSystem {
}) })
.collect::<Vec<Vec<String>>>(); .collect::<Vec<Vec<String>>>();
let data = [vec![vec![String::from("..")]], data].concat();
self.files = dir; self.files = dir;
self.table.set_data(data); self.table.set_data(data);
@ -203,7 +202,8 @@ impl FileSystem {
} }
fn download_as_is(&self) { fn download_as_is(&self) {
let entry = self.files.get(self.table.selected_row()).unwrap(); if let 1.. = self.table.selected_row() {
let entry = self.files.get(self.table.selected_row() - 1).unwrap();
if entry.path().is_dir() { if entry.path().is_dir() {
let files = list_files_recursively(entry.path()); let files = list_files_recursively(entry.path());
let _ = self.sender.send(AppEvent::LoadFromFSVec(files)); let _ = self.sender.send(AppEvent::LoadFromFSVec(files));
@ -211,9 +211,11 @@ impl FileSystem {
let _ = self.sender.send(AppEvent::LoadFromFS(entry.path())); let _ = self.sender.send(AppEvent::LoadFromFS(entry.path()));
} }
} }
}
fn download_as_playlist(&self) { fn download_as_playlist(&self) {
let entry = self.files.get(self.table.selected_row()).unwrap(); if let 1.. = self.table.selected_row() {
let entry = self.files.get(self.table.selected_row() - 1).unwrap();
if entry.path().is_dir() { if entry.path().is_dir() {
let files = list_files_recursively(entry.path()); let files = list_files_recursively(entry.path());
let _ = self.sender.send(AppEvent::LoadFromFSPL(( let _ = self.sender.send(AppEvent::LoadFromFSPL((
@ -228,6 +230,7 @@ impl FileSystem {
))); )));
} }
} }
}
fn move_up(&mut self) { fn move_up(&mut self) {
let p = self.current_path.parent(); let p = self.current_path.parent();
@ -239,12 +242,17 @@ impl FileSystem {
} }
fn enter_directory(&mut self) { fn enter_directory(&mut self) {
let entry = self.files.get(self.table.selected_row()).unwrap(); match self.table.selected_row() {
0 => self.move_up(),
_ => {
let entry = self.files.get(self.table.selected_row() - 1).unwrap();
if !entry.path().is_dir() { if !entry.path().is_dir() {
return; return;
} }
self.get_path(entry.path()); self.get_path(entry.path());
} }
}
}
fn render_main(&self, frame: &mut Frame, area: Rect) { fn render_main(&self, frame: &mut Frame, area: Rect) {
self.table.render(frame, area); self.table.render(frame, area);

View File

@ -288,6 +288,9 @@ pub fn initialize_async_service(
AppEvent::DownloadYTPlaylist(ytplaylist) => { download_youtube_playlist(ytplaylist, database.as_mut().unwrap(), &sender, ipod_db.clone().unwrap()).await; }, AppEvent::DownloadYTPlaylist(ytplaylist) => { download_youtube_playlist(ytplaylist, database.as_mut().unwrap(), &sender, ipod_db.clone().unwrap()).await; },
AppEvent::SwitchScreen(state) => { let _ = sender.send(AppEvent::SwitchScreen(state)).await;}, AppEvent::SwitchScreen(state) => { let _ = sender.send(AppEvent::SwitchScreen(state)).await;},
AppEvent::LoadFromFS(path) => { AppEvent::LoadFromFS(path) => {
let _ = sender
.send(AppEvent::SwitchScreen(AppState::LoadingScreen))
.await;
load_from_fs(path, database.as_mut().unwrap(), &sender, ipod_db.clone().unwrap()).await; load_from_fs(path, database.as_mut().unwrap(), &sender, ipod_db.clone().unwrap()).await;
let _ = sender let _ = sender
.send(AppEvent::SwitchScreen(AppState::FileSystem)) .send(AppEvent::SwitchScreen(AppState::FileSystem))
@ -454,6 +457,9 @@ async fn load_files_from_fs(
sender: &Sender<AppEvent>, sender: &Sender<AppEvent>,
ipod_path: String, ipod_path: String,
) { ) {
let _ = sender
.send(AppEvent::SwitchScreen(AppState::LoadingScreen))
.await;
for (i, file) in files.iter().enumerate() { for (i, file) in files.iter().enumerate() {
let _ = sender let _ = sender
.send(AppEvent::OverallProgress(( .send(AppEvent::OverallProgress((