mirror of
https://github.com/johrpan/musicus.git
synced 2025-10-26 03:47:23 +01:00
recording tile: Add option to append to playlist
This commit is contained in:
parent
13fed08ebf
commit
610a3d8ff9
5 changed files with 32 additions and 7 deletions
|
|
@ -66,6 +66,7 @@ template $MusicusRecordingTile: Gtk.FlowBoxChild {
|
|||
}
|
||||
|
||||
menu edit_menu {
|
||||
item (_("Edit recording"), "recording.edit-recording")
|
||||
item (_("Edit tracks"), "recording.edit-tracks")
|
||||
item (_("_Add to playlist"), "recording.add-to-playlist")
|
||||
item (_("Edit _recording"), "recording.edit-recording")
|
||||
item (_("Edit _tracks"), "recording.edit-tracks")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,12 +84,14 @@ impl AlbumPage {
|
|||
.build();
|
||||
|
||||
obj.imp().title_label.set_label(&album.to_string());
|
||||
obj.imp().subtitle_label.set_label(&album.performers_string());
|
||||
obj.imp()
|
||||
.subtitle_label
|
||||
.set_label(&album.performers_string());
|
||||
|
||||
for recording in &album.recordings {
|
||||
obj.imp()
|
||||
.recordings_flow_box
|
||||
.append(&RecordingTile::new(navigation, library, recording));
|
||||
.append(&RecordingTile::new(navigation, library, player, recording));
|
||||
}
|
||||
|
||||
obj.imp().album.set(album).unwrap();
|
||||
|
|
|
|||
|
|
@ -280,6 +280,7 @@ impl Player {
|
|||
if first_index == 0 {
|
||||
self.set_active(true);
|
||||
self.set_current_index(0);
|
||||
self.pause();
|
||||
}
|
||||
|
||||
Ok(first_index)
|
||||
|
|
|
|||
|
|
@ -3,7 +3,9 @@ use std::cell::OnceCell;
|
|||
use gettextrs::gettext;
|
||||
use gtk::{gio, glib, prelude::*, subclass::prelude::*};
|
||||
|
||||
use crate::{db::models::Recording, editor::recording::RecordingEditor, library::Library};
|
||||
use crate::{
|
||||
db::models::Recording, editor::recording::RecordingEditor, library::Library, player::Player,
|
||||
};
|
||||
|
||||
mod imp {
|
||||
use super::*;
|
||||
|
|
@ -21,6 +23,7 @@ mod imp {
|
|||
|
||||
pub navigation: OnceCell<adw::NavigationView>,
|
||||
pub library: OnceCell<Library>,
|
||||
pub player: OnceCell<Player>,
|
||||
pub recording: OnceCell<Recording>,
|
||||
}
|
||||
|
||||
|
|
@ -43,6 +46,17 @@ mod imp {
|
|||
fn constructed(&self) {
|
||||
self.parent_constructed();
|
||||
|
||||
let obj = self.obj().to_owned();
|
||||
let append_action = gio::ActionEntry::builder("add-to-playlist")
|
||||
.activate(move |_, _, _| {
|
||||
let player = obj.imp().player.get().unwrap();
|
||||
let playlist = player.recording_to_playlist(obj.imp().recording.get().unwrap());
|
||||
if let Err(err) = player.append(playlist) {
|
||||
log::error!("Failed to add recording to playlist: {err}");
|
||||
}
|
||||
})
|
||||
.build();
|
||||
|
||||
let obj = self.obj().to_owned();
|
||||
let edit_recording_action = gio::ActionEntry::builder("edit-recording")
|
||||
.activate(move |_, _, _| {
|
||||
|
|
@ -70,7 +84,7 @@ mod imp {
|
|||
.build();
|
||||
|
||||
let actions = gio::SimpleActionGroup::new();
|
||||
actions.add_action_entries([edit_recording_action, edit_tracks_action]);
|
||||
actions.add_action_entries([append_action, edit_recording_action, edit_tracks_action]);
|
||||
self.obj().insert_action_group("recording", Some(&actions));
|
||||
}
|
||||
}
|
||||
|
|
@ -85,7 +99,12 @@ glib::wrapper! {
|
|||
}
|
||||
|
||||
impl RecordingTile {
|
||||
pub fn new(navigation: &adw::NavigationView, library: &Library, recording: &Recording) -> Self {
|
||||
pub fn new(
|
||||
navigation: &adw::NavigationView,
|
||||
library: &Library,
|
||||
player: &Player,
|
||||
recording: &Recording,
|
||||
) -> Self {
|
||||
let obj: Self = glib::Object::new();
|
||||
let imp = obj.imp();
|
||||
|
||||
|
|
@ -101,6 +120,7 @@ impl RecordingTile {
|
|||
|
||||
imp.navigation.set(navigation.to_owned()).unwrap();
|
||||
imp.library.set(library.to_owned()).unwrap();
|
||||
imp.player.set(player.to_owned()).unwrap();
|
||||
imp.recording.set(recording.to_owned()).unwrap();
|
||||
|
||||
obj
|
||||
|
|
|
|||
|
|
@ -460,6 +460,7 @@ impl SearchPage {
|
|||
imp.recordings_flow_box.append(&RecordingTile::new(
|
||||
&self.navigation(),
|
||||
&self.library(),
|
||||
&self.player(),
|
||||
recording,
|
||||
));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue