diff --git a/CMakeLists.txt b/CMakeLists.txt index 8e0d20bf6a..6316503ad0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,281 +1,281 @@ cmake_minimum_required(VERSION 3.4) project(Amarok) # Remove all warnings, ease the porting to cmake 3.x if (POLICY CMP0028) cmake_policy(SET CMP0028 NEW) endif() ############### find_package(PkgConfig REQUIRED) find_package(ECM 1.7.0 REQUIRED CONFIG) set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH}) include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings NO_POLICY_SCOPE) include(FeatureSummary) include(ECMInstallIcons) include(ECMSetupVersion) include(ECMAddTests) include(ECMAddAppIcon) include(FindPkgConfig) include(CMakePushCheckState) find_package( Qt5 5.8.0 COMPONENTS QuickControls2 WebEngine ) set_package_properties( Qt5QuickControls2 PROPERTIES TYPE RUNTIME PURPOSE "Needed by the player's context area" ) find_package( Qt5 5.8.0 REQUIRED COMPONENTS Core DBus Gui QuickWidgets Qml Script ScriptTools Sql Svg Test Widgets Xml ) set_package_properties( Qt5WebEngine PROPERTIES TYPE OPTIONAL PURPOSE "Needed by the wikipedia applet" ) -find_package( KF5 5.41 REQUIRED COMPONENTS Archive Attica Codecs CoreAddons DBusAddons Declarative DNSSD GlobalAccel GuiAddons I18n IconThemes KCMUtils KIO NewStuff Notifications NotifyConfig Package Solid TextEditor ThreadWeaver WidgetsAddons WindowSystem ) +find_package( KF5 5.41 REQUIRED COMPONENTS Archive Attica Codecs CoreAddons Crash DBusAddons Declarative DNSSD GlobalAccel GuiAddons I18n IconThemes KCMUtils KIO NewStuff Notifications NotifyConfig Package Solid TextEditor ThreadWeaver WidgetsAddons WindowSystem ) find_package( KF5 COMPONENTS Kirigami2 ) set_package_properties( KF5Kirigami2 PROPERTIES TYPE RUNTIME PURPOSE "Needed by the player's context area" ) ############### option(WITH_UTILITIES "Enable building of utilities" ON) option(WITH_PLAYER "Enable building of main Amarok player" ON) option(WITH_MP3Tunes "Enable mp3tunes in the Amarok player, requires multiple extra dependencies" ON) option(WITH_IPOD "Enable iPod support in Amarok" ON) option(WITH_MYSQL_EMBEDDED "Build the embedded database library -- highly recommended" ON) option(WITH_PLAYGROUND "Enable building of playground scripts and applets (WARNING: some of them might have legal issues!)" OFF) ############### Taglib set(TAGLIB_MIN_VERSION "1.7") find_package(Taglib REQUIRED) set_package_properties( Taglib PROPERTIES DESCRIPTION "Support for Audio metadata." URL "http://developer.kde.org/~wheeler/taglib.html" TYPE REQUIRED PURPOSE "Required for tag reading" ) # Check if TagLib is built with ASF and MP4 support include(CheckCXXSourceCompiles) cmake_push_check_state() set(CMAKE_REQUIRED_INCLUDES "${TAGLIB_INCLUDES}") set(CMAKE_REQUIRED_LIBRARIES "${TAGLIB_LIBRARIES}") check_cxx_source_compiles("#include int main() { TagLib::ASF::Tag tag; return 0;}" TAGLIB_ASF_FOUND) if( NOT TAGLIB_ASF_FOUND ) message(FATAL_ERROR "TagLib does not have ASF support compiled in.") endif() check_cxx_source_compiles("#include int main() { TagLib::MP4::Tag tag(0, 0); return 0;}" TAGLIB_MP4_FOUND) if( NOT TAGLIB_MP4_FOUND ) message(FATAL_ERROR "TagLib does not have MP4 support compiled in.") endif() check_cxx_source_compiles("#include #include #include #include #include using namespace TagLib; int main() { char *s; Mod::Tag tag; Mod::File modfile(s); S3M::File s3mfile(s); IT::File itfile(s); XM::File xmfile(s); return 0; }" TAGLIB_MOD_FOUND) check_cxx_source_compiles("#include int main() { char *s; TagLib::Ogg::Opus::File opusfile(s); return 0;}" TAGLIB_OPUS_FOUND) cmake_pop_check_state() set(TAGLIB-EXTRAS_MIN_VERSION "1.0") find_package(Taglib-Extras) set(TAGLIB_EXTRAS_FOUND ${TAGLIB-EXTRAS_FOUND}) # we need a c-compatible name for the include file include(CheckTagLibFileName) check_taglib_filename(COMPLEX_TAGLIB_FILENAME) ############### #Needed to conditionally build tests and gui find_package(Googlemock) set_package_properties( GOOGLEMOCK PROPERTIES DESCRIPTION "Used in Amarok's tests." URL "https://github.com/google/googlemock" TYPE OPTIONAL ) if(NOT GOOGLEMOCK_FOUND) set(BUILD_TESTING OFF) endif() if(BUILD_TESTING) add_definitions(-DDEBUG) endif() if(WITH_DESKTOP_UI) add_definitions(-DDESKTOP_UI) endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0") if (CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmessage-length=0") if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--as-needed") endif() endif () include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/shared ${CMAKE_CURRENT_BINARY_DIR}/shared ) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") # Require C++11 # WORKAROUND for Clang bug: http://llvm.org/bugs/show_bug.cgi?id=15651 if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND WIN32) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-delayed-template-parsing") endif () add_definitions(-DQT_NO_URL_CAST_FROM_STRING) find_package(Phonon4Qt5 4.6.60 REQUIRED NO_MODULE) find_package( LibLastFm ) set( LIBLASTFM_MIN_VERSION "1.0.0" ) if( LIBLASTFM_FOUND ) if ( ${LIBLASTFM_MIN_VERSION} VERSION_LESS ${LIBLASTFM_VERSION} ) set( LIBLASTFM_FOUND TRUE ) endif() endif() string( TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_TOLOWER ) if( CMAKE_BUILD_TYPE_TOLOWER MATCHES debug ) set( DEBUG_BUILD_TYPE ON ) add_definitions(-Wall -Wextra) endif() # this needs to be here because also code in shared/ needs config.h. This is also the # reason why various checks are above why they belong under if( WITH_PLAYER ) configure_file( shared/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/shared/config.h ) add_subdirectory( data ) add_subdirectory( images ) add_subdirectory( shared ) if( WITH_PLAYER ) find_package(X11) find_package(Threads REQUIRED) find_package(MySQL REQUIRED) if( WITH_MYSQL_EMBEDDED ) set( BUILD_MYSQLE_COLLECTION TRUE ) set_package_properties( MYSQLD PROPERTIES DESCRIPTION "Embedded MySQL Libraries" URL "http://www.mysql.com" TYPE REQUIRED ) else() add_definitions( "-DNO_MYSQL_EMBEDDED" ) endif() set_package_properties( MYSQL PROPERTIES DESCRIPTION "MySQL Server Libraries" URL "http://www.mysql.com" TYPE REQUIRED ) # zlib is required for mysql embedded find_package(ZLIB REQUIRED) set_package_properties( ZLIB PROPERTIES DESCRIPTION "zlib" TYPE REQUIRED ) # We tell users that we need 1.0.3, but we really check just >= 1.0.0. This is because # upstream forgot to update version in lastfm/global.h, so it looks like 1.0.2. :-( # will be fixed in liblastfm-1.0.4 set( LIBLASTFM_MIN_VERSION "1.0.3" ) set_package_properties( LibLastFm PROPERTIES DESCRIPTION "Enable Last.Fm service, including scrobbling, song submissions, and suggested song dynamic playlists" URL "http://cdn.last.fm/client/liblastfm-${LIBLASTFM_MIN_VERSION}.tar.gz" TYPE OPTIONAL ) find_package(FFmpeg) set_package_properties(FFmpeg PROPERTIES DESCRIPTION "Libraries and tools for handling multimedia data" URL "https://www.ffmpeg.org/" TYPE OPTIONAL PURPOSE "Enable MusicDNS service" ) find_package(LibOFA) set_package_properties(LibOFA PROPERTIES DESCRIPTION "Open-source audio fingerprint by MusicIP" URL "http://code.google.com/p/musicip-libofa/" TYPE OPTIONAL PURPOSE "Enable MusicDNS service" ) ## gpodder Service find_package(Mygpo-qt5 1.1.0 CONFIG) set_package_properties(Mygpo-qt5 PROPERTIES DESCRIPTION "A Qt/C++ library wrapping the gpodder.net Webservice." URL "http://wiki.gpodder.org/wiki/Libmygpo-qt" TYPE OPTIONAL PURPOSE "Synchronize podcast subscriptions with gpodder.net" ) if( WITH_IPOD ) find_package(Ipod) set(IPOD_MIN_VERSION "0.8.2") if( IPOD_FOUND AND NOT WIN32 ) if ( ${IPOD_MIN_VERSION} VERSION_LESS ${IPOD_VERSION} ) set( IPOD_FOUND TRUE ) endif() endif() set_package_properties( Ipod PROPERTIES DESCRIPTION "Support Apple iPod/iPad/iPhone audio devices" URL "http://sourceforge.net/projects/gtkpod/" TYPE OPTIONAL ) find_package(GDKPixBuf) set_package_properties( GDKPixBuf PROPERTIES DESCRIPTION "Support for artwork on iPod audio devices via GDK-PixBuf" URL "http://developer.gnome.org/arch/imaging/gdkpixbuf.html" TYPE OPTIONAL ) endif() find_package(Mtp 1.0.0) set_package_properties(Mtp PROPERTIES TYPE OPTIONAL PURPOSE "Enable Support for portable media devices that use the media transfer protocol" ) if( WITH_MP3Tunes ) find_package(CURL) set_package_properties( CURL PROPERTIES DESCRIPTION "Used to transfer data with URLs" URL "https://curl.haxx.se/" TYPE OPTIONAL ) find_package(LibXml2) set_package_properties( LibXml2 PROPERTIES DESCRIPTION "LibXML2 is an XML parser required by mp3tunes." URL "http://www.xmlsoft.org" TYPE OPTIONAL ) find_package(OpenSSL) find_package(Libgcrypt) if ( OPENSSL_FOUND OR LIBGCRYPT_FOUND ) set (_mp3tunes_crypto TRUE ) else () message( SEND_ERROR "Building with mp3tunes support REQUIRES either OpenSSL or GNU Libgcrypt" ) endif () set_package_properties( OpenSSL PROPERTIES DESCRIPTION "OpenSSL or GNU Libgcrypt provides cryptographic functions required by mp3tunes." URL "http://www.openssl.org/ or http://www.gnupg.org/download/#libgcrypt" TYPE OPTIONAL ) set_package_properties( Libgcrypt PROPERTIES DESCRIPTION "OpenSSL or GNU Libgcrypt provides cryptographic functions required by mp3tunes." URL "http://www.openssl.org/ or http://www.gnupg.org/download/#libgcrypt" TYPE OPTIONAL ) find_package(Loudmouth) set_package_properties( Loudmouth PROPERTIES DESCRIPTION "Loudmouth is the communication backend needed by mp3tunes for syncing." URL "http://www.loudmouth-project.org" TYPE OPTIONAL ) include(CheckQtGlib) set_package_properties( QT5_GLIB PROPERTIES DESCRIPTION "Qt5 must be compiled with glib support for mp3tunes" URL "http://www.trolltech.com" TYPE OPTIONAL ) endif() if( WITH_IPOD OR WITH_MP3Tunes ) pkg_search_module( GOBJECT REQUIRED gobject-2.0 ) set_package_properties( GOBJECT PROPERTIES DESCRIPTION "Required by libgpod and mp3tunes." URL "http://www.gtk.org" TYPE OPTIONAL ) pkg_search_module( GLIB2 glib-2.0 ) set_package_properties( GLIB2 PROPERTIES DESCRIPTION "Required by libgpod and mp3tunes" URL "http://www.gtk.org" TYPE OPTIONAL ) endif() find_package(PythonInterp) set_package_properties( PYTHON PROPERTIES DESCRIPTION "Required for generating the autocompletion file for the script console" URL "https://www.python.org" TYPE OPTIONAL ) find_package(FFTW3 REQUIRED) if( BUILD_TESTING AND NOT WIN32 ) enable_testing() add_subdirectory( tests ) endif() add_subdirectory( src ) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) #Do not remove or modify these. The release script substitutes in for these #comments with appropriate doc and translation directories. #PO_SUBDIR #DOC_SUBDIR endif() if( WITH_UTILITIES ) add_subdirectory( utilities ) endif() if( WITH_PLAYGROUND ) add_subdirectory( playground ) message(STATUS "Included playground subdirectory in configuration") endif() include(CTest) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 186cf71e7d..5eb068ab6a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,984 +1,985 @@ # Improves speed of string concatenation add_definitions(-DQT_USE_FAST_CONCATENATION) add_definitions(-DQT_USE_FAST_OPERATOR_PLUS) if(NOT MSVC) add_definitions(-DQT_STRICT_ITERATORS) endif() if(APPLE) set(mac_SRCS app_mac.cpp mac/GrowlInterface.cpp ) # Notification Center Appeared in 10.8, or Darwin 12 if( CMAKE_SYSTEM_VERSION VERSION_GREATER "11.9.9") list(APPEND mac_SRCS mac/MacSystemNotify.mm) add_definitions(-DHAVE_NOTIFICATION_CENTER) endif() include_directories ( services/lastfm/ ) set( MAC_FILES_DIR ${CMAKE_SOURCE_DIR}/src/mac ) endif() include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ) add_subdirectory( core ) add_subdirectory( core-impl/collections ) add_subdirectory( core-impl/storage/sql ) add_subdirectory( context ) add_subdirectory( services ) add_subdirectory( scripting/scripts ) add_subdirectory( transcoding ) add_subdirectory( kconf_update ) add_subdirectory( importers ) ##################################################################### # PROXYCOLLECTION ##################################################################### set(aggregatecollection_SRCS core-impl/collections/aggregate/AggregateCollection.cpp core-impl/collections/aggregate/AggregateMeta.cpp core-impl/collections/aggregate/AggregateQueryMaker.cpp ) ##################################################################### # MEDIADEVICEFRAMEWORK ##################################################################### set(libmediadeviceframework_SRCS core-impl/collections/mediadevicecollection/MediaDeviceCollection.cpp core-impl/collections/mediadevicecollection/MediaDeviceCollectionLocation.cpp core-impl/collections/mediadevicecollection/MediaDeviceMeta.cpp core-impl/collections/mediadevicecollection/MediaDeviceTrackEditor.cpp core-impl/collections/mediadevicecollection/handler/MediaDeviceHandler.cpp core-impl/collections/mediadevicecollection/handler/MediaDeviceHandlerCapability.cpp core-impl/collections/mediadevicecollection/handler/capabilities/ArtworkCapability.cpp core-impl/collections/mediadevicecollection/handler/capabilities/PlaylistCapability.cpp core-impl/collections/mediadevicecollection/handler/capabilities/PodcastCapability.cpp core-impl/collections/mediadevicecollection/handler/capabilities/ReadCapability.cpp core-impl/collections/mediadevicecollection/handler/capabilities/WriteCapability.cpp core-impl/collections/mediadevicecollection/playlist/MediaDevicePlaylist.cpp core-impl/collections/mediadevicecollection/playlist/MediaDeviceUserPlaylistProvider.cpp core-impl/collections/mediadevicecollection/podcast/MediaDevicePodcastProvider.cpp core-impl/collections/mediadevicecollection/support/ConnectionAssistant.cpp core-impl/collections/mediadevicecollection/support/MediaDeviceInfo.cpp ) ##################################################################### # SERVICEFRAMEWORK ##################################################################### set(libserviceframework_SRCS services/DynamicServiceQueryMaker.cpp services/InfoParserBase.cpp services/ServiceAlbumCoverDownloader.cpp services/ServiceBase.cpp services/ServiceCapabilities.cpp services/ServiceCollection.cpp services/ServiceCollectionLocation.cpp services/ServiceCollectionTreeView.cpp services/ServiceMetaBase.cpp services/ServicePluginManager.cpp services/ServiceSqlCollection.cpp services/ServiceSqlQueryMaker.cpp services/ServiceSqlRegistry.cpp ) ##################################################################### # SERVICEBROWSER ##################################################################### set(libservicebrowser_SRCS browsers/servicebrowser/ServiceBrowser.cpp ) ##################################################################### # AMAROKURL ##################################################################### set(libamarokurl_SRCS amarokurls/AmarokUrl.cpp amarokurls/AmarokUrlAction.cpp amarokurls/AmarokUrlHandler.cpp amarokurls/BookmarkCurrentButton.cpp amarokurls/ContextUrlGenerator.cpp amarokurls/ContextUrlRunner.cpp amarokurls/NavigationUrlRunner.cpp amarokurls/NavigationUrlGenerator.cpp amarokurls/PlayUrlRunner.cpp amarokurls/PlayUrlGenerator.cpp amarokurls/BookmarkManager.cpp amarokurls/BookmarkManagerWidget.cpp amarokurls/BookmarkGroup.cpp amarokurls/BookmarkModel.cpp amarokurls/BookmarkTreeView.cpp amarokurls/BookmarkMetaActions.cpp ) ##################################################################### # SCRIPTABLESERVICE ##################################################################### set(libscriptableservice_SRCS services/scriptable/ScriptableService.cpp services/scriptable/ScriptableServiceCollection.cpp services/scriptable/ScriptableServiceCollectionTreeModel.cpp services/scriptable/ScriptableServiceInfoParser.cpp services/scriptable/ScriptableServiceManager.cpp services/scriptable/ScriptableServiceMeta.cpp services/scriptable/ScriptableServiceQueryMaker.cpp ) ##################################################################### # CONFIGDIALOG ##################################################################### set(libconfigdialog_SRCS configdialog/ConfigDialog.cpp configdialog/ConfigDialogBase.cpp configdialog/dialogs/CollectionConfig.cpp configdialog/dialogs/ExcludedLabelsDialog.cpp configdialog/dialogs/GeneralConfig.cpp configdialog/dialogs/MetadataConfig.cpp configdialog/dialogs/NotificationsConfig.cpp configdialog/dialogs/PlaybackConfig.cpp configdialog/dialogs/PluginsConfig.cpp configdialog/dialogs/ScriptsConfig.cpp configdialog/dialogs/ScriptSelector.cpp configdialog/dialogs/DatabaseConfig.cpp ) ki18n_wrap_ui(libconfigdialog_SRCS configdialog/dialogs/CollectionConfig.ui configdialog/dialogs/GeneralConfig.ui configdialog/dialogs/MetadataConfig.ui configdialog/dialogs/ExcludedLabelsDialog.ui configdialog/dialogs/NotificationsConfig.ui configdialog/dialogs/PlaybackConfig.ui configdialog/dialogs/DatabaseConfig.ui configdialog/dialogs/ScriptsConfig.ui ) set(libbrowserframework_SRCS browsers/BrowserBreadcrumbItem.cpp browsers/BrowserBreadcrumbWidget.cpp browsers/BrowserCategory.cpp browsers/BrowserCategoryList.cpp browsers/BrowserCategoryListModel.cpp browsers/BrowserCategoryListSortFilterProxyModel.cpp browsers/BrowserDock.cpp browsers/BrowserMessageArea.cpp browsers/CollectionSortFilterProxyModel.cpp browsers/CollectionTreeItem.cpp browsers/CollectionTreeItemModel.cpp browsers/CollectionTreeItemModelBase.cpp browsers/CollectionTreeView.cpp browsers/InfoProxy.cpp browsers/SingleCollectionTreeItemModel.cpp ) ##################################################################### # COLLECTIONBROWSER ##################################################################### set(libcollectionbrowser_SRCS browsers/collectionbrowser/CollectionBrowserTreeView.cpp browsers/collectionbrowser/CollectionWidget.cpp ) ##################################################################### # SYNCHRONIZATION ##################################################################### set(libsynchronization_SRCS synchronization/MasterSlaveSynchronizationJob.cpp synchronization/OneWaySynchronizationJob.cpp synchronization/SynchronizationBaseJob.cpp synchronization/UnionJob.cpp ) ##################################################################### # STATUSBAR ##################################################################### set(libstatusbar_SRCS statusbar/ProgressBar.cpp statusbar/KJobProgressBar.cpp statusbar/NetworkProgressBar.cpp statusbar/CompoundProgressBar.cpp statusbar/PopupWidget.cpp statusbar/LongMessageWidget.cpp ) ##################################################################### # META ##################################################################### set(libmetaimpl_SRCS core-impl/playlists/providers/user/UserPlaylistProvider.cpp core-impl/playlists/types/file/asx/ASXPlaylist.cpp core-impl/playlists/types/file/m3u/M3UPlaylist.cpp core-impl/playlists/types/file/pls/PLSPlaylist.cpp core-impl/playlists/types/file/PlaylistFileLoaderJob.cpp core-impl/playlists/types/file/PlaylistFileSupport.cpp core-impl/playlists/types/file/xspf/XSPFPlaylist.cpp core-impl/capabilities/AlbumActionsCapability.cpp core-impl/capabilities/timecode/TimecodeBoundedPlaybackCapability.cpp core-impl/capabilities/timecode/TimecodeLoadCapability.cpp core-impl/capabilities/timecode/TimecodeWriteCapability.cpp core-impl/capabilities/multisource/MultiSourceCapabilityImpl.cpp core-impl/meta/file/File.cpp core-impl/meta/file/FileTrackProvider.cpp core-impl/meta/multi/MultiTrack.cpp core-impl/meta/cue/CueFileSupport.cpp core-impl/meta/proxy/MetaProxy.cpp core-impl/meta/proxy/MetaProxyWorker.cpp core-impl/meta/stream/Stream.cpp core-impl/playlists/types/file/PlaylistFile.cpp core-impl/support/PersistentStatisticsStore.cpp core-impl/support/TagStatisticsStore.cpp core-impl/support/UrlStatisticsStore.cpp ) ##################################################################### # COLLECTION ##################################################################### set(collection_SRCS core-impl/collections/support/jobs/WriteTagsJob.cpp core-impl/collections/support/ArtistHelper.cpp core-impl/collections/support/CollectionManager.cpp core-impl/collections/support/CollectionLocationDelegateImpl.cpp core-impl/collections/support/MemoryCustomValue.cpp core-impl/collections/support/MemoryFilter.cpp core-impl/collections/support/MemoryMatcher.cpp core-impl/collections/support/MemoryMeta.cpp core-impl/collections/support/MemoryQueryMaker.cpp core-impl/collections/support/MemoryQueryMakerInternal.cpp core-impl/collections/support/MemoryQueryMakerHelper.cpp core-impl/collections/support/TrashCollectionLocation.cpp core-impl/collections/support/XmlQueryReader.cpp core-impl/collections/support/FileCollectionLocation.cpp core-impl/collections/support/Expression.cpp core-impl/collections/support/TextualQueryFilter.cpp ) ##################################################################### # STORAGE ##################################################################### set(storage_SRCS core-impl/storage/StorageManager.cpp ) ##################################################################### # SCANNER ##################################################################### set( scanner_SRCS scanner/GenericScanManager.cpp scanner/GenericScannerJob.cpp scanner/AbstractDirectoryWatcher.cpp scanner/AbstractScanResultProcessor.cpp ) ##################################################################### # CONTEXT ##################################################################### set( libcontextview_SRCS context/AmarokContextPackageStructure.cpp context/AppletLoader.cpp context/AppletModel.cpp context/ContextDock.cpp context/ContextView.cpp ) ##################################################################### # LYRICS ##################################################################### set( liblyrics_SRCS lyrics/LyricsManager.cpp ) ##################################################################### # PODCASTS ##################################################################### set(libpodcasts_SRCS core-impl/podcasts/sql/SqlPodcastMeta.cpp core-impl/podcasts/sql/SqlPodcastProvider.cpp core-impl/podcasts/sql/PodcastSettingsDialog.cpp core-impl/podcasts/sql/PodcastFilenameLayoutConfigDialog.cpp ) ##################################################################### # PLAYLISTBROWSER ##################################################################### set(libplaylistbrowser_SRCS browsers/playlistbrowser/APGCategory.cpp browsers/playlistbrowser/DynamicCategory.cpp browsers/playlistbrowser/DynamicBiasDelegate.cpp browsers/playlistbrowser/DynamicBiasDialog.cpp browsers/playlistbrowser/DynamicView.cpp browsers/playlistbrowser/PlaylistBrowserFilterProxy.cpp browsers/playlistbrowser/PlaylistBrowserModel.cpp browsers/playlistbrowser/PlaylistBrowserCategory.cpp browsers/playlistbrowser/QtGroupingProxy.cpp browsers/playlistbrowser/PlaylistBrowser.cpp browsers/playlistbrowser/PlaylistBrowserView.cpp browsers/playlistbrowser/UserPlaylistCategory.cpp browsers/playlistbrowser/PlaylistsInFoldersProxy.cpp browsers/playlistbrowser/PlaylistsByProviderProxy.cpp browsers/playlistbrowser/PodcastModel.cpp browsers/playlistbrowser/PodcastCategory.cpp browsers/playlistbrowser/UserPlaylistModel.cpp ) ##################################################################### # PLAYLISTMANAGER ##################################################################### set(libplaylistmanager_SRCS playlistmanager/PlaylistManager.cpp playlistmanager/file/PlaylistFileProvider.cpp playlistmanager/file/KConfigSyncRelStore.cpp playlistmanager/sql/SqlUserPlaylistProvider.cpp playlistmanager/sql/SqlPlaylist.cpp playlistmanager/sql/SqlPlaylistGroup.cpp playlistmanager/SyncedPlaylist.cpp playlistmanager/SyncedPodcast.cpp playlistmanager/SyncRelationStorage.cpp ) ##################################################################### # PLAYLIST ##################################################################### set(libplaylist_SRCS playlist/PlaylistActions.cpp playlist/PlaylistBreadcrumbItem.cpp playlist/PlaylistBreadcrumbItemSortButton.cpp playlist/PlaylistBreadcrumbLevel.cpp playlist/PlaylistDefines.cpp playlist/PlaylistController.cpp playlist/PlaylistInfoWidget.cpp playlist/PlaylistItem.cpp playlist/PlaylistModel.cpp playlist/PlaylistModelStack.cpp playlist/PlaylistRestorer.cpp playlist/PlaylistQueueEditor.cpp playlist/PlaylistSortWidget.cpp playlist/PlaylistViewUrlGenerator.cpp playlist/PlaylistViewUrlRunner.cpp playlist/PlaylistDock.cpp playlist/PlaylistToolBar.cpp playlist/ProgressiveSearchWidget.cpp playlist/UndoCommands.cpp playlist/layouts/LayoutEditDialog.cpp playlist/layouts/LayoutEditWidget.cpp playlist/layouts/LayoutConfigAction.cpp playlist/layouts/LayoutItemConfig.cpp playlist/layouts/LayoutManager.cpp playlist/layouts/PlaylistLayoutEditDialog.cpp playlist/navigators/AlbumNavigator.cpp playlist/navigators/DynamicTrackNavigator.cpp playlist/navigators/FavoredRandomTrackNavigator.cpp playlist/navigators/NavigatorConfigAction.cpp playlist/navigators/NonlinearTrackNavigator.cpp playlist/navigators/RandomAlbumNavigator.cpp playlist/navigators/RandomTrackNavigator.cpp playlist/navigators/RepeatAlbumNavigator.cpp playlist/navigators/RepeatTrackNavigator.cpp playlist/navigators/StandardTrackNavigator.cpp playlist/navigators/TrackNavigator.cpp playlist/view/PlaylistViewCommon.cpp playlist/view/listview/InlineEditorWidget.cpp playlist/view/listview/PrettyItemDelegate.cpp playlist/view/listview/PrettyListView.cpp playlist/view/listview/SourceSelectionPopup.cpp playlist/proxymodels/GroupingProxy.cpp playlist/proxymodels/ProxyBase.cpp playlist/proxymodels/SortAlgorithms.cpp playlist/proxymodels/SortFilterProxy.cpp playlist/proxymodels/SortScheme.cpp playlist/proxymodels/SearchProxy.cpp ) ki18n_wrap_ui(libplaylist_SRCS playlist/PlaylistQueueEditor.ui ) ##################################################################### # DYNAMIC ##################################################################### set(libdynamic_SRCS dynamic/TrackSet.cpp dynamic/BiasFactory.cpp dynamic/BiasedPlaylist.cpp dynamic/BiasSolver.cpp dynamic/DynamicPlaylist.cpp dynamic/DynamicModel.cpp # biases dynamic/Bias.cpp dynamic/biases/AlbumPlayBias.cpp dynamic/biases/EchoNestBias.cpp dynamic/biases/IfElseBias.cpp dynamic/biases/PartBias.cpp dynamic/biases/QuizPlayBias.cpp dynamic/biases/TagMatchBias.cpp dynamic/biases/SearchQueryBias.cpp ) ##################################################################### # DBUS ##################################################################### set(dbus_SRCS dbus/mpris1/RootHandler.cpp dbus/mpris1/PlayerHandler.cpp dbus/mpris1/TrackListHandler.cpp dbus/mpris2/DBusAbstractAdaptor.cpp dbus/mpris2/Mpris2.cpp dbus/mpris2/MediaPlayer2.cpp dbus/mpris2/MediaPlayer2Player.cpp dbus/mpris2/MediaPlayer2AmarokExtensions.cpp dbus/mpris2/DBusAmarokApp.cpp dbus/CollectionDBusHandler.cpp dbus/DBusQueryHelper.cpp ) ##################################################################### # SCRIPTING INTERFACE ##################################################################### set(scriptengine_SRCS scripting/scriptengine/AmarokBookmarkScript.cpp scripting/scriptengine/AmarokCollectionScript.cpp scripting/scriptengine/AmarokCollectionViewScript.cpp scripting/scriptengine/AmarokEngineScript.cpp scripting/scriptengine/AmarokEqualizerScript.cpp scripting/scriptengine/AmarokInfoScript.cpp scripting/scriptengine/AmarokKNotifyScript.cpp scripting/scriptengine/AmarokNetworkScript.cpp scripting/scriptengine/AmarokOSDScript.cpp scripting/scriptengine/AmarokPlaylistManagerScript.cpp scripting/scriptengine/AmarokPlaylistScript.cpp scripting/scriptengine/AmarokScript.cpp scripting/scriptengine/AmarokScriptConfig.cpp scripting/scriptengine/AmarokScriptableServiceScript.cpp scripting/scriptengine/AmarokServicePluginManagerScript.cpp scripting/scriptengine/AmarokStatusbarScript.cpp scripting/scriptengine/AmarokStreamItemScript.cpp scripting/scriptengine/AmarokWindowScript.cpp scripting/scriptengine/AmarokScriptXml.cpp scripting/scriptengine/ScriptImporter.cpp scripting/scriptengine/ScriptingDefines.cpp scripting/scriptengine/exporters/CollectionTypeExporter.cpp scripting/scriptengine/exporters/MetaTypeExporter.cpp scripting/scriptengine/exporters/PlaylistExporter.cpp scripting/scriptengine/exporters/PlaylistProviderExporter.cpp scripting/scriptengine/exporters/QueryMakerExporter.cpp scripting/scriptengine/exporters/ScriptableBiasExporter.cpp ) set(scriptconsole_SRCS scripting/scriptconsole/CompletionModel.cpp scripting/scriptconsole/ScriptConsole.cpp scripting/scriptconsole/ScriptEditorDocument.cpp scripting/scriptconsole/ScriptConsoleItem.cpp ) if (PYTHONINTERP_FOUND) execute_process(COMMAND "${PYTHON_EXECUTABLE}" ${CMAKE_SOURCE_DIR}/src/scripting/scriptengine/PHAACG2.py ${CMAKE_SOURCE_DIR}/src/scripting/scriptengine ${CMAKE_BINARY_DIR}/scriptconsole) install(FILES ${CMAKE_BINARY_DIR}/scriptconsole/AutoComplete.txt DESTINATION ${KDE_INSTALL_DATADIR}/amarok/scriptconsole) endif() ##################################################################### # PLAYLIST GENERATOR ##################################################################### set(apg_SRCS playlistgenerator/Constraint.cpp playlistgenerator/ConstraintGroup.cpp playlistgenerator/ConstraintFactory.cpp playlistgenerator/ConstraintNode.cpp playlistgenerator/ConstraintSolver.cpp playlistgenerator/Preset.cpp playlistgenerator/PresetEditDialog.cpp playlistgenerator/PresetModel.cpp playlistgenerator/TreeController.cpp playlistgenerator/TreeModel.cpp playlistgenerator/constraints/Checkpoint.cpp playlistgenerator/constraints/Matching.cpp playlistgenerator/constraints/PlaylistDuration.cpp playlistgenerator/constraints/PlaylistFileSize.cpp playlistgenerator/constraints/PlaylistLength.cpp playlistgenerator/constraints/PreventDuplicates.cpp playlistgenerator/constraints/TagMatch.cpp playlistgenerator/constraints/TagMatchSupport.cpp playlistgenerator/constraints/TrackSpreader.cpp ) ki18n_wrap_ui(apg_SRCS playlistgenerator/ConstraintGroupEditWidget.ui playlistgenerator/PresetEditDialog.ui playlistgenerator/constraints/CheckpointEditWidget.ui playlistgenerator/constraints/PlaylistDurationEditWidget.ui playlistgenerator/constraints/PlaylistFileSizeEditWidget.ui playlistgenerator/constraints/PlaylistLengthEditWidget.ui playlistgenerator/constraints/PreventDuplicatesEditWidget.ui playlistgenerator/constraints/TagMatchEditWidget.ui ) ##################################################################### # NETWORK ACCESS ##################################################################### set(network_access_SRCS network/NetworkAccessManagerProxy.cpp ) if( CMAKE_BUILD_TYPE_TOLOWER MATCHES debug ) set(network_access_SRCS ${network_access_SRCS} network/NetworkAccessViewer.cpp ) ki18n_wrap_ui(network_access_SRCS network/NetworkRequests.ui ) endif() ##################################################################### # STATISTICS SYNCHRONIZATION ##################################################################### set( statsyncing_SRCS statsyncing/Config.cpp statsyncing/Controller.cpp statsyncing/Options.cpp statsyncing/Process.cpp statsyncing/Provider.cpp statsyncing/ProviderFactory.cpp statsyncing/ScrobblingService.cpp statsyncing/SimpleTrack.cpp statsyncing/SimpleWritableTrack.cpp statsyncing/Track.cpp statsyncing/TrackTuple.cpp statsyncing/collection/CollectionProvider.cpp statsyncing/collection/CollectionTrack.cpp statsyncing/jobs/MatchTracksJob.cpp statsyncing/jobs/SynchronizeTracksJob.cpp statsyncing/models/CommonModel.cpp statsyncing/models/MatchedTracksModel.cpp statsyncing/models/ProvidersModel.cpp statsyncing/models/SingleTracksModel.cpp statsyncing/ui/ChooseProvidersPage.cpp statsyncing/ui/CreateProviderDialog.cpp statsyncing/ui/ConfigureProviderDialog.cpp statsyncing/ui/MatchedTracksPage.cpp statsyncing/ui/TrackDelegate.cpp ) ki18n_wrap_ui( statsyncing_SRCS statsyncing/ui/ChooseProvidersPage.ui statsyncing/ui/MatchedTracksPage.ui ) ##################################################################### # STATISTICS IMPORTERS ##################################################################### set( importers_SRCS importers/ImporterManager.cpp importers/ImporterProvider.cpp importers/ImporterSqlConnection.cpp importers/SimpleImporterConfigWidget.cpp ) ##################################################################### # LIBAMAROK ##################################################################### set(amaroklib_LIB_SRCS ${libscriptableservice_SRCS} ${libbrowserframework_SRCS} ${libcontextview_SRCS} ${libcollectionbrowser_SRCS} ${libconfigdialog_SRCS} ${liblyrics_SRCS} ${libplaylist_SRCS} ${aggregatecollection_SRCS} ${libpodcasts_SRCS} ${libmediadeviceframework_SRCS} ${libserviceframework_SRCS} ${libservicebrowser_SRCS} ${libdynamic_SRCS} ${libmetaimpl_SRCS} ${apg_SRCS} ${collection_SRCS} ${storage_SRCS} ${scanner_SRCS} ${mac_SRCS} ${network_access_SRCS} ${libplaylistbrowser_SRCS} ${libplaylistmanager_SRCS} ${dbus_SRCS} ${scriptengine_SRCS} ${scriptconsole_SRCS} ${libstatusbar_SRCS} ${libamarokurl_SRCS} ${libsynchronization_SRCS} ${statsyncing_SRCS} ${importers_SRCS} aboutdialog/AnimatedBarWidget.cpp aboutdialog/AnimatedWidget.cpp aboutdialog/ExtendedAboutDialog.cpp aboutdialog/FramedLabel.cpp aboutdialog/OcsData.cpp aboutdialog/OcsPersonItem.cpp aboutdialog/OcsPersonListWidget.cpp ActionClasses.cpp AmarokMimeData.cpp AmarokProcess.cpp App.cpp CaseConverter.cpp EngineController.cpp KNotificationBackend.cpp MainWindow.cpp MediaDeviceCache.cpp MediaDeviceMonitor.cpp PluginManager.cpp QStringx.cpp scripting/scriptmanager/ScriptManager.cpp scripting/scriptmanager/ScriptItem.cpp scripting/scriptmanager/ScriptUpdater.cpp SvgHandler.cpp SvgTinter.cpp TrayIcon.cpp core-impl/logger/DebugLogger.cpp core-impl/meta/timecode/TimecodeObserver.cpp core-impl/meta/timecode/TimecodeMeta.cpp core-impl/meta/timecode/TimecodeTrackProvider.cpp core-impl/support/TrackLoader.cpp covermanager/CoverCache.cpp covermanager/CoverFetcher.cpp covermanager/CoverFetchingActions.cpp covermanager/CoverFetchQueue.cpp covermanager/CoverFetchUnit.cpp covermanager/CoverFoundDialog.cpp covermanager/CoverManager.cpp covermanager/CoverViewDialog.cpp databaseimporter/SqlBatchImporter.cpp databaseimporter/SqlBatchImporterConfig.cpp dialogs/CollectionSetup.cpp dialogs/DatabaseImporterDialog.cpp dialogs/DiagnosticDialog.cpp dialogs/EditFilterDialog.cpp dialogs/EqualizerDialog.cpp dialogs/MusicBrainzTagger.cpp dialogs/OrganizeCollectionDialog.cpp dialogs/TrackOrganizer.cpp dialogs/TagDialog.cpp dialogs/TagGuesser.cpp dialogs/TagGuesserDialog.cpp dialogs/LabelListModel.cpp equalizer/EqualizerPresets.cpp browsers/filebrowser/DirPlaylistTrackFilterProxyModel.cpp browsers/filebrowser/FileBrowser.cpp browsers/filebrowser/FileView.cpp musicbrainz/MusicBrainzFinder.cpp musicbrainz/MusicBrainzTagsItem.cpp musicbrainz/MusicBrainzTagsModel.cpp musicbrainz/MusicBrainzTagsModelDelegate.cpp musicbrainz/MusicBrainzTagsView.cpp musicbrainz/MusicBrainzXmlParser.cpp OpmlOutline.cpp OpmlParser.cpp OpmlWriter.cpp PaletteHandler.cpp PopupDropperFactory.cpp playback/DelayedDoers.cpp playback/EqualizerController.cpp playback/Fadeouter.cpp playback/PowerManager.cpp statemanagement/ApplicationController.cpp statemanagement/DefaultApplicationController.cpp toolbar/CurrentTrackToolbar.cpp toolbar/SlimToolbar.cpp toolbar/VolumePopupButton.cpp toolbar/MainToolbar.cpp widgets/AlbumBreadcrumbWidget.cpp widgets/AmarokDockWidget.cpp widgets/AnimatedLabelStack.cpp widgets/BoxWidget.cpp widgets/BreadcrumbItemButton.cpp widgets/ClearSpinBox.cpp widgets/CoverLabel.cpp widgets/HintLineEdit.cpp widgets/kdatecombo.cpp widgets/TokenDropTarget.cpp widgets/EditDeleteComboBoxView.cpp widgets/EditDeleteDelegate.cpp widgets/ElidingButton.cpp widgets/FilenameLayoutWidget.cpp widgets/FlowLayout.cpp widgets/HorizontalDivider.cpp widgets/IconButton.cpp widgets/ComboBox.cpp widgets/LineEdit.cpp widgets/Osd.cpp widgets/TimeLabel.cpp widgets/PixmapViewer.cpp widgets/PlayPauseButton.cpp widgets/PrettyTreeView.cpp widgets/PrettyTreeDelegate.cpp widgets/ProgressWidget.cpp widgets/SearchWidget.cpp widgets/SliderWidget.cpp widgets/StarManager.cpp widgets/TokenPool.cpp widgets/Token.cpp widgets/TokenWithLayout.cpp widgets/VolumeDial.cpp widgets/TrackActionButton.cpp widgets/BookmarkTriangle.cpp widgets/BookmarkPopup.cpp widgets/TrackSelectWidget.cpp widgets/MetaQueryWidget.cpp GlobalCollectionActions.cpp GlobalCurrentTrackActions.cpp moodbar/MoodbarManager.cpp ) if( LIBLASTFM_FOUND ) set(amaroklib_LIB_SRCS ${amaroklib_LIB_SRCS} LastfmReadLabelCapability.cpp ) include_directories( ${LIBLASTFM_INCLUDE_DIR}/.. ${LIBLASTFM_INCLUDE_DIR}) set( EXTRA_LIBS ${LIBLASTFM_LIBRARY} ) endif() if( LIBOFA_FOUND AND AVCODEC_FOUND AND AVFORMAT_FOUND AND AVUTIL_FOUND ) add_definitions( ${AVCODEC_DEFINITIONS} ${AVFORMAT_DEFINITIONS} ${AVUTIL_DEFINITIONS} ) include_directories( ${AVCODEC_INCLUDE_DIRS} ${AVFORMAT_INCLUDE_DIRS} ${AVUTIL_INCLUDE_DIRS} ) set( EXTRA_LIBS ${EXTRA_LIBS} ${LIBOFA_LIBRARY} ${AVFORMAT_LIBRARIES} ${AVCODEC_LIBRARIES} ${AVUTIL_LIBRARIES} ) set( amaroklib_LIB_SRCS ${amaroklib_LIB_SRCS} musicbrainz/MusicDNSAudioDecoder.cpp musicbrainz/MusicDNSFinder.cpp musicbrainz/MusicDNSXmlParser.cpp ) endif() qt5_add_dbus_adaptor( AMAROK_MPRIS1_ADAPTOR_SRCS dbus/mpris1/org.freedesktop.MediaPlayer.root.xml dbus/mpris1/RootHandler.h Mpris1::RootHandler Mpris1RootAdaptor Mpris1RootAdaptor ) qt5_add_dbus_adaptor( AMAROK_MPRIS1_ADAPTOR_SRCS dbus/mpris1/org.freedesktop.MediaPlayer.player.xml dbus/mpris1/PlayerHandler.h Mpris1::PlayerHandler Mpris1PlayerAdaptor Mpris1PlayerAdaptor ) qt5_add_dbus_adaptor( AMAROK_MPRIS1_ADAPTOR_SRCS dbus/mpris1/org.freedesktop.MediaPlayer.tracklist.xml dbus/mpris1/TrackListHandler.h Mpris1::TrackListHandler Mpris1TrackListAdaptor Mpris1TrackListAdaptor ) qt5_add_dbus_adaptor( AMAROK_MPRIS1_ADAPTOR_SRCS dbus/org.kde.amarok.App.xml dbus/mpris1/RootHandler.h Mpris1::RootHandler Mpris1AmarokAppAdaptor Mpris1AmarokAppAdaptor ) qt5_add_dbus_adaptor( AMAROK_MPRIS1_ADAPTOR_SRCS dbus/mpris1/org.kde.amarok.Mpris1Extensions.Player.xml dbus/mpris1/PlayerHandler.h Mpris1::PlayerHandler Mpris1AmarokPlayerAdaptor Mpris1AmarokPlayerAdaptor ) qt5_add_dbus_adaptor( AMAROK_MPRIS1_ADAPTOR_SRCS dbus/org.kde.amarok.Collection.xml dbus/CollectionDBusHandler.h CollectionDBusHandler CollectionAdaptor CollectionAdaptor ) # suppress deprecated methods warnings if(NOT WIN32) set_source_files_properties(${AMAROK_MPRIS1_ADAPTOR_SRCS} PROPERTIES COMPILE_FLAGS -Wno-deprecated-declarations) endif() set( amaroklib_DEPENDS "amarokpud" ) set( amaroklib_DEPENDS "amarokcore" ) set( amaroklib_DEPENDS "amarok-transcoding" ) # depends on generated ui_*.h file kconfig_add_kcfg_files(amaroklib_LIB_SRCS amarokconfig.kcfgc) add_custom_target(amarokconfig_h DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/amarokconfig.h) ki18n_wrap_ui(amaroklib_LIB_SRCS aboutdialog/OcsPersonItem.ui dialogs/EditFilterDialog.ui dialogs/EqualizerDialog.ui dialogs/MusicBrainzTagger.ui dialogs/TagDialogBase.ui dialogs/TagGuessOptions.ui dialogs/OrganizeCollectionOptions.ui dialogs/OrganizeCollectionDialogBase.ui playlist/layouts/PlaylistLayoutEditDialog.ui core-impl/podcasts/sql/PodcastSettingsBase.ui core-impl/podcasts/sql/SqlPodcastProviderSettingsWidget.ui core-impl/podcasts/sql/PodcastFilenameLayoutConfigWidget.ui browsers/playlistbrowser/PodcastCategoryBase.ui ) add_library(amaroklib SHARED ${amaroklib_LIB_SRCS} ${AMAROK_MPRIS1_ADAPTOR_SRCS}) target_link_libraries(amaroklib Phonon::phonon4qt5 KF5::Archive KF5::Attica KF5::CoreAddons KF5::Declarative KF5::GlobalAccel KF5::GuiAddons KF5::I18n KF5::IconThemes KF5::KCMUtils KF5::KIOCore KF5::KIOFileWidgets KF5::KIOWidgets KF5::KIONTLM KF5::NewStuff KF5::Notifications KF5::NotifyConfig KF5::Package KF5::TextEditor KF5::ThreadWeaver KF5::WidgetsAddons KF5::WindowSystem ${QT_QTSCRIPTTOOLS_LIBRARY} Qt5::Gui Qt5::Quick Qt5::QuickWidgets Qt5::Script Qt5::ScriptTools Qt5::Sql Qt5::Svg ${CMAKE_DL_LIBS} Threads::Threads ${EXTRA_LIBS} amarokpud amarokcore amarok-transcoding amarokshared ) if( Qt5WebEngine_FOUND ) target_link_libraries( amaroklib Qt5::WebEngine ) add_definitions( -DWITH_QT_WEBENGINE ) endif() include_directories(${TAGLIB_INCLUDES}) add_definitions(${TAGLIB_CFLAGS}) target_link_libraries(amaroklib ${TAGLIB_LIBRARIES}) if( TAGLIB-EXTRAS_FOUND ) include_directories(${TAGLIB-EXTRAS_INCLUDES}) add_definitions(${TAGLIB-EXTRAS_CFLAGS}) target_link_libraries(amaroklib ${TAGLIB-EXTRAS_LIBRARIES}) endif() if(WIN32) target_link_libraries(amaroklib Qt5::WebKitWidgets) endif() if(APPLE) target_link_libraries(amaroklib "/System/Library/Frameworks/Foundation.framework") set_target_properties(amaroklib PROPERTIES LINK_FLAGS "-undefined dynamic_lookup") endif() set_target_properties(amaroklib PROPERTIES VERSION 1.0.0 SOVERSION 1 ) install(TARGETS amaroklib ${INSTALL_TARGETS_DEFAULT_ARGS} ) ##################################################################### # AMAROK ##################################################################### set( amarok_SRCS main.cpp ) file(GLOB ICONS_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/../images/*-apps-amarok.png) ecm_add_app_icon(amarok_SRCS ICONS ${ICONS_SRCS}) add_executable(amarok ${amarok_SRCS}) if(APPLE) set_target_properties(amarok PROPERTIES LINK_FLAGS "-undefined dynamic_lookup") set(MACOSX_BUNDLE_BUNDLE_NAME "Amarok 2") set(MACOSX_BUNDLE_BUNDLE_VERSION "2.8.0-git") set(MACOSX_BUNDLE_COPYRIGHT "Amarok Team") set_target_properties(amarok PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${MAC_FILES_DIR}/Info.plist.template) set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/amarok.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources) endif() target_link_libraries(amarok KF5::CoreAddons + KF5::Crash KF5::DBusAddons KF5::I18n amarokcore amaroklib ${X11_LIBRARIES} ) install(TARGETS amarok ${INSTALL_TARGETS_DEFAULT_ARGS}) ########### install files ############### install(PROGRAMS org.kde.amarok.desktop DESTINATION ${KDE_INSTALL_APPDIR} ) install(PROGRAMS org.kde.amarok_containers.desktop DESTINATION ${KDE_INSTALL_APPDIR} ) install(FILES org.kde.amarok.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR}) install(FILES amarok-plugin.desktop DESTINATION ${KDE_INSTALL_KSERVICETYPES5DIR}) install(FILES amarok-contextapplet.desktop DESTINATION ${KDE_INSTALL_KSERVICETYPES5DIR}) install(FILES amarok_codecinstall.desktop DESTINATION ${KDE_INSTALL_KSERVICETYPES5DIR}) install(FILES amarok_append.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}/ServiceMenus) install(FILES amarok-play-audiocd.desktop DESTINATION ${KDE_INSTALL_DATADIR}/solid/actions) install(FILES amarok.knsrc DESTINATION ${KDE_INSTALL_CONFDIR}) # protocol handlers install(FILES amarokurls/amarok.protocol DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) install(FILES amarokitpc.protocol DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) #install(FILES amarokpcast.protocol DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) install(FILES amarokconfig.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR} ) install(FILES dbus/mpris1/org.freedesktop.MediaPlayer.root.xml dbus/mpris1/org.freedesktop.MediaPlayer.player.xml dbus/mpris1/org.freedesktop.MediaPlayer.tracklist.xml dbus/org.kde.amarok.App.xml dbus/org.kde.amarok.Collection.xml dbus/mpris1/org.kde.amarok.Mpris1Extensions.Player.xml dbus/mpris2/org.kde.amarok.Mpris2Extensions.Player.xml DESTINATION ${KDE_INSTALL_DBUSINTERFACEDIR}) install(FILES services/InfoParserLoading.html browsers/hover_info_template.html DESTINATION ${KDE_INSTALL_DATADIR}/amarok/data) ecm_install_icons(ICONS DESTINATION ${KDE_INSTALL_ICONDIR} THEME hicolor ) diff --git a/src/main.cpp b/src/main.cpp index 9c87bc143e..7235ae93af 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,353 +1,356 @@ /**************************************************************************************** * Copyright (c) 2002 Mark Kretschmann * * * * This program is free software; you can redistribute it and/or modify it under * * the terms of the GNU General Public License as published by the Free Software * * Foundation; either version 2 of the License, or (at your option) any later * * version. * * * * This program is distributed in the hope that it will be useful, but WITHOUT ANY * * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * * PARTICULAR PURPOSE. See the GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License along with * * this program. If not, see . * ****************************************************************************************/ #include "core/support/Amarok.h" #include "core/support/Debug.h" #include "App.h" #include "aboutdialog/OcsData.h" #include #include +#include #include #include #include #ifdef WITH_QT_WEBENGINE #include #endif #ifdef Q_WS_X11 #include #endif #include #ifdef Q_OS_WIN AMAROK_EXPORT OcsData ocsData; #endif int main( int argc, char *argv[] ) { App app(argc, argv); #ifdef WITH_QT_WEBENGINE QtWebEngine::initialize(); #endif app.setApplicationDisplayName(i18n("Amarok")); QCoreApplication::setApplicationName("amarok"); QCoreApplication::setOrganizationDomain("kde.org"); QCoreApplication::setApplicationVersion(AMAROK_VERSION); + KCrash::initialize(); + KAboutData aboutData( "amarok", ki18n( "Amarok" ).toString(), AMAROK_VERSION, ki18n( "The audio player by KDE" ).toString(), KAboutLicense::GPL, ki18n( "(C) 2002-2003, Mark Kretschmann\n(C) 2003-2013, The Amarok Development Squad" ).toString(), ki18n( "IRC:\nirc.freenode.net - #amarok, #amarok.de, #amarok.es, #amarok.fr\n\nFeedback:\namarok@kde.org\n\n(Build Date: %1)" ).subs( __DATE__ ).toString(), ( "http://amarok.kde.org" ) ); //------------ About data ---------------------- //Currently active Authors extern OcsData ocsData; aboutData.addAuthor( ki18n("Bart 'Where are my toothpicks' Cerneels").toString(), ki18n("Developer (Stecchino)").toString(), "bart.cerneels@kde.org", "http://commonideas.blogspot.com" ); ocsData.addAuthor( "Stecchino", aboutData.authors().last() ); aboutData.addAuthor( ki18n("Edward \"Hades\" Toroshchin").toString(), ki18n("Developer (dr_lepper)").toString(), "edward.hades@gmail.com" ); ocsData.addAuthor( "hadeschief", aboutData.authors().last() ); aboutData.addAuthor( ki18n("Mark Kretschmann" ).toString(), ki18n("Project founder (markey)").toString(), "kretschmann@kde.org", "https://plus.google.com/102602725322221030250/posts" ); ocsData.addAuthor( "MarkKretschmann", aboutData.authors().last() ); aboutData.addAuthor( ki18n("Matěj Laitl").toString(), ki18n("iPod collection rewrite & more (strohel)").toString(), "matej@laitl.cz", "http://strohel.blogspot.com/" ); ocsData.addAuthor( "strohel", aboutData.authors().last() ); aboutData.addAuthor( ki18n("Myriam Schweingruber").toString(), ki18n("Rokymoter, Bug triaging (Mamarok)").toString(), "myriam@kde.org", "http://blogs.fsfe.org/myriam" ); ocsData.addAuthor( "Mamarok", aboutData.authors().last() ); aboutData.addAuthor( ki18n("Ralf 'SalsaMaster' Engels").toString(), ki18n("Developer (rengels)").toString(), "ralf.engels@nokia.com" ); ocsData.addAuthor( QString(), aboutData.authors().last() ); aboutData.addAuthor( ki18n("Patrick von Reth").toString(), ki18n("Windows build (TheOneRing)").toString(), "patrick.vonreth@gmail.com" ); ocsData.addAuthor( QString(), aboutData.authors().last() ); aboutData.addAuthor( ki18n("Rick W. Chen").toString(), ki18n("Developer (stuffcorpse)").toString(), "stuffcorpse@archlinux.us" ); ocsData.addAuthor( "stuffcorpse", aboutData.authors().last() ); aboutData.addAuthor( ki18n("Sam Lade").toString(), ki18n("Developer (Sentynel)").toString(), "sam@sentynel.com" ); ocsData.addAuthor( "Sentynel", aboutData.authors().last() ); aboutData.addAuthor( ki18n("Sven Krohlas").toString(), ki18n("Rokymoter, Developer (sven423)").toString(), "sven@asbest-online.de" ); ocsData.addAuthor( "krohlas", aboutData.authors().last() ); aboutData.addAuthor( ki18n("Téo Mrnjavac").toString(), ki18n("Developer (Teo`)").toString(), "teo@kde.org", "http://teom.wordpress.com/" ); ocsData.addAuthor( "teom", aboutData.authors().last() ); aboutData.addAuthor( ki18n("Valorie Zimmerman").toString(), ki18n("Rokymoter, Handbook (valorie)").toString(), "valorie@kde.org" ); ocsData.addAuthor( "valorie", aboutData.authors().last() ); //Inactive authors /* This list should contain people who still hold major copyright on the current code * For instance: does not include authors of 1.4 who have not contributed to 2.x */ aboutData.addAuthor( ki18n("Inactive authors").toString(), ki18n("Amarok authorship is not a hobby, it's a lifestyle. " "But when people move on we want to keep respecting " "them by mentioning them here:").toString(), "" ); ocsData.addAuthor( "%%category%%", aboutData.authors().last() ); aboutData.addAuthor( ki18n("Ian 'The Beard' Monroe").toString(), ki18n("Developer (eean)").toString(), "ian@monroe.nu" ); ocsData.addAuthor( "eean", aboutData.authors().last() ); aboutData.addAuthor( ki18n("Jeff 'IROKSOHARD' Mitchell").toString(), ki18n("Developer (jefferai)").toString(), "mitchell@kde.org" ); ocsData.addAuthor( "jefferai", aboutData.authors().last() ); aboutData.addAuthor( ki18n("Leo Franchi").toString(), ki18n("Developer (lfranchi)").toString(), "lfranchi@kde.org" ); ocsData.addAuthor( "lfranchi", aboutData.authors().last() ); aboutData.addAuthor( ki18n("Lydia 'is wrong(TM)' Pintscher").toString(), ki18n("Release Vixen (Nightrose)").toString(), "lydia@kde.org" ); ocsData.addAuthor( "nightrose", aboutData.authors().last() ); aboutData.addCredit( ki18n("Max Howell").toString(), ki18n("Developer, Vision").toString(), "max.howell@methylblue.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addAuthor( ki18n("Maximilian Kossick").toString(), ki18n("Developer (maxx_k)").toString(), "maximilian.kossick@gmail.com" ); ocsData.addAuthor( QString(), aboutData.authors().last() ); aboutData.addAuthor( ki18n("Nikolaj Hald 'Also very hot' Nielsen").toString(), ki18n("Developer (nhn)").toString(), "nhn@kde.org" ); ocsData.addAuthor( "nhnFreespirit", aboutData.authors().last() ); aboutData.addCredit( ki18n("Seb 'Surfin' down under' Ruiz").toString(), ki18n("Developer (sebr)").toString(), "ruiz@kde.org" ); ocsData.addCredit( "seb", aboutData.credits().last() ); //Contributors aboutData.addCredit( ki18n("Alejandro Wainzinger").toString(), ki18n("Developer (xevix)").toString(), "aikawarazuni@gmail.com" ); ocsData.addCredit( "xevix", aboutData.credits().last() ); aboutData.addCredit( ki18n("Alex Merry").toString(), ki18n("Developer, Replay Gain support").toString(), "kde@randomguy3.me.uk" ); ocsData.addCredit( "randomguy3", aboutData.credits().last() ); aboutData.addCredit( ki18n("Casey Link").toString(), ki18n("MP3tunes integration").toString(), "unnamedrambler@gmail.com" ); ocsData.addCredit( "Ramblurr", aboutData.credits().last() ); aboutData.addCredit( ki18n("Casper van Donderen").toString(), ki18n("Windows porting").toString(), "casper.vandonderen@gmail.com" ); ocsData.addCredit( "cvandonderen", aboutData.credits().last() ); aboutData.addCredit( ki18n("Christie Harris").toString(), ki18n("Rokymoter (dangle)").toString(), "dangle.baby@gmail.com" ); ocsData.addCredit( "dangle", aboutData.credits().last() ); aboutData.addCredit( ki18n("Dan Leinir Turthra Jensen").toString(), ki18n("Usability").toString(), "admin@leinir.dk" ); ocsData.addCredit( "leinir", aboutData.credits().last() ); aboutData.addCredit( ki18n("Dan 'Hey, it compiled...' Meltzer").toString(), ki18n("Developer (hydrogen)").toString(), "parallelgrapefruit@gmail.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Daniel Caleb Jones").toString(), ki18n("Biased playlists").toString(), "danielcjones@gmail.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Daniel Dewald").toString(), ki18n("Tag Guesser, Labels, Spectrum Analyzer").toString(), "Daniel.Dewald@time-shift.de" ); ocsData.addCredit( "TheCrasher", aboutData.credits().last() ); aboutData.addCredit( ki18n("Daniel Winter").toString(), ki18n("Nepomuk integration").toString(), "dw@danielwinter.de" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Frank Meerkötter").toString(), ki18n("Podcast improvements").toString(), "frank@meerkoetter.org" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Greg Meyer").toString(), ki18n("Live CD, Bug squashing (oggb4mp3)").toString(), "greg@gkmweb.com" ); ocsData.addCredit( "oggb4mp3", aboutData.credits().last() ); aboutData.addCredit( ki18n("Harald Sitter").toString(), ki18n("Phonon, Lord-President of KDE Multimedia (apachelogger)").toString(), "harald.sitter@kdemail.net" ); ocsData.addCredit( "apachelogger", aboutData.credits().last() ); aboutData.addCredit( ki18n("John Atkinson").toString(), ki18n("Assorted patches").toString(), "john@fauxnetic.co.uk" ); ocsData.addCredit( "fauxnetic", aboutData.credits().last() ); aboutData.addCredit( ki18n("Kenneth Wesley Wimer II").toString(), ki18n("Icons").toString(), "kwwii@bootsplash.org" ); ocsData.addCredit( "kwwii", aboutData.credits().last() ); aboutData.addCredit( ki18n("Kevin Funk").toString(), ki18n("Developer, Website theme (KRF)").toString(), "krf@electrostorm.net" ); ocsData.addCredit( "krf", aboutData.credits().last() ); aboutData.addCredit( ki18n("Kuba Serafinowski").toString(), ki18n("Rokymoter").toString(), "zizzfizzix@gmail.com" ); ocsData.addCredit( "zizzfizzix", aboutData.credits().last() ); aboutData.addCredit( ki18n("Lee Olson").toString(), ki18n("Artwork").toString(), "leetolson@gmail.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Ljubomir Simin").toString(), ki18n("Rokymoter (ljubomir)").toString(), "ljubomir.simin@gmail.com" ); ocsData.addCredit( "ljubomir", aboutData.credits().last() ); aboutData.addCredit( ki18n("Lucas Gomes").toString(), ki18n("Developer (MaskMaster)").toString(), "x8lucas8x@gmail.com" ); ocsData.addCredit( "x8lucas8x", aboutData.credits().last() ); aboutData.addCredit( ki18n("Mathias Panzenböck").toString(), ki18n("Podcast improvements").toString(), "grosser.meister.morti@gmx.net" ); ocsData.addCredit( "panzi", aboutData.credits().last() ); aboutData.addCredit( ki18n("Mikko Caldara").toString(), ki18n("Bug triaging and sanitizing").toString(), "mikko.cal@gmail.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Nikhil Marathe").toString(), ki18n("UPnP support and patches (nsm)").toString(), "nsm.nikhil@gmail.com" ); ocsData.addCredit( "nikhilm", aboutData.credits().last() ); aboutData.addCredit( ki18n("Nuno Pinheiro").toString(), ki18n("Artwork").toString(), "nuno@oxygen-icons.org" ); ocsData.addCredit( "nunopinheirokde", aboutData.credits().last() ); aboutData.addCredit( ki18n("Olivier Bédard").toString(), ki18n("Website hosting").toString(), "paleo@pwsp.net" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Pasi Lalinaho").toString(), ki18n("Rokymoter (emunkki)").toString(), "pasi@getamarok.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Peter Zhou Lei").toString(), ki18n("Scripting interface").toString(), "peterzhoulei@gmail.com" ); ocsData.addCredit( "peterzl", aboutData.credits().last() ); aboutData.addCredit( ki18n("Phalgun Guduthur").toString(), ki18n("Nepomuk Collection (phalgun)").toString(), "me@phalgun.in" ); ocsData.addCredit( "phalgun", aboutData.credits().last() ); aboutData.addCredit( ki18n("Scott Wheeler").toString(), ki18n("TagLib & ktrm code").toString(), "wheeler@kde.org" ); ocsData.addCredit( "wheels", aboutData.credits().last() ); aboutData.addCredit( ki18n("Shane King").toString(), ki18n("Patches & Windows porting (shakes)").toString(), "kde@dontletsstart.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Simon Esneault").toString(), ki18n("Photos & Videos applets, Context View").toString(), "simon.esneault@gmail.com" ); ocsData.addCredit( "Takahani", aboutData.credits().last() ); aboutData.addCredit( ki18n("Soren Harward").toString(), ki18n("Developer, Automated Playlist Generator").toString(), "stharward@gmail.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Thomas Lübking").toString(), ki18n("Developer").toString(), "thomas.luebking@web.de" ); ocsData.addCredit( "thomas12777", aboutData.credits().last() ); aboutData.addCredit( ki18n("Valentin Rouet").toString(), ki18n("Developer").toString(), "v.rouet@gmail.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Wade Olson").toString(), ki18n("Splash screen artist").toString(), "wade@corefunction.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("William Viana Soares").toString(), ki18n("Context view").toString(), "vianasw@gmail.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); //Former Contributors aboutData.addCredit( ki18n("Former contributors").toString(), ki18n("People listed below have contributed to Amarok in the past. Thank you!").toString(), "" ); ocsData.addCredit( "%%category%%", aboutData.credits().last() ); aboutData.addCredit( ki18n("Adam Pigg").toString(), ki18n("Analyzers, patches, shoutcast").toString(), "adam@piggz.co.uk" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Adeodato Simó").toString(), ki18n("Patches").toString(), "asp16@alu.ua.es" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Alexandre Oliveira").toString(), ki18n("Developer").toString(), "aleprj@gmail.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Andreas Mair").toString(), ki18n("MySQL support").toString(), "am_ml@linogate.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Andrew de Quincey").toString(), ki18n("Postgresql support").toString(), "adq_dvb@lidskialf.net" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Andrew Turner").toString(), ki18n("Patches").toString(), "andrewturner512@googlemail.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Andy Kelk").toString(), ki18n("MTP and Rio Karma media devices, patches").toString(), "andy@mopoke.co.uk" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Christian Muehlhaeuser").toString(), ki18n("Developer").toString(), "chris@chris.de" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Derek Nelson").toString(), ki18n("Graphics, splash-screen").toString(), "admrla@gmail.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Enrico Ros").toString(), ki18n("Analyzers, Context Browser and systray eye-candy").toString(), "eros.kde@email.it" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Frederik Holljen").toString(), ki18n("Developer").toString(), "fh@ez.no" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Gábor Lehel").toString(), ki18n("Developer").toString(), "illissius@gmail.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Gérard Dürrmeyer").toString(), ki18n("Icons and image work").toString(), "gerard@randomtree.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Giovanni Venturi").toString(), ki18n("Dialog to filter the collection titles").toString(), "giovanni@ksniffer.org" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Jarkko Lehti").toString(), ki18n("Tester, IRC channel operator, whipping").toString(), "grue@iki.fi" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Jocke Andersson").toString(), ki18n("Rokymoter, bug fixer (Firetech)").toString(), "ajocke@gmail.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Marco Gulino").toString(), ki18n("Konqueror Sidebar, some DCOP methods").toString(), "marco@kmobiletools.org" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Martin Aumueller").toString(), ki18n("Developer").toString(), "aumuell@reserv.at" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Melchior Franz").toString(), ki18n("FHT routine, bugfixes").toString(), "mfranz@kde.org" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Michael Pyne").toString(), ki18n("K3b export code").toString(), "michael.pyne@kdemail.net" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Mike Diehl").toString(), ki18n("Developer").toString(), "madpenguin8@yahoo.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Paul Cifarelli").toString(), ki18n("Developer").toString(), "paul@cifarelli.net" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Peter C. Ndikuwera").toString(), ki18n("Bugfixes, PostgreSQL support").toString(), "pndiku@gmail.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Pierpaolo Panfilo").toString(), ki18n("Developer").toString(), "pippo_dp@libero.it" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Reigo Reinmets").toString(), ki18n("Wikipedia support, patches").toString(), "xatax@hot.ee" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Roman Becker").toString(), ki18n("Former Amarok logo, former splash screen, former icons").toString(), "roman@formmorf.de" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Sami Nieminen").toString(), ki18n("Audioscrobbler support").toString(), "sami.nieminen@iki.fi" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Stanislav Karchebny").toString(), ki18n("Developer").toString(), "berkus@madfire.net" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Stefan Bogner").toString(), ki18n("Loads of stuff").toString(), "bochi@online.ms" ); ocsData.addCredit( QString(), aboutData.credits().last() ); aboutData.addCredit( ki18n("Tomasz Dudzik").toString(), ki18n("Splash screen").toString(), "madsheytan@gmail.com" ); ocsData.addCredit( QString(), aboutData.credits().last() ); //Donors: //Last update: 2012/11/07, post Roktober 2012 ocsData.addDonor( "ayleph", KAboutPerson( ki18n( "Andrew Browning" ).toString() ) ); ocsData.addDonor( QString(), KAboutPerson( ki18n( "Chris Wales" ).toString() ) ); ocsData.addDonor( QString(), KAboutPerson( ki18n( "ZImin Stanislav" ).toString() ) ); KAboutData::setApplicationData(aboutData); // Command line parser QCommandLineParser parser; aboutData.setupCommandLine(&parser); app.initCliArgs(&parser); parser.process(app); aboutData.processCommandLine(&parser); KDBusService::StartupOptions startOptions = parser.isSet( "multipleinstances" ) ? KDBusService::Multiple : KDBusService::Unique ; // register the app to dbus KDBusService dbusService( startOptions ); QObject::connect(&dbusService, &KDBusService::activateRequested, &app, &App::activateRequested); const bool debugColorsEnabled = !parser.isSet( "coloroff" ); const bool debugEnabled = parser.isSet( "debug" ); Debug::setDebugEnabled( debugEnabled ); Debug::setColoredDebug( debugColorsEnabled ); if ( parser.isSet( "debug-audio" ) ) { qputenv( "PHONON_DEBUG", QByteArray( "3" ) ); qputenv( "PHONON_BACKEND_DEBUG", QByteArray( "3" ) ); qputenv( "PHONON_PULSEAUDIO_DEBUG", QByteArray( "3" ) ); } #pragma message("PORT KF5: This *if* hould be moved to activateRequested() slot") if( !dbusService.isRegistered() ) { QList instanceOptions; instanceOptions << "previous" << "play" << "play-pause" << "stop" << "next" << "append" << "queue" << "load"; // Check if an option for a running instance is set bool isSet = false; for( int i = 0; i < instanceOptions.size(); ++i ) if( parser.isSet( instanceOptions[ i ] ) ) isSet = true; if ( !isSet ) fprintf( stderr, "Amarok is already running!\n" ); return 0; } // Rewrite default SIGINT and SIGTERM handlers // to make amarok save current playlists during forced // application termination (logout, Ctr+C in console etc.) signal( SIGINT, &QCoreApplication::exit ); signal( SIGTERM, &QCoreApplication::exit ); // This call is needed to prevent a crash on exit with Phonon-VLC and LibPulse #ifdef Q_WS_X11 XInitThreads(); #endif app.continueInit(); return app.exec(); }