Rename "Internet" to "Streaming"
This commit is contained in:
parent
718af984ab
commit
299415a889
@ -256,18 +256,18 @@ set(SOURCES
|
||||
osd/osdbase.cpp
|
||||
osd/osdpretty.cpp
|
||||
|
||||
internet/internetservices.cpp
|
||||
internet/internetservice.cpp
|
||||
internet/internetplaylistitem.cpp
|
||||
internet/internetsearchview.cpp
|
||||
internet/internetsearchmodel.cpp
|
||||
internet/internetsearchsortmodel.cpp
|
||||
internet/internetsearchitemdelegate.cpp
|
||||
internet/internetsongsview.cpp
|
||||
internet/internettabsview.cpp
|
||||
internet/internetcollectionview.cpp
|
||||
internet/internetcollectionviewcontainer.cpp
|
||||
internet/internetsearchview.cpp
|
||||
streaming/streamingservices.cpp
|
||||
streaming/streamingservice.cpp
|
||||
streaming/streamplaylistitem.cpp
|
||||
streaming/streamingsearchview.cpp
|
||||
streaming/streamingsearchmodel.cpp
|
||||
streaming/streamingsearchsortmodel.cpp
|
||||
streaming/streamingsearchitemdelegate.cpp
|
||||
streaming/streamingsongsview.cpp
|
||||
streaming/streamingtabsview.cpp
|
||||
streaming/streamingcollectionview.cpp
|
||||
streaming/streamingcollectionviewcontainer.cpp
|
||||
streaming/streamingsearchview.cpp
|
||||
|
||||
radios/radioservices.cpp
|
||||
radios/radiobackend.cpp
|
||||
@ -503,17 +503,17 @@ set(HEADERS
|
||||
osd/osdbase.h
|
||||
osd/osdpretty.h
|
||||
|
||||
internet/internetservices.h
|
||||
internet/internetservice.h
|
||||
internet/internetsongmimedata.h
|
||||
internet/internetsearchmodel.h
|
||||
internet/internetsearchsortmodel.h
|
||||
internet/internetsearchitemdelegate.h
|
||||
internet/internetsearchview.h
|
||||
internet/internetsongsview.h
|
||||
internet/internettabsview.h
|
||||
internet/internetcollectionview.h
|
||||
internet/internetcollectionviewcontainer.h
|
||||
streaming/streamingservices.h
|
||||
streaming/streamingservice.h
|
||||
streaming/streamsongmimedata.h
|
||||
streaming/streamingsearchmodel.h
|
||||
streaming/streamingsearchsortmodel.h
|
||||
streaming/streamingsearchitemdelegate.h
|
||||
streaming/streamingsearchview.h
|
||||
streaming/streamingsongsview.h
|
||||
streaming/streamingtabsview.h
|
||||
streaming/streamingcollectionview.h
|
||||
streaming/streamingcollectionviewcontainer.h
|
||||
|
||||
radios/radioservices.h
|
||||
radios/radiobackend.h
|
||||
@ -604,9 +604,9 @@ set(UI
|
||||
|
||||
osd/osdpretty.ui
|
||||
|
||||
internet/internettabsview.ui
|
||||
internet/internetcollectionviewcontainer.ui
|
||||
internet/internetsearchview.ui
|
||||
streaming/streamingtabsview.ui
|
||||
streaming/streamingcollectionviewcontainer.ui
|
||||
streaming/streamingsearchview.ui
|
||||
|
||||
radios/radioviewcontainer.ui
|
||||
|
||||
|
@ -79,7 +79,7 @@
|
||||
# include "scrobbler/subsonicscrobbler.h"
|
||||
#endif
|
||||
|
||||
#include "internet/internetservices.h"
|
||||
#include "streaming/streamingservices.h"
|
||||
|
||||
#ifdef HAVE_SUBSONIC
|
||||
# include "subsonic/subsonicservice.h"
|
||||
@ -175,18 +175,18 @@ class ApplicationImpl {
|
||||
lyrics_providers->ReloadSettings();
|
||||
return lyrics_providers;
|
||||
}),
|
||||
internet_services_([app]() {
|
||||
InternetServices *internet_services = new InternetServices();
|
||||
streaming_services_([app]() {
|
||||
StreamingServices *streaming_services = new StreamingServices();
|
||||
#ifdef HAVE_SUBSONIC
|
||||
internet_services->AddService(make_shared<SubsonicService>(app));
|
||||
streaming_services->AddService(make_shared<SubsonicService>(app));
|
||||
#endif
|
||||
#ifdef HAVE_TIDAL
|
||||
internet_services->AddService(make_shared<TidalService>(app));
|
||||
streaming_services->AddService(make_shared<TidalService>(app));
|
||||
#endif
|
||||
#ifdef HAVE_QOBUZ
|
||||
internet_services->AddService(make_shared<QobuzService>(app));
|
||||
streaming_services->AddService(make_shared<QobuzService>(app));
|
||||
#endif
|
||||
return internet_services;
|
||||
return streaming_services;
|
||||
}),
|
||||
radio_services_([app]() { return new RadioServices(app); }),
|
||||
scrobbler_([app]() {
|
||||
@ -222,7 +222,7 @@ class ApplicationImpl {
|
||||
Lazy<AlbumCoverLoader> album_cover_loader_;
|
||||
Lazy<CurrentAlbumCoverLoader> current_albumcover_loader_;
|
||||
Lazy<LyricsProviders> lyrics_providers_;
|
||||
Lazy<InternetServices> internet_services_;
|
||||
Lazy<StreamingServices> streaming_services_;
|
||||
Lazy<RadioServices> radio_services_;
|
||||
Lazy<AudioScrobbler> scrobbler_;
|
||||
#ifdef HAVE_MOODBAR
|
||||
@ -287,7 +287,7 @@ void Application::Exit() {
|
||||
#ifndef Q_OS_WIN
|
||||
<< &*device_manager()
|
||||
#endif
|
||||
<< &*internet_services()
|
||||
<< &*streaming_services()
|
||||
<< &*radio_services()->radio_backend();
|
||||
|
||||
QObject::connect(&*tag_reader_client(), &TagReaderClient::ExitFinished, this, &Application::ExitReceived);
|
||||
@ -307,8 +307,8 @@ void Application::Exit() {
|
||||
device_manager()->Exit();
|
||||
#endif
|
||||
|
||||
QObject::connect(&*internet_services(), &InternetServices::ExitFinished, this, &Application::ExitReceived);
|
||||
internet_services()->Exit();
|
||||
QObject::connect(&*streaming_services(), &StreamingServices::ExitFinished, this, &Application::ExitReceived);
|
||||
streaming_services()->Exit();
|
||||
|
||||
QObject::connect(&*radio_services()->radio_backend(), &RadioBackend::ExitFinished, this, &Application::ExitReceived);
|
||||
radio_services()->radio_backend()->ExitAsync();
|
||||
@ -353,7 +353,7 @@ SharedPtr<CurrentAlbumCoverLoader> Application::current_albumcover_loader() cons
|
||||
SharedPtr<LyricsProviders> Application::lyrics_providers() const { return p_->lyrics_providers_.ptr(); }
|
||||
SharedPtr<PlaylistBackend> Application::playlist_backend() const { return p_->playlist_backend_.ptr(); }
|
||||
SharedPtr<PlaylistManager> Application::playlist_manager() const { return p_->playlist_manager_.ptr(); }
|
||||
SharedPtr<InternetServices> Application::internet_services() const { return p_->internet_services_.ptr(); }
|
||||
SharedPtr<StreamingServices> Application::streaming_services() const { return p_->streaming_services_.ptr(); }
|
||||
SharedPtr<RadioServices> Application::radio_services() const { return p_->radio_services_.ptr(); }
|
||||
SharedPtr<AudioScrobbler> Application::scrobbler() const { return p_->scrobbler_.ptr(); }
|
||||
SharedPtr<LastFMImport> Application::lastfm_import() const { return p_->lastfm_import_.ptr(); }
|
||||
|
@ -58,7 +58,7 @@ class CoverProviders;
|
||||
class LyricsProviders;
|
||||
class AudioScrobbler;
|
||||
class LastFMImport;
|
||||
class InternetServices;
|
||||
class StreamingServices;
|
||||
class RadioServices;
|
||||
#ifdef HAVE_MOODBAR
|
||||
class MoodbarController;
|
||||
@ -97,7 +97,7 @@ class Application : public QObject {
|
||||
|
||||
SharedPtr<AudioScrobbler> scrobbler() const;
|
||||
|
||||
SharedPtr<InternetServices> internet_services() const;
|
||||
SharedPtr<StreamingServices> streaming_services() const;
|
||||
SharedPtr<RadioServices> radio_services() const;
|
||||
|
||||
#ifdef HAVE_MOODBAR
|
||||
|
@ -182,12 +182,12 @@
|
||||
# include "settings/qobuzsettingspage.h"
|
||||
#endif
|
||||
|
||||
#include "internet/internetservices.h"
|
||||
#include "internet/internetservice.h"
|
||||
#include "internet/internetsongsview.h"
|
||||
#include "internet/internettabsview.h"
|
||||
#include "internet/internetcollectionview.h"
|
||||
#include "internet/internetsearchview.h"
|
||||
#include "streaming/streamingservices.h"
|
||||
#include "streaming/streamingservice.h"
|
||||
#include "streaming/streamingsongsview.h"
|
||||
#include "streaming/streamingtabsview.h"
|
||||
#include "streaming/streamingcollectionview.h"
|
||||
#include "streaming/streamingsearchview.h"
|
||||
|
||||
#include "radios/radioservices.h"
|
||||
#include "radios/radioviewcontainer.h"
|
||||
@ -303,13 +303,13 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
|
||||
}),
|
||||
smartplaylists_view_(new SmartPlaylistsViewContainer(app, this)),
|
||||
#ifdef HAVE_SUBSONIC
|
||||
subsonic_view_(new InternetSongsView(app_, app->internet_services()->ServiceBySource(Song::Source::Subsonic), QLatin1String(SubsonicSettingsPage::kSettingsGroup), SettingsDialog::Page::Subsonic, this)),
|
||||
subsonic_view_(new StreamingSongsView(app_, app->streaming_services()->ServiceBySource(Song::Source::Subsonic), QLatin1String(SubsonicSettingsPage::kSettingsGroup), SettingsDialog::Page::Subsonic, this)),
|
||||
#endif
|
||||
#ifdef HAVE_TIDAL
|
||||
tidal_view_(new InternetTabsView(app_, app->internet_services()->ServiceBySource(Song::Source::Tidal), QLatin1String(TidalSettingsPage::kSettingsGroup), SettingsDialog::Page::Tidal, this)),
|
||||
tidal_view_(new StreamingTabsView(app_, app->streaming_services()->ServiceBySource(Song::Source::Tidal), QLatin1String(TidalSettingsPage::kSettingsGroup), SettingsDialog::Page::Tidal, this)),
|
||||
#endif
|
||||
#ifdef HAVE_QOBUZ
|
||||
qobuz_view_(new InternetTabsView(app_, app->internet_services()->ServiceBySource(Song::Source::Qobuz), QLatin1String(QobuzSettingsPage::kSettingsGroup), SettingsDialog::Page::Qobuz, this)),
|
||||
qobuz_view_(new StreamingTabsView(app_, app->streaming_services()->ServiceBySource(Song::Source::Qobuz), QLatin1String(QobuzSettingsPage::kSettingsGroup), SettingsDialog::Page::Qobuz, this)),
|
||||
#endif
|
||||
radio_view_(new RadioViewContainer(this)),
|
||||
lastfm_import_dialog_(new LastFMImportDialog(app_->lastfm_import(), this)),
|
||||
@ -694,24 +694,24 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
|
||||
collection_view_->filter_widget()->AddMenuAction(collection_config_action);
|
||||
|
||||
#ifdef HAVE_SUBSONIC
|
||||
QObject::connect(subsonic_view_->view(), &InternetCollectionView::AddToPlaylistSignal, this, &MainWindow::AddToPlaylist);
|
||||
QObject::connect(subsonic_view_->view(), &StreamingCollectionView::AddToPlaylistSignal, this, &MainWindow::AddToPlaylist);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_TIDAL
|
||||
QObject::connect(tidal_view_->artists_collection_view(), &InternetCollectionView::AddToPlaylistSignal, this, &MainWindow::AddToPlaylist);
|
||||
QObject::connect(tidal_view_->albums_collection_view(), &InternetCollectionView::AddToPlaylistSignal, this, &MainWindow::AddToPlaylist);
|
||||
QObject::connect(tidal_view_->songs_collection_view(), &InternetCollectionView::AddToPlaylistSignal, this, &MainWindow::AddToPlaylist);
|
||||
QObject::connect(tidal_view_->search_view(), &InternetSearchView::AddToPlaylist, this, &MainWindow::AddToPlaylist);
|
||||
if (TidalServicePtr tidalservice = app_->internet_services()->Service<TidalService>()) {
|
||||
QObject::connect(tidal_view_->artists_collection_view(), &StreamingCollectionView::AddToPlaylistSignal, this, &MainWindow::AddToPlaylist);
|
||||
QObject::connect(tidal_view_->albums_collection_view(), &StreamingCollectionView::AddToPlaylistSignal, this, &MainWindow::AddToPlaylist);
|
||||
QObject::connect(tidal_view_->songs_collection_view(), &StreamingCollectionView::AddToPlaylistSignal, this, &MainWindow::AddToPlaylist);
|
||||
QObject::connect(tidal_view_->search_view(), &StreamingSearchView::AddToPlaylist, this, &MainWindow::AddToPlaylist);
|
||||
if (TidalServicePtr tidalservice = app_->streaming_services()->Service<TidalService>()) {
|
||||
QObject::connect(this, &MainWindow::AuthorizationUrlReceived, &*tidalservice, &TidalService::AuthorizationUrlReceived);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_QOBUZ
|
||||
QObject::connect(qobuz_view_->artists_collection_view(), &InternetCollectionView::AddToPlaylistSignal, this, &MainWindow::AddToPlaylist);
|
||||
QObject::connect(qobuz_view_->albums_collection_view(), &InternetCollectionView::AddToPlaylistSignal, this, &MainWindow::AddToPlaylist);
|
||||
QObject::connect(qobuz_view_->songs_collection_view(), &InternetCollectionView::AddToPlaylistSignal, this, &MainWindow::AddToPlaylist);
|
||||
QObject::connect(qobuz_view_->search_view(), &InternetSearchView::AddToPlaylist, this, &MainWindow::AddToPlaylist);
|
||||
QObject::connect(qobuz_view_->artists_collection_view(), &StreamingCollectionView::AddToPlaylistSignal, this, &MainWindow::AddToPlaylist);
|
||||
QObject::connect(qobuz_view_->albums_collection_view(), &StreamingCollectionView::AddToPlaylistSignal, this, &MainWindow::AddToPlaylist);
|
||||
QObject::connect(qobuz_view_->songs_collection_view(), &StreamingCollectionView::AddToPlaylistSignal, this, &MainWindow::AddToPlaylist);
|
||||
QObject::connect(qobuz_view_->search_view(), &StreamingSearchView::AddToPlaylist, this, &MainWindow::AddToPlaylist);
|
||||
#endif
|
||||
|
||||
QObject::connect(radio_view_, &RadioViewContainer::Refresh, &*app_->radio_services(), &RadioServices::RefreshChannels);
|
||||
@ -1213,7 +1213,7 @@ void MainWindow::ReloadAllSettings() {
|
||||
playlist_list_->ReloadSettings();
|
||||
smartplaylists_view_->ReloadSettings();
|
||||
radio_view_->ReloadSettings();
|
||||
app_->internet_services()->ReloadSettings();
|
||||
app_->streaming_services()->ReloadSettings();
|
||||
app_->radio_services()->ReloadSettings();
|
||||
app_->cover_providers()->ReloadSettings();
|
||||
app_->lyrics_providers()->ReloadSettings();
|
||||
|
@ -92,8 +92,8 @@ class TrackSelectionDialog;
|
||||
class TranscodeDialog;
|
||||
#endif
|
||||
class Ui_MainWindow;
|
||||
class InternetSongsView;
|
||||
class InternetTabsView;
|
||||
class StreamingSongsView;
|
||||
class StreamingTabsView;
|
||||
class SmartPlaylistsViewContainer;
|
||||
#ifdef Q_OS_WIN
|
||||
class Windows7ThumbBar;
|
||||
@ -341,9 +341,9 @@ class MainWindow : public QMainWindow, public PlatformInterface {
|
||||
|
||||
SmartPlaylistsViewContainer *smartplaylists_view_;
|
||||
|
||||
InternetSongsView *subsonic_view_;
|
||||
InternetTabsView *tidal_view_;
|
||||
InternetTabsView *qobuz_view_;
|
||||
StreamingSongsView *subsonic_view_;
|
||||
StreamingTabsView *tidal_view_;
|
||||
StreamingTabsView *qobuz_view_;
|
||||
|
||||
RadioViewContainer *radio_view_;
|
||||
|
||||
|
@ -66,7 +66,7 @@
|
||||
# include "dbus/metatypes.h"
|
||||
#endif
|
||||
|
||||
#include "internet/internetsearchview.h"
|
||||
#include "streaming/streamingsearchview.h"
|
||||
|
||||
#include "smartplaylists/playlistgenerator_fwd.h"
|
||||
|
||||
@ -147,8 +147,8 @@ void RegisterMetaTypes() {
|
||||
qDBusRegisterMetaType<ManagedObjectList>();
|
||||
#endif
|
||||
|
||||
qRegisterMetaType<InternetSearchView::Result>("InternetSearchView::Result");
|
||||
qRegisterMetaType<InternetSearchView::ResultList>("InternetSearchView::ResultList");
|
||||
qRegisterMetaType<StreamingSearchView::Result>("StreamingSearchView::Result");
|
||||
qRegisterMetaType<StreamingSearchView::ResultList>("StreamingSearchView::ResultList");
|
||||
|
||||
qRegisterMetaType<RadioChannel>("RadioChannel");
|
||||
qRegisterMetaType<RadioChannelList>("RadioChannelList");
|
||||
|
@ -67,8 +67,8 @@
|
||||
#include "collection/collectionfilteroptions.h"
|
||||
#include "collection/collectionbackend.h"
|
||||
#include "settings/coverssettingspage.h"
|
||||
#include "internet/internetservices.h"
|
||||
#include "internet/internetservice.h"
|
||||
#include "streaming/streamingservices.h"
|
||||
#include "streaming/streamingservice.h"
|
||||
#include "albumcoverchoicecontroller.h"
|
||||
#include "albumcoverfetcher.h"
|
||||
#include "albumcoverloader.h"
|
||||
@ -578,7 +578,7 @@ void AlbumCoverChoiceController::SaveArtManualToSong(Song *song, const QUrl &art
|
||||
case Song::Source::Tidal:
|
||||
case Song::Source::Qobuz:
|
||||
case Song::Source::Subsonic:
|
||||
InternetServicePtr service = app_->internet_services()->ServiceBySource(song->source());
|
||||
StreamingServicePtr service = app_->streaming_services()->ServiceBySource(song->source());
|
||||
if (!service) break;
|
||||
if (service->artists_collection_backend()) {
|
||||
service->artists_collection_backend()->UpdateManualAlbumArtAsync(song->effective_albumartist(), song->album(), art_manual);
|
||||
|
@ -40,7 +40,7 @@
|
||||
#include "core/networkaccessmanager.h"
|
||||
#include "core/logging.h"
|
||||
#include "core/song.h"
|
||||
#include "internet/internetservices.h"
|
||||
#include "streaming/streamingservices.h"
|
||||
#include "qobuz/qobuzservice.h"
|
||||
#include "albumcoverfetcher.h"
|
||||
#include "jsoncoverprovider.h"
|
||||
@ -52,7 +52,7 @@ constexpr int kLimit = 10;
|
||||
|
||||
QobuzCoverProvider::QobuzCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider(QStringLiteral("Qobuz"), true, true, 2.0, true, true, app, network, parent),
|
||||
service_(app->internet_services()->Service<QobuzService>()) {}
|
||||
service_(app->streaming_services()->Service<QobuzService>()) {}
|
||||
|
||||
QobuzCoverProvider::~QobuzCoverProvider() {
|
||||
|
||||
|
@ -39,7 +39,7 @@
|
||||
#include "core/networkaccessmanager.h"
|
||||
#include "core/logging.h"
|
||||
#include "core/song.h"
|
||||
#include "internet/internetservices.h"
|
||||
#include "streaming/streamingservices.h"
|
||||
#include "tidal/tidalservice.h"
|
||||
#include "albumcoverfetcher.h"
|
||||
#include "jsoncoverprovider.h"
|
||||
@ -51,7 +51,7 @@ constexpr int kLimit = 10;
|
||||
|
||||
TidalCoverProvider::TidalCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider(QStringLiteral("Tidal"), true, true, 2.5, true, true, app, network, parent),
|
||||
service_(app->internet_services()->Service<TidalService>()) {}
|
||||
service_(app->streaming_services()->Service<TidalService>()) {}
|
||||
|
||||
TidalCoverProvider::~TidalCoverProvider() {
|
||||
|
||||
|
@ -231,7 +231,7 @@ int main(int argc, char *argv[]) {
|
||||
if (QApplication::style()) qLog(Debug) << "Style:" << QApplication::style()->objectName();
|
||||
}
|
||||
|
||||
// Set the permissions on the config file on Unix - it can contain passwords for internet services, so it's important that other users can't read it.
|
||||
// Set the permissions on the config file on Unix - it can contain passwords for streaming services, so it's important that other users can't read it.
|
||||
// On Windows these are stored in the registry instead.
|
||||
#ifdef Q_OS_UNIX
|
||||
{
|
||||
|
@ -87,9 +87,9 @@
|
||||
#include "smartplaylists/playlistgeneratorinserter.h"
|
||||
#include "smartplaylists/playlistgeneratormimedata.h"
|
||||
|
||||
#include "internet/internetplaylistitem.h"
|
||||
#include "internet/internetsongmimedata.h"
|
||||
#include "internet/internetservice.h"
|
||||
#include "streaming/streamplaylistitem.h"
|
||||
#include "streaming/streamsongmimedata.h"
|
||||
#include "streaming/streamingservice.h"
|
||||
|
||||
#include "radios/radiomimedata.h"
|
||||
#include "radios/radioplaylistitem.h"
|
||||
@ -815,8 +815,8 @@ bool Playlist::dropMimeData(const QMimeData *data, Qt::DropAction action, int ro
|
||||
else if (const PlaylistGeneratorMimeData *generator_data = qobject_cast<const PlaylistGeneratorMimeData*>(data)) {
|
||||
InsertSmartPlaylist(generator_data->generator_, row, play_now, enqueue_now, enqueue_next_now);
|
||||
}
|
||||
else if (const InternetSongMimeData *internet_song_data = qobject_cast<const InternetSongMimeData*>(data)) {
|
||||
InsertInternetItems(internet_song_data->service, internet_song_data->songs, row, play_now, enqueue_now, enqueue_next_now);
|
||||
else if (const StreamSongMimeData *stream_song_data = qobject_cast<const StreamSongMimeData*>(data)) {
|
||||
InsertStreamingItems(stream_song_data->service, stream_song_data->songs, row, play_now, enqueue_now, enqueue_next_now);
|
||||
}
|
||||
else if (const RadioMimeData *radio_data = qobject_cast<const RadioMimeData*>(data)) {
|
||||
InsertRadioItems(radio_data->songs, row, play_now, enqueue_now, enqueue_next_now);
|
||||
@ -1168,7 +1168,7 @@ void Playlist::InsertSongsOrCollectionItems(const SongList &songs, const int pos
|
||||
items << make_shared<RadioPlaylistItem>(song);
|
||||
}
|
||||
else {
|
||||
items << make_shared<InternetPlaylistItem>(song);
|
||||
items << make_shared<StreamPlaylistItem>(song);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1176,12 +1176,12 @@ void Playlist::InsertSongsOrCollectionItems(const SongList &songs, const int pos
|
||||
|
||||
}
|
||||
|
||||
void Playlist::InsertInternetItems(InternetServicePtr service, const SongList &songs, const int pos, const bool play_now, const bool enqueue, const bool enqueue_next) {
|
||||
void Playlist::InsertStreamingItems(StreamingServicePtr service, const SongList &songs, const int pos, const bool play_now, const bool enqueue, const bool enqueue_next) {
|
||||
|
||||
PlaylistItemPtrList playlist_items;
|
||||
playlist_items.reserve(songs.count());
|
||||
for (const Song &song : songs) {
|
||||
playlist_items << make_shared<InternetPlaylistItem>(service, song);
|
||||
playlist_items << make_shared<StreamPlaylistItem>(service, song);
|
||||
}
|
||||
|
||||
InsertItems(playlist_items, pos, play_now, enqueue, enqueue_next);
|
||||
@ -1233,7 +1233,7 @@ void Playlist::UpdateItems(SongList songs) {
|
||||
new_item = make_shared<RadioPlaylistItem>(song);
|
||||
}
|
||||
else {
|
||||
new_item = make_shared<InternetPlaylistItem>(song);
|
||||
new_item = make_shared<StreamPlaylistItem>(song);
|
||||
}
|
||||
}
|
||||
items_[i] = new_item;
|
||||
|
@ -48,7 +48,7 @@
|
||||
#include "playlistitem.h"
|
||||
#include "playlistsequence.h"
|
||||
#include "smartplaylists/playlistgenerator_fwd.h"
|
||||
#include <internet/internetservice.h>
|
||||
#include <streaming/streamingservice.h>
|
||||
|
||||
class QMimeData;
|
||||
class QUndoStack;
|
||||
@ -229,7 +229,7 @@ class Playlist : public QAbstractListModel {
|
||||
void InsertSongs(const SongList &songs, const int pos = -1, const bool play_now = false, const bool enqueue = false, const bool enqueue_next = false);
|
||||
void InsertSongsOrCollectionItems(const SongList &songs, const int pos = -1, const bool play_now = false, const bool enqueue = false, const bool enqueue_next = false);
|
||||
void InsertSmartPlaylist(PlaylistGeneratorPtr gen, const int pos = -1, const bool play_now = false, const bool enqueue = false, const bool enqueue_next = false);
|
||||
void InsertInternetItems(InternetServicePtr service, const SongList &songs, const int pos = -1, const bool play_now = false, const bool enqueue = false, const bool enqueue_next = false);
|
||||
void InsertStreamingItems(StreamingServicePtr service, const SongList &songs, const int pos = -1, const bool play_now = false, const bool enqueue = false, const bool enqueue_next = false);
|
||||
void InsertRadioItems(const SongList &songs, const int pos = -1, const bool play_now = false, const bool enqueue = false, const bool enqueue_next = false);
|
||||
|
||||
void ReshuffleIndices();
|
||||
|
@ -34,7 +34,7 @@
|
||||
#include "playlistitem.h"
|
||||
#include "songplaylistitem.h"
|
||||
|
||||
#include "internet/internetplaylistitem.h"
|
||||
#include "streaming/streamplaylistitem.h"
|
||||
#include "radios/radioplaylistitem.h"
|
||||
|
||||
using std::make_shared;
|
||||
@ -47,7 +47,7 @@ PlaylistItemPtr PlaylistItem::NewFromSource(const Song::Source source) {
|
||||
case Song::Source::Subsonic:
|
||||
case Song::Source::Tidal:
|
||||
case Song::Source::Qobuz:
|
||||
return make_shared<InternetPlaylistItem>(source);
|
||||
return make_shared<StreamPlaylistItem>(source);
|
||||
case Song::Source::Stream:
|
||||
case Song::Source::RadioParadise:
|
||||
case Song::Source::SomaFM:
|
||||
@ -71,7 +71,7 @@ PlaylistItemPtr PlaylistItem::NewFromSong(const Song &song) {
|
||||
case Song::Source::Subsonic:
|
||||
case Song::Source::Tidal:
|
||||
case Song::Source::Qobuz:
|
||||
return make_shared<InternetPlaylistItem>(song);
|
||||
return make_shared<StreamPlaylistItem>(song);
|
||||
case Song::Source::Stream:
|
||||
case Song::Source::RadioParadise:
|
||||
case Song::Source::SomaFM:
|
||||
|
@ -46,7 +46,7 @@
|
||||
#include "core/song.h"
|
||||
#include "core/settings.h"
|
||||
#include "utilities/macaddrutils.h"
|
||||
#include "internet/internetsearchview.h"
|
||||
#include "streaming/streamingsearchview.h"
|
||||
#include "collection/collectionbackend.h"
|
||||
#include "collection/collectionmodel.h"
|
||||
#include "collection/collectionfilter.h"
|
||||
@ -78,7 +78,7 @@ constexpr char kSongsTable[] = "qobuz_songs";
|
||||
} // namespace
|
||||
|
||||
QobuzService::QobuzService(Application *app, QObject *parent)
|
||||
: InternetService(Song::Source::Qobuz, QStringLiteral("Qobuz"), QStringLiteral("qobuz"), QLatin1String(QobuzSettingsPage::kSettingsGroup), SettingsDialog::Page::Qobuz, app, parent),
|
||||
: StreamingService(Song::Source::Qobuz, QStringLiteral("Qobuz"), QStringLiteral("qobuz"), QLatin1String(QobuzSettingsPage::kSettingsGroup), SettingsDialog::Page::Qobuz, app, parent),
|
||||
app_(app),
|
||||
network_(app->network()),
|
||||
url_handler_(new QobuzUrlHandler(app, this)),
|
||||
@ -101,7 +101,7 @@ QobuzService::QobuzService(Application *app, QObject *parent)
|
||||
credential_id_(-1),
|
||||
pending_search_id_(0),
|
||||
next_pending_search_id_(1),
|
||||
pending_search_type_(InternetSearchView::SearchType::Artists),
|
||||
pending_search_type_(StreamingSearchView::SearchType::Artists),
|
||||
search_id_(0),
|
||||
login_sent_(false),
|
||||
login_attempts_(0),
|
||||
@ -646,7 +646,7 @@ void QobuzService::SongsUpdateProgressReceived(const int id, const int progress)
|
||||
emit SongsUpdateProgress(progress);
|
||||
}
|
||||
|
||||
int QobuzService::Search(const QString &text, InternetSearchView::SearchType type) {
|
||||
int QobuzService::Search(const QString &text, StreamingSearchView::SearchType type) {
|
||||
|
||||
pending_search_id_ = next_pending_search_id_;
|
||||
pending_search_text_ = text;
|
||||
@ -687,13 +687,13 @@ void QobuzService::SendSearch() {
|
||||
QobuzBaseRequest::QueryType query_type = QobuzBaseRequest::QueryType::None;
|
||||
|
||||
switch (pending_search_type_) {
|
||||
case InternetSearchView::SearchType::Artists:
|
||||
case StreamingSearchView::SearchType::Artists:
|
||||
query_type = QobuzBaseRequest::QueryType::SearchArtists;
|
||||
break;
|
||||
case InternetSearchView::SearchType::Albums:
|
||||
case StreamingSearchView::SearchType::Albums:
|
||||
query_type = QobuzBaseRequest::QueryType::SearchAlbums;
|
||||
break;
|
||||
case InternetSearchView::SearchType::Songs:
|
||||
case StreamingSearchView::SearchType::Songs:
|
||||
query_type = QobuzBaseRequest::QueryType::SearchSongs;
|
||||
break;
|
||||
}
|
||||
|
@ -39,8 +39,8 @@
|
||||
|
||||
#include "core/shared_ptr.h"
|
||||
#include "core/song.h"
|
||||
#include "internet/internetservice.h"
|
||||
#include "internet/internetsearchview.h"
|
||||
#include "streaming/streamingservice.h"
|
||||
#include "streaming/streamingsearchview.h"
|
||||
|
||||
class QTimer;
|
||||
class QNetworkReply;
|
||||
@ -54,7 +54,7 @@ class CollectionBackend;
|
||||
class CollectionModel;
|
||||
class CollectionFilter;
|
||||
|
||||
class QobuzService : public InternetService {
|
||||
class QobuzService : public StreamingService {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
@ -69,7 +69,7 @@ class QobuzService : public InternetService {
|
||||
void ReloadSettings() override;
|
||||
|
||||
void Logout();
|
||||
int Search(const QString &text, InternetSearchView::SearchType type) override;
|
||||
int Search(const QString &text, StreamingSearchView::SearchType type) override;
|
||||
void CancelSearch() override;
|
||||
|
||||
int max_login_attempts() { return kLoginAttempts; }
|
||||
@ -188,7 +188,7 @@ class QobuzService : public InternetService {
|
||||
int pending_search_id_;
|
||||
int next_pending_search_id_;
|
||||
QString pending_search_text_;
|
||||
InternetSearchView::SearchType pending_search_type_;
|
||||
StreamingSearchView::SearchType pending_search_type_;
|
||||
|
||||
int search_id_;
|
||||
QString search_text_;
|
||||
|
@ -33,7 +33,7 @@
|
||||
#include "core/logging.h"
|
||||
#include "utilities/timeconstants.h"
|
||||
#include "settings/subsonicsettingspage.h"
|
||||
#include "internet/internetservices.h"
|
||||
#include "streaming/streamingservices.h"
|
||||
#include "subsonic/subsonicservice.h"
|
||||
|
||||
#include "scrobblersettings.h"
|
||||
@ -70,7 +70,7 @@ void SubsonicScrobbler::ReloadSettings() {
|
||||
SubsonicServicePtr SubsonicScrobbler::service() {
|
||||
|
||||
if (!service_) {
|
||||
service_ = app_->internet_services()->Service<SubsonicService>();
|
||||
service_ = app_->streaming_services()->Service<SubsonicService>();
|
||||
}
|
||||
|
||||
return service_;
|
||||
|
@ -38,7 +38,7 @@
|
||||
#include "core/iconloader.h"
|
||||
#include "core/settings.h"
|
||||
#include "widgets/loginstatewidget.h"
|
||||
#include "internet/internetservices.h"
|
||||
#include "streaming/streamingservices.h"
|
||||
#include "qobuz/qobuzservice.h"
|
||||
|
||||
const char *QobuzSettingsPage::kSettingsGroup = "Qobuz";
|
||||
@ -46,7 +46,7 @@ const char *QobuzSettingsPage::kSettingsGroup = "Qobuz";
|
||||
QobuzSettingsPage::QobuzSettingsPage(SettingsDialog *dialog, QWidget *parent)
|
||||
: SettingsPage(dialog, parent),
|
||||
ui_(new Ui::QobuzSettingsPage),
|
||||
service_(dialog->app()->internet_services()->Service<QobuzService>()) {
|
||||
service_(dialog->app()->streaming_services()->Service<QobuzService>()) {
|
||||
|
||||
ui_->setupUi(this);
|
||||
setWindowIcon(IconLoader::Load(QStringLiteral("qobuz"), true, 0, 32));
|
||||
@ -54,10 +54,10 @@ QobuzSettingsPage::QobuzSettingsPage(SettingsDialog *dialog, QWidget *parent)
|
||||
QObject::connect(ui_->button_login, &QPushButton::clicked, this, &QobuzSettingsPage::LoginClicked);
|
||||
QObject::connect(ui_->login_state, &LoginStateWidget::LogoutClicked, this, &QobuzSettingsPage::LogoutClicked);
|
||||
|
||||
QObject::connect(this, &QobuzSettingsPage::Login, &*service_, &InternetService::LoginWithCredentials);
|
||||
QObject::connect(this, &QobuzSettingsPage::Login, &*service_, &StreamingService::LoginWithCredentials);
|
||||
|
||||
QObject::connect(&*service_, &InternetService::LoginFailure, this, &QobuzSettingsPage::LoginFailure);
|
||||
QObject::connect(&*service_, &InternetService::LoginSuccess, this, &QobuzSettingsPage::LoginSuccess);
|
||||
QObject::connect(&*service_, &StreamingService::LoginFailure, this, &QobuzSettingsPage::LoginFailure);
|
||||
QObject::connect(&*service_, &StreamingService::LoginSuccess, this, &QobuzSettingsPage::LoginSuccess);
|
||||
|
||||
dialog->installEventFilter(this);
|
||||
|
||||
|
@ -37,7 +37,7 @@
|
||||
#include "core/application.h"
|
||||
#include "core/iconloader.h"
|
||||
#include "core/settings.h"
|
||||
#include "internet/internetservices.h"
|
||||
#include "streaming/streamingservices.h"
|
||||
#include "subsonic/subsonicservice.h"
|
||||
|
||||
const char *SubsonicSettingsPage::kSettingsGroup = "Subsonic";
|
||||
@ -45,7 +45,7 @@ const char *SubsonicSettingsPage::kSettingsGroup = "Subsonic";
|
||||
SubsonicSettingsPage::SubsonicSettingsPage(SettingsDialog *dialog, QWidget *parent)
|
||||
: SettingsPage(dialog, parent),
|
||||
ui_(new Ui::SubsonicSettingsPage),
|
||||
service_(dialog->app()->internet_services()->Service<SubsonicService>()) {
|
||||
service_(dialog->app()->streaming_services()->Service<SubsonicService>()) {
|
||||
|
||||
ui_->setupUi(this);
|
||||
setWindowIcon(IconLoader::Load(QStringLiteral("subsonic"), true, 0, 32));
|
||||
|
@ -37,7 +37,7 @@
|
||||
#include "core/application.h"
|
||||
#include "core/iconloader.h"
|
||||
#include "core/settings.h"
|
||||
#include "internet/internetservices.h"
|
||||
#include "streaming/streamingservices.h"
|
||||
#include "tidal/tidalservice.h"
|
||||
#include "widgets/loginstatewidget.h"
|
||||
|
||||
@ -46,7 +46,7 @@ const char *TidalSettingsPage::kSettingsGroup = "Tidal";
|
||||
TidalSettingsPage::TidalSettingsPage(SettingsDialog *dialog, QWidget *parent)
|
||||
: SettingsPage(dialog, parent),
|
||||
ui_(new Ui::TidalSettingsPage),
|
||||
service_(dialog->app()->internet_services()->Service<TidalService>()) {
|
||||
service_(dialog->app()->streaming_services()->Service<TidalService>()) {
|
||||
|
||||
ui_->setupUi(this);
|
||||
setWindowIcon(IconLoader::Load(QStringLiteral("tidal"), true, 0, 32));
|
||||
@ -58,8 +58,8 @@ TidalSettingsPage::TidalSettingsPage(SettingsDialog *dialog, QWidget *parent)
|
||||
QObject::connect(this, &TidalSettingsPage::Authorize, &*service_, &TidalService::StartAuthorization);
|
||||
QObject::connect(this, &TidalSettingsPage::Login, &*service_, &TidalService::SendLoginWithCredentials);
|
||||
|
||||
QObject::connect(&*service_, &InternetService::LoginFailure, this, &TidalSettingsPage::LoginFailure);
|
||||
QObject::connect(&*service_, &InternetService::LoginSuccess, this, &TidalSettingsPage::LoginSuccess);
|
||||
QObject::connect(&*service_, &StreamingService::LoginFailure, this, &TidalSettingsPage::LoginFailure);
|
||||
QObject::connect(&*service_, &StreamingService::LoginSuccess, this, &TidalSettingsPage::LoginSuccess);
|
||||
|
||||
dialog->installEventFilter(this);
|
||||
|
||||
|
@ -47,9 +47,9 @@
|
||||
#include "collection/collectionfilterwidget.h"
|
||||
#include "collection/collectionitem.h"
|
||||
#include "collection/collectionitemdelegate.h"
|
||||
#include "internetcollectionview.h"
|
||||
#include "streamingcollectionview.h"
|
||||
|
||||
InternetCollectionView::InternetCollectionView(QWidget *parent)
|
||||
StreamingCollectionView::StreamingCollectionView(QWidget *parent)
|
||||
: AutoExpandingTreeView(parent),
|
||||
app_(nullptr),
|
||||
collection_backend_(nullptr),
|
||||
@ -82,7 +82,7 @@ InternetCollectionView::InternetCollectionView(QWidget *parent)
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::Init(Application *app, SharedPtr<CollectionBackend> collection_backend, CollectionModel *collection_model, const bool favorite) {
|
||||
void StreamingCollectionView::Init(Application *app, SharedPtr<CollectionBackend> collection_backend, CollectionModel *collection_model, const bool favorite) {
|
||||
|
||||
app_ = app;
|
||||
collection_backend_ = collection_backend;
|
||||
@ -93,20 +93,20 @@ void InternetCollectionView::Init(Application *app, SharedPtr<CollectionBackend>
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::SetFilter(CollectionFilterWidget *filter) {
|
||||
void StreamingCollectionView::SetFilter(CollectionFilterWidget *filter) {
|
||||
|
||||
filter_ = filter;
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::ReloadSettings() {
|
||||
void StreamingCollectionView::ReloadSettings() {
|
||||
|
||||
if (collection_model_) collection_model_->ReloadSettings();
|
||||
if (filter_) filter_->ReloadSettings();
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::SaveFocus() {
|
||||
void StreamingCollectionView::SaveFocus() {
|
||||
|
||||
const QModelIndex current = currentIndex();
|
||||
const QVariant role_type = model()->data(current, CollectionModel::Role_Type);
|
||||
@ -147,7 +147,7 @@ void InternetCollectionView::SaveFocus() {
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::SaveContainerPath(const QModelIndex &child) {
|
||||
void StreamingCollectionView::SaveContainerPath(const QModelIndex &child) {
|
||||
|
||||
const QModelIndex current = model()->parent(child);
|
||||
const QVariant role_type = model()->data(current, CollectionModel::Role_Type);
|
||||
@ -165,7 +165,7 @@ void InternetCollectionView::SaveContainerPath(const QModelIndex &child) {
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::RestoreFocus() {
|
||||
void StreamingCollectionView::RestoreFocus() {
|
||||
|
||||
if (last_selected_container_.isEmpty() && last_selected_song_.url().isEmpty()) {
|
||||
return;
|
||||
@ -174,7 +174,7 @@ void InternetCollectionView::RestoreFocus() {
|
||||
|
||||
}
|
||||
|
||||
bool InternetCollectionView::RestoreLevelFocus(const QModelIndex &parent) {
|
||||
bool StreamingCollectionView::RestoreLevelFocus(const QModelIndex &parent) {
|
||||
|
||||
if (model()->canFetchMore(parent)) {
|
||||
model()->fetchMore(parent);
|
||||
@ -229,7 +229,7 @@ bool InternetCollectionView::RestoreLevelFocus(const QModelIndex &parent) {
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::TotalSongCountUpdated(int count) {
|
||||
void StreamingCollectionView::TotalSongCountUpdated(int count) {
|
||||
|
||||
int old = total_song_count_;
|
||||
total_song_count_ = count;
|
||||
@ -246,7 +246,7 @@ void InternetCollectionView::TotalSongCountUpdated(int count) {
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::TotalArtistCountUpdated(int count) {
|
||||
void StreamingCollectionView::TotalArtistCountUpdated(int count) {
|
||||
|
||||
int old = total_artist_count_;
|
||||
total_artist_count_ = count;
|
||||
@ -263,7 +263,7 @@ void InternetCollectionView::TotalArtistCountUpdated(int count) {
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::TotalAlbumCountUpdated(int count) {
|
||||
void StreamingCollectionView::TotalAlbumCountUpdated(int count) {
|
||||
|
||||
int old = total_album_count_;
|
||||
total_album_count_ = count;
|
||||
@ -280,7 +280,7 @@ void InternetCollectionView::TotalAlbumCountUpdated(int count) {
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::paintEvent(QPaintEvent *event) {
|
||||
void StreamingCollectionView::paintEvent(QPaintEvent *event) {
|
||||
|
||||
if (total_song_count_ == 0) {
|
||||
QPainter p(viewport());
|
||||
@ -298,7 +298,7 @@ void InternetCollectionView::paintEvent(QPaintEvent *event) {
|
||||
QFontMetrics metrics(bold_font);
|
||||
|
||||
QRect title_rect(0, image_rect.bottom() + 20, rect.width(), metrics.height());
|
||||
p.drawText(title_rect, Qt::AlignHCenter, tr("The internet collection is empty!"));
|
||||
p.drawText(title_rect, Qt::AlignHCenter, tr("The streaming collection is empty!"));
|
||||
|
||||
// Draw the other text
|
||||
p.setFont(QFont());
|
||||
@ -312,7 +312,7 @@ void InternetCollectionView::paintEvent(QPaintEvent *event) {
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::mouseReleaseEvent(QMouseEvent *e) {
|
||||
void StreamingCollectionView::mouseReleaseEvent(QMouseEvent *e) {
|
||||
|
||||
QTreeView::mouseReleaseEvent(e);
|
||||
|
||||
@ -322,22 +322,22 @@ void InternetCollectionView::mouseReleaseEvent(QMouseEvent *e) {
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::contextMenuEvent(QContextMenuEvent *e) {
|
||||
void StreamingCollectionView::contextMenuEvent(QContextMenuEvent *e) {
|
||||
|
||||
if (!context_menu_) {
|
||||
context_menu_ = new QMenu(this);
|
||||
add_to_playlist_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Append to current playlist"), this, &InternetCollectionView::AddToPlaylist);
|
||||
load_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Replace current playlist"), this, &InternetCollectionView::Load);
|
||||
open_in_new_playlist_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("document-new")), tr("Open in new playlist"), this, &InternetCollectionView::OpenInNewPlaylist);
|
||||
add_to_playlist_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Append to current playlist"), this, &StreamingCollectionView::AddToPlaylist);
|
||||
load_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Replace current playlist"), this, &StreamingCollectionView::Load);
|
||||
open_in_new_playlist_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("document-new")), tr("Open in new playlist"), this, &StreamingCollectionView::OpenInNewPlaylist);
|
||||
|
||||
context_menu_->addSeparator();
|
||||
add_to_playlist_enqueue_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), tr("Queue track"), this, &InternetCollectionView::AddToPlaylistEnqueue);
|
||||
add_to_playlist_enqueue_next_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), tr("Queue to play next"), this, &InternetCollectionView::AddToPlaylistEnqueueNext);
|
||||
add_to_playlist_enqueue_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), tr("Queue track"), this, &StreamingCollectionView::AddToPlaylistEnqueue);
|
||||
add_to_playlist_enqueue_next_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), tr("Queue to play next"), this, &StreamingCollectionView::AddToPlaylistEnqueueNext);
|
||||
|
||||
context_menu_->addSeparator();
|
||||
|
||||
if (favorite_) {
|
||||
remove_songs_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("edit-delete")), tr("Remove from favorites"), this, &InternetCollectionView::RemoveSelectedSongs);
|
||||
remove_songs_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("edit-delete")), tr("Remove from favorites"), this, &StreamingCollectionView::RemoveSelectedSongs);
|
||||
context_menu_->addSeparator();
|
||||
}
|
||||
|
||||
@ -363,7 +363,7 @@ void InternetCollectionView::contextMenuEvent(QContextMenuEvent *e) {
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::Load() {
|
||||
void StreamingCollectionView::Load() {
|
||||
|
||||
QMimeData *q_mimedata = model()->mimeData(selectedIndexes());
|
||||
if (MimeData *mimedata = qobject_cast<MimeData*>(q_mimedata)) {
|
||||
@ -373,13 +373,13 @@ void InternetCollectionView::Load() {
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::AddToPlaylist() {
|
||||
void StreamingCollectionView::AddToPlaylist() {
|
||||
|
||||
emit AddToPlaylistSignal(model()->mimeData(selectedIndexes()));
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::AddToPlaylistEnqueue() {
|
||||
void StreamingCollectionView::AddToPlaylistEnqueue() {
|
||||
|
||||
QMimeData *q_mimedata = model()->mimeData(selectedIndexes());
|
||||
if (MimeData *mimedata = qobject_cast<MimeData*>(q_mimedata)) {
|
||||
@ -389,7 +389,7 @@ void InternetCollectionView::AddToPlaylistEnqueue() {
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::AddToPlaylistEnqueueNext() {
|
||||
void StreamingCollectionView::AddToPlaylistEnqueueNext() {
|
||||
|
||||
QMimeData *q_mimedata = model()->mimeData(selectedIndexes());
|
||||
if (MimeData *mimedata = qobject_cast<MimeData*>(q_mimedata)) {
|
||||
@ -399,7 +399,7 @@ void InternetCollectionView::AddToPlaylistEnqueueNext() {
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::OpenInNewPlaylist() {
|
||||
void StreamingCollectionView::OpenInNewPlaylist() {
|
||||
|
||||
QMimeData *q_mimedata = model()->mimeData(selectedIndexes());
|
||||
if (MimeData *mimedata = qobject_cast<MimeData*>(q_mimedata)) {
|
||||
@ -409,13 +409,13 @@ void InternetCollectionView::OpenInNewPlaylist() {
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::RemoveSelectedSongs() {
|
||||
void StreamingCollectionView::RemoveSelectedSongs() {
|
||||
|
||||
emit RemoveSongs(GetSelectedSongs());
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::keyboardSearch(const QString &search) {
|
||||
void StreamingCollectionView::keyboardSearch(const QString &search) {
|
||||
|
||||
is_in_keyboard_search_ = true;
|
||||
QTreeView::keyboardSearch(search);
|
||||
@ -423,7 +423,7 @@ void InternetCollectionView::keyboardSearch(const QString &search) {
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::scrollTo(const QModelIndex &idx, ScrollHint hint) {
|
||||
void StreamingCollectionView::scrollTo(const QModelIndex &idx, ScrollHint hint) {
|
||||
|
||||
if (is_in_keyboard_search_) {
|
||||
QTreeView::scrollTo(idx, QAbstractItemView::PositionAtTop);
|
||||
@ -434,14 +434,14 @@ void InternetCollectionView::scrollTo(const QModelIndex &idx, ScrollHint hint) {
|
||||
|
||||
}
|
||||
|
||||
SongList InternetCollectionView::GetSelectedSongs() const {
|
||||
SongList StreamingCollectionView::GetSelectedSongs() const {
|
||||
|
||||
QModelIndexList selected_indexes = qobject_cast<QSortFilterProxyModel*>(model())->mapSelectionToSource(selectionModel()->selection()).indexes();
|
||||
return collection_model_->GetChildSongs(selected_indexes);
|
||||
|
||||
}
|
||||
|
||||
void InternetCollectionView::FilterReturnPressed() {
|
||||
void StreamingCollectionView::FilterReturnPressed() {
|
||||
|
||||
if (!currentIndex().isValid()) {
|
||||
// Pick the first thing that isn't a divider
|
||||
@ -463,12 +463,12 @@ void InternetCollectionView::FilterReturnPressed() {
|
||||
|
||||
}
|
||||
|
||||
int InternetCollectionView::TotalSongs() const {
|
||||
int StreamingCollectionView::TotalSongs() const {
|
||||
return total_song_count_;
|
||||
}
|
||||
int InternetCollectionView::TotalArtists() const {
|
||||
int StreamingCollectionView::TotalArtists() const {
|
||||
return total_artist_count_;
|
||||
}
|
||||
int InternetCollectionView::TotalAlbums() const {
|
||||
int StreamingCollectionView::TotalAlbums() const {
|
||||
return total_album_count_;
|
||||
}
|
@ -19,8 +19,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef INTERNETCOLLECTIONVIEW_H
|
||||
#define INTERNETCOLLECTIONVIEW_H
|
||||
#ifndef STREAMINGCOLLECTIONVIEW_H
|
||||
#define STREAMINGCOLLECTIONVIEW_H
|
||||
|
||||
#include "config.h"
|
||||
|
||||
@ -49,11 +49,11 @@ class CollectionBackend;
|
||||
class CollectionModel;
|
||||
class CollectionFilterWidget;
|
||||
|
||||
class InternetCollectionView : public AutoExpandingTreeView {
|
||||
class StreamingCollectionView : public AutoExpandingTreeView {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit InternetCollectionView(QWidget *parent = nullptr);
|
||||
explicit StreamingCollectionView(QWidget *parent = nullptr);
|
||||
|
||||
void Init(Application *app, SharedPtr<CollectionBackend> collection_backend, CollectionModel *collection_model, const bool favorite = false);
|
||||
|
||||
@ -140,4 +140,4 @@ class InternetCollectionView : public AutoExpandingTreeView {
|
||||
QSet<QString> last_selected_path_;
|
||||
};
|
||||
|
||||
#endif // INTERNETCOLLECTIONVIEW_H
|
||||
#endif // STREAMINGCOLLECTIONVIEW_H
|
@ -26,21 +26,21 @@
|
||||
#include <QContextMenuEvent>
|
||||
|
||||
#include "collection/collectionfilterwidget.h"
|
||||
#include "internetcollectionview.h"
|
||||
#include "internetcollectionviewcontainer.h"
|
||||
#include "ui_internetcollectionviewcontainer.h"
|
||||
#include "streamingcollectionview.h"
|
||||
#include "streamingcollectionviewcontainer.h"
|
||||
#include "ui_streamingcollectionviewcontainer.h"
|
||||
|
||||
InternetCollectionViewContainer::InternetCollectionViewContainer(QWidget *parent)
|
||||
StreamingCollectionViewContainer::StreamingCollectionViewContainer(QWidget *parent)
|
||||
: QWidget(parent),
|
||||
ui_(new Ui_InternetCollectionViewContainer) {
|
||||
ui_(new Ui_StreamingCollectionViewContainer) {
|
||||
|
||||
ui_->setupUi(this);
|
||||
ui_->view->SetFilter(ui_->filter_widget);
|
||||
|
||||
QObject::connect(ui_->filter_widget, &CollectionFilterWidget::UpPressed, ui_->view, &InternetCollectionView::UpAndFocus);
|
||||
QObject::connect(ui_->filter_widget, &CollectionFilterWidget::DownPressed, ui_->view, &InternetCollectionView::DownAndFocus);
|
||||
QObject::connect(ui_->filter_widget, &CollectionFilterWidget::ReturnPressed, ui_->view, &InternetCollectionView::FilterReturnPressed);
|
||||
QObject::connect(ui_->view, &InternetCollectionView::FocusOnFilterSignal, ui_->filter_widget, &CollectionFilterWidget::FocusOnFilter);
|
||||
QObject::connect(ui_->filter_widget, &CollectionFilterWidget::UpPressed, ui_->view, &StreamingCollectionView::UpAndFocus);
|
||||
QObject::connect(ui_->filter_widget, &CollectionFilterWidget::DownPressed, ui_->view, &StreamingCollectionView::DownAndFocus);
|
||||
QObject::connect(ui_->filter_widget, &CollectionFilterWidget::ReturnPressed, ui_->view, &StreamingCollectionView::FilterReturnPressed);
|
||||
QObject::connect(ui_->view, &StreamingCollectionView::FocusOnFilterSignal, ui_->filter_widget, &CollectionFilterWidget::FocusOnFilter);
|
||||
|
||||
ui_->progressbar->hide();
|
||||
|
||||
@ -48,21 +48,21 @@ InternetCollectionViewContainer::InternetCollectionViewContainer(QWidget *parent
|
||||
|
||||
}
|
||||
|
||||
InternetCollectionViewContainer::~InternetCollectionViewContainer() { delete ui_; }
|
||||
StreamingCollectionViewContainer::~StreamingCollectionViewContainer() { delete ui_; }
|
||||
|
||||
void InternetCollectionViewContainer::ReloadSettings() const {
|
||||
void StreamingCollectionViewContainer::ReloadSettings() const {
|
||||
|
||||
ui_->filter_widget->ReloadSettings();
|
||||
ui_->view->ReloadSettings();
|
||||
|
||||
}
|
||||
|
||||
bool InternetCollectionViewContainer::SearchFieldHasFocus() const {
|
||||
bool StreamingCollectionViewContainer::SearchFieldHasFocus() const {
|
||||
return ui_->filter_widget->SearchFieldHasFocus();
|
||||
}
|
||||
|
||||
void InternetCollectionViewContainer::FocusSearchField() {
|
||||
void StreamingCollectionViewContainer::FocusSearchField() {
|
||||
ui_->filter_widget->FocusSearchField();
|
||||
}
|
||||
|
||||
void InternetCollectionViewContainer::contextMenuEvent(QContextMenuEvent *e) { Q_UNUSED(e); }
|
||||
void StreamingCollectionViewContainer::contextMenuEvent(QContextMenuEvent *e) { Q_UNUSED(e); }
|
@ -17,8 +17,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef INTERNETCOLLECTIONVIEWCONTAINER_H
|
||||
#define INTERNETCOLLECTIONVIEWCONTAINER_H
|
||||
#ifndef STREAMINGCOLLECTIONVIEWCONTAINER_H
|
||||
#define STREAMINGCOLLECTIONVIEWCONTAINER_H
|
||||
|
||||
#include "config.h"
|
||||
|
||||
@ -26,8 +26,8 @@
|
||||
#include <QWidget>
|
||||
#include <QString>
|
||||
|
||||
#include "internetcollectionview.h"
|
||||
#include "ui_internetcollectionviewcontainer.h"
|
||||
#include "streamingcollectionview.h"
|
||||
#include "ui_streamingcollectionviewcontainer.h"
|
||||
|
||||
class QStackedWidget;
|
||||
class QPushButton;
|
||||
@ -36,12 +36,12 @@ class QProgressBar;
|
||||
class QContextMenuEvent;
|
||||
class CollectionFilterWidget;
|
||||
|
||||
class InternetCollectionViewContainer : public QWidget {
|
||||
class StreamingCollectionViewContainer : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit InternetCollectionViewContainer(QWidget *parent = nullptr);
|
||||
~InternetCollectionViewContainer() override;
|
||||
explicit StreamingCollectionViewContainer(QWidget *parent = nullptr);
|
||||
~StreamingCollectionViewContainer() override;
|
||||
|
||||
void ReloadSettings() const;
|
||||
bool SearchFieldHasFocus() const;
|
||||
@ -49,8 +49,8 @@ class InternetCollectionViewContainer : public QWidget {
|
||||
|
||||
QStackedWidget *stacked() const { return ui_->stacked; }
|
||||
QWidget *help_page() const { return ui_->help_page; }
|
||||
QWidget *internetcollection_page() const { return ui_->internetcollection_page; }
|
||||
InternetCollectionView *view() const { return ui_->view; }
|
||||
QWidget *streamingcollection_page() const { return ui_->streamingcollection_page; }
|
||||
StreamingCollectionView *view() const { return ui_->view; }
|
||||
CollectionFilterWidget *filter_widget() const { return ui_->filter_widget; }
|
||||
QPushButton *button_refresh() const { return ui_->refresh; }
|
||||
QPushButton *button_close() const { return ui_->close; }
|
||||
@ -62,8 +62,8 @@ class InternetCollectionViewContainer : public QWidget {
|
||||
void contextMenuEvent(QContextMenuEvent *e) override;
|
||||
|
||||
private:
|
||||
Ui_InternetCollectionViewContainer *ui_;
|
||||
Ui_StreamingCollectionViewContainer *ui_;
|
||||
|
||||
};
|
||||
|
||||
#endif // INTERNETCOLLECTIONVIEWCONTAINER_H
|
||||
#endif // STREAMINGCOLLECTIONVIEWCONTAINER_H
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>InternetCollectionViewContainer</class>
|
||||
<widget class="QWidget" name="InternetCollectionViewContainer">
|
||||
<class>StreamingCollectionViewContainer</class>
|
||||
<widget class="QWidget" name="StreamingCollectionViewContainer">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
@ -111,7 +111,7 @@
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="internetcollection_page">
|
||||
<widget class="QWidget" name="streamingcollection_page">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
@ -139,7 +139,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="InternetCollectionView" name="view"/>
|
||||
<widget class="StreamingCollectionView" name="view"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
@ -155,9 +155,9 @@
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>InternetCollectionView</class>
|
||||
<class>StreamingCollectionView</class>
|
||||
<extends>QTreeView</extends>
|
||||
<header location="global">internet/internetcollectionview.h</header>
|
||||
<header location="global">streaming/streamingcollectionview.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
@ -21,17 +21,17 @@
|
||||
#include <QStyleOptionViewItem>
|
||||
#include <QPainter>
|
||||
|
||||
#include "internetsearchitemdelegate.h"
|
||||
#include "internetsearchview.h"
|
||||
#include "streamingsearchitemdelegate.h"
|
||||
#include "streamingsearchview.h"
|
||||
|
||||
InternetSearchItemDelegate::InternetSearchItemDelegate(InternetSearchView *view)
|
||||
StreamingSearchItemDelegate::StreamingSearchItemDelegate(StreamingSearchView *view)
|
||||
: CollectionItemDelegate(view),
|
||||
view_(view) {}
|
||||
|
||||
void InternetSearchItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &idx) const {
|
||||
void StreamingSearchItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &idx) const {
|
||||
|
||||
// Tell the view we painted this item, so it can lazy load some art.
|
||||
const_cast<InternetSearchView*>(view_)->LazyLoadAlbumCover(idx);
|
||||
const_cast<StreamingSearchView*>(view_)->LazyLoadAlbumCover(idx);
|
||||
|
||||
CollectionItemDelegate::paint(painter, option, idx);
|
||||
|
@ -18,8 +18,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef INTERNETSEARCHITEMDELEGATE_H
|
||||
#define INTERNETSEARCHITEMDELEGATE_H
|
||||
#ifndef STREAMINGSEARCHITEMDELEGATE_H
|
||||
#define STREAMINGSEARCHITEMDELEGATE_H
|
||||
|
||||
#include <QStyleOptionViewItem>
|
||||
#include <QStyleOption>
|
||||
@ -28,18 +28,18 @@
|
||||
|
||||
class QPainter;
|
||||
class QModelIndex;
|
||||
class InternetSearchView;
|
||||
class StreamingSearchView;
|
||||
|
||||
class InternetSearchItemDelegate : public CollectionItemDelegate {
|
||||
class StreamingSearchItemDelegate : public CollectionItemDelegate {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit InternetSearchItemDelegate(InternetSearchView *view);
|
||||
explicit StreamingSearchItemDelegate(StreamingSearchView *view);
|
||||
|
||||
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &idx) const override;
|
||||
|
||||
private:
|
||||
InternetSearchView *view_;
|
||||
StreamingSearchView *view_;
|
||||
};
|
||||
|
||||
#endif // INTERNETSEARCHITEMDELEGATE_H
|
||||
#endif // STREAMINGSEARCHITEMDELEGATE_H
|
@ -32,12 +32,12 @@
|
||||
|
||||
#include "core/mimedata.h"
|
||||
#include "core/iconloader.h"
|
||||
#include "internetsongmimedata.h"
|
||||
#include "internetservice.h"
|
||||
#include "internetsearchmodel.h"
|
||||
#include "internetsearchview.h"
|
||||
#include "streamsongmimedata.h"
|
||||
#include "streamingservice.h"
|
||||
#include "streamingsearchmodel.h"
|
||||
#include "streamingsearchview.h"
|
||||
|
||||
InternetSearchModel::InternetSearchModel(InternetServicePtr service, QObject *parent)
|
||||
StreamingSearchModel::StreamingSearchModel(StreamingServicePtr service, QObject *parent)
|
||||
: QStandardItemModel(parent),
|
||||
service_(service),
|
||||
proxy_(nullptr),
|
||||
@ -54,9 +54,9 @@ InternetSearchModel::InternetSearchModel(InternetServicePtr service, QObject *pa
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchModel::AddResults(const InternetSearchView::ResultList &results) {
|
||||
void StreamingSearchModel::AddResults(const StreamingSearchView::ResultList &results) {
|
||||
|
||||
for (const InternetSearchView::Result &result : results) {
|
||||
for (const StreamingSearchView::Result &result : results) {
|
||||
QStandardItem *parent = invisibleRootItem();
|
||||
|
||||
// Find (or create) the container nodes for this result if we can.
|
||||
@ -74,7 +74,7 @@ void InternetSearchModel::AddResults(const InternetSearchView::ResultList &resul
|
||||
|
||||
}
|
||||
|
||||
QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem *parent, ContainerKey *key, const int level) {
|
||||
QStandardItem *StreamingSearchModel::BuildContainers(const Song &s, QStandardItem *parent, ContainerKey *key, const int level) {
|
||||
|
||||
if (level >= 3) {
|
||||
return parent;
|
||||
@ -286,14 +286,14 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchModel::Clear() {
|
||||
void StreamingSearchModel::Clear() {
|
||||
|
||||
containers_.clear();
|
||||
clear();
|
||||
|
||||
}
|
||||
|
||||
InternetSearchView::ResultList InternetSearchModel::GetChildResults(const QModelIndexList &indexes) const {
|
||||
StreamingSearchView::ResultList StreamingSearchModel::GetChildResults(const QModelIndexList &indexes) const {
|
||||
|
||||
QList<QStandardItem*> items;
|
||||
items.reserve(indexes.count());
|
||||
@ -304,9 +304,9 @@ InternetSearchView::ResultList InternetSearchModel::GetChildResults(const QModel
|
||||
|
||||
}
|
||||
|
||||
InternetSearchView::ResultList InternetSearchModel::GetChildResults(const QList<QStandardItem*> &items) const {
|
||||
StreamingSearchView::ResultList StreamingSearchModel::GetChildResults(const QList<QStandardItem*> &items) const {
|
||||
|
||||
InternetSearchView::ResultList results;
|
||||
StreamingSearchView::ResultList results;
|
||||
QSet<const QStandardItem*> visited;
|
||||
|
||||
for (QStandardItem *item : items) {
|
||||
@ -317,7 +317,7 @@ InternetSearchView::ResultList InternetSearchModel::GetChildResults(const QList<
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchModel::GetChildResults(const QStandardItem *item, InternetSearchView::ResultList *results, QSet<const QStandardItem*> *visited) const {
|
||||
void StreamingSearchModel::GetChildResults(const QStandardItem *item, StreamingSearchView::ResultList *results, QSet<const QStandardItem*> *visited) const {
|
||||
|
||||
if (visited->contains(item)) {
|
||||
return;
|
||||
@ -339,13 +339,13 @@ void InternetSearchModel::GetChildResults(const QStandardItem *item, InternetSea
|
||||
// No - maybe it's a song, add its result if valid
|
||||
QVariant result = item->data(Role_Result);
|
||||
if (result.isValid()) {
|
||||
results->append(result.value<InternetSearchView::Result>());
|
||||
results->append(result.value<StreamingSearchView::Result>());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
QMimeData *InternetSearchModel::mimeData(const QModelIndexList &indexes) const {
|
||||
QMimeData *StreamingSearchModel::mimeData(const QModelIndexList &indexes) const {
|
||||
|
||||
return LoadTracks(GetChildResults(indexes));
|
||||
|
||||
@ -353,11 +353,11 @@ QMimeData *InternetSearchModel::mimeData(const QModelIndexList &indexes) const {
|
||||
|
||||
namespace {
|
||||
|
||||
void GatherResults(const QStandardItem *parent, InternetSearchView::ResultList *results) {
|
||||
void GatherResults(const QStandardItem *parent, StreamingSearchView::ResultList *results) {
|
||||
|
||||
QVariant result_variant = parent->data(InternetSearchModel::Role_Result);
|
||||
QVariant result_variant = parent->data(StreamingSearchModel::Role_Result);
|
||||
if (result_variant.isValid()) {
|
||||
InternetSearchView::Result result = result_variant.value<InternetSearchView::Result>();
|
||||
StreamingSearchView::Result result = result_variant.value<StreamingSearchView::Result>();
|
||||
(*results).append(result);
|
||||
}
|
||||
|
||||
@ -369,14 +369,14 @@ void GatherResults(const QStandardItem *parent, InternetSearchView::ResultList *
|
||||
|
||||
} // namespace
|
||||
|
||||
void InternetSearchModel::SetGroupBy(const CollectionModel::Grouping grouping, const bool regroup_now) {
|
||||
void StreamingSearchModel::SetGroupBy(const CollectionModel::Grouping grouping, const bool regroup_now) {
|
||||
|
||||
const CollectionModel::Grouping old_group_by = group_by_;
|
||||
group_by_ = grouping;
|
||||
|
||||
if (regroup_now && group_by_ != old_group_by) {
|
||||
// Walk the tree gathering the results we have already
|
||||
InternetSearchView::ResultList results;
|
||||
StreamingSearchView::ResultList results;
|
||||
GatherResults(invisibleRootItem(), &results);
|
||||
|
||||
// Reset the model and re-add all the results using the new grouping.
|
||||
@ -386,7 +386,7 @@ void InternetSearchModel::SetGroupBy(const CollectionModel::Grouping grouping, c
|
||||
|
||||
}
|
||||
|
||||
MimeData *InternetSearchModel::LoadTracks(const InternetSearchView::ResultList &results) const {
|
||||
MimeData *StreamingSearchModel::LoadTracks(const StreamingSearchView::ResultList &results) const {
|
||||
|
||||
if (results.isEmpty()) {
|
||||
return nullptr;
|
||||
@ -396,14 +396,14 @@ MimeData *InternetSearchModel::LoadTracks(const InternetSearchView::ResultList &
|
||||
QList<QUrl> urls;
|
||||
songs.reserve(results.count());
|
||||
urls.reserve(results.count());
|
||||
for (const InternetSearchView::Result &result : results) {
|
||||
for (const StreamingSearchView::Result &result : results) {
|
||||
songs.append(result.metadata_);
|
||||
urls << result.metadata_.url();
|
||||
}
|
||||
|
||||
InternetSongMimeData *internet_song_mime_data = new InternetSongMimeData(service_);
|
||||
internet_song_mime_data->songs = songs;
|
||||
MimeData *mime_data = internet_song_mime_data;
|
||||
StreamSongMimeData *streaming_song_mime_data = new StreamSongMimeData(service_);
|
||||
streaming_song_mime_data->songs = songs;
|
||||
MimeData *mime_data = streaming_song_mime_data;
|
||||
|
||||
mime_data->setUrls(urls);
|
||||
|
@ -19,8 +19,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef INTERNETSEARCHMODEL_H
|
||||
#define INTERNETSEARCHMODEL_H
|
||||
#ifndef STREAMINGSEARCHMODEL_H
|
||||
#define STREAMINGSEARCHMODEL_H
|
||||
|
||||
#include "config.h"
|
||||
|
||||
@ -39,19 +39,19 @@
|
||||
#include "core/shared_ptr.h"
|
||||
#include "core/song.h"
|
||||
#include "collection/collectionmodel.h"
|
||||
#include "internetsearchview.h"
|
||||
#include "streamingsearchview.h"
|
||||
|
||||
class QMimeData;
|
||||
class QSortFilterProxyModel;
|
||||
|
||||
class MimeData;
|
||||
class InternetService;
|
||||
class StreamingService;
|
||||
|
||||
class InternetSearchModel : public QStandardItemModel {
|
||||
class StreamingSearchModel : public QStandardItemModel {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit InternetSearchModel(SharedPtr<InternetService> service, QObject *parent = nullptr);
|
||||
explicit StreamingSearchModel(SharedPtr<StreamingService> service, QObject *parent = nullptr);
|
||||
|
||||
enum Role {
|
||||
Role_Result = CollectionModel::LastRole,
|
||||
@ -69,24 +69,24 @@ class InternetSearchModel : public QStandardItemModel {
|
||||
|
||||
void Clear();
|
||||
|
||||
InternetSearchView::ResultList GetChildResults(const QModelIndexList &indexes) const;
|
||||
InternetSearchView::ResultList GetChildResults(const QList<QStandardItem*> &items) const;
|
||||
StreamingSearchView::ResultList GetChildResults(const QModelIndexList &indexes) const;
|
||||
StreamingSearchView::ResultList GetChildResults(const QList<QStandardItem*> &items) const;
|
||||
|
||||
QMimeData *mimeData(const QModelIndexList &indexes) const override;
|
||||
|
||||
// Loads tracks for results that were previously emitted by ResultsAvailable.
|
||||
// The implementation creates a SongMimeData with one Song for each Result.
|
||||
MimeData *LoadTracks(const InternetSearchView::ResultList &results) const;
|
||||
MimeData *LoadTracks(const StreamingSearchView::ResultList &results) const;
|
||||
|
||||
public slots:
|
||||
void AddResults(const InternetSearchView::ResultList &results);
|
||||
void AddResults(const StreamingSearchView::ResultList &results);
|
||||
|
||||
private:
|
||||
QStandardItem *BuildContainers(const Song &s, QStandardItem *parent, ContainerKey *key, const int level = 0);
|
||||
void GetChildResults(const QStandardItem *item, InternetSearchView::ResultList *results, QSet<const QStandardItem*> *visited) const;
|
||||
void GetChildResults(const QStandardItem *item, StreamingSearchView::ResultList *results, QSet<const QStandardItem*> *visited) const;
|
||||
|
||||
private:
|
||||
SharedPtr<InternetService> service_;
|
||||
SharedPtr<StreamingService> service_;
|
||||
QSortFilterProxyModel *proxy_;
|
||||
bool use_pretty_covers_;
|
||||
QIcon artist_icon_;
|
||||
@ -97,14 +97,14 @@ class InternetSearchModel : public QStandardItemModel {
|
||||
};
|
||||
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
inline size_t qHash(const InternetSearchModel::ContainerKey &key) {
|
||||
inline size_t qHash(const StreamingSearchModel::ContainerKey &key) {
|
||||
#else
|
||||
inline uint qHash(const InternetSearchModel::ContainerKey &key) {
|
||||
inline uint qHash(const StreamingSearchModel::ContainerKey &key) {
|
||||
#endif
|
||||
return qHash(key.group_[0]) ^ qHash(key.group_[1]) ^ qHash(key.group_[2]);
|
||||
}
|
||||
|
||||
inline bool operator<(const InternetSearchModel::ContainerKey &left, const InternetSearchModel::ContainerKey &right) {
|
||||
inline bool operator<(const StreamingSearchModel::ContainerKey &left, const StreamingSearchModel::ContainerKey &right) {
|
||||
#define CMP(field) \
|
||||
if (left.field < right.field) return true; \
|
||||
if (left.field > right.field) return false
|
||||
@ -117,4 +117,4 @@ inline bool operator<(const InternetSearchModel::ContainerKey &left, const Inter
|
||||
#undef CMP
|
||||
}
|
||||
|
||||
#endif // INTERNETSEARCHMODEL_H
|
||||
#endif // STREAMINGSEARCHMODEL_H
|
@ -26,13 +26,13 @@
|
||||
#include <QString>
|
||||
|
||||
#include "collection/collectionmodel.h"
|
||||
#include "internetsearchmodel.h"
|
||||
#include "internetsearchsortmodel.h"
|
||||
#include "internetsearchview.h"
|
||||
#include "streamingsearchmodel.h"
|
||||
#include "streamingsearchsortmodel.h"
|
||||
#include "streamingsearchview.h"
|
||||
|
||||
InternetSearchSortModel::InternetSearchSortModel(QObject *parent) : QSortFilterProxyModel(parent) {}
|
||||
StreamingSearchSortModel::StreamingSearchSortModel(QObject *parent) : QSortFilterProxyModel(parent) {}
|
||||
|
||||
bool InternetSearchSortModel::lessThan(const QModelIndex &left, const QModelIndex &right) const {
|
||||
bool StreamingSearchSortModel::lessThan(const QModelIndex &left, const QModelIndex &right) const {
|
||||
|
||||
// Dividers always go first
|
||||
if (left.data(CollectionModel::Role_IsDivider).toBool()) return true;
|
||||
@ -50,8 +50,8 @@ bool InternetSearchSortModel::lessThan(const QModelIndex &left, const QModelInde
|
||||
}
|
||||
|
||||
// Otherwise we're comparing songs. Sort by disc, track, then title.
|
||||
const InternetSearchView::Result r1 = left.data(InternetSearchModel::Role_Result).value<InternetSearchView::Result>();
|
||||
const InternetSearchView::Result r2 = right.data(InternetSearchModel::Role_Result).value<InternetSearchView::Result>();
|
||||
const StreamingSearchView::Result r1 = left.data(StreamingSearchModel::Role_Result).value<StreamingSearchView::Result>();
|
||||
const StreamingSearchView::Result r2 = right.data(StreamingSearchModel::Role_Result).value<StreamingSearchView::Result>();
|
||||
|
||||
if (r1.metadata_.disc() < r2.metadata_.disc()) return true;
|
||||
if (r1.metadata_.disc() > r2.metadata_.disc()) return false;
|
@ -18,22 +18,22 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef INTERNETSEARCHSORTMODEL_H
|
||||
#define INTERNETSEARCHSORTMODEL_H
|
||||
#ifndef STREAMINGSEARCHSORTMODEL_H
|
||||
#define STREAMINGSEARCHSORTMODEL_H
|
||||
|
||||
#include <QSortFilterProxyModel>
|
||||
|
||||
class QObject;
|
||||
class QModelIndex;
|
||||
|
||||
class InternetSearchSortModel : public QSortFilterProxyModel {
|
||||
class StreamingSearchSortModel : public QSortFilterProxyModel {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit InternetSearchSortModel(QObject *parent = nullptr);
|
||||
explicit StreamingSearchSortModel(QObject *parent = nullptr);
|
||||
|
||||
protected:
|
||||
bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;
|
||||
};
|
||||
|
||||
#endif // INTERNETSEARCHSORTMODEL_H
|
||||
#endif // STREAMINGSEARCHSORTMODEL_H
|
@ -75,37 +75,37 @@
|
||||
#include "collection/savedgroupingmanager.h"
|
||||
#include "covermanager/albumcoverloader.h"
|
||||
#include "covermanager/albumcoverloaderresult.h"
|
||||
#include "internetsongmimedata.h"
|
||||
#include "internetservice.h"
|
||||
#include "internetsearchitemdelegate.h"
|
||||
#include "internetsearchmodel.h"
|
||||
#include "internetsearchsortmodel.h"
|
||||
#include "internetsearchview.h"
|
||||
#include "ui_internetsearchview.h"
|
||||
#include "streamsongmimedata.h"
|
||||
#include "streamingservice.h"
|
||||
#include "streamingsearchitemdelegate.h"
|
||||
#include "streamingsearchmodel.h"
|
||||
#include "streamingsearchsortmodel.h"
|
||||
#include "streamingsearchview.h"
|
||||
#include "ui_streamingsearchview.h"
|
||||
#include "settings/appearancesettingspage.h"
|
||||
|
||||
using std::make_unique;
|
||||
|
||||
const int InternetSearchView::kSwapModelsTimeoutMsec = 250;
|
||||
const int InternetSearchView::kDelayedSearchTimeoutMs = 200;
|
||||
const int InternetSearchView::kArtHeight = 32;
|
||||
const int StreamingSearchView::kSwapModelsTimeoutMsec = 250;
|
||||
const int StreamingSearchView::kDelayedSearchTimeoutMs = 200;
|
||||
const int StreamingSearchView::kArtHeight = 32;
|
||||
|
||||
InternetSearchView::InternetSearchView(QWidget *parent)
|
||||
StreamingSearchView::StreamingSearchView(QWidget *parent)
|
||||
: QWidget(parent),
|
||||
app_(nullptr),
|
||||
service_(nullptr),
|
||||
ui_(new Ui_InternetSearchView),
|
||||
ui_(new Ui_StreamingSearchView),
|
||||
context_menu_(nullptr),
|
||||
group_by_actions_(nullptr),
|
||||
front_model_(nullptr),
|
||||
back_model_(nullptr),
|
||||
current_model_(nullptr),
|
||||
front_proxy_(new InternetSearchSortModel(this)),
|
||||
back_proxy_(new InternetSearchSortModel(this)),
|
||||
front_proxy_(new StreamingSearchSortModel(this)),
|
||||
back_proxy_(new StreamingSearchSortModel(this)),
|
||||
current_proxy_(front_proxy_),
|
||||
swap_models_timer_(new QTimer(this)),
|
||||
use_pretty_covers_(true),
|
||||
search_type_(InternetSearchView::SearchType::Artists),
|
||||
search_type_(StreamingSearchView::SearchType::Artists),
|
||||
search_error_(false),
|
||||
last_search_id_(0),
|
||||
searches_next_id_(1) {
|
||||
@ -118,7 +118,7 @@ InternetSearchView::InternetSearchView(QWidget *parent)
|
||||
ui_->settings->setIcon(IconLoader::Load(QStringLiteral("configure")));
|
||||
|
||||
// Set the appearance of the results list
|
||||
ui_->results->setItemDelegate(new InternetSearchItemDelegate(this));
|
||||
ui_->results->setItemDelegate(new StreamingSearchItemDelegate(this));
|
||||
ui_->results->setAttribute(Qt::WA_MacShowFocusRect, false);
|
||||
ui_->results->setStyleSheet(QStringLiteral("QTreeView::item{padding-top:1px;}"));
|
||||
|
||||
@ -144,18 +144,18 @@ InternetSearchView::InternetSearchView(QWidget *parent)
|
||||
|
||||
}
|
||||
|
||||
InternetSearchView::~InternetSearchView() { delete ui_; }
|
||||
StreamingSearchView::~StreamingSearchView() { delete ui_; }
|
||||
|
||||
void InternetSearchView::Init(Application *app, InternetServicePtr service) {
|
||||
void StreamingSearchView::Init(Application *app, StreamingServicePtr service) {
|
||||
|
||||
app_ = app;
|
||||
service_ = service;
|
||||
|
||||
front_model_ = new InternetSearchModel(service, this);
|
||||
back_model_ = new InternetSearchModel(service, this);
|
||||
front_model_ = new StreamingSearchModel(service, this);
|
||||
back_model_ = new StreamingSearchModel(service, this);
|
||||
|
||||
front_proxy_ = new InternetSearchSortModel(this);
|
||||
back_proxy_ = new InternetSearchSortModel(this);
|
||||
front_proxy_ = new StreamingSearchSortModel(this);
|
||||
back_proxy_ = new StreamingSearchSortModel(this);
|
||||
|
||||
front_model_->set_proxy(front_proxy_);
|
||||
back_model_->set_proxy(back_proxy_);
|
||||
@ -177,30 +177,30 @@ void InternetSearchView::Init(Application *app, InternetServicePtr service) {
|
||||
QMenu *settings_menu = new QMenu(this);
|
||||
settings_menu->addActions(group_by_actions_->actions());
|
||||
settings_menu->addSeparator();
|
||||
settings_menu->addAction(IconLoader::Load(QStringLiteral("configure")), tr("Configure %1...").arg(Song::DescriptionForSource(service_->source())), this, &InternetSearchView::OpenSettingsDialog);
|
||||
settings_menu->addAction(IconLoader::Load(QStringLiteral("configure")), tr("Configure %1...").arg(Song::DescriptionForSource(service_->source())), this, &StreamingSearchView::OpenSettingsDialog);
|
||||
ui_->settings->setMenu(settings_menu);
|
||||
|
||||
swap_models_timer_->setSingleShot(true);
|
||||
swap_models_timer_->setInterval(kSwapModelsTimeoutMsec);
|
||||
QObject::connect(swap_models_timer_, &QTimer::timeout, this, &InternetSearchView::SwapModels);
|
||||
QObject::connect(swap_models_timer_, &QTimer::timeout, this, &StreamingSearchView::SwapModels);
|
||||
|
||||
QObject::connect(ui_->radiobutton_search_artists, &QRadioButton::clicked, this, &InternetSearchView::SearchArtistsClicked);
|
||||
QObject::connect(ui_->radiobutton_search_albums, &QRadioButton::clicked, this, &InternetSearchView::SearchAlbumsClicked);
|
||||
QObject::connect(ui_->radiobutton_search_songs, &QRadioButton::clicked, this, &InternetSearchView::SearchSongsClicked);
|
||||
QObject::connect(group_by_actions_, &QActionGroup::triggered, this, &InternetSearchView::GroupByClicked);
|
||||
QObject::connect(group_by_actions_, &QActionGroup::triggered, this, &InternetSearchView::GroupByClicked);
|
||||
QObject::connect(ui_->radiobutton_search_artists, &QRadioButton::clicked, this, &StreamingSearchView::SearchArtistsClicked);
|
||||
QObject::connect(ui_->radiobutton_search_albums, &QRadioButton::clicked, this, &StreamingSearchView::SearchAlbumsClicked);
|
||||
QObject::connect(ui_->radiobutton_search_songs, &QRadioButton::clicked, this, &StreamingSearchView::SearchSongsClicked);
|
||||
QObject::connect(group_by_actions_, &QActionGroup::triggered, this, &StreamingSearchView::GroupByClicked);
|
||||
QObject::connect(group_by_actions_, &QActionGroup::triggered, this, &StreamingSearchView::GroupByClicked);
|
||||
|
||||
QObject::connect(ui_->search, &QSearchField::textChanged, this, &InternetSearchView::TextEdited);
|
||||
QObject::connect(ui_->results, &AutoExpandingTreeView::AddToPlaylistSignal, this, &InternetSearchView::AddToPlaylist);
|
||||
QObject::connect(ui_->results, &AutoExpandingTreeView::FocusOnFilterSignal, this, &InternetSearchView::FocusOnFilter);
|
||||
QObject::connect(ui_->search, &QSearchField::textChanged, this, &StreamingSearchView::TextEdited);
|
||||
QObject::connect(ui_->results, &AutoExpandingTreeView::AddToPlaylistSignal, this, &StreamingSearchView::AddToPlaylist);
|
||||
QObject::connect(ui_->results, &AutoExpandingTreeView::FocusOnFilterSignal, this, &StreamingSearchView::FocusOnFilter);
|
||||
|
||||
QObject::connect(&*service_, &InternetService::SearchUpdateStatus, this, &InternetSearchView::UpdateStatus);
|
||||
QObject::connect(&*service_, &InternetService::SearchProgressSetMaximum, this, &InternetSearchView::ProgressSetMaximum);
|
||||
QObject::connect(&*service_, &InternetService::SearchUpdateProgress, this, &InternetSearchView::UpdateProgress);
|
||||
QObject::connect(&*service_, &InternetService::SearchResults, this, &InternetSearchView::SearchDone);
|
||||
QObject::connect(&*service_, &StreamingService::SearchUpdateStatus, this, &StreamingSearchView::UpdateStatus);
|
||||
QObject::connect(&*service_, &StreamingService::SearchProgressSetMaximum, this, &StreamingSearchView::ProgressSetMaximum);
|
||||
QObject::connect(&*service_, &StreamingService::SearchUpdateProgress, this, &StreamingSearchView::UpdateProgress);
|
||||
QObject::connect(&*service_, &StreamingService::SearchResults, this, &StreamingSearchView::SearchDone);
|
||||
|
||||
QObject::connect(app_, &Application::SettingsChanged, this, &InternetSearchView::ReloadSettings);
|
||||
QObject::connect(&*app_->album_cover_loader(), &AlbumCoverLoader::AlbumCoverLoaded, this, &InternetSearchView::AlbumCoverLoaded);
|
||||
QObject::connect(app_, &Application::SettingsChanged, this, &StreamingSearchView::ReloadSettings);
|
||||
QObject::connect(&*app_->album_cover_loader(), &AlbumCoverLoader::AlbumCoverLoaded, this, &StreamingSearchView::AlbumCoverLoaded);
|
||||
|
||||
QObject::connect(ui_->settings, &QToolButton::clicked, ui_->settings, &QToolButton::showMenu);
|
||||
|
||||
@ -208,7 +208,7 @@ void InternetSearchView::Init(Application *app, InternetServicePtr service) {
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::ReloadSettings() {
|
||||
void StreamingSearchView::ReloadSettings() {
|
||||
|
||||
Settings s;
|
||||
|
||||
@ -219,17 +219,17 @@ void InternetSearchView::ReloadSettings() {
|
||||
front_model_->set_use_pretty_covers(use_pretty_covers_);
|
||||
back_model_->set_use_pretty_covers(use_pretty_covers_);
|
||||
|
||||
// Internet search settings
|
||||
// Streaming search settings
|
||||
|
||||
search_type_ = static_cast<InternetSearchView::SearchType>(s.value("type", static_cast<int>(InternetSearchView::SearchType::Artists)).toInt());
|
||||
search_type_ = static_cast<StreamingSearchView::SearchType>(s.value("type", static_cast<int>(StreamingSearchView::SearchType::Artists)).toInt());
|
||||
switch (search_type_) {
|
||||
case InternetSearchView::SearchType::Artists:
|
||||
case StreamingSearchView::SearchType::Artists:
|
||||
ui_->radiobutton_search_artists->setChecked(true);
|
||||
break;
|
||||
case InternetSearchView::SearchType::Albums:
|
||||
case StreamingSearchView::SearchType::Albums:
|
||||
ui_->radiobutton_search_albums->setChecked(true);
|
||||
break;
|
||||
case InternetSearchView::SearchType::Songs:
|
||||
case StreamingSearchView::SearchType::Songs:
|
||||
ui_->radiobutton_search_songs->setChecked(true);
|
||||
break;
|
||||
}
|
||||
@ -255,7 +255,7 @@ void InternetSearchView::ReloadSettings() {
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::showEvent(QShowEvent *e) {
|
||||
void StreamingSearchView::showEvent(QShowEvent *e) {
|
||||
|
||||
QWidget::showEvent(e);
|
||||
|
||||
@ -265,7 +265,7 @@ void InternetSearchView::showEvent(QShowEvent *e) {
|
||||
|
||||
}
|
||||
|
||||
bool InternetSearchView::eventFilter(QObject *object, QEvent *e) {
|
||||
bool StreamingSearchView::eventFilter(QObject *object, QEvent *e) {
|
||||
|
||||
if (object == ui_->search && e->type() == QEvent::KeyRelease) {
|
||||
if (SearchKeyEvent(static_cast<QKeyEvent*>(e))) {
|
||||
@ -282,7 +282,7 @@ bool InternetSearchView::eventFilter(QObject *object, QEvent *e) {
|
||||
|
||||
}
|
||||
|
||||
bool InternetSearchView::SearchKeyEvent(QKeyEvent *e) {
|
||||
bool StreamingSearchView::SearchKeyEvent(QKeyEvent *e) {
|
||||
|
||||
switch (e->key()) {
|
||||
case Qt::Key_Up:
|
||||
@ -310,40 +310,40 @@ bool InternetSearchView::SearchKeyEvent(QKeyEvent *e) {
|
||||
|
||||
}
|
||||
|
||||
bool InternetSearchView::ResultsContextMenuEvent(QContextMenuEvent *e) {
|
||||
bool StreamingSearchView::ResultsContextMenuEvent(QContextMenuEvent *e) {
|
||||
|
||||
if (!context_menu_) {
|
||||
context_menu_ = new QMenu(this);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Append to current playlist"), this, &InternetSearchView::AddSelectedToPlaylist);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Replace current playlist"), this, &InternetSearchView::LoadSelected);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("document-new")), tr("Open in new playlist"), this, &InternetSearchView::OpenSelectedInNewPlaylist);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Append to current playlist"), this, &StreamingSearchView::AddSelectedToPlaylist);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Replace current playlist"), this, &StreamingSearchView::LoadSelected);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("document-new")), tr("Open in new playlist"), this, &StreamingSearchView::OpenSelectedInNewPlaylist);
|
||||
|
||||
context_menu_->addSeparator();
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), tr("Queue track"), this, &InternetSearchView::AddSelectedToPlaylistEnqueue);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), tr("Queue track"), this, &StreamingSearchView::AddSelectedToPlaylistEnqueue);
|
||||
|
||||
context_menu_->addSeparator();
|
||||
|
||||
if (service_->artists_collection_model() || service_->albums_collection_model() || service_->songs_collection_model()) {
|
||||
if (service_->artists_collection_model()) {
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("folder-new")), tr("Add to artists"), this, &InternetSearchView::AddArtists);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("folder-new")), tr("Add to artists"), this, &StreamingSearchView::AddArtists);
|
||||
}
|
||||
if (service_->albums_collection_model()) {
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("folder-new")), tr("Add to albums"), this, &InternetSearchView::AddAlbums);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("folder-new")), tr("Add to albums"), this, &StreamingSearchView::AddAlbums);
|
||||
}
|
||||
if (service_->songs_collection_model()) {
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("folder-new")), tr("Add to songs"), this, &InternetSearchView::AddSongs);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("folder-new")), tr("Add to songs"), this, &StreamingSearchView::AddSongs);
|
||||
}
|
||||
context_menu_->addSeparator();
|
||||
}
|
||||
|
||||
if (ui_->results->selectionModel() && ui_->results->selectionModel()->selectedRows().length() == 1) {
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("search")), tr("Search for this"), this, &InternetSearchView::SearchForThis);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("search")), tr("Search for this"), this, &StreamingSearchView::SearchForThis);
|
||||
}
|
||||
|
||||
context_menu_->addSeparator();
|
||||
context_menu_->addMenu(tr("Group by"))->addActions(group_by_actions_->actions());
|
||||
|
||||
context_menu_->addAction(IconLoader::Load(QStringLiteral("configure")), tr("Configure %1...").arg(Song::TextForSource(service_->source())), this, &InternetSearchView::OpenSettingsDialog);
|
||||
context_menu_->addAction(IconLoader::Load(QStringLiteral("configure")), tr("Configure %1...").arg(Song::TextForSource(service_->source())), this, &StreamingSearchView::OpenSettingsDialog);
|
||||
|
||||
}
|
||||
|
||||
@ -359,7 +359,7 @@ bool InternetSearchView::ResultsContextMenuEvent(QContextMenuEvent *e) {
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::timerEvent(QTimerEvent *e) {
|
||||
void StreamingSearchView::timerEvent(QTimerEvent *e) {
|
||||
|
||||
QMap<int, DelayedSearch>::iterator it = delayed_searches_.find(e->timerId());
|
||||
if (it != delayed_searches_.end()) {
|
||||
@ -372,7 +372,7 @@ void InternetSearchView::timerEvent(QTimerEvent *e) {
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::StartSearch(const QString &query) {
|
||||
void StreamingSearchView::StartSearch(const QString &query) {
|
||||
|
||||
ui_->search->setText(query);
|
||||
TextEdited(query);
|
||||
@ -383,7 +383,7 @@ void InternetSearchView::StartSearch(const QString &query) {
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::TextEdited(const QString &text) {
|
||||
void StreamingSearchView::TextEdited(const QString &text) {
|
||||
|
||||
const QString trimmed(text.trimmed());
|
||||
|
||||
@ -414,7 +414,7 @@ void InternetSearchView::TextEdited(const QString &text) {
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::SwapModels() {
|
||||
void StreamingSearchView::SwapModels() {
|
||||
|
||||
cover_loader_tasks_.clear();
|
||||
|
||||
@ -432,7 +432,7 @@ void InternetSearchView::SwapModels() {
|
||||
|
||||
}
|
||||
|
||||
QStringList InternetSearchView::TokenizeQuery(const QString &query) {
|
||||
QStringList StreamingSearchView::TokenizeQuery(const QString &query) {
|
||||
|
||||
QStringList tokens(query.split(QRegularExpression(QStringLiteral("\\s+"))));
|
||||
|
||||
@ -451,7 +451,7 @@ QStringList InternetSearchView::TokenizeQuery(const QString &query) {
|
||||
|
||||
}
|
||||
|
||||
bool InternetSearchView::Matches(const QStringList &tokens, const QString &string) {
|
||||
bool StreamingSearchView::Matches(const QStringList &tokens, const QString &string) {
|
||||
|
||||
for (const QString &token : tokens) {
|
||||
if (!string.contains(token, Qt::CaseInsensitive)) {
|
||||
@ -463,7 +463,7 @@ bool InternetSearchView::Matches(const QStringList &tokens, const QString &strin
|
||||
|
||||
}
|
||||
|
||||
int InternetSearchView::SearchAsync(const QString &query, const SearchType type) {
|
||||
int StreamingSearchView::SearchAsync(const QString &query, const SearchType type) {
|
||||
|
||||
const int id = searches_next_id_++;
|
||||
|
||||
@ -476,14 +476,14 @@ int InternetSearchView::SearchAsync(const QString &query, const SearchType type)
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::SearchAsync(const int id, const QString &query, const SearchType type) {
|
||||
void StreamingSearchView::SearchAsync(const int id, const QString &query, const SearchType type) {
|
||||
|
||||
const int service_id = service_->Search(query, type);
|
||||
pending_searches_[service_id] = PendingState(id, TokenizeQuery(query));
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::SearchDone(const int service_id, const SongMap &songs, const QString &error) {
|
||||
void StreamingSearchView::SearchDone(const int service_id, const SongMap &songs, const QString &error) {
|
||||
|
||||
if (!pending_searches_.contains(service_id)) return;
|
||||
|
||||
@ -505,7 +505,7 @@ void InternetSearchView::SearchDone(const int service_id, const SongMap &songs,
|
||||
}
|
||||
|
||||
// Load cached pixmaps into the results
|
||||
for (InternetSearchView::ResultList::iterator it = results.begin(); it != results.end(); ++it) {
|
||||
for (StreamingSearchView::ResultList::iterator it = results.begin(); it != results.end(); ++it) {
|
||||
it->pixmap_cache_key_ = PixmapCacheKey(*it);
|
||||
}
|
||||
|
||||
@ -513,7 +513,7 @@ void InternetSearchView::SearchDone(const int service_id, const SongMap &songs,
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::CancelSearch(const int id) {
|
||||
void StreamingSearchView::CancelSearch(const int id) {
|
||||
|
||||
QMap<int, DelayedSearch>::iterator it;
|
||||
for (it = delayed_searches_.begin(); it != delayed_searches_.end(); ++it) {
|
||||
@ -527,7 +527,7 @@ void InternetSearchView::CancelSearch(const int id) {
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::AddResults(const int id, const InternetSearchView::ResultList &results) {
|
||||
void StreamingSearchView::AddResults(const int id, const StreamingSearchView::ResultList &results) {
|
||||
|
||||
if (id != last_search_id_ || results.isEmpty()) return;
|
||||
|
||||
@ -538,7 +538,7 @@ void InternetSearchView::AddResults(const int id, const InternetSearchView::Resu
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::SearchError(const int id, const QString &error) {
|
||||
void StreamingSearchView::SearchError(const int id, const QString &error) {
|
||||
|
||||
if (id != last_search_id_) return;
|
||||
|
||||
@ -551,7 +551,7 @@ void InternetSearchView::SearchError(const int id, const QString &error) {
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::UpdateStatus(const int service_id, const QString &text) {
|
||||
void StreamingSearchView::UpdateStatus(const int service_id, const QString &text) {
|
||||
|
||||
if (!pending_searches_.contains(service_id)) return;
|
||||
const PendingState state = pending_searches_[service_id];
|
||||
@ -562,7 +562,7 @@ void InternetSearchView::UpdateStatus(const int service_id, const QString &text)
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::ProgressSetMaximum(const int service_id, const int max) {
|
||||
void StreamingSearchView::ProgressSetMaximum(const int service_id, const int max) {
|
||||
|
||||
if (!pending_searches_.contains(service_id)) return;
|
||||
const PendingState state = pending_searches_[service_id];
|
||||
@ -572,7 +572,7 @@ void InternetSearchView::ProgressSetMaximum(const int service_id, const int max)
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::UpdateProgress(const int service_id, const int progress) {
|
||||
void StreamingSearchView::UpdateProgress(const int service_id, const int progress) {
|
||||
|
||||
if (!pending_searches_.contains(service_id)) return;
|
||||
const PendingState state = pending_searches_[service_id];
|
||||
@ -582,7 +582,7 @@ void InternetSearchView::UpdateProgress(const int service_id, const int progress
|
||||
|
||||
}
|
||||
|
||||
MimeData *InternetSearchView::SelectedMimeData() {
|
||||
MimeData *StreamingSearchView::SelectedMimeData() {
|
||||
|
||||
if (!ui_->results->selectionModel()) return nullptr;
|
||||
|
||||
@ -616,11 +616,11 @@ MimeData *InternetSearchView::SelectedMimeData() {
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::AddSelectedToPlaylist() {
|
||||
void StreamingSearchView::AddSelectedToPlaylist() {
|
||||
emit AddToPlaylist(SelectedMimeData());
|
||||
}
|
||||
|
||||
void InternetSearchView::LoadSelected() {
|
||||
void StreamingSearchView::LoadSelected() {
|
||||
|
||||
MimeData *mimedata = SelectedMimeData();
|
||||
if (!mimedata) return;
|
||||
@ -630,7 +630,7 @@ void InternetSearchView::LoadSelected() {
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::AddSelectedToPlaylistEnqueue() {
|
||||
void StreamingSearchView::AddSelectedToPlaylistEnqueue() {
|
||||
|
||||
MimeData *mimedata = SelectedMimeData();
|
||||
if (!mimedata) return;
|
||||
@ -640,7 +640,7 @@ void InternetSearchView::AddSelectedToPlaylistEnqueue() {
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::OpenSelectedInNewPlaylist() {
|
||||
void StreamingSearchView::OpenSelectedInNewPlaylist() {
|
||||
|
||||
MimeData *mimedata = SelectedMimeData();
|
||||
if (!mimedata) return;
|
||||
@ -650,40 +650,40 @@ void InternetSearchView::OpenSelectedInNewPlaylist() {
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::SearchForThis() {
|
||||
void StreamingSearchView::SearchForThis() {
|
||||
StartSearch(ui_->results->selectionModel()->selectedRows().first().data().toString());
|
||||
}
|
||||
|
||||
bool InternetSearchView::SearchFieldHasFocus() const {
|
||||
bool StreamingSearchView::SearchFieldHasFocus() const {
|
||||
|
||||
return ui_->search->hasFocus();
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::FocusSearchField() {
|
||||
void StreamingSearchView::FocusSearchField() {
|
||||
|
||||
ui_->search->setFocus();
|
||||
ui_->search->selectAll();
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::FocusOnFilter(QKeyEvent *e) {
|
||||
void StreamingSearchView::FocusOnFilter(QKeyEvent *e) {
|
||||
|
||||
ui_->search->setFocus();
|
||||
QApplication::sendEvent(ui_->search, e);
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::OpenSettingsDialog() {
|
||||
void StreamingSearchView::OpenSettingsDialog() {
|
||||
app_->OpenSettingsDialogAtPage(service_->settings_page());
|
||||
}
|
||||
|
||||
void InternetSearchView::GroupByClicked(QAction *action) {
|
||||
void StreamingSearchView::GroupByClicked(QAction *action) {
|
||||
|
||||
if (action->property("group_by").isNull()) {
|
||||
if (!group_by_dialog_) {
|
||||
group_by_dialog_ = make_unique<GroupByDialog>();
|
||||
QObject::connect(&*group_by_dialog_, &GroupByDialog::Accepted, this, &InternetSearchView::SetGroupBy);
|
||||
QObject::connect(&*group_by_dialog_, &GroupByDialog::Accepted, this, &StreamingSearchView::SetGroupBy);
|
||||
}
|
||||
|
||||
group_by_dialog_->show();
|
||||
@ -694,11 +694,11 @@ void InternetSearchView::GroupByClicked(QAction *action) {
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::SetGroupBy(const CollectionModel::Grouping g) {
|
||||
void StreamingSearchView::SetGroupBy(const CollectionModel::Grouping g) {
|
||||
|
||||
// Clear requests: changing "group by" on the models will cause all the items to be removed/added again,
|
||||
// so all the QModelIndex here will become invalid. New requests will be created for those
|
||||
// songs when they will be displayed again anyway (when InternetSearchItemDelegate::paint will call LazyLoadAlbumCover)
|
||||
// songs when they will be displayed again anyway (when StreamingSearchItemDelegate::paint will call LazyLoadAlbumCover)
|
||||
cover_loader_tasks_.clear();
|
||||
|
||||
// Update the models
|
||||
@ -730,19 +730,19 @@ void InternetSearchView::SetGroupBy(const CollectionModel::Grouping g) {
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::SearchArtistsClicked(const bool) {
|
||||
SetSearchType(InternetSearchView::SearchType::Artists);
|
||||
void StreamingSearchView::SearchArtistsClicked(const bool) {
|
||||
SetSearchType(StreamingSearchView::SearchType::Artists);
|
||||
}
|
||||
|
||||
void InternetSearchView::SearchAlbumsClicked(const bool) {
|
||||
SetSearchType(InternetSearchView::SearchType::Albums);
|
||||
void StreamingSearchView::SearchAlbumsClicked(const bool) {
|
||||
SetSearchType(StreamingSearchView::SearchType::Albums);
|
||||
}
|
||||
|
||||
void InternetSearchView::SearchSongsClicked(const bool) {
|
||||
SetSearchType(InternetSearchView::SearchType::Songs);
|
||||
void StreamingSearchView::SearchSongsClicked(const bool) {
|
||||
SetSearchType(StreamingSearchView::SearchType::Songs);
|
||||
}
|
||||
|
||||
void InternetSearchView::SetSearchType(const InternetSearchView::SearchType type) {
|
||||
void StreamingSearchView::SetSearchType(const StreamingSearchView::SearchType type) {
|
||||
|
||||
search_type_ = type;
|
||||
|
||||
@ -755,37 +755,37 @@ void InternetSearchView::SetSearchType(const InternetSearchView::SearchType type
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::AddArtists() {
|
||||
void StreamingSearchView::AddArtists() {
|
||||
|
||||
MimeData *mimedata = SelectedMimeData();
|
||||
if (!mimedata) return;
|
||||
if (const InternetSongMimeData *internet_song_data = qobject_cast<const InternetSongMimeData*>(mimedata)) {
|
||||
emit AddArtistsSignal(internet_song_data->songs);
|
||||
if (const StreamSongMimeData *streaming_song_data = qobject_cast<const StreamSongMimeData*>(mimedata)) {
|
||||
emit AddArtistsSignal(streaming_song_data->songs);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::AddAlbums() {
|
||||
void StreamingSearchView::AddAlbums() {
|
||||
|
||||
MimeData *mimedata = SelectedMimeData();
|
||||
if (!mimedata) return;
|
||||
if (const InternetSongMimeData *internet_song_data = qobject_cast<const InternetSongMimeData*>(mimedata)) {
|
||||
emit AddAlbumsSignal(internet_song_data->songs);
|
||||
if (const StreamSongMimeData *streaming_song_data = qobject_cast<const StreamSongMimeData*>(mimedata)) {
|
||||
emit AddAlbumsSignal(streaming_song_data->songs);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::AddSongs() {
|
||||
void StreamingSearchView::AddSongs() {
|
||||
|
||||
MimeData *mimedata = SelectedMimeData();
|
||||
if (!mimedata) return;
|
||||
if (const InternetSongMimeData *internet_song_data = qobject_cast<const InternetSongMimeData*>(mimedata)) {
|
||||
emit AddSongsSignal(internet_song_data->songs);
|
||||
if (const StreamSongMimeData *streaming_song_data = qobject_cast<const StreamSongMimeData*>(mimedata)) {
|
||||
emit AddSongsSignal(streaming_song_data->songs);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
QString InternetSearchView::PixmapCacheKey(const InternetSearchView::Result &result) const {
|
||||
QString StreamingSearchView::PixmapCacheKey(const StreamingSearchView::Result &result) const {
|
||||
|
||||
if (result.metadata_.art_automatic_is_valid()) {
|
||||
return Song::TextForSource(service_->source()) + QLatin1Char('/') + result.metadata_.art_automatic().toString();
|
||||
@ -798,11 +798,11 @@ QString InternetSearchView::PixmapCacheKey(const InternetSearchView::Result &res
|
||||
|
||||
}
|
||||
|
||||
bool InternetSearchView::FindCachedPixmap(const InternetSearchView::Result &result, QPixmap *pixmap) const {
|
||||
bool StreamingSearchView::FindCachedPixmap(const StreamingSearchView::Result &result, QPixmap *pixmap) const {
|
||||
return QPixmapCache::find(result.pixmap_cache_key_, pixmap);
|
||||
}
|
||||
|
||||
void InternetSearchView::LazyLoadAlbumCover(const QModelIndex &proxy_index) {
|
||||
void StreamingSearchView::LazyLoadAlbumCover(const QModelIndex &proxy_index) {
|
||||
|
||||
if (!proxy_index.isValid() || proxy_index.model() != front_proxy_) {
|
||||
return;
|
||||
@ -814,7 +814,7 @@ void InternetSearchView::LazyLoadAlbumCover(const QModelIndex &proxy_index) {
|
||||
}
|
||||
|
||||
// Already loading art for this item?
|
||||
if (source_index.data(InternetSearchModel::Role_LazyLoadingArt).isValid()) {
|
||||
if (source_index.data(StreamingSearchModel::Role_LazyLoadingArt).isValid()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -833,7 +833,7 @@ void InternetSearchView::LazyLoadAlbumCover(const QModelIndex &proxy_index) {
|
||||
if (!item_album) {
|
||||
return;
|
||||
}
|
||||
item_album->setData(true, InternetSearchModel::Role_LazyLoadingArt);
|
||||
item_album->setData(true, StreamingSearchModel::Role_LazyLoadingArt);
|
||||
|
||||
// Walk down the item's children until we find a track
|
||||
QStandardItem *item_song = item_album;
|
||||
@ -842,7 +842,7 @@ void InternetSearchView::LazyLoadAlbumCover(const QModelIndex &proxy_index) {
|
||||
}
|
||||
|
||||
// Get the track's Result
|
||||
const InternetSearchView::Result result = item_song->data(InternetSearchModel::Role_Result).value<InternetSearchView::Result>();
|
||||
const StreamingSearchView::Result result = item_song->data(StreamingSearchModel::Role_Result).value<StreamingSearchView::Result>();
|
||||
|
||||
QPixmap cached_pixmap;
|
||||
if (QPixmapCache::find(result.pixmap_cache_key_, &cached_pixmap)) {
|
||||
@ -857,7 +857,7 @@ void InternetSearchView::LazyLoadAlbumCover(const QModelIndex &proxy_index) {
|
||||
|
||||
}
|
||||
|
||||
void InternetSearchView::AlbumCoverLoaded(const quint64 id, const AlbumCoverLoaderResult &albumcover_result) {
|
||||
void StreamingSearchView::AlbumCoverLoaded(const quint64 id, const AlbumCoverLoaderResult &albumcover_result) {
|
||||
|
||||
if (!cover_loader_tasks_.contains(id)) return;
|
||||
|
@ -19,8 +19,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef INTERNETSEARCHVIEW_H
|
||||
#define INTERNETSEARCHVIEW_H
|
||||
#ifndef STREAMINGSEARCHVIEW_H
|
||||
#define STREAMINGSEARCHVIEW_H
|
||||
|
||||
#include "config.h"
|
||||
|
||||
@ -59,16 +59,16 @@ class QTimerEvent;
|
||||
class Application;
|
||||
class MimeData;
|
||||
class GroupByDialog;
|
||||
class InternetService;
|
||||
class InternetSearchModel;
|
||||
class Ui_InternetSearchView;
|
||||
class StreamingService;
|
||||
class StreamingSearchModel;
|
||||
class Ui_StreamingSearchView;
|
||||
|
||||
class InternetSearchView : public QWidget {
|
||||
class StreamingSearchView : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit InternetSearchView(QWidget *parent = nullptr);
|
||||
~InternetSearchView() override;
|
||||
explicit StreamingSearchView(QWidget *parent = nullptr);
|
||||
~StreamingSearchView() override;
|
||||
|
||||
enum class SearchType {
|
||||
Artists = 1,
|
||||
@ -81,7 +81,7 @@ class InternetSearchView : public QWidget {
|
||||
};
|
||||
using ResultList = QList<Result>;
|
||||
|
||||
void Init(Application *app, SharedPtr<InternetService> service);
|
||||
void Init(Application *app, SharedPtr<StreamingService> service);
|
||||
|
||||
bool SearchFieldHasFocus() const;
|
||||
void FocusSearchField();
|
||||
@ -151,7 +151,7 @@ class InternetSearchView : public QWidget {
|
||||
void UpdateStatus(const int service_id, const QString &text);
|
||||
void ProgressSetMaximum(const int service_id, const int max);
|
||||
void UpdateProgress(const int service_id, const int progress);
|
||||
void AddResults(const int service_id, const InternetSearchView::ResultList &results);
|
||||
void AddResults(const int service_id, const StreamingSearchView::ResultList &results);
|
||||
|
||||
void FocusOnFilter(QKeyEvent *e);
|
||||
|
||||
@ -183,8 +183,8 @@ class InternetSearchView : public QWidget {
|
||||
|
||||
private:
|
||||
Application *app_;
|
||||
SharedPtr<InternetService> service_;
|
||||
Ui_InternetSearchView *ui_;
|
||||
SharedPtr<StreamingService> service_;
|
||||
Ui_StreamingSearchView *ui_;
|
||||
ScopedPtr<GroupByDialog> group_by_dialog_;
|
||||
|
||||
QMenu *context_menu_;
|
||||
@ -194,9 +194,9 @@ class InternetSearchView : public QWidget {
|
||||
// Like graphics APIs have a front buffer and a back buffer, there's a front model and a back model
|
||||
// The front model is the one that's shown in the UI and the back model is the one that lies in wait.
|
||||
// current_model_ will point to either the front or the back model.
|
||||
InternetSearchModel *front_model_;
|
||||
InternetSearchModel *back_model_;
|
||||
InternetSearchModel *current_model_;
|
||||
StreamingSearchModel *front_model_;
|
||||
StreamingSearchModel *back_model_;
|
||||
StreamingSearchModel *current_model_;
|
||||
|
||||
QSortFilterProxyModel *front_proxy_;
|
||||
QSortFilterProxyModel *back_proxy_;
|
||||
@ -215,7 +215,7 @@ class InternetSearchView : public QWidget {
|
||||
|
||||
QMap<quint64, QPair<QModelIndex, QString>> cover_loader_tasks_;
|
||||
};
|
||||
Q_DECLARE_METATYPE(InternetSearchView::Result)
|
||||
Q_DECLARE_METATYPE(InternetSearchView::ResultList)
|
||||
Q_DECLARE_METATYPE(StreamingSearchView::Result)
|
||||
Q_DECLARE_METATYPE(StreamingSearchView::ResultList)
|
||||
|
||||
#endif // INTERNETSEARCHVIEW_H
|
||||
#endif // STREAMINGSEARCHVIEW_H
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>InternetSearchView</class>
|
||||
<widget class="QWidget" name="InternetSearchView">
|
||||
<class>StreamingSearchView</class>
|
||||
<widget class="QWidget" name="StreamingSearchView">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
@ -11,7 +11,7 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Internet Search View</string>
|
||||
<string>Streaming Search View</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="spacing">
|
@ -20,13 +20,13 @@
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
|
||||
#include "internetservice.h"
|
||||
#include "streamingservice.h"
|
||||
#include "core/song.h"
|
||||
#include "settings/settingsdialog.h"
|
||||
|
||||
class Application;
|
||||
|
||||
InternetService::InternetService(const Song::Source source, const QString &name, const QString &url_scheme, const QString &settings_group, const SettingsDialog::Page settings_page, Application *app, QObject *parent)
|
||||
StreamingService::StreamingService(const Song::Source source, const QString &name, const QString &url_scheme, const QString &settings_group, const SettingsDialog::Page settings_page, Application *app, QObject *parent)
|
||||
: QObject(parent),
|
||||
app_(app),
|
||||
source_(source),
|
@ -17,8 +17,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef INTERNETSERVICE_H
|
||||
#define INTERNETSERVICE_H
|
||||
#ifndef STREAMINGSERVICE_H
|
||||
#define STREAMINGSERVICE_H
|
||||
|
||||
#include <QtGlobal>
|
||||
#include <QObject>
|
||||
@ -31,20 +31,20 @@
|
||||
#include "core/shared_ptr.h"
|
||||
#include "core/song.h"
|
||||
#include "settings/settingsdialog.h"
|
||||
#include "internetsearchview.h"
|
||||
#include "streamingsearchview.h"
|
||||
|
||||
class Application;
|
||||
class CollectionBackend;
|
||||
class CollectionModel;
|
||||
class CollectionFilter;
|
||||
|
||||
class InternetService : public QObject {
|
||||
class StreamingService : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit InternetService(const Song::Source source, const QString &name, const QString &url_scheme, const QString &settings_group, const SettingsDialog::Page settings_page, Application *app, QObject *parent = nullptr);
|
||||
explicit StreamingService(const Song::Source source, const QString &name, const QString &url_scheme, const QString &settings_group, const SettingsDialog::Page settings_page, Application *app, QObject *parent = nullptr);
|
||||
|
||||
~InternetService() override {}
|
||||
~StreamingService() override {}
|
||||
virtual void Exit() {}
|
||||
|
||||
virtual Song::Source source() const { return source_; }
|
||||
@ -58,7 +58,7 @@ class InternetService : public QObject {
|
||||
virtual QIcon Icon() const { return Song::IconForSource(source_); }
|
||||
virtual bool oauth() const { return false; }
|
||||
virtual bool authenticated() const { return false; }
|
||||
virtual int Search(const QString &query, InternetSearchView::SearchType type) { Q_UNUSED(query); Q_UNUSED(type); return 0; }
|
||||
virtual int Search(const QString &query, StreamingSearchView::SearchType type) { Q_UNUSED(query); Q_UNUSED(type); return 0; }
|
||||
virtual void CancelSearch() {}
|
||||
|
||||
virtual SharedPtr<CollectionBackend> artists_collection_backend() { return nullptr; }
|
||||
@ -144,9 +144,9 @@ class InternetService : public QObject {
|
||||
SettingsDialog::Page settings_page_;
|
||||
};
|
||||
|
||||
using InternetServicePtr = SharedPtr<InternetService>;
|
||||
using StreamingServicePtr = SharedPtr<StreamingService>;
|
||||
|
||||
Q_DECLARE_METATYPE(InternetService*)
|
||||
Q_DECLARE_METATYPE(InternetServicePtr)
|
||||
Q_DECLARE_METATYPE(StreamingService*)
|
||||
Q_DECLARE_METATYPE(StreamingServicePtr)
|
||||
|
||||
#endif // INTERNETSERVICE_H
|
||||
#endif // STREAMINGSERVICE_H
|
@ -26,71 +26,71 @@
|
||||
#include <QString>
|
||||
|
||||
#include "core/logging.h"
|
||||
#include "internetservices.h"
|
||||
#include "internetservice.h"
|
||||
#include "streamingservices.h"
|
||||
#include "streamingservice.h"
|
||||
|
||||
InternetServices::InternetServices(QObject *parent) : QObject(parent) {}
|
||||
StreamingServices::StreamingServices(QObject *parent) : QObject(parent) {}
|
||||
|
||||
InternetServices::~InternetServices() {
|
||||
StreamingServices::~StreamingServices() {
|
||||
|
||||
while (!services_.isEmpty()) {
|
||||
InternetServicePtr service = services_.first();
|
||||
StreamingServicePtr service = services_.first();
|
||||
RemoveService(service);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void InternetServices::AddService(InternetServicePtr service) {
|
||||
void StreamingServices::AddService(StreamingServicePtr service) {
|
||||
|
||||
services_.insert(service->source(), service);
|
||||
if (service->has_initial_load_settings()) service->InitialLoadSettings();
|
||||
else service->ReloadSettings();
|
||||
|
||||
qLog(Debug) << "Added internet service" << service->name();
|
||||
qLog(Debug) << "Added streaming service" << service->name();
|
||||
|
||||
}
|
||||
|
||||
void InternetServices::RemoveService(InternetServicePtr service) {
|
||||
void StreamingServices::RemoveService(StreamingServicePtr service) {
|
||||
|
||||
if (!services_.contains(service->source())) return;
|
||||
services_.remove(service->source());
|
||||
QObject::disconnect(&*service, nullptr, this, nullptr);
|
||||
|
||||
qLog(Debug) << "Removed internet service" << service->name();
|
||||
qLog(Debug) << "Removed streaming service" << service->name();
|
||||
|
||||
}
|
||||
|
||||
InternetServicePtr InternetServices::ServiceBySource(const Song::Source source) const {
|
||||
StreamingServicePtr StreamingServices::ServiceBySource(const Song::Source source) const {
|
||||
|
||||
if (services_.contains(source)) return services_.value(source);
|
||||
return nullptr;
|
||||
|
||||
}
|
||||
|
||||
void InternetServices::ReloadSettings() {
|
||||
void StreamingServices::ReloadSettings() {
|
||||
|
||||
const QList<InternetServicePtr> services = services_.values();
|
||||
for (InternetServicePtr service : services) {
|
||||
const QList<StreamingServicePtr> services = services_.values();
|
||||
for (StreamingServicePtr service : services) {
|
||||
service->ReloadSettings();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void InternetServices::Exit() {
|
||||
void StreamingServices::Exit() {
|
||||
|
||||
const QList<InternetServicePtr> services = services_.values();
|
||||
for (InternetServicePtr service : services) {
|
||||
const QList<StreamingServicePtr> services = services_.values();
|
||||
for (StreamingServicePtr service : services) {
|
||||
wait_for_exit_ << &*service;
|
||||
QObject::connect(&*service, &InternetService::ExitFinished, this, &InternetServices::ExitReceived);
|
||||
QObject::connect(&*service, &StreamingService::ExitFinished, this, &StreamingServices::ExitReceived);
|
||||
service->Exit();
|
||||
}
|
||||
if (wait_for_exit_.isEmpty()) emit ExitFinished();
|
||||
|
||||
}
|
||||
|
||||
void InternetServices::ExitReceived() {
|
||||
void StreamingServices::ExitReceived() {
|
||||
|
||||
InternetService *service = qobject_cast<InternetService*>(sender());
|
||||
StreamingService *service = qobject_cast<StreamingService*>(sender());
|
||||
wait_for_exit_.removeAll(service);
|
||||
if (wait_for_exit_.isEmpty()) emit ExitFinished();
|
||||
|
@ -19,8 +19,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef INTERNETSERVICES_H
|
||||
#define INTERNETSERVICES_H
|
||||
#ifndef STREAMINGSERVICES_H
|
||||
#define STREAMINGSERVICES_H
|
||||
|
||||
#include "config.h"
|
||||
|
||||
@ -34,24 +34,24 @@
|
||||
#include <core/shared_ptr.h>
|
||||
#include "core/song.h"
|
||||
|
||||
class InternetService;
|
||||
class StreamingService;
|
||||
|
||||
class InternetServices : public QObject {
|
||||
class StreamingServices : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit InternetServices(QObject *parent = nullptr);
|
||||
~InternetServices() override;
|
||||
explicit StreamingServices(QObject *parent = nullptr);
|
||||
~StreamingServices() override;
|
||||
|
||||
SharedPtr<InternetService> ServiceBySource(const Song::Source source) const;
|
||||
SharedPtr<StreamingService> ServiceBySource(const Song::Source source) const;
|
||||
|
||||
template <typename T>
|
||||
SharedPtr<T> Service() {
|
||||
return std::static_pointer_cast<T>(ServiceBySource(T::kSource));
|
||||
}
|
||||
|
||||
void AddService(SharedPtr<InternetService> service);
|
||||
void RemoveService(SharedPtr<InternetService> service);
|
||||
void AddService(SharedPtr<StreamingService> service);
|
||||
void RemoveService(SharedPtr<StreamingService> service);
|
||||
void ReloadSettings();
|
||||
void Exit();
|
||||
|
||||
@ -62,8 +62,8 @@ class InternetServices : public QObject {
|
||||
void ExitReceived();
|
||||
|
||||
private:
|
||||
QMap<Song::Source, SharedPtr<InternetService>> services_;
|
||||
QList<InternetService*> wait_for_exit_;
|
||||
QMap<Song::Source, SharedPtr<StreamingService>> services_;
|
||||
QList<StreamingService*> wait_for_exit_;
|
||||
};
|
||||
|
||||
#endif // INTERNETSERVICES_H
|
||||
#endif // STREAMINGSERVICES_H
|
@ -35,22 +35,22 @@
|
||||
#include "collection/collectionbackend.h"
|
||||
#include "collection/collectionmodel.h"
|
||||
#include "collection/collectionfilter.h"
|
||||
#include "internetservice.h"
|
||||
#include "internetsongsview.h"
|
||||
#include "internetcollectionview.h"
|
||||
#include "ui_internetcollectionviewcontainer.h"
|
||||
#include "streamingservice.h"
|
||||
#include "streamingsongsview.h"
|
||||
#include "streamingcollectionview.h"
|
||||
#include "ui_streamingcollectionviewcontainer.h"
|
||||
|
||||
InternetSongsView::InternetSongsView(Application *app, InternetServicePtr service, const QString &settings_group, const SettingsDialog::Page settings_page, QWidget *parent)
|
||||
StreamingSongsView::StreamingSongsView(Application *app, StreamingServicePtr service, const QString &settings_group, const SettingsDialog::Page settings_page, QWidget *parent)
|
||||
: QWidget(parent),
|
||||
app_(app),
|
||||
service_(service),
|
||||
settings_group_(settings_group),
|
||||
settings_page_(settings_page),
|
||||
ui_(new Ui_InternetCollectionViewContainer) {
|
||||
ui_(new Ui_StreamingCollectionViewContainer) {
|
||||
|
||||
ui_->setupUi(this);
|
||||
|
||||
ui_->stacked->setCurrentWidget(ui_->internetcollection_page);
|
||||
ui_->stacked->setCurrentWidget(ui_->streamingcollection_page);
|
||||
ui_->view->Init(app_, service_->songs_collection_backend(), service_->songs_collection_model(), false);
|
||||
ui_->view->setModel(service_->songs_collection_filter_model());
|
||||
ui_->view->SetFilter(ui_->filter_widget);
|
||||
@ -58,45 +58,45 @@ InternetSongsView::InternetSongsView(Application *app, InternetServicePtr servic
|
||||
ui_->filter_widget->Init(service_->songs_collection_model(), service_->songs_collection_filter_model());
|
||||
|
||||
QAction *action_configure = new QAction(IconLoader::Load(QStringLiteral("configure")), tr("Configure %1...").arg(Song::DescriptionForSource(service_->source())), this);
|
||||
QObject::connect(action_configure, &QAction::triggered, this, &InternetSongsView::OpenSettingsDialog);
|
||||
QObject::connect(action_configure, &QAction::triggered, this, &StreamingSongsView::OpenSettingsDialog);
|
||||
ui_->filter_widget->AddMenuAction(action_configure);
|
||||
|
||||
QObject::connect(ui_->view, &InternetCollectionView::GetSongs, this, &InternetSongsView::GetSongs);
|
||||
QObject::connect(ui_->view, &InternetCollectionView::RemoveSongs, &*service_, &InternetService::RemoveSongsByList);
|
||||
QObject::connect(ui_->view, &StreamingCollectionView::GetSongs, this, &StreamingSongsView::GetSongs);
|
||||
QObject::connect(ui_->view, &StreamingCollectionView::RemoveSongs, &*service_, &StreamingService::RemoveSongsByList);
|
||||
|
||||
QObject::connect(ui_->refresh, &QPushButton::clicked, this, &InternetSongsView::GetSongs);
|
||||
QObject::connect(ui_->close, &QPushButton::clicked, this, &InternetSongsView::AbortGetSongs);
|
||||
QObject::connect(ui_->abort, &QPushButton::clicked, this, &InternetSongsView::AbortGetSongs);
|
||||
QObject::connect(&*service_, &InternetService::SongsResults, this, &InternetSongsView::SongsFinished);
|
||||
QObject::connect(&*service_, &InternetService::SongsUpdateStatus, ui_->status, &QLabel::setText);
|
||||
QObject::connect(&*service_, &InternetService::SongsProgressSetMaximum, ui_->progressbar, &QProgressBar::setMaximum);
|
||||
QObject::connect(&*service_, &InternetService::SongsUpdateProgress, ui_->progressbar, &QProgressBar::setValue);
|
||||
QObject::connect(ui_->refresh, &QPushButton::clicked, this, &StreamingSongsView::GetSongs);
|
||||
QObject::connect(ui_->close, &QPushButton::clicked, this, &StreamingSongsView::AbortGetSongs);
|
||||
QObject::connect(ui_->abort, &QPushButton::clicked, this, &StreamingSongsView::AbortGetSongs);
|
||||
QObject::connect(&*service_, &StreamingService::SongsResults, this, &StreamingSongsView::SongsFinished);
|
||||
QObject::connect(&*service_, &StreamingService::SongsUpdateStatus, ui_->status, &QLabel::setText);
|
||||
QObject::connect(&*service_, &StreamingService::SongsProgressSetMaximum, ui_->progressbar, &QProgressBar::setMaximum);
|
||||
QObject::connect(&*service_, &StreamingService::SongsUpdateProgress, ui_->progressbar, &QProgressBar::setValue);
|
||||
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::TotalArtistCountUpdated, ui_->view, &InternetCollectionView::TotalArtistCountUpdated);
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::TotalAlbumCountUpdated, ui_->view, &InternetCollectionView::TotalAlbumCountUpdated);
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::TotalSongCountUpdated, ui_->view, &InternetCollectionView::TotalSongCountUpdated);
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::modelAboutToBeReset, ui_->view, &InternetCollectionView::SaveFocus);
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::modelReset, ui_->view, &InternetCollectionView::RestoreFocus);
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::TotalArtistCountUpdated, ui_->view, &StreamingCollectionView::TotalArtistCountUpdated);
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::TotalAlbumCountUpdated, ui_->view, &StreamingCollectionView::TotalAlbumCountUpdated);
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::TotalSongCountUpdated, ui_->view, &StreamingCollectionView::TotalSongCountUpdated);
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::modelAboutToBeReset, ui_->view, &StreamingCollectionView::SaveFocus);
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::modelReset, ui_->view, &StreamingCollectionView::RestoreFocus);
|
||||
|
||||
ReloadSettings();
|
||||
|
||||
}
|
||||
|
||||
InternetSongsView::~InternetSongsView() { delete ui_; }
|
||||
StreamingSongsView::~StreamingSongsView() { delete ui_; }
|
||||
|
||||
void InternetSongsView::ReloadSettings() {
|
||||
void StreamingSongsView::ReloadSettings() {
|
||||
|
||||
ui_->filter_widget->ReloadSettings();
|
||||
ui_->view->ReloadSettings();
|
||||
|
||||
}
|
||||
|
||||
void InternetSongsView::OpenSettingsDialog() {
|
||||
void StreamingSongsView::OpenSettingsDialog() {
|
||||
app_->OpenSettingsDialogAtPage(service_->settings_page());
|
||||
}
|
||||
|
||||
|
||||
void InternetSongsView::GetSongs() {
|
||||
void StreamingSongsView::GetSongs() {
|
||||
|
||||
if (!service_->authenticated() && service_->oauth()) {
|
||||
service_->ShowConfig();
|
||||
@ -112,16 +112,16 @@ void InternetSongsView::GetSongs() {
|
||||
|
||||
}
|
||||
|
||||
void InternetSongsView::AbortGetSongs() {
|
||||
void StreamingSongsView::AbortGetSongs() {
|
||||
|
||||
service_->ResetSongsRequest();
|
||||
ui_->progressbar->setValue(0);
|
||||
ui_->status->clear();
|
||||
ui_->stacked->setCurrentWidget(ui_->internetcollection_page);
|
||||
ui_->stacked->setCurrentWidget(ui_->streamingcollection_page);
|
||||
|
||||
}
|
||||
|
||||
void InternetSongsView::SongsFinished(const SongMap &songs, const QString &error) {
|
||||
void StreamingSongsView::SongsFinished(const SongMap &songs, const QString &error) {
|
||||
|
||||
if (songs.isEmpty() && !error.isEmpty()) {
|
||||
ui_->status->setText(error);
|
||||
@ -131,7 +131,7 @@ void InternetSongsView::SongsFinished(const SongMap &songs, const QString &error
|
||||
ui_->close->show();
|
||||
}
|
||||
else {
|
||||
ui_->stacked->setCurrentWidget(ui_->internetcollection_page);
|
||||
ui_->stacked->setCurrentWidget(ui_->streamingcollection_page);
|
||||
ui_->status->clear();
|
||||
service_->songs_collection_backend()->UpdateSongsBySongIDAsync(songs);
|
||||
}
|
@ -17,8 +17,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef INTERNETSONGSVIEW_H
|
||||
#define INTERNETSONGSVIEW_H
|
||||
#ifndef STREAMINGSONGSVIEW_H
|
||||
#define STREAMINGSONGSVIEW_H
|
||||
|
||||
#include "config.h"
|
||||
|
||||
@ -30,24 +30,24 @@
|
||||
#include "core/shared_ptr.h"
|
||||
#include "core/song.h"
|
||||
#include "settings/settingsdialog.h"
|
||||
#include "ui_internetcollectionviewcontainer.h"
|
||||
#include "ui_streamingcollectionviewcontainer.h"
|
||||
|
||||
class QContextMenuEvent;
|
||||
|
||||
class Application;
|
||||
class InternetService;
|
||||
class InternetCollectionView;
|
||||
class StreamingService;
|
||||
class StreamingCollectionView;
|
||||
|
||||
class InternetSongsView : public QWidget {
|
||||
class StreamingSongsView : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit InternetSongsView(Application *app, SharedPtr<InternetService> service, const QString &settings_group, const SettingsDialog::Page settings_page, QWidget *parent = nullptr);
|
||||
~InternetSongsView() override;
|
||||
explicit StreamingSongsView(Application *app, SharedPtr<StreamingService> service, const QString &settings_group, const SettingsDialog::Page settings_page, QWidget *parent = nullptr);
|
||||
~StreamingSongsView() override;
|
||||
|
||||
void ReloadSettings();
|
||||
|
||||
InternetCollectionView *view() const { return ui_->view; }
|
||||
StreamingCollectionView *view() const { return ui_->view; }
|
||||
|
||||
bool SearchFieldHasFocus() const { return ui_->filter_widget->SearchFieldHasFocus(); }
|
||||
void FocusSearchField() { ui_->filter_widget->FocusSearchField(); }
|
||||
@ -60,10 +60,10 @@ class InternetSongsView : public QWidget {
|
||||
|
||||
private:
|
||||
Application *app_;
|
||||
SharedPtr<InternetService> service_;
|
||||
SharedPtr<StreamingService> service_;
|
||||
QString settings_group_;
|
||||
SettingsDialog::Page settings_page_;
|
||||
Ui_InternetCollectionViewContainer *ui_;
|
||||
Ui_StreamingCollectionViewContainer *ui_;
|
||||
};
|
||||
|
||||
#endif // INTERNETSONGSVIEW_H
|
||||
#endif // STREAMINGSONGSVIEW_H
|
@ -40,32 +40,32 @@
|
||||
#include "collection/collectionmodel.h"
|
||||
#include "collection/collectionfilter.h"
|
||||
#include "collection/collectionfilterwidget.h"
|
||||
#include "internetservice.h"
|
||||
#include "internettabsview.h"
|
||||
#include "internetcollectionview.h"
|
||||
#include "internetcollectionviewcontainer.h"
|
||||
#include "ui_internettabsview.h"
|
||||
#include "streamingservice.h"
|
||||
#include "streamingtabsview.h"
|
||||
#include "streamingcollectionview.h"
|
||||
#include "streamingcollectionviewcontainer.h"
|
||||
#include "ui_streamingtabsview.h"
|
||||
|
||||
InternetTabsView::InternetTabsView(Application *app, InternetServicePtr service, const QString &settings_group, const SettingsDialog::Page settings_page, QWidget *parent)
|
||||
StreamingTabsView::StreamingTabsView(Application *app, StreamingServicePtr service, const QString &settings_group, const SettingsDialog::Page settings_page, QWidget *parent)
|
||||
: QWidget(parent),
|
||||
app_(app),
|
||||
service_(service),
|
||||
settings_group_(settings_group),
|
||||
settings_page_(settings_page),
|
||||
ui_(new Ui_InternetTabsView) {
|
||||
ui_(new Ui_StreamingTabsView) {
|
||||
|
||||
ui_->setupUi(this);
|
||||
|
||||
ui_->search_view->Init(app, service);
|
||||
QObject::connect(ui_->search_view, &InternetSearchView::AddArtistsSignal, &*service_, &InternetService::AddArtists);
|
||||
QObject::connect(ui_->search_view, &InternetSearchView::AddAlbumsSignal, &*service_, &InternetService::AddAlbums);
|
||||
QObject::connect(ui_->search_view, &InternetSearchView::AddSongsSignal, &*service_, &InternetService::AddSongs);
|
||||
QObject::connect(ui_->search_view, &StreamingSearchView::AddArtistsSignal, &*service_, &StreamingService::AddArtists);
|
||||
QObject::connect(ui_->search_view, &StreamingSearchView::AddAlbumsSignal, &*service_, &StreamingService::AddAlbums);
|
||||
QObject::connect(ui_->search_view, &StreamingSearchView::AddSongsSignal, &*service_, &StreamingService::AddSongs);
|
||||
|
||||
QAction *action_configure = new QAction(IconLoader::Load(QStringLiteral("configure")), tr("Configure %1...").arg(Song::TextForSource(service_->source())), this);
|
||||
QObject::connect(action_configure, &QAction::triggered, this, &InternetTabsView::OpenSettingsDialog);
|
||||
QObject::connect(action_configure, &QAction::triggered, this, &StreamingTabsView::OpenSettingsDialog);
|
||||
|
||||
if (service_->artists_collection_model()) {
|
||||
ui_->artists_collection->stacked()->setCurrentWidget(ui_->artists_collection->internetcollection_page());
|
||||
ui_->artists_collection->stacked()->setCurrentWidget(ui_->artists_collection->streamingcollection_page());
|
||||
ui_->artists_collection->view()->Init(app_, service_->artists_collection_backend(), service_->artists_collection_model(), true);
|
||||
ui_->artists_collection->view()->setModel(service_->artists_collection_filter_model());
|
||||
ui_->artists_collection->view()->SetFilter(ui_->artists_collection->filter_widget());
|
||||
@ -74,22 +74,22 @@ InternetTabsView::InternetTabsView(Application *app, InternetServicePtr service,
|
||||
ui_->artists_collection->filter_widget()->Init(service_->artists_collection_model(), service_->artists_collection_filter_model());
|
||||
ui_->artists_collection->filter_widget()->AddMenuAction(action_configure);
|
||||
|
||||
QObject::connect(ui_->artists_collection->view(), &InternetCollectionView::GetSongs, this, &InternetTabsView::GetArtists);
|
||||
QObject::connect(ui_->artists_collection->view(), &InternetCollectionView::RemoveSongs, &*service_, &InternetService::RemoveArtists);
|
||||
QObject::connect(ui_->artists_collection->view(), &StreamingCollectionView::GetSongs, this, &StreamingTabsView::GetArtists);
|
||||
QObject::connect(ui_->artists_collection->view(), &StreamingCollectionView::RemoveSongs, &*service_, &StreamingService::RemoveArtists);
|
||||
|
||||
QObject::connect(ui_->artists_collection->button_refresh(), &QPushButton::clicked, this, &InternetTabsView::GetArtists);
|
||||
QObject::connect(ui_->artists_collection->button_close(), &QPushButton::clicked, this, &InternetTabsView::AbortGetArtists);
|
||||
QObject::connect(ui_->artists_collection->button_abort(), &QPushButton::clicked, this, &InternetTabsView::AbortGetArtists);
|
||||
QObject::connect(&*service_, &InternetService::ArtistsResults, this, &InternetTabsView::ArtistsFinished);
|
||||
QObject::connect(&*service_, &InternetService::ArtistsUpdateStatus, ui_->artists_collection->status(), &QLabel::setText);
|
||||
QObject::connect(&*service_, &InternetService::ArtistsProgressSetMaximum, ui_->artists_collection->progressbar(), &QProgressBar::setMaximum);
|
||||
QObject::connect(&*service_, &InternetService::ArtistsUpdateProgress, ui_->artists_collection->progressbar(), &QProgressBar::setValue);
|
||||
QObject::connect(ui_->artists_collection->button_refresh(), &QPushButton::clicked, this, &StreamingTabsView::GetArtists);
|
||||
QObject::connect(ui_->artists_collection->button_close(), &QPushButton::clicked, this, &StreamingTabsView::AbortGetArtists);
|
||||
QObject::connect(ui_->artists_collection->button_abort(), &QPushButton::clicked, this, &StreamingTabsView::AbortGetArtists);
|
||||
QObject::connect(&*service_, &StreamingService::ArtistsResults, this, &StreamingTabsView::ArtistsFinished);
|
||||
QObject::connect(&*service_, &StreamingService::ArtistsUpdateStatus, ui_->artists_collection->status(), &QLabel::setText);
|
||||
QObject::connect(&*service_, &StreamingService::ArtistsProgressSetMaximum, ui_->artists_collection->progressbar(), &QProgressBar::setMaximum);
|
||||
QObject::connect(&*service_, &StreamingService::ArtistsUpdateProgress, ui_->artists_collection->progressbar(), &QProgressBar::setValue);
|
||||
|
||||
QObject::connect(service_->artists_collection_model(), &CollectionModel::TotalArtistCountUpdated, ui_->artists_collection->view(), &InternetCollectionView::TotalArtistCountUpdated);
|
||||
QObject::connect(service_->artists_collection_model(), &CollectionModel::TotalAlbumCountUpdated, ui_->artists_collection->view(), &InternetCollectionView::TotalAlbumCountUpdated);
|
||||
QObject::connect(service_->artists_collection_model(), &CollectionModel::TotalSongCountUpdated, ui_->artists_collection->view(), &InternetCollectionView::TotalSongCountUpdated);
|
||||
QObject::connect(service_->artists_collection_model(), &CollectionModel::modelAboutToBeReset, ui_->artists_collection->view(), &InternetCollectionView::SaveFocus);
|
||||
QObject::connect(service_->artists_collection_model(), &CollectionModel::modelReset, ui_->artists_collection->view(), &InternetCollectionView::RestoreFocus);
|
||||
QObject::connect(service_->artists_collection_model(), &CollectionModel::TotalArtistCountUpdated, ui_->artists_collection->view(), &StreamingCollectionView::TotalArtistCountUpdated);
|
||||
QObject::connect(service_->artists_collection_model(), &CollectionModel::TotalAlbumCountUpdated, ui_->artists_collection->view(), &StreamingCollectionView::TotalAlbumCountUpdated);
|
||||
QObject::connect(service_->artists_collection_model(), &CollectionModel::TotalSongCountUpdated, ui_->artists_collection->view(), &StreamingCollectionView::TotalSongCountUpdated);
|
||||
QObject::connect(service_->artists_collection_model(), &CollectionModel::modelAboutToBeReset, ui_->artists_collection->view(), &StreamingCollectionView::SaveFocus);
|
||||
QObject::connect(service_->artists_collection_model(), &CollectionModel::modelReset, ui_->artists_collection->view(), &StreamingCollectionView::RestoreFocus);
|
||||
|
||||
}
|
||||
else {
|
||||
@ -97,7 +97,7 @@ InternetTabsView::InternetTabsView(Application *app, InternetServicePtr service,
|
||||
}
|
||||
|
||||
if (service_->albums_collection_model()) {
|
||||
ui_->albums_collection->stacked()->setCurrentWidget(ui_->albums_collection->internetcollection_page());
|
||||
ui_->albums_collection->stacked()->setCurrentWidget(ui_->albums_collection->streamingcollection_page());
|
||||
ui_->albums_collection->view()->Init(app_, service_->albums_collection_backend(), service_->albums_collection_model(), true);
|
||||
ui_->albums_collection->view()->setModel(service_->albums_collection_filter_model());
|
||||
ui_->albums_collection->view()->SetFilter(ui_->albums_collection->filter_widget());
|
||||
@ -106,22 +106,22 @@ InternetTabsView::InternetTabsView(Application *app, InternetServicePtr service,
|
||||
ui_->albums_collection->filter_widget()->Init(service_->albums_collection_model(), service_->albums_collection_filter_model());
|
||||
ui_->albums_collection->filter_widget()->AddMenuAction(action_configure);
|
||||
|
||||
QObject::connect(ui_->albums_collection->view(), &InternetCollectionView::GetSongs, this, &InternetTabsView::GetAlbums);
|
||||
QObject::connect(ui_->albums_collection->view(), &InternetCollectionView::RemoveSongs, &*service_, &InternetService::RemoveAlbums);
|
||||
QObject::connect(ui_->albums_collection->view(), &StreamingCollectionView::GetSongs, this, &StreamingTabsView::GetAlbums);
|
||||
QObject::connect(ui_->albums_collection->view(), &StreamingCollectionView::RemoveSongs, &*service_, &StreamingService::RemoveAlbums);
|
||||
|
||||
QObject::connect(ui_->albums_collection->button_refresh(), &QPushButton::clicked, this, &InternetTabsView::GetAlbums);
|
||||
QObject::connect(ui_->albums_collection->button_close(), &QPushButton::clicked, this, &InternetTabsView::AbortGetAlbums);
|
||||
QObject::connect(ui_->albums_collection->button_abort(), &QPushButton::clicked, this, &InternetTabsView::AbortGetAlbums);
|
||||
QObject::connect(&*service_, &InternetService::AlbumsResults, this, &InternetTabsView::AlbumsFinished);
|
||||
QObject::connect(&*service_, &InternetService::AlbumsUpdateStatus, ui_->albums_collection->status(), &QLabel::setText);
|
||||
QObject::connect(&*service_, &InternetService::AlbumsProgressSetMaximum, ui_->albums_collection->progressbar(), &QProgressBar::setMaximum);
|
||||
QObject::connect(&*service_, &InternetService::AlbumsUpdateProgress, ui_->albums_collection->progressbar(), &QProgressBar::setValue);
|
||||
QObject::connect(ui_->albums_collection->button_refresh(), &QPushButton::clicked, this, &StreamingTabsView::GetAlbums);
|
||||
QObject::connect(ui_->albums_collection->button_close(), &QPushButton::clicked, this, &StreamingTabsView::AbortGetAlbums);
|
||||
QObject::connect(ui_->albums_collection->button_abort(), &QPushButton::clicked, this, &StreamingTabsView::AbortGetAlbums);
|
||||
QObject::connect(&*service_, &StreamingService::AlbumsResults, this, &StreamingTabsView::AlbumsFinished);
|
||||
QObject::connect(&*service_, &StreamingService::AlbumsUpdateStatus, ui_->albums_collection->status(), &QLabel::setText);
|
||||
QObject::connect(&*service_, &StreamingService::AlbumsProgressSetMaximum, ui_->albums_collection->progressbar(), &QProgressBar::setMaximum);
|
||||
QObject::connect(&*service_, &StreamingService::AlbumsUpdateProgress, ui_->albums_collection->progressbar(), &QProgressBar::setValue);
|
||||
|
||||
QObject::connect(service_->albums_collection_model(), &CollectionModel::TotalArtistCountUpdated, ui_->albums_collection->view(), &InternetCollectionView::TotalArtistCountUpdated);
|
||||
QObject::connect(service_->albums_collection_model(), &CollectionModel::TotalAlbumCountUpdated, ui_->albums_collection->view(), &InternetCollectionView::TotalAlbumCountUpdated);
|
||||
QObject::connect(service_->albums_collection_model(), &CollectionModel::TotalSongCountUpdated, ui_->albums_collection->view(), &InternetCollectionView::TotalSongCountUpdated);
|
||||
QObject::connect(service_->albums_collection_model(), &CollectionModel::modelAboutToBeReset, ui_->albums_collection->view(), &InternetCollectionView::SaveFocus);
|
||||
QObject::connect(service_->albums_collection_model(), &CollectionModel::modelReset, ui_->albums_collection->view(), &InternetCollectionView::RestoreFocus);
|
||||
QObject::connect(service_->albums_collection_model(), &CollectionModel::TotalArtistCountUpdated, ui_->albums_collection->view(), &StreamingCollectionView::TotalArtistCountUpdated);
|
||||
QObject::connect(service_->albums_collection_model(), &CollectionModel::TotalAlbumCountUpdated, ui_->albums_collection->view(), &StreamingCollectionView::TotalAlbumCountUpdated);
|
||||
QObject::connect(service_->albums_collection_model(), &CollectionModel::TotalSongCountUpdated, ui_->albums_collection->view(), &StreamingCollectionView::TotalSongCountUpdated);
|
||||
QObject::connect(service_->albums_collection_model(), &CollectionModel::modelAboutToBeReset, ui_->albums_collection->view(), &StreamingCollectionView::SaveFocus);
|
||||
QObject::connect(service_->albums_collection_model(), &CollectionModel::modelReset, ui_->albums_collection->view(), &StreamingCollectionView::RestoreFocus);
|
||||
|
||||
}
|
||||
else {
|
||||
@ -129,7 +129,7 @@ InternetTabsView::InternetTabsView(Application *app, InternetServicePtr service,
|
||||
}
|
||||
|
||||
if (service_->songs_collection_model()) {
|
||||
ui_->songs_collection->stacked()->setCurrentWidget(ui_->songs_collection->internetcollection_page());
|
||||
ui_->songs_collection->stacked()->setCurrentWidget(ui_->songs_collection->streamingcollection_page());
|
||||
ui_->songs_collection->view()->Init(app_, service_->songs_collection_backend(), service_->songs_collection_model(), true);
|
||||
ui_->songs_collection->view()->setModel(service_->songs_collection_filter_model());
|
||||
ui_->songs_collection->view()->SetFilter(ui_->songs_collection->filter_widget());
|
||||
@ -138,22 +138,22 @@ InternetTabsView::InternetTabsView(Application *app, InternetServicePtr service,
|
||||
ui_->songs_collection->filter_widget()->Init(service_->songs_collection_model(), service_->songs_collection_filter_model());
|
||||
ui_->songs_collection->filter_widget()->AddMenuAction(action_configure);
|
||||
|
||||
QObject::connect(ui_->songs_collection->view(), &InternetCollectionView::GetSongs, this, &InternetTabsView::GetSongs);
|
||||
QObject::connect(ui_->songs_collection->view(), &InternetCollectionView::RemoveSongs, &*service_, &InternetService::RemoveSongsByList);
|
||||
QObject::connect(ui_->songs_collection->view(), &StreamingCollectionView::GetSongs, this, &StreamingTabsView::GetSongs);
|
||||
QObject::connect(ui_->songs_collection->view(), &StreamingCollectionView::RemoveSongs, &*service_, &StreamingService::RemoveSongsByList);
|
||||
|
||||
QObject::connect(ui_->songs_collection->button_refresh(), &QPushButton::clicked, this, &InternetTabsView::GetSongs);
|
||||
QObject::connect(ui_->songs_collection->button_close(), &QPushButton::clicked, this, &InternetTabsView::AbortGetSongs);
|
||||
QObject::connect(ui_->songs_collection->button_abort(), &QPushButton::clicked, this, &InternetTabsView::AbortGetSongs);
|
||||
QObject::connect(&*service_, &InternetService::SongsResults, this, &InternetTabsView::SongsFinished);
|
||||
QObject::connect(&*service_, &InternetService::SongsUpdateStatus, ui_->songs_collection->status(), &QLabel::setText);
|
||||
QObject::connect(&*service_, &InternetService::SongsProgressSetMaximum, ui_->songs_collection->progressbar(), &QProgressBar::setMaximum);
|
||||
QObject::connect(&*service_, &InternetService::SongsUpdateProgress, ui_->songs_collection->progressbar(), &QProgressBar::setValue);
|
||||
QObject::connect(ui_->songs_collection->button_refresh(), &QPushButton::clicked, this, &StreamingTabsView::GetSongs);
|
||||
QObject::connect(ui_->songs_collection->button_close(), &QPushButton::clicked, this, &StreamingTabsView::AbortGetSongs);
|
||||
QObject::connect(ui_->songs_collection->button_abort(), &QPushButton::clicked, this, &StreamingTabsView::AbortGetSongs);
|
||||
QObject::connect(&*service_, &StreamingService::SongsResults, this, &StreamingTabsView::SongsFinished);
|
||||
QObject::connect(&*service_, &StreamingService::SongsUpdateStatus, ui_->songs_collection->status(), &QLabel::setText);
|
||||
QObject::connect(&*service_, &StreamingService::SongsProgressSetMaximum, ui_->songs_collection->progressbar(), &QProgressBar::setMaximum);
|
||||
QObject::connect(&*service_, &StreamingService::SongsUpdateProgress, ui_->songs_collection->progressbar(), &QProgressBar::setValue);
|
||||
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::TotalArtistCountUpdated, ui_->songs_collection->view(), &InternetCollectionView::TotalArtistCountUpdated);
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::TotalAlbumCountUpdated, ui_->songs_collection->view(), &InternetCollectionView::TotalAlbumCountUpdated);
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::TotalSongCountUpdated, ui_->songs_collection->view(), &InternetCollectionView::TotalSongCountUpdated);
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::modelAboutToBeReset, ui_->songs_collection->view(), &InternetCollectionView::SaveFocus);
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::modelReset, ui_->songs_collection->view(), &InternetCollectionView::RestoreFocus);
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::TotalArtistCountUpdated, ui_->songs_collection->view(), &StreamingCollectionView::TotalArtistCountUpdated);
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::TotalAlbumCountUpdated, ui_->songs_collection->view(), &StreamingCollectionView::TotalAlbumCountUpdated);
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::TotalSongCountUpdated, ui_->songs_collection->view(), &StreamingCollectionView::TotalSongCountUpdated);
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::modelAboutToBeReset, ui_->songs_collection->view(), &StreamingCollectionView::SaveFocus);
|
||||
QObject::connect(service_->songs_collection_model(), &CollectionModel::modelReset, ui_->songs_collection->view(), &StreamingCollectionView::RestoreFocus);
|
||||
|
||||
}
|
||||
else {
|
||||
@ -182,7 +182,7 @@ InternetTabsView::InternetTabsView(Application *app, InternetServicePtr service,
|
||||
|
||||
}
|
||||
|
||||
InternetTabsView::~InternetTabsView() {
|
||||
StreamingTabsView::~StreamingTabsView() {
|
||||
|
||||
Settings s;
|
||||
s.beginGroup(settings_group_);
|
||||
@ -192,7 +192,7 @@ InternetTabsView::~InternetTabsView() {
|
||||
delete ui_;
|
||||
}
|
||||
|
||||
void InternetTabsView::ReloadSettings() {
|
||||
void StreamingTabsView::ReloadSettings() {
|
||||
|
||||
if (service_->artists_collection_model()) {
|
||||
ui_->artists_collection->view()->ReloadSettings();
|
||||
@ -207,7 +207,7 @@ void InternetTabsView::ReloadSettings() {
|
||||
|
||||
}
|
||||
|
||||
bool InternetTabsView::SearchFieldHasFocus() const {
|
||||
bool StreamingTabsView::SearchFieldHasFocus() const {
|
||||
|
||||
return ((ui_->tabs->currentWidget() == ui_->artists && ui_->artists_collection->SearchFieldHasFocus()) ||
|
||||
(ui_->tabs->currentWidget() == ui_->albums && ui_->albums_collection->SearchFieldHasFocus()) ||
|
||||
@ -216,7 +216,7 @@ bool InternetTabsView::SearchFieldHasFocus() const {
|
||||
|
||||
}
|
||||
|
||||
void InternetTabsView::FocusSearchField() {
|
||||
void StreamingTabsView::FocusSearchField() {
|
||||
|
||||
if (ui_->tabs->currentWidget() == ui_->artists) {
|
||||
ui_->artists_collection->FocusSearchField();
|
||||
@ -233,7 +233,7 @@ void InternetTabsView::FocusSearchField() {
|
||||
|
||||
}
|
||||
|
||||
void InternetTabsView::GetArtists() {
|
||||
void StreamingTabsView::GetArtists() {
|
||||
|
||||
if (!service_->authenticated() && service_->oauth()) {
|
||||
service_->ShowConfig();
|
||||
@ -249,16 +249,16 @@ void InternetTabsView::GetArtists() {
|
||||
|
||||
}
|
||||
|
||||
void InternetTabsView::AbortGetArtists() {
|
||||
void StreamingTabsView::AbortGetArtists() {
|
||||
|
||||
service_->ResetArtistsRequest();
|
||||
ui_->artists_collection->progressbar()->setValue(0);
|
||||
ui_->artists_collection->status()->clear();
|
||||
ui_->artists_collection->stacked()->setCurrentWidget(ui_->artists_collection->internetcollection_page());
|
||||
ui_->artists_collection->stacked()->setCurrentWidget(ui_->artists_collection->streamingcollection_page());
|
||||
|
||||
}
|
||||
|
||||
void InternetTabsView::ArtistsFinished(const SongMap &songs, const QString &error) {
|
||||
void StreamingTabsView::ArtistsFinished(const SongMap &songs, const QString &error) {
|
||||
|
||||
if (songs.isEmpty() && !error.isEmpty()) {
|
||||
ui_->artists_collection->status()->setText(error);
|
||||
@ -268,14 +268,14 @@ void InternetTabsView::ArtistsFinished(const SongMap &songs, const QString &erro
|
||||
ui_->artists_collection->button_close()->show();
|
||||
}
|
||||
else {
|
||||
ui_->artists_collection->stacked()->setCurrentWidget(ui_->artists_collection->internetcollection_page());
|
||||
ui_->artists_collection->stacked()->setCurrentWidget(ui_->artists_collection->streamingcollection_page());
|
||||
ui_->artists_collection->status()->clear();
|
||||
service_->artists_collection_backend()->UpdateSongsBySongIDAsync(songs);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void InternetTabsView::GetAlbums() {
|
||||
void StreamingTabsView::GetAlbums() {
|
||||
|
||||
if (!service_->authenticated() && service_->oauth()) {
|
||||
service_->ShowConfig();
|
||||
@ -291,16 +291,16 @@ void InternetTabsView::GetAlbums() {
|
||||
|
||||
}
|
||||
|
||||
void InternetTabsView::AbortGetAlbums() {
|
||||
void StreamingTabsView::AbortGetAlbums() {
|
||||
|
||||
service_->ResetAlbumsRequest();
|
||||
ui_->albums_collection->progressbar()->setValue(0);
|
||||
ui_->albums_collection->status()->clear();
|
||||
ui_->albums_collection->stacked()->setCurrentWidget(ui_->albums_collection->internetcollection_page());
|
||||
ui_->albums_collection->stacked()->setCurrentWidget(ui_->albums_collection->streamingcollection_page());
|
||||
|
||||
}
|
||||
|
||||
void InternetTabsView::AlbumsFinished(const SongMap &songs, const QString &error) {
|
||||
void StreamingTabsView::AlbumsFinished(const SongMap &songs, const QString &error) {
|
||||
|
||||
if (songs.isEmpty() && !error.isEmpty()) {
|
||||
ui_->albums_collection->status()->setText(error);
|
||||
@ -310,14 +310,14 @@ void InternetTabsView::AlbumsFinished(const SongMap &songs, const QString &error
|
||||
ui_->albums_collection->button_close()->show();
|
||||
}
|
||||
else {
|
||||
ui_->albums_collection->stacked()->setCurrentWidget(ui_->albums_collection->internetcollection_page());
|
||||
ui_->albums_collection->stacked()->setCurrentWidget(ui_->albums_collection->streamingcollection_page());
|
||||
ui_->albums_collection->status()->clear();
|
||||
service_->albums_collection_backend()->UpdateSongsBySongIDAsync(songs);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void InternetTabsView::GetSongs() {
|
||||
void StreamingTabsView::GetSongs() {
|
||||
|
||||
if (!service_->authenticated() && service_->oauth()) {
|
||||
service_->ShowConfig();
|
||||
@ -333,16 +333,16 @@ void InternetTabsView::GetSongs() {
|
||||
|
||||
}
|
||||
|
||||
void InternetTabsView::AbortGetSongs() {
|
||||
void StreamingTabsView::AbortGetSongs() {
|
||||
|
||||
service_->ResetSongsRequest();
|
||||
ui_->songs_collection->progressbar()->setValue(0);
|
||||
ui_->songs_collection->status()->clear();
|
||||
ui_->songs_collection->stacked()->setCurrentWidget(ui_->songs_collection->internetcollection_page());
|
||||
ui_->songs_collection->stacked()->setCurrentWidget(ui_->songs_collection->streamingcollection_page());
|
||||
|
||||
}
|
||||
|
||||
void InternetTabsView::SongsFinished(const SongMap &songs, const QString &error) {
|
||||
void StreamingTabsView::SongsFinished(const SongMap &songs, const QString &error) {
|
||||
|
||||
if (songs.isEmpty() && !error.isEmpty()) {
|
||||
ui_->songs_collection->status()->setText(error);
|
||||
@ -352,13 +352,13 @@ void InternetTabsView::SongsFinished(const SongMap &songs, const QString &error)
|
||||
ui_->songs_collection->button_close()->show();
|
||||
}
|
||||
else {
|
||||
ui_->songs_collection->stacked()->setCurrentWidget(ui_->songs_collection->internetcollection_page());
|
||||
ui_->songs_collection->stacked()->setCurrentWidget(ui_->songs_collection->streamingcollection_page());
|
||||
ui_->songs_collection->status()->clear();
|
||||
service_->songs_collection_backend()->UpdateSongsBySongIDAsync(songs);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void InternetTabsView::OpenSettingsDialog() {
|
||||
void StreamingTabsView::OpenSettingsDialog() {
|
||||
app_->OpenSettingsDialogAtPage(service_->settings_page());
|
||||
}
|
@ -17,8 +17,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef INTERNETTABSVIEW_H
|
||||
#define INTERNETTABSVIEW_H
|
||||
#ifndef STREAMINGTABSVIEW_H
|
||||
#define STREAMINGTABSVIEW_H
|
||||
|
||||
#include "config.h"
|
||||
|
||||
@ -29,30 +29,30 @@
|
||||
|
||||
#include "core/shared_ptr.h"
|
||||
#include "settings/settingsdialog.h"
|
||||
#include "internetcollectionviewcontainer.h"
|
||||
#include "ui_internettabsview.h"
|
||||
#include "streamingcollectionviewcontainer.h"
|
||||
#include "ui_streamingtabsview.h"
|
||||
#include "core/song.h"
|
||||
|
||||
class QContextMenuEvent;
|
||||
|
||||
class Application;
|
||||
class InternetService;
|
||||
class InternetCollectionView;
|
||||
class InternetSearchView;
|
||||
class StreamingService;
|
||||
class StreamingCollectionView;
|
||||
class StreamingSearchView;
|
||||
|
||||
class InternetTabsView : public QWidget {
|
||||
class StreamingTabsView : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit InternetTabsView(Application *app, SharedPtr<InternetService> service, const QString &settings_group, const SettingsDialog::Page settings_page, QWidget *parent = nullptr);
|
||||
~InternetTabsView() override;
|
||||
explicit StreamingTabsView(Application *app, SharedPtr<StreamingService> service, const QString &settings_group, const SettingsDialog::Page settings_page, QWidget *parent = nullptr);
|
||||
~StreamingTabsView() override;
|
||||
|
||||
void ReloadSettings();
|
||||
|
||||
InternetCollectionView *artists_collection_view() const { return ui_->artists_collection->view(); }
|
||||
InternetCollectionView *albums_collection_view() const { return ui_->albums_collection->view(); }
|
||||
InternetCollectionView *songs_collection_view() const { return ui_->songs_collection->view(); }
|
||||
InternetSearchView *search_view() const { return ui_->search_view; }
|
||||
StreamingCollectionView *artists_collection_view() const { return ui_->artists_collection->view(); }
|
||||
StreamingCollectionView *albums_collection_view() const { return ui_->albums_collection->view(); }
|
||||
StreamingCollectionView *songs_collection_view() const { return ui_->songs_collection->view(); }
|
||||
StreamingSearchView *search_view() const { return ui_->search_view; }
|
||||
|
||||
bool SearchFieldHasFocus() const;
|
||||
void FocusSearchField();
|
||||
@ -71,10 +71,10 @@ class InternetTabsView : public QWidget {
|
||||
|
||||
private:
|
||||
Application *app_;
|
||||
SharedPtr <InternetService> service_;
|
||||
SharedPtr <StreamingService> service_;
|
||||
QString settings_group_;
|
||||
SettingsDialog::Page settings_page_;
|
||||
Ui_InternetTabsView *ui_;
|
||||
Ui_StreamingTabsView *ui_;
|
||||
};
|
||||
|
||||
#endif // INTERNETTABSVIEW_H
|
||||
#endif // STREAMINGTABSVIEW_H
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>InternetTabsView</class>
|
||||
<widget class="QWidget" name="InternetTabsView">
|
||||
<class>StreamingTabsView</class>
|
||||
<widget class="QWidget" name="StreamingTabsView">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
@ -11,9 +11,9 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Internet Tabs View</string>
|
||||
<string>Streaming Tabs View</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="layout_internettabsview">
|
||||
<layout class="QVBoxLayout" name="layout_streamingtabsview">
|
||||
<item>
|
||||
<widget class="QTabWidget" name="tabs">
|
||||
<property name="sizePolicy">
|
||||
@ -43,7 +43,7 @@
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="InternetCollectionViewContainer" name="artists_collection" native="true"/>
|
||||
<widget class="StreamingCollectionViewContainer" name="artists_collection" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
@ -65,7 +65,7 @@
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="InternetCollectionViewContainer" name="albums_collection" native="true"/>
|
||||
<widget class="StreamingCollectionViewContainer" name="albums_collection" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
@ -87,7 +87,7 @@
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="InternetCollectionViewContainer" name="songs_collection" native="true"/>
|
||||
<widget class="StreamingCollectionViewContainer" name="songs_collection" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
@ -109,7 +109,7 @@
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="InternetSearchView" name="search_view" native="true"/>
|
||||
<widget class="StreamingSearchView" name="search_view" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
@ -119,15 +119,15 @@
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>InternetSearchView</class>
|
||||
<class>StreamingSearchView</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>internet/internetsearchview.h</header>
|
||||
<header>streaming/streamingsearchview.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>InternetCollectionViewContainer</class>
|
||||
<class>StreamingCollectionViewContainer</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>internet/internetcollectionviewcontainer.h</header>
|
||||
<header>streaming/streamingcollectionviewcontainer.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
@ -24,29 +24,29 @@
|
||||
#include <QApplication>
|
||||
#include <QVariant>
|
||||
|
||||
#include "internetplaylistitem.h"
|
||||
#include "internetservice.h"
|
||||
#include "streamplaylistitem.h"
|
||||
#include "streamingservice.h"
|
||||
#include "core/sqlrow.h"
|
||||
|
||||
InternetPlaylistItem::InternetPlaylistItem(const Song::Source source)
|
||||
StreamPlaylistItem::StreamPlaylistItem(const Song::Source source)
|
||||
: PlaylistItem(source),
|
||||
source_(source) {}
|
||||
|
||||
InternetPlaylistItem::InternetPlaylistItem(const Song &metadata)
|
||||
StreamPlaylistItem::StreamPlaylistItem(const Song &metadata)
|
||||
: PlaylistItem(metadata.source()),
|
||||
source_(metadata.source()),
|
||||
metadata_(metadata) {
|
||||
InitMetadata();
|
||||
}
|
||||
|
||||
InternetPlaylistItem::InternetPlaylistItem(InternetServicePtr service, const Song &metadata)
|
||||
StreamPlaylistItem::StreamPlaylistItem(StreamingServicePtr service, const Song &metadata)
|
||||
: PlaylistItem(metadata.source()),
|
||||
source_(service->source()),
|
||||
metadata_(metadata) {
|
||||
InitMetadata();
|
||||
}
|
||||
|
||||
bool InternetPlaylistItem::InitFromQuery(const SqlRow &query) {
|
||||
bool StreamPlaylistItem::InitFromQuery(const SqlRow &query) {
|
||||
|
||||
metadata_.InitFromQuery(query, false, static_cast<int>(Song::kRowIdColumns.count()));
|
||||
InitMetadata();
|
||||
@ -54,11 +54,11 @@ bool InternetPlaylistItem::InitFromQuery(const SqlRow &query) {
|
||||
|
||||
}
|
||||
|
||||
QVariant InternetPlaylistItem::DatabaseValue(DatabaseColumn column) const {
|
||||
QVariant StreamPlaylistItem::DatabaseValue(DatabaseColumn column) const {
|
||||
return PlaylistItem::DatabaseValue(column);
|
||||
}
|
||||
|
||||
void InternetPlaylistItem::InitMetadata() {
|
||||
void StreamPlaylistItem::InitMetadata() {
|
||||
|
||||
if (metadata_.title().isEmpty()) metadata_.set_title(metadata_.url().toString());
|
||||
if (metadata_.source() == Song::Source::Unknown) metadata_.set_source(Song::Source::Stream);
|
||||
@ -67,16 +67,16 @@ void InternetPlaylistItem::InitMetadata() {
|
||||
|
||||
}
|
||||
|
||||
Song InternetPlaylistItem::Metadata() const {
|
||||
Song StreamPlaylistItem::Metadata() const {
|
||||
|
||||
if (HasTemporaryMetadata()) return temp_metadata_;
|
||||
return metadata_;
|
||||
|
||||
}
|
||||
|
||||
QUrl InternetPlaylistItem::Url() const { return metadata_.url(); }
|
||||
QUrl StreamPlaylistItem::Url() const { return metadata_.url(); }
|
||||
|
||||
void InternetPlaylistItem::SetArtManual(const QUrl &cover_url) {
|
||||
void StreamPlaylistItem::SetArtManual(const QUrl &cover_url) {
|
||||
|
||||
metadata_.set_art_manual(cover_url);
|
||||
temp_metadata_.set_art_manual(cover_url);
|
@ -19,8 +19,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef INTERNETPLAYLISTITEM_H
|
||||
#define INTERNETPLAYLISTITEM_H
|
||||
#ifndef STREAMPLAYLISTITEM_H
|
||||
#define STREAMPLAYLISTITEM_H
|
||||
|
||||
#include "config.h"
|
||||
|
||||
@ -32,14 +32,14 @@
|
||||
#include "core/sqlrow.h"
|
||||
#include "playlist/playlistitem.h"
|
||||
|
||||
class InternetService;
|
||||
class StreamingService;
|
||||
|
||||
class InternetPlaylistItem : public PlaylistItem {
|
||||
class StreamPlaylistItem : public PlaylistItem {
|
||||
|
||||
public:
|
||||
explicit InternetPlaylistItem(const Song::Source source);
|
||||
explicit InternetPlaylistItem(const Song &metadata);
|
||||
explicit InternetPlaylistItem(SharedPtr<InternetService> service, const Song &metadata);
|
||||
explicit StreamPlaylistItem(const Song::Source source);
|
||||
explicit StreamPlaylistItem(const Song &metadata);
|
||||
explicit StreamPlaylistItem(SharedPtr<StreamingService> service, const Song &metadata);
|
||||
|
||||
bool InitFromQuery(const SqlRow &query) override;
|
||||
Song Metadata() const override;
|
||||
@ -60,7 +60,7 @@ class InternetPlaylistItem : public PlaylistItem {
|
||||
Song::Source source_;
|
||||
Song metadata_;
|
||||
|
||||
Q_DISABLE_COPY(InternetPlaylistItem)
|
||||
Q_DISABLE_COPY(StreamPlaylistItem)
|
||||
};
|
||||
|
||||
#endif // INTERNETPLAYLISTITEM_H
|
||||
#endif // STREAMPLAYLISTITEM_H
|
@ -18,23 +18,23 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef INTERNETSONGMIMEDATA_H
|
||||
#define INTERNETSONGMIMEDATA_H
|
||||
#ifndef STREAMSONGMIMEDATA_H
|
||||
#define STREAMSONGMIMEDATA_H
|
||||
|
||||
#include "core/shared_ptr.h"
|
||||
#include "core/mimedata.h"
|
||||
#include "core/song.h"
|
||||
|
||||
class InternetService;
|
||||
class StreamingService;
|
||||
|
||||
class InternetSongMimeData : public MimeData {
|
||||
class StreamSongMimeData : public MimeData {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit InternetSongMimeData(SharedPtr<InternetService> _service, QObject* = nullptr) : service(_service) {}
|
||||
explicit StreamSongMimeData(SharedPtr<StreamingService> _service, QObject* = nullptr) : service(_service) {}
|
||||
|
||||
SharedPtr<InternetService> service;
|
||||
SharedPtr<StreamingService> service;
|
||||
SongList songs;
|
||||
};
|
||||
|
||||
#endif // INTERNETSONGMIMEDATA_H
|
||||
#endif // STREAMSONGMIMEDATA_H
|
@ -72,7 +72,7 @@ constexpr int kMaxRedirects = 3;
|
||||
} // namespace
|
||||
|
||||
SubsonicService::SubsonicService(Application *app, QObject *parent)
|
||||
: InternetService(Song::Source::Subsonic, QStringLiteral("Subsonic"), QStringLiteral("subsonic"), QLatin1String(SubsonicSettingsPage::kSettingsGroup), SettingsDialog::Page::Subsonic, app, parent),
|
||||
: StreamingService(Song::Source::Subsonic, QStringLiteral("Subsonic"), QStringLiteral("subsonic"), QLatin1String(SubsonicSettingsPage::kSettingsGroup), SettingsDialog::Page::Subsonic, app, parent),
|
||||
app_(app),
|
||||
url_handler_(new SubsonicUrlHandler(app, this)),
|
||||
collection_backend_(nullptr),
|
||||
|
@ -39,7 +39,7 @@
|
||||
#include "core/scoped_ptr.h"
|
||||
#include "core/shared_ptr.h"
|
||||
#include "core/song.h"
|
||||
#include "internet/internetservice.h"
|
||||
#include "streaming/streamingservice.h"
|
||||
#include "settings/subsonicsettingspage.h"
|
||||
|
||||
class QNetworkReply;
|
||||
@ -52,7 +52,7 @@ class CollectionBackend;
|
||||
class CollectionModel;
|
||||
class CollectionFilter;
|
||||
|
||||
class SubsonicService : public InternetService {
|
||||
class SubsonicService : public StreamingService {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
@ -51,7 +51,7 @@
|
||||
#include "core/settings.h"
|
||||
#include "utilities/randutils.h"
|
||||
#include "utilities/timeconstants.h"
|
||||
#include "internet/internetsearchview.h"
|
||||
#include "streaming/streamingsearchview.h"
|
||||
#include "collection/collectionbackend.h"
|
||||
#include "collection/collectionmodel.h"
|
||||
#include "collection/collectionfilter.h"
|
||||
@ -89,7 +89,7 @@ constexpr char kSongsTable[] = "tidal_songs";
|
||||
} // namespace
|
||||
|
||||
TidalService::TidalService(Application *app, QObject *parent)
|
||||
: InternetService(Song::Source::Tidal, QStringLiteral("Tidal"), QStringLiteral("tidal"), QLatin1String(TidalSettingsPage::kSettingsGroup), SettingsDialog::Page::Tidal, app, parent),
|
||||
: StreamingService(Song::Source::Tidal, QStringLiteral("Tidal"), QStringLiteral("tidal"), QLatin1String(TidalSettingsPage::kSettingsGroup), SettingsDialog::Page::Tidal, app, parent),
|
||||
app_(app),
|
||||
network_(app->network()),
|
||||
url_handler_(new TidalUrlHandler(app, this)),
|
||||
@ -117,7 +117,7 @@ TidalService::TidalService(Application *app, QObject *parent)
|
||||
login_time_(0),
|
||||
pending_search_id_(0),
|
||||
next_pending_search_id_(1),
|
||||
pending_search_type_(InternetSearchView::SearchType::Artists),
|
||||
pending_search_type_(StreamingSearchView::SearchType::Artists),
|
||||
search_id_(0),
|
||||
login_sent_(false),
|
||||
login_attempts_(0),
|
||||
@ -871,7 +871,7 @@ void TidalService::SongsUpdateProgressReceived(const int id, const int progress)
|
||||
emit SongsUpdateProgress(progress);
|
||||
}
|
||||
|
||||
int TidalService::Search(const QString &text, InternetSearchView::SearchType type) {
|
||||
int TidalService::Search(const QString &text, StreamingSearchView::SearchType type) {
|
||||
|
||||
pending_search_id_ = next_pending_search_id_;
|
||||
pending_search_text_ = text;
|
||||
@ -919,13 +919,13 @@ void TidalService::SendSearch() {
|
||||
TidalBaseRequest::QueryType query_type = TidalBaseRequest::QueryType::None;
|
||||
|
||||
switch (pending_search_type_) {
|
||||
case InternetSearchView::SearchType::Artists:
|
||||
case StreamingSearchView::SearchType::Artists:
|
||||
query_type = TidalBaseRequest::QueryType::SearchArtists;
|
||||
break;
|
||||
case InternetSearchView::SearchType::Albums:
|
||||
case StreamingSearchView::SearchType::Albums:
|
||||
query_type = TidalBaseRequest::QueryType::SearchAlbums;
|
||||
break;
|
||||
case InternetSearchView::SearchType::Songs:
|
||||
case StreamingSearchView::SearchType::Songs:
|
||||
query_type = TidalBaseRequest::QueryType::SearchSongs;
|
||||
break;
|
||||
default:
|
||||
|
@ -38,8 +38,8 @@
|
||||
|
||||
#include "core/shared_ptr.h"
|
||||
#include "core/song.h"
|
||||
#include "internet/internetservice.h"
|
||||
#include "internet/internetsearchview.h"
|
||||
#include "streaming/streamingservice.h"
|
||||
#include "streaming/streamingsearchview.h"
|
||||
#include "settings/tidalsettingspage.h"
|
||||
|
||||
class QNetworkReply;
|
||||
@ -55,7 +55,7 @@ class CollectionBackend;
|
||||
class CollectionModel;
|
||||
class CollectionFilter;
|
||||
|
||||
class TidalService : public InternetService {
|
||||
class TidalService : public StreamingService {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
@ -71,7 +71,7 @@ class TidalService : public InternetService {
|
||||
void ReloadSettings() override;
|
||||
|
||||
void Logout();
|
||||
int Search(const QString &text, InternetSearchView::SearchType type) override;
|
||||
int Search(const QString &text, StreamingSearchView::SearchType type) override;
|
||||
void CancelSearch() override;
|
||||
|
||||
int max_login_attempts() const { return kLoginAttempts; }
|
||||
@ -209,7 +209,7 @@ class TidalService : public InternetService {
|
||||
int pending_search_id_;
|
||||
int next_pending_search_id_;
|
||||
QString pending_search_text_;
|
||||
InternetSearchView::SearchType pending_search_type_;
|
||||
StreamingSearchView::SearchType pending_search_type_;
|
||||
|
||||
int search_id_;
|
||||
QString search_text_;
|
||||
|
Loading…
x
Reference in New Issue
Block a user