# Maintainer: Joffrey <j-off@live.fr>
# Contributor: eolianoe <eolianoe [at] gmail [DoT] com>
# Contributor: Edvinas Valatka <edacval@gmail.com>
# Contributor: Aaron Lindsay <aaron@aclindsay.com>

pkgname=seahub
pkgver=13.0.25
pkgrel=2
pkgdesc='The web frontend for seafile server'
arch=('any')
url='https://github.com/haiwen/seahub'
license=('Apache')
depends=('python-pytz' 'python-json5' 'python-pymysql'
         'python-ldap' 'python-redis' 'python-pylibmc')
makedepends=('python-setuptools')
source=("$pkgname-$pkgver-server.tar.gz::$url/archive/v$pkgver-server.tar.gz"
        "https://files.pythonhosted.org/packages/0a/dd/33d2a11713f6b78493273a32d99bb449f2d93663ed4ec15a8b890d44ba04/Django-4.2.20.tar.gz"
        "https://files.pythonhosted.org/packages/c8/6a/3782eaae262b0effeb34f47344c08fdadc2a4cfe7ed2d8892035b07ad2a7/django-webpack-loader-1.7.0.tar.gz"
        "https://files.pythonhosted.org/packages/c2/5d/d5d45a38163ede3342d6ac1ca01b5d387329daadf534a25718f9a9ba818c/bleach-5.0.1.tar.gz"
        0001-Add-support-for-more-audio-and-video-formats.patch
        0002-Migrate-old-pids-directory.patch
        0003-Fix-gunicorn-binary-path.patch)
sha256sums=('ba15d1a3444345dbdeafd9bc60cd1ec3f1f4aafe3d335b5ec3189202ac6ec1de'
            '92bac5b4432a64532abb73b2ac27203f485e40225d2640a7fbef2b62b876e789'
            '6a065382573771baf400754c4d39c0913b0a29a453a941dfb9122eebed21572f'
            '0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c'
            'b5935ce7bbc14b0ba6e75473205940d82cf24082378ac28297322dd44c10a2ec'
            'cb95bc47844e734a1b58ed3e230f7f85512d3a706ed33ec172c65aca7910f506'
            '1cc8ff7ee5b28fcfed280eed197d464533ebcfcf9821331952988a2b146e15b8')
options=('!strip')

