(define-module (messaging)
               #:use-module ((guix licenses) #:prefix license:)
               #:use-module (gnu packages admin)
               #:use-module (gnu packages aidc)
               #:use-module (gnu packages aspell)
               #:use-module (gnu packages audio)
               #:use-module (gnu packages autotools)
               #:use-module (gnu packages avahi)
               #:use-module (gnu packages base)
               #:use-module (gnu packages bash)
               #:use-module (gnu packages bison)
               #:use-module (gnu packages boost)
               #:use-module (gnu packages certs)
               #:use-module (gnu packages check)
               #:use-module (gnu packages code)
               #:use-module (gnu packages compression)
               #:use-module (gnu packages cpp)
               #:use-module (gnu packages crypto)
               #:use-module (gnu packages curl)
               #:use-module (gnu packages cyrus-sasl)
               #:use-module (gnu packages databases)
               #:use-module (gnu packages docbook)
               #:use-module (gnu packages documentation)
               #:use-module (gnu packages enchant)
               #:use-module (gnu packages erlang)
               #:use-module (gnu packages erlang-xyz)
               #:use-module (gnu packages fontutils)
               #:use-module (gnu packages freedesktop)
               #:use-module (gnu packages gettext)
               #:use-module (gnu packages glib)
               #:use-module (gnu packages gnome)
               #:use-module (gnu packages gnupg)
               #:use-module (gnu packages golang)
               #:use-module (gnu packages golang-build)
               #:use-module (gnu packages golang-check)
               #:use-module (gnu packages golang-compression)
               #:use-module (gnu packages golang-crypto)
               #:use-module (gnu packages golang-web)
               #:use-module (gnu packages golang-xyz)
               #:use-module (gnu packages gperf)
               #:use-module (gnu packages graphviz)
               #:use-module (gnu packages gstreamer)
               #:use-module (gnu packages gtk)
               #:use-module (gnu packages guile)
               #:use-module (gnu packages hunspell)
               #:use-module (gnu packages icu4c)
               #:use-module (gnu packages image)
               #:use-module (gnu packages imagemagick)
               #:use-module (gnu packages kde)
               #:use-module (gnu packages kde-frameworks)
               #:use-module (gnu packages kerberos)
               #:use-module (gnu packages less)
               #:use-module (gnu packages libcanberra)
               #:use-module (gnu packages libevent)
               #:use-module (gnu packages libffi)
               #:use-module (gnu packages libidn)
               #:use-module (gnu packages linux)
               #:use-module (gnu packages logging)
               #:use-module (gnu packages lua)
               #:use-module (gnu packages man)
               #:use-module (gnu packages markup)
               #:use-module (gnu packages matrix)
               #:use-module (gnu packages messaging)
               #:use-module (gnu packages mpd)
               #:use-module (gnu packages ncurses)
               #:use-module (gnu packages networking)
               #:use-module (gnu packages nss)
               #:use-module (gnu packages password-utils)
               #:use-module (gnu packages pcre)
               #:use-module (gnu packages perl)
               #:use-module (gnu packages photo)
               #:use-module (gnu packages php)
               #:use-module (gnu packages pkg-config)
               #:use-module (gnu packages protobuf)
               #:use-module (gnu packages python)
               #:use-module (gnu packages python-build)
               #:use-module (gnu packages python-check)
               #:use-module (gnu packages python-crypto)
               #:use-module (gnu packages python-web)
               #:use-module (gnu packages python-xyz)
               #:use-module (gnu packages qt)
               #:use-module (gnu packages readline)
               #:use-module (gnu packages regex)
               #:use-module (gnu packages ruby)
               #:use-module (gnu packages sphinx)
               #:use-module (gnu packages sqlite)
               #:use-module (gnu packages tcl)
               #:use-module (gnu packages telephony)
               #:use-module (gnu packages texinfo)
               #:use-module (gnu packages textutils)
               #:use-module (gnu packages tls)
               #:use-module (gnu packages video)
               #:use-module (gnu packages vulkan)
               #:use-module (gnu packages web)
               #:use-module (gnu packages xdisorg)
               #:use-module (gnu packages xiph)
               #:use-module (gnu packages xml) #:use-module (gnu packages xorg)
               #:use-module (gnu packages)
               #:use-module (guix build-system cmake)
               #:use-module (guix build-system copy)
               #:use-module (guix build-system glib-or-gtk)
               #:use-module (guix build-system gnu)
               #:use-module (guix build-system go)
               #:use-module (guix build-system meson)
               #:use-module (guix build-system perl)
               #:use-module (guix build-system pyproject)
               #:use-module (guix build-system python)
               #:use-module (guix build-system qt)
               #:use-module (guix build-system rebar)
               #:use-module (guix build-system trivial)
               #:use-module (guix download)
               #:use-module (guix gexp)
               #:use-module (guix git-download)
               #:use-module (guix hg-download)
               #:use-module (guix packages)
               #:use-module (guix utils))

(define-public psi-plus-webengine
               (package
                 (inherit psi-plus)
                 (name "psi-plus-webengine")

                 (arguments
                   `(#:tests? #f                      ; No target
                     #:imported-modules
                     (,@%qt-build-system-modules
                       (guix build glib-or-gtk-build-system))
                     #:modules
                     ((guix build qt-build-system)
                      ((guix build glib-or-gtk-build-system)
                       #:prefix glib-or-gtk:)
                      (guix build utils))
                     #:configure-flags
                     (list
                       "-DBUILD_PSIMEDIA=ON"           ; For A/V support
                       "-DENABLE_PLUGINS=ON"
                       "-DUSE_HUNSPELL=OFF"            ; Use Enchant instead
                       "-DUSE_ENCHANT=ON"
                       "-DCHAT_TYPE=webengine"
                       "-DUSE_CCACHE=OFF")             ; Not required
                     #:phases
                     (modify-phases %standard-phases
                                    (add-after 'unpack 'patch-source
                                               (lambda _
                                                 (substitute* "CMakeLists.txt"
                                                              (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/http-parser/http_parser.h")
                                                               "")
                                                              (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qhttp/qhttp.pro")
                                                               "")
                                                              (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qite/qite.pro")
                                                               "")
                                                              (("add_subdirectory\\( 3rdparty \\)")
                                                               ""))
                                                 (substitute* "src/CMakeLists.txt"
                                                              (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qite/libqite")
                                                               "")
                                                              (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/http-parser")
                                                               "")
                                                              (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qhttp/src/private")
                                                               "")
                                                              (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qhttp/src")
                                                               "")
                                                              (("\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty")
                                                               "")
                                                              (("add_dependencies\\(\\$\\{PROJECT_NAME\\} qhttp\\)")
                                                               "target_link_libraries(${PROJECT_NAME} qhttp)"))
                                                 (substitute* "src/src.cmake"
                                                              (("include\\(\\$\\{PROJECT_SOURCE_DIR\\}/3rdparty/qite/libqite/libqite.cmake\\)")
                                                               "list(APPEND EXTRA_LIBS qite)"))
                                                 (substitute* '("src/filesharingmanager.h" "src/widgets/psirichtext.cpp"
                                                                "src/filesharingmanager.cpp" "src/widgets/psitextview.cpp"
                                                                "src/chatview_te.cpp" "src/msgmle.cpp")
                                                              (("qite.h")
                                                               "qite/qite.h")
                                                              (("qiteaudio.h")
                                                               "qite/qiteaudio.h")
                                                              (("qiteaudiorecorder.h")
                                                               "qite/qiteaudiorecorder.h"))))
                                    (add-after 'install 'wrap-env
                                               (lambda* (#:key outputs #:allow-other-keys)
                                                        (let ((out (assoc-ref outputs "out")))
                                                          (for-each
                                                            (lambda (name)
                                                              (let ((file (string-append out "/bin/" name))
                                                                    (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH"))
                                                                    (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
                                                                (wrap-program file
                                                                              `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
                                                                              `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))
                                                            '("psi-plus")))))
                                    (add-after 'wrap-env 'glib-or-gtk-compile-schemas
                                               (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
                                    (add-after 'glib-or-gtk-compile-schemas 'glib-or-gtk-wrap
                                               (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
                 (inputs (modify-inputs (package-inputs psi-plus)
                                        (prepend qtwebengine-5)))
                 ))

(define-public discord-purple
               (let ((commit "c5dfbe0e1fd7de1f2adbf672f653f67e39686044")
                     (revision "0"))
                 (package
                   (name "discord-purple")
                   (version (git-version "1.0" revision commit))
                   (home-page "https://github.com/EionRobb/purple-discord/")
                   (source (origin
                             (method git-fetch)
                             (uri (git-reference
                                    (url "https://github.com/EionRobb/purple-discord")
                                    (commit commit)))
                             (file-name (git-file-name name version))
                             (sha256
                               (base32
                                 "07w06ack6blzi2yd5slj8ib34dw41hdw6179y8503dxvbzcb16q4"))))
                   (build-system gnu-build-system)
                   (arguments
                     `(#:phases (modify-phases %standard-phases
                                               (replace 'configure
                                                        (lambda* (#:key inputs outputs #:allow-other-keys)
                                                                 ;; Adjust the makefile to install files in the right place.
                                                                 (let ((out (assoc-ref outputs "out")))
                                                                   (substitute* "Makefile"
                                                                                (("DISCORD_DEST = .*")
                                                                                 (string-append "DISCORD_DEST = " out
                                                                                                "/lib/purple-2\n"))
                                                                                (("DISCORD_ICONS_DEST = .*")
                                                                                 (string-append "DISCORD_ICONS_DEST = "
                                                                                                out
                                                                                                "/share/pixmaps/pidgin/protocols\n"))
                                                                                (("LOCALE_DEST = .*")
                                                                                 (string-append "LOCALE_DEST = "
                                                                                                out
                                                                                                "/share/locale/\n"))

                                                                                )
                                                                   #t))))
                       #:make-flags (list "CC=gcc"
                                          ,(string-append "PLUGIN_VERSION=" version))
                       #:tests? #f))
                   (inputs
                     (list pidgin
                           libgcrypt
                           libwebp
                           glib
                           gtk+-2
                           zlib
                           json-glib
                           nss
                           qrencode
                           ))
                   (native-inputs
                     (list pkg-config
                           gettext-minimal
                           imagemagick
                           which))
                   (synopsis "Discord messaging support for Pidgin")
                   (description
                     "A libpurple/Pidgin plugin for Discord")
                   (license license:gpl3))))

(define-public matrix-purple
               (let ((commit "442003b9f16c4c4222ed36f871fcd018551fdc3f")
                     (revision "0"))
                 (package
                   (name "matrix-purple")
                   (version (git-version "1.0" revision commit))
                   (home-page "https://github.com/EionRobb/purple-matrix")
                   (source (origin
                             (method git-fetch)
                             (uri (git-reference
                                    (url "https://github.com/EionRobb/purple-matrix")
                                    (commit commit)))
                             (file-name (git-file-name name version))
                             (sha256
                               (base32
                                 "0b0gfvn9d82ynmnzq5vw28yrnp22qsmyp4lfaja6qr25aqdy943m"))
                             (patches
                               (search-patches "aux-files/matrix-purple/fix-g_memdup.patch"))
                             ))
                   (build-system gnu-build-system)
(arguments
  `(#:phases (modify-phases %standard-phases
                            (replace 'configure
                                     (lambda* (#:key inputs outputs #:allow-other-keys)
                                       ;; Adjust the makefile to install files in the right place.
                                       (let ((out (assoc-ref outputs "out")))
                                         (substitute* "Makefile"
                                          (("PLUGIN_DIR_PURPLE\t= .*")
                                           (string-append "PLUGIN_DIR_PURPLE\t= " out "/lib/purple-2\n"))
                                          (("DATA_ROOT_DIR_PURPLE\t= .*")
                                           (string-append "DATA_ROOT_DIR_PURPLE\t= " out "/lib/purple-2\n")))
                                         #t))))


                       #:make-flags (list "CC=gcc"
                                          ,(string-append "PLUGIN_VERSION=" version))
                       #:tests? #f))
                   (inputs
                     (list pidgin
                           libgcrypt
                           libwebp
                           glib
                           gtk+-2
                           zlib
                           json-glib
                           nss
                           sqlite
                           libolm
                           http-parser
                           ))
                   (native-inputs
                     (list pkg-config
                           gettext-minimal
                           imagemagick
                           which

                           coreutils
                           ))
                   (synopsis "Discord messaging support for Pidgin")
                   (description
                     "A libpurple/Pidgin plugin for Discord")
                   (license license:gpl3))))