Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 2 additions & 33 deletions src/Application.vala
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,7 @@ public class Music.Application : Gtk.Application {
public const string ACTION_QUIT = "action-quit";

private const ActionEntry[] ACTION_ENTRIES = {
{ ACTION_PLAY_PAUSE, action_play_pause, null, "false" },
{ ACTION_NEXT, action_next },
{ ACTION_PREVIOUS, action_previous },
{ ACTION_SHUFFLE, action_shuffle },
{ ACTION_FIND, action_find },
{ ACTION_CLEAR_QUEUE, action_clear_queue },
{ ACTION_QUIT, quit }
};

Expand All @@ -44,17 +39,13 @@ public class Music.Application : Gtk.Application {

Granite.init ();

playback_manager = PlaybackManager.get_default ();

add_action_entries (ACTION_ENTRIES, this);

set_accels_for_action (ACTION_PREFIX + ACTION_FIND, {"<Ctrl>F"});
set_accels_for_action (ACTION_PREFIX + ACTION_QUIT, {"<Ctrl>Q"});

((SimpleAction) lookup_action (ACTION_PLAY_PAUSE)).set_enabled (false);
((SimpleAction) lookup_action (ACTION_PLAY_PAUSE)).set_state (false);
((SimpleAction) lookup_action (ACTION_NEXT)).set_enabled (false);
((SimpleAction) lookup_action (ACTION_PREVIOUS)).set_enabled (false);
((SimpleAction) lookup_action (ACTION_SHUFFLE)).set_enabled (false);

var granite_settings = Granite.Settings.get_default ();
var gtk_settings = Gtk.Settings.get_default ();

Expand All @@ -78,8 +69,6 @@ public class Music.Application : Gtk.Application {
return;
}

playback_manager = PlaybackManager.get_default ();

var mpris_id = Bus.own_name (
BusType.SESSION,
"org.mpris.MediaPlayer2.io.elementary.music",
Expand Down Expand Up @@ -176,30 +165,10 @@ public class Music.Application : Gtk.Application {
playback_manager.queue_files (files_to_play);
}

private void action_play_pause () {
playback_manager.play_pause ();
}

private void action_next () {
playback_manager.next ();
}

private void action_previous () {
playback_manager.previous ();
}

private void action_shuffle () {
playback_manager.shuffle ();
}

private void action_find () {
((MainWindow)active_window).start_search ();
}

private void action_clear_queue () {
playback_manager.clear_queue ();
}

private void on_bus_acquired (DBusConnection connection, string name) {
try {
connection.register_object ("/org/mpris/MediaPlayer2", new MprisRoot ());
Expand Down
5 changes: 0 additions & 5 deletions src/MainWindow.vala
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,6 @@ public class Music.MainWindow : Gtk.ApplicationWindow {

clear_button_label.mnemonic_widget = clear_button;

var clear_queue_action = GLib.Application.get_default ().lookup_action (Application.ACTION_CLEAR_QUEUE);
playback_manager.bind_property (
"has-items", clear_queue_action, "enabled", DEFAULT | SYNC_CREATE
);

var queue_action_bar = new Gtk.ActionBar ();
queue_action_bar.pack_start (add_button);
queue_action_bar.pack_end (clear_button);
Expand Down
65 changes: 45 additions & 20 deletions src/PlaybackManager.vala
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@ public class Music.PlaybackManager : Object {

private Direction direction = Direction.NONE;

private SimpleAction next_action;
private SimpleAction play_pause_action;
private SimpleAction previous_action;
private SimpleAction shuffle_action;

private PlaybackManager () {}

construct {
Expand All @@ -60,6 +65,35 @@ public class Music.PlaybackManager : Object {
notify["current-audio"].connect (on_audio_changed);

settings = new Settings ("io.elementary.music");

var clear_action = new SimpleAction (Application.ACTION_CLEAR_QUEUE, null);
clear_action.activate.connect (clear_queue);

next_action = new SimpleAction (Application.ACTION_NEXT, null);
next_action.activate.connect (() => next ());

play_pause_action = new SimpleAction.stateful (Application.ACTION_PLAY_PAUSE, null, new Variant.boolean (false));
play_pause_action.change_state.connect (play_pause);

previous_action = new SimpleAction (Application.ACTION_PREVIOUS, null);
previous_action.activate.connect (previous);

shuffle_action = new SimpleAction (Application.ACTION_SHUFFLE, null);
shuffle_action.activate.connect (shuffle);

next_action.set_enabled (false);
play_pause_action.set_enabled (false);
previous_action.set_enabled (false);
shuffle_action.set_enabled (false);

unowned var app = GLib.Application.get_default ();
app.add_action (clear_action);
app.add_action (next_action);
app.add_action (play_pause_action);
app.add_action (previous_action);
app.add_action (shuffle_action);

bind_property ("has-items", clear_action, "enabled", SYNC_CREATE);
}

public void seek_to_progress (double percent) {
Expand Down Expand Up @@ -122,7 +156,7 @@ public class Music.PlaybackManager : Object {
}
}

public void clear_queue () {
private void clear_queue () {
playbin.set_state (Gst.State.NULL);
current_audio = null;
queue_liststore.remove_all ();
Expand Down Expand Up @@ -257,8 +291,6 @@ public class Music.PlaybackManager : Object {
progress_timer = 0;
}

var play_pause_action = (SimpleAction) GLib.Application.get_default ().lookup_action (Application.ACTION_PLAY_PAUSE);

Gst.State old_state, new_state, pending_state;
message.parse_state_changed (out old_state, out new_state, out pending_state);
if (new_state == Gst.State.PLAYING) {
Expand All @@ -282,16 +314,17 @@ public class Music.PlaybackManager : Object {
return true;
}

public void play_pause () {
var play_pause_action = (SimpleAction) GLib.Application.get_default ().lookup_action (Application.ACTION_PLAY_PAUSE);
if (play_pause_action.get_state ().get_boolean ()) {
playbin.set_state (Gst.State.PAUSED);
} else {
private void play_pause (SimpleAction action, Variant? value) {
action.set_state (value);

if (value.get_boolean ()) {
playbin.set_state (Gst.State.PLAYING);
} else {
playbin.set_state (Gst.State.PAUSED);
}
}

public void next (bool eos = false) {
private void next (bool eos = false) {
direction = Direction.NEXT;
next_by_eos = eos;
uint position = -1;
Expand Down Expand Up @@ -340,7 +373,7 @@ public class Music.PlaybackManager : Object {
}
}

public void previous () {
private void previous () {
direction = Direction.PREVIOUS;
uint position = -1;
queue_liststore.find (current_audio, out position);
Expand All @@ -359,7 +392,7 @@ public class Music.PlaybackManager : Object {
}
}

public void shuffle () {
private void shuffle () {
var temp_list = new ListStore (typeof (AudioObject));
temp_list.append (current_audio);

Expand Down Expand Up @@ -407,14 +440,8 @@ public class Music.PlaybackManager : Object {

next_sensitive = previous_sensitive = current_audio != null;

var default_application = GLib.Application.get_default ();

var next_action = (SimpleAction) default_application.lookup_action (Application.ACTION_NEXT);
next_action.set_enabled (next_sensitive);

var previous_action = (SimpleAction) default_application.lookup_action (Application.ACTION_PREVIOUS);
previous_action.set_enabled (previous_sensitive);

}

private Gst.Sample? get_cover_sample (Gst.TagList tag_list) {
Expand Down Expand Up @@ -479,9 +506,8 @@ public class Music.PlaybackManager : Object {
}

private void on_items_changed () {
var shuffle_action_action = (SimpleAction) GLib.Application.get_default ().lookup_action (Application.ACTION_SHUFFLE);
has_items = queue_liststore.get_n_items () > 0;
shuffle_action_action.set_enabled (queue_liststore.get_n_items () > 1);
shuffle_action.set_enabled (queue_liststore.get_n_items () > 1);
update_next_previous_sensitivity ();
save_queue ();
}
Expand All @@ -503,7 +529,6 @@ public class Music.PlaybackManager : Object {

update_next_previous_sensitivity ();

var play_pause_action = (SimpleAction) GLib.Application.get_default ().lookup_action (Application.ACTION_PLAY_PAUSE);
play_pause_action.set_enabled (current_audio != null);
}

Expand Down