added add to other playlist feature for item

This commit is contained in:
liyaowhen
2024-08-07 16:24:16 -07:00
parent c3bc0d0373
commit b997defb5f
3 changed files with 88 additions and 3 deletions
+39
View File
@@ -30,7 +30,10 @@ namespace Song {
{ "preferences", this.on_preferences_action },
{ "quit", this.quit }
};
var add_song_to_playlist_action = new SimpleAction("add_item_to_playlist", VariantType.STRING_ARRAY);
add_song_to_playlist_action.activate.connect(add_song_to_playlist);
this.add_action_entries (action_entries, this);
this.add_action(add_song_to_playlist_action);
this.set_accels_for_action ("app.quit", {"<primary>q"});
}
@@ -62,5 +65,41 @@ namespace Song {
private void on_preferences_action () {
message ("app.preferences action activated");
}
private void add_song_to_playlist(Action a, GLib.Variant? data) {
// [current_playlist.name, target_playlist.name, item.name]
print("action used");
string[] request = data.get_strv ();
if (request.length != 3) return;
var config = Config.get_instance ();
print("request is valid");
PlaylistObject? target_playlist = null;
PlaylistObject? current_playlist = null;
config.playlists.foreach((i) => {
if (i.name == request[1]) {
target_playlist = i;
}
if (i.name == request[0]) {
current_playlist = i;
}
});
if (target_playlist == null | current_playlist == null) return;
print("was able to find playlist reference");
PlaylistItem? item = null;
current_playlist.items.foreach ((i) => {
if (i.name == request[2]) {
item = i;
}
});
if (item == null) return;
print("item was not null");
target_playlist.add_item (item);
print("added to other playlist");
config.save.begin();
}
}
}
+2 -2
View File
@@ -261,7 +261,7 @@ namespace Song {
}
}*/
playlist.items.foreach((item) => {
MusicListRow i = new MusicListRow(item);
MusicListRow i = new MusicListRow(item, playlist);
content.append(i);
});
@@ -269,7 +269,7 @@ namespace Song {
config.config_changed.connect(() => {
content.remove_all();
playlist.items.foreach((item) => {
MusicListRow i = new MusicListRow(item);
MusicListRow i = new MusicListRow(item, playlist);
content.append(i);
});
+47 -1
View File
@@ -3,9 +3,13 @@ namespace Song {
private Settings settings = new Settings("com.liyaowhen.Song.playlists");
public PlaylistItem item;
private PlaylistObject playlist;
public MusicListRow (PlaylistItem _item) {
private Gee.HashSet<Gtk.Widget> playlist_widgets = new Gee.HashSet<Gtk.Widget>();
public MusicListRow (PlaylistItem _item, PlaylistObject playlist) {
this.item = _item;
this.playlist = playlist;
build_ui();
}
@@ -55,10 +59,52 @@ namespace Song {
append(play_button);
var options_button = new Gtk.MenuButton();
options_button.set_icon_name("view-more-symbolic");
options_button.add_css_class("flat");
var add_playlists_menu = new Menu();
fill_playlists(add_playlists_menu);
var menu = new Menu();
menu.append_section("Add To Other Playlists", add_playlists_menu);
//popover.set_child(nav_view);
options_button.set_menu_model(menu);
prepend(options_button);
spacing = 5;
}
private async void fill_playlists(Menu menu) {
var config = Config.get_instance();
menu.remove_all();
config.playlists.foreach((i) => {
if (i != playlist) {
var playlist = new MenuItem(i.name, null);
string[] target_array = {this.playlist.name, i.name, item.name};
playlist.set_action_and_target_value("app.add_item_to_playlist", target_array);
menu.append_item(playlist);
}
});
}
}
public class AddItemToPlaylistRequest : GLib.Object {
public PlaylistObject? target = null;
public PlaylistItem? item = null;
public AddItemToPlaylistRequest(PlaylistObject playlist, PlaylistItem item) {
this.target = playlist;
this.item = item;
}
}
}