diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1d7716ce7..74be85bcf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -49,7 +49,6 @@ jobs: boost-devel glib2-devel glib2-tools - dbus-1-devel alsa-devel libnotify-devel sqlite3-devel @@ -167,7 +166,6 @@ jobs: openssh rsync boost-devel - dbus-devel sqlite-devel alsa-lib-devel pulseaudio-libs-devel @@ -253,7 +251,6 @@ jobs: rpm-build glibc-devel boost-devel - dbus-devel sqlite-devel libasound-devel pulseaudio-devel @@ -448,7 +445,6 @@ jobs: lsb-release dpkg-dev libglib2.0-dev - libdbus-1-dev libboost-dev libsqlite3-dev libasound2-dev @@ -528,7 +524,6 @@ jobs: dpkg-dev libglib2.0-dev libboost-dev - libdbus-1-dev libsqlite3-dev libasound2-dev libpulse-dev @@ -610,7 +605,6 @@ jobs: dpkg-dev libglib2.0-dev libboost-dev - libdbus-1-dev libsqlite3-dev libasound2-dev libpulse-dev @@ -752,7 +746,6 @@ jobs: -DUSE_BUNDLE=ON -DENABLE_DBUS=OFF -DICU_ROOT="${{env.prefix_path}}" - -DFFTW3_DIR="${{env.prefix_path}}" -DAPPLE_DEVELOPER_ID=$(test '${{github.repository}}' = 'strawberrymusicplayer/strawberry' && test '${{github.event.pull_request.base.repo.full_name}}' = '${{github.event.pull_request.head.repo.full_name}}' && echo "383J84DVB6" || echo "") -DENABLE_SPOTIFY=$(test -f "${{env.prefix_path}}/lib/gstreamer-1.0/libgstspotify.dylib" && echo "ON" || echo "OFF") @@ -892,7 +885,6 @@ jobs: -DUSE_BUNDLE=ON -DENABLE_DBUS=OFF -DICU_ROOT="${{env.prefix_path}}" - -DFFTW3_DIR="${{env.prefix_path}}" -DAPPLE_DEVELOPER_ID="383J84DVB6" -DENABLE_SPOTIFY=$(test -f "${{env.prefix_path}}/lib/gstreamer-1.0/libgstspotify.dylib" && echo "ON" || echo "OFF") @@ -990,9 +982,9 @@ jobs: -DARCH="${{matrix.arch}}" -DENABLE_WIN32_CONSOLE=$(test "${{matrix.buildtype}}" = "debug" && echo "ON" || echo "OFF") -DENABLE_DBUS=OFF - -DENABLE_LIBGPOD=OFF - -DENABLE_LIBMTP=OFF -DENABLE_AUDIOCD=OFF + -DENABLE_MTP=OFF + -DENABLE_GPOD=OFF -DENABLE_SPOTIFY=OFF - name: Run Make @@ -1277,7 +1269,6 @@ jobs: -DENABLE_WIN32_CONSOLE=${{env.win32_console}} -DPKG_CONFIG_EXECUTABLE="${{env.prefix_path_forwardslash}}/bin/pkg-config.exe" -DICU_ROOT="${{env.prefix_path_forwardslash}}" - -DFFTW3_DIR="${{env.prefix_path_forwardslash}}" -DBoost_INCLUDE_DIR="${{env.prefix_path_forwardslash}}/include" - name: Run Make diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a055371f..79f178869 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,6 +38,38 @@ endif() set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) +if(CMAKE_BUILD_TYPE MATCHES "Release") + add_definitions(-DNDEBUG) + set(ENABLE_DEBUG_OUTPUT_DEFAULT OFF) +else() + set(ENABLE_DEBUG_OUTPUT_DEFAULT ON) +endif() + +if(APPLE OR WIN32) + set(USE_BUNDLE_DEFAULT ON) +else() + set(USE_BUNDLE_DEFAULT OFF) +endif() + +if(WIN32) + if(CMAKE_BUILD_TYPE MATCHES "Release") + set(ENABLE_WIN32_CONSOLE_DEFAULT OFF) + else() + set(ENABLE_WIN32_CONSOLE_DEFAULT ON) + endif() +endif() + +option(BUILD_WERROR "Build with -Werror" OFF) +option(USE_RPATH "Use RPATH" APPLE) +option(USE_INSTALL_PREFIX "Look for data in CMAKE_INSTALL_PREFIX" ON) +option(INSTALL_TRANSLATIONS "Install translations" OFF) +option(ENABLE_DEBUG_OUTPUT "Enable debug output" ${ENABLE_DEBUG_OUTPUT_DEFAULT}) +option(USE_BUNDLE "Bundle dependencies" ${USE_BUNDLE_DEFAULT}) + +if(WIN32) + option(ENABLE_WIN32_CONSOLE "Show the windows console even outside Debug mode" ${ENABLE_WIN32_CONSOLE_DEFAULT}) +endif() + if(MSVC) set(CMAKE_C_STANDARD 99) else() @@ -74,34 +106,25 @@ else() $<$:-Woverloaded-virtual> $<$:-Wold-style-cast> ) + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + list(APPEND COMPILE_OPTIONS -Wno-unused-command-line-argument) + endif() endif() add_compile_options(${COMPILE_OPTIONS}) -option(BUILD_WERROR "Build with -Werror" OFF) if(BUILD_WERROR) set(CMAKE_COMPILE_WARNING_AS_ERROR ON) endif() -if(CMAKE_BUILD_TYPE MATCHES "Release") - add_definitions(-DNDEBUG) - set(ENABLE_DEBUG_OUTPUT_DEFAULT OFF) -else() - set(ENABLE_DEBUG_OUTPUT_DEFAULT ON) -endif() - -option(ENABLE_DEBUG_OUTPUT "Enable debug output" ${ENABLE_DEBUG_OUTPUT_DEFAULT}) if(NOT ENABLE_DEBUG_OUTPUT) add_definitions(-DQT_NO_DEBUG_OUTPUT) endif() -option(USE_RPATH "Use RPATH" APPLE) if(USE_RPATH) set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) endif() -set(QT_NO_SHOW_OLD_QT_WRAP_CPP_WARNING ON) - find_program(CCACHE_EXECUTABLE NAMES ccache) if(CCACHE_EXECUTABLE) message(STATUS "ccache found: will be used for compilation and linkage") @@ -122,39 +145,45 @@ endif() find_package(ICU COMPONENTS uc i18n REQUIRED) if(LINUX) find_package(ALSA REQUIRED) - pkg_check_modules(DBUS REQUIRED dbus-1) else() find_package(ALSA) - pkg_check_modules(DBUS dbus-1) endif() if(UNIX AND NOT APPLE) - find_package(X11) - pkg_check_modules(XCB xcb) + find_package(X11 COMPONENTS X11_xcb) endif() -if(X11_FOUND) - set(HAVE_X11 ON) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GOBJECT REQUIRED IMPORTED_TARGET gobject-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) +if(GIO_FOUND AND UNIX) + pkg_check_modules(GIO_UNIX IMPORTED_TARGET gio-unix-2.0) endif() -pkg_check_modules(GLIB REQUIRED glib-2.0) -pkg_check_modules(GOBJECT REQUIRED gobject-2.0) -pkg_check_modules(GIO REQUIRED gio-2.0) -if(UNIX) - pkg_check_modules(GIO_UNIX gio-unix-2.0) +pkg_check_modules(LIBCDIO IMPORTED_TARGET libcdio) +pkg_check_modules(GSTREAMER REQUIRED IMPORTED_TARGET gstreamer-1.0) +pkg_check_modules(GSTREAMER_BASE REQUIRED IMPORTED_TARGET gstreamer-base-1.0) +pkg_check_modules(GSTREAMER_AUDIO REQUIRED IMPORTED_TARGET gstreamer-audio-1.0) +pkg_check_modules(GSTREAMER_APP REQUIRED IMPORTED_TARGET gstreamer-app-1.0) +pkg_check_modules(GSTREAMER_TAG REQUIRED IMPORTED_TARGET gstreamer-tag-1.0) +pkg_check_modules(GSTREAMER_PBUTILS REQUIRED IMPORTED_TARGET gstreamer-pbutils-1.0) +pkg_check_modules(SQLITE REQUIRED IMPORTED_TARGET sqlite3>=3.9) +pkg_check_modules(LIBPULSE IMPORTED_TARGET libpulse) +pkg_check_modules(CHROMAPRINT IMPORTED_TARGET libchromaprint>=1.4) +pkg_check_modules(FFTW3 IMPORTED_TARGET fftw3) +pkg_check_modules(LIBEBUR128 IMPORTED_TARGET libebur128) +pkg_check_modules(LIBGPOD IMPORTED_TARGET libgpod-1.0>=0.7.92) +pkg_check_modules(LIBMTP IMPORTED_TARGET libmtp>=1.0) +pkg_check_modules(GDK_PIXBUF IMPORTED_TARGET gdk-pixbuf-2.0) + +find_package(TagLib 2.0) +if(TARGET TagLib::TagLib) + set(TAGLIB_FOUND ON) + set(TAGLIB_LIBRARIES TagLib::TagLib) + set(HAVE_TAGLIB_DSFFILE ON) + set(HAVE_TAGLIB_DSDIFFFILE ON) +else() + pkg_check_modules(TAGLIB REQUIRED IMPORTED_TARGET taglib>=1.12) endif() -pkg_check_modules(LIBCDIO libcdio) -pkg_check_modules(GSTREAMER REQUIRED gstreamer-1.0) -pkg_check_modules(GSTREAMER_BASE REQUIRED gstreamer-base-1.0) -pkg_check_modules(GSTREAMER_AUDIO REQUIRED gstreamer-audio-1.0) -pkg_check_modules(GSTREAMER_APP REQUIRED gstreamer-app-1.0) -pkg_check_modules(GSTREAMER_TAG REQUIRED gstreamer-tag-1.0) -pkg_check_modules(GSTREAMER_PBUTILS REQUIRED gstreamer-pbutils-1.0) -pkg_check_modules(SQLITE REQUIRED sqlite3>=3.9) -pkg_check_modules(LIBPULSE libpulse) -pkg_check_modules(CHROMAPRINT libchromaprint>=1.4) -pkg_check_modules(LIBGPOD libgpod-1.0>=0.7.92) -pkg_check_modules(LIBMTP libmtp>=1.0) -pkg_check_modules(GDK_PIXBUF gdk-pixbuf-2.0) + find_package(Gettext) -find_package(FFTW3) find_package(GTest) find_library(GMOCK_LIBRARY gmock) @@ -163,32 +192,22 @@ set(QT_MIN_VERSION 6.4.0) set(QT_DEFAULT_MAJOR_VERSION ${QT_VERSION_MAJOR}) set(QT_COMPONENTS Core Concurrent Gui Widgets Network Sql) set(QT_OPTIONAL_COMPONENTS LinguistTools Test) -if(DBUS_FOUND AND NOT WIN32) - list(APPEND QT_COMPONENTS DBus) +if(UNIX AND NOT APPLE) + list(APPEND QT_OPTIONAL_COMPONENTS DBus) endif() find_package(Qt${QT_VERSION_MAJOR} ${QT_MIN_VERSION} COMPONENTS ${QT_COMPONENTS} REQUIRED OPTIONAL_COMPONENTS ${QT_OPTIONAL_COMPONENTS}) if(Qt${QT_VERSION_MAJOR}DBus_FOUND) + set(DBUS_FOUND ON) get_target_property(QT_DBUSXML2CPP_EXECUTABLE Qt${QT_VERSION_MAJOR}::qdbusxml2cpp LOCATION) endif() + if(Qt${QT_VERSION_MAJOR}LinguistTools_FOUND) get_target_property(QT_LCONVERT_EXECUTABLE Qt${QT_VERSION_MAJOR}::lconvert LOCATION) endif() if(X11_FOUND) - find_path(KEYSYMDEF_H NAMES "keysymdef.h" PATHS "${X11_INCLUDE_DIR}" PATH_SUFFIXES "X11") - find_path(XF86KEYSYM_H NAMES "XF86keysym.h" PATHS "${XCB_INCLUDEDIR}" PATH_SUFFIXES "X11") - if(KEYSYMDEF_H) - set(HAVE_KEYSYMDEF_H ON) - else() - message(WARNING, "Missing X11/keysymdef.h") - endif() - if(XF86KEYSYM_H) - set(HAVE_XF86KEYSYM_H ON) - else() - message(WARNING, "Missing X11/XF86keysym.h") - endif() find_path(QPA_QPLATFORMNATIVEINTERFACE_H qpa/qplatformnativeinterface.h PATHS ${Qt${QT_VERSION_MAJOR}Gui_PRIVATE_INCLUDE_DIRS}) if(QPA_QPLATFORMNATIVEINTERFACE_H) @@ -213,21 +232,8 @@ if(X11_FOUND) unset(CMAKE_REQUIRED_FLAGS) unset(CMAKE_REQUIRED_LIBRARIES) -endif(X11_FOUND) - -# TagLib -find_package(TagLib 2.0) -if(TARGET TagLib::TagLib) - set(TAGLIB_FOUND ON) - set(TAGLIB_LIBRARIES TagLib::TagLib) - set(HAVE_TAGLIB_DSFFILE ON) - set(HAVE_TAGLIB_DSDIFFFILE ON) -else() - pkg_check_modules(TAGLIB REQUIRED taglib>=1.12) endif() -pkg_check_modules(LIBEBUR128 IMPORTED_TARGET libebur128) - # SingleApplication set(KDSINGLEAPPLICATION_NAME "KDSingleApplication-qt${QT_VERSION_MAJOR}") find_package(${KDSINGLEAPPLICATION_NAME} 1.1.0) @@ -250,34 +256,32 @@ endif() if(WIN32) find_package(getopt-win REQUIRED) - pkg_check_modules(QTSPARKLE qtsparkle-qt${QT_VERSION_MAJOR}) + pkg_check_modules(QTSPARKLE REQUIRED IMPORTED_TARGET qtsparkle-qt${QT_VERSION_MAJOR}) if(QTSPARKLE_FOUND) set(HAVE_QTSPARKLE ON) endif() endif() if(WIN32 AND NOT MSVC) - # RC compiler string(REPLACE "gcc" "windres" CMAKE_RC_COMPILER_INIT ${CMAKE_C_COMPILER}) enable_language(RC) - SET(CMAKE_RC_COMPILE_OBJECT " -O coff -o -I ${CMAKE_SOURCE_DIR}/dist/windows") -endif() - -if(WIN32) - option(ENABLE_WIN32_CONSOLE "Show the windows console even outside Debug mode" OFF) + set(CMAKE_RC_COMPILE_OBJECT " -O coff -o -I ${CMAKE_SOURCE_DIR}/dist/windows") endif() optional_component(ALSA ON "ALSA integration" DEPENDS "alsa" ALSA_FOUND ) -optional_component(LIBPULSE ON "PulseAudio integration" +optional_component(PULSE ON "PulseAudio integration" DEPENDS "libpulse" LIBPULSE_FOUND ) optional_component(DBUS ON "D-Bus support" - DEPENDS "D-Bus" DBUS_FOUND - DEPENDS "Qt D-Bus" Qt${QT_VERSION_MAJOR}DBus_FOUND + DEPENDS "Qt D-Bus" DBUS_FOUND +) + +optional_component(MPRIS2 ON "MPRIS2 D-Bus Interface" + DEPENDS "D-Bus support" HAVE_DBUS ) optional_component(SONGFINGERPRINTING ON "Song fingerprinting and tracking" @@ -288,26 +292,25 @@ optional_component(MUSICBRAINZ ON "MusicBrainz integration" DEPENDS "chromaprint" CHROMAPRINT_FOUND ) -if(X11_FOUND OR (HAVE_DBUS AND Qt${QT_VERSION_MAJOR}DBus_FOUND) OR APPLE OR WIN32) - set(HAVE_GLOBALSHORTCUTS_SUPPORT ON) -endif() - -optional_component(GLOBALSHORTCUTS ON "Global shortcuts" - DEPENDS "D-Bus, X11, Windows or macOS" HAVE_GLOBALSHORTCUTS_SUPPORT -) - optional_component(X11_GLOBALSHORTCUTS ON "X11 global shortcuts" DEPENDS "X11" X11_FOUND DEPENDS "QX11Application" HAVE_QX11APPLICATION ) -optional_component(AUDIOCD ON "Devices: Audio CD support" - DEPENDS "libcdio" LIBCDIO_FOUND +optional_component(KDE_GLOBALSHORTCUTS ON "KDE global shortcuts" + DEPENDS "D-Bus support" HAVE_DBUS +) + +optional_component(GNOME_GLOBALSHORTCUTS ON "Gnome global shortcuts" + DEPENDS "D-Bus support" HAVE_DBUS +) + +optional_component(MATE_GLOBALSHORTCUTS ON "Mate global shortcuts" + DEPENDS "D-Bus support" HAVE_DBUS ) optional_component(UDISKS2 ON "Devices: UDisks2 backend" - DEPENDS "D-Bus" DBUS_FOUND - DEPENDS "Qt D-Bus" Qt${QT_VERSION_MAJOR}DBus_FOUND + DEPENDS "D-Bus support" HAVE_DBUS ) optional_component(GIO ON "Devices: GIO device backend" @@ -320,22 +323,24 @@ optional_component(GIO_UNIX ON "Devices: GIO device backend (Unix support)" DEPENDS "Unix or Windows" "NOT APPLE" ) -optional_component(LIBGPOD ON "Devices: iPod classic support" - DEPENDS "libgpod" LIBGPOD_FOUND - DEPENDS "gdk-pixbuf" GDK_PIXBUF_FOUND +optional_component(AUDIOCD ON "Devices: Audio CD support" + DEPENDS "libcdio" LIBCDIO_FOUND ) -optional_component(LIBMTP ON "Devices: MTP support" +optional_component(MTP ON "Devices: MTP support" DEPENDS "libmtp" LIBMTP_FOUND ) +optional_component(GPOD ON "Devices: iPod classic support" + DEPENDS "libgpod" LIBGPOD_FOUND + DEPENDS "gdk-pixbuf" GDK_PIXBUF_FOUND +) + optional_component(TRANSLATIONS ON "Translations" DEPENDS "gettext" GETTEXT_FOUND DEPENDS "Qt LinguistTools" Qt${QT_VERSION_MAJOR}LinguistTools_FOUND ) -option(INSTALL_TRANSLATIONS "Install translations" OFF) - optional_component(SUBSONIC ON "Streaming: Subsonic") optional_component(TIDAL ON "Streaming: Tidal") optional_component(SPOTIFY ON "Streaming: Spotify") @@ -349,12 +354,13 @@ optional_component(EBUR128 ON "EBU R 128 loudness normalization" DEPENDS "libebur128" LIBEBUR128_FOUND ) -if(APPLE OR WIN32) - set(USE_BUNDLE_DEFAULT ON) -else() - set(USE_BUNDLE_DEFAULT OFF) +if(HAVE_X11_GLOBALSHORTCUTS OR HAVE_KDE_GLOBALSHORTCUTS OR HAVE_GNOME_GLOBALSHORTCUTS OR HAVE_MATE_GLOBALSHORTCUTS OR APPLE OR WIN32) + set(HAVE_GLOBALSHORTCUTS ON) +endif() + +if(HAVE_TRANSLATIONS) + include(cmake/Translations.cmake) endif() -option(USE_BUNDLE "Bundle dependencies" ${USE_BUNDLE_DEFAULT}) if(NOT CMAKE_CROSSCOMPILING) # Check that we have Qt with sqlite driver @@ -378,9 +384,18 @@ if(NOT CMAKE_CROSSCOMPILING) ) endif() -# Set up definitions +add_executable(strawberry) -add_definitions( +if(APPLE) + set_target_properties(strawberry PROPERTIES MACOSX_BUNDLE TRUE) + set_target_properties(strawberry PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/dist/macos/Info.plist") +endif() + +if(WIN32 AND NOT ENABLE_WIN32_CONSOLE) + set_target_properties(strawberry PROPERTIES WIN32_EXECUTABLE TRUE) +endif() + +target_compile_definitions(strawberry PRIVATE -DBOOST_BIND_NO_PLACEHOLDERS -DQT_STRICT_ITERATORS -DQT_NO_CAST_FROM_BYTEARRAY @@ -396,10 +411,1050 @@ add_definitions( ) if(WIN32) - add_definitions(-DUNICODE) + target_compile_definitions(strawberry PRIVATE -DUNICODE) +endif() + +set(SOURCES + src/main.cpp + + src/core/logging.cpp + src/core/mainwindow.cpp + src/core/application.cpp + src/core/player.cpp + src/core/commandlineoptions.cpp + src/core/database.cpp + src/core/sqlquery.cpp + src/core/sqlrow.cpp + src/core/metatypes.cpp + src/core/deletefiles.cpp + src/core/filesystemmusicstorage.cpp + src/core/filesystemwatcherinterface.cpp + src/core/mergedproxymodel.cpp + src/core/multisortfilterproxy.cpp + src/core/musicstorage.cpp + src/core/networkaccessmanager.cpp + src/core/threadsafenetworkdiskcache.cpp + src/core/networktimeouts.cpp + src/core/networkproxyfactory.cpp + src/core/qtfslistener.cpp + src/core/settings.cpp + src/core/settingsprovider.cpp + src/core/signalchecker.cpp + src/core/song.cpp + src/core/songloader.cpp + src/core/stylehelper.cpp + src/core/stylesheetloader.cpp + src/core/taskmanager.cpp + src/core/thread.cpp + src/core/urlhandler.cpp + src/core/iconloader.cpp + src/core/standarditemiconloader.cpp + src/core/scopedtransaction.cpp + src/core/translations.cpp + src/core/systemtrayicon.cpp + src/core/localredirectserver.cpp + src/core/mimedata.cpp + src/core/potranslator.cpp + src/core/temporaryfile.cpp + src/utilities/strutils.cpp + src/utilities/envutils.cpp + src/utilities/colorutils.cpp + src/utilities/cryptutils.cpp + src/utilities/fileutils.cpp + src/utilities/diskutils.cpp + src/utilities/imageutils.cpp + src/utilities/macaddrutils.cpp + src/utilities/mimeutils.cpp + src/utilities/randutils.cpp + src/utilities/threadutils.cpp + src/utilities/timeutils.cpp + src/utilities/transliterate.cpp + src/utilities/xmlutils.cpp + src/utilities/filemanagerutils.cpp + src/utilities/coverutils.cpp + src/utilities/screenutils.cpp + src/utilities/textencodingutils.cpp + + src/tagreader/tagreaderclient.cpp + src/tagreader/tagreaderresult.cpp + src/tagreader/tagreaderbase.cpp + src/tagreader/tagreadertaglib.cpp + src/tagreader/tagreadergme.cpp + src/tagreader/tagreaderrequest.cpp + src/tagreader/tagreaderismediafilerequest.cpp + src/tagreader/tagreaderreadfilerequest.cpp + src/tagreader/tagreaderwritefilerequest.cpp + src/tagreader/tagreaderloadcoverdatarequest.cpp + src/tagreader/tagreaderloadcoverimagerequest.cpp + src/tagreader/tagreadersavecoverrequest.cpp + src/tagreader/tagreadersaveplaycountrequest.cpp + src/tagreader/tagreadersaveratingrequest.cpp + src/tagreader/albumcovertagdata.cpp + src/tagreader/savetagcoverdata.cpp + src/tagreader/tagreaderreply.cpp + src/tagreader/tagreaderreadfilereply.cpp + src/tagreader/tagreaderloadcoverdatareply.cpp + src/tagreader/tagreaderloadcoverimagereply.cpp + + src/filterparser/filterparser.cpp + src/filterparser/filtertree.cpp + + src/engine/enginebase.cpp + src/engine/enginedevice.cpp + src/engine/devicefinders.cpp + src/engine/devicefinder.cpp + src/engine/enginemetadata.cpp + src/engine/gststartup.cpp + src/engine/gstengine.cpp + src/engine/gstenginepipeline.cpp + + src/analyzer/fht.cpp + src/analyzer/analyzerbase.cpp + src/analyzer/analyzercontainer.cpp + src/analyzer/blockanalyzer.cpp + src/analyzer/boomanalyzer.cpp + src/analyzer/turbineanalyzer.cpp + src/analyzer/sonogramanalyzer.cpp + src/analyzer/waverubberanalyzer.cpp + src/analyzer/rainbowanalyzer.cpp + + src/equalizer/equalizer.cpp + src/equalizer/equalizerslider.cpp + + src/context/contextview.cpp + src/context/contextalbum.cpp + + src/collection/collection.cpp + src/collection/collectionmodel.cpp + src/collection/collectionbackend.cpp + src/collection/collectionwatcher.cpp + src/collection/collectionview.cpp + src/collection/collectionitemdelegate.cpp + src/collection/collectionviewcontainer.cpp + src/collection/collectiondirectorymodel.cpp + src/collection/collectionfilteroptions.cpp + src/collection/collectionfilterwidget.cpp + src/collection/collectionfilter.cpp + src/collection/collectionplaylistitem.cpp + src/collection/collectionquery.cpp + src/collection/savedgroupingmanager.cpp + src/collection/groupbydialog.cpp + src/collection/collectiontask.cpp + src/collection/collectionmodelupdate.cpp + + src/playlist/playlist.cpp + src/playlist/playlistbackend.cpp + src/playlist/playlistcontainer.cpp + src/playlist/playlistdelegates.cpp + src/playlist/playlistfilter.cpp + src/playlist/playlistheader.cpp + src/playlist/playlistitem.cpp + src/playlist/playlistitemmimedata.cpp + src/playlist/playlistlistcontainer.cpp + src/playlist/playlistlistmodel.cpp + src/playlist/playlistlistsortfiltermodel.cpp + src/playlist/playlistlistview.cpp + src/playlist/playlistmanager.cpp + src/playlist/playlistsaveoptionsdialog.cpp + src/playlist/playlistsequence.cpp + src/playlist/playlisttabbar.cpp + src/playlist/playlistundocommands.cpp + src/playlist/playlistview.cpp + src/playlist/playlistproxystyle.cpp + src/playlist/songmimedata.cpp + src/playlist/songloaderinserter.cpp + src/playlist/songplaylistitem.cpp + src/playlist/dynamicplaylistcontrols.cpp + + src/queue/queue.cpp + src/queue/queueview.cpp + + src/playlistparsers/asxiniparser.cpp + src/playlistparsers/asxparser.cpp + src/playlistparsers/cueparser.cpp + src/playlistparsers/m3uparser.cpp + src/playlistparsers/parserbase.cpp + src/playlistparsers/playlistparser.cpp + src/playlistparsers/plsparser.cpp + src/playlistparsers/wplparser.cpp + src/playlistparsers/xmlparser.cpp + src/playlistparsers/xspfparser.cpp + + src/smartplaylists/playlistgenerator.cpp + src/smartplaylists/playlistgeneratorinserter.cpp + src/smartplaylists/playlistgeneratormimedata.cpp + src/smartplaylists/playlistquerygenerator.cpp + src/smartplaylists/smartplaylistquerywizardplugin.cpp + src/smartplaylists/smartplaylistquerywizardpluginsortpage.cpp + src/smartplaylists/smartplaylistquerywizardpluginsearchpage.cpp + src/smartplaylists/smartplaylistsearch.cpp + src/smartplaylists/smartplaylistsearchpreview.cpp + src/smartplaylists/smartplaylistsearchterm.cpp + src/smartplaylists/smartplaylistsearchtermwidget.cpp + src/smartplaylists/smartplaylistsearchtermwidgetoverlay.cpp + src/smartplaylists/smartplaylistsmodel.cpp + src/smartplaylists/smartplaylistsviewcontainer.cpp + src/smartplaylists/smartplaylistsview.cpp + src/smartplaylists/smartplaylistwizard.cpp + src/smartplaylists/smartplaylistwizardplugin.cpp + src/smartplaylists/smartplaylistwizardtypepage.cpp + src/smartplaylists/smartplaylistwizardfinishpage.cpp + + src/covermanager/albumcovermanager.cpp + src/covermanager/albumcovermanagerlist.cpp + src/covermanager/albumcoverloader.cpp + src/covermanager/albumcoverloaderoptions.cpp + src/covermanager/albumcoverfetcher.cpp + src/covermanager/albumcoverfetchersearch.cpp + src/covermanager/albumcoversearcher.cpp + src/covermanager/albumcoverexport.cpp + src/covermanager/albumcoverexporter.cpp + src/covermanager/albumcoverchoicecontroller.cpp + src/covermanager/coverprovider.cpp + src/covermanager/coverproviders.cpp + src/covermanager/coversearchstatistics.cpp + src/covermanager/coversearchstatisticsdialog.cpp + src/covermanager/coverexportrunnable.cpp + src/covermanager/currentalbumcoverloader.cpp + src/covermanager/coverfromurldialog.cpp + src/covermanager/jsoncoverprovider.cpp + src/covermanager/lastfmcoverprovider.cpp + src/covermanager/musicbrainzcoverprovider.cpp + src/covermanager/discogscoverprovider.cpp + src/covermanager/deezercoverprovider.cpp + src/covermanager/qobuzcoverprovider.cpp + src/covermanager/musixmatchcoverprovider.cpp + src/covermanager/opentidalcoverprovider.cpp + + src/lyrics/lyricsproviders.cpp + src/lyrics/lyricsprovider.cpp + src/lyrics/lyricssearchrequest.h + src/lyrics/lyricssearchresult.h + src/lyrics/lyricsfetcher.cpp + src/lyrics/lyricsfetchersearch.cpp + src/lyrics/jsonlyricsprovider.cpp + src/lyrics/htmllyricsprovider.cpp + src/lyrics/ovhlyricsprovider.cpp + src/lyrics/lololyricsprovider.cpp + src/lyrics/geniuslyricsprovider.cpp + src/lyrics/musixmatchlyricsprovider.cpp + src/lyrics/chartlyricsprovider.cpp + src/lyrics/songlyricscomlyricsprovider.cpp + src/lyrics/azlyricscomlyricsprovider.cpp + src/lyrics/elyricsnetlyricsprovider.cpp + src/lyrics/letraslyricsprovider.cpp + src/lyrics/lyricfindlyricsprovider.cpp + + src/providers/musixmatchprovider.cpp + + src/settings/settingsdialog.cpp + src/settings/settingspage.cpp + src/settings/behavioursettingspage.cpp + src/settings/collectionsettingspage.cpp + src/settings/collectionsettingsdirectorymodel.cpp + src/settings/backendsettingspage.cpp + src/settings/playlistsettingspage.cpp + src/settings/scrobblersettingspage.cpp + src/settings/coverssettingspage.cpp + src/settings/lyricssettingspage.cpp + src/settings/networkproxysettingspage.cpp + src/settings/appearancesettingspage.cpp + src/settings/contextsettingspage.cpp + src/settings/notificationssettingspage.cpp + src/settings/transcodersettingspage.cpp + + src/dialogs/about.cpp + src/dialogs/console.cpp + src/dialogs/errordialog.cpp + src/dialogs/edittagdialog.cpp + src/dialogs/trackselectiondialog.cpp + src/dialogs/addstreamdialog.cpp + src/dialogs/userpassdialog.cpp + src/dialogs/deleteconfirmationdialog.cpp + src/dialogs/lastfmimportdialog.cpp + src/dialogs/messagedialog.cpp + src/dialogs/snapdialog.cpp + src/dialogs/saveplaylistsdialog.cpp + + src/widgets/autoexpandingtreeview.cpp + src/widgets/busyindicator.cpp + src/widgets/clickablelabel.cpp + src/widgets/fancytabwidget.cpp + src/widgets/fancytabbar.cpp + src/widgets/fancytabdata.cpp + src/widgets/favoritewidget.cpp + src/widgets/fileview.cpp + src/widgets/fileviewlist.cpp + src/widgets/forcescrollperpixel.cpp + src/widgets/freespacebar.cpp + src/widgets/groupediconview.cpp + src/widgets/lineedit.cpp + src/widgets/linetextedit.cpp + src/widgets/multiloadingindicator.cpp + src/widgets/playingwidget.cpp + src/widgets/renametablineedit.cpp + src/widgets/sliderslider.cpp + src/widgets/prettyslider.cpp + src/widgets/volumeslider.cpp + src/widgets/stickyslider.cpp + src/widgets/stretchheaderview.cpp + src/widgets/trackslider.cpp + src/widgets/tracksliderpopup.cpp + src/widgets/tracksliderslider.cpp + src/widgets/loginstatewidget.cpp + src/widgets/ratingwidget.cpp + src/widgets/resizabletextedit.cpp + + src/osd/osdbase.cpp + src/osd/osdpretty.cpp + + src/streaming/streamingservices.cpp + src/streaming/streamingservice.cpp + src/streaming/streamplaylistitem.cpp + src/streaming/streamingsearchview.cpp + src/streaming/streamingsearchmodel.cpp + src/streaming/streamingsearchsortmodel.cpp + src/streaming/streamingsearchitemdelegate.cpp + src/streaming/streamingsongsview.cpp + src/streaming/streamingtabsview.cpp + src/streaming/streamingcollectionview.cpp + src/streaming/streamingcollectionviewcontainer.cpp + src/streaming/streamingsearchview.cpp + src/streaming/streamsongmimedata.cpp + + src/radios/radioservices.cpp + src/radios/radiobackend.cpp + src/radios/radiomodel.cpp + src/radios/radioview.cpp + src/radios/radioviewcontainer.cpp + src/radios/radioservice.cpp + src/radios/radioplaylistitem.cpp + src/radios/radiochannel.cpp + src/radios/somafmservice.cpp + src/radios/radioparadiseservice.cpp + src/radios/radiomimedata.cpp + + src/scrobbler/audioscrobbler.cpp + src/scrobbler/scrobblersettings.cpp + src/scrobbler/scrobblerservice.cpp + src/scrobbler/scrobblercache.cpp + src/scrobbler/scrobblercacheitem.cpp + src/scrobbler/scrobblemetadata.cpp + src/scrobbler/scrobblingapi20.cpp + src/scrobbler/lastfmscrobbler.cpp + src/scrobbler/librefmscrobbler.cpp + src/scrobbler/listenbrainzscrobbler.cpp + src/scrobbler/lastfmimport.cpp + + src/organize/organize.cpp + src/organize/organizeformat.cpp + src/organize/organizeformatvalidator.cpp + src/organize/organizesyntaxhighlighter.cpp + src/organize/organizedialog.cpp + src/organize/organizeerrordialog.cpp + + src/transcoder/transcoder.cpp + src/transcoder/transcoderoptionsinterface.cpp + src/transcoder/transcodedialog.cpp + src/transcoder/transcoderoptionsdialog.cpp + src/transcoder/transcoderoptionsflac.cpp + src/transcoder/transcoderoptionswavpack.cpp + src/transcoder/transcoderoptionsvorbis.cpp + src/transcoder/transcoderoptionsopus.cpp + src/transcoder/transcoderoptionsspeex.cpp + src/transcoder/transcoderoptionsaac.cpp + src/transcoder/transcoderoptionsasf.cpp + src/transcoder/transcoderoptionsmp3.cpp +) + +set(HEADERS + src/core/logging.h + src/core/mainwindow.h + src/core/application.h + src/core/player.h + src/core/database.h + src/core/deletefiles.h + src/core/filesystemwatcherinterface.h + src/core/mergedproxymodel.h + src/core/multisortfilterproxy.h + src/core/networkaccessmanager.h + src/core/threadsafenetworkdiskcache.h + src/core/networktimeouts.h + src/core/qtfslistener.h + src/core/settings.h + src/core/songloader.h + src/core/taskmanager.h + src/core/thread.h + src/core/urlhandler.h + src/core/standarditemiconloader.h + src/core/translations.h + src/core/potranslator.h + src/core/mimedata.h + src/core/stylesheetloader.h + src/core/localredirectserver.h + + src/tagreader/tagreaderclient.h + src/tagreader/tagreaderreply.h + src/tagreader/tagreaderreadfilereply.h + src/tagreader/tagreaderloadcoverdatareply.h + src/tagreader/tagreaderloadcoverimagereply.h + + src/engine/enginebase.h + src/engine/devicefinders.h + src/engine/gststartup.h + src/engine/gstengine.h + src/engine/gstenginepipeline.h + + src/analyzer/analyzerbase.h + src/analyzer/analyzercontainer.h + src/analyzer/blockanalyzer.h + src/analyzer/boomanalyzer.h + src/analyzer/turbineanalyzer.h + src/analyzer/sonogramanalyzer.h + src/analyzer/waverubberanalyzer.h + src/analyzer/rainbowanalyzer.h + + src/equalizer/equalizer.h + src/equalizer/equalizerslider.h + + src/context/contextview.h + src/context/contextalbum.h + + src/collection/collection.h + src/collection/collectionmodel.h + src/collection/collectionbackend.h + src/collection/collectionwatcher.h + src/collection/collectionview.h + src/collection/collectionitemdelegate.h + src/collection/collectionviewcontainer.h + src/collection/collectiondirectorymodel.h + src/collection/collectionfilterwidget.h + src/collection/collectionfilter.h + src/collection/savedgroupingmanager.h + src/collection/groupbydialog.h + + src/playlist/playlist.h + src/playlist/playlistbackend.h + src/playlist/playlistcontainer.h + src/playlist/playlistdelegates.h + src/playlist/playlistfilter.h + src/playlist/playlistheader.h + src/playlist/playlistlistcontainer.h + src/playlist/playlistlistmodel.h + src/playlist/playlistlistview.h + src/playlist/playlistlistsortfiltermodel.h + src/playlist/playlistmanager.h + src/playlist/playlistsaveoptionsdialog.h + src/playlist/playlistsequence.h + src/playlist/playlisttabbar.h + src/playlist/playlistview.h + src/playlist/playlistproxystyle.h + src/playlist/playlistitemmimedata.h + src/playlist/songloaderinserter.h + src/playlist/songmimedata.h + src/playlist/dynamicplaylistcontrols.h + + src/queue/queue.h + src/queue/queueview.h + + src/playlistparsers/asxiniparser.h + src/playlistparsers/asxparser.h + src/playlistparsers/cueparser.h + src/playlistparsers/m3uparser.h + src/playlistparsers/parserbase.h + src/playlistparsers/playlistparser.h + src/playlistparsers/plsparser.h + src/playlistparsers/wplparser.h + src/playlistparsers/xmlparser.h + src/playlistparsers/xspfparser.h + + src/smartplaylists/playlistgenerator.h + src/smartplaylists/playlistgeneratorinserter.h + src/smartplaylists/playlistquerygenerator.h + src/smartplaylists/playlistgeneratormimedata.h + src/smartplaylists/smartplaylistquerywizardplugin.h + src/smartplaylists/smartplaylistquerywizardpluginsortpage.h + src/smartplaylists/smartplaylistquerywizardpluginsearchpage.h + src/smartplaylists/smartplaylistsearchpreview.h + src/smartplaylists/smartplaylistsearchtermwidget.h + src/smartplaylists/smartplaylistsearchtermwidgetoverlay.h + src/smartplaylists/smartplaylistsmodel.h + src/smartplaylists/smartplaylistsviewcontainer.h + src/smartplaylists/smartplaylistsview.h + src/smartplaylists/smartplaylistwizard.h + src/smartplaylists/smartplaylistwizardplugin.h + src/smartplaylists/smartplaylistwizardtypepage.h + src/smartplaylists/smartplaylistwizardfinishpage.h + + src/covermanager/albumcovermanager.h + src/covermanager/albumcovermanagerlist.h + src/covermanager/albumcoverloader.h + src/covermanager/albumcoverfetcher.h + src/covermanager/albumcoverfetchersearch.h + src/covermanager/albumcoversearcher.h + src/covermanager/albumcoverexport.h + src/covermanager/albumcoverexporter.h + src/covermanager/albumcoverchoicecontroller.h + src/covermanager/coverprovider.h + src/covermanager/coverproviders.h + src/covermanager/coversearchstatisticsdialog.h + src/covermanager/coverexportrunnable.h + src/covermanager/currentalbumcoverloader.h + src/covermanager/coverfromurldialog.h + src/covermanager/jsoncoverprovider.h + src/covermanager/lastfmcoverprovider.h + src/covermanager/musicbrainzcoverprovider.h + src/covermanager/discogscoverprovider.h + src/covermanager/deezercoverprovider.h + src/covermanager/qobuzcoverprovider.h + src/covermanager/musixmatchcoverprovider.h + src/covermanager/opentidalcoverprovider.h + + src/lyrics/lyricsproviders.h + src/lyrics/lyricsprovider.h + src/lyrics/lyricsfetcher.h + src/lyrics/lyricsfetchersearch.h + src/lyrics/jsonlyricsprovider.h + src/lyrics/htmllyricsprovider.h + src/lyrics/ovhlyricsprovider.h + src/lyrics/lololyricsprovider.h + src/lyrics/geniuslyricsprovider.h + src/lyrics/musixmatchlyricsprovider.h + src/lyrics/chartlyricsprovider.h + src/lyrics/songlyricscomlyricsprovider.h + src/lyrics/azlyricscomlyricsprovider.h + src/lyrics/elyricsnetlyricsprovider.h + src/lyrics/letraslyricsprovider.h + src/lyrics/lyricfindlyricsprovider.h + + src/settings/settingsdialog.h + src/settings/settingspage.h + src/settings/behavioursettingspage.h + src/settings/collectionsettingspage.h + src/settings/collectionsettingsdirectorymodel.h + src/settings/backendsettingspage.h + src/settings/playlistsettingspage.h + src/settings/scrobblersettingspage.h + src/settings/coverssettingspage.h + src/settings/lyricssettingspage.h + src/settings/networkproxysettingspage.h + src/settings/appearancesettingspage.h + src/settings/contextsettingspage.h + src/settings/notificationssettingspage.h + src/settings/transcodersettingspage.h + + src/dialogs/about.h + src/dialogs/errordialog.h + src/dialogs/console.h + src/dialogs/edittagdialog.h + src/dialogs/trackselectiondialog.h + src/dialogs/addstreamdialog.h + src/dialogs/userpassdialog.h + src/dialogs/deleteconfirmationdialog.h + src/dialogs/lastfmimportdialog.h + src/dialogs/messagedialog.h + src/dialogs/snapdialog.h + src/dialogs/saveplaylistsdialog.h + + src/widgets/autoexpandingtreeview.h + src/widgets/busyindicator.h + src/widgets/clickablelabel.h + src/widgets/fancytabwidget.h + src/widgets/fancytabbar.h + src/widgets/fancytabdata.h + src/widgets/favoritewidget.h + src/widgets/fileview.h + src/widgets/fileviewlist.h + src/widgets/freespacebar.h + src/widgets/groupediconview.h + src/widgets/lineedit.h + src/widgets/linetextedit.h + src/widgets/multiloadingindicator.h + src/widgets/playingwidget.h + src/widgets/renametablineedit.h + src/widgets/sliderslider.h + src/widgets/prettyslider.h + src/widgets/volumeslider.h + src/widgets/stickyslider.h + src/widgets/stretchheaderview.h + src/widgets/trackslider.h + src/widgets/tracksliderpopup.h + src/widgets/tracksliderslider.h + src/widgets/loginstatewidget.h + src/widgets/searchfield.h + src/widgets/ratingwidget.h + src/widgets/forcescrollperpixel.h + src/widgets/resizabletextedit.h + + src/osd/osdbase.h + src/osd/osdpretty.h + + src/streaming/streamingservices.h + src/streaming/streamingservice.h + src/streaming/streamsongmimedata.h + src/streaming/streamingsearchmodel.h + src/streaming/streamingsearchsortmodel.h + src/streaming/streamingsearchitemdelegate.h + src/streaming/streamingsearchview.h + src/streaming/streamingsongsview.h + src/streaming/streamingtabsview.h + src/streaming/streamingcollectionview.h + src/streaming/streamingcollectionviewcontainer.h + + src/radios/radioservices.h + src/radios/radiobackend.h + src/radios/radiomodel.h + src/radios/radioview.h + src/radios/radioviewcontainer.h + src/radios/radioservice.h + src/radios/radiomimedata.h + src/radios/somafmservice.h + src/radios/radioparadiseservice.h + + src/scrobbler/audioscrobbler.h + src/scrobbler/scrobblersettings.h + src/scrobbler/scrobblerservice.h + src/scrobbler/scrobblercache.h + src/scrobbler/scrobblingapi20.h + src/scrobbler/lastfmscrobbler.h + src/scrobbler/librefmscrobbler.h + src/scrobbler/listenbrainzscrobbler.h + src/scrobbler/lastfmimport.h + + src/organize/organize.h + src/organize/organizeformatvalidator.h + src/organize/organizesyntaxhighlighter.h + src/organize/organizedialog.h + src/organize/organizeerrordialog.h + + src/transcoder/transcoder.h + src/transcoder/transcodedialog.h + src/transcoder/transcoderoptionsdialog.h + src/transcoder/transcoderoptionsinterface.h + src/transcoder/transcoderoptionsflac.h + src/transcoder/transcoderoptionswavpack.h + src/transcoder/transcoderoptionsvorbis.h + src/transcoder/transcoderoptionsopus.h + src/transcoder/transcoderoptionsspeex.h + src/transcoder/transcoderoptionsaac.h + src/transcoder/transcoderoptionsasf.h + src/transcoder/transcoderoptionsmp3.h +) + +set(UI + + src/core/mainwindow.ui + + src/collection/groupbydialog.ui + src/collection/collectionfilterwidget.ui + src/collection/collectionviewcontainer.ui + src/collection/savedgroupingmanager.ui + + src/playlist/playlistcontainer.ui + src/playlist/playlistlistcontainer.ui + src/playlist/playlistsaveoptionsdialog.ui + src/playlist/playlistsequence.ui + src/playlist/dynamicplaylistcontrols.ui + + src/queue/queueview.ui + + src/smartplaylists/smartplaylistquerysearchpage.ui + src/smartplaylists/smartplaylistquerysortpage.ui + src/smartplaylists/smartplaylistsearchpreview.ui + src/smartplaylists/smartplaylistsearchtermwidget.ui + src/smartplaylists/smartplaylistsviewcontainer.ui + src/smartplaylists/smartplaylistwizardfinishpage.ui + + src/covermanager/albumcoverexport.ui + src/covermanager/albumcovermanager.ui + src/covermanager/albumcoversearcher.ui + src/covermanager/coversearchstatisticsdialog.ui + src/covermanager/coverfromurldialog.ui + + src/settings/settingsdialog.ui + src/settings/behavioursettingspage.ui + src/settings/collectionsettingspage.ui + src/settings/backendsettingspage.ui + src/settings/contextsettingspage.ui + src/settings/playlistsettingspage.ui + src/settings/scrobblersettingspage.ui + src/settings/coverssettingspage.ui + src/settings/lyricssettingspage.ui + src/settings/networkproxysettingspage.ui + src/settings/appearancesettingspage.ui + src/settings/notificationssettingspage.ui + src/settings/transcodersettingspage.ui + + src/equalizer/equalizer.ui + src/equalizer/equalizerslider.ui + + src/dialogs/about.ui + src/dialogs/errordialog.ui + src/dialogs/console.ui + src/dialogs/edittagdialog.ui + src/dialogs/trackselectiondialog.ui + src/dialogs/addstreamdialog.ui + src/dialogs/userpassdialog.ui + src/dialogs/lastfmimportdialog.ui + src/dialogs/messagedialog.ui + src/dialogs/saveplaylistsdialog.ui + + src/widgets/trackslider.ui + src/widgets/fileview.ui + src/widgets/loginstatewidget.ui + + src/osd/osdpretty.ui + + src/streaming/streamingtabsview.ui + src/streaming/streamingcollectionviewcontainer.ui + src/streaming/streamingsearchview.ui + + src/radios/radioviewcontainer.ui + + src/organize/organizedialog.ui + src/organize/organizeerrordialog.ui + + src/transcoder/transcodedialog.ui + src/transcoder/transcodelogdialog.ui + src/transcoder/transcoderoptionsaac.ui + src/transcoder/transcoderoptionsdialog.ui + src/transcoder/transcoderoptionsflac.ui + src/transcoder/transcoderoptionswavpack.ui + src/transcoder/transcoderoptionsvorbis.ui + src/transcoder/transcoderoptionsopus.ui + src/transcoder/transcoderoptionsspeex.ui + src/transcoder/transcoderoptionsasf.ui + src/transcoder/transcoderoptionsmp3.ui +) + +if(APPLE) + optional_source(APPLE + SOURCES + src/utilities/macosutils.mm + src/core/scoped_nsautorelease_pool.mm + src/core/mac_startup.mm + src/core/macsystemtrayicon.mm + src/osd/osdmac.mm + src/widgets/searchfield_mac.mm + src/engine/macosdevicefinder.cpp + src/device/macosdevicelister.mm + HEADERS + src/core/macsystemtrayicon.h + src/osd/osdmac.h + src/device/macosdevicelister.h + ) +else() + list(APPEND SOURCES src/core/qtsystemtrayicon.cpp src/widgets/searchfield_qt.cpp src/widgets/searchfield_qt_private.cpp) + list(APPEND HEADERS src/core/qtsystemtrayicon.h src/widgets/searchfield_qt_private.h) +endif() + +optional_source(WIN32 + SOURCES + src/utilities/winutils.cpp + src/engine/directsounddevicefinder.cpp + src/engine/mmdevicefinder.cpp + src/core/scopedwchararray.cpp + src/core/windows7thumbbar.cpp + HEADERS + src/core/windows7thumbbar.h +) + +if(HAVE_GLOBALSHORTCUTS) + optional_source(HAVE_GLOBALSHORTCUTS + SOURCES src/globalshortcuts/globalshortcutsmanager.cpp src/globalshortcuts/globalshortcutsbackend.cpp src/globalshortcuts/globalshortcutgrabber.cpp src/settings/globalshortcutssettingspage.cpp + HEADERS src/globalshortcuts/globalshortcutsmanager.h src/globalshortcuts/globalshortcutsbackend.h src/globalshortcuts/globalshortcutgrabber.h src/settings/globalshortcutssettingspage.h + UI src/globalshortcuts/globalshortcutgrabber.ui src/settings/globalshortcutssettingspage.ui + ) + optional_source(HAVE_KDE_GLOBALSHORTCUTS + SOURCES src/globalshortcuts/globalshortcutsbackend-kde.cpp src/globalshortcuts/globalshortcutsbackend-gnome.cpp src/globalshortcuts/globalshortcutsbackend-mate.cpp + HEADERS src/globalshortcuts/globalshortcutsbackend-kde.h src/globalshortcuts/globalshortcutsbackend-gnome.h src/globalshortcuts/globalshortcutsbackend-mate.h + ) + optional_source(HAVE_X11_GLOBALSHORTCUTS + SOURCES src/globalshortcuts/globalshortcutsbackend-x11.cpp src/globalshortcuts/globalshortcut.cpp src/globalshortcuts/globalshortcut-x11.cpp + HEADERS src/globalshortcuts/globalshortcutsbackend-x11.h src/globalshortcuts/globalshortcut.h + ) + optional_source(APPLE + SOURCES src/globalshortcuts/globalshortcutsbackend-macos.mm src/globalshortcuts/globalshortcutgrabber.mm + HEADERS src/globalshortcuts/globalshortcutsbackend-macos.h src/globalshortcuts/globalshortcutgrabber.h + ) + optional_source(WIN32 + SOURCES src/globalshortcuts/globalshortcutsbackend-win.cpp src/globalshortcuts/globalshortcut.cpp src/globalshortcuts/globalshortcut-win.cpp + HEADERS src/globalshortcuts/globalshortcutsbackend-win.h src/globalshortcuts/globalshortcut.h + ) +endif() + +optional_source(HAVE_ALSA SOURCES src/engine/alsadevicefinder.cpp src/engine/alsapcmdevicefinder.cpp) +optional_source(HAVE_PULSE SOURCES src/engine/pulsedevicefinder.cpp) +optional_source(MSVC SOURCES src/engine/uwpdevicefinder.cpp src/engine/asiodevicefinder.cpp) + +if(HAVE_SONGFINGERPRINTING OR HAVE_MUSICBRAINZ) + optional_source(CHROMAPRINT_FOUND SOURCES src/engine/chromaprinter.cpp) +endif() + +optional_source(HAVE_MUSICBRAINZ + SOURCES + src/musicbrainz/acoustidclient.cpp + src/musicbrainz/musicbrainzclient.cpp + src/musicbrainz/tagfetcher.cpp + HEADERS + src/musicbrainz/acoustidclient.h + src/musicbrainz/musicbrainzclient.h + src/musicbrainz/tagfetcher.h +) + +optional_source(HAVE_EBUR128 SOURCES src/engine/ebur128analysis.cpp) + +if(HAVE_DBUS) + optional_source(HAVE_DBUS SOURCES src/osd/osddbus.cpp HEADERS src/osd/osddbus.h) + qt_add_dbus_interface(SOURCES src/osd/org.freedesktop.Notifications.xml notification) +endif() + +if(HAVE_MPRIS2) + optional_source(HAVE_MPRIS2 SOURCES src/mpris2/mpris2.cpp HEADERS src/mpris2/mpris2.h) + qt_add_dbus_adaptor(SOURCES src/mpris2/org.mpris.MediaPlayer2.xml src/mpris2/mpris2.h mpris::Mpris2 mpris2_root Mpris2Root) + qt_add_dbus_adaptor(SOURCES src/mpris2/org.mpris.MediaPlayer2.Player.xml src/mpris2/mpris2.h mpris::Mpris2 mpris2_player Mpris2Player) + qt_add_dbus_adaptor(SOURCES src/mpris2/org.mpris.MediaPlayer2.TrackList.xml src/mpris2/mpris2.h mpris::Mpris2 mpris2_tracklist Mpris2TrackList) + qt_add_dbus_adaptor(SOURCES src/mpris2/org.mpris.MediaPlayer2.Playlists.xml src/mpris2/mpris2.h mpris::Mpris2 mpris2_playlists Mpris2Playlists) +endif() + +optional_source(HAVE_MOODBAR + SOURCES + src/moodbar/moodbarbuilder.cpp + src/moodbar/moodbarcontroller.cpp + src/moodbar/moodbaritemdelegate.cpp + src/moodbar/moodbarloader.cpp + src/moodbar/moodbarpipeline.cpp + src/moodbar/moodbarproxystyle.cpp + src/moodbar/moodbarrenderer.cpp + src/moodbar/gstfastspectrumplugin.cpp + src/moodbar/gstfastspectrum.cpp + src/settings/moodbarsettingspage.cpp + HEADERS + src/moodbar/moodbarcontroller.h + src/moodbar/moodbaritemdelegate.h + src/moodbar/moodbarloader.h + src/moodbar/moodbarpipeline.h + src/moodbar/moodbarproxystyle.h + src/settings/moodbarsettingspage.h + UI + src/settings/moodbarsettingspage.ui +) + +if(HAVE_KDE_GLOBALSHORTCUTS) + qt_add_dbus_interface(SOURCES src/globalshortcuts/org.kde.KGlobalAccel.xml kglobalaccel) + qt_add_dbus_interface(SOURCES src/globalshortcuts/org.kde.KGlobalAccel.Component.xml kglobalaccelcomponent) +endif() + +if(HAVE_GNOME_GLOBALSHORTCUTS) + qt_add_dbus_interface(SOURCES src/globalshortcuts/org.gnome.SettingsDaemon.MediaKeys.xml gnomesettingsdaemon) +endif() + +if(HAVE_MATE_GLOBALSHORTCUTS) + qt_add_dbus_interface(SOURCES src/globalshortcuts/org.mate.SettingsDaemon.MediaKeys.xml matesettingsdaemon) +endif() + +optional_source(UNIX + SOURCES + src/device/connecteddevice.cpp + src/device/devicedatabasebackend.cpp + src/device/devicelister.cpp + src/device/devicemanager.cpp + src/device/devicestatefiltermodel.cpp + src/device/filesystemdevice.cpp + src/device/deviceviewcontainer.cpp + src/device/deviceview.cpp + src/device/deviceproperties.cpp + src/device/deviceinfo.cpp + HEADERS + src/device/connecteddevice.h + src/device/devicedatabasebackend.h + src/device/devicelister.h + src/device/devicemanager.h + src/device/devicestatefiltermodel.h + src/device/filesystemdevice.h + src/device/deviceviewcontainer.h + src/device/deviceview.h + src/device/deviceproperties.h + UI + src/device/deviceproperties.ui + src/device/deviceviewcontainer.ui +) + +if(UNIX) + optional_source(HAVE_GIO SOURCES src/device/giolister.cpp HEADERS src/device/giolister.h) +endif() + +if(HAVE_UDISKS2) + optional_source(HAVE_UDISKS2 SOURCES src/device/udisks2lister.cpp HEADERS src/device/udisks2lister.h) + set_source_files_properties(src/device/org.freedesktop.DBus.ObjectManager.xml PROPERTIES NO_NAMESPACE objectmanager INCLUDE core/dbus_metatypes.h) + set_source_files_properties(src/device/org.freedesktop.UDisks2.Filesystem.xml PROPERTIES NO_NAMESPACE udisks2filesystem INCLUDE core/dbus_metatypes.h) + set_source_files_properties(src/device/org.freedesktop.UDisks2.Block.xml PROPERTIES NO_NAMESPACE udisks2block INCLUDE core/dbus_metatypes.h) + set_source_files_properties(src/device/org.freedesktop.UDisks2.Drive.xml PROPERTIES NO_NAMESPACE udisks2drive INCLUDE core/dbus_metatypes.h) + set_source_files_properties(src/device/org.freedesktop.UDisks2.Job.xml PROPERTIES NO_NAMESPACE udisks2job INCLUDE core/dbus_metatypes.h) + qt_add_dbus_interface(SOURCES src/device/org.freedesktop.DBus.ObjectManager.xml objectmanager) + qt_add_dbus_interface(SOURCES src/device/org.freedesktop.UDisks2.Filesystem.xml udisks2filesystem) + qt_add_dbus_interface(SOURCES src/device/org.freedesktop.UDisks2.Block.xml udisks2block) + qt_add_dbus_interface(SOURCES src/device/org.freedesktop.UDisks2.Drive.xml udisks2drive) + qt_add_dbus_interface(SOURCES src/device/org.freedesktop.UDisks2.Job.xml udisks2job) +endif() + +optional_source(HAVE_MTP + SOURCES + src/device/mtpconnection.cpp + src/device/mtpdevice.cpp + src/device/mtploader.cpp + HEADERS + src/device/mtpconnection.h + src/device/mtpdevice.h + src/device/mtploader.h +) + +optional_source(HAVE_AUDIOCD + SOURCES + src/device/cddadevice.cpp + src/device/cddalister.cpp + src/device/cddasongloader.cpp + HEADERS + src/device/cddadevice.h + src/device/cddalister.h + src/device/cddasongloader.h +) + +optional_source(HAVE_GPOD + SOURCES + src/device/gpoddevice.cpp + src/device/gpodloader.cpp + HEADERS + src/device/gpoddevice.h + src/device/gpodloader.h +) + +optional_source(HAVE_SUBSONIC + SOURCES + src/subsonic/subsonicservice.cpp + src/subsonic/subsonicurlhandler.cpp + src/subsonic/subsonicbaserequest.cpp + src/subsonic/subsonicrequest.cpp + src/subsonic/subsonicscrobblerequest.cpp + src/settings/subsonicsettingspage.cpp + src/scrobbler/subsonicscrobbler.cpp + HEADERS + src/subsonic/subsonicservice.h + src/subsonic/subsonicurlhandler.h + src/subsonic/subsonicbaserequest.h + src/subsonic/subsonicrequest.h + src/subsonic/subsonicscrobblerequest.h + src/settings/subsonicsettingspage.h + src/scrobbler/subsonicscrobbler.h + UI + src/settings/subsonicsettingspage.ui +) + +optional_source(HAVE_TIDAL + SOURCES + src/tidal/tidalservice.cpp + src/tidal/tidalurlhandler.cpp + src/tidal/tidalbaserequest.cpp + src/tidal/tidalrequest.cpp + src/tidal/tidalstreamurlrequest.cpp + src/tidal/tidalfavoriterequest.cpp + src/settings/tidalsettingspage.cpp + src/covermanager/tidalcoverprovider.cpp + HEADERS + src/tidal/tidalservice.h + src/tidal/tidalurlhandler.h + src/tidal/tidalbaserequest.h + src/tidal/tidalrequest.h + src/tidal/tidalstreamurlrequest.h + src/tidal/tidalfavoriterequest.h + src/settings/tidalsettingspage.h + src/covermanager/tidalcoverprovider.h + UI + src/settings/tidalsettingspage.ui +) + +optional_source(HAVE_SPOTIFY + SOURCES + src/spotify/spotifyservice.cpp + src/spotify/spotifybaserequest.cpp + src/spotify/spotifyrequest.cpp + src/spotify/spotifyfavoriterequest.cpp + src/settings/spotifysettingspage.cpp + src/covermanager/spotifycoverprovider.cpp + HEADERS + src/spotify/spotifyservice.h + src/spotify/spotifybaserequest.h + src/spotify/spotifyrequest.h + src/spotify/spotifyfavoriterequest.h + src/settings/spotifysettingspage.h + src/covermanager/spotifycoverprovider.h + UI + src/settings/spotifysettingspage.ui +) + +optional_source(HAVE_QOBUZ + SOURCES + src/qobuz/qobuzservice.cpp + src/qobuz/qobuzurlhandler.cpp + src/qobuz/qobuzbaserequest.cpp + src/qobuz/qobuzrequest.cpp + src/qobuz/qobuzstreamurlrequest.cpp + src/qobuz/qobuzfavoriterequest.cpp + src/settings/qobuzsettingspage.cpp + HEADERS + src/qobuz/qobuzservice.h + src/qobuz/qobuzurlhandler.h + src/qobuz/qobuzbaserequest.h + src/qobuz/qobuzrequest.h + src/qobuz/qobuzstreamurlrequest.h + src/qobuz/qobuzfavoriterequest.h + src/settings/qobuzsettingspage.h + UI + src/settings/qobuzsettingspage.ui +) + +qt_wrap_cpp(SOURCES ${HEADERS}) +qt_wrap_ui(SOURCES ${UI}) +qt_add_resources(SOURCES data/data.qrc data/icons.qrc) + +if(HAVE_TRANSLATIONS) + + set(LINGUAS "All" CACHE STRING "A space-seperated list of translations to compile in to Strawberry, or \"None\".") + if(LINGUAS STREQUAL "All") + # build LANGUAGES from all existing .po files + file(GLOB pofiles src/translations/*.po) + foreach(pofile ${pofiles}) + get_filename_component(lang ${pofile} NAME_WE) + list(APPEND LANGUAGES ${lang}) + endforeach(pofile) + else(LINGUAS STREQUAL "All") + if(NOT LINGUAS OR LINGUAS STREQUAL "None") + set(LANGUAGES "") + else(NOT LINGUAS OR LINGUAS STREQUAL "None") + string(REGEX MATCHALL [a-zA-Z_@]+ LANGUAGES ${LINGUAS}) + endif(NOT LINGUAS OR LINGUAS STREQUAL "None") + endif(LINGUAS STREQUAL "All") + + if(NOT MSVC) + add_pot(SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/src/translations/header + ${CMAKE_CURRENT_SOURCE_DIR}/src/translations/translations.pot + ${SOURCES} + ${MOC} + ${UIC} + ${CMAKE_SOURCE_DIR}/data/html/oauthsuccess.html + ) + endif() + add_po(SOURCES strawberry_ LANGUAGES ${LANGUAGES} DIRECTORY src/translations) + +endif() + +target_sources(strawberry PRIVATE ${SOURCES}) + +if(WIN32) + target_sources(strawberry PRIVATE windres.rc) endif() -# Subdirectories add_subdirectory(src) add_subdirectory(dist) @@ -411,12 +1466,129 @@ if(LINUX AND LSB_RELEASE_EXEC AND DPKG_BUILDPACKAGE) add_subdirectory(debian) endif() -# Uninstall support -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) +target_include_directories(strawberry PRIVATE + ${CMAKE_SOURCE_DIR} + ${CMAKE_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/src + ${CMAKE_BINARY_DIR}/src +) +target_include_directories(strawberry SYSTEM PRIVATE ${SINGLEAPPLICATION_INCLUDE_DIRS}) + +if(HAVE_QPA_QPLATFORMNATIVEINTERFACE_H) + target_include_directories(strawberry SYSTEM PRIVATE ${Qt${QT_VERSION_MAJOR}Gui_PRIVATE_INCLUDE_DIRS}) +endif() + +target_link_libraries(strawberry PRIVATE + ${CMAKE_THREAD_LIBS_INIT} + PkgConfig::GLIB + PkgConfig::GOBJECT + PkgConfig::SQLITE + PkgConfig::GSTREAMER + PkgConfig::GSTREAMER_BASE + PkgConfig::GSTREAMER_AUDIO + PkgConfig::GSTREAMER_APP + PkgConfig::GSTREAMER_TAG + PkgConfig::GSTREAMER_PBUTILS + ${TAGLIB_LIBRARIES} + Qt${QT_VERSION_MAJOR}::Core + Qt${QT_VERSION_MAJOR}::Concurrent + Qt${QT_VERSION_MAJOR}::Gui + Qt${QT_VERSION_MAJOR}::Widgets + Qt${QT_VERSION_MAJOR}::Network + Qt${QT_VERSION_MAJOR}::Sql + ICU::uc + ICU::i18n + ${SINGLEAPPLICATION_LIBRARIES} +) + +if(APPLE) + target_link_libraries(strawberry PRIVATE + "-framework AppKit" + "-framework Carbon" + "-framework CoreAudio" + "-framework DiskArbitration" + "-framework Foundation" + "-framework IOKit" + "-framework ScriptingBridge" + ) + target_link_libraries(strawberry PRIVATE SPMediaKeyTap) +endif() + +if(WIN32) + target_link_libraries(strawberry PRIVATE dsound dwmapi) + if(MSVC) + target_link_libraries(strawberry PRIVATE WindowsApp) + endif() + target_link_libraries(strawberry PRIVATE getopt-win::getopt) +endif() + +if(HAVE_DBUS) + target_link_libraries(strawberry PRIVATE Qt${QT_VERSION_MAJOR}::DBus) +endif() + +if(HAVE_ALSA) + target_link_libraries(strawberry PRIVATE ALSA::ALSA) +endif() + +if(HAVE_PULSE) + target_link_libraries(strawberry PRIVATE PkgConfig::LIBPULSE) +endif() + +if(HAVE_MOODBAR) + target_link_libraries(strawberry PRIVATE PkgConfig::FFTW3) +endif() + +if(HAVE_SONGFINGERPRINTING OR HAVE_MUSICBRAINZ) + target_link_libraries(strawberry PRIVATE PkgConfig::CHROMAPRINT) +endif() + +if(HAVE_EBUR128) + target_link_libraries(strawberry PRIVATE PkgConfig::LIBEBUR128) +endif() + +if(HAVE_X11_GLOBALSHORTCUTS) + target_link_libraries(strawberry PRIVATE X11::X11_xcb) +endif() + +if(HAVE_GIO) + target_link_libraries(strawberry PRIVATE PkgConfig::GIO) + if(HAVE_GIO_UNIX) + target_link_libraries(strawberry PRIVATE PkgConfig::GIO_UNIX) + endif() +endif() + +if(HAVE_AUDIOCD) + target_link_libraries(strawberry PRIVATE PkgConfig::LIBCDIO) +endif() + +if(HAVE_MTP) + target_link_libraries(strawberry PRIVATE PkgConfig::LIBMTP) +endif() + +if(HAVE_GPOD) + target_link_libraries(strawberry PRIVATE PkgConfig::LIBGPOD PkgConfig::GDK_PIXBUF) +endif() + +if(HAVE_QTSPARKLE) + target_link_libraries(strawberry PRIVATE PkgConfig::QTSPARKLE) +endif() + +if(FREEBSD) + target_link_libraries(strawberry PRIVATE execinfo) +endif() + +if(NOT APPLE) + install(TARGETS strawberry RUNTIME DESTINATION bin) +endif() + +if(HAVE_TRANSLATIONS AND INSTALL_TRANSLATIONS AND INSTALL_TRANSLATIONS_FILES) + install(FILES ${INSTALL_TRANSLATIONS_FILES} DESTINATION share/strawberry/translations) +endif() + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") -# Show a summary of what we have enabled summary_show() if(NOT CMAKE_CROSSCOMPILING) diff --git a/README.md b/README.md index 03bc03896..697e00489 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,6 @@ To build Strawberry from source you need the following installed on your system * [Qt 6.4.0 or higher with components Core, Concurrent, Gui, Widgets, Network, Sql and D-Bus](https://www.qt.io/) * [SQLite 3.9 or newer](https://www.sqlite.org) * [ALSA (Required on Linux)](https://www.alsa-project.org/) -* [D-Bus (Required on Linux)](https://www.freedesktop.org/wiki/Software/dbus/) * [GStreamer](https://gstreamer.freedesktop.org/) * [TagLib 1.12 or higher](https://www.taglib.org/) * [ICU](https://unicode-org.github.io/icu/) diff --git a/cmake/FindCppUnit.cmake b/cmake/FindCppUnit.cmake deleted file mode 100644 index 42a92f792..000000000 --- a/cmake/FindCppUnit.cmake +++ /dev/null @@ -1,69 +0,0 @@ -# - Try to find the libcppunit libraries -# Once done this will define -# -# CppUnit_FOUND - system has libcppunit -# CPPUNIT_INCLUDE_DIR - the libcppunit include directory -# CPPUNIT_LIBRARIES - libcppunit library - -#include (MacroEnsureVersion) - -if(NOT CPPUNIT_MIN_VERSION) - SET(CPPUNIT_MIN_VERSION 1.12.0) -endif(NOT CPPUNIT_MIN_VERSION) - -FIND_PROGRAM(CPPUNIT_CONFIG_EXECUTABLE cppunit-config ) - -IF(CPPUNIT_INCLUDE_DIR AND CPPUNIT_LIBRARIES) - - # in cache already - SET(CppUnit_FOUND TRUE) - -ELSE(CPPUNIT_INCLUDE_DIR AND CPPUNIT_LIBRARIES) - - SET(CPPUNIT_INCLUDE_DIR) - SET(CPPUNIT_LIBRARIES) - - IF(CPPUNIT_CONFIG_EXECUTABLE) - EXEC_PROGRAM(${CPPUNIT_CONFIG_EXECUTABLE} ARGS --cflags RETURN_VALUE _return_VALUE OUTPUT_VARIABLE CPPUNIT_CFLAGS) - EXEC_PROGRAM(${CPPUNIT_CONFIG_EXECUTABLE} ARGS --libs RETURN_VALUE _return_VALUE OUTPUT_VARIABLE CPPUNIT_LIBRARIES) - EXEC_PROGRAM(${CPPUNIT_CONFIG_EXECUTABLE} ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE CPPUNIT_INSTALLED_VERSION) - STRING(REGEX REPLACE "-I(.+)" "\\1" CPPUNIT_CFLAGS "${CPPUNIT_CFLAGS}") - ELSE(CPPUNIT_CONFIG_EXECUTABLE) - # in case win32 needs to find it the old way? - FIND_PATH(CPPUNIT_CFLAGS cppunit/TestRunner.h PATHS /usr/include /usr/local/include ) - FIND_LIBRARY(CPPUNIT_LIBRARIES NAMES cppunit PATHS /usr/lib /usr/local/lib ) - # how can we find cppunit version? - MESSAGE (STATUS "Ensure you cppunit installed version is at least ${CPPUNIT_MIN_VERSION}") - SET (CPPUNIT_INSTALLED_VERSION ${CPPUNIT_MIN_VERSION}) - ENDIF(CPPUNIT_CONFIG_EXECUTABLE) - - SET(CPPUNIT_INCLUDE_DIR ${CPPUNIT_CFLAGS} "${CPPUNIT_CFLAGS}/cppunit") - -ENDIF(CPPUNIT_INCLUDE_DIR AND CPPUNIT_LIBRARIES) - -IF(CPPUNIT_INCLUDE_DIR AND CPPUNIT_LIBRARIES) - - SET(CppUnit_FOUND TRUE) - - if(NOT CppUnit_FIND_QUIETLY) - MESSAGE (STATUS "Found cppunit: ${CPPUNIT_LIBRARIES}") - endif(NOT CppUnit_FIND_QUIETLY) - - IF(CPPUNIT_CONFIG_EXECUTABLE) - EXEC_PROGRAM(${CPPUNIT_CONFIG_EXECUTABLE} ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE CPPUNIT_INSTALLED_VERSION) - ENDIF(CPPUNIT_CONFIG_EXECUTABLE) - - #macro_ensure_version( ${CPPUNIT_MIN_VERSION} ${CPPUNIT_INSTALLED_VERSION} CPPUNIT_INSTALLED_VERSION_OK ) - - #IF(NOT CPPUNIT_INSTALLED_VERSION_OK) - # MESSAGE ("** CppUnit version is too old: found ${CPPUNIT_INSTALLED_VERSION} installed, ${CPPUNIT_MIN_VERSION} or major is required") - # SET(CppUnit_FOUND FALSE) - #ENDIF(NOT CPPUNIT_INSTALLED_VERSION_OK) - -ELSE(CPPUNIT_INCLUDE_DIR AND CPPUNIT_LIBRARIES) - - SET(CppUnit_FOUND FALSE CACHE BOOL "Not found cppunit library") - -ENDIF(CPPUNIT_INCLUDE_DIR AND CPPUNIT_LIBRARIES) - -MARK_AS_ADVANCED(CPPUNIT_INCLUDE_DIR CPPUNIT_LIBRARIES) diff --git a/cmake/FindFFTW3.cmake b/cmake/FindFFTW3.cmake deleted file mode 100644 index ec67f2a24..000000000 --- a/cmake/FindFFTW3.cmake +++ /dev/null @@ -1,132 +0,0 @@ -# -# Try to find FFTW3 library -# (see www.fftw.org) -# Once run this will define: -# -# FFTW3_FOUND -# FFTW3_INCLUDE_DIR -# FFTW3_LIBRARIES -# FFTW3_LINK_DIRECTORIES -# -# You may set one of these options before including this file: -# FFTW3_USE_SSE2 -# -# TODO: _F_ versions. -# -# Jan Woetzel 05/2004 -# www.mip.informatik.uni-kiel.de -# -------------------------------- - - FIND_PATH(FFTW3_INCLUDE_DIR fftw3.h - ${FFTW3_DIR}/include - ${FFTW3_HOME}/include - ${FFTW3_DIR} - ${FFTW3_HOME} - $ENV{FFTW3_DIR}/include - $ENV{FFTW3_HOME}/include - $ENV{FFTW3_DIR} - $ENV{FFTW3_HOME} - /usr/include - /usr/local/include - $ENV{SOURCE_DIR}/fftw3 - $ENV{SOURCE_DIR}/fftw3/include - $ENV{SOURCE_DIR}/fftw - $ENV{SOURCE_DIR}/fftw/include - ) -#MESSAGE("DBG FFTW3_INCLUDE_DIR=${FFTW3_INCLUDE_DIR}") - - -SET(FFTW3_POSSIBLE_LIBRARY_PATH - ${FFTW3_DIR}/lib - ${FFTW3_HOME}/lib - ${FFTW3_DIR} - ${FFTW3_HOME} - $ENV{FFTW3_DIR}/lib - $ENV{FFTW3_HOME}/lib - $ENV{FFTW3_DIR} - $ENV{FFTW3_HOME} - /usr/lib - /usr/local/lib - $ENV{SOURCE_DIR}/fftw3 - $ENV{SOURCE_DIR}/fftw3/lib - $ENV{SOURCE_DIR}/fftw - $ENV{SOURCE_DIR}/fftw/lib -) - - -# The lib prefix is contained in filename of W32, unfortunately. In the "general" lib: -FIND_LIBRARY(FFTW3_FFTW_LIBRARY - NAMES fftw3 libfftw libfftw3 libfftw3-3 - PATHS - ${FFTW3_POSSIBLE_LIBRARY_PATH} - ) -#MESSAGE("DBG FFTW3_FFTW_LIBRARY=${FFTW3_FFTW_LIBRARY}") - -FIND_LIBRARY(FFTW3_FFTWF_LIBRARY - NAMES fftwf3 fftw3f fftwf libfftwf libfftwf3 libfftw3f-3 - PATHS - ${FFTW3_POSSIBLE_LIBRARY_PATH} - ) -#MESSAGE("DBG FFTW3_FFTWF_LIBRARY=${FFTW3_FFTWF_LIBRARY}") - -FIND_LIBRARY(FFTW3_FFTWL_LIBRARY - NAMES fftwl3 fftw3l fftwl libfftwl libfftwl3 libfftw3l-3 - PATHS - ${FFTW3_POSSIBLE_LIBRARY_PATH} - ) -#MESSAGE("DBG FFTW3_FFTWF_LIBRARY=${FFTW3_FFTWL_LIBRARY}") - - -FIND_LIBRARY(FFTW3_FFTW_SSE2_LIBRARY - NAMES fftw_sse2 fftw3_sse2 libfftw_sse2 libfftw3_sse2 - PATHS - ${FFTW3_POSSIBLE_LIBRARY_PATH} - ) -#MESSAGE("DBG FFTW3_FFTW_SSE2_LIBRARY=${FFTW3_FFTW_SSE2_LIBRARY}") - -FIND_LIBRARY(FFTW3_FFTWF_SSE_LIBRARY - NAMES fftwf_sse fftwf3_sse libfftwf_sse libfftwf3_sse - PATHS - ${FFTW3_POSSIBLE_LIBRARY_PATH} - ) -#MESSAGE("DBG FFTW3_FFTWF_SSE_LIBRARY=${FFTW3_FFTWF_SSE_LIBRARY}") - - -# -------------------------------- -# select one of the above -# default: -IF (FFTW3_FFTW_LIBRARY) - SET(FFTW3_LIBRARIES ${FFTW3_FFTW_LIBRARY}) -ENDIF (FFTW3_FFTW_LIBRARY) -# specialized: -IF (FFTW3_USE_SSE2 AND FFTW3_FFTW_SSE2_LIBRARY) - SET(FFTW3_LIBRARIES ${FFTW3_FFTW_SSE2_LIBRARY}) -ENDIF (FFTW3_USE_SSE2 AND FFTW3_FFTW_SSE2_LIBRARY) - -# -------------------------------- - -IF(FFTW3_LIBRARIES) - IF (FFTW3_INCLUDE_DIR) - - # OK, found all we need - SET(FFTW3_FOUND TRUE) - GET_FILENAME_COMPONENT(FFTW3_LINK_DIRECTORIES ${FFTW3_LIBRARIES} PATH) - - ELSE (FFTW3_INCLUDE_DIR) - MESSAGE("FFTW3 include dir not found. Set FFTW3_DIR to find it.") - ENDIF(FFTW3_INCLUDE_DIR) -ELSE(FFTW3_LIBRARIES) - MESSAGE("FFTW3 lib not found. Set FFTW3_DIR to find it.") -ENDIF(FFTW3_LIBRARIES) - - -MARK_AS_ADVANCED( - FFTW3_INCLUDE_DIR - FFTW3_LIBRARIES - FFTW3_FFTW_LIBRARY - FFTW3_FFTW_SSE2_LIBRARY - FFTW3_FFTWF_LIBRARY - FFTW3_FFTWF_SSE_LIBRARY - FFTW3_FFTWL_LIBRARY - FFTW3_LINK_DIRECTORIES -) diff --git a/cmake/Translations.cmake b/cmake/Translations.cmake index 01b95fc2a..15f81d40a 100644 --- a/cmake/Translations.cmake +++ b/cmake/Translations.cmake @@ -1,5 +1,8 @@ find_program(GETTEXT_XGETTEXT_EXECUTABLE xgettext REQUIRED) -find_program(CAT_EXECUTABLE cat REQUIRED) + +if(NOT MSVC) + find_program(CAT_EXECUTABLE cat REQUIRED) +endif() list(APPEND XGETTEXT_OPTIONS --qt @@ -82,11 +85,13 @@ macro(add_po outfiles po_prefix) # Generate a qrc file for the translations if(NOT INSTALL_TRANSLATIONS) set(_qrc ${CMAKE_CURRENT_BINARY_DIR}/${ADD_PO_DIRECTORY}/translations.qrc) - file(WRITE ${_qrc} "") + file(WRITE ${_qrc} "\n") + file(APPEND ${_qrc} "\n") foreach(_lang ${ADD_PO_LANGUAGES}) - file(APPEND ${_qrc} "${po_prefix}${_lang}.qm") + file(APPEND ${_qrc} "${po_prefix}${_lang}.qm\n") endforeach(_lang) - file(APPEND ${_qrc} "") + file(APPEND ${_qrc} "\n") + file(APPEND ${_qrc} "\n") qt_add_resources(${outfiles} ${_qrc}) endif() endmacro(add_po) diff --git a/debian/control b/debian/control index dc1e7c988..ca5757601 100644 --- a/debian/control +++ b/debian/control @@ -9,7 +9,6 @@ Build-Depends: debhelper (>= 11), gcc, g++, libglib2.0-dev, - libdbus-1-dev, libboost-dev, libsqlite3-dev, libasound2-dev, diff --git a/dist/CMakeLists.txt b/dist/CMakeLists.txt index bf52bb4f0..8843e3bbf 100644 --- a/dist/CMakeLists.txt +++ b/dist/CMakeLists.txt @@ -13,6 +13,7 @@ if(APPLE) endif(APPLE) if(WIN32) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/windows/windres.rc.in ${CMAKE_BINARY_DIR}/windres.rc) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/windows/strawberry.nsi.in ${CMAKE_CURRENT_SOURCE_DIR}/windows/strawberry.nsi @ONLY) endif(WIN32) diff --git a/dist/unix/strawberry.spec.in b/dist/unix/strawberry.spec.in index c2ad5315c..3dc211078 100644 --- a/dist/unix/strawberry.spec.in +++ b/dist/unix/strawberry.spec.in @@ -38,7 +38,6 @@ BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(gio-2.0) BuildRequires: pkgconfig(gio-unix-2.0) BuildRequires: pkgconfig(gthread-2.0) -BuildRequires: pkgconfig(dbus-1) BuildRequires: pkgconfig(alsa) BuildRequires: pkgconfig(sqlite3) >= 3.9 BuildRequires: pkgconfig(taglib) diff --git a/dist/windows/windres.rc.in b/dist/windows/windres.rc.in index 42549ddd7..ba35308ac 100644 --- a/dist/windows/windres.rc.in +++ b/dist/windows/windres.rc.in @@ -1,4 +1,4 @@ -strawberry ICON "${CMAKE_CURRENT_SOURCE_DIR}/../dist/windows/strawberry.ico" +strawberry ICON "${CMAKE_SOURCE_DIR}/dist/windows/strawberry.ico" 1 VERSIONINFO FILEVERSION ${STRAWBERRY_VERSION_MAJOR},${STRAWBERRY_VERSION_MINOR},${STRAWBERRY_VERSION_PATCH} PRODUCTVERSION ${STRAWBERRY_VERSION_MAJOR},${STRAWBERRY_VERSION_MINOR},${STRAWBERRY_VERSION_PATCH} diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 63352a7aa..e97086cc3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,1278 +1,2 @@ -cmake_minimum_required(VERSION 3.13) - -if(HAVE_TRANSLATIONS) - include(../cmake/Translations.cmake) -endif() - -set(SOURCES - core/logging.cpp - core/mainwindow.cpp - core/application.cpp - core/player.cpp - core/commandlineoptions.cpp - core/database.cpp - core/sqlquery.cpp - core/sqlrow.cpp - core/metatypes.cpp - core/deletefiles.cpp - core/filesystemmusicstorage.cpp - core/filesystemwatcherinterface.cpp - core/mergedproxymodel.cpp - core/multisortfilterproxy.cpp - core/musicstorage.cpp - core/networkaccessmanager.cpp - core/threadsafenetworkdiskcache.cpp - core/networktimeouts.cpp - core/networkproxyfactory.cpp - core/qtfslistener.cpp - core/settings.cpp - core/settingsprovider.cpp - core/signalchecker.cpp - core/song.cpp - core/songloader.cpp - core/stylehelper.cpp - core/stylesheetloader.cpp - core/taskmanager.cpp - core/thread.cpp - core/urlhandler.cpp - core/iconloader.cpp - core/standarditemiconloader.cpp - core/scopedtransaction.cpp - core/translations.cpp - core/systemtrayicon.cpp - core/localredirectserver.cpp - core/mimedata.cpp - core/potranslator.cpp - core/temporaryfile.cpp - utilities/strutils.cpp - utilities/envutils.cpp - utilities/colorutils.cpp - utilities/cryptutils.cpp - utilities/fileutils.cpp - utilities/diskutils.cpp - utilities/imageutils.cpp - utilities/macaddrutils.cpp - utilities/mimeutils.cpp - utilities/randutils.cpp - utilities/threadutils.cpp - utilities/timeutils.cpp - utilities/transliterate.cpp - utilities/xmlutils.cpp - utilities/filemanagerutils.cpp - utilities/coverutils.cpp - utilities/screenutils.cpp - utilities/textencodingutils.cpp - - tagreader/tagreaderclient.cpp - tagreader/tagreaderresult.cpp - tagreader/tagreaderbase.cpp - tagreader/tagreadertaglib.cpp - tagreader/tagreadergme.cpp - tagreader/tagreaderrequest.cpp - tagreader/tagreaderismediafilerequest.cpp - tagreader/tagreaderreadfilerequest.cpp - tagreader/tagreaderwritefilerequest.cpp - tagreader/tagreaderloadcoverdatarequest.cpp - tagreader/tagreaderloadcoverimagerequest.cpp - tagreader/tagreadersavecoverrequest.cpp - tagreader/tagreadersaveplaycountrequest.cpp - tagreader/tagreadersaveratingrequest.cpp - tagreader/albumcovertagdata.cpp - tagreader/savetagcoverdata.cpp - tagreader/tagreaderreply.cpp - tagreader/tagreaderreadfilereply.cpp - tagreader/tagreaderloadcoverdatareply.cpp - tagreader/tagreaderloadcoverimagereply.cpp - - filterparser/filterparser.cpp - filterparser/filtertree.cpp - - engine/enginebase.cpp - engine/enginedevice.cpp - engine/devicefinders.cpp - engine/devicefinder.cpp - engine/enginemetadata.cpp - engine/gststartup.cpp - engine/gstengine.cpp - engine/gstenginepipeline.cpp - - analyzer/fht.cpp - analyzer/analyzerbase.cpp - analyzer/analyzercontainer.cpp - analyzer/blockanalyzer.cpp - analyzer/boomanalyzer.cpp - analyzer/turbineanalyzer.cpp - analyzer/sonogramanalyzer.cpp - analyzer/waverubberanalyzer.cpp - analyzer/rainbowanalyzer.cpp - - equalizer/equalizer.cpp - equalizer/equalizerslider.cpp - - context/contextview.cpp - context/contextalbum.cpp - - collection/collection.cpp - collection/collectionmodel.cpp - collection/collectionbackend.cpp - collection/collectionwatcher.cpp - collection/collectionview.cpp - collection/collectionitemdelegate.cpp - collection/collectionviewcontainer.cpp - collection/collectiondirectorymodel.cpp - collection/collectionfilteroptions.cpp - collection/collectionfilterwidget.cpp - collection/collectionfilter.cpp - collection/collectionplaylistitem.cpp - collection/collectionquery.cpp - collection/savedgroupingmanager.cpp - collection/groupbydialog.cpp - collection/collectiontask.cpp - collection/collectionmodelupdate.cpp - - playlist/playlist.cpp - playlist/playlistbackend.cpp - playlist/playlistcontainer.cpp - playlist/playlistdelegates.cpp - playlist/playlistfilter.cpp - playlist/playlistheader.cpp - playlist/playlistitem.cpp - playlist/playlistitemmimedata.cpp - playlist/playlistlistcontainer.cpp - playlist/playlistlistmodel.cpp - playlist/playlistlistsortfiltermodel.cpp - playlist/playlistlistview.cpp - playlist/playlistmanager.cpp - playlist/playlistsaveoptionsdialog.cpp - playlist/playlistsequence.cpp - playlist/playlisttabbar.cpp - playlist/playlistundocommands.cpp - playlist/playlistview.cpp - playlist/playlistproxystyle.cpp - playlist/songmimedata.cpp - playlist/songloaderinserter.cpp - playlist/songplaylistitem.cpp - playlist/dynamicplaylistcontrols.cpp - - queue/queue.cpp - queue/queueview.cpp - - playlistparsers/asxiniparser.cpp - playlistparsers/asxparser.cpp - playlistparsers/cueparser.cpp - playlistparsers/m3uparser.cpp - playlistparsers/parserbase.cpp - playlistparsers/playlistparser.cpp - playlistparsers/plsparser.cpp - playlistparsers/wplparser.cpp - playlistparsers/xmlparser.cpp - playlistparsers/xspfparser.cpp - - smartplaylists/playlistgenerator.cpp - smartplaylists/playlistgeneratorinserter.cpp - smartplaylists/playlistgeneratormimedata.cpp - smartplaylists/playlistquerygenerator.cpp - smartplaylists/smartplaylistquerywizardplugin.cpp - smartplaylists/smartplaylistquerywizardpluginsortpage.cpp - smartplaylists/smartplaylistquerywizardpluginsearchpage.cpp - smartplaylists/smartplaylistsearch.cpp - smartplaylists/smartplaylistsearchpreview.cpp - smartplaylists/smartplaylistsearchterm.cpp - smartplaylists/smartplaylistsearchtermwidget.cpp - smartplaylists/smartplaylistsearchtermwidgetoverlay.cpp - smartplaylists/smartplaylistsmodel.cpp - smartplaylists/smartplaylistsviewcontainer.cpp - smartplaylists/smartplaylistsview.cpp - smartplaylists/smartplaylistwizard.cpp - smartplaylists/smartplaylistwizardplugin.cpp - smartplaylists/smartplaylistwizardtypepage.cpp - smartplaylists/smartplaylistwizardfinishpage.cpp - - covermanager/albumcovermanager.cpp - covermanager/albumcovermanagerlist.cpp - covermanager/albumcoverloader.cpp - covermanager/albumcoverloaderoptions.cpp - covermanager/albumcoverfetcher.cpp - covermanager/albumcoverfetchersearch.cpp - covermanager/albumcoversearcher.cpp - covermanager/albumcoverexport.cpp - covermanager/albumcoverexporter.cpp - covermanager/albumcoverchoicecontroller.cpp - covermanager/coverprovider.cpp - covermanager/coverproviders.cpp - covermanager/coversearchstatistics.cpp - covermanager/coversearchstatisticsdialog.cpp - covermanager/coverexportrunnable.cpp - covermanager/currentalbumcoverloader.cpp - covermanager/coverfromurldialog.cpp - covermanager/jsoncoverprovider.cpp - covermanager/lastfmcoverprovider.cpp - covermanager/musicbrainzcoverprovider.cpp - covermanager/discogscoverprovider.cpp - covermanager/deezercoverprovider.cpp - covermanager/qobuzcoverprovider.cpp - covermanager/musixmatchcoverprovider.cpp - covermanager/opentidalcoverprovider.cpp - - lyrics/lyricsproviders.cpp - lyrics/lyricsprovider.cpp - lyrics/lyricssearchrequest.h - lyrics/lyricssearchresult.h - lyrics/lyricsfetcher.cpp - lyrics/lyricsfetchersearch.cpp - lyrics/jsonlyricsprovider.cpp - lyrics/htmllyricsprovider.cpp - lyrics/ovhlyricsprovider.cpp - lyrics/lololyricsprovider.cpp - lyrics/geniuslyricsprovider.cpp - lyrics/musixmatchlyricsprovider.cpp - lyrics/chartlyricsprovider.cpp - lyrics/songlyricscomlyricsprovider.cpp - lyrics/azlyricscomlyricsprovider.cpp - lyrics/elyricsnetlyricsprovider.cpp - lyrics/letraslyricsprovider.cpp - lyrics/lyricfindlyricsprovider.cpp - - providers/musixmatchprovider.cpp - - settings/settingsdialog.cpp - settings/settingspage.cpp - settings/behavioursettingspage.cpp - settings/collectionsettingspage.cpp - settings/collectionsettingsdirectorymodel.cpp - settings/backendsettingspage.cpp - settings/playlistsettingspage.cpp - settings/scrobblersettingspage.cpp - settings/coverssettingspage.cpp - settings/lyricssettingspage.cpp - settings/networkproxysettingspage.cpp - settings/appearancesettingspage.cpp - settings/contextsettingspage.cpp - settings/notificationssettingspage.cpp - settings/transcodersettingspage.cpp - - dialogs/about.cpp - dialogs/console.cpp - dialogs/errordialog.cpp - dialogs/edittagdialog.cpp - dialogs/trackselectiondialog.cpp - dialogs/addstreamdialog.cpp - dialogs/userpassdialog.cpp - dialogs/deleteconfirmationdialog.cpp - dialogs/lastfmimportdialog.cpp - dialogs/messagedialog.cpp - dialogs/snapdialog.cpp - dialogs/saveplaylistsdialog.cpp - - widgets/autoexpandingtreeview.cpp - widgets/busyindicator.cpp - widgets/clickablelabel.cpp - widgets/fancytabwidget.cpp - widgets/fancytabbar.cpp - widgets/fancytabdata.cpp - widgets/favoritewidget.cpp - widgets/fileview.cpp - widgets/fileviewlist.cpp - widgets/forcescrollperpixel.cpp - widgets/freespacebar.cpp - widgets/groupediconview.cpp - widgets/lineedit.cpp - widgets/linetextedit.cpp - widgets/multiloadingindicator.cpp - widgets/playingwidget.cpp - widgets/renametablineedit.cpp - widgets/sliderslider.cpp - widgets/prettyslider.cpp - widgets/volumeslider.cpp - widgets/stickyslider.cpp - widgets/stretchheaderview.cpp - widgets/trackslider.cpp - widgets/tracksliderpopup.cpp - widgets/tracksliderslider.cpp - widgets/loginstatewidget.cpp - widgets/ratingwidget.cpp - widgets/resizabletextedit.cpp - - osd/osdbase.cpp - osd/osdpretty.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 - streaming/streamsongmimedata.cpp - - radios/radioservices.cpp - radios/radiobackend.cpp - radios/radiomodel.cpp - radios/radioview.cpp - radios/radioviewcontainer.cpp - radios/radioservice.cpp - radios/radioplaylistitem.cpp - radios/radiochannel.cpp - radios/somafmservice.cpp - radios/radioparadiseservice.cpp - radios/radiomimedata.cpp - - scrobbler/audioscrobbler.cpp - scrobbler/scrobblersettings.cpp - scrobbler/scrobblerservice.cpp - scrobbler/scrobblercache.cpp - scrobbler/scrobblercacheitem.cpp - scrobbler/scrobblemetadata.cpp - scrobbler/scrobblingapi20.cpp - scrobbler/lastfmscrobbler.cpp - scrobbler/librefmscrobbler.cpp - scrobbler/listenbrainzscrobbler.cpp - scrobbler/lastfmimport.cpp - - organize/organize.cpp - organize/organizeformat.cpp - organize/organizeformatvalidator.cpp - organize/organizesyntaxhighlighter.cpp - organize/organizedialog.cpp - organize/organizeerrordialog.cpp - - transcoder/transcoder.cpp - transcoder/transcoderoptionsinterface.cpp - transcoder/transcodedialog.cpp - transcoder/transcoderoptionsdialog.cpp - transcoder/transcoderoptionsflac.cpp - transcoder/transcoderoptionswavpack.cpp - transcoder/transcoderoptionsvorbis.cpp - transcoder/transcoderoptionsopus.cpp - transcoder/transcoderoptionsspeex.cpp - transcoder/transcoderoptionsaac.cpp - transcoder/transcoderoptionsasf.cpp - transcoder/transcoderoptionsmp3.cpp -) - -set(HEADERS - core/logging.h - core/mainwindow.h - core/application.h - core/player.h - core/database.h - core/deletefiles.h - core/filesystemwatcherinterface.h - core/mergedproxymodel.h - core/multisortfilterproxy.h - core/networkaccessmanager.h - core/threadsafenetworkdiskcache.h - core/networktimeouts.h - core/qtfslistener.h - core/settings.h - core/songloader.h - core/taskmanager.h - core/thread.h - core/urlhandler.h - core/standarditemiconloader.h - core/translations.h - core/potranslator.h - core/mimedata.h - core/stylesheetloader.h - core/localredirectserver.h - - tagreader/tagreaderclient.h - tagreader/tagreaderreply.h - tagreader/tagreaderreadfilereply.h - tagreader/tagreaderloadcoverdatareply.h - tagreader/tagreaderloadcoverimagereply.h - - engine/enginebase.h - engine/devicefinders.h - engine/gststartup.h - engine/gstengine.h - engine/gstenginepipeline.h - - analyzer/analyzerbase.h - analyzer/analyzercontainer.h - analyzer/blockanalyzer.h - analyzer/boomanalyzer.h - analyzer/turbineanalyzer.h - analyzer/sonogramanalyzer.h - analyzer/waverubberanalyzer.h - analyzer/rainbowanalyzer.h - - equalizer/equalizer.h - equalizer/equalizerslider.h - - context/contextview.h - context/contextalbum.h - - collection/collection.h - collection/collectionmodel.h - collection/collectionbackend.h - collection/collectionwatcher.h - collection/collectionview.h - collection/collectionitemdelegate.h - collection/collectionviewcontainer.h - collection/collectiondirectorymodel.h - collection/collectionfilterwidget.h - collection/collectionfilter.h - collection/savedgroupingmanager.h - collection/groupbydialog.h - - playlist/playlist.h - playlist/playlistbackend.h - playlist/playlistcontainer.h - playlist/playlistdelegates.h - playlist/playlistfilter.h - playlist/playlistheader.h - playlist/playlistlistcontainer.h - playlist/playlistlistmodel.h - playlist/playlistlistview.h - playlist/playlistlistsortfiltermodel.h - playlist/playlistmanager.h - playlist/playlistsaveoptionsdialog.h - playlist/playlistsequence.h - playlist/playlisttabbar.h - playlist/playlistview.h - playlist/playlistproxystyle.h - playlist/playlistitemmimedata.h - playlist/songloaderinserter.h - playlist/songmimedata.h - playlist/dynamicplaylistcontrols.h - - queue/queue.h - queue/queueview.h - - playlistparsers/asxiniparser.h - playlistparsers/asxparser.h - playlistparsers/cueparser.h - playlistparsers/m3uparser.h - playlistparsers/parserbase.h - playlistparsers/playlistparser.h - playlistparsers/plsparser.h - playlistparsers/wplparser.h - playlistparsers/xmlparser.h - playlistparsers/xspfparser.h - - smartplaylists/playlistgenerator.h - smartplaylists/playlistgeneratorinserter.h - smartplaylists/playlistquerygenerator.h - smartplaylists/playlistgeneratormimedata.h - smartplaylists/smartplaylistquerywizardplugin.h - smartplaylists/smartplaylistquerywizardpluginsortpage.h - smartplaylists/smartplaylistquerywizardpluginsearchpage.h - smartplaylists/smartplaylistsearchpreview.h - smartplaylists/smartplaylistsearchtermwidget.h - smartplaylists/smartplaylistsearchtermwidgetoverlay.h - smartplaylists/smartplaylistsmodel.h - smartplaylists/smartplaylistsviewcontainer.h - smartplaylists/smartplaylistsview.h - smartplaylists/smartplaylistwizard.h - smartplaylists/smartplaylistwizardplugin.h - smartplaylists/smartplaylistwizardtypepage.h - smartplaylists/smartplaylistwizardfinishpage.h - - covermanager/albumcovermanager.h - covermanager/albumcovermanagerlist.h - covermanager/albumcoverloader.h - covermanager/albumcoverfetcher.h - covermanager/albumcoverfetchersearch.h - covermanager/albumcoversearcher.h - covermanager/albumcoverexport.h - covermanager/albumcoverexporter.h - covermanager/albumcoverchoicecontroller.h - covermanager/coverprovider.h - covermanager/coverproviders.h - covermanager/coversearchstatisticsdialog.h - covermanager/coverexportrunnable.h - covermanager/currentalbumcoverloader.h - covermanager/coverfromurldialog.h - covermanager/jsoncoverprovider.h - covermanager/lastfmcoverprovider.h - covermanager/musicbrainzcoverprovider.h - covermanager/discogscoverprovider.h - covermanager/deezercoverprovider.h - covermanager/qobuzcoverprovider.h - covermanager/musixmatchcoverprovider.h - covermanager/opentidalcoverprovider.h - - lyrics/lyricsproviders.h - lyrics/lyricsprovider.h - lyrics/lyricsfetcher.h - lyrics/lyricsfetchersearch.h - lyrics/jsonlyricsprovider.h - lyrics/htmllyricsprovider.h - lyrics/ovhlyricsprovider.h - lyrics/lololyricsprovider.h - lyrics/geniuslyricsprovider.h - lyrics/musixmatchlyricsprovider.h - lyrics/chartlyricsprovider.h - lyrics/songlyricscomlyricsprovider.h - lyrics/azlyricscomlyricsprovider.h - lyrics/elyricsnetlyricsprovider.h - lyrics/letraslyricsprovider.h - lyrics/lyricfindlyricsprovider.h - - settings/settingsdialog.h - settings/settingspage.h - settings/behavioursettingspage.h - settings/collectionsettingspage.h - settings/collectionsettingsdirectorymodel.h - settings/backendsettingspage.h - settings/playlistsettingspage.h - settings/scrobblersettingspage.h - settings/coverssettingspage.h - settings/lyricssettingspage.h - settings/networkproxysettingspage.h - settings/appearancesettingspage.h - settings/contextsettingspage.h - settings/notificationssettingspage.h - settings/transcodersettingspage.h - - dialogs/about.h - dialogs/errordialog.h - dialogs/console.h - dialogs/edittagdialog.h - dialogs/trackselectiondialog.h - dialogs/addstreamdialog.h - dialogs/userpassdialog.h - dialogs/deleteconfirmationdialog.h - dialogs/lastfmimportdialog.h - dialogs/messagedialog.h - dialogs/snapdialog.h - dialogs/saveplaylistsdialog.h - - widgets/autoexpandingtreeview.h - widgets/busyindicator.h - widgets/clickablelabel.h - widgets/fancytabwidget.h - widgets/fancytabbar.h - widgets/fancytabdata.h - widgets/favoritewidget.h - widgets/fileview.h - widgets/fileviewlist.h - widgets/freespacebar.h - widgets/groupediconview.h - widgets/lineedit.h - widgets/linetextedit.h - widgets/multiloadingindicator.h - widgets/playingwidget.h - widgets/renametablineedit.h - widgets/sliderslider.h - widgets/prettyslider.h - widgets/volumeslider.h - widgets/stickyslider.h - widgets/stretchheaderview.h - widgets/trackslider.h - widgets/tracksliderpopup.h - widgets/tracksliderslider.h - widgets/loginstatewidget.h - widgets/searchfield.h - widgets/ratingwidget.h - widgets/forcescrollperpixel.h - widgets/resizabletextedit.h - - osd/osdbase.h - osd/osdpretty.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 - radios/radiomodel.h - radios/radioview.h - radios/radioviewcontainer.h - radios/radioservice.h - radios/radiomimedata.h - radios/somafmservice.h - radios/radioparadiseservice.h - - scrobbler/audioscrobbler.h - scrobbler/scrobblersettings.h - scrobbler/scrobblerservice.h - scrobbler/scrobblercache.h - scrobbler/scrobblingapi20.h - scrobbler/lastfmscrobbler.h - scrobbler/librefmscrobbler.h - scrobbler/listenbrainzscrobbler.h - scrobbler/lastfmimport.h - - organize/organize.h - organize/organizeformatvalidator.h - organize/organizesyntaxhighlighter.h - organize/organizedialog.h - organize/organizeerrordialog.h - - transcoder/transcoder.h - transcoder/transcodedialog.h - transcoder/transcoderoptionsdialog.h - transcoder/transcoderoptionsinterface.h - transcoder/transcoderoptionsflac.h - transcoder/transcoderoptionswavpack.h - transcoder/transcoderoptionsvorbis.h - transcoder/transcoderoptionsopus.h - transcoder/transcoderoptionsspeex.h - transcoder/transcoderoptionsaac.h - transcoder/transcoderoptionsasf.h - transcoder/transcoderoptionsmp3.h -) - -set(UI - - core/mainwindow.ui - - collection/groupbydialog.ui - collection/collectionfilterwidget.ui - collection/collectionviewcontainer.ui - collection/savedgroupingmanager.ui - - playlist/playlistcontainer.ui - playlist/playlistlistcontainer.ui - playlist/playlistsaveoptionsdialog.ui - playlist/playlistsequence.ui - playlist/dynamicplaylistcontrols.ui - - queue/queueview.ui - - smartplaylists/smartplaylistquerysearchpage.ui - smartplaylists/smartplaylistquerysortpage.ui - smartplaylists/smartplaylistsearchpreview.ui - smartplaylists/smartplaylistsearchtermwidget.ui - smartplaylists/smartplaylistsviewcontainer.ui - smartplaylists/smartplaylistwizardfinishpage.ui - - covermanager/albumcoverexport.ui - covermanager/albumcovermanager.ui - covermanager/albumcoversearcher.ui - covermanager/coversearchstatisticsdialog.ui - covermanager/coverfromurldialog.ui - - settings/settingsdialog.ui - settings/behavioursettingspage.ui - settings/collectionsettingspage.ui - settings/backendsettingspage.ui - settings/contextsettingspage.ui - settings/playlistsettingspage.ui - settings/scrobblersettingspage.ui - settings/coverssettingspage.ui - settings/lyricssettingspage.ui - settings/networkproxysettingspage.ui - settings/appearancesettingspage.ui - settings/notificationssettingspage.ui - settings/transcodersettingspage.ui - - equalizer/equalizer.ui - equalizer/equalizerslider.ui - - dialogs/about.ui - dialogs/errordialog.ui - dialogs/console.ui - dialogs/edittagdialog.ui - dialogs/trackselectiondialog.ui - dialogs/addstreamdialog.ui - dialogs/userpassdialog.ui - dialogs/lastfmimportdialog.ui - dialogs/messagedialog.ui - dialogs/saveplaylistsdialog.ui - - widgets/trackslider.ui - widgets/fileview.ui - widgets/loginstatewidget.ui - - osd/osdpretty.ui - - streaming/streamingtabsview.ui - streaming/streamingcollectionviewcontainer.ui - streaming/streamingsearchview.ui - - radios/radioviewcontainer.ui - - organize/organizedialog.ui - organize/organizeerrordialog.ui - - transcoder/transcodedialog.ui - transcoder/transcodelogdialog.ui - transcoder/transcoderoptionsaac.ui - transcoder/transcoderoptionsdialog.ui - transcoder/transcoderoptionsflac.ui - transcoder/transcoderoptionswavpack.ui - transcoder/transcoderoptionsvorbis.ui - transcoder/transcoderoptionsopus.ui - transcoder/transcoderoptionsspeex.ui - transcoder/transcoderoptionsasf.ui - transcoder/transcoderoptionsmp3.ui -) - -set(RESOURCES ../data/data.qrc ../data/icons.qrc) - -option(USE_INSTALL_PREFIX "Look for data in CMAKE_INSTALL_PREFIX" ON) - -if(NOT APPLE) - set(NOT_APPLE ON) - optional_source(NOT_APPLE SOURCES widgets/searchfield_qt.cpp widgets/searchfield_qt_private.cpp core/qtsystemtrayicon.cpp HEADERS core/qtsystemtrayicon.h widgets/searchfield_qt_private.h) -endif() - -if(HAVE_GLOBALSHORTCUTS) - optional_source(HAVE_GLOBALSHORTCUTS - SOURCES globalshortcuts/globalshortcutsmanager.cpp globalshortcuts/globalshortcutsbackend.cpp globalshortcuts/globalshortcutgrabber.cpp settings/globalshortcutssettingspage.cpp - HEADERS globalshortcuts/globalshortcutsmanager.h globalshortcuts/globalshortcutsbackend.h globalshortcuts/globalshortcutgrabber.h settings/globalshortcutssettingspage.h - UI globalshortcuts/globalshortcutgrabber.ui settings/globalshortcutssettingspage.ui - ) - optional_source(HAVE_DBUS - SOURCES globalshortcuts/globalshortcutsbackend-kde.cpp globalshortcuts/globalshortcutsbackend-gnome.cpp globalshortcuts/globalshortcutsbackend-mate.cpp - HEADERS globalshortcuts/globalshortcutsbackend-kde.h globalshortcuts/globalshortcutsbackend-gnome.h globalshortcuts/globalshortcutsbackend-mate.h - ) - optional_source(HAVE_X11_GLOBALSHORTCUTS - SOURCES globalshortcuts/globalshortcutsbackend-x11.cpp globalshortcuts/globalshortcut.cpp globalshortcuts/globalshortcut-x11.cpp - HEADERS globalshortcuts/globalshortcutsbackend-x11.h globalshortcuts/globalshortcut.h - ) - optional_source(WIN32 - SOURCES globalshortcuts/globalshortcutsbackend-win.cpp globalshortcuts/globalshortcut.cpp globalshortcuts/globalshortcut-win.cpp - HEADERS globalshortcuts/globalshortcutsbackend-win.h globalshortcuts/globalshortcut.h - ) -endif(HAVE_GLOBALSHORTCUTS) - -# ALSA -optional_source(HAVE_ALSA SOURCES engine/alsadevicefinder.cpp engine/alsapcmdevicefinder.cpp) - -# DBUS -optional_source(HAVE_DBUS SOURCES osd/osddbus.cpp HEADERS osd/osddbus.h) - -# DBUS and MPRIS - Unix specific -if(UNIX AND HAVE_DBUS) - - optional_source(HAVE_DBUS SOURCES core/mpris2.cpp HEADERS core/mpris2.h) - optional_source(HAVE_UDISKS2 SOURCES device/udisks2lister.cpp HEADERS device/udisks2lister.h) - - # MPRIS 2.0 DBUS interfaces - qt_add_dbus_adaptor(SOURCES dbus/org.mpris.MediaPlayer2.Player.xml core/mpris2.h mpris::Mpris2 mpris2_player Mpris2Player) - qt_add_dbus_adaptor(SOURCES dbus/org.mpris.MediaPlayer2.xml core/mpris2.h mpris::Mpris2 mpris2_root Mpris2Root) - qt_add_dbus_adaptor(SOURCES dbus/org.mpris.MediaPlayer2.TrackList.xml core/mpris2.h mpris::Mpris2 mpris2_tracklist Mpris2TrackList) - - # MPRIS 2.1 DBUS interfaces - qt_add_dbus_adaptor(SOURCES dbus/org.mpris.MediaPlayer2.Playlists.xml core/mpris2.h mpris::Mpris2 mpris2_playlists Mpris2Playlists) - - # org.freedesktop.Notifications DBUS interface - qt_add_dbus_interface(SOURCES dbus/org.freedesktop.Notifications.xml notification) - - # org.gnome.SettingsDaemon interface - qt_add_dbus_interface(SOURCES dbus/org.gnome.SettingsDaemon.MediaKeys.xml gnomesettingsdaemon) - - # org.mate.SettingsDaemon interface - qt_add_dbus_interface(SOURCES dbus/org.mate.SettingsDaemon.MediaKeys.xml matesettingsdaemon) - - # org.kde.KGlobalAccel interface - qt_add_dbus_interface(SOURCES dbus/org.kde.KGlobalAccel.xml kglobalaccel) - qt_add_dbus_interface(SOURCES dbus/org.kde.KGlobalAccel.Component.xml kglobalaccelcomponent) - - if(HAVE_UDISKS2) - set_source_files_properties(dbus/org.freedesktop.DBus.ObjectManager.xml PROPERTIES NO_NAMESPACE objectmanager INCLUDE dbus/metatypes.h) - set_source_files_properties(dbus/org.freedesktop.UDisks2.Filesystem.xml PROPERTIES NO_NAMESPACE udisks2filesystem INCLUDE dbus/metatypes.h) - set_source_files_properties(dbus/org.freedesktop.UDisks2.Block.xml PROPERTIES NO_NAMESPACE udisks2block INCLUDE dbus/metatypes.h) - set_source_files_properties(dbus/org.freedesktop.UDisks2.Drive.xml PROPERTIES NO_NAMESPACE udisks2drive INCLUDE dbus/metatypes.h) - set_source_files_properties(dbus/org.freedesktop.UDisks2.Job.xml PROPERTIES NO_NAMESPACE udisks2job INCLUDE dbus/metatypes.h) - qt_add_dbus_interface(SOURCES dbus/org.freedesktop.DBus.ObjectManager.xml objectmanager) - qt_add_dbus_interface(SOURCES dbus/org.freedesktop.UDisks2.Filesystem.xml udisks2filesystem) - qt_add_dbus_interface(SOURCES dbus/org.freedesktop.UDisks2.Block.xml udisks2block) - qt_add_dbus_interface(SOURCES dbus/org.freedesktop.UDisks2.Drive.xml udisks2drive) - qt_add_dbus_interface(SOURCES dbus/org.freedesktop.UDisks2.Job.xml udisks2job) - endif(HAVE_UDISKS2) - -endif(UNIX AND HAVE_DBUS) - -optional_source(UNIX - SOURCES - device/connecteddevice.cpp - device/devicedatabasebackend.cpp - device/devicelister.cpp - device/devicemanager.cpp - device/devicestatefiltermodel.cpp - device/filesystemdevice.cpp - device/deviceviewcontainer.cpp - device/deviceview.cpp - device/deviceproperties.cpp - device/deviceinfo.cpp - HEADERS - device/connecteddevice.h - device/devicedatabasebackend.h - device/devicelister.h - device/devicemanager.h - device/devicestatefiltermodel.h - device/filesystemdevice.h - device/deviceviewcontainer.h - device/deviceview.h - device/deviceproperties.h - UI - device/deviceproperties.ui - device/deviceviewcontainer.ui -) - -# Libgpod device backend -optional_source(HAVE_LIBGPOD - SOURCES - device/gpoddevice.cpp - device/gpodloader.cpp - HEADERS - device/gpoddevice.h - device/gpodloader.h -) - -# GIO device backend -optional_source(HAVE_GIO SOURCES device/giolister.cpp HEADERS device/giolister.h) - -# MTP device -optional_source(HAVE_LIBMTP - SOURCES - device/mtpconnection.cpp - device/mtpdevice.cpp - device/mtploader.cpp - HEADERS - device/mtpconnection.h - device/mtpdevice.h - device/mtploader.h -) - -# Pulse audio integration -optional_source(HAVE_LIBPULSE SOURCES engine/pulsedevicefinder.cpp) - -# CHROMAPRINT -if(HAVE_SONGFINGERPRINTING OR HAVE_MUSICBRAINZ) - optional_source(CHROMAPRINT_FOUND SOURCES engine/chromaprinter.cpp) -endif() - -# MusicBrainz -optional_source(HAVE_MUSICBRAINZ - SOURCES - musicbrainz/acoustidclient.cpp - musicbrainz/musicbrainzclient.cpp - musicbrainz/tagfetcher.cpp - HEADERS - musicbrainz/acoustidclient.h - musicbrainz/musicbrainzclient.h - musicbrainz/tagfetcher.h -) - -# CDIO backend and device -optional_source(HAVE_AUDIOCD - SOURCES - device/cddadevice.cpp - device/cddalister.cpp - device/cddasongloader.cpp - HEADERS - device/cddadevice.h - device/cddalister.h - device/cddasongloader.h -) - -# Platform specific - macOS -optional_source(APPLE - SOURCES - utilities/macosutils.mm - core/scoped_nsautorelease_pool.mm - core/mac_startup.mm - core/macsystemtrayicon.mm - osd/osdmac.mm - widgets/searchfield_mac.mm - engine/macosdevicefinder.cpp - globalshortcuts/globalshortcutsbackend-macos.mm - globalshortcuts/globalshortcutgrabber.mm - device/macosdevicelister.mm - HEADERS - core/macsystemtrayicon.h - osd/osdmac.h - globalshortcuts/globalshortcutsbackend-macos.h - device/macosdevicelister.h -) - -# Platform specific - Windows -optional_source(WIN32 - SOURCES - utilities/winutils.cpp - engine/directsounddevicefinder.cpp - engine/mmdevicefinder.cpp - core/scopedwchararray.cpp - core/windows7thumbbar.cpp - HEADERS - core/windows7thumbbar.h -) -optional_source(MSVC SOURCES engine/uwpdevicefinder.cpp engine/asiodevicefinder.cpp) - -optional_source(HAVE_SUBSONIC - SOURCES - subsonic/subsonicservice.cpp - subsonic/subsonicurlhandler.cpp - subsonic/subsonicbaserequest.cpp - subsonic/subsonicrequest.cpp - subsonic/subsonicscrobblerequest.cpp - settings/subsonicsettingspage.cpp - scrobbler/subsonicscrobbler.cpp - HEADERS - subsonic/subsonicservice.h - subsonic/subsonicurlhandler.h - subsonic/subsonicbaserequest.h - subsonic/subsonicrequest.h - subsonic/subsonicscrobblerequest.h - settings/subsonicsettingspage.h - scrobbler/subsonicscrobbler.h - UI - settings/subsonicsettingspage.ui -) - -optional_source(HAVE_TIDAL - SOURCES - tidal/tidalservice.cpp - tidal/tidalurlhandler.cpp - tidal/tidalbaserequest.cpp - tidal/tidalrequest.cpp - tidal/tidalstreamurlrequest.cpp - tidal/tidalfavoriterequest.cpp - settings/tidalsettingspage.cpp - covermanager/tidalcoverprovider.cpp - HEADERS - tidal/tidalservice.h - tidal/tidalurlhandler.h - tidal/tidalbaserequest.h - tidal/tidalrequest.h - tidal/tidalstreamurlrequest.h - tidal/tidalfavoriterequest.h - settings/tidalsettingspage.h - covermanager/tidalcoverprovider.h - UI - settings/tidalsettingspage.ui -) - -optional_source(HAVE_SPOTIFY - SOURCES - spotify/spotifyservice.cpp - spotify/spotifybaserequest.cpp - spotify/spotifyrequest.cpp - spotify/spotifyfavoriterequest.cpp - settings/spotifysettingspage.cpp - covermanager/spotifycoverprovider.cpp - HEADERS - spotify/spotifyservice.h - spotify/spotifybaserequest.h - spotify/spotifyrequest.h - spotify/spotifyfavoriterequest.h - settings/spotifysettingspage.h - covermanager/spotifycoverprovider.h - UI - settings/spotifysettingspage.ui -) - -optional_source(HAVE_QOBUZ - SOURCES - qobuz/qobuzservice.cpp - qobuz/qobuzurlhandler.cpp - qobuz/qobuzbaserequest.cpp - qobuz/qobuzrequest.cpp - qobuz/qobuzstreamurlrequest.cpp - qobuz/qobuzfavoriterequest.cpp - settings/qobuzsettingspage.cpp - HEADERS - qobuz/qobuzservice.h - qobuz/qobuzurlhandler.h - qobuz/qobuzbaserequest.h - qobuz/qobuzrequest.h - qobuz/qobuzstreamurlrequest.h - qobuz/qobuzfavoriterequest.h - settings/qobuzsettingspage.h - UI - settings/qobuzsettingspage.ui -) - -# Moodbar -optional_source(HAVE_MOODBAR - SOURCES - moodbar/moodbarbuilder.cpp - moodbar/moodbarcontroller.cpp - moodbar/moodbaritemdelegate.cpp - moodbar/moodbarloader.cpp - moodbar/moodbarpipeline.cpp - moodbar/moodbarproxystyle.cpp - moodbar/moodbarrenderer.cpp - moodbar/gstfastspectrumplugin.cpp - moodbar/gstfastspectrum.cpp - settings/moodbarsettingspage.cpp - HEADERS - moodbar/moodbarcontroller.h - moodbar/moodbaritemdelegate.h - moodbar/moodbarloader.h - moodbar/moodbarpipeline.h - moodbar/moodbarproxystyle.h - settings/moodbarsettingspage.h - UI - settings/moodbarsettingspage.ui -) - -# EBU R 128 -optional_source(HAVE_EBUR128 - SOURCES engine/ebur128analysis.cpp -) - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h) - -qt_wrap_cpp(MOC ${HEADERS}) -qt_wrap_ui(UIC ${UI}) -qt_add_resources(QRC ${RESOURCES}) - -if(HAVE_TRANSLATIONS) - - set(LINGUAS "All" CACHE STRING "A space-seperated list of translations to compile in to Strawberry, or \"None\".") - if(LINGUAS STREQUAL "All") - # build LANGUAGES from all existing .po files - file(GLOB pofiles translations/*.po) - foreach(pofile ${pofiles}) - get_filename_component(lang ${pofile} NAME_WE) - list(APPEND LANGUAGES ${lang}) - endforeach(pofile) - else(LINGUAS STREQUAL "All") - if(NOT LINGUAS OR LINGUAS STREQUAL "None") - set(LANGUAGES "") - else(NOT LINGUAS OR LINGUAS STREQUAL "None") - string(REGEX MATCHALL [a-zA-Z_@]+ LANGUAGES ${LINGUAS}) - endif(NOT LINGUAS OR LINGUAS STREQUAL "None") - endif(LINGUAS STREQUAL "All") - - if(NOT MSVC) - add_pot(POT - ${CMAKE_CURRENT_SOURCE_DIR}/translations/header - ${CMAKE_CURRENT_SOURCE_DIR}/translations/translations.pot - ${SOURCES} - ${MOC} - ${UIC} - ${CMAKE_SOURCE_DIR}/data/html/oauthsuccess.html - ) - endif() - add_po(PO strawberry_ LANGUAGES ${LANGUAGES} DIRECTORY translations) - -endif(HAVE_TRANSLATIONS) - -add_library(strawberry_lib STATIC - ${SOURCES} - ${MOC} - ${UIC} - ${QRC} - ${POT} - ${PO} - ${OTHER_UIC_SOURCES} -) - -target_include_directories(strawberry_lib PUBLIC - ${CMAKE_SOURCE_DIR} - ${CMAKE_BINARY_DIR} - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR} -) - -target_include_directories(strawberry_lib SYSTEM PUBLIC - ${Boost_INCLUDE_DIRS} - ${GLIB_INCLUDE_DIRS} - ${GOBJECT_INCLUDE_DIRS} - ${SQLITE_INCLUDE_DIRS} - ${ICU_INCLUDE_DIRS} - ${TAGLIB_INCLUDE_DIRS} - ${GSTREAMER_INCLUDE_DIRS} - ${GSTREAMER_BASE_INCLUDE_DIRS} - ${GSTREAMER_APP_INCLUDE_DIRS} - ${GSTREAMER_AUDIO_INCLUDE_DIRS} - ${GSTREAMER_TAG_INCLUDE_DIRS} - ${GSTREAMER_PBUTILS_INCLUDE_DIRS} - ${SINGLEAPPLICATION_INCLUDE_DIRS} -) - -if(HAVE_QPA_QPLATFORMNATIVEINTERFACE_H) - target_include_directories(strawberry_lib SYSTEM PUBLIC ${Qt${QT_VERSION_MAJOR}Gui_PRIVATE_INCLUDE_DIRS}) -endif() - -target_link_directories(strawberry_lib PUBLIC - ${Boost_LIBRARY_DIRS} - ${GLIB_LIBRARY_DIRS} - ${GOBJECT_LIBRARY_DIRS} - ${SQLITE_LIBRARY_DIRS} - ${SINGLEAPPLICATION_LIBRARY_DIRS} - ${ICU_LIBRARY_DIRS} - ${TAGLIB_LIBRARY_DIRS} - ${GSTREAMER_LIBRARY_DIRS} - ${GSTREAMER_BASE_LIBRARY_DIRS} - ${GSTREAMER_APP_LIBRARY_DIRS} - ${GSTREAMER_AUDIO_LIBRARY_DIRS} - ${GSTREAMER_TAG_LIBRARY_DIRS} - ${GSTREAMER_PBUTILS_LIBRARY_DIRS} -) - -target_link_libraries(strawberry_lib PUBLIC - ${CMAKE_THREAD_LIBS_INIT} - ${GLIB_LIBRARIES} - ${GOBJECT_LIBRARIES} - ${SQLITE_LIBRARIES} - ${ICU_LIBRARIES} - ${TAGLIB_LIBRARIES} - ${GSTREAMER_LIBRARIES} - ${GSTREAMER_BASE_LIBRARIES} - ${GSTREAMER_AUDIO_LIBRARIES} - ${GSTREAMER_APP_LIBRARIES} - ${GSTREAMER_TAG_LIBRARIES} - ${GSTREAMER_PBUTILS_LIBRARIES} - Qt${QT_VERSION_MAJOR}::Core - Qt${QT_VERSION_MAJOR}::Concurrent - Qt${QT_VERSION_MAJOR}::Gui - Qt${QT_VERSION_MAJOR}::Widgets - Qt${QT_VERSION_MAJOR}::Network - Qt${QT_VERSION_MAJOR}::Sql - ${SINGLEAPPLICATION_LIBRARIES} -) - -if(HAVE_DBUS) - target_link_libraries(strawberry_lib PUBLIC Qt${QT_VERSION_MAJOR}::DBus) -endif() - -if(HAVE_ALSA) - target_include_directories(strawberry_lib SYSTEM PRIVATE ${ALSA_INCLUDE_DIRS}) - target_link_directories(strawberry_lib PRIVATE ${ALSA_LIBRARY_DIRS}) - target_link_libraries(strawberry_lib PRIVATE ${ALSA_LIBRARIES}) -endif() - -if(HAVE_LIBPULSE) - target_include_directories(strawberry_lib SYSTEM PRIVATE ${LIBPULSE_INCLUDE_DIRS}) - target_link_directories(strawberry_lib PRIVATE ${LIBPULSE_LIBRARY_DIRS}) - target_link_libraries(strawberry_lib PRIVATE ${LIBPULSE_LIBRARIES}) -endif() - -if(HAVE_MOODBAR) - target_include_directories(strawberry_lib SYSTEM PRIVATE ${FFTW3_INCLUDE_DIR}) - target_link_directories(strawberry_lib PRIVATE ${FFTW3_LIBRARY_DIRS}) - target_link_libraries(strawberry_lib PRIVATE ${FFTW3_FFTW_LIBRARY}) -endif() - -if(HAVE_SONGFINGERPRINTING OR HAVE_MUSICBRAINZ) - target_include_directories(strawberry_lib SYSTEM PRIVATE ${CHROMAPRINT_INCLUDE_DIRS}) - target_link_directories(strawberry_lib PRIVATE ${CHROMAPRINT_LIBRARY_DIRS}) - target_link_libraries(strawberry_lib PRIVATE ${CHROMAPRINT_LIBRARIES}) -endif() - -if(HAVE_EBUR128) - target_link_libraries(strawberry_lib PRIVATE PkgConfig::LIBEBUR128) -endif() - -if(X11_FOUND) - target_include_directories(strawberry_lib SYSTEM PRIVATE ${X11_INCLUDE_DIR}) - target_link_directories(strawberry_lib PRIVATE ${X11_LIBRARY_DIRS}) - target_link_libraries(strawberry_lib PRIVATE ${X11_LIBRARIES}) -endif() - -if(XCB_FOUND) - target_include_directories(strawberry_lib SYSTEM PRIVATE ${XCB_INCLUDE_DIR}) - target_link_directories(strawberry_lib PRIVATE ${XCB_LIBRARY_DIRS}) - target_link_libraries(strawberry_lib PRIVATE ${XCB_LIBRARIES}) -endif() - -if(HAVE_GIO) - target_include_directories(strawberry_lib SYSTEM PRIVATE ${GIO_INCLUDE_DIRS}) - target_link_directories(strawberry_lib PRIVATE ${GIO_LIBRARY_DIRS}) - target_link_libraries(strawberry_lib PRIVATE ${GIO_LIBRARIES}) -endif() - -if(HAVE_GIO_UNIX) - target_include_directories(strawberry_lib SYSTEM PRIVATE ${GIO_UNIX_INCLUDE_DIRS}) - target_link_directories(strawberry_lib PRIVATE ${GIO_UNIX_LIBRARY_DIRS}) - target_link_libraries(strawberry_lib PRIVATE ${GIO_UNIX_LIBRARIES}) -endif() - -if(HAVE_AUDIOCD) - target_include_directories(strawberry_lib SYSTEM PRIVATE ${LIBCDIO_INCLUDE_DIRS}) - target_link_directories(strawberry_lib PRIVATE ${LIBCDIO_LIBRARY_DIRS}) - target_link_libraries(strawberry_lib PRIVATE ${LIBCDIO_LIBRARIES}) -endif() - -if(HAVE_LIBGPOD) - target_include_directories(strawberry_lib SYSTEM PRIVATE ${LIBGPOD_INCLUDE_DIRS} ${GDK_PIXBUF_INCLUDE_DIRS}) - target_link_directories(strawberry_lib PRIVATE ${LIBGPOD_LIBRARY_DIRS} ${GDK_PIXBUF_LIBRARY_DIRS}) - target_link_libraries(strawberry_lib PRIVATE ${LIBGPOD_LIBRARIES} ${GDK_PIXBUF_LIBRARIES}) -endif() - -if(HAVE_LIBMTP) - target_include_directories(strawberry_lib SYSTEM PRIVATE ${LIBMTP_INCLUDE_DIRS}) - target_link_directories(strawberry_lib PRIVATE ${LIBMTP_LIBRARY_DIRS}) - target_link_libraries(strawberry_lib PRIVATE ${LIBMTP_LIBRARIES}) -endif() - -if(APPLE) - target_link_libraries(strawberry_lib PRIVATE - "-framework AppKit" - "-framework Carbon" - "-framework CoreAudio" - "-framework DiskArbitration" - "-framework Foundation" - "-framework IOKit" - "-framework ScriptingBridge" - ) - target_link_libraries(strawberry_lib PRIVATE SPMediaKeyTap) -endif() - -if(WIN32) - target_link_libraries(strawberry_lib PRIVATE dsound dwmapi) - if(MSVC) - target_link_libraries(strawberry_lib PRIVATE WindowsApp) - endif() - target_link_libraries(strawberry_lib PRIVATE getopt-win::getopt) -endif() - -if(HAVE_QTSPARKLE) - target_include_directories(strawberry_lib SYSTEM PRIVATE ${QTSPARKLE_INCLUDE_DIRS}) - target_link_directories(strawberry_lib PRIVATE ${QTSPARKLE_LIBRARY_DIRS}) - target_link_libraries(strawberry_lib PRIVATE ${QTSPARKLE_LIBRARIES}) -endif() - -############################################################################### - -set(EXECUTABLE_OUTPUT_PATH ..) - -# Show the console window in debug mode on Windows -if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug" AND NOT ENABLE_WIN32_CONSOLE) - set(STRAWBERRY-WIN32-FLAG WIN32) -endif() - -# Resource file for windows -if(WIN32) - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../dist/windows/windres.rc.in ${CMAKE_CURRENT_BINARY_DIR}/windres.rc) - set(STRAWBERRY-WIN32-RESOURCES windres.rc) -endif() - -add_executable(strawberry - MACOSX_BUNDLE - ${STRAWBERRY-WIN32-FLAG} - ${STRAWBERRY-WIN32-RESOURCES} - main.cpp -) - -if(FREEBSD) - target_link_libraries(strawberry PRIVATE execinfo) -endif() - -target_link_libraries(strawberry PRIVATE strawberry_lib) - -if(NOT APPLE) - install(TARGETS strawberry RUNTIME DESTINATION bin) -endif() - -if(HAVE_TRANSLATIONS AND INSTALL_TRANSLATIONS AND INSTALL_TRANSLATIONS_FILES) - install(FILES ${INSTALL_TRANSLATIONS_FILES} DESTINATION share/strawberry/translations) -endif() - -if(APPLE) - set_target_properties(strawberry PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/../dist/macos/Info.plist") -endif() diff --git a/src/config.h.in b/src/config.h.in index 3e7f50b7c..3a6549b9b 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -5,35 +5,34 @@ #define CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" #define CMAKE_EXECUTABLE_SUFFIX "${CMAKE_EXECUTABLE_SUFFIX}" +#cmakedefine USE_INSTALL_PREFIX + #cmakedefine HAVE_BACKTRACE +#cmakedefine HAVE_ALSA +#cmakedefine HAVE_PULSE #cmakedefine HAVE_GIO #cmakedefine HAVE_GIO_UNIX #cmakedefine HAVE_DBUS -#cmakedefine HAVE_X11 +#cmakedefine HAVE_MPRIS2 #cmakedefine HAVE_UDISKS2 -#cmakedefine HAVE_ALSA #cmakedefine HAVE_AUDIOCD -#cmakedefine HAVE_LIBGPOD -#cmakedefine HAVE_LIBMTP -#cmakedefine HAVE_LIBPULSE +#cmakedefine HAVE_MTP +#cmakedefine HAVE_GPOD #cmakedefine HAVE_QTSPARKLE #cmakedefine HAVE_SONGFINGERPRINTING #cmakedefine HAVE_MUSICBRAINZ +#cmakedefine HAVE_MOODBAR +#cmakedefine HAVE_EBUR128 #cmakedefine HAVE_GLOBALSHORTCUTS #cmakedefine HAVE_X11_GLOBALSHORTCUTS - -#cmakedefine USE_INSTALL_PREFIX - +#cmakedefine HAVE_KDE_GLOBALSHORTCUTS +#cmakedefine HAVE_GNOME_GLOBALSHORTCUTS +#cmakedefine HAVE_MATE_GLOBALSHORTCUTS #cmakedefine HAVE_SUBSONIC #cmakedefine HAVE_TIDAL #cmakedefine HAVE_SPOTIFY #cmakedefine HAVE_QOBUZ -#cmakedefine HAVE_MOODBAR - -#cmakedefine HAVE_KEYSYMDEF_H -#cmakedefine HAVE_XF86KEYSYM_H - #cmakedefine HAVE_TAGLIB_DSFFILE #cmakedefine HAVE_TAGLIB_DSDIFFFILE @@ -48,6 +47,4 @@ #cmakedefine ENABLE_WIN32_CONSOLE -#cmakedefine HAVE_EBUR128 - #endif // CONFIG_H_IN diff --git a/src/dbus/metatypes.h b/src/core/dbus_metatypes.h similarity index 93% rename from src/dbus/metatypes.h rename to src/core/dbus_metatypes.h index f3e8d1db1..99dc3eef3 100644 --- a/src/dbus/metatypes.h +++ b/src/core/dbus_metatypes.h @@ -16,4 +16,4 @@ using ManagedObjectList = QMap; Q_DECLARE_METATYPE(InterfacesAndProperties) Q_DECLARE_METATYPE(ManagedObjectList) -#endif // DBUS_METATYPES_H_ +#endif // DBUS_METATYPES_H diff --git a/src/core/metatypes.cpp b/src/core/metatypes.cpp index 232b7590b..3f76fec6c 100644 --- a/src/core/metatypes.cpp +++ b/src/core/metatypes.cpp @@ -33,9 +33,11 @@ #include #include #include +#include #include #include #include + #ifdef HAVE_DBUS # include # include @@ -55,9 +57,11 @@ #include "equalizer/equalizer.h" #ifdef HAVE_DBUS -# include "mpris2.h" -# include "osd/osddbus.h" -# include "dbus/metatypes.h" +# include "dbus_metatypes.h" +#endif + +#ifdef HAVE_MPRIS2 +# include "mpris2/mpris2.h" #endif #include "streaming/streamingsearchview.h" @@ -66,7 +70,7 @@ #include "radios/radiochannel.h" -#ifdef HAVE_LIBMTP +#ifdef HAVE_MTP # include "device/mtpconnection.h" #endif @@ -77,6 +81,11 @@ #include "lyrics/lyricssearchresult.h" +#ifdef HAVE_DBUS +QDBusArgument &operator<<(QDBusArgument &arg, const QImage &image); +const QDBusArgument &operator>>(const QDBusArgument &arg, QImage &image); +#endif + void RegisterMetaTypes() { qRegisterMetaType("const char*"); @@ -123,13 +132,15 @@ void RegisterMetaTypes() { #ifdef HAVE_DBUS qDBusRegisterMetaType(); qDBusRegisterMetaType(); + qDBusRegisterMetaType(); + qDBusRegisterMetaType(); +# ifdef HAVE_MPRIS2 qDBusRegisterMetaType(); qDBusRegisterMetaType(); qDBusRegisterMetaType(); qDBusRegisterMetaType(); qDBusRegisterMetaType(); - qDBusRegisterMetaType(); - qDBusRegisterMetaType(); +# endif #endif qRegisterMetaType("StreamingSearchView::Result"); @@ -138,7 +149,7 @@ void RegisterMetaTypes() { qRegisterMetaType("RadioChannel"); qRegisterMetaType("RadioChannelList"); -#ifdef HAVE_LIBMTP +#ifdef HAVE_MTP qRegisterMetaType("MtpConnection*"); #endif diff --git a/src/core/song.cpp b/src/core/song.cpp index ade586710..adfcaa2c8 100644 --- a/src/core/song.cpp +++ b/src/core/song.cpp @@ -23,12 +23,12 @@ #include -#ifdef HAVE_LIBGPOD +#ifdef HAVE_GPOD # include # include #endif -#ifdef HAVE_LIBMTP +#ifdef HAVE_MTP # include #endif @@ -61,8 +61,8 @@ #include "song.h" #include "sqlquery.h" #include "sqlrow.h" -#ifdef HAVE_DBUS -# include "mpris_common.h" +#ifdef HAVE_MPRIS2 +# include "mpris2/mpris_common.h" #endif using namespace Qt::StringLiterals; @@ -1525,7 +1525,7 @@ void Song::InitArtAutomatic() { } -#ifdef HAVE_LIBGPOD +#ifdef HAVE_GPOD void Song::InitFromItdb(Itdb_Track *track, const QString &prefix) { d->valid_ = true; @@ -1620,7 +1620,7 @@ void Song::ToItdb(Itdb_Track *track) const { } #endif -#ifdef HAVE_LIBMTP +#ifdef HAVE_MTP void Song::InitFromMTP(const LIBMTP_track_t *track, const QString &host) { d->valid_ = true; @@ -1795,7 +1795,7 @@ void Song::BindToQuery(SqlQuery *query) const { } -#ifdef HAVE_DBUS +#ifdef HAVE_MPRIS2 void Song::ToXesam(QVariantMap *map) const { using mpris::AddMetadata; diff --git a/src/core/song.h b/src/core/song.h index 70588057c..fcd513699 100644 --- a/src/core/song.h +++ b/src/core/song.h @@ -50,11 +50,11 @@ class QSqlRecord; class EngineMetadata; -#ifdef HAVE_LIBGPOD +#ifdef HAVE_GPOD struct _Itdb_Track; #endif -#ifdef HAVE_LIBMTP +#ifdef HAVE_MTP struct LIBMTP_track_struct; #endif @@ -475,19 +475,19 @@ class Song { void InitArtManual(); void InitArtAutomatic(); -#ifdef HAVE_LIBGPOD +#ifdef HAVE_GPOD void InitFromItdb(_Itdb_Track *track, const QString &prefix); void ToItdb(_Itdb_Track *track) const; #endif -#ifdef HAVE_LIBMTP +#ifdef HAVE_MTP void InitFromMTP(const LIBMTP_track_struct *track, const QString &host); void ToMTP(LIBMTP_track_struct *track) const; #endif // Save void BindToQuery(SqlQuery *query) const; -#ifdef HAVE_DBUS +#ifdef HAVE_MPRIS2 void ToXesam(QVariantMap *map) const; #endif diff --git a/src/device/devicelister.cpp b/src/device/devicelister.cpp index cea3e1822..22f6d8068 100644 --- a/src/device/devicelister.cpp +++ b/src/device/devicelister.cpp @@ -21,7 +21,7 @@ #include "config.h" -#ifdef HAVE_LIBGPOD +#ifdef HAVE_GPOD # include #endif @@ -107,7 +107,7 @@ void DeviceLister::Exit() { namespace { -#ifdef HAVE_LIBGPOD +#ifdef HAVE_GPOD QString GetIpodColour(Itdb_IpodModel model) { @@ -237,7 +237,7 @@ QVariantList DeviceLister::GuessIconForPath(const QString &path) { QVariantList ret; -#ifdef HAVE_LIBGPOD +#ifdef HAVE_GPOD if (IsIpod(path)) { Itdb_Device *device = itdb_device_new(); itdb_device_set_mountpoint(device, path.toLocal8Bit().constData()); diff --git a/src/device/devicemanager.cpp b/src/device/devicemanager.cpp index 3aeafcea1..b5453917d 100644 --- a/src/device/devicemanager.cpp +++ b/src/device/devicemanager.cpp @@ -69,18 +69,16 @@ # include "cddalister.h" # include "cddadevice.h" #endif -#ifdef HAVE_DBUS -# ifdef HAVE_UDISKS2 -# include "udisks2lister.h" -# endif +#ifdef HAVE_UDISKS2 +# include "udisks2lister.h" #endif -#ifdef HAVE_LIBMTP +#ifdef HAVE_MTP # include "mtpdevice.h" #endif -#if defined(Q_OS_MACOS) and defined(HAVE_LIBMTP) +#ifdef Q_OS_MACOS # include "macosdevicelister.h" #endif -#ifdef HAVE_LIBGPOD +#ifdef HAVE_GPOD # include "gpoddevice.h" #endif @@ -118,13 +116,13 @@ DeviceManager::DeviceManager(Application *app, QObject *parent) #if defined(HAVE_AUDIOCD) && !defined(Q_OS_MACOS) AddLister(new CddaLister); #endif -#if defined(HAVE_DBUS) && defined(HAVE_UDISKS2) +#ifdef HAVE_UDISKS2 AddLister(new Udisks2Lister); #endif #ifdef HAVE_GIO AddLister(new GioLister); #endif -#if defined(Q_OS_MACOS) and defined(HAVE_LIBMTP) +#ifdef Q_OS_MACOS AddLister(new MacOsDeviceLister); #endif @@ -134,11 +132,11 @@ DeviceManager::DeviceManager(Application *app, QObject *parent) AddDeviceClass(); -#ifdef HAVE_LIBGPOD +#ifdef HAVE_GPOD AddDeviceClass(); #endif -#ifdef HAVE_LIBMTP +#ifdef HAVE_MTP AddDeviceClass(); #endif diff --git a/src/dbus/org.freedesktop.DBus.ObjectManager.xml b/src/device/org.freedesktop.DBus.ObjectManager.xml similarity index 100% rename from src/dbus/org.freedesktop.DBus.ObjectManager.xml rename to src/device/org.freedesktop.DBus.ObjectManager.xml diff --git a/src/dbus/org.freedesktop.UDisks2.Block.xml b/src/device/org.freedesktop.UDisks2.Block.xml similarity index 100% rename from src/dbus/org.freedesktop.UDisks2.Block.xml rename to src/device/org.freedesktop.UDisks2.Block.xml diff --git a/src/dbus/org.freedesktop.UDisks2.Drive.xml b/src/device/org.freedesktop.UDisks2.Drive.xml similarity index 100% rename from src/dbus/org.freedesktop.UDisks2.Drive.xml rename to src/device/org.freedesktop.UDisks2.Drive.xml diff --git a/src/dbus/org.freedesktop.UDisks2.Filesystem.xml b/src/device/org.freedesktop.UDisks2.Filesystem.xml similarity index 100% rename from src/dbus/org.freedesktop.UDisks2.Filesystem.xml rename to src/device/org.freedesktop.UDisks2.Filesystem.xml diff --git a/src/dbus/org.freedesktop.UDisks2.Job.xml b/src/device/org.freedesktop.UDisks2.Job.xml similarity index 100% rename from src/dbus/org.freedesktop.UDisks2.Job.xml rename to src/device/org.freedesktop.UDisks2.Job.xml diff --git a/src/device/udisks2lister.h b/src/device/udisks2lister.h index f36230c95..ee5c40bf6 100644 --- a/src/device/udisks2lister.h +++ b/src/device/udisks2lister.h @@ -40,8 +40,8 @@ #include "core/scoped_ptr.h" #include "core/shared_ptr.h" +#include "core/dbus_metatypes.h" -#include "dbus/metatypes.h" #include "devicelister.h" class OrgFreedesktopDBusObjectManagerInterface; diff --git a/src/engine/devicefinders.cpp b/src/engine/devicefinders.cpp index 0de6183c1..b41687320 100644 --- a/src/engine/devicefinders.cpp +++ b/src/engine/devicefinders.cpp @@ -32,7 +32,7 @@ # include "alsapcmdevicefinder.h" #endif -#ifdef HAVE_LIBPULSE +#ifdef HAVE_PULSE # include "pulsedevicefinder.h" #endif @@ -69,7 +69,7 @@ void DeviceFinders::Init() { device_finders.append(new AlsaDeviceFinder); device_finders.append(new AlsaPCMDeviceFinder); #endif -#ifdef HAVE_LIBPULSE +#ifdef HAVE_PULSE device_finders.append(new PulseDeviceFinder); #endif #ifdef Q_OS_MACOS diff --git a/src/globalshortcuts/globalshortcutsmanager.cpp b/src/globalshortcuts/globalshortcutsmanager.cpp index de581e393..d994053da 100644 --- a/src/globalshortcuts/globalshortcutsmanager.cpp +++ b/src/globalshortcuts/globalshortcutsmanager.cpp @@ -34,10 +34,16 @@ #include "globalshortcutsmanager.h" #include "globalshortcutsbackend.h" -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && defined(HAVE_DBUS) -# include "globalshortcutsbackend-kde.h" -# include "globalshortcutsbackend-gnome.h" -# include "globalshortcutsbackend-mate.h" +#ifdef HAVE_KDE_GLOBALSHORTCUTS +#include "globalshortcutsbackend-kde.h" +#endif + +#ifdef HAVE_GNOME_GLOBALSHORTCUTS +#include "globalshortcutsbackend-gnome.h" +#endif + +#ifdef HAVE_MATE_GLOBALSHORTCUTS +#include "globalshortcutsbackend-mate.h" #endif #ifdef HAVE_X11_GLOBALSHORTCUTS @@ -82,9 +88,15 @@ GlobalShortcutsManager::GlobalShortcutsManager(QWidget *parent) : QWidget(parent // Create backends - these do the actual shortcut registration -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && defined(HAVE_DBUS) +#ifdef HAVE_KDE_GLOBALSHORTCUTS backends_ << new GlobalShortcutsBackendKDE(this, this); +#endif + +#ifdef HAVE_GNOME_GLOBALSHORTCUTS backends_ << new GlobalShortcutsBackendGnome(this, this); +#endif + +#ifdef HAVE_MATE_GLOBALSHORTCUTS backends_ << new GlobalShortcutsBackendMate(this, this); #endif @@ -116,13 +128,19 @@ void GlobalShortcutsManager::ReloadSettings() { backends_enabled_ << GlobalShortcutsBackend::Type::Win; #endif -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && defined(HAVE_DBUS) +#ifdef HAVE_KDE_GLOBALSHORTCUTS if (settings_.value("use_kde", true).toBool()) { backends_enabled_ << GlobalShortcutsBackend::Type::KDE; } +#endif + +#ifdef HAVE_GNOME_GLOBALSHORTCUTS if (settings_.value("use_gnome", true).toBool()) { backends_enabled_ << GlobalShortcutsBackend::Type::Gnome; } +#endif + +#ifdef HAVE_MATE_GLOBALSHORTCUTS if (settings_.value("use_mate", true).toBool()) { backends_enabled_ << GlobalShortcutsBackend::Type::Mate; } @@ -165,7 +183,7 @@ GlobalShortcutsManager::Shortcut GlobalShortcutsManager::AddShortcut(const QStri } -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && defined(HAVE_DBUS) +#ifdef HAVE_KDE_GLOBALSHORTCUTS bool GlobalShortcutsManager::IsKdeAvailable() { @@ -173,19 +191,27 @@ bool GlobalShortcutsManager::IsKdeAvailable() { } +#endif + +#ifdef HAVE_KDE_GLOBALSHORTCUTS + bool GlobalShortcutsManager::IsGnomeAvailable() { return GlobalShortcutsBackendGnome::IsGnomeAvailable(); } +#endif + +#ifdef HAVE_KDE_GLOBALSHORTCUTS + bool GlobalShortcutsManager::IsMateAvailable() { return GlobalShortcutsBackendMate::IsMateAvailable(); } -#endif // defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && defined(HAVE_DBUS) +#endif #ifdef HAVE_X11_GLOBALSHORTCUTS diff --git a/src/globalshortcuts/keymapper_x11.h b/src/globalshortcuts/keymapper_x11.h index 0e9fbbace..b96c01432 100644 --- a/src/globalshortcuts/keymapper_x11.h +++ b/src/globalshortcuts/keymapper_x11.h @@ -29,20 +29,12 @@ #define XK_XKB_KEYS #define XK_LATIN1 -#ifdef HAVE_KEYSYMDEF_H -# include -#else -# warning "Missing X11/keysymdef.h" -#endif -#ifdef HAVE_XF86KEYSYM_H -# include -#endif +#include +#include namespace KeyMapperX11 { static const QMap keymapper_x11_ = { // clazy:exclude=non-pod-global-static -#ifdef HAVE_KEYSYMDEF_H - { Qt::Key_0, XK_0 }, { Qt::Key_1, XK_1 }, { Qt::Key_2, XK_2 }, @@ -208,9 +200,7 @@ static const QMap keymapper_x11_ = { // clazy:exclude=non-pod { Qt::Key_MultipleCandidate, XK_MultipleCandidate }, { Qt::Key_PreviousCandidate, XK_PreviousCandidate }, { Qt::Key_Mode_switch, XK_Mode_switch }, -#endif -#ifdef HAVE_XF86KEYSYM_H { Qt::Key_Back, XF86XK_Back }, { Qt::Key_Forward, XF86XK_Forward }, { Qt::Key_Stop, XF86XK_Stop }, @@ -249,7 +239,6 @@ static const QMap keymapper_x11_ = { // clazy:exclude=non-pod { Qt::Key_LaunchF, XF86XK_LaunchD }, { Qt::Key_LaunchG, XF86XK_LaunchE }, { Qt::Key_LaunchH, XF86XK_LaunchF }, -#endif {Qt::Key(0), 0} diff --git a/src/dbus/org.gnome.SettingsDaemon.MediaKeys.xml b/src/globalshortcuts/org.gnome.SettingsDaemon.MediaKeys.xml similarity index 100% rename from src/dbus/org.gnome.SettingsDaemon.MediaKeys.xml rename to src/globalshortcuts/org.gnome.SettingsDaemon.MediaKeys.xml diff --git a/src/dbus/org.kde.KGlobalAccel.Component.xml b/src/globalshortcuts/org.kde.KGlobalAccel.Component.xml similarity index 100% rename from src/dbus/org.kde.KGlobalAccel.Component.xml rename to src/globalshortcuts/org.kde.KGlobalAccel.Component.xml diff --git a/src/dbus/org.kde.KGlobalAccel.xml b/src/globalshortcuts/org.kde.KGlobalAccel.xml similarity index 100% rename from src/dbus/org.kde.KGlobalAccel.xml rename to src/globalshortcuts/org.kde.KGlobalAccel.xml diff --git a/src/dbus/org.mate.SettingsDaemon.MediaKeys.xml b/src/globalshortcuts/org.mate.SettingsDaemon.MediaKeys.xml similarity index 100% rename from src/dbus/org.mate.SettingsDaemon.MediaKeys.xml rename to src/globalshortcuts/org.mate.SettingsDaemon.MediaKeys.xml diff --git a/src/main.cpp b/src/main.cpp index 076f7a991..619f58a47 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -84,8 +84,8 @@ # include "core/mac_startup.h" #endif -#ifdef HAVE_DBUS -# include "core/mpris2.h" +#ifdef HAVE_MPRIS2 +# include "mpris2/mpris2.h" #endif #include "core/metatypes.h" #include "core/iconloader.h" @@ -266,7 +266,7 @@ int main(int argc, char *argv[]) { ScopedPtr translations(new Translations); translations->LoadTranslation(QStringLiteral("qt"), QLibraryInfo::path(QLibraryInfo::TranslationsPath), language); - translations->LoadTranslation(QStringLiteral("strawberry"), QStringLiteral(":/translations"), language); + translations->LoadTranslation(QStringLiteral("strawberry"), QStringLiteral(":/src/translations"), language); translations->LoadTranslation(QStringLiteral("strawberry"), QStringLiteral(TRANSLATIONS_DIR), language); translations->LoadTranslation(QStringLiteral("strawberry"), QCoreApplication::applicationDirPath(), language); translations->LoadTranslation(QStringLiteral("strawberry"), QDir::currentPath(), language); @@ -293,7 +293,7 @@ int main(int argc, char *argv[]) { OSDBase osd(tray_icon, &app); #endif -#ifdef HAVE_DBUS +#ifdef HAVE_MPRIS2 mpris::Mpris2 mpris2(&app); #endif @@ -304,7 +304,7 @@ int main(int argc, char *argv[]) { mac::EnableFullScreen(w); #endif // Q_OS_MACOS -#ifdef HAVE_DBUS +#ifdef HAVE_MPRIS2 QObject::connect(&mpris2, &mpris::Mpris2::RaiseMainWindow, &w, &MainWindow::Raise); #endif QObject::connect(&single_app, &KDSingleApplication::messageReceived, &w, QOverload::of(&MainWindow::CommandlineOptionsReceived)); diff --git a/src/core/mpris2.cpp b/src/mpris2/mpris2.cpp similarity index 99% rename from src/core/mpris2.cpp rename to src/mpris2/mpris2.cpp index 6a5a8deeb..133ae00f1 100644 --- a/src/core/mpris2.cpp +++ b/src/mpris2/mpris2.cpp @@ -46,9 +46,9 @@ #include "mpris_common.h" #include "mpris2.h" -#include "song.h" -#include "application.h" -#include "player.h" +#include "core/song.h" +#include "core/application.h" +#include "core/player.h" #include "utilities/timeconstants.h" #include "engine/enginebase.h" #include "playlist/playlist.h" diff --git a/src/core/mpris2.h b/src/mpris2/mpris2.h similarity index 100% rename from src/core/mpris2.h rename to src/mpris2/mpris2.h diff --git a/src/core/mpris_common.h b/src/mpris2/mpris_common.h similarity index 100% rename from src/core/mpris_common.h rename to src/mpris2/mpris_common.h diff --git a/src/dbus/org.mpris.MediaPlayer2.Player.xml b/src/mpris2/org.mpris.MediaPlayer2.Player.xml similarity index 100% rename from src/dbus/org.mpris.MediaPlayer2.Player.xml rename to src/mpris2/org.mpris.MediaPlayer2.Player.xml diff --git a/src/dbus/org.mpris.MediaPlayer2.Playlists.xml b/src/mpris2/org.mpris.MediaPlayer2.Playlists.xml similarity index 100% rename from src/dbus/org.mpris.MediaPlayer2.Playlists.xml rename to src/mpris2/org.mpris.MediaPlayer2.Playlists.xml diff --git a/src/dbus/org.mpris.MediaPlayer2.TrackList.xml b/src/mpris2/org.mpris.MediaPlayer2.TrackList.xml similarity index 100% rename from src/dbus/org.mpris.MediaPlayer2.TrackList.xml rename to src/mpris2/org.mpris.MediaPlayer2.TrackList.xml diff --git a/src/dbus/org.mpris.MediaPlayer2.xml b/src/mpris2/org.mpris.MediaPlayer2.xml similarity index 100% rename from src/dbus/org.mpris.MediaPlayer2.xml rename to src/mpris2/org.mpris.MediaPlayer2.xml diff --git a/src/dbus/org.freedesktop.Notifications.xml b/src/osd/org.freedesktop.Notifications.xml similarity index 100% rename from src/dbus/org.freedesktop.Notifications.xml rename to src/osd/org.freedesktop.Notifications.xml diff --git a/src/settings/behavioursettingspage.cpp b/src/settings/behavioursettingspage.cpp index a707ff35f..87e1a5d2d 100644 --- a/src/settings/behavioursettingspage.cpp +++ b/src/settings/behavioursettingspage.cpp @@ -81,7 +81,7 @@ BehaviourSettingsPage::BehaviourSettingsPage(SettingsDialog *dialog, QWidget *pa #ifdef HAVE_TRANSLATIONS // Populate the language combo box. We do this by looking at all the compiled in translations. - QDir dir1(QStringLiteral(":/translations/")); + QDir dir1(QStringLiteral(":/src/translations/")); QDir dir2(QStringLiteral(TRANSLATIONS_DIR)); QStringList codes = dir1.entryList(QStringList() << QStringLiteral("*.qm")); if (dir2.exists()) { diff --git a/src/settings/globalshortcutssettingspage.cpp b/src/settings/globalshortcutssettingspage.cpp index 1a7f5ea83..3b1a11094 100644 --- a/src/settings/globalshortcutssettingspage.cpp +++ b/src/settings/globalshortcutssettingspage.cpp @@ -70,27 +70,33 @@ GlobalShortcutsSettingsPage::GlobalShortcutsSettingsPage(SettingsDialog *dialog, QObject::connect(ui_->radio_custom, &QRadioButton::clicked, this, &GlobalShortcutsSettingsPage::ChangeClicked); QObject::connect(ui_->button_change, &QPushButton::clicked, this, &GlobalShortcutsSettingsPage::ChangeClicked); -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && defined(HAVE_DBUS) +#ifdef HAVE_KDE_GLOBALSHORTCUTS QObject::connect(ui_->checkbox_kde, &QCheckBox::toggled, this, &GlobalShortcutsSettingsPage::ShortcutOptionsChanged); - QObject::connect(ui_->checkbox_gnome, &QCheckBox::toggled, this, &GlobalShortcutsSettingsPage::ShortcutOptionsChanged); - QObject::connect(ui_->checkbox_mate, &QCheckBox::toggled, this, &GlobalShortcutsSettingsPage::ShortcutOptionsChanged); - QObject::connect(ui_->button_gnome_open, &QPushButton::clicked, this, &GlobalShortcutsSettingsPage::OpenGnomeKeybindingProperties); - QObject::connect(ui_->button_mate_open, &QPushButton::clicked, this, &GlobalShortcutsSettingsPage::OpenMateKeybindingProperties); #else ui_->widget_kde->hide(); +#endif +#ifdef HAVE_GNOME_GLOBALSHORTCUTS + QObject::connect(ui_->checkbox_gnome, &QCheckBox::toggled, this, &GlobalShortcutsSettingsPage::ShortcutOptionsChanged); + QObject::connect(ui_->button_gnome_open, &QPushButton::clicked, this, &GlobalShortcutsSettingsPage::OpenGnomeKeybindingProperties); +#else ui_->widget_gnome->hide(); + #endif +#ifdef HAVE_MATE_GLOBALSHORTCUTS + QObject::connect(ui_->checkbox_mate, &QCheckBox::toggled, this, &GlobalShortcutsSettingsPage::ShortcutOptionsChanged); + QObject::connect(ui_->button_mate_open, &QPushButton::clicked, this, &GlobalShortcutsSettingsPage::OpenMateKeybindingProperties); +#else ui_->widget_mate->hide(); -#endif // defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && defined(HAVE_DBUS) +#endif #ifdef HAVE_X11_GLOBALSHORTCUTS QObject::connect(ui_->checkbox_x11, &QCheckBox::toggled, this, &GlobalShortcutsSettingsPage::ShortcutOptionsChanged); #else ui_->widget_x11->hide(); -#endif // HAVE_X11_GLOBALSHORTCUTS +#endif #ifndef Q_OS_MACOS ui_->widget_macos_access->hide(); -#endif // Q_OS_MACOS +#endif } @@ -113,8 +119,7 @@ void GlobalShortcutsSettingsPage::Load() { QObject::connect(ui_->button_macos_preferences, &QPushButton::clicked, manager, &GlobalShortcutsManager::ShowMacAccessibilityDialog); #endif -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && defined(HAVE_DBUS) - +#ifdef HAVE_KDE_GLOBALSHORTCUTS if (GlobalShortcutsManager::IsKdeAvailable()) { qLog(Debug) << "KDE (KGlobalAccel) backend is available."; ui_->widget_kde->show(); @@ -123,7 +128,9 @@ void GlobalShortcutsSettingsPage::Load() { qLog(Debug) << "KDE (KGlobalAccel) backend is unavailable."; ui_->widget_kde->hide(); } +#endif +#ifdef HAVE_GNOME_GLOBALSHORTCUTS if (GlobalShortcutsManager::IsGnomeAvailable()) { qLog(Debug) << "Gnome (GSD) backend is available."; ui_->widget_gnome->show(); @@ -132,7 +139,9 @@ void GlobalShortcutsSettingsPage::Load() { qLog(Debug) << "Gnome (GSD) backend is unavailable."; ui_->widget_gnome->hide(); } +#endif +#ifdef HAVE_MATE_GLOBALSHORTCUTS if (GlobalShortcutsManager::IsMateAvailable()) { qLog(Debug) << "MATE backend is available."; ui_->widget_mate->show(); @@ -141,8 +150,7 @@ void GlobalShortcutsSettingsPage::Load() { qLog(Debug) << "MATE backend is unavailable."; ui_->widget_mate->hide(); } - -#endif // defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && defined(HAVE_DBUS) +#endif #ifdef HAVE_X11_GLOBALSHORTCUTS if (GlobalShortcutsManager::IsX11Available()) { @@ -153,7 +161,7 @@ void GlobalShortcutsSettingsPage::Load() { qLog(Debug) << "X11 backend is unavailable."; ui_->widget_x11->hide(); } -#endif // HAVE_X11_GLOBALSHORTCUTS +#endif const QList shortcuts = manager->shortcuts().values(); for (const GlobalShortcutsManager::Shortcut &i : shortcuts) { @@ -174,29 +182,31 @@ void GlobalShortcutsSettingsPage::Load() { SetShortcut(shortcut.s.id, shortcut.s.action->shortcut()); } -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && defined(HAVE_DBUS) - +#ifdef HAVE_KDE_GLOBALSHORTCUTS if (ui_->widget_kde->isVisibleTo(this)) { ui_->checkbox_kde->setChecked(s.value("use_kde", true).toBool()); } +#endif +#ifdef HAVE_GNOME_GLOBALSHORTCUTS if (ui_->widget_gnome->isVisibleTo(this)) { ui_->checkbox_gnome->setChecked(s.value("use_gnome", true).toBool()); } +#endif +#ifdef HAVE_MATE_GLOBALSHORTCUTS if (ui_->widget_mate->isVisibleTo(this)) { ui_->checkbox_mate->setChecked(s.value("use_mate", true).toBool()); } - -#endif // defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && defined(HAVE_DBUS) +#endif #ifdef HAVE_X11_GLOBALSHORTCUTS if (ui_->widget_x11->isVisibleTo(this)) { ui_->checkbox_x11->setChecked(s.value("use_x11", false).toBool()); } -#endif // HAVE_X11_GLOBALSHORTCUTS +#endif -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && (defined(HAVE_DBUS) || defined(HAVE_X11_GLOBALSHORTCUTS)) +#if defined(HAVE_KDE_GLOBALSHORTCUTS) || defined(HAVE_GNOME_GLOBALSHORTCUTS) || defined(HAVE_MATE_GLOBALSHORTCUTS) || defined(HAVE_X11_GLOBALSHORTCUTS) ShortcutOptionsChanged(); #endif @@ -224,15 +234,21 @@ void GlobalShortcutsSettingsPage::Save() { s.setValue(shortcut.s.id, shortcut.key.toString()); } -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && defined(HAVE_DBUS) +#ifdef HAVE_KDE_GLOBALSHORTCUTS s.setValue("use_kde", ui_->checkbox_kde->isChecked()); +#endif + +#ifdef HAVE_GNOME_GLOBALSHORTCUTS s.setValue("use_gnome", ui_->checkbox_gnome->isChecked()); +#endif + +#ifdef HAVE_MATE_GLOBALSHORTCUTS s.setValue("use_mate", ui_->checkbox_mate->isChecked()); -#endif // defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && defined(HAVE_DBUS) +#endif #ifdef HAVE_X11_GLOBALSHORTCUTS s.setValue("use_x11", ui_->checkbox_x11->isChecked()); -#endif // HAVE_X11_GLOBALSHORTCUTS +#endif s.endGroup(); diff --git a/src/translations/translations.pot b/src/translations/translations.pot index 9f3a5ea5f..f35bb79c9 100644 --- a/src/translations/translations.pot +++ b/src/translations/translations.pot @@ -2165,19 +2165,34 @@ msgid "" "configured there instead." msgstr "" -msgid "D-Bus path" +msgid "Identifying song" msgstr "" -msgid "Serial number" +msgid "Fingerprinting song" msgstr "" -msgid "Mount points" +msgid "Downloading metadata" msgstr "" -msgid "Partition label" +msgid "Show moodbar" msgstr "" -msgid "UUID" +msgid "Moodbar style" +msgstr "" + +msgid "Normal" +msgstr "" + +msgid "Angry" +msgstr "" + +msgid "Frozen" +msgstr "" + +msgid "Happy" +msgstr "" + +msgid "System colors" msgstr "" msgid "Connect device" @@ -2252,23 +2267,6 @@ msgstr "" msgid "Manufacturer" msgstr "" -#, qt-format -msgid "Could not copy %1 to %2: %3" -msgstr "" - -#, qt-format -msgid "Writing database failed: %1" -msgstr "" - -msgid "Writing database failed." -msgstr "" - -msgid "Loading iPod database" -msgstr "" - -msgid "An error occurred loading the iTunes database" -msgstr "" - msgid "Mount point" msgstr "" @@ -2278,6 +2276,21 @@ msgstr "" msgid "URI" msgstr "" +msgid "D-Bus path" +msgstr "" + +msgid "Serial number" +msgstr "" + +msgid "Mount points" +msgstr "" + +msgid "Partition label" +msgstr "" + +msgid "UUID" +msgstr "" + #, qt-format msgid "Invalid MTP device: %1" msgstr "" @@ -2303,15 +2316,6 @@ msgstr "" msgid "Error connecting MTP device %1: %2" msgstr "" -msgid "Identifying song" -msgstr "" - -msgid "Fingerprinting song" -msgstr "" - -msgid "Downloading metadata" -msgstr "" - msgid "Error while setting CDDA device to ready state." msgstr "" @@ -2321,6 +2325,23 @@ msgstr "" msgid "Error while querying CDDA tracks." msgstr "" +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +msgid "Writing database failed." +msgstr "" + +msgid "Loading iPod database" +msgstr "" + +msgid "An error occurred loading the iTunes database" +msgstr "" + msgid "Server URL is invalid." msgstr "" @@ -2490,27 +2511,6 @@ msgstr "" msgid "Missing app id." msgstr "" -msgid "Show moodbar" -msgstr "" - -msgid "Moodbar style" -msgstr "" - -msgid "Normal" -msgstr "" - -msgid "Angry" -msgstr "" - -msgid "Frozen" -msgstr "" - -msgid "Happy" -msgstr "" - -msgid "System colors" -msgstr "" - msgid "Strawberry Music Player" msgstr "" @@ -4296,6 +4296,18 @@ msgstr "" msgid "Change shortcut..." msgstr "" +msgid "Moodbar" +msgstr "" + +msgid "Show a moodbar in the track progress bar" +msgstr "" + +msgid "Save the .mood files directly in the songs folders" +msgstr "" + +msgid "Enabled" +msgstr "" + msgid "Device Properties" msgstr "" @@ -4454,18 +4466,6 @@ msgstr "" msgid "Base64 encoded secret" msgstr "" -msgid "Moodbar" -msgstr "" - -msgid "Show a moodbar in the track progress bar" -msgstr "" - -msgid "Save the .mood files directly in the songs folders" -msgstr "" - -msgid "Enabled" -msgstr "" - msgid "Return to Strawberry" msgstr ""