mirror of
https://github.com/clementine-player/Clementine
synced 2024-12-16 11:19:18 +01:00
Add Load context menu item to all radio services. Fixes issue #1013
This commit is contained in:
parent
f94f2cd03c
commit
5bb287c223
@ -271,8 +271,11 @@ void IcecastService::ShowContextMenu(RadioItem* item, const QModelIndex& index,
|
||||
else
|
||||
context_item_ = QModelIndex();
|
||||
|
||||
add_to_playlist_->setEnabled(context_item_.isValid() &&
|
||||
model_->GetSong(context_item_).is_valid());
|
||||
const bool can_play = context_item_.isValid() &&
|
||||
model_->GetSong(context_item_).is_valid();
|
||||
|
||||
add_to_playlist_->setEnabled(can_play);
|
||||
load_to_playlist_->setEnabled(can_play);
|
||||
context_menu_->popup(global_pos);
|
||||
}
|
||||
|
||||
@ -284,6 +287,8 @@ void IcecastService::EnsureMenuCreated() {
|
||||
|
||||
add_to_playlist_ = context_menu_->addAction(
|
||||
IconLoader::Load("media-playback-start"), tr("Add to playlist"), this, SLOT(AddToPlaylist()));
|
||||
load_to_playlist_ = context_menu_->addAction(
|
||||
IconLoader::Load("media-playback-start"), tr("Load"), this, SLOT(LoadToPlaylist()));
|
||||
context_menu_->addSeparator();
|
||||
context_menu_->addAction(IconLoader::Load("download"), tr("Open dir.xiph.org in browser"), this, SLOT(Homepage()));
|
||||
context_menu_->addAction(IconLoader::Load("view-refresh"), tr("Refresh station list"), this, SLOT(LoadDirectory()));
|
||||
@ -294,10 +299,19 @@ void IcecastService::Homepage() {
|
||||
}
|
||||
|
||||
void IcecastService::AddToPlaylist() {
|
||||
AddSelectedToPlaylist(false);
|
||||
}
|
||||
|
||||
void IcecastService::LoadToPlaylist() {
|
||||
AddSelectedToPlaylist(true);
|
||||
}
|
||||
|
||||
void IcecastService::AddSelectedToPlaylist(bool clear_first) {
|
||||
Song song(model_->GetSong(context_item_));
|
||||
if (!song.is_valid())
|
||||
return;
|
||||
|
||||
emit AddItemsToPlaylist(PlaylistItemList() <<
|
||||
PlaylistItemPtr(new SongPlaylistItem(song)));
|
||||
PlaylistItemPtr(new SongPlaylistItem(song)),
|
||||
clear_first);
|
||||
}
|
||||
|
@ -57,17 +57,21 @@ class IcecastService : public RadioService {
|
||||
void LoadDirectory();
|
||||
void Homepage();
|
||||
void AddToPlaylist();
|
||||
void LoadToPlaylist();
|
||||
|
||||
private:
|
||||
void EnsureMenuCreated();
|
||||
IcecastBackend::StationList ParseDirectory(QIODevice* device) const;
|
||||
IcecastBackend::Station ReadStation(QXmlStreamReader* reader) const;
|
||||
|
||||
void AddSelectedToPlaylist(bool clear_first);
|
||||
|
||||
RadioItem* root_;
|
||||
NetworkAccessManager* network_;
|
||||
QMenu* context_menu_;
|
||||
QModelIndex context_item_;
|
||||
QAction* add_to_playlist_;
|
||||
QAction* load_to_playlist_;
|
||||
|
||||
IcecastBackend* backend_;
|
||||
IcecastModel* model_;
|
||||
|
@ -384,6 +384,8 @@ void JamendoService::EnsureMenuCreated() {
|
||||
context_menu_ = new QMenu;
|
||||
add_to_playlist_ = context_menu_->addAction(IconLoader::Load("media-playback-start"),
|
||||
tr("Add to playlist"), this, SLOT(AddToPlaylist()));
|
||||
load_to_playlist_ = context_menu_->addAction(IconLoader::Load("media-playback-start"),
|
||||
tr("Load"), this, SLOT(LoadToPlaylist()));
|
||||
album_info_ = context_menu_->addAction(IconLoader::Load("view-media-lyrics"),
|
||||
tr("Album info on jamendo.com..."), this, SLOT(AlbumInfo()));
|
||||
download_album_ = context_menu_->addAction(IconLoader::Load("download"),
|
||||
@ -410,6 +412,7 @@ void JamendoService::ShowContextMenu(RadioItem*, const QModelIndex& index,
|
||||
}
|
||||
|
||||
add_to_playlist_->setEnabled(context_item_.isValid());
|
||||
load_to_playlist_->setEnabled(context_item_.isValid());
|
||||
album_info_->setEnabled(context_item_.isValid());
|
||||
download_album_->setEnabled(context_item_.isValid());
|
||||
context_menu_->popup(global_pos);
|
||||
@ -421,6 +424,14 @@ QWidget* JamendoService::HeaderWidget() const {
|
||||
}
|
||||
|
||||
void JamendoService::AddToPlaylist() {
|
||||
AddSelectedToPlaylist(false);
|
||||
}
|
||||
|
||||
void JamendoService::LoadToPlaylist() {
|
||||
AddSelectedToPlaylist(true);
|
||||
}
|
||||
|
||||
void JamendoService::AddSelectedToPlaylist(bool clear_first) {
|
||||
SongList songs(library_model_->GetChildSongs(
|
||||
library_sort_model_->mapToSource(context_item_)));
|
||||
|
||||
@ -430,7 +441,7 @@ void JamendoService::AddToPlaylist() {
|
||||
items << PlaylistItemPtr(new JamendoPlaylistItem(song));
|
||||
}
|
||||
|
||||
emit AddItemsToPlaylist(items);
|
||||
emit AddItemsToPlaylist(items, clear_first);
|
||||
}
|
||||
|
||||
void JamendoService::AlbumInfo() {
|
||||
|
@ -85,6 +85,8 @@ class JamendoService : public RadioService {
|
||||
|
||||
void EnsureMenuCreated();
|
||||
|
||||
void AddSelectedToPlaylist(bool clear_first);
|
||||
|
||||
private slots:
|
||||
void DownloadDirectory();
|
||||
void DownloadDirectoryProgress(qint64 received, qint64 total);
|
||||
@ -93,6 +95,7 @@ class JamendoService : public RadioService {
|
||||
void UpdateTotalSongCount(int count);
|
||||
|
||||
void AddToPlaylist();
|
||||
void LoadToPlaylist();
|
||||
void AlbumInfo();
|
||||
void DownloadAlbum();
|
||||
void Homepage();
|
||||
@ -105,6 +108,7 @@ class JamendoService : public RadioService {
|
||||
QModelIndex context_item_;
|
||||
|
||||
QAction* add_to_playlist_;
|
||||
QAction* load_to_playlist_;
|
||||
QAction* album_info_;
|
||||
QAction* download_album_;
|
||||
|
||||
|
@ -69,6 +69,8 @@ LastFMService::LastFMService(RadioModel* parent)
|
||||
|
||||
play_action_ = context_menu_->addAction(
|
||||
IconLoader::Load("media-playback-start"), tr("Add to playlist"), this, SLOT(AddToPlaylist()));
|
||||
load_action_ = context_menu_->addAction(
|
||||
IconLoader::Load("media-playback-start"), tr("Load"), this, SLOT(LoadToPlaylist()));
|
||||
remove_action_ = context_menu_->addAction(
|
||||
IconLoader::Load("list-remove"), tr("Remove"), this, SLOT(Remove()));
|
||||
context_menu_->addSeparator();
|
||||
@ -479,6 +481,7 @@ void LastFMService::ShowContextMenu(RadioItem* item, const QModelIndex&,
|
||||
}
|
||||
|
||||
play_action_->setEnabled(item->playable);
|
||||
load_action_->setEnabled(item->playable);
|
||||
context_menu_->popup(global_pos);
|
||||
}
|
||||
|
||||
@ -557,7 +560,11 @@ void LastFMService::RefreshNeighboursFinished() {
|
||||
}
|
||||
|
||||
void LastFMService::AddToPlaylist() {
|
||||
emit AddItemToPlaylist(context_item_);
|
||||
emit AddItemToPlaylist(context_item_, false);
|
||||
}
|
||||
|
||||
void LastFMService::LoadToPlaylist() {
|
||||
emit AddItemToPlaylist(context_item_, true);
|
||||
}
|
||||
|
||||
void LastFMService::AddArtistRadio() {
|
||||
@ -587,7 +594,7 @@ void LastFMService::AddArtistOrTag(const QString& name,
|
||||
item->playable = true;
|
||||
item->lazy_loaded = true;
|
||||
item->InsertNotify(list);
|
||||
emit AddItemToPlaylist(item);
|
||||
emit AddItemToPlaylist(item, false);
|
||||
|
||||
SaveList(name, list);
|
||||
}
|
||||
|
@ -129,6 +129,7 @@ class LastFMService : public RadioService {
|
||||
void TunerError(lastfm::ws::Error error);
|
||||
|
||||
void AddToPlaylist();
|
||||
void LoadToPlaylist();
|
||||
void AddArtistRadio();
|
||||
void AddTagRadio();
|
||||
void AddCustomRadio();
|
||||
@ -157,6 +158,8 @@ class LastFMService : public RadioService {
|
||||
|
||||
void Tune(const lastfm::RadioStation& station);
|
||||
|
||||
void AddSelectedToPlaylist(bool clear_first);
|
||||
|
||||
private:
|
||||
lastfm::Audioscrobbler* scrobbler_;
|
||||
lastfm::Track last_track_;
|
||||
@ -167,6 +170,7 @@ class LastFMService : public RadioService {
|
||||
|
||||
boost::scoped_ptr<QMenu> context_menu_;
|
||||
QAction* play_action_;
|
||||
QAction* load_action_;
|
||||
QAction* remove_action_;
|
||||
QAction* add_artist_action_;
|
||||
QAction* add_tag_action_;
|
||||
|
@ -253,6 +253,8 @@ void MagnatuneService::EnsureMenuCreated() {
|
||||
|
||||
add_to_playlist_ = context_menu_->addAction(
|
||||
IconLoader::Load("media-playback-start"), tr("Add to playlist"), this, SLOT(AddToPlaylist()));
|
||||
load_to_playlist_ = context_menu_->addAction(
|
||||
IconLoader::Load("media-playback-start"), tr("Load"), this, SLOT(LoadToPlaylist()));
|
||||
download_ = context_menu_->addAction(
|
||||
IconLoader::Load("download"), tr("Download this album"), this, SLOT(Download()));
|
||||
context_menu_->addSeparator();
|
||||
@ -278,11 +280,20 @@ void MagnatuneService::ShowContextMenu(RadioItem*, const QModelIndex& index,
|
||||
context_item_ = QModelIndex();
|
||||
|
||||
add_to_playlist_->setEnabled(context_item_.isValid());
|
||||
load_to_playlist_->setEnabled(context_item_.isValid());
|
||||
download_->setEnabled(context_item_.isValid() && membership_ == Membership_Download);
|
||||
context_menu_->popup(global_pos);
|
||||
}
|
||||
|
||||
void MagnatuneService::AddToPlaylist() {
|
||||
AddSelectedToPlaylist(false);
|
||||
}
|
||||
|
||||
void MagnatuneService::LoadToPlaylist() {
|
||||
AddSelectedToPlaylist(true);
|
||||
}
|
||||
|
||||
void MagnatuneService::AddSelectedToPlaylist(bool clear_first) {
|
||||
SongList songs(library_model_->GetChildSongs(
|
||||
library_sort_model_->mapToSource(context_item_)));
|
||||
|
||||
@ -292,7 +303,7 @@ void MagnatuneService::AddToPlaylist() {
|
||||
items << shared_ptr<PlaylistItem>(new MagnatunePlaylistItem(song));
|
||||
}
|
||||
|
||||
emit AddItemsToPlaylist(items);
|
||||
emit AddItemsToPlaylist(items, clear_first);
|
||||
}
|
||||
|
||||
void MagnatuneService::Homepage() {
|
||||
|
@ -95,12 +95,14 @@ class MagnatuneService : public RadioService {
|
||||
void ReloadDatabaseFinished();
|
||||
|
||||
void AddToPlaylist();
|
||||
void LoadToPlaylist();
|
||||
void Download();
|
||||
void Homepage();
|
||||
void ShowConfig();
|
||||
|
||||
private:
|
||||
void EnsureMenuCreated();
|
||||
void AddSelectedToPlaylist(bool clear_first);
|
||||
|
||||
Song ReadTrack(QXmlStreamReader& reader);
|
||||
|
||||
@ -110,6 +112,7 @@ class MagnatuneService : public RadioService {
|
||||
QModelIndex context_item_;
|
||||
|
||||
QAction* add_to_playlist_;
|
||||
QAction* load_to_playlist_;
|
||||
QAction* download_;
|
||||
|
||||
LibraryBackend* library_backend_;
|
||||
|
@ -59,8 +59,8 @@ void RadioModel::AddService(RadioService *service) {
|
||||
connect(service, SIGNAL(StreamError(QString)), SIGNAL(StreamError(QString)));
|
||||
connect(service, SIGNAL(StreamMetadataFound(QUrl,Song)), SIGNAL(StreamMetadataFound(QUrl,Song)));
|
||||
connect(service, SIGNAL(OpenSettingsAtPage(SettingsDialog::Page)), SIGNAL(OpenSettingsAtPage(SettingsDialog::Page)));
|
||||
connect(service, SIGNAL(AddItemToPlaylist(RadioItem*)), SIGNAL(AddItemToPlaylist(RadioItem*)));
|
||||
connect(service, SIGNAL(AddItemsToPlaylist(PlaylistItemList)), SIGNAL(AddItemsToPlaylist(PlaylistItemList)));
|
||||
connect(service, SIGNAL(AddItemToPlaylist(RadioItem*,bool)), SIGNAL(AddItemToPlaylist(RadioItem*,bool)));
|
||||
connect(service, SIGNAL(AddItemsToPlaylist(PlaylistItemList,bool)), SIGNAL(AddItemsToPlaylist(PlaylistItemList,bool)));
|
||||
}
|
||||
|
||||
RadioService* RadioModel::ServiceByName(const QString& name) {
|
||||
|
@ -80,8 +80,8 @@ class RadioModel : public SimpleTreeModel<RadioItem> {
|
||||
void StreamMetadataFound(const QUrl& original_url, const Song& song);
|
||||
void OpenSettingsAtPage(SettingsDialog::Page);
|
||||
|
||||
void AddItemToPlaylist(RadioItem* item);
|
||||
void AddItemsToPlaylist(const PlaylistItemList& items);
|
||||
void AddItemToPlaylist(RadioItem* item, bool clear_first);
|
||||
void AddItemsToPlaylist(const PlaylistItemList& items, bool clear_first);
|
||||
|
||||
protected:
|
||||
void LazyPopulate(RadioItem* parent);
|
||||
|
@ -69,8 +69,8 @@ class RadioService : public QObject {
|
||||
void StreamMetadataFound(const QUrl& original_url, const Song& song);
|
||||
void OpenSettingsAtPage(SettingsDialog::Page page);
|
||||
|
||||
void AddItemToPlaylist(RadioItem* item);
|
||||
void AddItemsToPlaylist(const PlaylistItemList& items);
|
||||
void AddItemToPlaylist(RadioItem* item, bool clear_first);
|
||||
void AddItemsToPlaylist(const PlaylistItemList& items, bool clear_first);
|
||||
|
||||
private:
|
||||
RadioModel* model_;
|
||||
|
@ -90,6 +90,7 @@ void SavedRadio::ShowContextMenu(RadioItem* item, const QModelIndex&,
|
||||
if (!context_menu_) {
|
||||
context_menu_ = new QMenu;
|
||||
add_action_ = context_menu_->addAction(IconLoader::Load("media-playback-start"), tr("Add to playlist"), this, SLOT(AddToPlaylist()));
|
||||
load_action_ = context_menu_->addAction(IconLoader::Load("media-playback-start"), tr("Load"), this, SLOT(LoadToPlaylist()));
|
||||
remove_action_ = context_menu_->addAction(IconLoader::Load("list-remove"), tr("Remove"), this, SLOT(Remove()));
|
||||
edit_action_ = context_menu_->addAction(IconLoader::Load("edit-rename"), tr("Edit..."), this, SLOT(Edit()));
|
||||
context_menu_->addSeparator();
|
||||
@ -99,6 +100,7 @@ void SavedRadio::ShowContextMenu(RadioItem* item, const QModelIndex&,
|
||||
context_item_ = item;
|
||||
|
||||
add_action_->setEnabled(item != root_);
|
||||
load_action_->setEnabled(item != root_);
|
||||
remove_action_->setEnabled(item != root_);
|
||||
edit_action_->setEnabled(item != root_);
|
||||
|
||||
@ -135,7 +137,11 @@ void SavedRadio::Edit() {
|
||||
}
|
||||
|
||||
void SavedRadio::AddToPlaylist() {
|
||||
emit AddItemToPlaylist(context_item_);
|
||||
emit AddItemToPlaylist(context_item_, false);
|
||||
}
|
||||
|
||||
void SavedRadio::LoadToPlaylist() {
|
||||
emit AddItemToPlaylist(context_item_, true);
|
||||
}
|
||||
|
||||
RadioItem* SavedRadio::ItemForStream(const Stream& stream, RadioItem* parent) {
|
||||
|
@ -53,6 +53,7 @@ class SavedRadio : public RadioService {
|
||||
|
||||
private slots:
|
||||
void AddToPlaylist();
|
||||
void LoadToPlaylist();
|
||||
void Remove();
|
||||
void Edit();
|
||||
|
||||
@ -78,6 +79,7 @@ class SavedRadio : public RadioService {
|
||||
RadioItem* context_item_;
|
||||
|
||||
QAction* add_action_;
|
||||
QAction* load_action_;
|
||||
QAction* remove_action_;
|
||||
QAction* edit_action_;
|
||||
|
||||
|
@ -73,6 +73,7 @@ void SomaFMService::ShowContextMenu(RadioItem* item, const QModelIndex&,
|
||||
if (!context_menu_) {
|
||||
context_menu_ = new QMenu;
|
||||
context_menu_->addAction(IconLoader::Load("media-playback-start"), tr("Add to playlist"), this, SLOT(AddToPlaylist()));
|
||||
context_menu_->addAction(IconLoader::Load("media-playback-start"), tr("Load"), this, SLOT(LoadToPlaylist()));
|
||||
context_menu_->addSeparator();
|
||||
context_menu_->addAction(IconLoader::Load("download"), tr("Open somafm.com in browser"), this, SLOT(Homepage()));
|
||||
context_menu_->addAction(IconLoader::Load("view-refresh"), tr("Refresh channels"), this, SLOT(RefreshChannels()));
|
||||
@ -225,7 +226,11 @@ void SomaFMService::Homepage() {
|
||||
}
|
||||
|
||||
void SomaFMService::AddToPlaylist() {
|
||||
emit AddItemToPlaylist(context_item_);
|
||||
emit AddItemToPlaylist(context_item_, false);
|
||||
}
|
||||
|
||||
void SomaFMService::LoadToPlaylist() {
|
||||
emit AddItemToPlaylist(context_item_, true);
|
||||
}
|
||||
|
||||
PlaylistItem::Options SomaFMService::playlistitem_options() const {
|
||||
|
@ -56,6 +56,7 @@ class SomaFMService : public RadioService {
|
||||
void LoadPlaylistFinished();
|
||||
|
||||
void AddToPlaylist();
|
||||
void LoadToPlaylist();
|
||||
void Homepage();
|
||||
|
||||
private:
|
||||
|
@ -47,7 +47,7 @@ public slots:
|
||||
|
||||
signals:
|
||||
void ShowSettingsDialog();
|
||||
void AddPlaylistItems(const PlaylistItemList& items);
|
||||
void AddPlaylistItems(const PlaylistItemList& items, bool clear_first = false);
|
||||
|
||||
protected:
|
||||
void showEvent(QShowEvent* e);
|
||||
|
@ -449,8 +449,8 @@ MainWindow::MainWindow(Engine::Type engine, QWidget *parent)
|
||||
connect(radio_model_, SIGNAL(AsyncLoadFinished(PlaylistItem::SpecialLoadResult)), player_, SLOT(HandleSpecialLoad(PlaylistItem::SpecialLoadResult)));
|
||||
connect(radio_model_, SIGNAL(StreamMetadataFound(QUrl,Song)), playlists_, SLOT(SetActiveStreamMetadata(QUrl,Song)));
|
||||
connect(radio_model_, SIGNAL(OpenSettingsAtPage(SettingsDialog::Page)), SLOT(OpenSettingsDialogAtPage(SettingsDialog::Page)));
|
||||
connect(radio_model_, SIGNAL(AddItemToPlaylist(RadioItem*)), SLOT(InsertRadioItem(RadioItem*)));
|
||||
connect(radio_model_, SIGNAL(AddItemsToPlaylist(PlaylistItemList)), SLOT(InsertRadioItems(PlaylistItemList)));
|
||||
connect(radio_model_, SIGNAL(AddItemToPlaylist(RadioItem*,bool)), SLOT(InsertRadioItem(RadioItem*,bool)));
|
||||
connect(radio_model_, SIGNAL(AddItemsToPlaylist(PlaylistItemList,bool)), SLOT(InsertRadioItems(PlaylistItemList,bool)));
|
||||
connect(radio_model_->GetLastFMService(), SIGNAL(ScrobblingEnabledChanged(bool)), SLOT(ScrobblingEnabledChanged(bool)));
|
||||
connect(radio_model_->GetLastFMService(), SIGNAL(ButtonVisibilityChanged(bool)), SLOT(LastFMButtonVisibilityChanged(bool)));
|
||||
connect(radio_view_->tree(), SIGNAL(doubleClicked(QModelIndex)), SLOT(RadioDoubleClick(QModelIndex)));
|
||||
@ -1006,7 +1006,10 @@ void MainWindow::RadioDoubleClick(const QModelIndex& index) {
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::InsertRadioItem(RadioItem* item) {
|
||||
void MainWindow::InsertRadioItem(RadioItem* item, bool clear_first) {
|
||||
if (clear_first)
|
||||
playlists_->ClearCurrent();
|
||||
|
||||
QModelIndex first_song = playlists_->current()->InsertRadioStations(
|
||||
QList<RadioItem*>() << item);
|
||||
|
||||
@ -1021,7 +1024,10 @@ void MainWindow::InsertRadioItem(RadioItem* item) {
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::InsertRadioItems(const PlaylistItemList& items) {
|
||||
void MainWindow::InsertRadioItems(const PlaylistItemList& items, bool clear_first) {
|
||||
if (clear_first)
|
||||
playlists_->ClearCurrent();
|
||||
|
||||
QModelIndex first_song = playlists_->current()->InsertItems(items);
|
||||
|
||||
if (!playlists_->current()->proxy()->mapFromSource(first_song).isValid()) {
|
||||
@ -1666,7 +1672,8 @@ void MainWindow::ConnectInfoView(SongInfoBase* view) {
|
||||
connect(player_, SIGNAL(Stopped()), view, SLOT(SongFinished()));
|
||||
|
||||
connect(view, SIGNAL(ShowSettingsDialog()), SLOT(ShowSongInfoConfig()));
|
||||
connect(view, SIGNAL(AddPlaylistItems(PlaylistItemList)), SLOT(InsertRadioItems(PlaylistItemList)));
|
||||
connect(view, SIGNAL(AddPlaylistItems(PlaylistItemList,bool)),
|
||||
SLOT(InsertRadioItems(PlaylistItemList,bool)));
|
||||
}
|
||||
|
||||
void MainWindow::ShowSongInfoConfig() {
|
||||
|
@ -162,8 +162,8 @@ class MainWindow : public QMainWindow, public PlatformInterface {
|
||||
void UpdateTrackPosition();
|
||||
|
||||
void RadioDoubleClick(const QModelIndex& index);
|
||||
void InsertRadioItem(RadioItem*);
|
||||
void InsertRadioItems(const PlaylistItemList& items);
|
||||
void InsertRadioItem(RadioItem*, bool clear_first);
|
||||
void InsertRadioItems(const PlaylistItemList& items, bool clear_first);
|
||||
void ScrobblingEnabledChanged(bool value);
|
||||
void LastFMButtonVisibilityChanged(bool value);
|
||||
void Love();
|
||||
|
Loading…
Reference in New Issue
Block a user