diff --git a/CMakeLists.txt b/CMakeLists.txt index 118f2f22b..2f954e472 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -280,16 +280,16 @@ optional_component(VLC ON "Engine: VLC backend" DEPENDS "libvlc" LIBVLC_FOUND ) -optional_component(PHONON OFF "Engine: Phonon backend" +optional_component(PHONON OFF "Engine: Phonon backend (UNSTABLE)" DEPENDS "phonon4qt5" PHONON_FOUND ) if (WIN32) - optional_component(DEEZER ON "Engine: Deezer backend" + optional_component(DEEZER OFF "Engine: Deezer backend (UNSTABLE)" DEPENDS "libdeezer" LIBDEEZER_FOUND ) else () - optional_component(DEEZER ON "Engine: Deezer backend" + optional_component(DEEZER OFF "Engine: Deezer backend (UNSTABLE)" DEPENDS "Linux" LINUX DEPENDS "libdeezer" LIBDEEZER_FOUND DEPENDS "libpulse" LIBPULSE_FOUND @@ -345,8 +345,12 @@ optional_component(SPARKLE ON "Sparkle integration" DEPENDS "Sparkle" SPARKLE ) +optional_component(STREAM_TIDAL ON "Streaming: Tidal support") +optional_component(STREAM_DEEZER ON "Streaming: Deezer support") + optional_component(DZMEDIA ON "DZMedia" DEPENDS "libdzmedia" LIBDZMEDIA_FOUND + DEPENDS "Deezer support" HAVE_STREAM_DEEZER ) #if(IMOBILEDEVICE_FOUND AND PLIST_FOUND) @@ -388,5 +392,7 @@ add_custom_target(uninstall # Show a summary of what we have enabled summary_show() if(NOT HAVE_GSTREAMER AND NOT HAVE_XINE AND NOT HAVE_VLC AND NOT HAVE_PHONON AND NOT HAVE_DEEZER) - message(FATAL_ERROR "You need to enable either GStreamer, Xine, VLC, Phonon or Deezer to compile!") + message(FATAL_ERROR "You need to have either GStreamer, Xine, VLC, Phonon or Deezer to compile!") +elseif(NOT HAVE_GSTREAMER) + message(WARNING "GStreamer is the only engine that is fully implemented. Using other engines is possible but not recommended.") endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 97ffb515c..24c2d34a9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -217,8 +217,6 @@ set(SOURCES settings/shortcutssettingspage.cpp settings/appearancesettingspage.cpp settings/notificationssettingspage.cpp - settings/tidalsettingspage.cpp - settings/deezersettingspage.cpp dialogs/about.cpp dialogs/console.cpp @@ -271,11 +269,6 @@ set(SOURCES internet/internetsearchitemdelegate.cpp internet/localredirectserver.cpp - tidal/tidalservice.cpp - tidal/tidalurlhandler.cpp - deezer/deezerservice.cpp - deezer/deezerurlhandler.cpp - ) set(HEADERS @@ -388,8 +381,6 @@ set(HEADERS settings/shortcutssettingspage.h settings/appearancesettingspage.h settings/notificationssettingspage.h - settings/tidalsettingspage.h - settings/deezersettingspage.h dialogs/about.h dialogs/errordialog.h @@ -438,11 +429,6 @@ set(HEADERS internet/internetsearchmodel.h internet/localredirectserver.h - tidal/tidalservice.h - tidal/tidalurlhandler.h - deezer/deezerservice.h - deezer/deezerurlhandler.h - ) set(UI @@ -478,8 +464,6 @@ set(UI settings/shortcutssettingspage.ui settings/appearancesettingspage.ui settings/notificationssettingspage.ui - settings/tidalsettingspage.ui - settings/deezersettingspage.ui equalizer/equalizer.ui equalizer/equalizerslider.ui @@ -869,6 +853,32 @@ optional_source(WIN32 widgets/osd_win.cpp ) +optional_source(HAVE_STREAM_TIDAL + SOURCES + tidal/tidalservice.cpp + tidal/tidalurlhandler.cpp + settings/tidalsettingspage.cpp + HEADERS + tidal/tidalservice.h + tidal/tidalurlhandler.h + settings/tidalsettingspage.h + UI + settings/tidalsettingspage.ui +) + +optional_source(HAVE_STREAM_DEEZER + SOURCES + deezer/deezerservice.cpp + deezer/deezerurlhandler.cpp + settings/deezersettingspage.cpp + HEADERS + deezer/deezerservice.h + deezer/deezerurlhandler.h + settings/deezersettingspage.h + UI + settings/deezersettingspage.ui +) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h) diff --git a/src/config.h.in b/src/config.h.in index aa93c8a1c..27b7fc8bd 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -52,5 +52,8 @@ #cmakedefine HAVE_PHONON #cmakedefine HAVE_DEEZER +#cmakedefine HAVE_STREAM_TIDAL +#cmakedefine HAVE_STREAM_DEEZER + #endif // CONFIG_H_IN diff --git a/src/core/application.cpp b/src/core/application.cpp index d8868773c..1d2b626f4 100644 --- a/src/core/application.cpp +++ b/src/core/application.cpp @@ -26,6 +26,7 @@ #include #include +#include #include #include "core/closure.h" @@ -116,8 +117,13 @@ class ApplicationImpl { return lyrics_providers; }), internet_model_([=]() { return new InternetModel(app, app); }), +#ifdef HAVE_STREAM_TIDAL tidal_search_([=]() { return new InternetSearch(app, Song::Source_Tidal, app); }), - deezer_search_([=]() { return new InternetSearch(app, Song::Source_Deezer, app); }) +#endif +#ifdef HAVE_STREAM_DEEZER + deezer_search_([=]() { return new InternetSearch(app, Song::Source_Deezer, app); }), +#endif + dummy_([=]() { return new QVariant; }) {} Lazy tag_reader_client_; @@ -137,8 +143,13 @@ class ApplicationImpl { Lazy current_art_loader_; Lazy lyrics_providers_; Lazy internet_model_; +#ifdef HAVE_STREAM_TIDAL Lazy tidal_search_; +#endif +#ifdef HAVE_STREAM_DEEZER Lazy deezer_search_; +#endif + Lazy dummy_; }; @@ -206,5 +217,9 @@ LyricsProviders *Application::lyrics_providers() const { return p_->lyrics_provi PlaylistBackend *Application::playlist_backend() const { return p_->playlist_backend_.get(); } PlaylistManager *Application::playlist_manager() const { return p_->playlist_manager_.get(); } InternetModel *Application::internet_model() const { return p_->internet_model_.get(); } +#ifdef HAVE_STREAM_TIDAL InternetSearch *Application::tidal_search() const { return p_->tidal_search_.get(); } +#endif +#ifdef HAVE_STREAM_DEEZER InternetSearch *Application::deezer_search() const { return p_->deezer_search_.get(); } +#endif diff --git a/src/core/application.h b/src/core/application.h index 261e3c9ac..c9ce20a59 100644 --- a/src/core/application.h +++ b/src/core/application.h @@ -88,8 +88,12 @@ class Application : public QObject { LyricsProviders *lyrics_providers() const; InternetModel *internet_model() const; +#ifdef HAVE_STREAM_TIDAL InternetSearch *tidal_search() const; +#endif +#ifdef HAVE_STREAM_DEEZER InternetSearch *deezer_search() const; +#endif void MoveToNewThread(QObject *object); void MoveToThread(QObject *object, QThread *thread); diff --git a/src/core/mainwindow.cpp b/src/core/mainwindow.cpp index a1a9d9245..cebaaf0dc 100644 --- a/src/core/mainwindow.cpp +++ b/src/core/mainwindow.cpp @@ -133,8 +133,12 @@ #include "settings/behavioursettingspage.h" #include "settings/playbacksettingspage.h" #include "settings/playlistsettingspage.h" -#include "settings/tidalsettingspage.h" -#include "settings/deezersettingspage.h" +#ifdef HAVE_STREAM_TIDAL +# include "settings/tidalsettingspage.h" +#endif +#ifdef HAVE_STREAM_DEEZER +# include "settings/deezersettingspage.h" +#endif #include "internet/internetmodel.h" #include "internet/internetservice.h" @@ -203,8 +207,12 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co manager->SetPlaylistManager(app->playlist_manager()); return manager; }), +#ifdef HAVE_STREAM_TIDAL tidal_search_view_(new InternetSearchView(app_, app_->tidal_search(), TidalSettingsPage::kSettingsGroup, SettingsDialog::Page_Tidal, this)), +#endif +#ifdef HAVE_STREAM_DEEZER deezer_search_view_(new InternetSearchView(app_, app_->deezer_search(), DeezerSettingsPage::kSettingsGroup, SettingsDialog::Page_Deezer, this)), +#endif playlist_menu_(new QMenu(this)), playlist_add_to_another_(nullptr), playlistitem_actions_separator_(nullptr), @@ -259,8 +267,12 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co #ifndef Q_OS_WIN ui_->tabs->addTab(device_view_, IconLoader::Load("device"), tr("Devices")); #endif +#ifdef HAVE_STREAM_TIDAL ui_->tabs->addTab(tidal_search_view_, IconLoader::Load("tidal"), tr("Tidal", "Tidal")); +#endif +#ifdef HAVE_STREAM_DEEZER ui_->tabs->addTab(deezer_search_view_, IconLoader::Load("deezer"), tr("Deezer", "Deezer")); +#endif //ui_->tabs->AddSpacer(); // Add the playing widget to the fancy tab widget @@ -519,10 +531,12 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co collection_view_->filter()->AddMenuAction(separator); collection_view_->filter()->AddMenuAction(collection_config_action); - // Tidal +#ifdef HAVE_STREAM_TIDAL connect(tidal_search_view_, SIGNAL(AddToPlaylist(QMimeData*)), SLOT(AddToPlaylist(QMimeData*))); - // Deezer +#endif +#ifdef HAVE_STREAM_DEEZER connect(deezer_search_view_, SIGNAL(AddToPlaylist(QMimeData*)), SLOT(AddToPlaylist(QMimeData*))); +#endif // Playlist menu playlist_play_pause_ = playlist_menu_->addAction(tr("Play"), this, SLOT(PlaylistPlay())); @@ -810,8 +824,12 @@ void MainWindow::ReloadAllSettings() { osd_->ReloadSettings(); collection_view_->ReloadSettings(); ui_->playlist->view()->ReloadSettings(); +#ifdef HAVE_STREAM_TIDAL tidal_search_view_->ReloadSettings(); +#endif +#ifdef HAVE_STREAM_DEEZER deezer_search_view_->ReloadSettings(); +#endif } diff --git a/src/deezer/deezerservice.cpp b/src/deezer/deezerservice.cpp index 4caa9fb56..c7d3c8569 100644 --- a/src/deezer/deezerservice.cpp +++ b/src/deezer/deezerservice.cpp @@ -233,7 +233,7 @@ void DeezerService::FetchAccessTokenFinished(QNetworkReply *reply) { } if (reply->atEnd()) break; } - + QSettings s; s.beginGroup(DeezerSettingsPage::kSettingsGroup); s.setValue("access_token", access_token_); diff --git a/src/internet/internetmodel.cpp b/src/internet/internetmodel.cpp index e54b80ced..e35179999 100644 --- a/src/internet/internetmodel.cpp +++ b/src/internet/internetmodel.cpp @@ -30,8 +30,12 @@ #include "core/logging.h" #include "internetmodel.h" #include "internetservice.h" -#include "tidal/tidalservice.h" -#include "deezer/deezerservice.h" +#ifdef HAVE_STREAM_TIDAL +# include "tidal/tidalservice.h" +#endif +#ifdef HAVE_STREAM_DEEZER +# include "deezer/deezerservice.h" +#endif QMap* InternetModel::sServices = nullptr; @@ -41,8 +45,12 @@ InternetModel::InternetModel(Application *app, QObject *parent) if (!sServices) sServices = new QMap; Q_ASSERT(sServices->isEmpty()); +#ifdef HAVE_STREAM_TIDAL AddService(new TidalService(app, this)); +#endif +#ifdef HAVE_STREAM_DEEZER AddService(new DeezerService(app, this)); +#endif } diff --git a/src/settings/settingsdialog.cpp b/src/settings/settingsdialog.cpp index b5efa6248..48ea1a321 100644 --- a/src/settings/settingsdialog.cpp +++ b/src/settings/settingsdialog.cpp @@ -62,8 +62,12 @@ #include "playlistsettingspage.h" #include "shortcutssettingspage.h" #include "transcodersettingspage.h" -#include "tidalsettingspage.h" -#include "deezersettingspage.h" +#ifdef HAVE_STREAM_TIDAL +# include "tidalsettingspage.h" +#endif +#ifdef HAVE_STREAM_DEEZER +# include "deezersettingspage.h" +#endif #include "ui_settingsdialog.h" @@ -125,9 +129,15 @@ SettingsDialog::SettingsDialog(Application *app, QWidget *parent) AddPage(Page_Transcoding, new TranscoderSettingsPage(this), general); #endif +#if defined(HAVE_STREAM_TIDAL) || defined(HAVE_STREAM_DEEZER) QTreeWidgetItem *internet = AddCategory(tr("Internet")); +#endif +#ifdef HAVE_STREAM_TIDAL AddPage(Page_Tidal, new TidalSettingsPage(this), internet); +#endif +#ifdef HAVE_STREAM_DEEZER AddPage(Page_Deezer, new DeezerSettingsPage(this), internet); +#endif // User interface QTreeWidgetItem *iface = AddCategory(tr("User interface"));