Add save all playlists action

This commit is contained in:
Maxime Haselbauer
2022-03-13 11:28:17 +01:00
committed by Jonas Kvinge
parent 9449bfa414
commit 962b52bd5b
13 changed files with 30 additions and 4 deletions

View File

@@ -24,6 +24,7 @@
<file>icons/128x128/document-open-folder.png</file> <file>icons/128x128/document-open-folder.png</file>
<file>icons/128x128/document-open.png</file> <file>icons/128x128/document-open.png</file>
<file>icons/128x128/document-save.png</file> <file>icons/128x128/document-save.png</file>
<file>icons/128x128/document-save-all.png</file>
<file>icons/128x128/document-search.png</file> <file>icons/128x128/document-search.png</file>
<file>icons/128x128/download.png</file> <file>icons/128x128/download.png</file>
<file>icons/128x128/edit-clear-list.png</file> <file>icons/128x128/edit-clear-list.png</file>
@@ -120,6 +121,7 @@
<file>icons/64x64/document-open-folder.png</file> <file>icons/64x64/document-open-folder.png</file>
<file>icons/64x64/document-open.png</file> <file>icons/64x64/document-open.png</file>
<file>icons/64x64/document-save.png</file> <file>icons/64x64/document-save.png</file>
<file>icons/64x64/document-save-all.png</file>
<file>icons/64x64/document-search.png</file> <file>icons/64x64/document-search.png</file>
<file>icons/64x64/download.png</file> <file>icons/64x64/download.png</file>
<file>icons/64x64/edit-clear-list.png</file> <file>icons/64x64/edit-clear-list.png</file>
@@ -218,6 +220,7 @@
<file>icons/48x48/document-open-remote.png</file> <file>icons/48x48/document-open-remote.png</file>
<file>icons/48x48/document-open.png</file> <file>icons/48x48/document-open.png</file>
<file>icons/48x48/document-save.png</file> <file>icons/48x48/document-save.png</file>
<file>icons/48x48/document-save-all.png</file>
<file>icons/48x48/document-search.png</file> <file>icons/48x48/document-search.png</file>
<file>icons/48x48/download.png</file> <file>icons/48x48/download.png</file>
<file>icons/48x48/edit-clear-list.png</file> <file>icons/48x48/edit-clear-list.png</file>
@@ -319,6 +322,7 @@
<file>icons/32x32/document-open-remote.png</file> <file>icons/32x32/document-open-remote.png</file>
<file>icons/32x32/document-open.png</file> <file>icons/32x32/document-open.png</file>
<file>icons/32x32/document-save.png</file> <file>icons/32x32/document-save.png</file>
<file>icons/32x32/document-save-all.png</file>
<file>icons/32x32/document-search.png</file> <file>icons/32x32/document-search.png</file>
<file>icons/32x32/download.png</file> <file>icons/32x32/download.png</file>
<file>icons/32x32/edit-clear-list.png</file> <file>icons/32x32/edit-clear-list.png</file>
@@ -420,6 +424,7 @@
<file>icons/22x22/document-open-remote.png</file> <file>icons/22x22/document-open-remote.png</file>
<file>icons/22x22/document-open.png</file> <file>icons/22x22/document-open.png</file>
<file>icons/22x22/document-save.png</file> <file>icons/22x22/document-save.png</file>
<file>icons/22x22/document-save-all.png</file>
<file>icons/22x22/document-search.png</file> <file>icons/22x22/document-search.png</file>
<file>icons/22x22/download.png</file> <file>icons/22x22/download.png</file>
<file>icons/22x22/edit-clear-list.png</file> <file>icons/22x22/edit-clear-list.png</file>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 921 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

View File

