Skip to content

Commit 395729c

Browse files
authored
Introduce save and restore methods (#810)
1 parent 70a9a84 commit 395729c

3 files changed

Lines changed: 36 additions & 0 deletions

File tree

data/music.gschema.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@
1212
<summary>An index representing the repeat mode</summary>
1313
<description>An index representing the repeat mode</description>
1414
</key>
15+
<key type="as" name="previous-queue">
16+
<default>['']</default>
17+
<summary>The queue from last session to restore</summary>
18+
<description>An array of strings representing the files played last</description>
19+
</key>
1520

1621
<key name="window-height" type="i">
1722
<default>475</default>

src/Application.vala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ public class Music.Application : Gtk.Application {
114114
}
115115

116116
settings.bind ("window-maximized", main_window, "maximized", SettingsBindFlags.SET);
117+
118+
// This needs to be done after window is constructed
119+
// Else music plays but the queue seems empty
120+
playback_manager.restore_queue ();
117121
}
118122

119123
private static File[] list_directory (string directory) {

src/PlaybackManager.vala

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class Music.PlaybackManager : Object {
3838
private PlaybackManager () {}
3939

4040
construct {
41+
settings = new Settings ("io.elementary.music");
4142
queue_liststore = new ListStore (typeof (AudioObject));
4243

4344
playbin = Gst.ElementFactory.make ("playbin", "playbin");
@@ -433,6 +434,7 @@ public class Music.PlaybackManager : Object {
433434
has_items = queue_liststore.get_n_items () > 0;
434435
shuffle_action_action.set_enabled (queue_liststore.get_n_items () > 1);
435436
update_next_previous_sensitivity ();
437+
save_queue ();
436438
}
437439

438440
private void on_audio_changed () {
@@ -455,4 +457,29 @@ public class Music.PlaybackManager : Object {
455457
var play_pause_action = (SimpleAction) GLib.Application.get_default ().lookup_action (Application.ACTION_PLAY_PAUSE);
456458
play_pause_action.set_enabled (current_audio != null);
457459
}
460+
461+
private void save_queue () {
462+
string[] list_uri = new string[queue_liststore.n_items];
463+
464+
for (var i = 0; i < queue_liststore.n_items; i++) {
465+
var item = (Music.AudioObject)queue_liststore.get_item (i);
466+
list_uri[i] = item.uri;
467+
}
468+
469+
settings.set_strv ("previous-queue", list_uri);
470+
}
471+
472+
public void restore_queue () {
473+
var last_session_uri = settings.get_strv ("previous-queue");
474+
var last_session_files = new File[last_session_uri.length];
475+
476+
for (var i = 0; i < last_session_uri.length; i++) {
477+
var uri = last_session_uri[i];
478+
var file = File.new_for_uri (uri);
479+
last_session_files[i] = file;
480+
}
481+
482+
var files_to_play = Application.loop_through_files (last_session_files);
483+
queue_files (files_to_play);
484+
}
458485
}

0 commit comments

Comments
 (0)