_patch_js() {
  local orig="$1"
  local new="$2"
  local dir="$3"

  # make sure there is a match
  grep -q "$orig" "$dir"/*.js
  sed -i "s|$orig|$new|g" "$dir"/*.js
}

prepare() {
  cd "$srcdir/$pkgname-$pkgver-server"

  echo "Patch JS 1"
  _patch_js \
    'txt:"txt.png",md:"md.png",pdf:"pdf.png",doc:"word.png",docx:"word.png",odt:"word.png",fodt:"word.png",ppt:"ppt.png",pptx:"ppt.png",odp:"ppt.png",fodp:"ppt.png",xls:"excel.png",xlsx:"excel.png",ods:"excel.png",fods:"excel.png",mp4:"video.png",ogv:"video.png",webm:"video.png",mov:"video.png",flv:"video.png",wmv:"video.png",rmvb:"video.png",mp3:"music.png",oga:"music.png",ogg:"music.png",wav:"music.png",flac:"music.png",opus:"music.png",aac:"music.png",ac3:"music.png",wma:"music.png",jpg:"pic.png",jpeg:"pic.png",png:"pic.png",svg:"pic.png",gif:"pic.png",bmp:"pic.png",ico:"pic.png",heic:"pic.png",tif:"pic.png",tiff:"pic.png",webp:"pic.png",jfif:"pic.png",draw:"draw.png",exdraw:"draw.png",psd:"psd.png",zip:"zip.png",rar:"zip.png",tar:"zip.png",css:"css.png",sdoc:"sdoc.png",sdoc_notification:"sdoc_notification.ico",default:"file.png"' \
    'txt:"txt.png",md:"md.png",pdf:"pdf.png",doc:"word.png",docx:"word.png",odt:"word.png",fodt:"word.png",ppt:"ppt.png",pptx:"ppt.png",odp:"ppt.png",fodp:"ppt.png",xls:"excel.png",xlsx:"excel.png",ods:"excel.png",fods:"excel.png",mp4:"video.png",m4v:"video.png",mkv:"video.png",ogv:"video.png",webm:"video.png",mov:"video.png",flv:"video.png",wmv:"video.png",rmvb:"video.png",rm:"video.png",m4a:"music.png",mp3:"music.png",oga:"music.png",ogg:"music.png",wav:"music.png",flac:"music.png",opus:"music.png",aac:"music.png",ac3:"music.png",caf:"music.png",wma:"music.png",avif:"pic.png",jpg:"pic.png",jpeg:"pic.png",png:"pic.png",svg:"pic.png",gif:"pic.png",bmp:"pic.png",ico:"pic.png",heic:"pic.png",heif:"pic.png",tif:"pic.png",tiff:"pic.png",webp:"pic.png",jfif:"pic.png",draw:"draw.png",exdraw:"draw.png",psd:"psd.png",zip:"zip.png",rar:"zip.png",tar:"zip.png",css:"css.png",sdoc:"sdoc.png",sdoc_notification:"sdoc_notification.ico",default:"file.png"' \
    media/assets/frontend/static/js/
  echo "Patch JS 2"
  _patch_js \
    '"gif","jpeg","jpg","png","ico","bmp","tif","tiff","jfif","heic","webp"' \
    '"avif","gif","jpeg","jpg","png","ico","bmp","tif","tiff","jfif","heic","heif","psd","webp"' \
    media/assets/frontend/static/js/
  echo "Patch JS 3"
  _patch_js \
    'opus:"video/ogg",ogv:"video/ogg",mp4:"video/mp4",mov:"video/mp4",m4v:"video/mp4",mkv:"video/x-matroska",m4a:"audio/mp4",mp3:"audio/mpeg",aac:"audio/aac",caf:"audio/x-caf",flac:"audio/flac",oga:"audio/ogg",wav:"audio/wav",m3u8:"application/x-mpegURL",mpd:"application/dash+xml",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",png:"image/png",svg:"image/svg+xml",webp:"image/webp"' \
    'opus:"video/ogg",ogv:"video/ogg",mp4:"video/mp4",mov:"video/mp4",m4v:"video/mp4",mkv:"video/x-matroska",m4a:"audio/mp4",mp3:"audio/mpeg",aac:"audio/aac",caf:"audio/x-caf",flac:"audio/flac",oga:"audio/ogg",wav:"audio/wav",m3u8:"application/x-mpegURL",mpd:"application/dash+xml",avif:"image/avif",heic:"image/heic",heif:"image/heif",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",png:"image/png",svg:"image/svg+xml",webp:"image/webp"' \
    media/assets/frontend/static/js/

  patch -Np1 --no-backup-if-mismatch < ../0001-Add-support-for-more-audio-and-video-formats.patch
  patch -Np1 --no-backup-if-mismatch < ../0002-Migrate-old-pids-directory.patch
  patch -Np1 --no-backup-if-mismatch < ../0003-Fix-gunicorn-binary-path.patch

  # Remove useless files and directories
  rm -rf \
     './'{CONTRIBUTORS,HACKING,Makefile} \
     './'{*test*,*dev*,*sh*,README*,pylintrc*,LICENSE*}

  sed -i -E "/SEAFILE_VERSION/s/[0-9.]+/$pkgver/" ./seahub/settings.py
}

build() {
  cd "$srcdir/$pkgname-$pkgver-server"
  for locale in ./locale/*/LC_MESSAGES/*.po; do
    msgfmt -vo "${locale%.po}.mo" "$locale"
  done

  # cd "$srcdir/Django-3.2.16"
  # python setup.py build
  # cd "$srcdir/django-webpack-loader-1.7.0"
  # python setup.py build
  # cd "$srcdir/bleach-5.0.1"
  # python setup.py build
}

package() {
  depends+=(
    "seafile-server>=$pkgver"
    'python-webencodings' # dependency of bleach
    # The following list is from seahub/requirements.txt
    # python-django # 4.2.*
    'python-django-statici18n'
    # 'python-django-webpack-loader' # 1.7.*
    'python-django-picklefield'
    'python-django-formtools'
    'python-django-simple-captcha'
    'python-django-saml2'
    'python-django-rest-framework'
    'python-dateutil'
    'python-pyjwt'
    'python-pycryptodome'
    'python-cas'
    'python-pysaml2'
    'python-requests'
    'python-requests-oauthlib'
    # 'python-future'
    'python-seafevents'
    'gunicorn'
    'python-mysqlclient'
    'python-qrcode'
    'python-pillow'
    'python-chardet'
    'python-cffi'
    # 'python-captcha' # This one seems to conflict with django-simple-captcha
    'python-openpyxl'
    'python-markdown'
    # 'python-bleach' # 5.0.*

    # Our own dependency for HEIF/C and AVIF file support
    'python-pillow-heif'
  )
  optdepends=(
    'python-seafdav: For WebDAV support'
    'python-django-pylibmc: Memcached support'
    'ffmpeg: For video thumbnails'
  )
  cd "$srcdir/seahub-$pkgver-server/"
  install -dm755 "$pkgdir/usr/share/seafile-server/seahub"
  cp -r -p "./"* "$pkgdir/usr/share/seafile-server/seahub/"
  mv "$pkgdir/usr/share/seafile-server/seahub/scripts/"* \
        "$pkgdir/usr/share/seafile-server"
  rmdir "$pkgdir/usr/share/seafile-server/seahub/scripts/"

  export PYTHONPATH="$pkgdir/usr/share/seafile-server/seahub/thirdpart"
  cd "$srcdir/Django-4.2.20"
  python setup.py install --root="$pkgdir" --optimize=1 \
         --install-lib "usr/share/seafile-server/seahub/thirdpart"
  cd "$srcdir/django-webpack-loader-1.7.0"
  python setup.py install --root="$pkgdir" --optimize=1 \
         --install-lib "usr/share/seafile-server/seahub/thirdpart"
  cd "$srcdir/bleach-5.0.1"
  python setup.py install --root="$pkgdir" --optimize=1 \
         --install-lib "usr/share/seafile-server/seahub/thirdpart"

  cd "$srcdir"
  rm -rf "$pkgdir"/usr/{bin,share/seafile-server/seahub/thirdpart/*.egg-info}

  python -m compileall "$pkgdir/usr/share/seafile-server/seahub/"
}
