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
|
||||
s.beginWriteArray(collection_backend_->songs_table(), playlist_index + unwritten_defaults);
|
||||
for (; version < default_smart_playlists_.count(); ++version) {
|
||||
const GeneratorList generators = default_smart_playlists_.value(version);
|
||||
for (PlaylistGeneratorPtr gen : generators) {
|
||||
SaveGenerator(&s, playlist_index++, gen);
|
||||
}
|
||||
}
|
||||
WriteDefaultsToSettings(&s, version, playlist_index);
|
||||
s.endArray();
|
||||
|
||||
version = default_smart_playlists_.count();
|
||||
}
|
||||
|
||||
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 {
|
||||
|
||||
if (!idx.isValid()) return QVariant();
|
||||
|
||||
@@ -66,6 +66,7 @@ class SmartPlaylistsModel : public SimpleTreeModel<SmartPlaylistsItem> {
|
||||
void AddGenerator(PlaylistGeneratorPtr gen);
|
||||
void UpdateGenerator(const QModelIndex &idx, PlaylistGeneratorPtr gen);
|
||||
void DeleteGenerator(const QModelIndex &idx);
|
||||
void RestoreDefaults();
|
||||
|
||||
private:
|
||||
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);
|
||||
void ItemFromSmartPlaylist(const Settings &s, const bool notify);
|
||||
void WriteDefaultsToSettings(Settings *s, const int start_version, const int start_index);
|
||||
|
||||
private:
|
||||
SharedPtr<CollectionBackend> collection_backend_;
|
||||
|
||||
@@ -60,6 +60,7 @@ SmartPlaylistsViewContainer::SmartPlaylistsViewContainer(const SharedPtr<Player>
|
||||
action_new_smart_playlist_(nullptr),
|
||||
action_edit_smart_playlist_(nullptr),
|
||||
action_delete_smart_playlist_(nullptr),
|
||||
action_restore_defaults_(nullptr),
|
||||
action_append_to_playlist_(nullptr),
|
||||
action_replace_current_playlist_(nullptr),
|
||||
action_open_in_new_playlist_(nullptr),
|
||||
@@ -74,6 +75,7 @@ SmartPlaylistsViewContainer::SmartPlaylistsViewContainer(const SharedPtr<Player>
|
||||
model_->Init();
|
||||
|
||||
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_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);
|
||||
|
||||
context_menu_selected_->addSeparator();
|
||||
context_menu_selected_->addAction(action_restore_defaults_);
|
||||
|
||||
ui_->new_->setDefaultAction(action_new_smart_playlist_);
|
||||
ui_->edit_->setIcon(IconLoader::Load(u"edit-rename"_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_->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::doubleClicked, this, &SmartPlaylistsViewContainer::ItemDoubleClicked);
|
||||
@@ -130,6 +135,7 @@ void SmartPlaylistsViewContainer::ReloadSettings() {
|
||||
ui_->new_->setIconSize(QSize(iconsize, iconsize));
|
||||
ui_->delete_->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);
|
||||
|
||||
}
|
||||
|
||||
void SmartPlaylistsViewContainer::RestoreDefaultsFromContext() {
|
||||
|
||||
RestoreDefaults();
|
||||
|
||||
}
|
||||
|
||||
void SmartPlaylistsViewContainer::RestoreDefaults() {
|
||||
|
||||
model_->RestoreDefaults();
|
||||
|
||||
}
|
||||
|
||||
@@ -83,11 +83,13 @@ class SmartPlaylistsViewContainer : public QWidget {
|
||||
|
||||
void EditSmartPlaylist(const QModelIndex &idx);
|
||||
void DeleteSmartPlaylist(const QModelIndex &idx);
|
||||
void RestoreDefaults();
|
||||
|
||||
void EditSmartPlaylistFromButton();
|
||||
void DeleteSmartPlaylistFromButton();
|
||||
void EditSmartPlaylistFromContext();
|
||||
void DeleteSmartPlaylistFromContext();
|
||||
void RestoreDefaultsFromContext();
|
||||
|
||||
void NewSmartPlaylistFinished();
|
||||
void EditSmartPlaylistFinished();
|
||||
@@ -113,6 +115,7 @@ class SmartPlaylistsViewContainer : public QWidget {
|
||||
QAction *action_new_smart_playlist_;
|
||||
QAction *action_edit_smart_playlist_;
|
||||
QAction *action_delete_smart_playlist_;
|
||||
QAction *action_restore_defaults_;
|
||||
QAction *action_append_to_playlist_;
|
||||
QAction *action_replace_current_playlist_;
|
||||
QAction *action_open_in_new_playlist_;
|
||||
|
||||
@@ -95,6 +95,19 @@
|
||||
</property>
|
||||
</widget>
|
||||
</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>
|
||||
<spacer name="spacer_buttons">
|
||||
<property name="orientation">
|
||||
|
||||
Reference in New Issue
Block a user