pkgbase=syncthingtray
pkgname=("${pkgbase}" "${pkgbase}-plasma" "${pkgbase}-dolphin")
pkgver=2.1.8
pkgrel=1.1
pkgdesc='Tray application for Syncthing'
arch=('x86_64')
url="https://github.com/Martchus/${pkgbase}"
license=('GPL-2.0-or-later')
makedepends=(
    'boost'
    'boost-libs'
    'c++utilities'
    'cmake'
    'extra-cmake-modules'
    'kdeclarative'
    'libplasma'
    'ninja'
    'qt6-tools'
    'qt6-webengine'
    'qtforkawesome'
    'qtutilities'
    'perl'
)
checkdepends=(
    'cppunit'
    'iproute2'
    'syncthing'
)
source=("${pkgbase}-${pkgver}.tar.gz::https://github.com/Martchus/${pkgbase}/archive/v${pkgver}.tar.gz")
sha256sums=('057cf086943c2a8b4521b8f068188ff975d3403c42cc0292bca532169ce5d577')

build() {
    local cmake_options=(
        -B build
        -S "${PROJECT_DIR_NAME:-$pkgbase-$pkgver}"
        -G Ninja
        -D CMAKE_BUILD_TYPE=Release
        -D CMAKE_INSTALL_PREFIX=/usr
        -D BUILD_SHARED_LIBS=ON
        -D QT_PACKAGE_PREFIX=Qt6
        -D KF_PACKAGE_PREFIX=KF6
        -D BUILTIN_TRANSLATIONS=ON
        -D BUILTIN_TRANSLATIONS_OF_QT=OFF
        -D WEBVIEW_PROVIDER=webengine
        -D JS_PROVIDER=qml
        -D QUICK_GUI=ON
        -D QUICK_GUI_CONTROLS_STYLE=dynamic
        -D SYSTEMD_SUPPORT=ON
    )
    cmake "${cmake_options[@]}"
    cmake --build build
}

check() {
    cmake --build build --target tests

    # https://github.com/syncthing/syncthing/issues/8785
    export HOME="$(mktemp -p "$PWD" -d testhome.XXX)"
    # https://github.com/Martchus/syncthingtray/issues/455
    export QT_QPA_PLATFORM=offscreen QT_QPA_PLATFORMTHEME=
    local _ephemeral_port=$(comm -23 <(seq 49152 65535) <(ss -Htan | awk '{print $4}' | awk -F':' '{print $NF}' | grep -E '^[0-9]+$' | sort -u) | shuf -n 1)
    export SYNCTHING_PORT=${_ephemeral_port}
    export SYNCTHING_TEST_TIMEOUT_FACTOR=3
    local ctest_flags=(
        --test-dir build
        --output-on-failure
        --parallel $(nproc)
    )
    ctest "${ctest_flags[@]}"
}

_pick() {
    local p="$1" f d; shift
    for f; do
        d="${srcdir}/${p}/${f#${pkgdir}/}"
        mkdir -p "$(dirname "${d}")"
        mv "${f}" "${d}"
        rmdir -p --ignore-fail-on-non-empty "$(dirname "${f}")"
    done
}


package_syncthingtray() {
    depends=(
        'libboost_filesystem.so'
        'libc++utilities.so'
        'libqtforkawesome.so'
        'libqtquickforkawesome.so'
        'libqtutilities.so'
        'glibc'
        'hicolor-icon-theme'
        'libgcc'
        'libstdc++'
        'qt6-base'
        'qt6-declarative'
        'qt6-svg'
        'qt6-webengine'
    )
    optdepends=(
        'syncthing: for managing a local Syncthing instance'
        'gnome-shell-extension-appindicator: tray icon support for GNOME Shell'
        'syncthingtray-plasma: Plasmoid integration for KDE Plasma 6'
        'syncthingtray-dolphin: Dolphin file manager integration'
    )
    provides=("${pkgbase}-qt6")
    conflicts=("${pkgbase}-qt6")
    replaces=("${pkgbase}-qt6")

    DESTDIR="${pkgdir}" cmake --install build

    mkdir -p "${srcdir}"/{plasma,dolphin}
    cd "${pkgdir}"

    # For Plasma
    _pick plasma usr/lib/qt6/plugins/plasma
    _pick plasma usr/share/plasma
    _pick plasma usr/share/metainfo/io.github.martchus.syncthingplasmoid.metainfo.xml
    _pick plasma usr/share/syncthingplasmoid
    _pick plasma usr/lib/pkgconfig/syncthingplasmoid.pc

    # For Dolphin
    _pick dolphin usr/lib/qt6/plugins/kf6/kfileitemaction
    _pick dolphin usr/share/metainfo/io.github.martchus.syncthingfileitemaction.metainfo.xml
    _pick dolphin usr/share/syncthingfileitemaction
    _pick dolphin usr/lib/pkgconfig/syncthingfileitemaction.pc
}

package_syncthingtray-plasma() {
    pkgdesc+=' - Plasma 6 applet'
    depends=(
        "${pkgbase}=${pkgver}"
        'libc++utilities.so'
        'libqtquickforkawesome.so'
        'libqtutilities.so'
        'glibc'
        'libgcc'
        'libplasma'
        'libstdc++'
        'kconfig'
        'kcoreaddons'
        'kdeclarative'
        'kirigami'
        'ksvg'
        'qt6-base'
        'qt6-declarative'
    )

    mv "${srcdir}"/plasma/* "${pkgdir}/"
}

package_syncthingtray-dolphin() {
    pkgdesc+=' - Dolphin integration'
    depends=(
        "${pkgbase}=${pkgver}"
        'libc++utilities.so'
        'libqtutilities.so'
        'glibc'
        'kcoreaddons'
        'kio'
        'libgcc'
        'libstdc++'
        'qt6-base'
    )

    mv "${srcdir}"/dolphin/* "${pkgdir}/"
}
