# Maintainer (Arch): Caleb Maclennan <caleb@alerque.com>
# Maintainer (Arch): Chih-Hsuan Yen <yan12125@archlinux.org>
# Contributor (Arch): Tyler Dence <tyzoid@archlinux32.org>
# Contributor (Arch): Konstantin Shalygin <k0ste@k0ste.ru>
# Maintainer: David P. <megver83@parabola.nu>
# Contributor: bill-auger <bill-auger@programmer.net>

# parabola changes and rationale:
#  - build without qt5-webengine
#  - disable tests which require networking

pkgbase=nextcloud-client
# Put config files for libcloudproviders integration in a separate package as
# there is no simple way yet to disable it.
# See: https://gitlab.gnome.org/World/libcloudproviders/-/issues/17
pkgname=(nextcloud-client nextcloud-client-cloudproviders)
epoch=2
# Upstream does not provide signed tarballs (yet)
# https://github.com/nextcloud/desktop/issues/1510
pkgver=3.10.0
_tag=19a02ad0b0146167949a9a06d4cb4a1137df8153
pkgrel=2
pkgrel+=.parabola1
arch=(x86_64)
arch+=(i686 armv7h)
url='https://nextcloud.com/'
_url=https://github.com/nextcloud/desktop
license=(GPL)
makedepends=(cmocka
             doxygen
             extra-cmake-modules
             git
             inkscape
             kio5
             libcloudproviders
             openssl
             python-sphinx
             qt5-quickcontrols2
             qt5-svg
             qt5-tools
             qt5-websockets
             qtkeychain-qt5
             sqlite)
source=("$pkgbase::git+$_url.git?signed#tag=$_tag")
source+=(no-webengine.patch)
validpgpkeys=(
  A26B951528EA1BA1678C7AE5D406C75CEE1A36D6 # https://github.com/camilasan
  42E775EAA3E47F9E0D5CDB0E00819E3BF4177B28 # https://github.com/misch7
  17166A5275C5FA6F1A48FD78074BBBCB8DECC9E2 # https://github.com/er-vin.gpg
  0739B11EDA696A3616666F6AE04221E85C5BB816 # https://github.com/allexzander
  267BF70F7905C2723B0243267D0F74F05C22F553 # https://github.com/mgallien
  3A877D9A896A057948059DEDAD2C27357B2CB11D # https://github.com/FlexW
)
sha256sums=('SKIP'
            '1e6d35210a15b8dfa94582d7db875e6ede2cd6b4e70f12cda02ff0be5a6badfb')

pkgver() {
  cd $pkgbase
  git describe --tags | sed 's/^v//;s/-/+/g'
}

_pkgver() {
  curl -fs https://api.github.com/repos/nextcloud/desktop/git/ref/tags/v$pkgver |
    jq -r .object.sha
}

prepare() {
  # tmpdir for check()
  mkdir -p tmpdir
  cd $pkgbase
  # Monkey patch that disables bulk upload capability which causes infinite
  # loops for many server/client combos. Feature is also disabled by default on
  # server end in v23.0.3 because it was so problematic. This can abe re-enabled
  # when underlying bug squashed:
  # https://github.com/nextcloud/desktop/issues/5726
  sed -i -e '/bulkupload/s/return _.*;$/return false;/' src/libsync/capabilities.cpp
  # Disable tests that touch on disabled feature
  sed -i -e '/SyncEngine/s/^/#/' -e '/Capabilities/s/^/#/' -e '/SecureFileDrop/s/^/#/' test/CMakeLists.txt

  # disable tests which require networking
  sed -i -e '/OAuth/s/^/#/'             test/CMakeLists.txt
  sed -i -e '/PushNotifications/s/^/#/' test/CMakeLists.txt

  echo "applying no-webengine.patch"
  patch -Np1 -i "${srcdir}"/no-webengine.patch
}

build() {
  cd $pkgbase

  # bundled breakpad in libcrashreporter-qt submodule is too old and does not build with glibc >= 2.26
  # Upstream fix: https://github.com/google/breakpad/commit/bddcc58860f522a0d4cbaa7e9d04058caee0db9d
  cmake -B build -S . \
    -DCMAKE_BUILD_TYPE=None \
    -DCMAKE_INSTALL_PREFIX=/usr \
    -DWITH_CRASHREPORTER=OFF \
    -DBUILD_UPDATER=OFF \
    -DUNIT_TESTING=ON \
    -DPLUGINDIR=lib/qt/plugins # Fix vfs plugin install dir https://github.com/nextcloud/desktop/issues/3781#issuecomment-918918320

  # TODO: fix installation of PDF and HTML documents
  # WIP at https://github.com/yan12125/desktop/tree/doc-install-path
  make -C build all doc-man
}

check() {
  cd $pkgbase/build

  # Tests fail if $TMPDIR is too small; specify an alternative for machines
  # with a small /tmp partition.
  # Use UTC as TestCookies is sensitive to the timezone
  # https://github.com/nextcloud/desktop/blob/v3.2.2/test/testcookies.cpp#L24
  QT_QPA_PLATFORM=offscreen TMPDIR="$srcdir/tmpdir" TZ=UTC ARGS="--rerun-failed --output-on-failure" make test
}

package_nextcloud-client() {
  pkgdesc='Nextcloud desktop client'
  depends=(hicolor-icon-theme
           karchive5
           libcloudproviders
           openssl
           qt5-graphicaleffects
           qt5-quickcontrols
           qt5-quickcontrols2
           qt5-svg
           qt5-websockets
           qtkeychain-qt5
           sqlite
           xdg-utils)
  optdepends=('kio5: integration with Dolphin'
              'nemo-python: integration with Nemo'
              'python-nautilus: integration with Nautilus'
              'python-caja: integration with Caja'
              'nextcloud-client-cloudproviders: cloudproviders support')
  backup=('etc/Nextcloud/sync-exclude.lst')

  cd $pkgbase/build

  make DESTDIR="$pkgdir" install

  rm -v "$pkgdir"/usr/share/cloud-providers/com.nextcloudgmbh.Nextcloud.ini
  rm -v "$pkgdir"/usr/share/dbus-1/services/com.nextcloudgmbh.Nextcloud.service
  cd "$pkgdir"/usr/share && rmdir -p cloud-providers dbus-1/services
}

package_nextcloud-client-cloudproviders() {
  pkgdesc='cloudproviders support for the Nextcloud desktop client'
  depends=(nextcloud-client)

  cd $pkgbase/build
  make -C shell_integration/libcloudproviders DESTDIR="$pkgdir" install
}
