SmartPlaylists: Add option to restore smart playlists to the defaults
Fixes #1848
This commit is contained in:
@@ -134,13 +134,10 @@ void SmartPlaylistsModel::Init() {
|
|||||||
|
|
||||||
// Append the new ones
|
// Append the new ones
|
||||||
s.beginWriteArray(collection_backend_->songs_table(), playlist_index + unwritten_defaults);
|
s.beginWriteArray(collection_backend_->songs_table(), playlist_index + unwritten_defaults);
|
||||||
for (; version < default_smart_playlists_.count(); ++version) {
|
WriteDefaultsToSettings(&s, version, playlist_index);
|
||||||
const GeneratorList generators = default_smart_playlists_.value(version);
|
|
||||||
for (PlaylistGeneratorPtr gen : generators) {
|
|
||||||
SaveGenerator(&s, playlist_index++, gen);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
s.endArray();
|
s.endArray();
|
||||||
|
|
||||||
|
version = default_smart_playlists_.count();
|
||||||
}
|
}
|
||||||
|
|
||||||
s.setValue(collection_backend_->songs_table() + u"_version"_s, version);
|
s.setValue(collection_backend_->songs_table() + u"_version"_s, version);
|
||||||
@@ -269,6 +266,46 @@ PlaylistGeneratorPtr SmartPlaylistsModel::CreateGenerator(const QModelIndex &idx
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SmartPlaylistsModel::WriteDefaultsToSettings(Settings *s, const int start_version, const int start_index) {
|
||||||
|
|
||||||
|
int playlist_index = start_index;
|
||||||
|
for (int version = start_version; version < default_smart_playlists_.count(); ++version) {
|
||||||
|
const GeneratorList generators = default_smart_playlists_.value(version);
|
||||||
|
for (PlaylistGeneratorPtr gen : generators) {
|
||||||
|
SaveGenerator(s, playlist_index++, gen);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SmartPlaylistsModel::RestoreDefaults() {
|
||||||
|
|
||||||
|
root_->ClearNotify();
|
||||||
|
|
||||||
|
Settings s;
|
||||||
|
s.beginGroup(kSettingsGroup);
|
||||||
|
|
||||||
|
int total_defaults = 0;
|
||||||
|
for (const GeneratorList &generators : default_smart_playlists_) {
|
||||||
|
total_defaults += static_cast<int>(generators.count());
|
||||||
|
}
|
||||||
|
|
||||||
|
s.beginWriteArray(collection_backend_->songs_table(), total_defaults);
|
||||||
|
WriteDefaultsToSettings(&s, 0, 0);
|
||||||
|
s.endArray();
|
||||||
|
|
||||||
|
s.setValue(collection_backend_->songs_table() + u"_version"_s, default_smart_playlists_.count());
|
||||||
|
|
||||||
|
const int count = s.beginReadArray(collection_backend_->songs_table());
|
||||||
|
for (int i = 0; i < count; ++i) {
|
||||||
|
s.setArrayIndex(i);
|
||||||
|
ItemFromSmartPlaylist(s, true);
|
||||||
|
}
|
||||||
|
s.endArray();
|
||||||
|
s.endGroup();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
QVariant SmartPlaylistsModel::data(const QModelIndex &idx, const int role) const {
|
QVariant SmartPlaylistsModel::data(const QModelIndex &idx, const int role) const {
|
||||||
|
|
||||||
if (!idx.isValid()) return QVariant();
|
if (!idx.isValid()) return QVariant();
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ class SmartPlaylistsModel : public SimpleTreeModel<SmartPlaylistsItem> {
|
|||||||
void AddGenerator(PlaylistGeneratorPtr gen);
|
void AddGenerator(PlaylistGeneratorPtr gen);
|
||||||
void UpdateGenerator(const QModelIndex &idx, PlaylistGeneratorPtr gen);
|
void UpdateGenerator(const QModelIndex &idx, PlaylistGeneratorPtr gen);
|
||||||
void DeleteGenerator(const QModelIndex &idx);
|
void DeleteGenerator(const QModelIndex &idx);
|
||||||
|
void RestoreDefaults();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const override;
|
QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const override;
|
||||||
@@ -79,6 +80,7 @@ class SmartPlaylistsModel : public SimpleTreeModel<SmartPlaylistsItem> {
|
|||||||
|
|
||||||
static void SaveGenerator(Settings *s, const int i, PlaylistGeneratorPtr generator);
|
static void SaveGenerator(Settings *s, const int i, PlaylistGeneratorPtr generator);
|
||||||
void ItemFromSmartPlaylist(const Settings &s, const bool notify);
|
void ItemFromSmartPlaylist(const Settings &s, const bool notify);
|
||||||
|
void WriteDefaultsToSettings(Settings *s, const int start_version, const int start_index);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SharedPtr<CollectionBackend> collection_backend_;
|
SharedPtr<CollectionBackend> collection_backend_;
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ SmartPlaylistsViewContainer::SmartPlaylistsViewContainer(const SharedPtr<Player>
|
|||||||
action_new_smart_playlist_(nullptr),
|
action_new_smart_playlist_(nullptr),
|
||||||
action_edit_smart_playlist_(nullptr),
|
action_edit_smart_playlist_(nullptr),
|
||||||
action_delete_smart_playlist_(nullptr),
|
action_delete_smart_playlist_(nullptr),
|
||||||
|
action_restore_defaults_(nullptr),
|
||||||
action_append_to_playlist_(nullptr),
|
action_append_to_playlist_(nullptr),
|
||||||
action_replace_current_playlist_(nullptr),
|
action_replace_current_playlist_(nullptr),
|
||||||
action_open_in_new_playlist_(nullptr),
|
action_open_in_new_playlist_(nullptr),
|
||||||
@@ -74,6 +75,7 @@ SmartPlaylistsViewContainer::SmartPlaylistsViewContainer(const SharedPtr<Player>
|
|||||||
model_->Init();
|
model_->Init();
|
||||||
|
|
||||||
action_new_smart_playlist_ = context_menu_->addAction(IconLoader::Load(u"document-new"_s), tr("New smart playlist..."), this, &SmartPlaylistsViewContainer::NewSmartPlaylist);
|
action_new_smart_playlist_ = context_menu_->addAction(IconLoader::Load(u"document-new"_s), tr("New smart playlist..."), this, &SmartPlaylistsViewContainer::NewSmartPlaylist);
|
||||||
|
action_restore_defaults_ = context_menu_->addAction(IconLoader::Load(u"view-refresh"_s), tr("Restore defaults"), this, &SmartPlaylistsViewContainer::RestoreDefaultsFromContext);
|
||||||
|
|
||||||
action_append_to_playlist_ = context_menu_selected_->addAction(IconLoader::Load(u"media-playback-start"_s), tr("Append to current playlist"), this, &SmartPlaylistsViewContainer::AppendToPlaylist);
|
action_append_to_playlist_ = context_menu_selected_->addAction(IconLoader::Load(u"media-playback-start"_s), tr("Append to current playlist"), this, &SmartPlaylistsViewContainer::AppendToPlaylist);
|
||||||
action_replace_current_playlist_ = context_menu_selected_->addAction(IconLoader::Load(u"media-playback-start"_s), tr("Replace current playlist"), this, &SmartPlaylistsViewContainer::ReplaceCurrentPlaylist);
|
action_replace_current_playlist_ = context_menu_selected_->addAction(IconLoader::Load(u"media-playback-start"_s), tr("Replace current playlist"), this, &SmartPlaylistsViewContainer::ReplaceCurrentPlaylist);
|
||||||
@@ -90,13 +92,16 @@ SmartPlaylistsViewContainer::SmartPlaylistsViewContainer(const SharedPtr<Player>
|
|||||||
action_delete_smart_playlist_ = context_menu_selected_->addAction(IconLoader::Load(u"edit-delete"_s), tr("Delete smart playlist"), this, &SmartPlaylistsViewContainer::DeleteSmartPlaylistFromContext);
|
action_delete_smart_playlist_ = context_menu_selected_->addAction(IconLoader::Load(u"edit-delete"_s), tr("Delete smart playlist"), this, &SmartPlaylistsViewContainer::DeleteSmartPlaylistFromContext);
|
||||||
|
|
||||||
context_menu_selected_->addSeparator();
|
context_menu_selected_->addSeparator();
|
||||||
|
context_menu_selected_->addAction(action_restore_defaults_);
|
||||||
|
|
||||||
ui_->new_->setDefaultAction(action_new_smart_playlist_);
|
ui_->new_->setDefaultAction(action_new_smart_playlist_);
|
||||||
ui_->edit_->setIcon(IconLoader::Load(u"edit-rename"_s));
|
ui_->edit_->setIcon(IconLoader::Load(u"edit-rename"_s));
|
||||||
ui_->delete_->setIcon(IconLoader::Load(u"edit-delete"_s));
|
ui_->delete_->setIcon(IconLoader::Load(u"edit-delete"_s));
|
||||||
|
ui_->restore_->setIcon(IconLoader::Load(u"view-refresh"_s));
|
||||||
|
|
||||||
QObject::connect(ui_->edit_, &QToolButton::clicked, this, &SmartPlaylistsViewContainer::EditSmartPlaylistFromButton);
|
QObject::connect(ui_->edit_, &QToolButton::clicked, this, &SmartPlaylistsViewContainer::EditSmartPlaylistFromButton);
|
||||||
QObject::connect(ui_->delete_, &QToolButton::clicked, this, &SmartPlaylistsViewContainer::DeleteSmartPlaylistFromButton);
|
QObject::connect(ui_->delete_, &QToolButton::clicked, this, &SmartPlaylistsViewContainer::DeleteSmartPlaylistFromButton);
|
||||||
|
QObject::connect(ui_->restore_, &QToolButton::clicked, this, &SmartPlaylistsViewContainer::RestoreDefaults);
|
||||||
|
|
||||||
QObject::connect(ui_->view, &SmartPlaylistsView::ItemsSelectedChanged, this, &SmartPlaylistsViewContainer::ItemsSelectedChanged);
|
QObject::connect(ui_->view, &SmartPlaylistsView::ItemsSelectedChanged, this, &SmartPlaylistsViewContainer::ItemsSelectedChanged);
|
||||||
QObject::connect(ui_->view, &SmartPlaylistsView::doubleClicked, this, &SmartPlaylistsViewContainer::ItemDoubleClicked);
|
QObject::connect(ui_->view, &SmartPlaylistsView::doubleClicked, this, &SmartPlaylistsViewContainer::ItemDoubleClicked);
|
||||||
@@ -130,6 +135,7 @@ void SmartPlaylistsViewContainer::ReloadSettings() {
|
|||||||
ui_->new_->setIconSize(QSize(iconsize, iconsize));
|
ui_->new_->setIconSize(QSize(iconsize, iconsize));
|
||||||
ui_->delete_->setIconSize(QSize(iconsize, iconsize));
|
ui_->delete_->setIconSize(QSize(iconsize, iconsize));
|
||||||
ui_->edit_->setIconSize(QSize(iconsize, iconsize));
|
ui_->edit_->setIconSize(QSize(iconsize, iconsize));
|
||||||
|
ui_->restore_->setIconSize(QSize(iconsize, iconsize));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -304,3 +310,15 @@ void SmartPlaylistsViewContainer::ItemDoubleClicked(const QModelIndex &idx) {
|
|||||||
Q_EMIT AddToPlaylist(q_mimedata);
|
Q_EMIT AddToPlaylist(q_mimedata);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SmartPlaylistsViewContainer::RestoreDefaultsFromContext() {
|
||||||
|
|
||||||
|
RestoreDefaults();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SmartPlaylistsViewContainer::RestoreDefaults() {
|
||||||
|
|
||||||
|
model_->RestoreDefaults();
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -83,11 +83,13 @@ class SmartPlaylistsViewContainer : public QWidget {
|
|||||||
|
|
||||||
void EditSmartPlaylist(const QModelIndex &idx);
|
void EditSmartPlaylist(const QModelIndex &idx);
|
||||||
void DeleteSmartPlaylist(const QModelIndex &idx);
|
void DeleteSmartPlaylist(const QModelIndex &idx);
|
||||||
|
void RestoreDefaults();
|
||||||
|
|
||||||
void EditSmartPlaylistFromButton();
|
void EditSmartPlaylistFromButton();
|
||||||
void DeleteSmartPlaylistFromButton();
|
void DeleteSmartPlaylistFromButton();
|
||||||
void EditSmartPlaylistFromContext();
|
void EditSmartPlaylistFromContext();
|
||||||
void DeleteSmartPlaylistFromContext();
|
void DeleteSmartPlaylistFromContext();
|
||||||
|
void RestoreDefaultsFromContext();
|
||||||
|
|
||||||
void NewSmartPlaylistFinished();
|
void NewSmartPlaylistFinished();
|
||||||
void EditSmartPlaylistFinished();
|
void EditSmartPlaylistFinished();
|
||||||
@@ -113,6 +115,7 @@ class SmartPlaylistsViewContainer : public QWidget {
|
|||||||
QAction *action_new_smart_playlist_;
|
QAction *action_new_smart_playlist_;
|
||||||
QAction *action_edit_smart_playlist_;
|
QAction *action_edit_smart_playlist_;
|
||||||
QAction *action_delete_smart_playlist_;
|
QAction *action_delete_smart_playlist_;
|
||||||
|
QAction *action_restore_defaults_;
|
||||||
QAction *action_append_to_playlist_;
|
QAction *action_append_to_playlist_;
|
||||||
QAction *action_replace_current_playlist_;
|
QAction *action_replace_current_playlist_;
|
||||||
QAction *action_open_in_new_playlist_;
|
QAction *action_open_in_new_playlist_;
|
||||||
|
|||||||
@@ -95,6 +95,19 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="restore_">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Restore defaults</string>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>22</width>
|
||||||
|
<height>22</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="spacer_buttons">
|
<spacer name="spacer_buttons">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
|||||||
Reference in New Issue
Block a user