diff --git a/.ci/windows/build.bat b/.ci/windows/build.bat
index 4d392cb7..7e952237 100644
--- a/.ci/windows/build.bat
+++ b/.ci/windows/build.bat
@@ -4,7 +4,7 @@
if defined CI_COMMIT_TAG (
set VERSION=%CI_COMMIT_TAG%
) else (
- set VERSION=v0.11.3
+ set VERSION=v0.12.0
)
set INSTVERSION=%VERSION:~1%
set WINVERSION=%VERSION:~1%.%CI_JOB_ID%
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 464d0f86..13fe25dd 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -96,9 +96,14 @@ pages:
- apk add curl jq
script:
- export LATEST_WINDOWS_NIGHTLY=$(curl "https://nheko.im/api/v4/projects/2/packages?package_name=windows-nightly&order_by=version&sort=desc" | jq -r '.[0].version')
- - sed "s/0.11.3.4/${LATEST_WINDOWS_NIGHTLY}/g" -i resources/NhekoNightly.appinstaller
+ #- export LATEST_WINDOWS=$(curl "https://nheko.im/api/v4/projects/2/packages?package_name=windows&order_by=version&sort=desc" | jq -r '.[0].version')
+ # hardcoded to avoid fuzzy matching
+ - export LATEST_WINDOWS='0.12.0.35798'
+ - sed "s/0.12.0.0/${LATEST_WINDOWS_NIGHTLY}/g" -i resources/NhekoNightly.appinstaller
+ - sed "s/0.12.0.0/${LATEST_WINDOWS}/g" -i resources/Nheko.appinstaller
- mkdir public
- mv resources/NhekoNightly.appinstaller public
+ - mv resources/Nheko.appinstaller public
needs:
- job: upload-windows
optional: true
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 687307a3..955dcb04 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,16 @@
# Changelog
-## [0.12.0] -- unreleased
+## [0.12.0] -- 2024-06-12
+
+### Notes
+
+The packages for windows are split into an appinstaller file with autoupdates
+and an msix, which can be installed directly and won't check for updates. The
+appimage is currently disabled until someone ports it to Qt6. The flatpak appid
+changed and you will need to migrate manually.
+
+For packagers most of our dependencies have been changed or updated. Most
+significantly Nheko now depends on KDSingleApplication and Qt6.
### Highlights
@@ -48,7 +58,7 @@
- Disable workarounds for inline images for Qt6.7 and up.
- Various improvements around window activation on Wayland. (q234rty)
- Update emoji shortcodes. (TheDrawingCoder-Gamer)
-- Windows and Apple Silicon builds on our own hardware. (Thanks Thulnima for
+- Windows and Apple Silicon builds on our own hardware. (Thanks Thulinma for
sponsoring access the Apple Silicon box)
- MSIX builds and appinstaller for Windows with valid signatures and automatic updates.
- Add environment variable to dump the video call pipeline.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e374177a..04738bda 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -113,8 +113,8 @@ include(QtCommon)
include(GNUInstallDirs)
set(CPACK_PACKAGE_VERSION_MAJOR "0")
-set(CPACK_PACKAGE_VERSION_MINOR "11")
-set(CPACK_PACKAGE_VERSION_PATCH "3")
+set(CPACK_PACKAGE_VERSION_MINOR "12")
+set(CPACK_PACKAGE_VERSION_PATCH "0")
set(PROJECT_VERSION_MAJOR ${CPACK_PACKAGE_VERSION_MAJOR})
set(PROJECT_VERSION_MINOR ${CPACK_PACKAGE_VERSION_MINOR})
set(PROJECT_VERSION_PATCH ${CPACK_PACKAGE_VERSION_PATCH})
@@ -125,8 +125,8 @@ fix_project_version()
# Set additional project information
set(COMPANY "Nheko")
-set(COPYRIGHT "Copyright (c) 2023 Nheko Contributors")
-set(IDENTIFIER "io.github.nheko-reborn.nheko")
+set(COPYRIGHT "Copyright (c) 2024 Nheko Contributors")
+set(IDENTIFIER "im.nheko.Nheko")
add_project_meta(META_FILES_TO_INCLUDE)
diff --git a/README.md b/README.md
index 0f88462e..41b32886 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,7 @@ feels more like a mainstream chat app ([Element], Telegram etc) and less like an
### Stable
[](https://github.com/Nheko-Reborn/nheko/releases/latest)
-<a href='https://flathub.org/apps/details/io.github.NhekoReborn.Nheko'><img height='32' alt='Download on Flathub' src='https://flathub.org/assets/badges/flathub-badge-en.png'/></a>
+<a href='https://flathub.org/apps/details/im.nheko.Nheko'><img height='32' alt='Download on Flathub' src='https://flathub.org/assets/badges/flathub-badge-en.png'/></a>
[](https://repology.org/project/nheko/versions)
For other options and details see the [Installation](#installation) section.
@@ -39,17 +39,19 @@ Most of the features you would expect from a chat application are missing right
but we are getting close to a more feature complete client.
Specifically there is support for:
- E2E encryption.
-- VoIP calls (voice & video).
+- VoIP calls (voice & video, support varies by platform).
- User registration.
- Creating, joining & leaving rooms.
- Sending & receiving invites.
- Sending & receiving files and emoji (inline widgets for images, audio and file messages).
+- Custom stickers and emoji.
- Replies with text, images and other media (and actually render them as inline widgets).
- Typing notifications.
- Username auto-completion.
- Message & mention notifications.
- Redacting messages.
- Read receipts.
+- Presence and status messages (if enabled on the server side).
- Basic communities support.
- Room switcher (ctrl-K).
- Light, Dark & System themes.
@@ -60,8 +62,9 @@ Specifically there is support for:
### Releases
-Releases for Linux (AppImage), macOS (disk image) & Windows (x64 installer)
+Releases for Linux (Flatpak), macOS (disk image) & Windows (x64 msix or appinstaller)
can be found in the [GitHub releases](https://github.com/Nheko-Reborn/nheko/releases).
+The appinstaller on Windows will regularly check our servers for updates. The msix won't.
### Repositories
@@ -171,7 +174,7 @@ sudo zypper install qt-jdenticon
#### Flatpak
```
-flatpak install flathub io.github.NhekoReborn.Nheko
+flatpak install flathub im.nheko.Nheko
```
#### Guix
@@ -185,8 +188,8 @@ guix install nheko
Install nheko via the `Discover` app in Desktop Mode (this installs the flatpak). To also make it work in Game Mode you'll have create a wrapper script that starts kwalletd and then nheko. You can create `/home/deck/nheko.sh` with the following content and then add this script as a "Non-Steam Game" to Steam.
```bash
#!/bin/sh
-kwalletd5&
-flatpak run --env=XDG_CURRENT_DESKTOP=KDE --env=KDE_SESSION_VERSION=5 --branch=stable --arch=x86_64 --command=io.github.NhekoReborn.Nheko --file-forwarding io.github.NhekoReborn.Nheko @@u @@
+kwalletd6&
+flatpak run --env=XDG_CURRENT_DESKTOP=KDE --env=KDE_SESSION_VERSION=5 --branch=stable --arch=x86_64 --command=im.nheko.Nheko --file-forwarding im.nheko.Nheko @@u @@
```
#### macOS (10.14 and above)
@@ -265,23 +268,23 @@ sharing easier.
**A:** Nheko uses Qt's image plugins to render images. You might need to install
additional packages to display some image types like webp. Usually those
-packages are called `qt5-image-formats-plugins`, `qt5-imageformats` or similar.
+packages are called `qt6-image-formats-plugins`, `qt6-imageformats` or similar.
KDE has similar plugins, that can extend the supported image types even more.
---
### Build Requirements
-- Qt5 (5.15 or greater). Required for overlapping hover handlers in Qml.
+- Qt6 (6.5 or greater). Required for overlapping hover handlers in Qml.
- CMake 3.15 or greater. (Lower version may work, but may break boost linking)
- [mtxclient](https://github.com/Nheko-Reborn/mtxclient)
- [coeurl](https://nheko.im/nheko-reborn/coeurl)
-- [LMDB](https://symas.com/lightning-memory-mapped-database/)
+- [LMDB](https://www.symas.com/lmdb)
- [lmdb++](https://github.com/hoytech/lmdbxx) (0.9.14 too old)
- [cmark](https://github.com/commonmark/cmark) 0.29 or greater.
- [libolm](https://gitlab.matrix.org/matrix-org/olm)
- [spdlog](https://github.com/gabime/spdlog) (1.8.1 too old)
-- [GStreamer](https://gitlab.freedesktop.org/gstreamer) 1.18.0 or greater (optional, needed for VoIP support. Pass `-DVOIP=OFF` to disable.).
+- [GStreamer](https://gitlab.freedesktop.org/gstreamer) 1.20.0 or greater (optional, needed for VoIP support. Pass `-DVOIP=OFF` to disable.).
- Installing the gstreamer core library plus gst-plugins-base, gst-plugins-good & gst-plugins-bad
is often sufficient. The qmlgl plugin though is often packaged separately. The actual plugin requirements
are as follows:
@@ -293,7 +296,7 @@ KDE has similar plugins, that can extend the supported image types even more.
- [KDSingleApplication](https://github.com/KDAB/KDSingleApplication) (1.0 or greater with Qt6 support)
- A compiler that supports C++ 20:
- Clang 16 (Only clazy 16 is tested in CI)
- - GCC 11 (tested on Gitlab CI)
+ - GCC 11.3 (tested on Gitlab CI)
- MSVC 19.13 (tested on AppVeyor)
Nheko can use bundled version for most of those libraries automatically, if the versions in your distro are too old.
@@ -331,17 +334,17 @@ make docker-app-image
#### Arch Linux
```bash
-sudo pacman -S qt5-base \
- qt5-tools \
- qt5-multimedia \
- qt5-svg \
+sudo pacman -S qt6-base \
+ qt6-tools \
+ qt6-multimedia \
+ qt6-svg \
cmake \
gcc \
fontconfig \
lmdb \
cmark \
boost \
- qtkeychain-qt5
+ qtkeychain-qt6
```
#### Debian 13 [Testing/Sid] (Nheko QT6 Version)
@@ -363,8 +366,8 @@ cmake --build build
*Build requirements + qml modules needed at runtime (you may not need all of them, but the following seem to work according to reports):*
```bash
sudo apt install --no-install-recommends g++ cmake make zlib1g-dev libssl-dev libolm-dev liblmdb-dev libcmark-dev nlohmann-json3-dev libspdlog-dev libevent-dev libcurl4-openssl-dev libre2-dev libxcb-ewmh-dev asciidoc-base \
-qt{base,declarative,tools,multimedia,quickcontrols2-}5-dev libqt5svg5-dev qt5keychain-dev qml-module-qt{gstreamer,multimedia,quick-extras,-labs-settings,-labs-platform,graphicaleffects,quick-controls2,quick-particles2} \
-libgstreamer1.0-dev libgstreamer-plugins-{base,bad}1.0-dev qtgstreamer-plugins-qt5 libnice-dev ninja-build
+qt{base,declarative,tools,multimedia,quickcontrols2-}5-dev libqt6svg5-dev qt6keychain-dev qml-module-qt{gstreamer,multimedia,quick-extras,-labs-settings,-labs-platform,graphicaleffects,quick-controls2,quick-particles2} \
+libgstreamer1.0-dev libgstreamer-plugins-{base,bad}1.0-dev qtgstreamer-plugins-qt6 libnice-dev ninja-build
```
lmdb++-dev is too old so bundled lmdbxx must be used.
libspdlog-dev in debian bullseye is too old (without backporting) so requires using hunter to use bundled spdlog.
@@ -393,7 +396,7 @@ guix environment nheko
```bash
brew update
-brew install qt5 lmdb cmake llvm spdlog boost cmark libolm qtkeychain
+brew install qt6 lmdb cmake llvm spdlog boost cmark libolm qtkeychain
```
#### Windows
@@ -426,18 +429,18 @@ Adapt the USE_BUNDLED_* as needed.
If the build fails with the following error
```
-Could not find a package configuration file provided by "Qt5Widgets" with
+Could not find a package configuration file provided by "Qt6Widgets" with
any of the following names:
-Qt5WidgetsConfig.cmake
-qt5widgets-config.cmake
+Qt6WidgetsConfig.cmake
+qt6widgets-config.cmake
```
-You might need to pass `-DCMAKE_PREFIX_PATH` to cmake to point it at your qt5 install.
+You might need to pass `-DCMAKE_PREFIX_PATH` to cmake to point it at your qt6 install.
e.g on macOS
```
-cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=$(brew --prefix qt5)
+cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=$(brew --prefix qt6)
cmake --build build
```
@@ -448,11 +451,11 @@ The `nheko` binary will be located in the `build` directory.
After installing all dependencies, you need to edit the `CMakeSettings.json` to
be able to load and compile nheko within Visual Studio.
-You need to fill out the paths for the `Qt5_DIR`.
-The Qt5 dir should point to the `lib\cmake\Qt5` dir.
+You need to fill out the paths for the `Qt6_DIR`.
+The Qt6 dir should point to the `lib\cmake\Qt6` dir.
Examples for the paths are:
- - `C:\\Qt\\5.15.1\\msvc2017_64\\lib\\cmake\\Qt5`
+ - `C:\\Qt\\6.5.2\\msvc2017_64\\lib\\cmake\\Qt6`
You should also enable hunter by setting `HUNTER_ENABLED` to `ON` and `BUILD_SHARED_LIBS` to `OFF`.
diff --git a/appveyor.yml b/appveyor.yml
deleted file mode 100644
index 084e7179..00000000
--- a/appveyor.yml
+++ /dev/null
@@ -1,134 +0,0 @@
----
-
-version: 0.11.3-{build}
-
-configuration: Release
-image: Visual Studio 2022
-platform: x64
-
-environment:
- APPVEYOR_SAVE_CACHE_ON_ERROR: true
- MATRIX_ACCESS_TOKEN:
- secure: Qoy+QQ8zWXYCQrck9GtXJsoPTv9r/rhgCDUlKJ6ue+gkteYG40E9MxgwP1svn6bse20H4z6Svrxn8kFbcJB7Wg2Cnv1s326/vsJJzhWir2eHFFGK+f4SB992/U0HoQmk3Cq5hPk7dLcA7KqHIa1g1PTSFPfl1VODJ2UqqAyn8nzbC5ym+wwU1buJqoWPlTyHBW7eE8wNe77+qI18XpF7NN8yuOOyg3Tzup9YyXLrI36XiJu/5JD3j3s3V1QiUTpuLyQzqwuBUOf1MHTbzuPwHm3ZwzSM98WD6aL6riaK9qa7mDbSx1aY0ukIYSY9IdAfHNwZY/DEAn+QAVD+ZTvPq04ASv+kmSFpOBKr07kpqfM=
-
-
-
-cache:
- - c:\hunter\ -> appveyor.yml, CMakeLists.txt, cmake/Hunter/config.cmake
- - build\_deps -> appveyor.yml, CMakeLists.txt
-
-build:
- verbosity: minimal
-
-install:
- - set QT_DIR=C:\Qt\6.5\msvc2019_64
- - set PATH=C:\Strawberry\perl\bin;C:\Python39-x64;%QT_DIR%\bin;%PATH%
-
-build_script:
- # VERSION format: branch-master/branch-1.2
- # INSTVERSION format: x.y.z
- # WINVERSION format: 9999.0.0.123/1.2.0.234
- - if "%APPVEYOR_REPO_TAG%"=="false" set INSTVERSION=0.11.3
- - if "%APPVEYOR_REPO_TAG%"=="false" set VERSION=0.11.3
- - if "%APPVEYOR_REPO_TAG%"=="false" set WINVERSION=%INSTVERSION%.%APPVEYOR_BUILD_NUMBER%
- # VERSION format: v1.2.3/v1.3.4
- # INSTVERSION format: 1.2.3/1.3.4
- # WINVERSION format: 1.2.3.123/1.3.4.234
- - if "%APPVEYOR_REPO_TAG%"=="true" set VERSION=%APPVEYOR_REPO_TAG_NAME%
- - if "%APPVEYOR_REPO_TAG%"=="true" set INSTVERSION=%VERSION:~1%
- - if "%APPVEYOR_REPO_TAG%"=="true" set WINVERSION=%VERSION:~1%.%APPVEYOR_BUILD_NUMBER%
- - set DATE=%date:~10,4%-%date:~4,2%-%date:~7,2%
- - echo %VERSION%
- - echo %INSTVERSION%
- - echo %DATE%
-
- # Build nheko
- - cmake -G "Visual Studio 17 2022" -A x64 -H. -Bbuild
- -DHUNTER_ROOT="C:\hunter"
- -DHUNTER_ENABLED=ON -DBUILD_SHARED_LIBS=OFF -DUSE_BUNDLED_OPENSSL=ON -DUSE_BUNDLED_KDSINGLEAPPLICATION=ON
- -DCMAKE_BUILD_TYPE=Release -DHUNTER_CONFIGURATION_TYPES=Release
-
- - cmake --build build --config Release
-
- - call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
- - git clone https://github.com/Nheko-Reborn/qt-jdenticon.git
- - cd qt-jdenticon
- - qmake
- - nmake
- - cd ..
-
-after_build:
- # Variables
- - set BUILD=%APPVEYOR_BUILD_FOLDER%
- - echo %BUILD%
- - mkdir NhekoRelease
- - copy build\Release\nheko.exe NhekoRelease\nheko.exe
- - copy qt-jdenticon\release\qtjdenticon0.dll NhekoRelease\qtjdenticon.dll
- - copy build\_deps\cmark-build\src\Release\cmark.dll NhekoRelease\cmark.dll
- - windeployqt --qmldir resources\qml\ NhekoRelease\nheko.exe
-
- - 7z a nheko_win_64.zip .\NhekoRelease\*
- - ls -lh build\Release\
- - ls -lh NhekoRelease\
- - mkdir NhekoData
- - xcopy .\NhekoRelease\*.* NhekoData\*.* /s /e /c /y
- #
- # Create the Qt Installer Framework version
- #
- - mkdir installer
- - mkdir installer\config
- - mkdir installer\packages
- - mkdir installer\packages\io.github.nhekoreborn.nheko
- - mkdir installer\packages\io.github.nhekoreborn.nheko\data
- - mkdir installer\packages\io.github.nhekoreborn.nheko\meta
- # Copy installer data
- - copy %BUILD%\resources\nheko.ico installer\config
- - copy %BUILD%\resources\nheko.png installer\config
- - copy %BUILD%\COPYING installer\packages\io.github.nhekoreborn.nheko\meta\license.txt
- - copy %BUILD%\deploy\installer\config.xml installer\config
- - copy %BUILD%\deploy\installer\controlscript.qs installer\config
- - copy %BUILD%\deploy\installer\uninstall.qs installer\packages\io.github.nhekoreborn.nheko\data
- - copy %BUILD%\deploy\installer\gui\package.xml installer\packages\io.github.nhekoreborn.nheko\meta
- - copy %BUILD%\deploy\installer\gui\installscript.qs installer\packages\io.github.nhekoreborn.nheko\meta
- # Amend version and date
- - sed -i "s/__VERSION__/%VERSION%/" installer\config\config.xml
- - sed -i "s/__VERSION__/%VERSION%/" installer\packages\io.github.nhekoreborn.nheko\meta\package.xml
- - sed -i "s/__DATE__/%DATE%/" installer\packages\io.github.nhekoreborn.nheko\meta\package.xml
- # Copy nheko data
- - xcopy NhekoData\*.* installer\packages\io.github.nhekoreborn.nheko\data\*.* /s /e /c /y
- - copy NhekoRelease\nheko.exe installer\packages\io.github.nhekoreborn.nheko\data
- - mkdir tools
- - curl -L -O https://download.qt.io/official_releases/qt-installer-framework/4.3.0/QtInstallerFramework-windows-x86-4.3.0.exe
- - 7z x QtInstallerFramework-windows-x86-4.3.0.exe -otools -aoa
- - set PATH=%BUILD%\tools\bin;%PATH%
- - binarycreator.exe -f -c installer\config\config.xml -p installer\packages nheko-installer.exe
-
- # build an msix
- - mkdir msix
- - xcopy .\NhekoRelease\*.* msix\*.* /s /e /c /y
- - copy %BUILD%\resources\nheko.png msix
- - copy %BUILD%\resources\AppxManifest.xml msix
- - del msix\vc_redist*
- - 'sed -i "s/ Version=[^ ]*/ Version=\"%WINVERSION%\"/" msix\AppxManifest.xml'
- - '"C:\Program Files (x86)\Windows Kits\10\App Certification Kit\makeappx.exe" pack -d msix -p nheko.msix'
-
- - copy nheko-installer.exe nheko-%APPVEYOR_REPO_TAG_NAME%-installer.exe
- - copy nheko-installer.exe nheko-%APPVEYOR_PULL_REQUEST_HEAD_COMMIT%-installer.exe
- - ps: .\.ci\upload-nightly.ps1
-
-deploy:
- - description: "Development builds"
- provider: GitHub
- auth_token:
- secure: "ShStWeqp+TkYqJPQr7uFZb+B8ZTgC7Iwth+IkhjfRDCTLhy8gtWvlPzlQilder3E"
- artifact: nheko-${APPVEYOR_REPO_TAG_NAME}-installer.exe
- force_update: true
- prerelease: true
- on:
- appveyor_repo_tag: true
-
-artifacts:
- - path: nheko_win_64.zip
- - path: nheko.msix
- - path: nheko-$(APPVEYOR_REPO_TAG_NAME)-installer.exe
- - path: nheko-$(APPVEYOR_PULL_REQUEST_HEAD_COMMIT)-installer.exe
diff --git a/im.nheko.Nheko.yaml b/im.nheko.Nheko.yaml
index 0bfae7fa..8cdc5edb 100644
--- a/im.nheko.Nheko.yaml
+++ b/im.nheko.Nheko.yaml
@@ -1,21 +1,23 @@
id: im.nheko.Nheko
command: im.nheko.Nheko
runtime: org.kde.Platform
-runtime-version: '6.6'
+runtime-version: '6.7'
sdk: org.kde.Sdk
finish-args:
- - --device=dri
- # needed for webcams, see #517
+ # needed for webcams, see https://github.com/Nheko-Reborn/nheko/issues/517
- --device=all
- --share=ipc
- --share=network
- --socket=pulseaudio
- - --socket=wayland
- --socket=x11
+ - --socket=wayland
- --talk-name=org.freedesktop.Notifications
- --talk-name=org.freedesktop.secrets
+ - --talk-name=org.kde.kwalletd5
+ - --talk-name=org.kde.kwalletd6
- --talk-name=org.freedesktop.StatusNotifierItem
- - --talk-name=org.kde.*
+ # needed for tray icon
+ - --talk-name=org.kde.StatusNotifierWatcher
cleanup:
- /include
- /lib/pkgconfig
@@ -83,18 +85,18 @@ modules:
- sha256: 5197b3147cfcfaa67dd564db7b878e4a4b3d9f3443801722b3915cdeced656cb
type: archive
url: https://github.com/gabime/spdlog/archive/v1.8.1.tar.gz
- - config-opts:
+ - name: olm
+ config-opts:
- -DCMAKE_BUILD_TYPE=Release
buildsystem: cmake-ninja
- name: olm
sources:
- commit: 92769cec711c604a1f682b95d6944578d2a1bb3d
disable-shallow-clone: true
tag: 3.2.12
type: git
url: https://gitlab.matrix.org/matrix-org/olm.git
- - buildsystem: meson
- name: libsecret
+ - name: libsecret
+ buildsystem: meson
config-opts:
- -Dmanpage=false
- -Dvapi=false
@@ -137,51 +139,52 @@ modules:
# tag: v5.93.0
# type: git
# url: https://invent.kde.org/frameworks/kimageformats.git
- - config-opts:
+ - name: QtKeychain
+ config-opts:
- -DCMAKE_BUILD_TYPE=Release
- -DBUILD_TEST_APPLICATION=OFF
- -DQTKEYCHAIN_STATIC=ON
- -DBUILD_WITH_QT6=ON
buildsystem: cmake-ninja
- name: QtKeychain
sources:
- commit: 69f993c47efed7e557d79a30a367014d9a27d809
tag: 0.14.1
type: git
url: https://github.com/frankosterfeld/qtkeychain.git
- - config-opts:
+ - name: nlohmann
+ config-opts:
- -DJSON_BuildTests=OFF
- buildsystem: cmake
- name: nlohmann
+ buildsystem: cmake-ninja
sources:
- sha256: d69f9deb6a75e2580465c6c4c5111b89c4dc2fa94e3a85fcd2ffcd9a143d9273
type: archive
url: https://github.com/nlohmann/json/archive/v3.11.2.tar.gz
- - config-opts:
+ - name: kdsingleapplication
+ config-opts:
- -DKDSingleApplication_EXAMPLES=OFF
- -DKDSingleApplication_QT6=ON
- buildsystem: cmake
- name: kdsingleapplication
+ buildsystem: cmake-ninja
sources:
- sha256: c92355dc10f3ebd39363458458fb5bdd9662e080cf77d91f0437763c4d936520
type: archive
url: https://github.com/KDAB/KDSingleApplication/releases/download/v1.0.0/kdsingleapplication-1.0.0.tar.gz
- - buildsystem: simple
+ - name: re2
+ buildsystem: simple
build-commands:
- make static
- make prefix=/app static-install
- name: re2
sources:
- sha256: f89c61410a072e5cbcf8c27e3a778da7d6fd2f2b5b1445cd4f4508bee946ab0f
type: archive
url: https://github.com/google/re2/archive/refs/tags/2022-06-01.tar.gz
- - buildsystem: meson
- name: gstreamer
+ - name: gstreamer
+ buildsystem: meson
sources:
- - commit: 4d13eddc8b6d3f42ba44682ba42048acf170547f
- tag: 1.22.7
+ - commit: d2c02bb704b5804ca057fc7e6c7b16b4466fd7d5
+ tag: 1.22.12
type: git
url: https://gitlab.freedesktop.org/gstreamer/gstreamer.git
+ disable-submodules: true
config-opts:
- --auto-features=disabled
- -Dgood=enabled
@@ -195,46 +198,46 @@ modules:
- -Dgst-plugins-base:gl_winsys=x11,wayland
- -Dgst-plugins-base:x11=enabled
- -Dgst-plugins-base:xshm=enabled
- - buildsystem: cmake
- name: qt-jdenticon
+ - name: qt-jdenticon
+ buildsystem: cmake-ninja
no-make-install: true
build-commands:
- mkdir -p /app/bin/
- cp libqtjdenticon.so /app/bin/
sources:
- - commit: 1e7013d64fd081d76e4ce69f2693129c817fd8f1
- #tag: v0.3.0
+ - commit: 39cde33d4b23b57aa5b94e94071d6ff18d2bd92a
+ tag: v0.3.1
type: git
url: https://github.com/Nheko-Reborn/qt-jdenticon.git
- - buildsystem: meson
+ - name: coeurl
+ buildsystem: meson
config-opts:
- -Ddefault_library=static
- name: coeurl
sources:
- commit: 3007387745cf84138d0855e0f04ff94261fc7175
#tag: v0.3.0
type: git
url: https://nheko.im/nheko-reborn/coeurl.git
- - config-opts:
+ - name: mtxclient
+ config-opts:
- -DBUILD_LIB_TESTS=OFF
- -DBUILD_LIB_EXAMPLES=OFF
- -DCMAKE_BUILD_TYPE=Release
- -DBUILD_SHARED_LIBS=OFF
buildsystem: cmake-ninja
- name: mtxclient
sources:
- commit: 457bc52773b40142848f0b2ab025516bf6ed634d
tag: v0.10.0
type: git
url: https://github.com/Nheko-Reborn/mtxclient.git
- - config-opts:
+ - name: nheko
+ config-opts:
- -DCMAKE_BUILD_TYPE=Release
- -DLMDBXX_INCLUDE_DIR=.deps/lmdbxx
- -DCOMPILE_QML=ON
- -DMAN=OFF
- -DFLATPAK=ON
buildsystem: cmake-ninja
- name: nheko
sources:
- path: .
type: dir
diff --git a/resources/AppxManifest.xml b/resources/AppxManifest.xml
index 9f933604..8253f839 100644
--- a/resources/AppxManifest.xml
+++ b/resources/AppxManifest.xml
@@ -4,7 +4,7 @@
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities">
- <Identity Name="im.nheko.Nheko" Version="0.11.3.4" Publisher="CN=Nicolas Werner, O=Nicolas Werner, L=Munich, S=Bavaria, C=DE" ProcessorArchitecture="x64"/>
+ <Identity Name="im.nheko.Nheko" Version="0.12.0.0" Publisher="CN=Nicolas Werner, O=Nicolas Werner, L=Munich, S=Bavaria, C=DE" ProcessorArchitecture="x64"/>
<Properties>
<DisplayName>Nheko</DisplayName>
<PublisherDisplayName>Nheko-Reborn</PublisherDisplayName>
diff --git a/resources/Nheko.appinstaller b/resources/Nheko.appinstaller
new file mode 100644
index 00000000..004a0d73
--- /dev/null
+++ b/resources/Nheko.appinstaller
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<AppInstaller Uri="https://nheko-reborn.pages.nheko.im/nheko/Nheko.appinstaller" Version="0.0.0.1" xmlns="http://schemas.microsoft.com/appx/appinstaller/2018">
+ <MainPackage Name="im.nheko.Nheko" Version="0.12.0.0" Publisher="CN=Nicolas Werner, O=Nicolas Werner, L=Munich, S=Bavaria, C=DE" Uri="https://nheko.im/api/v4/projects/2/packages/generic/windows/0.12.0.0/nheko.msix" ProcessorArchitecture="x64" />
+ <UpdateSettings>
+ <!-- We can't set this to check only once a month, so just check once a week. If the user doesn't want that ping, they should install the msix directly. -->
+ <OnLaunch HoursBetweenUpdateChecks="168" ShowPrompt="true" />
+ <ForceUpdateFromAnyVersion>true</ForceUpdateFromAnyVersion>
+ </UpdateSettings>
+</AppInstaller>
+
diff --git a/resources/NhekoNightly.appinstaller b/resources/NhekoNightly.appinstaller
index bd94f5d9..88f1fd8a 100644
--- a/resources/NhekoNightly.appinstaller
+++ b/resources/NhekoNightly.appinstaller
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<AppInstaller Uri="https://nheko-reborn.pages.nheko.im/nheko/NhekoNightly.appinstaller" Version="0.0.0.1" xmlns="http://schemas.microsoft.com/appx/appinstaller/2018">
- <MainPackage Name="im.nheko.Nheko" Version="0.11.3.4" Publisher="CN=Nicolas Werner, O=Nicolas Werner, L=Munich, S=Bavaria, C=DE" Uri="https://nheko.im/api/v4/projects/2/packages/generic/windows-nightly/0.11.3.4/nheko.msix" ProcessorArchitecture="x64" />
+ <MainPackage Name="im.nheko.Nheko" Version="0.12.0.0" Publisher="CN=Nicolas Werner, O=Nicolas Werner, L=Munich, S=Bavaria, C=DE" Uri="https://nheko.im/api/v4/projects/2/packages/generic/windows-nightly/0.12.0.0/nheko.msix" ProcessorArchitecture="x64" />
<UpdateSettings>
<!-- We can't set this to check only once a month, so just check once a week. If the user doesn't want that ping, they should install the msix directly. -->
<OnLaunch HoursBetweenUpdateChecks="168" ShowPrompt="true" />
diff --git a/resources/nheko.appdata.xml.in b/resources/nheko.appdata.xml.in
index 69a632a1..77d1c6ad 100644
--- a/resources/nheko.appdata.xml.in
+++ b/resources/nheko.appdata.xml.in
@@ -59,6 +59,13 @@
<url type="homepage">https://github.com/Nheko-Reborn/nheko</url>
<update_contact>https://github.com/Nheko-Reborn</update_contact>
<releases>
+ <release date="2024-06-12" version="0.12.0">
+ <description>
+ <p>This release features a complete port to Qt6, intentional mentions, expiring messages, ignoring users, better sticker and emoji handling and much, much more!</p>
+ </description>
+
+ <url>https://github.com/Nheko-Reborn/nheko/releases/tag/v0.12.0</url>
+ </release>
<release date="2023-02-23" version="0.11.3"/>
<release date="2023-02-20" version="0.11.2"/>
<release date="2023-01-15" version="0.11.1"/>
diff --git a/resources/qml/RoomList.qml b/resources/qml/RoomList.qml
index 350b3846..c82bc43a 100644
--- a/resources/qml/RoomList.qml
+++ b/resources/qml/RoomList.qml
@@ -249,6 +249,8 @@ Page {
prompt: qsTr("Enter your status message:")
title: qsTr("Status Message")
+ text: userInfoGrid.profile ? Presence.userStatus(userInfoGrid.profile.userid) : ""
+
onAccepted: function (text) {
Nheko.setStatusMessage(text);
}
diff --git a/resources/qml/dialogs/InputDialog.qml b/resources/qml/dialogs/InputDialog.qml
index bf3cbc9a..c963febb 100644
--- a/resources/qml/dialogs/InputDialog.qml
+++ b/resources/qml/dialogs/InputDialog.qml
@@ -13,6 +13,8 @@ ApplicationWindow {
property alias prompt: promptLabel.text
property alias echoMode: statusInput.echoMode
+ property alias text: statusInput.text
+
signal accepted(text: string)
modality: Qt.NonModal
diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp
index 2d15d01a..57c1263b 100644
--- a/src/timeline/InputBar.cpp
+++ b/src/timeline/InputBar.cpp
@@ -187,9 +187,6 @@ InputBar::addMention(QString mention, QString text)
mentionTexts_.push_back(text);
emit mentionsChanged();
- if (mention == u"@room") {
- this->containsAtRoom_ = true;
- }
}
}
@@ -200,9 +197,6 @@ InputBar::removeMention(QString mention)
mentions_.removeAt(idx);
mentionTexts_.removeAt(idx);
emit mentionsChanged();
- if (mention == u"@room") {
- this->containsAtRoom_ = false;
- }
}
}
@@ -244,6 +238,7 @@ InputBar::updateTextContentProperties(const QString &t, bool charDeleted)
auto roomMention = containsRoomMention(t) && this->room->permissions()->canPingRoom();
if (roomMention != this->containsAtRoom_) {
+ this->containsAtRoom_ = roomMention;
if (roomMention)
addMention(QStringLiteral(u"@room"), QStringLiteral(u"@room"));
else
@@ -500,8 +495,11 @@ mtx::common::Mentions
InputBar::generateMentions()
{
std::vector<std::string> userMentions;
+ bool atRoom = false;
for (const auto &m : mentions_)
- if (m != u"@room")
+ if (m == u"@room")
+ atRoom = true;
+ else
userMentions.push_back(m.toStdString());
if (!room->reply().isEmpty()) {
@@ -515,7 +513,8 @@ InputBar::generateMentions()
auto mention = mtx::common::Mentions{
.user_ids = userMentions,
- .room = containsAtRoom_,
+ // We use the atRoom from the mentions list to allow suppressing a room mention
+ .room = atRoom,
};
// this->containsAtRoom_ = false;
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 14fd574b..48b58ee5 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -736,7 +736,9 @@ TimelineModel::data(const mtx::events::collections::TimelineEvents &event, int r
.arg(displayName(QString::fromStdString(e.sender)))
.arg(QStringLiteral("<img height=\"32\" src=\"%1\">")
.arg(QUrl::toPercentEncoding(
- QString::fromStdString(e.content.url))));
+ QString::fromStdString(e.content.url)
+ .replace("mxc://", "image://MxcImage/"),
+ ":/")));
else
return tr("%1 removed the room avatar.")
.arg(displayName(QString::fromStdString(e.sender)));
@@ -2244,8 +2246,9 @@ TimelineModel::getRoomVias(const QString &roomId)
void
TimelineModel::copyLinkToEvent(const QString &eventId) const
{
- auto link = QStringLiteral("%1/%2?%3")
- .arg(getBareRoomLink(room_id_),
+ // Event links shouldn't use an alias, since that can be repointed.
+ auto link = QStringLiteral("https://matrix.to/#/%1/%2?%3")
+ .arg(QUrl::toPercentEncoding(room_id_),
QString(QUrl::toPercentEncoding(eventId)),
getRoomVias(room_id_));
QGuiApplication::clipboard()->setText(link);
|