diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1012c690..2f0ec910 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -177,59 +177,3 @@ linting:
- make lint
- make license
-appimage-amd64:
- stage: build
- image: appimagecrafters/appimage-builder
- tags: [docker]
- variables:
- QT_PKG: 515
- before_script:
- # app build requirements
- - apt-get update && apt-get install -y software-properties-common
- - add-apt-repository ppa:beineri/opt-qt-5.15.2-bionic -y
- - apt-get update
- - apt-get install -y git wget curl
-
- # update appimage-builder (optional)
- - pip3 install --upgrade git+https://github.com/AppImageCrafters/appimage-builder.git
-
- - apt-get update && apt-get -y install --no-install-recommends g++-7 build-essential ninja-build qt${QT_PKG}{base,declarative,tools,multimedia,script,quickcontrols2,svg} liblmdb-dev libssl-dev git ninja-build qt5keychain-dev libgtest-dev ccache libevent-dev libcurl4-openssl-dev libgl1-mesa-dev
- - wget https://github.com/Kitware/CMake/releases/download/v3.19.0/cmake-3.19.0-Linux-x86_64.sh && sh cmake-3.19.0-Linux-x86_64.sh --skip-license --prefix=/usr/local
- - /usr/sbin/update-ccache-symlinks
- script:
- - export PATH="/usr/local/bin/:/usr/lib/ccache:${PATH}"
- - export CMAKE_BUILD_PARALLEL_LEVEL=$(cat /proc/cpuinfo | awk '/^processor/{print $3}' | wc -l)
- - . "/opt/qt${QT_PKG}/bin/qt${QT_PKG}-env.sh" || true
- - cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -GNinja
- -DHUNTER_ROOT=".hunter"
- -DHUNTER_ENABLED=ON -DBUILD_SHARED_LIBS=OFF
- -DHUNTER_CONFIGURATION_TYPES=Release
- -DUSE_BUNDLED_SPDLOG=ON
- -DUSE_BUNDLED_OLM=ON
- -DUSE_BUNDLED_GTEST=OFF
- -DUSE_BUNDLED_CMARK=ON
- -DUSE_BUNDLED_JSON=ON
- -DUSE_BUNDLED_OPENSSL=OFF
- -DUSE_BUNDLED_MTXCLIENT=ON
- -DUSE_BUNDLED_LMDB=OFF
- -DUSE_BUNDLED_LMDBXX=ON
- -DUSE_BUNDLED_QTKEYCHAIN=OFF
- -DUSE_BUNDLED_LIBEVENT=OFF
- -DUSE_BUNDLED_LIBCURL=OFF
- -DUSE_BUNDLED_COEURL=ON
- - DESTDIR=`pwd`/AppDir ninja -C build install/local
- - DESTDIR=`pwd`/AppDir ninja -C build _deps/cmark-build/src/install
- - mkdir -p AppDir/usr/lib/x86_64-linux-gnu AppDir/lib/x86_64-linux-gnu
- - appimage-builder --skip-test
- after_script:
- - bash ./.ci/upload-nightly-gitlab.sh nheko-latest-x86_64.AppImage
- artifacts:
- paths:
- - 'nheko-latest-x86_64.AppImage'
- expire_in: 1 week
- expose_as: 'appimage-amd64'
- cache:
- key: "$CI_JOB_NAME"
- paths:
- - .hunter/
- - .ccache
diff --git a/AppImageBuilder.yml b/AppImageBuilder.yml
deleted file mode 100644
index 804fa03f..00000000
--- a/AppImageBuilder.yml
+++ /dev/null
@@ -1,119 +0,0 @@
-# appimage-builder recipe see https://appimage-builder.readthedocs.io for details
-version: 1
-AppDir:
- path: ./AppDir
- app_info:
- id: nheko
- name: nheko
- icon: nheko
- version: latest
- exec: usr/bin/nheko
- exec_args: $@
- runtime:
- env:
- APPDIR_LIBRARY_PATH: $APPDIR/usr/lib/x86_64-linux-gnu:$APPDIR/usr/lib/x86_64-linux-gnu/gstreamer-1.0:$APPDIR/usr/lib/x86_64-linux-gnu/gconv:$APPDIR/lib/x86_64-linux-gnu:$APPDIR/usr/lib/x86_64-linux-gnu/pulseaudio
- apt:
- arch: amd64
- allow_unauthenticated: true
- sources:
- - sourceline: deb http://de.archive.ubuntu.com/ubuntu/ bionic main restricted
- - sourceline: deb http://de.archive.ubuntu.com/ubuntu/ bionic-updates main restricted
- - sourceline: deb http://de.archive.ubuntu.com/ubuntu/ bionic universe
- - sourceline: deb http://de.archive.ubuntu.com/ubuntu/ bionic-updates universe
- - sourceline: deb http://de.archive.ubuntu.com/ubuntu/ bionic multiverse
- - sourceline: deb http://de.archive.ubuntu.com/ubuntu/ bionic-updates multiverse
- - sourceline: deb http://de.archive.ubuntu.com/ubuntu/ bionic-backports main restricted
- universe multiverse
- - sourceline: deb http://security.ubuntu.com/ubuntu bionic-security main restricted
- - sourceline: deb http://security.ubuntu.com/ubuntu bionic-security universe
- - sourceline: deb http://security.ubuntu.com/ubuntu bionic-security multiverse
- - sourceline: deb http://ppa.launchpad.net/beineri/opt-qt-5.15.2-bionic/ubuntu bionic main
- include:
- - gstreamer1.0-libav
- - gstreamer1.0-plugins-bad
- - gstreamer1.0-plugins-base
- - gstreamer1.0-plugins-good
- - gstreamer1.0-pulseaudio
- - gstreamer1.0-x
- - kimageformat-plugins
- - libbs2b0
- - libbz2-1.0
- - libcurl4
- - libelf1
- - libexpat1
- - libevent-core-2.1-6
- - libevent-pthreads-2.1-6
- - libhogweed4
- - libjpeg-turbo8
- - libkf5archive5
- - libllvm10
- - liblmdb0
- - liblz4-1
- - libnorm1
- - libnss-mdns
- - libopenexr22
- - libpcre3
- - libqt5keychain1
- - qt515base
- - qt515declarative
- - qt515tools
- - qt515multimedia
- - qt515script
- - qt515quickcontrols2
- - qt515svg
- - librubberband2
- - libsensors4
- - libsm6
- - libsnappy1v5
- - libsystemd0
- - libwayland-server0
- - libx264-152
- - libxau6
- - libxcb-render-util0
- - libxcb-sync1
- - libxcb-xinerama0
- - libxcb-xkb1
- - libxcursor1
- - libxdmcp6
- - libxext6
- - libxfixes3
- - libxrender1
- - libxshmfence1
- - libxv1
- - libxxf86vm1
- - libzstd1
- - qt515imageformats
- exclude: []
- files:
- exclude:
- - usr/share/man
- - usr/share/doc
- - opt/qt515/examples
- - opt/qt515/bin
- - opt/qt515/include
- - opt/qt515/mkspecs
- test:
- fedora:
- image: appimagecrafters/tests-env:fedora-30
- command: ./AppRun
- use_host_x: true
- debian:
- image: appimagecrafters/tests-env:debian-stable
- command: ./AppRun
- use_host_x: true
- arch:
- image: appimagecrafters/tests-env:archlinux-latest
- command: ./AppRun
- use_host_x: true
- centos:
- image: appimagecrafters/tests-env:centos-7
- command: ./AppRun
- use_host_x: true
- ubuntu:
- image: appimagecrafters/tests-env:ubuntu-xenial
- command: ./AppRun
- use_host_x: true
-AppImage:
- arch: x86_64
- update-information: None
- sign-key: None
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fdbdaaa2..d033d00f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -388,7 +388,7 @@ if(USE_BUNDLED_MTXCLIENT)
FetchContent_Declare(
MatrixClient
GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git
- GIT_TAG 7fe7a70fcf7540beb6d7b4847e53a425de66c6bf
+ GIT_TAG fc5d01c775bde656b6d69954189522d138efe022
)
set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "")
set(BUILD_LIB_TESTS OFF CACHE INTERNAL "")
diff --git a/Dockerfile b/Dockerfile
deleted file mode 100644
index dddd1c6f..00000000
--- a/Dockerfile
+++ /dev/null
@@ -1,47 +0,0 @@
-FROM ubuntu:trusty
-
-RUN \
- apt-get update -qq && \
- apt-get install -y software-properties-common && \
- add-apt-repository -y ppa:beineri/opt-qt-5.10.1-trusty && \
- add-apt-repository -y ppa:ubuntu-toolchain-r/test && \
- apt-get update -qq && \
- apt-get install -y \
- qt510base qt510tools qt510svg qt510multimedia qt510quickcontrols2 qt510graphicaleffects \
- gcc-5 g++-5
-
-RUN \
- apt-get install -y \
- make \
- pkg-config \
- ninja-build \
- liblmdb-dev \
- libssl-dev \
- mesa-common-dev \
- wget \
- fuse \
- git
-
-RUN \
- wget https://cmake.org/files/v3.12/cmake-3.12.2-Linux-x86_64.sh && \
- sh cmake-3.12.2-Linux-x86_64.sh --skip-license --prefix=/usr/local
-
-RUN \
- update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10 && \
- update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10 && \
- update-alternatives --set gcc "/usr/bin/gcc-5" && \
- update-alternatives --set g++ "/usr/bin/g++-5"
-
-RUN \
- mkdir libsodium-1.0.14 && \
- wget https://download.libsodium.org/libsodium/releases/old/libsodium-1.0.14.tar.gz && \
- tar -xzvf libsodium-1.0.14.tar.gz -C libsodium-1.0.14 && \
- cd libsodium-1.0.14/libsodium-1.0.14 && \
- ./configure && \
- make && make install
-
-ENV PATH=/opt/qt510/bin:$PATH
-
-RUN mkdir /build
-
-WORKDIR /build
diff --git a/io.github.NhekoReborn.Nheko.yaml b/io.github.NhekoReborn.Nheko.yaml
index 19a2ad4f..fdd22ea6 100644
--- a/io.github.NhekoReborn.Nheko.yaml
+++ b/io.github.NhekoReborn.Nheko.yaml
@@ -163,7 +163,7 @@ modules:
buildsystem: cmake-ninja
name: mtxclient
sources:
- - commit: 7fe7a70fcf7540beb6d7b4847e53a425de66c6bf
+ - commit: fc5d01c775bde656b6d69954189522d138efe022
type: git
url: https://github.com/Nheko-Reborn/mtxclient.git
- config-opts:
diff --git a/resources/langs/nheko_cs.ts b/resources/langs/nheko_cs.ts
index 9d5a913c..68c4e816 100644
--- a/resources/langs/nheko_cs.ts
+++ b/resources/langs/nheko_cs.ts
@@ -131,17 +131,27 @@
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
@@ -232,7 +242,7 @@
-
+
@@ -242,12 +252,7 @@
-
-
-
-
-
-
+
@@ -264,7 +269,7 @@
-
+
@@ -1465,7 +1470,7 @@ Example: https://server.my:8787
RoomInfo
-
+
@@ -1877,7 +1882,7 @@ Example: https://server.my:8787
SecretStorage
-
+
@@ -1940,7 +1945,7 @@ If you choose verify, you need to have the other device available. If you choose
SelfVerificationStatus
-
+
@@ -1951,7 +1956,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -1964,6 +1969,11 @@ If you choose verify, you need to have the other device available. If you choose
+
+
+
+
+ SingleImagePackModel
@@ -2041,12 +2051,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+
-
+
@@ -2202,12 +2213,12 @@ If you choose verify, you need to have the other device available. If you choose
-
+
-
+
@@ -2479,7 +2490,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -2582,12 +2593,7 @@ OFF - square, ON - Circle.
-
-
-
-
-
-
+
@@ -2892,7 +2898,12 @@ This usually causes the application icon in the task bar to animate in some fash
-
+
+
+
+
+
+
diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts
index 538f67e2..0e9e6808 100644
--- a/resources/langs/nheko_de.ts
+++ b/resources/langs/nheko_de.ts
@@ -131,17 +131,27 @@
-
+ Eingeladener Benutzer: %1
-
+ Das Migrieren des Caches auf die aktuelle Version ist fehlgeschlagen. Das kann verschiedene Gründe als Ursache haben. Bitte melde den Fehler und verwende in der Zwischenzeit eine ältere Version. Alternativ kannst du den Cache manuell löschen.
-
+
+
+ Das Datenbankformat auf der Festplatte ist neuer als die von dieser Nhekoversion unterstützte Version. Bitte update Nheko oder lösche die Datenbank.
+
+
+
+
+ Öffnen der Datenbank fehlgeschlagen, du wirst ausgeloggt!
+
+
+ Beitritt bestätigen
@@ -232,7 +242,7 @@
Möchtest du wirklich eine private Konversation mit %1 beginnen?
-
+ Migration des Caches fehlgeschlagen!
@@ -242,12 +252,7 @@
Inkompatible Version des Caches
-
-
- Der Cache auf der Festplatte wurde mit einer neueren Nheko - Version angelegt. Bitte aktualisiere Nheko oder entferne den Cache.
-
-
-
+ Wiederherstellung des OLM Accounts fehlgeschlagen. Bitte logge dich erneut ein.
@@ -264,7 +269,7 @@
Fehler beim Setup der Verschlüsselungsschlüssel. Servermeldung: %1 %2. Bitte versuche es später erneut.
-
+ Bitte melde dich erneut an: %1
@@ -592,12 +597,12 @@
-
+ Verifizierungsnachrichten in falscher Reihnenfolge empfangen!
-
+ Unbekannter Verifizierungsfehler.
@@ -798,12 +803,12 @@
-
+ Raum betreten
- Raum-ID oder -Alias
+ Raum-ID oder -Alias
@@ -811,12 +816,12 @@
- Raum verlassen
+ Raum verlassen
- Willst du wirklich den Raum verlassen?
+ Willst du wirklich den Raum verlassen?
@@ -938,17 +943,17 @@ Beispiel: https://mein.server:8787
-
+ Abmelden
-
+ Du befindest dich in einem Telefonat. Wirklich abmelden?
-
+ Wirklich abmelden?
@@ -1188,7 +1193,7 @@ Beispiel: https://mein.server:8787
-
+ Damit andere Nutzer sehen, welche Geräte tatsächlich dir gehören, kannst du sie verifizieren. Das erlaubt auch Schlüsselbackup zu nutzen ohne ein Passwort einzugeben. Jetzt ein unverifiziertes Gerät verifizieren? (Bitte stelle sicher, dass sich das unverifizierte Gerät in deiner Nähe befindet.)
@@ -1241,7 +1246,7 @@ Beispiel: https://mein.server:8787
-
+ Du wirst den ganzen Raum eine Benachrichtigung schicken
@@ -1463,13 +1468,13 @@ Beispiel: https://mein.server:8787
-
+ Wähle einen anderen Server ausRoomInfo
-
+ keine Version gespeichert
@@ -1545,24 +1550,24 @@ Beispiel: https://mein.server:8787
Cross-signing setup has not run yet.
-
+ Verschlüsselung ist nicht konfiguriertThe user just signed in with this device and hasn't verified their master key.
-
+ Login noch nicht verifiziertThere are unverified devices signed in to this account.
-
+ Verifiziere deine anderen Geräte
- Schließen
+ Schließen
@@ -1800,27 +1805,27 @@ Beispiel: https://mein.server:8787
-
+ Bitte gib dein Anmeldepassword an um fortzufahren:
-
+ Bitte gib eine gültige Emailadresse an um fortzufahren:
-
+ Bitte gib eine gültige Telefonnummer an um fortzufahren:
-
+ Bitte gib das Token ein, dass dir soeben zugesendet wurde:
-
+ Warte auf den Bestätigungslink und fahre fort, wenn du diesem gefolgt bist.
@@ -1880,14 +1885,14 @@ Beispiel: https://mein.server:8787
SecretStorage
-
+ Verbindung zum kryptografischen Speicher fehlgeschlagen
-
+ Nheko konnte sich nicht mit dem Dienst zum sicheren speichern von Schlüsseln verbinden. Das kann verschiedene Gründe haben. Prüfe, ob der D-Bus-Dienst aktiv ist und du einen Dienst wie KWallet, Gnome Keyring, KeePassXC oder das Äquivalent für deine Platform. Wenn du Probleme hast, scheue dich nicht Hilfe hier zu suchen: https://github.com/Nheko-Reborn/nheko/issues
@@ -1895,77 +1900,84 @@ Beispiel: https://mein.server:8787
-
+ Dies ist dein Wiederherstellungsschlüssel. Du brauchst diesen um auf deine verschüsselten Nachrichten und Verifizierungsschlüssel zugreifen zu können. Pass gut drauf auf. Teile den Schlüssel mit niemandem und verliere ihn nicht! Gehe nicht über Los! Ziehe nicht 2000€ ein!
-
+ Verschlüsselung erfolgreich konfiguriert
-
+ Verschlüsselung konnte nicht konfiguriert werden: %1
-
+ Konfiguriere Verschlüsselung
-
+ Hallo und willkommen zu Matrix!
+Sieht so aus als wärst du neu hier. Bevor wir deine Nachrichten verschlüsseln können, müssen wir ein paar Sachen konfigurieren. Keine Panik, du kannst auch einfach weiter klicken, ohne irgendentwas umzustellen, aber du kannst natürlich auch ein paar der Optionen ändern. Die Erklärungen sind etwas länger in der Hoffnung, dass sie weiterhelfen. Du kannst sie überspringen, aber einmal durchlesen ist vielleicht vorteilhaft!
-
+ Verschlüsselung aktivieren
-
+ Es sieht so aus als hättest du die Verschlüsselung für dieses Konto schon aktiviert. Damit dieses Gerät auf verschlüsselte Nachrichten zugreifen kann und vertrauenswürdig erschein, kannst du es jetzt entweder mit einem anderen Gerät verifizieren oder (wenn du einen hast) mit deinem Wiederherstellungsschlüssel bestätigen. Bitte wähle eine der folgenden Optionen.
+Wenn du verifizieren wählst, musst du dein anderes Gerät zur Hand haben. Wenn du den Wiederherstellungsschlüssel wählst, brauchst du deine Wiederherstellungsphrase oder -passwort. Mit Abbrechen kannst du diesen Schritt auf später verschieben.
-
+ Verifizieren
-
+ Passphrase eingebenSelfVerificationStatus
-
+
-
+ Quersignaturschlüssel konnten nicht erzeugt werden!
-
+ Onlinebackupschlüssel konntent nicht erzeugt werden!
-
-
+
+ Konnte Schlüssel für den sicheren, server-seitigen Speicher nicht erzeugen!
-
+ Konfiguriere Verschlüsselung
-
+ Konfiguration der Verschlüsselung fehlgeschlagen: %1
+
+
+
+
+ Die Identitätschlüssel haben sich geändert. Das stört die Verschlüsselung, deswegen wirst du abgemeldet.
@@ -2044,12 +2056,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+ Nachricht zurückziehen fehlgeschlagen: %1
-
+ Event konnte nicht verschlüsselt werden, senden wurde abgebrochen!
@@ -2204,12 +2217,12 @@ If you choose verify, you need to have the other device available. If you choose
%1 hat das Anklopfen zurückgezogen.
-
+ Du bist dem Raum beigetreten.
-
+ %1 hat den eigenen Avatar und Namen geändert zu %2.
@@ -2253,7 +2266,7 @@ If you choose verify, you need to have the other device available. If you choose
- Keine Vorschau verfügbar
+ Keine Vorschau verfügbar
@@ -2306,7 +2319,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Dieser Raum enthält nur Geräte, die entweder verifiziert wurden oder nie den Hautschlüssel geändert haben.
@@ -2357,24 +2370,24 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Keine bekannten Wege zur Authentifizierung!
-
+ Authentifizierung abgebrochen
- Bitte gebe ein gültiges Registrierungstoken ein.
+ Bitte gebe ein gültiges Registrierungstoken ein.
-
+ Ungültiges Token
@@ -2448,22 +2461,22 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Geräteliste aktualisieren.
-
+ Gerät abmelden.
-
+ Gerät umbenennen.
-
+ Zuletzt gesehen um %1 von %2
@@ -2473,15 +2486,15 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Gerät %1 abmelden
-
+ Du hast dieses Gerät abgemeldet.
-
+ Avatar wählen
@@ -2582,15 +2595,10 @@ AUS - Quadratisch, AN - Kreis.
-
+ Benutze Identicons
-
-
-
-
-
-
+ Seitenleiste mit Gruppen und Tags neben der Raumliste.
@@ -2904,7 +2912,12 @@ Normalerweise animiert das den Taskbaricon oder färbt das Fenster orange ein.
OBERFLÄCHE
-
+
+
+ Zeigen einen "Identicon" anstelle eines Buchstaben, wenn etwas keinen Avatar gesetzt hat.
+
+
+ Spiele Medien wie GIF oder WEBP nur ab, wenn du die Maus darüber bewegst.
@@ -3021,7 +3034,7 @@ Normalerweise animiert das den Taskbaricon oder färbt das Fenster orange ein.
- Keinen verschlüsselten Chat mit diesem User gefunden. Erstelle einen verschlüsselten 1:1 Chat mit diesem Nutzer und versuche es erneut.
+ Keinen verschlüsselten Chat mit diesem User gefunden. Erstelle einen verschlüsselten 1:1 Chat mit diesem Nutzer und versuche es erneut.
diff --git a/resources/langs/nheko_el.ts b/resources/langs/nheko_el.ts
index 88503e86..42fd8d11 100644
--- a/resources/langs/nheko_el.ts
+++ b/resources/langs/nheko_el.ts
@@ -131,17 +131,27 @@
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
@@ -232,7 +242,7 @@
-
+
@@ -242,12 +252,7 @@
-
-
-
-
-
-
+
@@ -264,7 +269,7 @@
-
+
@@ -1465,7 +1470,7 @@ Example: https://server.my:8787
RoomInfo
-
+
@@ -1876,7 +1881,7 @@ Example: https://server.my:8787
SecretStorage
-
+
@@ -1939,7 +1944,7 @@ If you choose verify, you need to have the other device available. If you choose
SelfVerificationStatus
-
+
@@ -1950,7 +1955,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -1963,6 +1968,11 @@ If you choose verify, you need to have the other device available. If you choose
+
+
+
+
+ SingleImagePackModel
@@ -2040,12 +2050,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+
-
+
@@ -2200,12 +2211,12 @@ If you choose verify, you need to have the other device available. If you choose
-
+
-
+
@@ -2477,7 +2488,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -2580,12 +2591,7 @@ OFF - square, ON - Circle.
-
-
-
-
-
-
+
@@ -2890,7 +2896,12 @@ This usually causes the application icon in the task bar to animate in some fash
-
+
+
+
+
+
+
diff --git a/resources/langs/nheko_en.ts b/resources/langs/nheko_en.ts
index 5768e051..bda0e064 100644
--- a/resources/langs/nheko_en.ts
+++ b/resources/langs/nheko_en.ts
@@ -131,17 +131,27 @@
-
+ Invited user: %1
-
+ Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually.
-
+
+
+ The cache on your disk is newer than this version of Nheko supports. Please update Nheko or clear your cache.
+
+
+
+
+ Failed to open database, logging out!
+
+
+ Confirm join
@@ -232,7 +242,7 @@
Do you really want to start a private chat with %1?
-
+ Cache migration failed!
@@ -242,12 +252,7 @@
Incompatible cache version
-
-
- The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.
-
-
-
+ Failed to restore OLM account. Please login again.
@@ -264,7 +269,7 @@
Failed to setup encryption keys. Server response: %1 %2. Please try again later.
-
+ Please try to login again: %1
@@ -1469,7 +1474,7 @@ Example: https://server.my:8787
RoomInfo
-
+ no version stored
@@ -1880,7 +1885,7 @@ Example: https://server.my:8787
SecretStorage
-
+ Failed to connect to secret storage
@@ -1945,7 +1950,7 @@ If you choose verify, you need to have the other device available. If you choose
SelfVerificationStatus
-
+ Failed to create keys for cross-signing!
@@ -1956,8 +1961,8 @@ If you choose verify, you need to have the other device available. If you choose
-
- Failed to create keys secure server side secret storage!
+
+ Failed to create keys for secure server side secret storage!
@@ -1969,6 +1974,11 @@ If you choose verify, you need to have the other device available. If you choose
Encryption setup failed: %1
+
+
+
+ Identity key changed. This breaks E2EE, so logging out.
+ SingleImagePackModel
@@ -2046,12 +2056,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+ Message redaction failed: %1
-
+ Failed to encrypt event, sending aborted!
@@ -2206,12 +2217,12 @@ If you choose verify, you need to have the other device available. If you choose
%1 redacted their knock.
-
+ You joined this room.
-
+ %1 has changed their avatar and changed their display name to %2.
@@ -2483,7 +2494,7 @@ If you choose verify, you need to have the other device available. If you choose
You signed out this device.
-
+ Select an avatar
@@ -2587,12 +2598,7 @@ OFF - square, ON - Circle.
Use identicons
-
-
- Display an identicon instead of a letter when a user has not set an avatar.
-
-
-
+ Show a column containing groups and tags next to the room list.
@@ -2907,7 +2913,12 @@ This usually causes the application icon in the task bar to animate in some fash
INTERFACE
-
+
+
+ Display an identicon instead of a letter when no avatar is set.
+
+
+ Plays media like GIFs or WEBPs only when explicitly hovering over them.
diff --git a/resources/langs/nheko_eo.ts b/resources/langs/nheko_eo.ts
index 0d80dbcf..9450af33 100644
--- a/resources/langs/nheko_eo.ts
+++ b/resources/langs/nheko_eo.ts
@@ -131,17 +131,27 @@
-
+ Invitita uzanto: %1
-
+ Malsukcesis migrado de kaŝmemoro al nuna versio. Tio povas havi diversajn kialojn. Bonvolu raporti eraron kaj dume provi malpli novan version. Alternative, vi povas provi forigi la kaŝmemoron permane.
-
+
+
+
+
+
+
+
+
+
+
+ Konfirmu aliĝon
@@ -233,7 +243,7 @@
Ĉu vi certe volas komenci privatan babilon kun %1?
-
+ Malsukcesis migrado de kaŝmemoro!
@@ -243,12 +253,7 @@
Neakorda versio de kaŝmemoro
-
-
- La kaŝmemoro sur via disko estas pli nova ol kiom ĉi tiu versio de Nheko subtenas. Bonvolu ĝisdatigi la programon aŭ vakigi vian kaŝmemoron.
-
-
-
+ Malsukcesis rehavi konton je OLM. Bonvolu resaluti.
@@ -265,7 +270,7 @@
Malsukcesis agordi ĉifrajn ŝlosilojn. Respondo de servilo: %1 %2. Bonvolu reprovi poste.
-
+ Bonvolu provi resaluti: %1
@@ -593,12 +598,12 @@
-
+ Kontrolaj mesaĝoj riceviĝis ekster ordo!
-
+ Nekonata eraro de kontrolo.
@@ -799,7 +804,7 @@
-
+ Aliĝi al ĉambro
@@ -942,17 +947,17 @@ Ekzemplo: https://servilo.mia:8787
-
+ Adiaŭi
-
+ Okazas voko nun. Ĉu tamen adiaŭi?
-
+ Ĉu vi certas, ke vi volas adiaŭi?
@@ -1245,7 +1250,7 @@ Ekzemplo: https://servilo.mia:8787
-
+ Vi atentigos la tutan ĉambron
@@ -1467,13 +1472,13 @@ Ekzemplo: https://servilo.mia:8787
-
+ Elekti propran hejmservilonRoomInfo
-
+ neniu versio konservita
@@ -1549,7 +1554,7 @@ Ekzemplo: https://servilo.mia:8787
Cross-signing setup has not run yet.
-
+ Ĉifrado ne jam agordiĝis
@@ -1884,7 +1889,7 @@ Ekzemplo: https://servilo.mia:8787
SecretStorage
-
+ Malsukcesis konektiĝi al sekreta deponejo
@@ -1947,7 +1952,7 @@ If you choose verify, you need to have the other device available. If you choose
SelfVerificationStatus
-
+
@@ -1958,7 +1963,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -1971,6 +1976,11 @@ If you choose verify, you need to have the other device available. If you choose
+
+
+
+
+ SingleImagePackModel
@@ -2049,12 +2059,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+ Malsukcesis redaktado de mesaĝo: %1
-
+ Malsukcesis ĉifri okazon; sendado nuliĝis!
@@ -2211,12 +2222,12 @@ If you choose verify, you need to have the other device available. If you choose
%1 forigis sian frapon.
-
+ Vi aliĝis ĉi tiun ĉambron.
-
+ %1 ŝanĝis sian profilbildon kaj sian prezentan nomon al %2.
@@ -2488,7 +2499,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Elektu profilbildon
@@ -2592,12 +2603,7 @@ NE – kvadrataj, JES – rondaj.
-
-
-
-
-
-
+ Montras kolumnon kun grupoj kaj etikedoj apud la listo de ĉambroj.
@@ -2919,7 +2925,12 @@ This usually causes the application icon in the task bar to animate in some fash
FASADO
-
+
+
+
+
+
+ Ludas vidaŭdaĵojn kiel GIF-ojn aŭ WEBP-ojn nur sub musmontrilo.
diff --git a/resources/langs/nheko_es.ts b/resources/langs/nheko_es.ts
index 63916a0a..8c5cf1fe 100644
--- a/resources/langs/nheko_es.ts
+++ b/resources/langs/nheko_es.ts
@@ -131,17 +131,27 @@
-
+ Usuario invitado: %1
-
+ La migración de la caché a la versión actual ha fallado. Esto puede deberse a distintos motivos. Por favor, reporte el incidente y mientras tanto intente usar una versión anterior. También puede probar a borrar la caché manualmente.
-
+
+
+
+
+
+
+
+
+
+
+
@@ -232,7 +242,7 @@
-
+
@@ -242,12 +252,7 @@
-
-
-
-
-
-
+
@@ -264,7 +269,7 @@
-
+
@@ -1465,7 +1470,7 @@ Example: https://server.my:8787
RoomInfo
-
+
@@ -1876,7 +1881,7 @@ Example: https://server.my:8787
SecretStorage
-
+
@@ -1939,7 +1944,7 @@ If you choose verify, you need to have the other device available. If you choose
SelfVerificationStatus
-
+
@@ -1950,7 +1955,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -1963,6 +1968,11 @@ If you choose verify, you need to have the other device available. If you choose
+
+
+
+
+ SingleImagePackModel
@@ -2040,12 +2050,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+
-
+
@@ -2210,12 +2221,12 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Te has unido a esta sala.
-
+
@@ -2477,7 +2488,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -2580,12 +2591,7 @@ OFF - square, ON - Circle.
-
-
-
-
-
-
+
@@ -2890,7 +2896,12 @@ This usually causes the application icon in the task bar to animate in some fash
-
+
+
+
+
+
+
diff --git a/resources/langs/nheko_et.ts b/resources/langs/nheko_et.ts
index 0d72ad6b..bf472df9 100644
--- a/resources/langs/nheko_et.ts
+++ b/resources/langs/nheko_et.ts
@@ -131,17 +131,27 @@
-
+ Kutsutud kasutaja: %1
-
+ Puhverdatud andmete muutmine sobivaks rakenduse praeguse versiooniga ei õnnestunud. Sellel võib olla erinevaid põhjuseid. Palun saada meile veateade ja seni kasuta vanemat rakenduse versiooni. Aga kui sa soovid proovida, siis kustuta puhverdatud andmed käsitsi.
-
+
+
+
+
+
+
+
+
+
+
+ Kinnita liitumine
@@ -232,7 +242,7 @@
Kas sa kindlasti soovid alustada otsevestlust kasutajaga %1?
-
+ Puhvri versiooniuuendus ebaõnnestus!
@@ -242,12 +252,7 @@
Mitteühilduv puhvri versioon
-
-
- Sinu andmekandjale salvestatud puhvri versioon on uuem, kui käesolev Nheko versioon kasutada oskab. Palun tee Nheko uuendus või kustuta puhverdatud andmed.
-
-
-
+ OLM konto taastamine ei õnnestunud. Palun logi uuesti sisse.
@@ -264,7 +269,7 @@
Krüptovõtmete kasutusele võtmine ei õnnestunud. Koduserveri vastus päringule: %1 %2. Palun proovi hiljem uuesti.
-
+ Palun proovi uuesti sisse logida: %1
@@ -592,12 +597,12 @@
-
+ Saabunud verifitseerimissõnumid on vales järjekorras!
-
+ Teadmata viga verifitseerimisel.
@@ -798,12 +803,12 @@
-
+ Liitu jututoaga
- Jututoa tunnus või alias
+ Jututoa tunnus või alias
@@ -811,12 +816,12 @@
- Lahku jututoast
+ Lahku jututoast
- Kas sa oled kindel, et soovid lahkuda?
+ Kas sa oled kindel, et soovid lahkuda?
@@ -938,17 +943,17 @@ Näiteks: https://server.minu:8787
-
+ Logi välja
-
+ Kõne on pooleli. Kas tõesti logime välja?
-
+ Kas sa oled kindel, et soovid välja logida?
@@ -1188,7 +1193,7 @@ Näiteks: https://server.minu:8787
-
+ Palun verifitseeri oma seadmed. See tagab, et muud kasutajad saaks kontrollida missugused seadmed on sinu omad ning krüptovõtmete automaatne varundus toimiks. Kas verifitseerime mõne verifitseerimata seadme nüüd? (Selleks peab sul mõni verifitseeritud seadmetest käepärast olema.)
@@ -1241,7 +1246,7 @@ Näiteks: https://server.minu:8787
-
+ Sa oled saatmas teavitust kogu jututoale
@@ -1463,13 +1468,13 @@ Näiteks: https://server.minu:8787
-
+ Vali oma koduserverRoomInfo
-
+ salvestatud versiooni ei leidu
@@ -1545,24 +1550,24 @@ Näiteks: https://server.minu:8787
Cross-signing setup has not run yet.
-
+ Krüptimine pole veel kasutuselThe user just signed in with this device and hasn't verified their master key.
-
+ Verifitseerimata sisselogimissessioonThere are unverified devices signed in to this account.
-
+ Palun verifitseeri oma muud seadmed
- Sulge
+ Sulge
@@ -1800,27 +1805,27 @@ Näiteks: https://server.minu:8787
-
+ Jätkamaks palun sisesta oma salasõna:
-
+ Jätkamaks palun sisesta oma kehtiv e-posti aadress:
-
+ Jätkamaks palun sisesta kehtiv telefoninumber:
-
+ Palun sisesta sulle saadetud tunnusluba:
-
+ Jätkamaks palun oota, kuni oled saanud kinnituslingi.
@@ -1880,14 +1885,14 @@ Näiteks: https://server.minu:8787
SecretStorage
-
+ Ühenduse loomine võtmehoidlaga ei õnnestunud
-
+ Krüptovõtmete salvestamiseks Nhekol ei õnnestunud luua ühendust võtmehoidlaga. Sellel võib olla mitu põhjust. Kontrolli, kas D-Bus'i alusteenus toimib ning sa oled seadistanud KWallet'i, Gnome Keyring'i, KeePassXC'i või mõne muu sinu platvormil kasutatava turvalise andmehoidla teenuse. Probleemide korral palun ava siin https://github.com/Nheko-Reborn/nheko/issues veateade
@@ -1895,76 +1900,83 @@ Näiteks: https://server.minu:8787
-
+ See on sinu taastevõti. Kui peaks olema vaja taastada ligipääsu sinu krüptitud sõnumitele või muudele võtmetele, siis sul läheb seda vaja. Hoia taastevõtit turvalises kohas. Ära jaga seda teistega ega ära kaota teda ära! Ega ära võta vastu sulle selle eest pakutavat 200 eurot!
-
+ Krüptimise kasutuselevõtmine õnnestus
-
+ Krüptimise seadistamine ei õnnestunud: %1
-
+ Seadista krüptimine
-
+ Hei ja tere tulemast Matrixi võrku!
+Tundub, et see on uus teema sinu jaoks. Enne, kui sa saad sõnumeid turvaliselt krüptida, on vaja paar asja ära teha. Sa võid kas nõustuda kõikide järgnevate toimingutega ühe korraga või kohendada seadistusi eraldi. Me üritame järgnevalt selgitada ka olulisemaid asjaolusid. Sa võid need küll vahele jätta, kuid selle teabe valdamine tegelikult on kasulik!
-
+ Krüptimise aktiveerimine
-
+ Tundud, et sellel kontol juba on krüptimine kasutusel. Saamaks ligipääsu sinu krüptitud sõnumitele ja märkimaks seda seadet usaldusväärseks sa kas tee läbi verifitseerimine või sisesta oma taastamiseks mõeldud salafraas. Palun vali järgnevalt oma eelistus.
+Kui eelistad verifitseerimist, siis peab sul teine seade olema käepärast. Kui eelistad salafraasi sisestamist, siis peab sul olema käepärast oma konto taastevõti või salafraas. Kui praegu katkestad, siis verifitseerimist saad alati ka hiljem teha.
-
+ verifitseeri
-
+ sisesta salafraasSelfVerificationStatus
-
+
-
+ Risttunnustamise võtmete loomine ei õnnestunud!
-
+ Võrgupõhise võtmete varunduse jaoks krüptovõtmete loomine ei õnnestunud!
-
-
+
+ Serveripoolse turvalise võtmehoidla võtmete loomine ei õnnestunud!
-
+ Krüptimise seadistamine
+ Krüptimise seadistamine ei õnnestunud: %1
+
+
+
+
@@ -2044,12 +2056,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+ Sõnumi ümbersõnastamine ebaõnnestus: %1
-
+ Sündmuse krüptimine ei õnnestunud, katkestame saatmise!
@@ -2204,12 +2217,12 @@ If you choose verify, you need to have the other device available. If you choose
%1 muutis oma koputust jututoa uksele.
-
+ Sa liitusid jututoaga.
-
+ %1 muutis oma tunnuspilti ja seadistas uueks kuvatavaks nimeks %2.
@@ -2253,7 +2266,7 @@ If you choose verify, you need to have the other device available. If you choose
- Eelvaade pole saadaval
+ Eelvaade pole saadaval
@@ -2306,7 +2319,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Selles jututoas on vaid verifitseeritud seadmed ning nad ei ole kunagi muutnud oma juurvõtit.
@@ -2357,24 +2370,24 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Registreerimiseks vajalikku töövoogu ei leidu!
-
+ Registreerimine on katkestatud
- Registreerimiseks palun sisesta kehtiv tunnusluba.
+ Registreerimiseks palun sisesta kehtiv tunnusluba.
-
+ Vigane tunnusluba
@@ -2448,22 +2461,22 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Uuenda seadmete loendit.
-
+ Logi see seade võrgust välja.
-
+ Muuda seadme nime.
-
+ Viimati oli võrgus %1 %2 aadressil
@@ -2473,15 +2486,15 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Logi %1 seade võrgust välja
-
+ Sa oled selle seadme võrgust välja loginud.
-
+ Vali tunnuspilt
@@ -2582,15 +2595,10 @@ Väljalülitatuna - ruut, sisselülitatuna - ümmargune.
-
+ Kasuta identikone
-
-
-
-
-
-
+ Näita jututubade loendi kõrval veergu rühmade ja siltidega.
@@ -2905,7 +2913,12 @@ See tavaliselt tähendab, et rakenduse ikoon tegumiribal annab mingit sorti anim
LIIDES
-
+
+
+ Kui tunnuspilt on seadistamata, siis kuva tähe asemel identikoni (matemaatilist tunnuspilti).
+
+
+ Esitame liikuvaid GIF ja WEBP pilte vaid siis, kui kursor on pildi kohal.
@@ -3022,7 +3035,7 @@ See tavaliselt tähendab, et rakenduse ikoon tegumiribal annab mingit sorti anim
- Ühtegi krüptitud vestlust selle kasutajaga ei leidunud. Palun loo temaga krüptitud vestlus ja proovi uuesti.
+ Ühtegi krüptitud vestlust selle kasutajaga ei leidunud. Palun loo temaga krüptitud vestlus ja proovi uuesti.
diff --git a/resources/langs/nheko_fi.ts b/resources/langs/nheko_fi.ts
index 2fb5221d..eac9909e 100644
--- a/resources/langs/nheko_fi.ts
+++ b/resources/langs/nheko_fi.ts
@@ -131,17 +131,27 @@
-
+ Kutsuttu käyttäjä: %1
-
+ Välimuistin tuominen nykyiseen versioon epäonnistui. Tällä voi olla eri syitä. Luo vikailmoitus ja yritä sillä aikaa käyttää vanhempaa versiota. Voit myös vaihtoehtoisesti koettaa tyhjentää välimuistin käsin.
-
+
+
+
+
+
+
+
+
+
+
+ Vahvista liittyminen
@@ -232,7 +242,7 @@
Haluatko luoda yksityisen keskustelun käyttäjän %1 kanssa?
-
+ Välimuistin siirto epäonnistui!
@@ -242,12 +252,7 @@
Yhteensopimaton välimuistin versio
-
-
- Levylläsi oleva välimuisti on uudempaa kuin mitä tämä Nhekon versio tukee. Päivitä tai poista välimuistisi.
-
-
-
+ OLM-tilin palauttaminen epäonnistui. Ole hyvä ja kirjaudu sisään uudelleen.
@@ -264,7 +269,7 @@
Salausavainten lähetys epäonnistui. Palvelimen vastaus: %1 %2. Ole hyvä ja yritä uudelleen myöhemmin.
-
+ Ole hyvä ja yritä kirjautua sisään uudelleen: %1
@@ -1469,7 +1474,7 @@ Esimerkki: https://server.my:8787
RoomInfo
-
+ ei tallennettua versiota
@@ -1880,7 +1885,7 @@ Esimerkki: https://server.my:8787
SecretStorage
-
+ Salattuun tallennustilaan ei saatu yhteyttä
@@ -1943,7 +1948,7 @@ If you choose verify, you need to have the other device available. If you choose
SelfVerificationStatus
-
+
@@ -1954,7 +1959,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -1967,6 +1972,11 @@ If you choose verify, you need to have the other device available. If you choose
+
+
+
+
+ SingleImagePackModel
@@ -2044,12 +2054,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+ Viestin muokkaus epäonnistui: %1
-
+ Tapahtuman salaus epäonnistui, lähetys keskeytetään!
@@ -2204,12 +2215,12 @@ If you choose verify, you need to have the other device available. If you choose
%1 perui koputuksensa.
-
+ Sinä liityit tähän huoneeseen.
-
+ %1 vaihtoi avatariaan ja vaihtoi näyttönimekseen %2.
@@ -2481,7 +2492,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Valitse profiilikuva
@@ -2585,12 +2596,7 @@ POIS PÄÄLTÄ - neliö, PÄÄLLÄ - pyöreä.
-
-
-
-
-
-
+ Näytä huonelistan vieressä tagit ja ryhmät sisältävä sarake.
@@ -2905,7 +2911,12 @@ Tämä yleensä saa sovelluksen kuvakkeen liikkumaan jollain tapaa tehtäväpalk
KÄYTTÖLIITTYMÄ
-
+
+
+
+
+
+ Soittaa mediaa kuten GIF- ja WEBP-tiedostoja vain kun kursori on niiden kohdalla.
diff --git a/resources/langs/nheko_fr.ts b/resources/langs/nheko_fr.ts
index f57f8984..676ec58f 100644
--- a/resources/langs/nheko_fr.ts
+++ b/resources/langs/nheko_fr.ts
@@ -131,17 +131,27 @@
-
+ Utilisateur %1 invité(e)
-
+ La migration du cache vers la version actuelle a échoué. Cela peut arriver pour différentes raisons. Signalez le problème et essayez d'utiliser une ancienne version en attendant. Vous pouvez également supprimer le cache manuellement.
-
+
+
+
+
+
+
+
+
+
+
+ Confirmez la participation
@@ -232,7 +242,7 @@
Voulez-vous vraiment commencer une discussion privée avec %1 ?
-
+ Échec de la migration du cache !
@@ -242,12 +252,7 @@
Version du cache incompatible
-
-
- Le cache sur votre disque est plus récent que cette version de Nheko ne supporte. Veuillez mettre à jour ou supprimer votre cache.
-
-
-
+ Échec de la restauration du compte OLM. Veuillez vous reconnecter.
@@ -264,7 +269,7 @@
Échec de la configuration des clés de chiffrement. Réponse du serveur : %1 %2. Veuillez réessayer plus tard.
-
+ Veuillez re-tenter vous reconnecter : %1
@@ -592,12 +597,12 @@
-
+ Messages de vérification reçus dans le désordre !
-
+ Erreur de vérification inconnue.
@@ -798,12 +803,12 @@
-
+ Rejoindre le salon
- Identifiant ou alias du salon
+ Identifiant ou alias du salon
@@ -811,12 +816,12 @@
- Quitter le salon
+ Quitter le salon
- Êtes-vous sûr·e de vouloir quitter ?
+ Voulez-vous vraiment quitter ?
@@ -938,17 +943,17 @@ Exemple : https ://monserveur.example.com:8787
-
+ Se déconnecter
-
+ Un appel est en cours. Se déconnecter ?
-
+ Êtes-vous certain de vouloir vous déconnecter ?
@@ -1188,7 +1193,7 @@ Exemple : https ://monserveur.example.com:8787
-
+ Pour permettre à d'autres utilisateurs de confirmer qu'un appareil est vraiment le vôtre, vous pouvez le vérifier. Cela permet également aux sauvegardes de clés de déchiffrement de fonctionner automatiquement sur ces appareils, pour ne pas perdre vos messages chiffrés. Vérifier un appareil maintenant ? (Vérifiez que celui-ci est à proximité).
@@ -1241,7 +1246,7 @@ Exemple : https ://monserveur.example.com:8787
-
+ Vous allez envoyer une notification à tous les membres du salon
@@ -1463,13 +1468,13 @@ Exemple : https ://monserveur.example.com:8787
-
+ Choisir un serveur personnaliséRoomInfo
-
+ pas de version enregistrée
@@ -1545,24 +1550,24 @@ Exemple : https ://monserveur.example.com:8787
Cross-signing setup has not run yet.
-
+ Chiffrement non configuréThe user just signed in with this device and hasn't verified their master key.
-
+ Appareil non vérifiéThere are unverified devices signed in to this account.
-
+ Veuillez vérifier vos autres appareils
- Fermer
+ Fermer
@@ -1800,27 +1805,27 @@ Exemple : https ://monserveur.example.com:8787
-
+ Veuillez saisir votre mot de passe pour continuer :
-
+ Veuillez saisir un courriel valide pour continuer :
-
+ Veuillez saisir un numéro de téléphone valide pour continuer :
-
+ Veuillez entrer le jeton qui vous a été envoyé :
-
+ Attendez que le lien de confirmation vous parvienne, puis continuez.
@@ -1880,14 +1885,14 @@ Exemple : https ://monserveur.example.com:8787
SecretStorage
-
+ Échec de la connexion au stockage des secrets
-
+ Nheko n'a pas pu se connecter au stockage sécurisé afin d'y sauvegarder les clés de chiffrement. Cela peut avoir différentes causes. Vérifiez si votre service D-Bus est lancé, et si vous avez configuré un service tel que KWallet ; Gnome Keyring ; KeePassXC ou l'équivalent pour votre système. Si vous n'arrivez pas à résoudre le problème, n'hésitez pas à nous en faire part ici : https ://github.com/Nheko-Reborn/nheko/issues
@@ -1895,76 +1900,83 @@ Exemple : https ://monserveur.example.com:8787
-
+ Ceci est votre clé de récupération. Vous en aurez besoin afin de restaurer l'accès à vos messages chiffrés et à vos clés de vérification. Gardez cette clé en sûreté. Ne la partagez pas avec qui que ce soit et ne la perdez pas ! Ne passez pas par la case départ et ne recevez pas 20 000 francs !
-
+ Chiffrement configuré avec succès
-
+ Échec de la configuration du chiffrement : %1
-
+ Configuration du chiffrement
-
+ Bonjour et bienvenue sur le réseau Matrix !
+Il semblerait que ce soit votre première fois ici. Avant de pouvoir chiffrer vos messages de manière sécurisée, nous devons configurer quelques détails. Vous pouvez soit accepter immédiatement, soit ajuster quelques options basiques. Nous essayons également d'expliquer le fonctionnement de certains mécanismes. Vous pouvez sauter ces étapes, mais celles-ci pourraient se montrer utiles par la suite !
-
+ Activer le chiffrement
-
+ Il semblerait que le chiffrement soit déjà configuré pour ce compte. Afin de pouvoir accéder à vos messages chiffrer et confirmer que cet appareil vous appartient, vous pouvez soit le vérifier à l'aide d'un appareil déjà vérifié, ou (si vous en disposez) entrer votre mot de passe ou clé de récupération. Veuillez sélectionner l'une des options ci-dessous.
+Si vous choisissez de vérifier, vous aurez besoin de l'autre appareil. Si vous choisissez "entrer le mot de passe", vous aurez besoin de votre clé ou mot de passe de récupération. Si vous annulez maintenant, vous pourrez vérifier cet appareil vous-même plus tard.
-
+ Vérifier
-
+ Entrer le mot de passe de récupérationSelfVerificationStatus
-
+
-
+ Échec de la création des clés pour l'auto-vérification (cross-signing) !
-
+ Échec de la création de clés pour la sauvegarde en ligne !
-
-
+
+ Échec de la création des clés pour le stockage sécurisé côté serveur !
-
+ Configuration du chiffrement
+ Échec de la configuration du chiffrement : %1
+
+
+
+
@@ -2044,12 +2056,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+ Échec de la suppression du message : %1
-
+ Échec du chiffrement de l'évènement, envoi abandonné !
@@ -2204,12 +2217,12 @@ If you choose verify, you need to have the other device available. If you choose
%1 a arrêté de toquer.
-
+ Vous avez rejoint ce salon.
-
+ %1 a changé son avatar et changé son surnom en %2.
@@ -2253,7 +2266,7 @@ If you choose verify, you need to have the other device available. If you choose
- Aucune prévisualisation disponible
+ Aucune prévisualisation disponible
@@ -2306,7 +2319,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Ce salon contient des appareils non vérifiés et des appareils n'ayant jamais changé leur clé maîtresse.
@@ -2357,24 +2370,24 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Aucun mécanisme de création de compte disponible !
-
+ Création de compte annulée
- Veuillez entrer un jeton d'enregistrement valide.
+ Veuillez entrer un jeton d'enregistrement valide.
-
+ Jeton invalide
@@ -2448,22 +2461,22 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Rafraichir la liste des appareils.
-
+ Déconnecter cet appareil.
-
+ Changer le nom de l'appareil.
-
+ %1 vu pour la dernière fois depuis %2
@@ -2473,15 +2486,15 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Déconnecter l'appareil %1
-
+ Vous avez déconnecté cet appareil.
-
+ Sélectionnez un avatar
@@ -2582,15 +2595,10 @@ OFF – carré, ON – cercle.
-
+ Utiliser des identicônes
-
-
-
-
-
-
+ Affiche une colonne contenant les groupes et étiquettes à côté de la liste des salons.
@@ -2907,7 +2915,12 @@ Cela met l'application en évidence dans la barre des tâches.INTERFACE
-
+
+
+ Montre une image générée (identicône) au lieu d'une lettre lorsque aucun avatar n'est présent.
+
+
+ Joue les images comme les GIFs ou WEBPs uniquement quand la souris est au-dessus.
@@ -3024,7 +3037,7 @@ Cela met l'application en évidence dans la barre des tâches.
- Aucune discussion privée chiffrée trouvée avec cet utilisateur. Créez-en une et réessayez.
+ Aucune discussion privée chiffrée trouvée avec cet utilisateur. Créez-en une et réessayez.
diff --git a/resources/langs/nheko_hu.ts b/resources/langs/nheko_hu.ts
index ffef514b..272d67d3 100644
--- a/resources/langs/nheko_hu.ts
+++ b/resources/langs/nheko_hu.ts
@@ -131,17 +131,27 @@
-
+ A felhasználó meg lett hívva: %1
-
+ A gyorsítótár átvitele a jelenlegi verzióhoz nem sikerült. Ennek több oka is lehet. Kérlek, írj egy hibajelentést és egyelőre próbálj meg egy régebbi verziót használni! Alternatív megoldásként megprobálhatod eltávolítani a gyorsítótárat kézzel.
-
+
+
+
+
+
+
+
+
+
+
+ Csatlakozás megerősítése
@@ -232,7 +242,7 @@
Biztosan privát csevegést akarsz indítani %1 felhasználóval?
-
+ Gyorsítótár migráció nem sikerült!
@@ -242,12 +252,7 @@
Inkompatibilis gyorsítótár-verzió
-
-
- A lemezeden lévő gyorsítótár újabb, mint amit a Nheko jelenlegi verziója támogat. Kérlek, frissítsd vagy töröld a gyorsítótárat!
-
-
-
+ Nem sikerült visszaállítani az OLM fiókot. Kérlek, jelentkezz be ismét!
@@ -264,7 +269,7 @@
Nem sikerült beállítani a titkosítási kulcsokat. Válasz a szervertől: %1 %2. Kérlek, próbáld újra később!
-
+ Kérlek, próbálj meg bejelentkezni újra: %1
@@ -1469,7 +1474,7 @@ Példa: https://szerver.em:8787
RoomInfo
-
+ nincs tárolva verzió
@@ -1879,7 +1884,7 @@ Példa: https://szerver.em:8787
SecretStorage
-
+
@@ -1942,7 +1947,7 @@ If you choose verify, you need to have the other device available. If you choose
SelfVerificationStatus
-
+
@@ -1953,7 +1958,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -1966,6 +1971,11 @@ If you choose verify, you need to have the other device available. If you choose
+
+
+
+
+ SingleImagePackModel
@@ -2043,12 +2053,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+ Az üzenet visszavonása nem sikerült: %1
-
+ Nem sikerült titkosítani az eseményt, küldés megszakítva!
@@ -2202,12 +2213,12 @@ If you choose verify, you need to have the other device available. If you choose
%1 visszavonta a kopogását.
-
+ Csatlakoztál ehhez a szobához.
-
+
@@ -2479,7 +2490,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Profilkép kiválasztása
@@ -2583,12 +2594,7 @@ KI - szögletes, BE - kerek.
-
-
-
-
-
-
+ Csoportok és címkék megjelenítése a szobák listája mellett egy oszlopban.
@@ -2904,7 +2910,12 @@ Ettől általában animálttá válik az alkalmazásablakok listáján szereplő
FELÜLET
-
+
+
+
+
+
+
diff --git a/resources/langs/nheko_id.ts b/resources/langs/nheko_id.ts
index accb1eab..50b67039 100644
--- a/resources/langs/nheko_id.ts
+++ b/resources/langs/nheko_id.ts
@@ -131,17 +131,27 @@
-
+ Pengguna yang diundang: %1
-
+ Migrasi cache ke versi saat ini gagal. Ini dapat memiliki alasan yang berbeda. Silakan buka masalah dan coba gunakan versi yang lebih lama untuk sementara. Alternatifnya Anda dapat mencoba menghapus cache secara manual.
-
+
+
+
+
+
+
+
+
+
+
+ Konfirmasi untuk bergabung
@@ -232,7 +242,7 @@
Apakah Anda ingin memulai chat privat dengan %1?
-
+ Migrasi cache gagal!
@@ -242,12 +252,7 @@
Versi cache tidak kompatibel
-
-
- Cache pada disk Anda lebih baru daripada versi yang didukung Nheko ini. Harap perbarui atau kosongkan cache Anda.
-
-
-
+ Gagal memulihkan akun OLM. Mohon masuk lagi.
@@ -264,7 +269,7 @@
Gagal menyiapkan kunci enkripsi. Respons server: %1 %2. Silakan coba lagi nanti.
-
+ Mohon mencoba masuk lagi: %1
@@ -592,12 +597,12 @@
-
+ Pesan verifikasi diterima secara tidak berurutan!
-
+ Kesalahan verifikasi yang tidak diketahui.
@@ -798,12 +803,12 @@
-
+ Gabung ruangan
- ID ruangan atau alias
+ ID ruangan atau alias
@@ -811,12 +816,12 @@
- Tinggalkan ruangan
+ Tinggalkan ruangan
- Apakah Anda yakin untuk meninggalkan ruangan?
+ Apakah Anda yakin untuk keluar?
@@ -938,17 +943,17 @@ Misalnya: https://server.my:8787
-
+ Keluar
-
+ Sebuah panggilan sedang berjalan. Keluar?
-
+ Apakah Anda ingin keluar?
@@ -1188,7 +1193,7 @@ Misalnya: https://server.my:8787
-
+ Untuk mengizinkan pengguna lain melihat, perangkat mana yang benar-benar milik Anda, Anda dapat memverifikasinya. Ini juga memungkinkan cadangan kunci bekerja secara otomatis. Verifikasi perangkat yang belum diverifikasi sekarang? (Pastikan Anda memiliki salah satu perangkat tersebut.)
@@ -1241,7 +1246,7 @@ Misalnya: https://server.my:8787
-
+ Anda akan memberitahu seluruh ruangan
@@ -1463,13 +1468,13 @@ Misalnya: https://server.my:8787
-
+ Pilih homeserver kustomRoomInfo
-
+ tidak ada versi yang disimpan
@@ -1545,24 +1550,24 @@ Misalnya: https://server.my:8787
Cross-signing setup has not run yet.
-
+ Enkripsi belum disiapkanThe user just signed in with this device and hasn't verified their master key.
-
+ Login yang belum diverifikasiThere are unverified devices signed in to this account.
-
+ Mohon verifikasi perangkat Anda yang lain
- Tutup
+ Tutup
@@ -1799,27 +1804,27 @@ Misalnya: https://server.my:8787
-
+ Mohon masukkan kata sandi login Anda untuk melanjutkan:
-
+ Mohon masukkan sebuah alamat email yang valid untuk melanjutkan:
-
+ Mohon masukkan sebuah nomor telepon yang valid untuk melanjutkan:
-
+ Mohon masukkan tokennya yang telah terkirim ke Anda:
-
+ Tunggu untuk tautan konfirmasinya, lalu lanjutkan.
@@ -1879,14 +1884,14 @@ Misalnya: https://server.my:8787
SecretStorage
-
+ Gagal menghubungkan ke penyimpanan rahasia
-
+ Nheko tidak dapat terhubung ke penyimpanan aman untuk menyimpan rahasia enkripsi. Ini dapat memiliki beberapa alasan. Periksa apakah layanan D-Bus Anda berjalan dan Anda telah mengkonfigurasi layanan seperti KWallet, Gnome Keyring, KeePassXC atau yang setara untuk platform Anda. Jika Anda mengalami masalah, jangan ragu untuk membuka masalah di sini: https://github.com/Nheko-Reborn/nheko/issues
@@ -1894,76 +1899,83 @@ Misalnya: https://server.my:8787
-
+ Ini adalah kunci pemulihan Anda. Anda akan membutuhkannya untuk memulihkan akses ke pesan terenkripsi dan kunci verifikasi Anda. Simpan dengan aman. Jangan bagikan dengan siapa pun dan jangan sampai hilang! Jangan lewat! Jangan mengumpulkan Rp. 200.000!
-
+ Penyiapan enkripsi berhasil
-
+ Gagal untuk menyiapkan enkripsi: %1
-
+ Siapkan Enkripsi
-
+ Halo dan selamat datang di Matrix!
+Sepertinya Anda baru di sini. Sebelum Anda dapat mengenkripsi pesan Anda dengan aman, kami perlu menyiapkan beberapa hal. Anda dapat langsung menekan terima atau menyesuaikan beberapa opsi dasar. Kami juga mencoba menjelaskan beberapa dasar-dasarnya. Anda dapat melewatkan bagian-bagiannya, tetapi mereka mungkin terbukti membantu!
-
+ Aktifkan Enkripsi
-
+ Sepertinya Anda telah mengkonfigurasi enkripsi untuk akun ini. Agar dapat mengakses pesan terenkripsi dan membuat perangkat ini tepercaya, Anda dapat memverifikasi perangkat yang ada atau (jika punya) memasukkan frasa sandi pemulihan. Silakan pilih salah satu opsi di bawah ini.
+Jika Anda memilih verifikasi, Anda harus memiliki perangkat lain yang tersedia. Jika Anda memilih "masukkan frasa sandi", Anda memerlukan kunci pemulihan atau frasa sandi. Jika Anda mengklik batal, Anda dapat memilih untuk memverifikasi diri Anda di lain waktu.
-
+ verifikasi
-
+ masukkan frasa sandiSelfVerificationStatus
-
+
-
+ Gagal untuk membuat kunci untuk penandatanganan silang!
-
+ Gagal untuk membuat kunci untuk cadangan kunci online!
-
-
+
+ Gagal untuk membuat kunci untuk penyimpanan rahasia aman di server!
-
+ Penyiapan Enkripsi
+ Penyiapan enkripsi gagal: %1
+
+
+
+
@@ -2043,12 +2055,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+ Reaksi pesan gagal: %1
-
+ Gagal mendekripsikan peristiwa, pengiriman dihentikan!
@@ -2202,12 +2215,12 @@ If you choose verify, you need to have the other device available. If you choose
%1 menolak ketukannya.
-
+ Anda bergabung ruangan ini.
-
+ %1 mengubah avatarnya dan ubah nama tampilannya ke %2.
@@ -2251,7 +2264,7 @@ If you choose verify, you need to have the other device available. If you choose
- Tidak ada tampilan yang tersedia
+ Tidak ada tampilan yang tersedia
@@ -2304,7 +2317,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Ruangan ini berisi perangkat yang telah diverifikasi dan perangkat yang belum ganti kunci utama mereka.
@@ -2355,24 +2368,24 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Tidak ada alur pendaftaran yang tersedia!
-
+ Pendaftaran dibatalkan
- Mohon masukkan token pendaftaran yang valid.
+ Mohon masukkan token pendaftaran yang valid.
-
+ Token tidak valid
@@ -2446,22 +2459,22 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Muat ulang daftar perangkat.
-
+ Keluar dari perangkat ini.
-
+ Ubah nama perangkat.
-
+ Terakhir dilihat %1 dari %2
@@ -2471,15 +2484,15 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Keluarkan perangkat %1
-
+ Anda mengeluarkan perangkat ini.
-
+ Pilih sebuah avatar
@@ -2580,15 +2593,10 @@ MATI - persegi, NYALA - Lingkaran.
-
+ Gunakan identikon
-
-
-
-
-
-
+ Menampilkan kolom yang berisi grup dan tanda di sebelah daftar ruangan.
@@ -2903,7 +2911,12 @@ Ini biasanya menyebabkan ikon aplikasi di bilah tugas untuk beranimasi.ANTARMUKA
-
+
+
+ Tampilkan sebuah identikon daripada sebuah huruf ketika tidak ada avatar yang diatur.
+
+
+ Memainkan media seperti GIF atau WEBP ketika kursor di atas medianya.
@@ -3020,7 +3033,7 @@ Ini biasanya menyebabkan ikon aplikasi di bilah tugas untuk beranimasi.
- Tidak ada chat privat terenkripsi ditemukan dengan pengguna ini. Buat chat privat terenkripsi dengan pengguna ini dan coba lagi.
+ Tidak ada chat privat terenkripsi ditemukan dengan pengguna ini. Buat sebuah chat privat terenkripsi dengan pengguna ini dan coba lagi.
diff --git a/resources/langs/nheko_it.ts b/resources/langs/nheko_it.ts
index 17e466c8..5735836d 100644
--- a/resources/langs/nheko_it.ts
+++ b/resources/langs/nheko_it.ts
@@ -131,17 +131,27 @@
-
+ Invitato utente: %1
-
+ Migrazione della cache alla versione corrente fallita. Questo può avere diverse cause. Per favore apri una issue e nel frattempo prova ad usare una versione più vecchia. In alternativa puoi provare a cancellare la cache manualmente.
-
+
+
+
+
+
+
+
+
+
+
+ Conferma collegamento
@@ -232,7 +242,7 @@
Sei sicuro di voler avviare una chat privata con %1?
-
+ Migrazione della cache fallita!
@@ -242,12 +252,7 @@
Versione della cache incompatibile
-
-
- La cache sul tuo disco è più nuova di quella supportata da questa versione di Nheko. Per favore aggiorna o pulisci la tua cache.
-
-
-
+ Impossibile ripristinare l'account OLM. Per favore accedi nuovamente.
@@ -264,7 +269,7 @@
Impossibile configurare le chiavi crittografiche. Risposta del server: %1 %2. Per favore riprova in seguito.
-
+ Per favore prova ad accedere nuovamente: %1
@@ -1470,7 +1475,7 @@ Verificare %1 adesso?
RoomInfo
-
+ nessuna versione memorizzata
@@ -1881,7 +1886,7 @@ Verificare %1 adesso?
SecretStorage
-
+
@@ -1944,7 +1949,7 @@ If you choose verify, you need to have the other device available. If you choose
SelfVerificationStatus
-
+
@@ -1955,7 +1960,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -1968,6 +1973,11 @@ If you choose verify, you need to have the other device available. If you choose
+
+
+
+
+ SingleImagePackModel
@@ -2045,12 +2055,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+ Oscuramento del messaggio fallito: %1
-
+
@@ -2205,12 +2216,12 @@ If you choose verify, you need to have the other device available. If you choose
%1 ha oscurato la sua bussata.
-
+ Sei entrato in questa stanza.
-
+
@@ -2482,7 +2493,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Scegli un avatar
@@ -2585,12 +2596,7 @@ OFF - square, ON - Circle.
-
-
-
-
-
-
+
@@ -2895,7 +2901,12 @@ This usually causes the application icon in the task bar to animate in some fash
INTERFACCIA
-
+
+
+
+
+
+
diff --git a/resources/langs/nheko_ja.ts b/resources/langs/nheko_ja.ts
index 7ae33c58..913468dd 100644
--- a/resources/langs/nheko_ja.ts
+++ b/resources/langs/nheko_ja.ts
@@ -131,17 +131,27 @@
-
+ 招待されたユーザー: %1
-
+
-
+
+
+
+
+
+
+
+
+
+
+
@@ -232,7 +242,7 @@
-
+
@@ -242,12 +252,7 @@
-
-
-
-
-
-
+ OLMアカウントを復元できませんでした。もう一度ログインして下さい。
@@ -264,7 +269,7 @@
暗号化鍵を設定できませんでした。サーバーの応答: %1 %2. 後でやり直して下さい。
-
+ もう一度ログインしてみて下さい: %1
@@ -1465,7 +1470,7 @@ Example: https://server.my:8787
RoomInfo
-
+ バージョンが保存されていません
@@ -1875,7 +1880,7 @@ Example: https://server.my:8787
SecretStorage
-
+
@@ -1938,7 +1943,7 @@ If you choose verify, you need to have the other device available. If you choose
SelfVerificationStatus
-
+
@@ -1949,7 +1954,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -1962,6 +1967,11 @@ If you choose verify, you need to have the other device available. If you choose
+
+
+
+
+ SingleImagePackModel
@@ -2039,12 +2049,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+ メッセージを編集できませんでした: %1
-
+
@@ -2198,12 +2209,12 @@ If you choose verify, you need to have the other device available. If you choose
%1がノックを編集しました。
-
+
-
+
@@ -2475,7 +2486,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+ アバターを選択
@@ -2578,12 +2589,7 @@ OFF - square, ON - Circle.
-
-
-
-
-
-
+
@@ -2888,7 +2894,12 @@ This usually causes the application icon in the task bar to animate in some fash
-
+
+
+
+
+
+
diff --git a/resources/langs/nheko_ml.ts b/resources/langs/nheko_ml.ts
index d8e25ff2..6589a0ec 100644
--- a/resources/langs/nheko_ml.ts
+++ b/resources/langs/nheko_ml.ts
@@ -131,17 +131,27 @@
-
+ ക്ഷണിച്ച ഉപയോക്താവ്:% 1
-
+
-
+
+
+
+
+
+
+
+
+
+
+ ചേരുന്നത് ഉറപ്പാക്കുക
@@ -232,7 +242,7 @@
-
+
@@ -242,12 +252,7 @@
-
-
-
-
-
-
+
@@ -264,7 +269,7 @@
-
+ ദയവായി വീണ്ടും ലോഗിൻ ചെയ്യാൻ നോക്കുക: %1
@@ -1465,7 +1470,7 @@ Example: https://server.my:8787
RoomInfo
-
+
@@ -1876,7 +1881,7 @@ Example: https://server.my:8787
SecretStorage
-
+
@@ -1939,7 +1944,7 @@ If you choose verify, you need to have the other device available. If you choose
SelfVerificationStatus
-
+
@@ -1950,7 +1955,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -1963,6 +1968,11 @@ If you choose verify, you need to have the other device available. If you choose
+
+
+
+
+ SingleImagePackModel
@@ -2040,12 +2050,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+
-
+
@@ -2200,12 +2211,12 @@ If you choose verify, you need to have the other device available. If you choose
-
+ നിങ്ങൾ ഈ മുറിയിൽ ചേർന്നു.
-
+
@@ -2477,7 +2488,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -2580,12 +2591,7 @@ OFF - square, ON - Circle.
-
-
-
-
-
-
+
@@ -2890,7 +2896,12 @@ This usually causes the application icon in the task bar to animate in some fash
-
+
+
+
+
+
+
diff --git a/resources/langs/nheko_nl.ts b/resources/langs/nheko_nl.ts
index 1ff88a61..00e7c80d 100644
--- a/resources/langs/nheko_nl.ts
+++ b/resources/langs/nheko_nl.ts
@@ -131,17 +131,27 @@
-
+ Gebruiker uitgenodigd: %1
-
+ Het migreren can de cache naar de huidige versie is mislukt. Dit kan verscheidene redenen hebben. Maak a.u.b een issue aan en probeer in de tussentijd een oudere versie. Je kan ook proberen de cache handmatig te verwijderen.
-
+
+
+
+
+
+
+
+
+
+
+ Bevestig deelname
@@ -232,7 +242,7 @@
Weet je zeker dat je een privé chat wil beginnen met %1?
-
+ Migreren van de cache is mislukt!
@@ -242,12 +252,7 @@
Incompatibele cacheversie
-
-
- De opgeslagen cache is nieuwer dan deze versie van Nheko ondersteunt. Update Nheko, of verwijder je cache.
-
-
-
+ Herstellen van OLM account mislukt. Log a.u.b. opnieuw in.
@@ -264,7 +269,7 @@
Instellen van de versleuteling is mislukt. Bericht van server: %1 %2. Probeer het a.u.b. later nog eens.
-
+ Probeer a.u.b. opnieuw in te loggen: %1
@@ -592,12 +597,12 @@
-
+ Verificatieberichten in verkeerde volgorde ontvangen!
-
+ Onbekende verificatiefout.
@@ -798,12 +803,12 @@
-
+ Ga kamer binnen
- Kamer ID of alias
+ Kamer ID of alias
@@ -811,12 +816,12 @@
- Kamer verlaten
+ Kamer verlaten
- Weet je zeker dat je de kamer wil verlaten?
+ Weet je zeker dat je de kamer wil verlaten?
@@ -938,17 +943,17 @@ Voorbeeld: https://mijnserver.nl:8787
-
+ Uitloggen
-
+ Er is een oproep gaande. Uitloggen?
-
+ Weet je zeker dat je wil uitloggen?
@@ -1170,7 +1175,7 @@ Voorbeeld: https://mijnserver.nl:8787
-
+ &Ga naar geciteerd bericht
@@ -1188,7 +1193,7 @@ Voorbeeld: https://mijnserver.nl:8787
-
+ Om andere gebruikers te laten weten welke apparaten echt van jou zijn, kan je ze verifiëren. Dit zorgt ook dat reservesleutels automatisch werken. Nu een ongeverifiëerd apparaat verifiëren? (Zorg a.u.b. dat je een van de apparaten bij de hand hebt.)
@@ -1241,7 +1246,7 @@ Voorbeeld: https://mijnserver.nl:8787
-
+ Je staat op het punt de hele kamer een notificatie te sturen
@@ -1463,13 +1468,13 @@ Voorbeeld: https://mijnserver.nl:8787
-
+ Kies een aangepaste thuisserverRoomInfo
-
+ geen versie opgeslagen
@@ -1545,24 +1550,24 @@ Voorbeeld: https://mijnserver.nl:8787
Cross-signing setup has not run yet.
-
+ Versleuteling niet ingesteldThe user just signed in with this device and hasn't verified their master key.
-
+ Ongeverifiëerde loginThere are unverified devices signed in to this account.
-
+ Verifieer a.u.b. je andere apparaten
- Sluiten
+ Sluiten
@@ -1800,27 +1805,27 @@ Voorbeeld: https://mijnserver.nl:8787
-
+ Voer a.u.b. je wachtwoord in om door te gaan:
-
+ Voer a.u.b. een geldig email adres in om door te gaan:
-
+ Voer a.u.b. een geldig telefoonnummer in om door te gaan:
-
+ Voer a.u.b. de token in die je is toegestuurd:
-
+ Wacht op de bevestigingslink, en ga dan door.
@@ -1880,14 +1885,14 @@ Voorbeeld: https://mijnserver.nl:8787
SecretStorage
-
+ Verbinden met geheimopslag mislukt
-
+ Nheko kon niet verbinden met de veilige opslag voor versleutelingsgegevens. Dit kan verscheidene redenen hebben. Controleer of je D-Bus service wel draait, en of je een service zoals KWallet, Gnome Keyring, KeyPassXC of een soortgelijk equivalent voor je platform hebt ingesteld. Als je problemen ondervind, voel je vrij om hier een nieuwe issue te openen: https://github.com/Nheko-Reborn/nheko/issues
@@ -1895,76 +1900,83 @@ Voorbeeld: https://mijnserver.nl:8787
-
+ Dit is je herstelsleutel. Je hebt deze nodig om toegang tot je versleutelde berichten en sleutels te herstellen. Hou deze veilig. Deel hem met niemand, en raak hem niet kwijt! Ga niet langs start, ontvang geen €200!
-
+ Versleuteling succesvol ingesteld
-
+ Kon versleuteling niet instellen: %1
-
+ Versleuteling instellen
-
+ Hallo, en welkom bij Matrix!
+Zo te zien ben je nieuw. Voordat je je berichten veilig kan versleutelen, moeten we een paar kleine dingen instellen. Je kan ofwel direct op accepteren drukken of een paar basisopties aanpassen. We proberen ook de basisprincipes uit te leggen. Je kan deze overslaan, maar wellicht vind je het behulpzaam!
-
+ Activeer versleuteling
-
+ Het lijkt erop dat je versleuteling al hebt ingesteld voor dit account. Om bij je versleutelde berichten te kunnen en om dit apparaat als vertrouwd te laten verschijnen, kan je ofwel een bestaand apparaat verifiëren ofwel je herstelsleutel invoeren (als je er één hebt). Kies a.u.b een van de opties hieronder.
+Als je "verifieer" kiest, moet je het andere apparaat bij de hand hebben. Als je "Voer herstelsleutel in" kiest moet je je herstelsleutel of wachtwoordzin hebben. Als je op annuleren klikt kan je later altijd alsnog jezelf verifiëren.
-
+ verifieer
-
+ voer herstelsleutel inSelfVerificationStatus
-
+
-
+ Aanmaken van sleutels voor kruisversleuteling mislukt!
-
+ Aanmaken van sleutels voor online sleutelreservekopie mislukt!
-
-
+
+ Aanmaken van sleutels voor beveiligde geheimopslag aan de server kant mislukt!
-
+ Versleuteling instellen
+ Versleuteling instellen mislukt: %1
+
+
+
+
@@ -2044,12 +2056,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+ Bericht intrekken mislukt: %1
-
+ Kon evenement niet versleutelen, versturen geannuleerd!
@@ -2204,12 +2217,12 @@ If you choose verify, you need to have the other device available. If you choose
%1 heeft het aankloppen ingetrokken.
-
+ Je neemt nu deel aan deze kamer.
-
+ %1 is van avatar veranderd en heet nu %2.
@@ -2253,7 +2266,7 @@ If you choose verify, you need to have the other device available. If you choose
- Geen voorbeeld beschikbaar
+ Geen voorbeeld beschikbaar
@@ -2306,7 +2319,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Deze kamer bevat alleen geverifiëerde apparaten en apparaten die nooit hun hoofdsleutel hebben veranderd.
@@ -2357,24 +2370,24 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Geen beschikbare registratiestromen!
-
+ Registratie afgebroken
- Voer a.u.b een geldig registratieteken in.
+ Voer a.u.b een geldig registratieteken in.
-
+ Ongeldig teken
@@ -2448,22 +2461,22 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Ververs apparaatlijst.
-
+ Meld dit apparaat af.
-
+ Verander apparaatnaam.
-
+ Laatst gezien %1 via %2
@@ -2473,15 +2486,15 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Meld apparaat %1 af
-
+ Je hebt dit apparaat afgemeld.
-
+ Kies een avatar
@@ -2582,15 +2595,10 @@ UIT - vierkant, AAN - cirkel.
-
+ Gebruik identicons
-
-
-
-
-
-
+ Laat een kolom zien met groepen en markeringen naast de kamerlijst.
@@ -2905,7 +2913,12 @@ Meestal zorgt dit dat het icoon in de taakbalk op een manier animeert of iets de
INTERFACE
-
+
+
+ Laat een identicon zien in plaats van een letter wanneer er geen avatar is ingesteld.
+
+
+ Speelt media zoals GIFs en WebPs alleen af terwijl de muiscursor erboven hangt.
@@ -3022,7 +3035,7 @@ Meestal zorgt dit dat het icoon in de taakbalk op een manier animeert of iets de
- Geen versleutelde chat gevonden met deze gebruiker. Maak een versleutelde chat aan met deze gebruiker en probeer het opnieuw.
+ Geen versleutelde chat gevonden met deze gebruiker. Maak een versleutelde chat aan met deze gebruiker en probeer het opnieuw.
diff --git a/resources/langs/nheko_pl.ts b/resources/langs/nheko_pl.ts
index 0f625d44..9dbf2b36 100644
--- a/resources/langs/nheko_pl.ts
+++ b/resources/langs/nheko_pl.ts
@@ -131,17 +131,27 @@
-
+ Zaproszono użytkownika %1
-
+ Migracja cachu do obecnej wersji nieudana. Przyczyny mogą być różne. Proszę zgłosić błąd i w miedzyczasie używać starszej wersji. Możesz również spróbuwać usunąć cache ręcznie.
-
+
+
+
+
+
+
+
+
+
+
+ Potwierdź dołączenie
@@ -232,7 +242,7 @@
Czy na pewno chcesz rozpocząć prywatny czat z %1?
-
+ Nie udało się przenieść pamięci podręcznej!
@@ -242,12 +252,7 @@
Niekompatybilna wersja pamięci podręcznej
-
-
- Pamięć podręczna na Twoim dysku jest nowsza niż wersja obsługiwana przez Nheko. Zaktualizuj lub wyczyść pamięć podręczną.
-
-
-
+ Nie udało się przywrócić konta OLM. Spróbuj zalogować się ponownie.
@@ -264,7 +269,7 @@
Nie udało się ustawić kluczy szyfrujących. Odpowiedź serwera: %1 %2. Spróbuj ponownie później.
-
+ Spróbuj zalogować się ponownie: %1
@@ -1469,7 +1474,7 @@ Przykład: https://server.my:8787
RoomInfo
-
+ wersja nie została zachowana
@@ -1882,7 +1887,7 @@ Przykład: https://server.my:8787
SecretStorage
-
+ Błąd połączenia do menadżera sekretów
@@ -1945,7 +1950,7 @@ If you choose verify, you need to have the other device available. If you choose
SelfVerificationStatus
-
+
@@ -1956,7 +1961,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -1969,6 +1974,11 @@ If you choose verify, you need to have the other device available. If you choose
+
+
+
+
+ SingleImagePackModel
@@ -2046,12 +2056,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+ Cenzurowanie wiadomości nie powiodło się: %1
-
+ Szyfrowanie event-u nie powiodło się, wysyłanie anulowane!
@@ -2207,12 +2218,12 @@ If you choose verify, you need to have the other device available. If you choose
Użytkownik %1 ocenzurował własne pukanie.
-
+ Dołączyłeś(-łaś) do tego pokoju.
-
+ Użytkownik %1 zmienił swojego awatara i zmienił swoją nazwę wyświetlaną na %2.
@@ -2484,7 +2495,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Wybierz awatar
@@ -2588,12 +2599,7 @@ OFF - kwadrat, ON - koło.
-
-
-
-
-
-
+ Pokazuj kolumnę zawierającą grupy i tagi obok listy pokoi.
@@ -2906,7 +2912,12 @@ To zwykle sprawia, że ikona aplikacji w tacce systemowej jest animowana.INTERFEJS
-
+
+
+
+
+
+ Odtwarzaj media takie jak GIF czy WEBP tylko gdy wskazane przy użyciu myszy.
diff --git a/resources/langs/nheko_pt_BR.ts b/resources/langs/nheko_pt_BR.ts
index a9851709..a94b3824 100644
--- a/resources/langs/nheko_pt_BR.ts
+++ b/resources/langs/nheko_pt_BR.ts
@@ -131,17 +131,27 @@
-
+ Usuário convidado: %1
-
+ Falha ao migrar cache para versão atual. Isso pode ter diferentes razões. Por favor reporte o problema e tente usar uma versão antiga no meio tempo. Alternativamente, você pode tentar excluir o cache manualmente.
-
+
+
+
+
+
+
+
+
+
+
+ Confirmar entrada
@@ -232,7 +242,7 @@
Deseja realmente iniciar uma conversa privada com %1?
-
+ Migração do cache falhou!
@@ -242,12 +252,7 @@
Versão de cache incompatível
-
-
- O cache em seu disco é mais recente do que essa versão do Nheko suporta. Por favor atualize ou limpe o cache.
-
-
-
+ Falha ao restaurar conta OLM. Por favor faça login novamente.
@@ -264,7 +269,7 @@
Falha ao configurar chaves de criptografia. Resposta do servidor: %1 %2. Por favor tente novamente mais tarde.
-
+
@@ -1465,7 +1470,7 @@ Example: https://server.my:8787
RoomInfo
-
+
@@ -1876,7 +1881,7 @@ Example: https://server.my:8787
SecretStorage
-
+
@@ -1939,7 +1944,7 @@ If you choose verify, you need to have the other device available. If you choose
SelfVerificationStatus
-
+
@@ -1950,7 +1955,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -1963,6 +1968,11 @@ If you choose verify, you need to have the other device available. If you choose
+
+
+
+
+ SingleImagePackModel
@@ -2040,12 +2050,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+
-
+
@@ -2200,12 +2211,12 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Você entrou nessa sala.
-
+
@@ -2477,7 +2488,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -2580,12 +2591,7 @@ OFF - square, ON - Circle.
-
-
-
-
-
-
+
@@ -2890,7 +2896,12 @@ This usually causes the application icon in the task bar to animate in some fash
-
+
+
+
+
+
+
diff --git a/resources/langs/nheko_pt_PT.ts b/resources/langs/nheko_pt_PT.ts
index 69eab896..5c40885c 100644
--- a/resources/langs/nheko_pt_PT.ts
+++ b/resources/langs/nheko_pt_PT.ts
@@ -131,17 +131,27 @@
-
+ Utilizador convidado: %1
-
+ A migração da cache para a versão atual falhou, e existem várias razões possíveis. Por favor abra um problema ("issue") e experimente usar uma versão mais antiga entretanto. Alternativamente, pode tentar apagar a cache manualmente.
-
+
+
+
+
+
+
+
+
+
+
+ Confirmar entrada
@@ -232,7 +242,7 @@
Tem a certeza que quer começar uma conversa privada com %1?
-
+ Falha ao migrar a cache!
@@ -242,12 +252,7 @@
Versão da cache incompatível
-
-
- A cache que existe no seu disco é mais recente do que esta versão do Nheko suporta. Por favor atualize-a ou apague-a.
-
-
-
+ Falha ao restaurar a sua conta OLM. Por favor autentique-se novamente.
@@ -264,7 +269,7 @@
Falha ao estabelecer chaves encriptadas. Resposta do servidor: %1 %2. Tente novamente mais tarde.
-
+ Por favor, tente autenticar-se novamente: %1
@@ -1469,7 +1474,7 @@ Exemplo: https://servidor.meu:8787
RoomInfo
-
+ nenhuma versão guardada
@@ -1880,7 +1885,7 @@ Exemplo: https://servidor.meu:8787
SecretStorage
-
+ Falha ao ligar ao armazenamento secreto
@@ -1943,7 +1948,7 @@ If you choose verify, you need to have the other device available. If you choose
SelfVerificationStatus
-
+
@@ -1954,7 +1959,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -1967,6 +1972,11 @@ If you choose verify, you need to have the other device available. If you choose
+
+
+
+
+ SingleImagePackModel
@@ -2044,12 +2054,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+ Falha ao eliminar mensagem: %1
-
+ Falha ao encriptar evento, envio abortado!
@@ -2204,12 +2215,12 @@ If you choose verify, you need to have the other device available. If you choose
%1 eliminou a sua "batida à porta".
-
+ Entrou na sala.
-
+ %1 alterou o seu avatar e também o seu nome de exibição para %2.
@@ -2481,7 +2492,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Selecionar um avatar
@@ -2584,12 +2595,7 @@ OFF - square, ON - Circle.
-
-
-
-
-
-
+
@@ -2901,7 +2907,12 @@ This usually causes the application icon in the task bar to animate in some fash
-
+
+
+
+
+
+
diff --git a/resources/langs/nheko_ro.ts b/resources/langs/nheko_ro.ts
index 6d28da46..0440c623 100644
--- a/resources/langs/nheko_ro.ts
+++ b/resources/langs/nheko_ro.ts
@@ -131,17 +131,27 @@
-
+ Utilizator invitat: %1
-
+ Nu s-a putut muta cache-ul pe versiunea curentă. Acest lucru poate avea diferite cauze. Vă rugăm să deschideți un issue și încercați să folosiți o versiune mai veche între timp. O altă opțiune ar fi să încercați să ștergeți cache-ul manual.
-
+
+
+
+
+
+
+
+
+
+
+
@@ -232,7 +242,7 @@
-
+ Nu s-a putut migra cache-ul!
@@ -242,12 +252,7 @@
Versiune cache incompatibilă
-
-
- Cache-ul de pe disc este mai nou decât versiunea pe care Nheko o suportă. Vă rugăm actualizați sau ștergeți cache-ul.
-
-
-
+ Nu s-a putut restabili contul OLM. Vă rugăm să vă reconectați.
@@ -264,7 +269,7 @@
Nu s-au putut stabili cheile. Răspunsul serverului: %1 %2. Vă rugăm încercați mai târziu.
-
+ Vă rugăm să vă reconectați: %1
@@ -1469,7 +1474,7 @@ Exemplu: https://serverul.meu:8787
RoomInfo
-
+ nicio versiune stocată
@@ -1881,7 +1886,7 @@ Exemplu: https://serverul.meu:8787
SecretStorage
-
+
@@ -1944,7 +1949,7 @@ If you choose verify, you need to have the other device available. If you choose
SelfVerificationStatus
-
+
@@ -1955,7 +1960,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -1968,6 +1973,11 @@ If you choose verify, you need to have the other device available. If you choose
+
+
+
+
+ SingleImagePackModel
@@ -2045,12 +2055,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+ Redactare mesaj eșuată: %1
-
+
@@ -2206,12 +2217,12 @@ If you choose verify, you need to have the other device available. If you choose
%1 și-a redactat ciocănitul.
-
+ Te-ai alăturat camerei.
-
+
@@ -2483,7 +2494,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Selectează un avatar
@@ -2586,12 +2597,7 @@ OFF - square, ON - Circle.
-
-
-
-
-
-
+
@@ -2896,7 +2902,12 @@ This usually causes the application icon in the task bar to animate in some fash
INTERFAȚĂ
-
+
+
+
+
+
+
diff --git a/resources/langs/nheko_ru.ts b/resources/langs/nheko_ru.ts
index 698d277f..b5ba46dd 100644
--- a/resources/langs/nheko_ru.ts
+++ b/resources/langs/nheko_ru.ts
@@ -131,17 +131,27 @@
-
+ Приглашенный пользователь: %1
-
+ Миграция кэша для текущей версии не удалась. Это может происходить по разным причинам. Пожалуйста сообщите о проблеме и попробуйте временно использовать старую версию. Так-же вы можете попробовать удалить кэш самостоятельно.
-
+
+
+
+
+
+
+
+
+
+
+ Подтвердить вход
@@ -232,7 +242,7 @@
Вы действительно хотите начать личную переписку с %1?
-
+ Миграция кэша не удалась!
@@ -242,12 +252,7 @@
Не совместимая версия кэша
-
-
- Ваш кэш новее, чем эта версия Nheko поддерживает. Пожалуйста обновитесь или отчистите ваш кэш.
-
-
-
+ Не удалось восстановить учетную запись OLM. Пожалуйста, войдите снова.
@@ -264,7 +269,7 @@
Не удалось настроить ключи шифрования. Ответ сервера:%1 %2. Пожалуйста, попробуйте позже.
-
+ Повторите попытку входа: %1
@@ -1469,7 +1474,7 @@ Example: https://server.my:8787
RoomInfo
-
+ нет сохраненной версии
@@ -1881,7 +1886,7 @@ Example: https://server.my:8787
SecretStorage
-
+
@@ -1944,7 +1949,7 @@ If you choose verify, you need to have the other device available. If you choose
SelfVerificationStatus
-
+
@@ -1955,7 +1960,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -1968,6 +1973,11 @@ If you choose verify, you need to have the other device available. If you choose
+
+
+
+
+ SingleImagePackModel
@@ -2045,12 +2055,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+ Ошибка редактирования сообщения: %1
-
+ Не удалось зашифровать сообщение, отправка отменена!
@@ -2206,12 +2217,12 @@ If you choose verify, you need to have the other device available. If you choose
%1 отредактировал его "стук".
-
+ Вы присоединились к этой комнате.
-
+
@@ -2483,7 +2494,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Выберите аватар
@@ -2586,12 +2597,7 @@ OFF - square, ON - Circle.
-
-
-
-
-
-
+ Отображать колонку содержащую группы и тэги рядом со списком комнаты.
@@ -2901,7 +2907,12 @@ This usually causes the application icon in the task bar to animate in some fash
ИНТЕРФЕЙС
-
+
+
+
+
+
+
diff --git a/resources/langs/nheko_si.ts b/resources/langs/nheko_si.ts
index 579ca1cf..ea45674a 100644
--- a/resources/langs/nheko_si.ts
+++ b/resources/langs/nheko_si.ts
@@ -131,17 +131,27 @@
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
@@ -232,7 +242,7 @@
-
+
@@ -242,12 +252,7 @@
-
-
-
-
-
-
+
@@ -264,7 +269,7 @@
-
+
@@ -1465,7 +1470,7 @@ Example: https://server.my:8787
RoomInfo
-
+
@@ -1876,7 +1881,7 @@ Example: https://server.my:8787
SecretStorage
-
+
@@ -1939,7 +1944,7 @@ If you choose verify, you need to have the other device available. If you choose
SelfVerificationStatus
-
+
@@ -1950,7 +1955,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -1963,6 +1968,11 @@ If you choose verify, you need to have the other device available. If you choose
+
+
+
+
+ SingleImagePackModel
@@ -2040,12 +2050,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+
-
+
@@ -2200,12 +2211,12 @@ If you choose verify, you need to have the other device available. If you choose
-
+
-
+
@@ -2477,7 +2488,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -2580,12 +2591,7 @@ OFF - square, ON - Circle.
-
-
-
-
-
-
+
@@ -2890,7 +2896,12 @@ This usually causes the application icon in the task bar to animate in some fash
-
+
+
+
+
+
+
diff --git a/resources/langs/nheko_sv.ts b/resources/langs/nheko_sv.ts
index e19136db..28281dbd 100644
--- a/resources/langs/nheko_sv.ts
+++ b/resources/langs/nheko_sv.ts
@@ -131,17 +131,27 @@
-
+ Bjöd in användare: %1
-
+ Kunde inte migrera cachen till den nuvarande versionen. Detta kan bero på flera anledningar, vänligen rapportera problemet och prova en äldre version under tiden. Du kan också försöka att manuellt radera cachen.
-
+
+
+
+
+
+
+
+
+
+
+
@@ -232,7 +242,7 @@
-
+ Cache-migration misslyckades!
@@ -242,12 +252,7 @@
Inkompatibel cache-version
-
-
- Cachen på ditt lagringsmedia är nyare än vad denna version av Nheko stödjer. Vänligen uppdatera eller rensa din cache.
-
-
-
+ Kunde inte återställa OLM-konto. Vänligen logga in på nytt.
@@ -264,7 +269,7 @@
Kunde inte sätta upp krypteringsnycklar. Svar från servern: %1 %2. Vänligen försök igen senare.
-
+ Vänligen försök logga in på nytt: %1
@@ -1469,7 +1474,7 @@ Exempel: https://server.my:8787
RoomInfo
-
+ ingen version lagrad
@@ -1880,7 +1885,7 @@ Exempel: https://server.my:8787
SecretStorage
-
+
@@ -1943,7 +1948,7 @@ If you choose verify, you need to have the other device available. If you choose
SelfVerificationStatus
-
+
@@ -1954,7 +1959,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -1967,6 +1972,11 @@ If you choose verify, you need to have the other device available. If you choose
+
+
+
+
+ SingleImagePackModel
@@ -2044,12 +2054,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+ Kunde inte maskera meddelande: %1
-
+ Kunde inte kryptera event, sändning avbruten!
@@ -2204,12 +2215,12 @@ If you choose verify, you need to have the other device available. If you choose
%1 maskerade sin knackning.
-
+ Du gick med i detta rum.
-
+
@@ -2481,7 +2492,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+ Välj en avatar
@@ -2585,12 +2596,7 @@ AV - Kvadrat, PÅ - Cirkel.
-
-
-
-
-
-
+ Visa en kolumn innehållande grupper och taggar bredvid listan över rum.
@@ -2902,7 +2908,12 @@ Detta gör vanligtvis att ikonen i aktivitetsfältet animeras på något sätt.<
GRÄNSSNITT
-
+
+
+
+
+
+
diff --git a/resources/langs/nheko_zh_CN.ts b/resources/langs/nheko_zh_CN.ts
index 36cfb0a0..fc514ba4 100644
--- a/resources/langs/nheko_zh_CN.ts
+++ b/resources/langs/nheko_zh_CN.ts
@@ -131,17 +131,27 @@
-
+ 邀请已发送: %1
-
+ 无法迁移缓存到目前版本,可能有多种原因引发此类问题。您可以新建一个议题并继续使用之前版本,或者您可以尝试手动删除缓存。
-
+
+
+
+
+
+
+
+
+
+
+
@@ -232,7 +242,7 @@
-
+ 缓存迁移失败!
@@ -242,12 +252,7 @@
无法兼容缓存版本
-
-
- 本地缓存版本比现用的Nheko版本新。请升级Nheko或手动清除缓存。
-
-
-
+ 恢复 OLM 账户失败。请重新登录。
@@ -264,7 +269,7 @@
设置密钥失败。服务器返回信息: %1 %2。请稍后再试。
-
+ 请尝试再次登录:%1
@@ -1465,7 +1470,7 @@ Example: https://server.my:8787
RoomInfo
-
+
@@ -1875,7 +1880,7 @@ Example: https://server.my:8787
SecretStorage
-
+
@@ -1938,7 +1943,7 @@ If you choose verify, you need to have the other device available. If you choose
SelfVerificationStatus
-
+
@@ -1949,7 +1954,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+
@@ -1962,6 +1967,11 @@ If you choose verify, you need to have the other device available. If you choose
+
+
+
+
+ SingleImagePackModel
@@ -2039,12 +2049,13 @@ If you choose verify, you need to have the other device available. If you choose
TimelineModel
-
+
+ 删除消息失败:%1
-
+
@@ -2198,12 +2209,12 @@ If you choose verify, you need to have the other device available. If you choose
-
+ 您已加入此房间
-
+
@@ -2475,7 +2486,7 @@ If you choose verify, you need to have the other device available. If you choose
-
+ 选择一个头像
@@ -2578,12 +2589,7 @@ OFF - square, ON - Circle.
-
-
-
-
-
-
+
@@ -2888,7 +2894,12 @@ This usually causes the application icon in the task bar to animate in some fash
-
+
+
+
+
+
+
diff --git a/resources/qml/MessageView.qml b/resources/qml/MessageView.qml
index 7ed30112..b70335bb 100644
--- a/resources/qml/MessageView.qml
+++ b/resources/qml/MessageView.qml
@@ -363,7 +363,7 @@ ScrollView {
anchors.horizontalCenter: parent ? parent.horizontalCenter : undefined
width: chat.delegateMaxWidth
- height: Math.max(section.active ? section.height + timelinerow.height : timelinerow.height, 10)
+ height: section.active ? section.height + timelinerow.height : timelinerow.height
Rectangle {
id: scrollHighlight
@@ -420,7 +420,7 @@ ScrollView {
property string day: wrapper.day
property string previousMessageDay: wrapper.previousMessageDay
property string userName: wrapper.userName
- property var timestamp: wrapper.timestamp
+ property date timestamp: wrapper.timestamp
z: 4
active: previousMessageUserId !== undefined && previousMessageUserId !== userId || previousMessageDay !== day
diff --git a/resources/qml/delegates/MessageDelegate.qml b/resources/qml/delegates/MessageDelegate.qml
index 9f889106..5f560505 100644
--- a/resources/qml/delegates/MessageDelegate.qml
+++ b/resources/qml/delegates/MessageDelegate.qml
@@ -34,7 +34,7 @@ Item {
required property int encryptionError
required property int relatedEventCacheBuster
- height: Math.max(chooser.child.height, 20)
+ height: chooser.child ? chooser.child.height : Nheko.paddingLarge
DelegateChooser {
id: chooser
diff --git a/resources/qml/dialogs/LeaveRoomDialog.qml b/resources/qml/dialogs/LeaveRoomDialog.qml
index e9c12e8f..30fde5a8 100644
--- a/resources/qml/dialogs/LeaveRoomDialog.qml
+++ b/resources/qml/dialogs/LeaveRoomDialog.qml
@@ -2,12 +2,12 @@
//
// SPDX-License-Identifier: GPL-3.0-or-later
-import Qt.labs.platform 1.1
+import Qt.labs.platform 1.1 as P
import QtQuick 2.15
import QtQuick.Controls 2.15
import im.nheko 1.0
-MessageDialog {
+P.MessageDialog {
id: leaveRoomRoot
required property string roomId
@@ -15,6 +15,6 @@ MessageDialog {
title: qsTr("Leave room")
text: qsTr("Are you sure you want to leave?")
modality: Qt.ApplicationModal
- buttons: Dialog.Ok | Dialog.Cancel
+ buttons: P.MessageDialog.Ok | P.MessageDialog.Cancel
onAccepted: Rooms.leave(roomId)
}
diff --git a/resources/qml/dialogs/LogoutDialog.qml b/resources/qml/dialogs/LogoutDialog.qml
index eb82dd15..c571a89e 100644
--- a/resources/qml/dialogs/LogoutDialog.qml
+++ b/resources/qml/dialogs/LogoutDialog.qml
@@ -14,6 +14,6 @@ MessageDialog {
text: CallManager.isOnCall ? qsTr("A call is in progress. Log out?") : qsTr("Are you sure you want to log out?")
modality: Qt.WindowModal
flags: Qt.Tool | Qt.WindowStaysOnTopHint | Qt.WindowCloseButtonHint | Qt.WindowTitleHint
- buttons: Dialog.Ok | Dialog.Cancel
+ buttons: MessageDialog.Ok | MessageDialog.Cancel
onAccepted: Nheko.logout()
}
diff --git a/resources/qml/dialogs/ReadReceipts.qml b/resources/qml/dialogs/ReadReceipts.qml
index e825dd81..2e2b5486 100644
--- a/resources/qml/dialogs/ReadReceipts.qml
+++ b/resources/qml/dialogs/ReadReceipts.qml
@@ -58,61 +58,58 @@ ApplicationWindow {
boundsBehavior: Flickable.StopAtBounds
model: readReceipts
- delegate: RowLayout {
- spacing: Nheko.paddingMedium
+ delegate: ItemDelegate {
+ onClicked: room.openUserProfile(model.mxid)
+ padding: Nheko.paddingMedium
+ width: receiptLayout.implicitWidth
+ height: receiptLayout.implicitHeight
+ hoverEnabled: true
+ ToolTip.visible: hovered
+ ToolTip.text: model.mxid
+ background: Rectangle {
+ color: readReceiptsRoot.color
+ }
- Avatar {
- width: Nheko.avatarSize
- height: Nheko.avatarSize
- userid: model.mxid
- url: model.avatarUrl.replace("mxc://", "image://MxcImage/")
- displayName: model.displayName
- onClicked: room.openUserProfile(model.mxid)
- ToolTip.visible: avatarHover.hovered
- ToolTip.text: model.mxid
+ RowLayout {
+ id: receiptLayout
+
+ spacing: Nheko.paddingMedium
+
+ Avatar {
+ width: Nheko.avatarSize
+ height: Nheko.avatarSize
+ userid: model.mxid
+ url: model.avatarUrl.replace("mxc://", "image://MxcImage/")
+ displayName: model.displayName
+ }
+
+ ColumnLayout {
+ spacing: Nheko.paddingSmall
+
+ Label {
+ text: model.displayName
+ color: TimelineManager.userColor(model ? model.mxid : "", Nheko.colors.window)
+ font.pointSize: fontMetrics.font.pointSize
+ }
+
+ Label {
+ text: model.timestamp
+ color: Nheko.colors.buttonText
+ font.pointSize: fontMetrics.font.pointSize * 0.9
+ }
+
+ Item {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ }
- HoverHandler {
- id: avatarHover
}
}
- ColumnLayout {
- spacing: Nheko.paddingSmall
-
- Label {
- text: model.displayName
- color: TimelineManager.userColor(model ? model.mxid : "", Nheko.colors.window)
- font.pointSize: fontMetrics.font.pointSize
- ToolTip.visible: displayNameHover.hovered
- ToolTip.text: model.mxid
-
- TapHandler {
- onSingleTapped: room.openUserProfile(userId)
- }
-
- CursorShape {
- anchors.fill: parent
- cursorShape: Qt.PointingHandCursor
- }
-
- HoverHandler {
- id: displayNameHover
- }
-
- }
-
- Label {
- text: model.timestamp
- color: Nheko.colors.buttonText
- font.pointSize: fontMetrics.font.pointSize * 0.9
- }
-
- Item {
- Layout.fillHeight: true
- Layout.fillWidth: true
- }
-
+ CursorShape {
+ anchors.fill: parent
+ cursorShape: Qt.PointingHandCursor
}
}
diff --git a/resources/qml/dialogs/RoomSettings.qml b/resources/qml/dialogs/RoomSettings.qml
index 0e7749ce..b0f7730b 100644
--- a/resources/qml/dialogs/RoomSettings.qml
+++ b/resources/qml/dialogs/RoomSettings.qml
@@ -239,7 +239,7 @@ ApplicationWindow {
onRejected: {
encryptionToggle.checked = false;
}
- buttons: Dialog.Ok | Dialog.Cancel
+ buttons: Platform.MessageDialog.Ok | Platform.MessageDialog.Cancel
}
MatrixText {
diff --git a/src/Cache.cpp b/src/Cache.cpp
index 58eb2630..0fdf8dd3 100644
--- a/src/Cache.cpp
+++ b/src/Cache.cpp
@@ -199,7 +199,6 @@ Cache::Cache(const QString &userId, QObject *parent)
, env_{nullptr}
, localUserId_{userId}
{
- setup();
connect(this, &Cache::userKeysUpdate, this, &Cache::updateUserKeys, Qt::QueuedConnection);
connect(
this,
@@ -212,6 +211,7 @@ Cache::Cache(const QString &userId, QObject *parent)
}
},
Qt::QueuedConnection);
+ setup();
}
void
@@ -308,7 +308,178 @@ Cache::setup()
txn.commit();
- databaseReady_ = true;
+ loadSecrets({
+ {mtx::secret_storage::secrets::cross_signing_master, false},
+ {mtx::secret_storage::secrets::cross_signing_self_signing, false},
+ {mtx::secret_storage::secrets::cross_signing_user_signing, false},
+ {mtx::secret_storage::secrets::megolm_backup_v1, false},
+ {"pickle_secret", true},
+ });
+}
+
+static void
+fatalSecretError()
+{
+ QMessageBox::critical(
+ ChatPage::instance(),
+ QCoreApplication::translate("SecretStorage", "Failed to connect to secret storage"),
+ QCoreApplication::translate(
+ "SecretStorage",
+ "Nheko could not connect to the secure storage to save encryption secrets to. This can "
+ "have multiple reasons. Check if your D-Bus service is running and you have configured a "
+ "service like KWallet, Gnome Keyring, KeePassXC or the equivalent for your platform. If "
+ "you are having trouble, feel free to open an issue here: "
+ "https://github.com/Nheko-Reborn/nheko/issues"));
+
+ QCoreApplication::exit(1);
+ exit(1);
+}
+
+static QString
+secretName(std::string name, bool internal)
+{
+ auto settings = UserSettings::instance();
+ return (internal ? "nheko." : "matrix.") +
+ QString(
+ QCryptographicHash::hash(settings->profile().toUtf8(), QCryptographicHash::Sha256)
+ .toBase64()) +
+ "." + QString::fromStdString(name);
+}
+
+void
+Cache::loadSecrets(std::vector> toLoad)
+{
+ if (toLoad.empty()) {
+ this->databaseReady_ = true;
+ emit databaseReady();
+ return;
+ }
+
+ auto [name_, internal] = toLoad.front();
+
+ auto job = new QKeychain::ReadPasswordJob(QCoreApplication::applicationName());
+ job->setAutoDelete(true);
+ job->setInsecureFallback(true);
+ job->setSettings(UserSettings::instance()->qsettings());
+ auto name = secretName(name_, internal);
+ job->setKey(name);
+
+ connect(job,
+ &QKeychain::ReadPasswordJob::finished,
+ this,
+ [this, name, toLoad, job](QKeychain::Job *) mutable {
+ const QString secret = job->textData();
+ if (job->error() && job->error() != QKeychain::Error::EntryNotFound) {
+ nhlog::db()->error("Restoring secret '{}' failed ({}): {}",
+ name.toStdString(),
+ job->error(),
+ job->errorString().toStdString());
+
+ fatalSecretError();
+ }
+ if (secret.isEmpty()) {
+ nhlog::db()->debug("Restored empty secret '{}'.", name.toStdString());
+ } else {
+ std::unique_lock lock(secret_storage.mtx);
+ secret_storage.secrets[name.toStdString()] = secret.toStdString();
+ }
+
+ // load next secret
+ toLoad.erase(toLoad.begin());
+
+ // You can't start a job from the finish signal of a job.
+ QTimer::singleShot(0, [this, toLoad] { loadSecrets(toLoad); });
+ });
+ job->start();
+}
+
+std::optional
+Cache::secret(const std::string name_, bool internal)
+{
+ auto name = secretName(name_, internal);
+ std::unique_lock lock(secret_storage.mtx);
+ if (auto secret = secret_storage.secrets.find(name.toStdString());
+ secret != secret_storage.secrets.end())
+ return secret->second;
+ else
+ return std::nullopt;
+}
+
+void
+Cache::storeSecret(const std::string name_, const std::string secret, bool internal)
+{
+ auto name = secretName(name_, internal);
+ {
+ std::unique_lock lock(secret_storage.mtx);
+ secret_storage.secrets[name.toStdString()] = secret;
+ }
+
+ auto settings = UserSettings::instance();
+ auto job = new QKeychain::WritePasswordJob(QCoreApplication::applicationName());
+ job->setAutoDelete(true);
+ job->setInsecureFallback(true);
+ job->setSettings(UserSettings::instance()->qsettings());
+
+ job->setKey(name);
+
+ job->setTextData(QString::fromStdString(secret));
+
+ QObject::connect(
+ job,
+ &QKeychain::WritePasswordJob::finished,
+ this,
+ [name_, this](QKeychain::Job *job) {
+ if (job->error()) {
+ nhlog::db()->warn(
+ "Storing secret '{}' failed: {}", name_, job->errorString().toStdString());
+ fatalSecretError();
+ } else {
+ // if we emit the signal directly, qtkeychain breaks and won't execute new
+ // jobs. You can't start a job from the finish signal of a job.
+ QTimer::singleShot(0, [this, name_] { emit secretChanged(name_); });
+ nhlog::db()->info("Storing secret '{}' successful", name_);
+ }
+ },
+ Qt::ConnectionType::DirectConnection);
+ job->start();
+}
+
+void
+Cache::deleteSecret(const std::string name, bool internal)
+{
+ auto name_ = secretName(name, internal);
+ {
+ std::unique_lock lock(secret_storage.mtx);
+ secret_storage.secrets.erase(name_.toStdString());
+ }
+
+ auto settings = UserSettings::instance();
+ auto job = new QKeychain::DeletePasswordJob(QCoreApplication::applicationName());
+ job->setAutoDelete(true);
+ job->setInsecureFallback(true);
+ job->setSettings(UserSettings::instance()->qsettings());
+
+ job->setKey(name_);
+
+ job->connect(
+ job, &QKeychain::Job::finished, this, [this, name]() { emit secretChanged(name); });
+ job->start();
+}
+
+std::string
+Cache::pickleSecret()
+{
+ if (pickle_secret_.empty()) {
+ auto s = secret("pickle_secret", true);
+ if (!s) {
+ this->pickle_secret_ = mtx::client::utils::random_token(64, true);
+ storeSecret("pickle_secret", pickle_secret_, true);
+ } else {
+ this->pickle_secret_ = *s;
+ }
+ }
+
+ return pickle_secret_;
}
void
@@ -758,144 +929,6 @@ Cache::backupVersion()
}
}
-static void
-fatalSecretError()
-{
- QMessageBox::critical(
- ChatPage::instance(),
- QCoreApplication::translate("SecretStorage", "Failed to connect to secret storage"),
- QCoreApplication::translate(
- "SecretStorage",
- "Nheko could not connect to the secure storage to save encryption secrets to. This can "
- "have multiple reasons. Check if your D-Bus service is running and you have configured a "
- "service like KWallet, Gnome Keyring, KeePassXC or the equivalent for your platform. If "
- "you are having trouble, feel free to open an issue here: "
- "https://github.com/Nheko-Reborn/nheko/issues"));
-
- QCoreApplication::exit(1);
- exit(1);
-}
-
-void
-Cache::storeSecret(const std::string name, const std::string secret, bool internal)
-{
- auto settings = UserSettings::instance();
- auto job = new QKeychain::WritePasswordJob(QCoreApplication::applicationName());
- job->setAutoDelete(true);
- job->setInsecureFallback(true);
- job->setSettings(UserSettings::instance()->qsettings());
-
- job->setKey(
- (internal ? "nheko." : "matrix.") +
- QString(QCryptographicHash::hash(settings->profile().toUtf8(), QCryptographicHash::Sha256)
- .toBase64()) +
- "." + QString::fromStdString(name));
-
- job->setTextData(QString::fromStdString(secret));
-
- QObject::connect(
- job,
- &QKeychain::WritePasswordJob::finished,
- this,
- [name, this](QKeychain::Job *job) {
- if (job->error()) {
- nhlog::db()->warn(
- "Storing secret '{}' failed: {}", name, job->errorString().toStdString());
- fatalSecretError();
- } else {
- // if we emit the signal directly, qtkeychain breaks and won't execute new
- // jobs. You can't start a job from the finish signal of a job.
- QTimer::singleShot(100, [this, name] { emit secretChanged(name); });
- nhlog::db()->info("Storing secret '{}' successful", name);
- }
- },
- Qt::ConnectionType::DirectConnection);
- job->start();
-}
-
-void
-Cache::deleteSecret(const std::string name, bool internal)
-{
- auto settings = UserSettings::instance();
- QKeychain::DeletePasswordJob job(QCoreApplication::applicationName());
- job.setAutoDelete(false);
- job.setInsecureFallback(true);
- job.setSettings(UserSettings::instance()->qsettings());
-
- job.setKey(
- (internal ? "nheko." : "matrix.") +
- QString(QCryptographicHash::hash(settings->profile().toUtf8(), QCryptographicHash::Sha256)
- .toBase64()) +
- "." + QString::fromStdString(name));
-
- // FIXME(Nico): Nested event loops are dangerous. Some other slots may resume in the mean
- // time!
- QEventLoop loop;
- job.connect(&job, &QKeychain::Job::finished, &loop, &QEventLoop::quit);
- job.start();
- loop.exec();
-
- emit secretChanged(name);
-}
-
-std::optional
-Cache::secret(const std::string name, bool internal)
-{
- auto settings = UserSettings::instance();
- QKeychain::ReadPasswordJob job(QCoreApplication::applicationName());
- job.setAutoDelete(false);
- job.setInsecureFallback(true);
- job.setSettings(UserSettings::instance()->qsettings());
-
- job.setKey(
- (internal ? "nheko." : "matrix.") +
- QString(QCryptographicHash::hash(settings->profile().toUtf8(), QCryptographicHash::Sha256)
- .toBase64()) +
- "." + QString::fromStdString(name));
-
- // FIXME(Nico): Nested event loops are dangerous. Some other slots may resume in the mean
- // time!
- QEventLoop loop;
- job.connect(&job, &QKeychain::Job::finished, &loop, &QEventLoop::quit);
- job.start();
- loop.exec();
-
- const QString secret = job.textData();
- if (job.error()) {
- if (job.error() == QKeychain::Error::EntryNotFound)
- return std::nullopt;
- nhlog::db()->error("Restoring secret '{}' failed ({}): {}",
- name,
- job.error(),
- job.errorString().toStdString());
-
- fatalSecretError();
- return std::nullopt;
- }
- if (secret.isEmpty()) {
- nhlog::db()->debug("Restored empty secret '{}'.", name);
- return std::nullopt;
- }
-
- return secret.toStdString();
-}
-
-std::string
-Cache::pickleSecret()
-{
- if (pickle_secret_.empty()) {
- auto s = secret("pickle_secret", true);
- if (!s) {
- this->pickle_secret_ = mtx::client::utils::random_token(64, true);
- storeSecret("pickle_secret", pickle_secret_, true);
- } else {
- this->pickle_secret_ = *s;
- }
- }
-
- return pickle_secret_;
-}
-
void
Cache::removeInvite(lmdb::txn &txn, const std::string &room_id)
{
@@ -3182,9 +3215,11 @@ Cache::clearTimeline(const std::string &room_id)
break;
}
- do {
- lmdb::cursor_del(msgCursor);
- } while (msgCursor.get(indexVal, val, MDB_PREV));
+ if (!start) {
+ do {
+ lmdb::cursor_del(msgCursor);
+ } while (msgCursor.get(indexVal, val, MDB_PREV));
+ }
cursor.close();
msgCursor.close();
@@ -4066,8 +4101,9 @@ Cache::updateUserKeys(const std::string &sync_token, const mtx::responses::Query
(void)status;
emit verificationStatusChanged(user);
}
+ } else {
+ emit verificationStatusChanged(user_id);
}
- emit verificationStatusChanged(user_id);
}
}
@@ -4276,8 +4312,9 @@ Cache::markDeviceVerified(const std::string &user_id, const std::string &key)
(void)status;
emit verificationStatusChanged(user);
}
+ } else {
+ emit verificationStatusChanged(user_id);
}
- emit verificationStatusChanged(user_id);
}
void
diff --git a/src/CacheCryptoStructs.h b/src/CacheCryptoStructs.h
index b7461848..f56c8685 100644
--- a/src/CacheCryptoStructs.h
+++ b/src/CacheCryptoStructs.h
@@ -141,6 +141,14 @@ struct VerificationStorage
std::mutex verification_storage_mtx;
};
+//! In memory cache of verification status
+struct SecretsStorage
+{
+ //! secret name -> secret
+ std::map secrets;
+ std::mutex mtx;
+};
+
// this will store the keys of the user with whom a encrypted room is shared with
struct UserKeyCache
{
diff --git a/src/Cache_p.h b/src/Cache_p.h
index 651d73d7..a529bc37 100644
--- a/src/Cache_p.h
+++ b/src/Cache_p.h
@@ -304,6 +304,7 @@ public:
return get_skey(a).compare(get_skey(b));
}
+
signals:
void newReadReceipts(const QString &room_id, const std::vector &event_ids);
void roomReadStatus(const std::map &status);
@@ -312,8 +313,11 @@ signals:
void verificationStatusChanged(const std::string &userid);
void selfVerificationStatusChanged();
void secretChanged(const std::string name);
+ void databaseReady();
private:
+ void loadSecrets(std::vector> toLoad);
+
//! Save an invited room.
void saveInvite(lmdb::txn &txn,
lmdb::dbi &statesdb,
@@ -684,6 +688,7 @@ private:
std::string pickle_secret_;
VerificationStorage verification_storage;
+ SecretsStorage secret_storage;
bool databaseReady_ = false;
};
diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp
index d262387c..77a8edcf 100644
--- a/src/ChatPage.cpp
+++ b/src/ChatPage.cpp
@@ -316,6 +316,66 @@ ChatPage::bootstrap(QString userid, QString homeserver, QString token)
try {
cache::init(userid);
+ connect(cache::client(), &Cache::databaseReady, this, [this]() {
+ nhlog::db()->info("database ready");
+
+ const bool isInitialized = cache::isInitialized();
+ const auto cacheVersion = cache::formatVersion();
+
+ try {
+ if (!isInitialized) {
+ cache::setCurrentFormat();
+ } else {
+ if (cacheVersion == cache::CacheVersion::Current) {
+ loadStateFromCache();
+ return;
+ } else if (cacheVersion == cache::CacheVersion::Older) {
+ if (!cache::runMigrations()) {
+ QMessageBox::critical(
+ this,
+ tr("Cache migration failed!"),
+ tr("Migrating the cache to the current version failed. "
+ "This can have different reasons. Please open an "
+ "issue and try to use an older version in the mean "
+ "time. Alternatively you can try deleting the cache "
+ "manually."));
+ QCoreApplication::quit();
+ }
+ loadStateFromCache();
+ return;
+ } else if (cacheVersion == cache::CacheVersion::Newer) {
+ QMessageBox::critical(
+ this,
+ tr("Incompatible cache version"),
+ tr("The cache on your disk is newer than this version of Nheko "
+ "supports. Please update Nheko or clear your cache."));
+ QCoreApplication::quit();
+ return;
+ }
+ }
+
+ // It's the first time syncing with this device
+ // There isn't a saved olm account to restore.
+ nhlog::crypto()->info("creating new olm account");
+ olm::client()->create_new_account();
+ cache::saveOlmAccount(olm::client()->save(cache::client()->pickleSecret()));
+ } catch (const lmdb::error &e) {
+ nhlog::crypto()->critical("failed to save olm account {}", e.what());
+ emit dropToLoginPageCb(QString::fromStdString(e.what()));
+ return;
+ } catch (const mtx::crypto::olm_exception &e) {
+ nhlog::crypto()->critical("failed to create new olm account {}", e.what());
+ emit dropToLoginPageCb(QString::fromStdString(e.what()));
+ return;
+ }
+
+ getProfileInfo();
+ getBackupVersion();
+ tryInitialSync();
+ callManager_->refreshTurnServer();
+ emit MainWindow::instance()->reload();
+ });
+
connect(cache::client(),
&Cache::newReadReceipts,
view_manager_,
@@ -326,66 +386,10 @@ ChatPage::bootstrap(QString userid, QString homeserver, QString token)
¬ificationsManager,
&NotificationsManager::removeNotification);
- const bool isInitialized = cache::isInitialized();
- const auto cacheVersion = cache::formatVersion();
-
- callManager_->refreshTurnServer();
-
- if (!isInitialized) {
- cache::setCurrentFormat();
- } else {
- if (cacheVersion == cache::CacheVersion::Current) {
- loadStateFromCache();
- return;
- } else if (cacheVersion == cache::CacheVersion::Older) {
- if (!cache::runMigrations()) {
- QMessageBox::critical(this,
- tr("Cache migration failed!"),
- tr("Migrating the cache to the current version failed. "
- "This can have different reasons. Please open an "
- "issue and try to use an older version in the mean "
- "time. Alternatively you can try deleting the cache "
- "manually."));
- QCoreApplication::quit();
- }
- loadStateFromCache();
- return;
- } else if (cacheVersion == cache::CacheVersion::Newer) {
- QMessageBox::critical(
- this,
- tr("Incompatible cache version"),
- tr("The cache on your disk is newer than this version of Nheko "
- "supports. Please update or clear your cache."));
- QCoreApplication::quit();
- return;
- }
- }
-
} catch (const lmdb::error &e) {
nhlog::db()->critical("failure during boot: {}", e.what());
- cache::deleteData();
- nhlog::net()->info("falling back to initial sync");
+ emit dropToLoginPageCb(tr("Failed to open database, logging out!"));
}
-
- try {
- // It's the first time syncing with this device
- // There isn't a saved olm account to restore.
- nhlog::crypto()->info("creating new olm account");
- olm::client()->create_new_account();
- cache::saveOlmAccount(olm::client()->save(cache::client()->pickleSecret()));
- } catch (const lmdb::error &e) {
- nhlog::crypto()->critical("failed to save olm account {}", e.what());
- emit dropToLoginPageCb(QString::fromStdString(e.what()));
- return;
- } catch (const mtx::crypto::olm_exception &e) {
- nhlog::crypto()->critical("failed to create new olm account {}", e.what());
- emit dropToLoginPageCb(QString::fromStdString(e.what()));
- return;
- }
-
- getProfileInfo();
- getBackupVersion();
- tryInitialSync();
}
void
@@ -522,6 +526,8 @@ ChatPage::tryInitialSync()
for (const auto &entry : res.one_time_key_counts)
nhlog::net()->info("uploaded {} {} one-time keys", entry.second, entry.first);
+ cache::client()->markUserKeysOutOfDate({http::client()->user_id().to_string()});
+
startInitialSync();
});
}
@@ -1139,7 +1145,7 @@ ChatPage::decryptDownloadedSecrets(mtx::secret_storage::AesHmacSha2KeyDescriptio
if (!decrypted.empty()) {
cache::storeSecret(secretName, decrypted);
- if (deviceKeys &&
+ if (deviceKeys && deviceKeys->device_keys.count(http::client()->device_id()) &&
secretName == mtx::secret_storage::secrets::cross_signing_self_signing) {
auto myKey = deviceKeys->device_keys.at(http::client()->device_id());
if (myKey.user_id == http::client()->user_id().to_string() &&
diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp
index 340709a6..52567289 100644
--- a/src/UserSettingsPage.cpp
+++ b/src/UserSettingsPage.cpp
@@ -950,7 +950,7 @@ UserSettingsPage::UserSettingsPage(QSharedPointer settings, QWidge
tr("Change the appearance of user avatars in chats.\nOFF - square, ON - Circle."));
boxWrap(tr("Use identicons"),
useIdenticon_,
- tr("Display an identicon instead of a letter when a user has not set an avatar."));
+ tr("Display an identicon instead of a letter when no avatar is set."));
boxWrap(tr("Group's sidebar"),
groupViewToggle_,
tr("Show a column containing groups and tags next to the room list."));
@@ -1098,7 +1098,7 @@ UserSettingsPage::UserSettingsPage(QSharedPointer settings, QWidge
backupSecretCached,
tr("The key to decrypt online key backups. If it is cached, you can enable online "
"key backup to store encryption keys securely encrypted on the server."));
- updateSecretStatus();
+ // updateSecretStatus();
auto scrollArea_ = new QScrollArea{this};
scrollArea_->setFrameShape(QFrame::NoFrame);
diff --git a/src/encryption/SelfVerificationStatus.cpp b/src/encryption/SelfVerificationStatus.cpp
index ebb6b548..c4f4f196 100644
--- a/src/encryption/SelfVerificationStatus.cpp
+++ b/src/encryption/SelfVerificationStatus.cpp
@@ -4,6 +4,8 @@
#include "SelfVerificationStatus.h"
+#include
+
#include "Cache_p.h"
#include "ChatPage.h"
#include "Logging.h"
@@ -18,13 +20,13 @@
SelfVerificationStatus::SelfVerificationStatus(QObject *o)
: QObject(o)
{
- connect(MainWindow::instance(), &MainWindow::reload, this, [this] {
+ connect(ChatPage::instance(), &ChatPage::contentLoaded, this, [this] {
connect(cache::client(),
&Cache::selfVerificationStatusChanged,
this,
&SelfVerificationStatus::invalidate,
Qt::UniqueConnection);
- invalidate();
+ cache::client()->markUserKeysOutOfDate({http::client()->user_id().to_string()});
});
}
@@ -82,7 +84,7 @@ SelfVerificationStatus::setupCrosssigning(bool useSSSS, QString password, bool u
ssss = olm::client()->create_ssss_key(password.toStdString());
if (!ssss) {
nhlog::crypto()->critical("Failed to setup secure server side secret storage!");
- emit setupFailed(tr("Failed to create keys secure server side secret storage!"));
+ emit setupFailed(tr("Failed to create keys for secure server side secret storage!"));
return;
}
@@ -259,15 +261,29 @@ SelfVerificationStatus::invalidate()
using namespace mtx::secret_storage;
nhlog::db()->info("Invalidating self verification status");
+ if (!cache::isInitialized()) {
+ nhlog::db()->warn("SelfVerificationStatus: cache not initialized");
+ return;
+ }
+
this->hasSSSS_ = false;
emit hasSSSSChanged();
auto keys = cache::client()->userKeys(http::client()->user_id().to_string());
if (!keys || keys->device_keys.find(http::client()->device_id()) == keys->device_keys.end()) {
+ if (keys && (keys->seen_device_ids.count(http::client()->device_id()) ||
+ keys->seen_device_keys.count(olm::client()->identity_keys().curve25519))) {
+ emit ChatPage::instance()->dropToLoginPageCb(
+ tr("Identity key changed. This breaks E2EE, so logging out."));
+ return;
+ }
+
cache::client()->markUserKeysOutOfDate({http::client()->user_id().to_string()});
- cache::client()->query_keys(http::client()->user_id().to_string(),
- [](const UserKeyCache &, mtx::http::RequestErr) {});
- return;
+
+ QTimer::singleShot(1'000, [] {
+ cache::client()->query_keys(http::client()->user_id().to_string(),
+ [](const UserKeyCache &, mtx::http::RequestErr) {});
+ });
}
if (keys->master_keys.keys.empty()) {
diff --git a/src/main.cpp b/src/main.cpp
index f6373d2a..f2364c59 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -174,7 +174,7 @@ main(int argc, char *argv[])
SingleApplication::Mode::ExcludeAppVersion |
SingleApplication::Mode::SecondaryNotification,
100,
- userdata);
+ userdata == "default" ? "" : userdata);
QCommandLineParser parser;
parser.addHelpOption();
@@ -199,8 +199,9 @@ main(int argc, char *argv[])
// This check needs to happen _after_ process(), so that we actually print help for --help when
// Nheko is already running.
if (app.isSecondary()) {
- nhlog::ui()->info("Sending Matrix URL to main application: {}", matrixUri.toStdString());
- // open uri in main instance
+ std::cout << "Sending Matrix URL to main application: " << matrixUri.toStdString()
+ << std::endl;
+ // open uri in main instance
app.sendMessage(matrixUri.toUtf8());
return 0;
}
diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp
index a1f4c67f..7bb985f8 100644
--- a/src/timeline/EventStore.cpp
+++ b/src/timeline/EventStore.cpp
@@ -447,7 +447,8 @@ EventStore::edits(const std::string &event_id)
auto event_ids = cache::client()->relatedEvents(room_id_, event_id);
auto original_event = get(event_id, "", false, false);
- if (!original_event)
+ if (!original_event ||
+ std::holds_alternative>(*original_event))
return {};
auto original_sender = mtx::accessors::sender(*original_event);
diff --git a/src/timeline/EventStore.h b/src/timeline/EventStore.h
index 9b857dcf..1730f9fd 100644
--- a/src/timeline/EventStore.h
+++ b/src/timeline/EventStore.h
@@ -77,6 +77,7 @@ public:
mtx::events::collections::TimelineEvents *get(int idx, bool decrypt = true);
QVariantList reactions(const std::string &event_id);
+ std::vector edits(const std::string &event_id);
olm::DecryptionErrorCode decryptionError(std::string id);
void requestSession(const mtx::events::EncryptedEvent &ev,
bool manual);
@@ -120,7 +121,6 @@ public slots:
void enableKeyRequests(bool suppressKeyRequests_);
private:
- std::vector edits(const std::string &event_id);
olm::DecryptionResult *decryptEvent(
const IdIndex &idx,
const mtx::events::EncryptedEvent &e);
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 0e5ce510..aa7a68f3 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -344,6 +344,19 @@ TimelineModel::TimelineModel(TimelineViewManager *manager, QString room_id, QObj
[](const QString &msg) { emit ChatPage::instance()->showNotification(msg); },
Qt::QueuedConnection);
+ connect(this, &TimelineModel::dataAtIdChanged, this, [this](QString id) {
+ relatedEventCacheBuster++;
+
+ auto idx = idToIndex(id);
+ if (idx != -1) {
+ auto pos = index(idx);
+ nhlog::ui()->debug("data changed at {}", id.toStdString());
+ emit dataChanged(pos, pos);
+ } else {
+ nhlog::ui()->debug("id not found {}", id.toStdString());
+ }
+ });
+
connect(this,
&TimelineModel::newMessageToSend,
this,
@@ -1095,7 +1108,8 @@ TimelineModel::showReadReceipts(QString id)
void
TimelineModel::redactEvent(QString id)
{
- if (!id.isEmpty())
+ if (!id.isEmpty()) {
+ auto edits = events.edits(id.toStdString());
http::client()->redact_event(
room_id_.toStdString(),
id.toStdString(),
@@ -1106,8 +1120,26 @@ TimelineModel::redactEvent(QString id)
return;
}
- emit eventRedacted(id);
+ emit dataAtIdChanged(id);
});
+
+ // redact all edits to prevent leaks
+ for (const auto &e : edits) {
+ auto id_ = mtx::accessors::event_id(e);
+ http::client()->redact_event(
+ room_id_.toStdString(),
+ id_,
+ [this, id, id_](const mtx::responses::EventId &, mtx::http::RequestErr err) {
+ if (err) {
+ emit redactionFailed(tr("Message redaction failed: %1")
+ .arg(QString::fromStdString(err->matrix_error.error)));
+ return;
+ }
+
+ emit dataAtIdChanged(id);
+ });
+ }
+ }
}
int
diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index f16529e2..af067476 100644
--- a/src/timeline/TimelineModel.h
+++ b/src/timeline/TimelineModel.h
@@ -367,9 +367,9 @@ private slots:
void scrollTimerEvent();
signals:
+ void dataAtIdChanged(QString id);
void currentIndexChanged(int index);
void redactionFailed(QString id);
- void eventRedacted(QString id);
void mediaCached(QString mxcUrl, QString cacheUrl);
void newEncryptedImage(mtx::crypto::EncryptedFile encryptionInfo);
void typingUsersChanged(std::vector users);
diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp
index 94e6a0d7..84aa2c90 100644
--- a/src/timeline/TimelineViewManager.cpp
+++ b/src/timeline/TimelineViewManager.cpp
@@ -248,7 +248,12 @@ TimelineViewManager::TimelineViewManager(CallManager *callManager, ChatPage *par
qmlRegisterSingletonInstance("im.nheko", 1, 0, "VerificationManager", verificationManager_);
qmlRegisterSingletonType(
"im.nheko", 1, 0, "SelfVerificationStatus", [](QQmlEngine *, QJSEngine *) -> QObject * {
- return new SelfVerificationStatus();
+ auto ptr = new SelfVerificationStatus();
+ QObject::connect(ChatPage::instance(),
+ &ChatPage::initializeEmptyViews,
+ ptr,
+ &SelfVerificationStatus::invalidate);
+ return ptr;
});
qRegisterMetaType();
diff --git a/src/ui/UserProfile.cpp b/src/ui/UserProfile.cpp
index b5a16f43..72b1d8e6 100644
--- a/src/ui/UserProfile.cpp
+++ b/src/ui/UserProfile.cpp
@@ -188,6 +188,7 @@ UserProfile::fetchDeviceList(const QString &userID)
nhlog::net()->warn("failed to query device keys: {},{}",
mtx::errors::to_string(err->matrix_error.errcode),
static_cast(err->status_code));
+ return;
}
// Ensure local key cache is up to date
@@ -201,6 +202,7 @@ UserProfile::fetchDeviceList(const QString &userID)
nhlog::net()->warn("failed to query device keys: {},{}",
mtx::errors::to_string(err->matrix_error.errcode),
static_cast(err->status_code));
+ return;
}
emit verificationStatiChanged();