EAPI=8

PYTHON_COMPAT=( python3_{12..14} )

inherit cmake git-r3 python-any-r1 xdg

DESCRIPTION="Telegram Desktop fork with Material Design and additional improvements"
HOMEPAGE="https://github.com/KUKURUZKA165/materialgram"

EGIT_REPO_URI="https://github.com/kukuruzka165/materialgram.git"
EGIT_COMMIT="v${PV}"

EGIT_SUBMODULES=(
    'cmake'
    'cmake/external/glib/cppgir'
    'cmake/external/glib/cppgir/expected-lite'

    'Telegram/lib_rpl'
    'Telegram/lib_crl'
    'Telegram/lib_base'
    'Telegram/lib_ui'
    'Telegram/lib_tl'
    'Telegram/lib_spellcheck'
    'Telegram/lib_storage'
    'Telegram/lib_lottie'
    'Telegram/lib_qr'
    'Telegram/lib_translate'
    'Telegram/lib_webrtc'
    'Telegram/lib_webview'
    'Telegram/codegen'

    'Telegram/ThirdParty/GSL'
    'Telegram/ThirdParty/xxHash'
    'Telegram/ThirdParty/rlottie'
    'Telegram/ThirdParty/lz4'
    'Telegram/ThirdParty/expected'
    'Telegram/ThirdParty/QR'
    'Telegram/ThirdParty/hunspell'
    'Telegram/ThirdParty/range-v3'
    'Telegram/ThirdParty/fcitx5-qt'
    'Telegram/ThirdParty/kcoreaddons'
    'Telegram/ThirdParty/cld3'
    'Telegram/ThirdParty/cmark-gfm'
    'Telegram/ThirdParty/MicroTeX'
    'Telegram/ThirdParty/kimageformats'
    'Telegram/ThirdParty/hime'
    'Telegram/ThirdParty/nimf'
    'Telegram/ThirdParty/tgcalls'
    'Telegram/ThirdParty/libprisma'
    'Telegram/ThirdParty/TooManyCooks'
    'Telegram/ThirdParty/xdg-desktop-portal'
)

LICENSE="GPL-3-with-openssl-exception BSD LGPL-2+"
SLOT="0"
KEYWORDS="~amd64"

IUSE="dbus screencast wayland webkit X"

REQUIRED_USE="|| ( wayland X )"

CDEPEND="
    app-arch/lz4:=
    dev-cpp/abseil-cpp:=
    dev-cpp/ada:=
    dev-cpp/ms-gsl
    dev-cpp/range-v3
    dev-cpp/toomanycooks
    dev-libs/glib:2
    dev-libs/libfido2:=
    dev-libs/openssl:=
    dev-libs/qr-code-generator:=
    dev-libs/xxhash
    dev-qt/qtbase:6
    dev-qt/qtdeclarative:6
    dev-qt/qtimageformats:6
    dev-qt/qtshadertools:6
    dev-qt/qtsvg:6
    dev-qt/qtwayland:6
    kde-frameworks/kcoreaddons:6
    media-libs/libjpeg-turbo:=
    media-libs/openal
    media-libs/opus
    media-libs/rnnoise:=
    media-libs/tg_owt:=
    media-video/ffmpeg:=
    net-libs/tdlib:=[tde2e]
    sys-apps/hwloc:=
    virtual/minizip
    virtual/pkgconfig

    dbus? (
        dev-qt/qtbase:6[dbus]
    )

    screencast? (
        media-video/pipewire:=
    )

    wayland? (
        dev-util/wayland-scanner
    )

    webkit? (
        net-libs/webkit-gtk:4.1
    )

    X? (
        x11-libs/libxcb
        x11-libs/xcb-util-keysyms
    )
"

DEPEND="
    ${CDEPEND}
    ${PYTHON_DEPS}
"

RDEPEND="
    ${CDEPEND}
"

BDEPEND="
    ${PYTHON_DEPS}
    dev-build/cmake
    dev-qt/qttools:6
    dev-util/desktop-file-utils
    dev-util/gdbus-codegen
"

src_configure() {
    export XDG_DATA_DIRS="${ESYSROOT}/usr/share"

    filter-flags -fno-delete-null-pointer-checks
    append-cppflags -DNDEBUG

    local no_webkit_wayland
    local use_webkit_wayland

    if use webkit && use wayland; then
        no_webkit_wayland=no
        use_webkit_wayland=yes
    else
        no_webkit_wayland=yes
        use_webkit_wayland=no
    fi

    local mycmakeargs=(
        -DQT_VERSION_MAJOR=6
        -DCMAKE_DISABLE_PRECOMPILE_HEADERS=OFF

        -DCMAKE_DISABLE_FIND_PACKAGE_Qt6Quick="${no_webkit_wayland}"
        -DCMAKE_DISABLE_FIND_PACKAGE_Qt6QuickWidgets="${no_webkit_wayland}"
        -DCMAKE_DISABLE_FIND_PACKAGE_Qt6WaylandCompositor="${no_webkit_wayland}"

        -DCMAKE_REQUIRE_FIND_PACKAGE_Qt6DBus="$(usex dbus)"
        -DCMAKE_REQUIRE_FIND_PACKAGE_Qt6Quick="${use_webkit_wayland}"
        -DCMAKE_REQUIRE_FIND_PACKAGE_Qt6QuickWidgets="${use_webkit_wayland}"
        -DCMAKE_REQUIRE_FIND_PACKAGE_Qt6WaylandCompositor="${use_webkit_wayland}"

        -DTDESKTOP_API_ID="${MY_TDESKTOP_API_ID:-611335}"
        -DTDESKTOP_API_HASH="${MY_TDESKTOP_API_HASH:-d524b414d21f4d37f08684c1df41ac9c}"
    )

    cmake_src_configure
}

src_compile() {
    local targets

    targets=$(
        "${CMAKE_BINARY}" --build "${BUILD_DIR}" -t help 2>/dev/null |
            sed -n '/^[^/]*_cppgir:/s/:.*//p'
    )

    if [[ -n ${targets} ]]; then
        cmake_build ${targets}
    fi

    cmake_build
}

src_install() {
    cmake_src_install

    if [[ -x ${ED}/usr/bin/Telegram ]]; then
        mv "${ED}/usr/bin/Telegram" \
            "${ED}/usr/bin/materialgram" || die
    fi

    if [[ ! -f ${ED}/usr/share/applications/io.github.kukuruzka165.materialgram.desktop ]] &&
        [[ -f ${ED}/usr/share/applications/org.telegram.desktop.desktop ]]; then
        mv "${ED}/usr/share/applications/org.telegram.desktop.desktop" \
            "${ED}/usr/share/applications/materialgram.desktop" || die

        sed -i \
            -e 's/^Name=Telegram$/Name=Materialgram/' \
            -e 's|^Exec=telegram-desktop|Exec=materialgram|' \
            "${ED}/usr/share/applications/materialgram.desktop" || die
    fi
}