97 lines
4.1 KiB
Rust
Executable File
97 lines
4.1 KiB
Rust
Executable File
use crate::app::{App, AppResult, SelectedTab};
|
|
use crate::browser::FileExtension;
|
|
use crossterm::event::{KeyCode, KeyEvent};
|
|
use std::path::Path;
|
|
|
|
pub fn hande_pl_append_keys(key_event: KeyEvent, app: &mut App) -> AppResult<()> {
|
|
match key_event.code {
|
|
KeyCode::Char('q') | KeyCode::Esc => {
|
|
app.playlist_popup = false;
|
|
}
|
|
|
|
KeyCode::Char('j') | KeyCode::Down => app.append_list.next(),
|
|
KeyCode::Char('k') | KeyCode::Up => app.append_list.prev(),
|
|
|
|
KeyCode::Enter => {
|
|
// name of highlighted playlist in append list
|
|
let pl_name = &app.append_list.get_item_at_current_index();
|
|
|
|
match app.selected_tab {
|
|
SelectedTab::Queue => {
|
|
let short_path = &app.queue_list.get_item_at_current_index().file;
|
|
|
|
if let Some(full_path) = app.conn.get_full_path(short_path) {
|
|
let song = app.conn.get_song_with_only_filename(&full_path);
|
|
|
|
if *pl_name == "Current Playlist" {
|
|
app.conn.conn.push(&song)?;
|
|
app.update_queue();
|
|
} else {
|
|
app.conn.add_to_playlist(pl_name, &song)?;
|
|
}
|
|
}
|
|
}
|
|
|
|
SelectedTab::DirectoryBrowser => {
|
|
let (t, f) = app.browser.filetree.get(app.browser.selected).unwrap();
|
|
if t == "file" {
|
|
let short_path = f;
|
|
if let Some(full_path) = app.conn.get_full_path(short_path) {
|
|
let song = app.conn.get_song_with_only_filename(&full_path);
|
|
|
|
if *pl_name == "Current Playlist" {
|
|
app.conn.conn.push(&song)?;
|
|
app.update_queue();
|
|
} else {
|
|
app.conn.add_to_playlist(pl_name, &song)?;
|
|
}
|
|
}
|
|
} else if t == "directory" {
|
|
for (t, f) in app.conn.conn.listfiles(f)?.iter() {
|
|
// dir_vec.push((t, f));
|
|
if t == "file"
|
|
&& Path::new(&f).has_extension(&[
|
|
"mp3", "ogg", "flac", "m4a", "wav", "aac", "opus", "ape",
|
|
"wma", "mpc", "aiff", "dff", "mp2", "mka",
|
|
])
|
|
{
|
|
let full_path = app.conn.get_full_path(f).unwrap_or_default();
|
|
let song = app.conn.get_song_with_only_filename(&full_path);
|
|
if *pl_name == "Current Playlist" {
|
|
app.conn.conn.push(&song)?;
|
|
} else {
|
|
app.conn.add_to_playlist(pl_name, &song)?;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
SelectedTab::Playlists => {
|
|
let playlist_name = app.pl_list.get_item_at_current_index();
|
|
if *pl_name == "Current Playlist" {
|
|
app.conn.load_playlist(playlist_name)?;
|
|
app.update_queue();
|
|
} else {
|
|
let songs = app.conn.conn.playlist(playlist_name)?;
|
|
for song in songs {
|
|
// We ignore the Err() since there could be songs in playlists, which do not exist in the db anymore.
|
|
// So instead of panicking, we just ignore if the song does not exists
|
|
app.conn
|
|
.add_to_playlist(*pl_name, &song)
|
|
.unwrap_or_else(|_| {});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// hide the playlist popup
|
|
app.playlist_popup = false;
|
|
app.append_list.index = 0;
|
|
}
|
|
_ => {}
|
|
}
|
|
|
|
Ok(())
|
|
}
|