name: telegram-desktop
adopt-info: telegram
icon: Telegram/Resources/art/icon512@2x.png

base: core18
grade: stable
confinement: strict

apps:
  telegram-desktop:
    command: bin/desktop-launch telegram-desktop
    common-id: org.telegram.desktop
    desktop: share/applications/telegramdesktop.desktop
    environment:
      # Use GTK3 cursor theme, icon theme and open/save file dialogs.
      QT_QPA_PLATFORMTHEME: gtk3
    plugs:
      - desktop
      - desktop-legacy
      - home
      - network
      - network-manager
      - pulseaudio
      - removable-media
      - unity7
      - x11

plugs:
  # Support for common GTK themes
  # https://forum.snapcraft.io/t/how-to-use-the-system-gtk-theme-via-the-gtk-common-themes-snap/6235
  gsettings:
  gtk-3-themes:
    interface: content
    target: $SNAP/data-dir/themes
    default-provider: gtk-common-themes
  icon-themes:
    interface: content
    target: $SNAP/data-dir/icons
    default-provider: gtk-common-themes
  sound-themes:
    interface: content
    target: $SNAP/data-dir/sounds
    default-provider: gtk-common-themes

parts:
  telegram:
    plugin: cmake
    source: .
    source-type: git
    parse-info: [share/metainfo/telegramdesktop.appdata.xml]
    build-packages:
      - gcc-8
      - g++-8
      - qtbase5-private-dev
      - libmapbox-variant-dev
      - libasound2-dev
      - libavcodec-dev
      - libavformat-dev
      - libavutil-dev
      - libswscale-dev
      - libswresample-dev
      - libdbusmenu-qt5-dev
      - liblz4-dev
      - liblzma-dev
      - libminizip-dev
      - libopenal-dev
      - libopus-dev
      - libpulse-dev
      - libssl-dev
      - zlib1g-dev
    stage-packages:
      - qt5-image-formats-plugins
      - libasound2
      - libavcodec57
      - libavformat57
      - libavutil55
      - libswscale4
      - libswresample2
      - libdbusmenu-qt5-2
      - liblz4-1
      - liblzma5
      - libminizip1
      - libopenal1
      - libopus0
      - libpulse0
      - libssl1.1
      - zlib1g
    configflags:
      - -DCMAKE_C_COMPILER=gcc-8
      - -DCMAKE_CXX_COMPILER=g++-8
      - -DCMAKE_BUILD_TYPE=Release
      - -DTDESKTOP_API_ID=611335
      - -DTDESKTOP_API_HASH=d524b414d21f4d37f08684c1df41ac9c
      - -DDESKTOP_APP_USE_PACKAGED_FONTS=OFF
      - -DDESKTOP_APP_USE_PACKAGED_EXPECTED=OFF
      - -DDESKTOP_APP_USE_PACKAGED_RLOTTIE=OFF
      - -DTDESKTOP_USE_PACKAGED_TGVOIP=OFF
    override-pull: |
      snapcraftctl pull

      version_file=Telegram/build/version
      version=$(sed -n "s/AppVersionStr[ ]\+\(.*\)\+/\1/p" $version_file)
      beta=$(sed -n "s/BetaChannel[ ]\+\(.*\)\+/\1/p" $version_file)

      if [ "$beta" != "0" ]; then
        version="$version-beta"
      fi

      version="${version}$(git describe --tags | sed 's,^v[^-]\+,,')"

      snapcraftctl set-version "$version"

      sed -i 's|^Icon=.*|Icon=/share/icons/hicolor/512x512/apps/telegram.png|g' lib/xdg/telegramdesktop.desktop
    after:
      - cmake
      - desktop-qt5
      - enchant
      - gsl
      - range-v3
      - xxhash

  spellchecking:
    plugin: nil
    stage-packages:
      - hunspell-de-de
      - hunspell-en-au
      - hunspell-en-ca
      - hunspell-en-gb
      - hunspell-en-us
      - hunspell-en-za
      - hunspell-fr-classical
      - hunspell-it
      - hunspell-pl
      - hunspell-es
      - hunspell-pt-br
      - hunspell-pt-pt

  desktop-qt5:
    source: https://github.com/ubuntu/snapcraft-desktop-helpers.git
    source-subdir: qt
    plugin: make
    make-parameters: ["FLAVOR=qt5"]
    build-packages:
      - build-essential
      - qtbase5-dev
      - dpkg-dev
    stage-packages:
      - libxkbcommon0
      - ttf-ubuntu-font-family
      - dmz-cursor-theme
      - light-themes
      - adwaita-icon-theme
      - gnome-themes-standard
      - shared-mime-info
      - libqt5gui5
      - libgdk-pixbuf2.0-0
      - libqt5svg5 # for loading icon themes which are svg
      - try: [appmenu-qt5] # not available on core18
      - locales-all
      - xdg-user-dirs
      - fcitx-frontend-qt5

  qt5-gtk-platform:
    plugin: nil
    stage-packages:
      - qt5-gtk-platformtheme

  cmake:
    source: "https://gitlab.kitware.com/cmake/cmake.git"
    source-depth: 1
    source-branch: master
    source-type: git
    plugin: make
    override-build: |
      ${SNAPCRAFT_PART_SRC}/bootstrap \
        --parallel=${SNAPCRAFT_PARALLEL_BUILD_COUNT} \
        -- \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_INSTALL_PREFIX=/ \
        -DBUILD_TESTING=OFF
      snapcraftctl build
    build-packages:
      - build-essential
      - libssl-dev
      - libncurses5-dev
    stage-packages:
      - libssl1.1
      - libncurses5
      - libtinfo5
    prime: [-./*]

  enchant:
    source: https://github.com/AbiWord/enchant.git
    source-depth: 1
    source-tag: v2.2.7
    plugin: autotools
    build-packages:
      - libltdl-dev
      - libglib2.0-dev
      - libhunspell-dev
    stage-packages:
      - libglib2.0-0
      - libhunspell-1.6-0
    configflags:
      - --enable-relocatable
    prime: [-./bin/*]

  gsl:
    source: https://github.com/microsoft/GSL.git
    source-depth: 1
    source-tag: v2.1.0
    plugin: cmake
    configflags:
      - -DGSL_TEST=OFF
    prime: [-./*]

  range-v3:
    source: https://github.com/ericniebler/range-v3.git
    source-depth: 1
    source-tag: 0.10.0
    plugin: cmake
    configflags:
      - -DRANGE_V3_TESTS=OFF
      - -DRANGE_V3_EXAMPLES=OFF
      - -DRANGE_V3_DOCS=OFF
    prime: [-./*]

  xxhash:
    source: https://github.com/Cyan4973/xxHash.git
    source-depth: 1
    source-tag: v0.7.2
    plugin: make
    make-parameters: [PREFIX=]
    prime: [-./bin/*]