# SPDX-FileCopyrightText: 2019 Linus Jahn <lnj@kaidan.im>
#
# SPDX-License-Identifier: CC0-1.0

add_subdirectory(api)

add_executable(plasmatube)

qt_add_qml_module(plasmatube
        URI org.kde.plasmatube
        VERSION 1.0)

target_sources(plasmatube PRIVATE
        controllers/channelcontroller.cpp
        controllers/channelcontroller.h
        controllers/plasmatube.cpp
        controllers/plasmatube.h
        controllers/logincontroller.cpp
        controllers/logincontroller.h
        controllers/videosource.cpp
        controllers/videosource.h
        controllers/windowcontroller.cpp
        controllers/windowcontroller.h

        models/commentsmodel.cpp
        models/commentsmodel.h
        models/invidiousinstancesmodel.cpp
        models/invidiousinstancesmodel.h
        models/peertubeinstancesmodel.cpp
        models/peertubeinstancesmodel.h
        models/playlistsmodel.cpp
        models/playlistsmodel.h
        models/videolistmodel.cpp
        models/videolistmodel.h
        models/videomodel.cpp
        models/videomodel.h

        controllers/sourcemanager.cpp
        controllers/sourcemanager.h
        controllers/subscriptioncontroller.cpp
        controllers/subscriptioncontroller.h
        controllers/subscriptionwatcher.cpp
        controllers/subscriptionwatcher.h
        controllers/videocontroller.cpp
        controllers/videocontroller.h

        utils/mpvobject.cpp
        utils/mpvobject.h
        utils/qthelper.hpp

        main.cpp
)

qt_target_qml_sources(plasmatube
    QML_FILES
        ui/components/BottomNavBar.qml
        ui/components/Comments.qml
        ui/components/PlaylistGridItem.qml
        ui/components/ShareDialog.qml
        ui/components/ShareMenu.qml
        ui/components/Sidebar.qml
        ui/components/SourceSwitcher.qml
        ui/components/SubscriptionButton.qml
        ui/components/VideoGridItem.qml
        ui/components/VideoListAction.qml
        ui/components/VideoListItem.qml
        ui/components/VideoMenu.qml

        ui/loginflow/AddInvidiousPage.qml
        ui/loginflow/AddPeerTubePage.qml
        ui/loginflow/AddPipedPage.qml
        ui/loginflow/WelcomePage.qml

        ui/settings/InvidiousSourcePage.qml
        ui/settings/NetworkProxyPage.qml
        ui/settings/PeerTubeSourcePage.qml
        ui/settings/PipedSourcePage.qml
        ui/settings/SettingsPage.qml

        ui/videoplayer/MinimizedVideoPlayer.qml
        ui/videoplayer/PictureInPictureVideo.qml
        ui/videoplayer/TabIndicator.qml
        ui/videoplayer/VideoControls.qml
        ui/videoplayer/VideoData.qml
        ui/videoplayer/VideoPlayer.qml
        ui/videoplayer/VideoPlayerParent.qml

        ui/ChannelPage.qml
        ui/FeedPage.qml
        ui/HistoryPage.qml
        ui/LoginPage.qml
        ui/Main.qml
        ui/PlaylistPage.qml
        ui/PlaylistsPage.qml
        ui/PopularPage.qml
        ui/SearchPage.qml
        ui/SubscriptionsPage.qml
        ui/TrendingPage.qml
    RESOURCES
        ui/components/utils.js
)

set_source_files_properties(../org.kde.plasmatube.svg PROPERTIES
        QT_RESOURCE_ALIAS /org.kde.plasmatube.svg
)

qt_target_qml_sources(plasmatube
        PREFIX /
        RESOURCES
        ../org.kde.plasmatube.svg
)

kconfig_add_kcfg_files(plasmatube config.kcfgc sourceconfig.kcfgc GENERATE_MOC)

target_include_directories(plasmatube PRIVATE
        ${CMAKE_BINARY_DIR}
        ${CMAKE_CURRENT_SOURCE_DIR}/controllers
        ${CMAKE_CURRENT_SOURCE_DIR}/models
        ${CMAKE_CURRENT_SOURCE_DIR}/utils
)
target_link_libraries(plasmatube PRIVATE qinvidious qinvidiousplugin Qt::Core Qt::Qml Qt::Quick Qt::QuickControls2 Qt::Svg Qt::Widgets Qt::Concurrent KF6::CoreAddons KF6::ConfigCore KF6::ConfigGui KF6::I18n Qt6Keychain::Qt6Keychain ${MPV_LIBRARIES})
target_include_directories(plasmatube PUBLIC ${MPV_INCLUDE_DIRS})
target_compile_options(plasmatube PUBLIC ${MPV_CFLAGS_OTHER} -fexceptions)

if (NOT ANDROID)
    target_link_libraries(plasmatube PRIVATE Qt::DBus)
    target_compile_options(plasmatube PUBLIC -DHAS_DBUS)
endif()

if (TARGET KF6::DBusAddons)
    target_link_libraries(plasmatube PRIVATE KF6::DBusAddons KF6::WindowSystem)
    target_compile_definitions(plasmatube PRIVATE -DHAVE_KDBUSADDONS)
endif ()

if(PLASMATUBE_FLATPAK)
    target_compile_definitions(plasmatube PUBLIC PLASMATUBE_FLATPAK)
endif()

install(TARGETS plasmatube ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
