From ccaa59cc667592208df71a05f0a71bb3a68eaafa Mon Sep 17 00:00:00 2001 From: Antonio Russo Date: Fri, 6 Sep 2019 20:29:19 -0600 Subject: [PATCH] Periodically save current playlist tab Building on the previous commit, we save the current playlist (tab) periodically as well. Signed-off-by: Antonio Russo --- src/playlist/playlistcontainer.cpp | 29 ++++++++++++++++++++++++----- src/playlist/playlistcontainer.h | 8 +++++++- src/ui/mainwindow.cpp | 3 +-- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/playlist/playlistcontainer.cpp b/src/playlist/playlistcontainer.cpp index 0907f69f6..ad92e3edc 100644 --- a/src/playlist/playlistcontainer.cpp +++ b/src/playlist/playlistcontainer.cpp @@ -16,6 +16,7 @@ */ #include "core/appearance.h" +#include "core/application.h" #include "core/logging.h" #include "core/player.h" #include "core/timeconstants.h" @@ -43,6 +44,7 @@ const int PlaylistContainer::kFilterDelayPlaylistSizeThreshold = 5000; PlaylistContainer::PlaylistContainer(QWidget* parent) : QWidget(parent), + app_(nullptr), ui_(new Ui_PlaylistContainer), manager_(nullptr), undo_(nullptr), @@ -52,7 +54,8 @@ PlaylistContainer::PlaylistContainer(QWidget* parent) tab_bar_visible_(false), tab_bar_animation_(new QTimeLine(500, this)), no_matches_label_(nullptr), - filter_timer_(new QTimer(this)) { + filter_timer_(new QTimer(this)), + dirty_(false) { ui_->setupUi(this); no_matches_label_ = new QLabel(ui_->playlist); @@ -96,6 +99,7 @@ PlaylistContainer::PlaylistContainer(QWidget* parent) ui_->tab_bar->setMaximumHeight(0); // Connections + connect(ui_->tab_bar, SIGNAL(currentChanged(int)), SLOT(DirtyTabBar())); connect(ui_->tab_bar, SIGNAL(Save(int)), SLOT(SavePlaylist(int))); // set up timer for delayed filter updates @@ -111,10 +115,17 @@ PlaylistContainer::PlaylistContainer(QWidget* parent) } PlaylistContainer::~PlaylistContainer() { - Save(); delete ui_; } +void PlaylistContainer::SetApplication(Application* app) { + Q_ASSERT(app); + app_ = app; + SetManager(app_->playlist_manager()); + ui_->playlist->SetApplication(app_); + connect(app_, SIGNAL(SaveSettings(QSettings*)), SLOT(Save(QSettings*))); +} + PlaylistView* PlaylistContainer::view() const { return ui_->playlist; } void PlaylistContainer::SetActions(QAction* new_playlist, @@ -334,10 +345,18 @@ void PlaylistContainer::GoToPreviousPlaylistTab() { manager_->SetCurrentPlaylist(id_previous); } -void PlaylistContainer::Save() { - if (starting_up_) return; +void PlaylistContainer::DirtyTabBar() { + dirty_ = true; + app_->DirtySettings(); +} - settings_.setValue("current_playlist", ui_->tab_bar->current_id()); +void PlaylistContainer::Save(QSettings* settings_) { + if (starting_up_ || !dirty_) return; + dirty_ = false; + + settings_->beginGroup(kSettingsGroup); + settings_->setValue("current_playlist", ui_->tab_bar->current_id()); + settings_->endGroup(); } void PlaylistContainer::SetTabBarVisible(bool visible) { diff --git a/src/playlist/playlistcontainer.h b/src/playlist/playlistcontainer.h index 804c10445..76a6cded7 100644 --- a/src/playlist/playlistcontainer.h +++ b/src/playlist/playlistcontainer.h @@ -23,6 +23,7 @@ class Ui_PlaylistContainer; +class Application; class LineEditInterface; class Playlist; class PlaylistManager; @@ -41,6 +42,7 @@ class PlaylistContainer : public QWidget { static const char* kSettingsGroup; + void SetApplication(Application* app); void SetActions(QAction* new_playlist, QAction* load_playlist, QAction* save_playlist, QAction* next_playlist, QAction* previous_playlist); @@ -83,7 +85,8 @@ signals: void ActivePaused(); void ActiveStopped(); - void Save(); + void DirtyTabBar(); + void Save(QSettings* settings_); void SetTabBarVisible(bool visible); void SetTabBarHeight(int height); @@ -103,6 +106,7 @@ signals: static const int kFilterDelayMs; static const int kFilterDelayPlaylistSizeThreshold; + Application* app_; Ui_PlaylistContainer* ui_; PlaylistManager* manager_; @@ -119,6 +123,8 @@ signals: QLabel* no_matches_label_; QTimer* filter_timer_; + + bool dirty_; }; #endif // PLAYLISTCONTAINER_H diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index 2922b6508..b5423af3f 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -325,8 +325,7 @@ MainWindow::MainWindow(Application* app, SystemTrayIcon* tray_icon, OSD* osd, connect(ui_->playlist, SIGNAL(ViewSelectionModelChanged()), SLOT(PlaylistViewSelectionModelChanged())); - ui_->playlist->SetManager(app_->playlist_manager()); - ui_->playlist->view()->SetApplication(app_); + ui_->playlist->SetApplication(app_); library_view_->view()->setModel(library_sort_model_); library_view_->view()->SetApplication(app_);