@@ -458,6 +458,7 @@ MainWindow::MainWindow(Application *app, std::shared_ptr<SystemTrayIcon> tray_ic
ui_->action_remove_duplicates->setIcon(IconLoader::Load("list-remove")); ui_->action_remove_duplicates->setIcon(IconLoader::Load("list-remove"));
ui_->action_remove_unavailable->setIcon(IconLoader::Load("list-remove")); ui_->action_remove_unavailable->setIcon(IconLoader::Load("list-remove"));
ui_->action_remove_from_playlist->setIcon(IconLoader::Load("list-remove")); ui_->action_remove_from_playlist->setIcon(IconLoader::Load("list-remove"));
ui_->action_save_all_playlists->setIcon(IconLoader::Load("document-save-all"));
// Configure // Configure
@@ -563,8 +564,7 @@ MainWindow::MainWindow(Application *app, std::shared_ptr<SystemTrayIcon> tray_ic
ui_->button_scrobble->setDefaultAction(ui_->action_toggle_scrobbling); ui_->button_scrobble->setDefaultAction(ui_->action_toggle_scrobbling);
ui_->button_love->setDefaultAction(ui_->action_love); ui_->button_love->setDefaultAction(ui_->action_love);
ui_->playlist->SetActions(ui_->action_new_playlist, ui_->action_load_playlist, ui_->action_save_playlist, ui_->action_clear_playlist, ui_->action_next_playlist, /* These two actions aren't associated */ ui_->action_previous_playlist /* to a button but to the main window */ ); ui_->playlist->SetActions(ui_->action_new_playlist, ui_->action_load_playlist, ui_->action_save_playlist, ui_->action_clear_playlist, ui_->action_next_playlist, /* These two actions aren't associated */ ui_->action_previous_playlist /* to a button but to the main window */, ui_->action_save_all_playlists);
// Add the shuffle and repeat action groups to the menu // Add the shuffle and repeat action groups to the menu
ui_->action_shuffle_mode->setMenu(ui_->playlist_sequence->shuffle_menu()); ui_->action_shuffle_mode->setMenu(ui_->playlist_sequence->shuffle_menu());
ui_->action_repeat_mode->setMenu(ui_->playlist_sequence->repeat_menu()); ui_->action_repeat_mode->setMenu(ui_->playlist_sequence->repeat_menu());

View File

@@ -483,6 +483,7 @@
<addaction name="action_new_playlist"/> <addaction name="action_new_playlist"/>
<addaction name="action_save_playlist"/> <addaction name="action_save_playlist"/>
<addaction name="action_load_playlist"/> <addaction name="action_load_playlist"/>
<addaction name="action_save_all_playlists"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="action_jump"/> <addaction name="action_jump"/>
<addaction name="action_clear_playlist"/> <addaction name="action_clear_playlist"/>
@@ -747,6 +748,11 @@
<string>Ctrl+Shift+O</string> <string>Ctrl+Shift+O</string>
</property> </property>
</action> </action>
<action name="action_save_all_playlists">
<property name="text">
<string>&amp;Save all playlists</string>
</property>
</action>
<action name="action_next_playlist"> <action name="action_next_playlist">
<property name="text"> <property name="text">
<string>Go to next playlist tab</string> <string>Go to next playlist tab</string>

View File

@@ -132,7 +132,7 @@ PlaylistContainer::~PlaylistContainer() { delete ui_; }
PlaylistView *PlaylistContainer::view() const { return ui_->playlist; } PlaylistView *PlaylistContainer::view() const { return ui_->playlist; }
void PlaylistContainer::SetActions(QAction *new_playlist, QAction *load_playlist, QAction *save_playlist, QAction *clear_playlist, QAction *next_playlist, QAction *previous_playlist) { void PlaylistContainer::SetActions(QAction *new_playlist, QAction *load_playlist, QAction *save_playlist, QAction *clear_playlist, QAction *next_playlist, QAction *previous_playlist, QAction *save_all_playlists) {
ui_->create_new->setDefaultAction(new_playlist); ui_->create_new->setDefaultAction(new_playlist);
ui_->load->setDefaultAction(load_playlist); ui_->load->setDefaultAction(load_playlist);
@@ -148,6 +148,7 @@ void PlaylistContainer::SetActions(QAction *new_playlist, QAction *load_playlist
QObject::connect(next_playlist, &QAction::triggered, this, &PlaylistContainer::GoToNextPlaylistTab); QObject::connect(next_playlist, &QAction::triggered, this, &PlaylistContainer::GoToNextPlaylistTab);
QObject::connect(previous_playlist, &QAction::triggered, this, &PlaylistContainer::GoToPreviousPlaylistTab); QObject::connect(previous_playlist, &QAction::triggered, this, &PlaylistContainer::GoToPreviousPlaylistTab);
QObject::connect(clear_playlist, &QAction::triggered, this, &PlaylistContainer::ClearPlaylist); QObject::connect(clear_playlist, &QAction::triggered, this, &PlaylistContainer::ClearPlaylist);
QObject::connect(save_all_playlists, &QAction::triggered, manager_, &PlaylistManager::SaveAllPlaylists);
} }

View File

@@ -53,7 +53,7 @@ class PlaylistContainer : public QWidget {
static const char *kSettingsGroup; static const char *kSettingsGroup;
void SetActions(QAction *new_playlist, QAction *load_playlist, QAction *save_playlist, QAction *clear_playlist, QAction *next_playlist, QAction *previous_playlist); void SetActions(QAction *new_playlist, QAction *load_playlist, QAction *save_playlist, QAction *clear_playlist, QAction *next_playlist, QAction *previous_playlist, QAction *save_all_playlists);
void SetManager(PlaylistManager *manager); void SetManager(PlaylistManager *manager);
void ReloadSettings(); void ReloadSettings();

View File

@@ -650,3 +650,15 @@ void PlaylistManager::RateCurrentSong(const float rating) {
void PlaylistManager::RateCurrentSong2(const int rating) { void PlaylistManager::RateCurrentSong2(const int rating) {
RateCurrentSong(static_cast<float>(rating) / 5.0F); RateCurrentSong(static_cast<float>(rating) / 5.0F);
} }
void PlaylistManager::SaveAllPlaylists() {
const QString path = QFileDialog::getExistingDirectory(nullptr, tr("Select directory for the playlists"), QDir::homePath(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
for (QMap<int, Data>::const_iterator it = playlists_.constBegin(); it != playlists_.constEnd(); ++it) {
const Data &data = *it;
const QString filepath = path + "/" + data.name + ".m3u";
Save(it.key(), filepath, Playlist::Path_Absolute);
}
}

View File

@@ -222,6 +222,8 @@ class PlaylistManager : public PlaylistManagerInterface {
// Rate current song using 0 - 5 scale. // Rate current song using 0 - 5 scale.
void RateCurrentSong2(const int rating) override; void RateCurrentSong2(const int rating) override;
void SaveAllPlaylists();
private slots: private slots:
void SetActivePlaying() override; void SetActivePlaying() override;
void SetActivePaused() override; void SetActivePaused() override;