Merge master into reactions

pull/217/head
Joseph Donofry 5 years ago
commit 6d2789f4d5
No known key found for this signature in database
GPG Key ID: E8A1D78EF044B0CB
  1. 6
      CMakeLists.txt
  2. 26
      README.md
  3. 4
      io.github.NhekoReborn.Nheko.json
  4. BIN
      resources/icons/ui/unlock.png
  5. BIN
      resources/icons/ui/unlock@2x.png
  6. 144
      resources/langs/nheko_de.ts
  7. 128
      resources/langs/nheko_el.ts
  8. BIN
      resources/langs/nheko_en.qm
  9. 148
      resources/langs/nheko_en.ts
  10. 128
      resources/langs/nheko_fi.ts
  11. 129
      resources/langs/nheko_fr.ts
  12. 128
      resources/langs/nheko_ja.ts
  13. 128
      resources/langs/nheko_nl.ts
  14. 128
      resources/langs/nheko_pl.ts
  15. 128
      resources/langs/nheko_ru.ts
  16. 128
      resources/langs/nheko_zh_CN.ts
  17. 19
      resources/qml/EncryptionIndicator.qml
  18. 2
      resources/qml/ScrollHelper.qml
  19. 3
      resources/qml/TimelineRow.qml
  20. 2
      resources/qml/TimelineView.qml
  21. 7
      resources/qml/delegates/ImageMessage.qml
  22. 2
      resources/qml/delegates/MessageDelegate.qml
  23. 2
      resources/qml/delegates/NoticeMessage.qml
  24. 10
      resources/qml/delegates/PlayableMediaMessage.qml
  25. 1
      resources/qml/delegates/Reply.qml
  26. 2
      resources/qml/delegates/TextMessage.qml
  27. 2
      resources/res.qrc
  28. 2
      src/Cache.cpp
  29. 12
      src/ChatPage.cpp
  30. 127
      src/LoginPage.cpp
  31. 11
      src/LoginPage.h
  32. 11
      src/RegisterPage.cpp
  33. 53
      src/SSOHandler.cpp
  34. 24
      src/SSOHandler.h
  35. 11
      src/timeline/TimelineModel.cpp
  36. 1
      src/timeline/TimelineModel.h
  37. 5
      src/ui/TextField.cpp
  38. 5125
      third_party/cpp-httplib-0.5.12/httplib.h

@ -295,6 +295,7 @@ set(SRC_FILES
src/RegisterPage.cpp
src/RoomInfoListItem.cpp
src/RoomList.cpp
src/SSOHandler.cpp
src/SideBarActions.cpp
src/Splitter.cpp
src/TextInputWidget.cpp
@ -337,7 +338,7 @@ if(USE_BUNDLED_MTXCLIENT)
FetchContent_Declare(
MatrixClient
GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git
GIT_TAG 1893cd6171c40c250ca64d388c082789452340a8
GIT_TAG 71bd56b66cf634341ffef804f07d33f01fd57c25
)
FetchContent_MakeAvailable(MatrixClient)
else()
@ -496,6 +497,7 @@ qt5_wrap_cpp(MOC_HEADERS
src/RegisterPage.h
src/RoomInfoListItem.h
src/RoomList.h
src/SSOHandler.h
src/SideBarActions.h
src/Splitter.h
src/TextInputWidget.h
@ -559,7 +561,7 @@ elseif(WIN32)
else()
target_link_libraries (nheko PRIVATE Qt5::DBus)
endif()
target_include_directories(nheko PRIVATE src includes third_party/blurhash)
target_include_directories(nheko PRIVATE src includes third_party/blurhash third_party/cpp-httplib-0.5.12)
target_link_libraries(nheko PRIVATE
MatrixClient::MatrixClient

@ -58,7 +58,7 @@ can be found in the [Github releases](https://github.com/Nheko-Reborn/nheko/rele
pacaur -S nheko # nheko-git
```
#### Debian (10 and above)
#### Debian (10 and above) / Ubuntu (18.04 and above)
```bash
sudo apt install nheko
@ -179,22 +179,14 @@ sudo pacman -S qt5-base \
sudo emerge -a ">=dev-qt/qtgui-5.9.0" media-libs/fontconfig
```
##### Ubuntu 16.04
```bash
sudo add-apt-repository ppa:beineri/opt-qt592-xenial
sudo add-apt-repository ppa:george-edison55/cmake-3.x
sudo add-apt-repository ppa:ubuntu-toolchain-r-test
sudo apt-get update
sudo apt-get install -y g++-7 qt59base qt59svg qt59tools qt59multimedia cmake liblmdb-dev libsodium-dev
```
##### Ubuntu 19.10
##### Ubuntu 20.04
```bash
# Build requirements + qml modules needed at runtime (you may not need all of them, but the following seem to work according to reports):
sudo apt install g++-7 cmake liblmdb-dev libsodium-dev libssl-dev qt{base,declarative,tools,multimedia,script,quickcontrols2-}5-dev qml-module-qt{gstreamer,multimedia,quick-extras,-labs-settings,graphicaleffects,quick-controls2} libqt5svg5-dev
sudo apt install g++ cmake zlib1g-dev libssl-dev qt{base,declarative,tools,multimedia,quickcontrols2-}5-dev libqt5svg5-dev libboost-system-dev libboost-thread-dev libboost-iostreams-dev libolm-dev libsodium-dev liblmdb++-dev libcmark-dev nlohmann-json3-dev libspdlog-dev libgtest-dev qml-module-qt{gstreamer,multimedia,quick-extras,-labs-settings,graphicaleffects,quick-controls2}
```
This will install all dependencies, except for tweeny (use bundled tweeny)
and mtxclient (needs to be build separately).
##### Debian Buster (or higher probably)
@ -237,14 +229,14 @@ Make sure to install the `MSVC 2017 64-bit` toolset for at least Qt 5.10
We can now build nheko:
```bash
cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=Release
cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release
cmake --build build
```
To use bundled dependencies you can use hunter, i.e.:
```bash
cmake -H. -Bbuild -DHUNTER_ENABLED=ON -DBUILD_SHARED_LIBS=OFF -DUSE_BUNDLED_OPENSSL=OFF
cmake -S. -Bbuild -DHUNTER_ENABLED=ON -DBUILD_SHARED_LIBS=OFF -DUSE_BUNDLED_OPENSSL=OFF
cmake --build build --config Release
```
@ -263,7 +255,7 @@ You might need to pass `-DCMAKE_PREFIX_PATH` to cmake to point it at your qt5 in
e.g on macOS
```
cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=$(brew --prefix qt5)
cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=$(brew --prefix qt5)
cmake --build build
```
@ -283,7 +275,7 @@ Examples for the paths are:
You should also enable hunter by setting `HUNTER_ENABLED` to `ON` and `BUILD_SHARED_LIBS` to `OFF`.
Now right click into the root nheko source directory and choose `Open in Visual Studio`.
You can choose the build type Release and Debug in the top toolbar.
You can choose the build type Release and Debug in the top toolbar.
After a successful CMake generation you can select the `nheko.exe` as the run target.
Now choose `Build all` in the CMake menu or press `F7` to compile the executable.

@ -146,9 +146,9 @@
"name": "mtxclient",
"sources": [
{
"sha256": "a8c0239b7157fe8eadae8b06cd6c4e3531dcc61fc5a7f52dbb3c85106f70e3a5",
"sha256": "7055f1459a43a12f27f949564624f13cc593ac894e445e6de0e6563ad38ebc3e",
"type": "archive",
"url": "https://github.com/Nheko-Reborn/mtxclient/archive/1893cd6171c40c250ca64d388c082789452340a8.tar.gz"
"url": "https://github.com/Nheko-Reborn/mtxclient/archive/71bd56b66cf634341ffef804f07d33f01fd57c25.tar.gz"
}
]
},

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 741 B

@ -5,8 +5,8 @@
<name>Cache</name>
<message>
<location filename="../../src/Cache.cpp" line="+1341"/>
<source>You joined this room</source>
<translation type="unfinished"></translation>
<source>You joined this room.</source>
<translation>Du bist dem Raum beigetreten.</translation>
</message>
</context>
<context>
@ -18,12 +18,22 @@
</message>
<message>
<location line="+4"/>
<location line="+894"/>
<location line="+898"/>
<source>Invited user: %1</source>
<translation>Eingeladener Benutzer: %1</translation>
</message>
<message>
<location line="-5"/>
<location line="-463"/>
<source>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.</source>
<translation>Migrieren des Caches auf die aktuelle Version fehlgeschlagen. Das kann verschiedene Gründe als Ursache haben. Bitte lege einen Bugreport an und verwende in der Zwischenzeit eine ältere Version. Alternativ kannst du das Cache manuell entfernen.</translation>
</message>
<message>
<location line="+428"/>
<source>Room %1 created.</source>
<translation>Raum %1 erzeugt.</translation>
</message>
<message>
<location line="+30"/>
<source>Failed to invite %1 to %2: %3</source>
<translation>Einladung von %1 in Raum %2 fehlgeschlagen: %3</translation>
</message>
@ -58,29 +68,24 @@
<translation>Verbannung von %1 wurde aufgehoben.</translation>
</message>
<message>
<location line="-819"/>
<location line="-823"/>
<source>Failed to upload media. Please try again.</source>
<translation>Medienupload fehlgeschlagen. Bitte versuche es erneut.</translation>
</message>
<message>
<location line="+302"/>
<source>Cache migration failed!</source>
<translation type="unfinished"></translation>
<translation>Cache migration fehlgeschlagen!</translation>
</message>
<message>
<location line="+1"/>
<source>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</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+12"/>
<location line="+13"/>
<source>Incompatible cache version</source>
<translation type="unfinished"></translation>
<translation>Inkompatible Cacheversion</translation>
</message>
<message>
<location line="+1"/>
<source>The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.</source>
<translation type="unfinished"></translation>
<translation>Das Cache auf der Festplatte wurde mit einer neueren Nheko version angelegt. Bitte aktualisiere Nheko oder entferne das Cache.</translation>
</message>
<message>
<location line="+111"/>
@ -99,7 +104,7 @@
</message>
<message>
<location line="+51"/>
<location line="+215"/>
<location line="+219"/>
<source>Please try to login again: %1</source>
<translation>Bitte melde dich erneut an: %1</translation>
</message>
@ -124,12 +129,7 @@
<translation>Raum konnte nicht erstellt werden: %1</translation>
</message>
<message>
<location line="+5"/>
<source>Room %1 created</source>
<translation>Raum %1 wurde erstellt.</translation>
</message>
<message>
<location line="+11"/>
<location line="+16"/>
<source>Failed to leave room: %1</source>
<translation>Konnte den Raum nicht verlassen: %1</translation>
</message>
@ -238,10 +238,15 @@
<context>
<name>EncryptionIndicator</name>
<message>
<location filename="../qml/EncryptionIndicator.qml" line="+12"/>
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
<source>Encrypted</source>
<translation>Verschlüsselt</translation>
</message>
<message>
<location line="+2"/>
<source>This message is not encrypted!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InviteeItem</name>
@ -254,7 +259,7 @@
<context>
<name>LoginPage</name>
<message>
<location filename="../../src/LoginPage.cpp" line="+82"/>
<location filename="../../src/LoginPage.cpp" line="+89"/>
<source>Matrix ID</source>
<translation>Matrix-ID</translation>
</message>
@ -264,22 +269,46 @@
<translation>z.B. @joe:matrix.org</translation>
</message>
<message>
<location line="+15"/>
<location line="+2"/>
<source>Your login name. A mxid should start with @ followed by the user id. After the user id you need to include your server name after a :.
You can also put your homeserver address there, if your server doesn&apos;t support .well-known lookup.
Example: @user:server.my
If Nheko fails to discover your homeserver, it will show you a field to enter the server manually.</source>
<translation>Dein Anmeldename. Eine mxid sollte mit einem @ anfangen, gefolgt von dem Benutzernamen. Nach dem Benutzernamen sollten ein Doppelpunkt (:) under der Servername folgen.
Nach dem Doppelpunkt kann alternativ die Serveradresse (mit oder ohne Port) angegeben werden, wenn der Server nicht per .well-known auffindbar ist.
Beispiel: @benutzer:dein.server
Wenn Nheko deinen Server nicht automatisch erkennen kann, wird es dich nach dem Server fragen.</translation>
</message>
<message>
<location line="+21"/>
<source>Password</source>
<translation>Passwort</translation>
</message>
<message>
<location line="+4"/>
<location line="+5"/>
<source>Device name</source>
<translation>Gerätename</translation>
</message>
<message>
<location line="+19"/>
<location line="+2"/>
<source>A name for this device, which will be shown to others, when verifying your devices. If none is provided, a random string is used for privacy purposes.</source>
<translation>Ein Name für dieses Gerät. Dieser wird anderen angezeigt, wenn sie dieses Gerät verifizieren. Wenn kein Name angegeben wurde, wird automatisch ein zufälliger Name erzeugt, der keine Rückschlüsse auf deine Identität zulassen sollte.</translation>
</message>
<message>
<location line="+6"/>
<source>The address that can be used to contact you homeservers client API.
Example: https://server.my:8787</source>
<translation>Die Adresse unter der dein Heimserver erreichbar ist.
Beispiel: https://mein.server:8787</translation>
</message>
<message>
<location line="+16"/>
<location line="+185"/>
<source>LOGIN</source>
<translation>ANMELDEN</translation>
</message>
<message>
<location line="+85"/>
<location line="-100"/>
<source>Autodiscovery failed. Received malformed response.</source>
<translation>Automatische Erkennung fehlgeschlagen. Antwort war fehlerhaft.</translation>
</message>
@ -289,7 +318,7 @@
<translation>Automatische Erkennung fehlgeschlagen. Unbekannter Fehler bei Anfrage .well-known.</translation>
</message>
<message>
<location line="+24"/>
<location line="+25"/>
<source>The required endpoints were not found. Possibly not a Matrix server.</source>
<translation>Benötigte Ansprechpunkte nicht auffindbar. Möglicherweise kein Matrixserver.</translation>
</message>
@ -304,10 +333,20 @@
<translation>Ein unbekannter Fehler ist aufgetreten. Bitte Homeserverdomain prüfen.</translation>
</message>
<message>
<location line="+60"/>
<location line="+55"/>
<source>SSO LOGIN</source>
<translation>SSO ANMELDUNG</translation>
</message>
<message>
<location line="+25"/>
<source>Empty password</source>
<translation>Leeres Passwort</translation>
</message>
<message>
<location line="+52"/>
<source>SSO login failed</source>
<translation>SSO Anmeldung fehlgeschlagen</translation>
</message>
</context>
<context>
<name>MemberList</name>
@ -325,7 +364,7 @@
<context>
<name>MessageDelegate</name>
<message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+64"/>
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
<source>redacted</source>
<translation>gelöscht</translation>
</message>
@ -385,9 +424,19 @@
</message>
<message>
<location line="+3"/>
<source>The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /.</source>
<translation>Der Benutzername sollte nicht leer sein und nur aus a-z, 0-9, ., _, =, - und / bestehen.</translation>
</message>
<message>
<location line="+4"/>
<source>Password</source>
<translation>Passwort</translation>
</message>
<message>
<location line="+2"/>
<source>Please choose a secure password. The exact requirements for password strength may depend on your server.</source>
<translation>Bitte wähle ein sicheres Passwort. Die genauen Anforderungen bestimmt dein Server.</translation>
</message>
<message>
<location line="+4"/>
<source>Password confirmation</source>
@ -395,11 +444,16 @@
</message>
<message>
<location line="+4"/>
<source>Home Server</source>
<translation>Homeserver</translation>
<source>Homeserver</source>
<translation>Heimserver</translation>
</message>
<message>
<location line="+16"/>
<location line="+2"/>
<source>A server that allows registration. Since matrix is decentralized, you need to first find a server you can register on or host your own.</source>
<translation>Ein Server, der Registrierungen zulässt. Weil Matrix ein dezentralisiertes Protokoll ist, musst du erst einen Server ausfindig machen oder einen persönlichen Server aufsetzen.</translation>
</message>
<message>
<location line="+17"/>
<source>REGISTER</source>
<translation>REGISTRIEREN</translation>
</message>
@ -548,7 +602,7 @@
<context>
<name>TimelineModel</name>
<message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+844"/>
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
<source>-- Decryption Error (failed to communicate with DB) --</source>
<comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed when trying to lookup the session.</comment>
<translation>-- Entschlüsselungsfehler (Fehler bei Kommunikation mit Datenbank) --</translation>
@ -597,12 +651,7 @@
<translation>-- Verschlüsseltes Event (keine Schlüssel zur Entschlüsselung gefunden) --</translation>
</message>
<message>
<location line="-258"/>
<source>You joined this room</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+340"/>
<location line="+82"/>
<source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet.</comment>
<translation>-- Verschlüsseltes Event (Unbekannter Eventtyp) --</translation>
@ -722,7 +771,12 @@
<translation>%1 hat das Anklopfen zurückgezogen.</translation>
</message>
<message>
<location line="+2"/>
<location line="-1278"/>
<source>You joined this room.</source>
<translation>Du bist dem Raum beigetreten.</translation>
</message>
<message>
<location line="+1280"/>
<source>Rejected the knock from %1.</source>
<translation>Hat das Anklopfen von %1 abgewiesen.</translation>
</message>
@ -746,7 +800,7 @@
<context>
<name>TimelineRow</name>
<message>
<location filename="../qml/TimelineRow.qml" line="+83"/>
<location filename="../qml/TimelineRow.qml" line="+84"/>
<source>React</source>
<translation type="unfinished"></translation>
</message>
@ -809,7 +863,7 @@
<translation>Kein Raum geöffnet</translation>
</message>
<message>
<location line="+254"/>
<location line="+256"/>
<source>Close</source>
<translation>Schließen</translation>
</message>
@ -898,7 +952,7 @@
<message>
<location line="+1"/>
<source>Show buttons in timeline</source>
<translation type="unfinished"></translation>
<translation>Zeige Buttons in der Historie</translation>
</message>
<message>
<location line="+1"/>
@ -1116,7 +1170,7 @@
<message>
<location filename="../../src/dialogs/FallbackAuth.cpp" line="+30"/>
<source>Open Fallback in Browser</source>
<translation type="unfinished">Öffne Fallback im Browser</translation>
<translation>Öffne Fallback im Browser</translation>
</message>
<message>
<location line="+1"/>

@ -5,7 +5,7 @@
<name>Cache</name>
<message>
<location filename="../../src/Cache.cpp" line="+1341"/>
<source>You joined this room</source>
<source>You joined this room.</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -18,12 +18,22 @@
</message>
<message>
<location line="+4"/>
<location line="+894"/>
<location line="+898"/>
<source>Invited user: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-5"/>
<location line="-463"/>
<source>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.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+428"/>
<source>Room %1 created.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+30"/>
<source>Failed to invite %1 to %2: %3</source>
<translation type="unfinished"></translation>
</message>
@ -58,7 +68,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="-819"/>
<location line="-823"/>
<source>Failed to upload media. Please try again.</source>
<translation type="unfinished"></translation>
</message>
@ -68,12 +78,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>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</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+12"/>
<location line="+13"/>
<source>Incompatible cache version</source>
<translation type="unfinished"></translation>
</message>
@ -99,7 +104,7 @@
</message>
<message>
<location line="+51"/>
<location line="+215"/>
<location line="+219"/>
<source>Please try to login again: %1</source>
<translation type="unfinished"></translation>
</message>
@ -124,12 +129,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+5"/>
<source>Room %1 created</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+11"/>
<location line="+16"/>
<source>Failed to leave room: %1</source>
<translation type="unfinished"></translation>
</message>
@ -238,10 +238,15 @@
<context>
<name>EncryptionIndicator</name>
<message>
<location filename="../qml/EncryptionIndicator.qml" line="+12"/>
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
<source>Encrypted</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<source>This message is not encrypted!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InviteeItem</name>
@ -254,7 +259,7 @@
<context>
<name>LoginPage</name>
<message>
<location filename="../../src/LoginPage.cpp" line="+82"/>
<location filename="../../src/LoginPage.cpp" line="+89"/>
<source>Matrix ID</source>
<translation>Matrix ID</translation>
</message>
@ -264,22 +269,42 @@
<translation>π.χ @john:matrix.org</translation>
</message>
<message>
<location line="+15"/>
<location line="+2"/>
<source>Your login name. A mxid should start with @ followed by the user id. After the user id you need to include your server name after a :.
You can also put your homeserver address there, if your server doesn&apos;t support .well-known lookup.
Example: @user:server.my
If Nheko fails to discover your homeserver, it will show you a field to enter the server manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+21"/>
<source>Password</source>
<translation>Κωδικός</translation>
</message>
<message>
<location line="+4"/>
<location line="+5"/>
<source>Device name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+19"/>
<location line="+2"/>
<source>A name for this device, which will be shown to others, when verifying your devices. If none is provided, a random string is used for privacy purposes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+6"/>
<source>The address that can be used to contact you homeservers client API.
Example: https://server.my:8787</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<location line="+185"/>
<source>LOGIN</source>
<translation>ΕΙΣΟΔΟΣ</translation>
</message>
<message>
<location line="+85"/>
<location line="-100"/>
<source>Autodiscovery failed. Received malformed response.</source>
<translation type="unfinished"></translation>
</message>
@ -289,7 +314,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+24"/>
<location line="+25"/>
<source>The required endpoints were not found. Possibly not a Matrix server.</source>
<translation type="unfinished"></translation>
</message>
@ -304,10 +329,20 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+60"/>
<location line="+55"/>
<source>SSO LOGIN</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+25"/>
<source>Empty password</source>
<translation>Κενός κωδικός</translation>
</message>
<message>
<location line="+52"/>
<source>SSO login failed</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MemberList</name>
@ -325,7 +360,7 @@
<context>
<name>MessageDelegate</name>
<message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+64"/>
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
<source>redacted</source>
<translation type="unfinished"></translation>
</message>
@ -385,9 +420,19 @@
</message>
<message>
<location line="+3"/>
<source>The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+4"/>
<source>Password</source>
<translation>Κωδικός</translation>
</message>
<message>
<location line="+2"/>
<source>Please choose a secure password. The exact requirements for password strength may depend on your server.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+4"/>
<source>Password confirmation</source>
@ -395,11 +440,16 @@
</message>
<message>
<location line="+4"/>
<source>Home Server</source>
<translation>Διακομιστής</translation>
<source>Homeserver</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<location line="+2"/>
<source>A server that allows registration. Since matrix is decentralized, you need to first find a server you can register on or host your own.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+17"/>
<source>REGISTER</source>
<translation>ΕΓΓΡΑΦΗ</translation>
</message>
@ -548,7 +598,7 @@
<context>
<name>TimelineModel</name>
<message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+844"/>
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
<source>-- Decryption Error (failed to communicate with DB) --</source>
<comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed when trying to lookup the session.</comment>
<translation type="unfinished"></translation>
@ -597,12 +647,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="-258"/>
<source>You joined this room</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+340"/>
<location line="+82"/>
<source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet.</comment>
<translation type="unfinished"></translation>
@ -722,7 +767,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<location line="-1278"/>
<source>You joined this room.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1280"/>
<source>Rejected the knock from %1.</source>
<translation type="unfinished"></translation>
</message>
@ -746,7 +796,7 @@
<context>
<name>TimelineRow</name>
<message>
<location filename="../qml/TimelineRow.qml" line="+83"/>
<location filename="../qml/TimelineRow.qml" line="+84"/>
<source>React</source>
<translation type="unfinished"></translation>
</message>
@ -809,7 +859,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+254"/>
<location line="+256"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>

Binary file not shown.

@ -5,8 +5,8 @@
<name>Cache</name>
<message>
<location filename="../../src/Cache.cpp" line="+1341"/>
<source>You joined this room</source>
<translation type="unfinished"></translation>
<source>You joined this room.</source>
<translation>You joined this room.</translation>
</message>
</context>
<context>
@ -18,12 +18,22 @@
</message>
<message>
<location line="+4"/>
<location line="+894"/>
<location line="+898"/>
<source>Invited user: %1</source>
<translation>Invited user: %1</translation>
</message>
<message>
<location line="-5"/>
<location line="-463"/>
<source>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.</source>
<translation>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.</translation>
</message>
<message>
<location line="+428"/>
<source>Room %1 created.</source>
<translation>Room %1 created.</translation>
</message>
<message>
<location line="+30"/>
<source>Failed to invite %1 to %2: %3</source>
<translation>Failed to invite %1 to %2: %3</translation>
</message>
@ -58,29 +68,24 @@
<translation>Unbanned user: %1</translation>
</message>
<message>
<location line="-819"/>
<location line="-823"/>
<source>Failed to upload media. Please try again.</source>
<translation>Failed to upload media. Please try again.</translation>
</message>
<message>
<location line="+302"/>
<source>Cache migration failed!</source>
<translation type="unfinished"></translation>
<translation>Cache migration failed!</translation>
</message>
<message>
<location line="+1"/>
<source>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</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+12"/>
<location line="+13"/>
<source>Incompatible cache version</source>
<translation type="unfinished"></translation>
<translation>Incompatible cache version</translation>
</message>
<message>
<location line="+1"/>
<source>The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.</source>
<translation type="unfinished"></translation>
<translation>The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.</translation>
</message>
<message>
<location line="+111"/>
@ -99,7 +104,7 @@
</message>
<message>
<location line="+51"/>
<location line="+215"/>
<location line="+219"/>
<source>Please try to login again: %1</source>
<translation>Please try to login again: %1</translation>
</message>
@ -124,12 +129,7 @@
<translation>Room creation failed: %1</translation>
</message>
<message>
<location line="+5"/>
<source>Room %1 created</source>
<translation>Room %1 created.</translation>
</message>
<message>
<location line="+11"/>
<location line="+16"/>
<source>Failed to leave room: %1</source>
<translation>Failed to leave room: %1</translation>
</message>
@ -238,10 +238,15 @@
<context>
<name>EncryptionIndicator</name>
<message>
<location filename="../qml/EncryptionIndicator.qml" line="+12"/>
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
<source>Encrypted</source>
<translation>Encrypted</translation>
</message>
<message>
<location line="+2"/>
<source>This message is not encrypted!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InviteeItem</name>
@ -254,7 +259,7 @@
<context>
<name>LoginPage</name>
<message>
<location filename="../../src/LoginPage.cpp" line="+82"/>
<location filename="../../src/LoginPage.cpp" line="+89"/>
<source>Matrix ID</source>
<translation>Matrix ID</translation>
</message>
@ -264,22 +269,46 @@
<translation>e.g @joe:matrix.org</translation>
</message>
<message>
<location line="+15"/>
<location line="+2"/>
<source>Your login name. A mxid should start with @ followed by the user id. After the user id you need to include your server name after a :.
You can also put your homeserver address there, if your server doesn&apos;t support .well-known lookup.
Example: @user:server.my
If Nheko fails to discover your homeserver, it will show you a field to enter the server manually.</source>
<translation>Your login name. A mxid should start with @ followed by the user id. After the user id you need to include your server name after a :.
You can also put your homeserver address there, if your server doesn&apos;t support .well-known lookup.
Example: @user:server.my
If Nheko fails to discover your homeserver, it will show you a field to enter the server manually.</translation>
</message>
<message>
<location line="+21"/>
<source>Password</source>
<translation>Password</translation>
</message>
<message>
<location line="+4"/>
<location line="+5"/>
<source>Device name</source>
<translation>Device name</translation>
</message>
<message>
<location line="+19"/>
<location line="+2"/>
<source>A name for this device, which will be shown to others, when verifying your devices. If none is provided, a random string is used for privacy purposes.</source>
<translation>A name for this device, which will be shown to others, when verifying your devices. If none is provided, a random string is used for privacy purposes.</translation>
</message>
<message>
<location line="+6"/>
<source>The address that can be used to contact you homeservers client API.
Example: https://server.my:8787</source>
<translation>The address that can be used to contact you homeservers client API.
Example: https://server.my:8787</translation>
</message>
<message>
<location line="+16"/>
<location line="+185"/>
<source>LOGIN</source>
<translation>LOGIN</translation>
</message>
<message>
<location line="+85"/>
<location line="-100"/>
<source>Autodiscovery failed. Received malformed response.</source>
<translation>Autodiscovery failed. Received malformed response.</translation>
</message>
@ -289,7 +318,7 @@
<translation>Autodiscovery failed. Unknown error while requesting .well-known.</translation>
</message>
<message>
<location line="+24"/>
<location line="+25"/>
<source>The required endpoints were not found. Possibly not a Matrix server.</source>
<translation>The required endpoints were not found. Possibly not a Matrix server.</translation>
</message>
@ -304,10 +333,20 @@
<translation>An unknown error occured. Make sure the homeserver domain is valid.</translation>
</message>
<message>
<location line="+60"/>
<location line="+55"/>
<source>SSO LOGIN</source>
<translation>SSO LOGIN</translation>
</message>
<message>
<location line="+25"/>
<source>Empty password</source>
<translation>Empty password</translation>
</message>
<message>
<location line="+52"/>
<source>SSO login failed</source>
<translation>SSO login failed</translation>
</message>
</context>
<context>
<name>MemberList</name>
@ -325,7 +364,7 @@
<context>
<name>MessageDelegate</name>
<message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+64"/>
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
<source>redacted</source>
<translation>redacted</translation>
</message>
@ -385,9 +424,19 @@
</message>
<message>
<location line="+3"/>
<source>The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /.</source>
<translation>The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /.</translation>
</message>
<message>
<location line="+4"/>
<source>Password</source>
<translation>Password</translation>
</message>
<message>
<location line="+2"/>
<source>Please choose a secure password. The exact requirements for password strength may depend on your server.</source>
<translation>Please choose a secure password. The exact requirements for password strength may depend on your server.</translation>
</message>
<message>
<location line="+4"/>
<source>Password confirmation</source>
@ -395,11 +444,16 @@
</message>
<message>
<location line="+4"/>
<source>Home Server</source>
<translation>Home Server</translation>
<source>Homeserver</source>
<translation>Homeserver</translation>
</message>
<message>
<location line="+16"/>
<location line="+2"/>
<source>A server that allows registration. Since matrix is decentralized, you need to first find a server you can register on or host your own.</source>
<translation>A server that allows registration. Since matrix is decentralized, you need to first find a server you can register on or host your own.</translation>
</message>
<message>
<location line="+17"/>
<source>REGISTER</source>
<translation>REGISTER</translation>
</message>
@ -548,7 +602,7 @@
<context>
<name>TimelineModel</name>
<message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+844"/>
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
<source>-- Decryption Error (failed to communicate with DB) --</source>
<comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed when trying to lookup the session.</comment>
<translation>-- Decryption Error (failed to communicate with DB) --</translation>
@ -597,12 +651,7 @@
<translation>-- Encrypted Event (No keys found for decryption) --</translation>
</message>
<message>
<location line="-258"/>
<source>You joined this room</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+340"/>
<location line="+82"/>
<source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet.</comment>
<translation>-- Encrypted Event (Unknown event type) --</translation>
@ -612,8 +661,8 @@
<source>%1 and %2 are typing.</source>
<comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
<translation>
<numerusform>%1%2 is typing</numerusform>
<numerusform>%1 and %2 are typing</numerusform>
<numerusform>%1%2 is typing.</numerusform>
<numerusform>%1 and %2 are typing.</numerusform>
</translation>
</message>
<message>
@ -722,7 +771,12 @@
<translation>%1 redacted their knock.</translation>
</message>
<message>
<location line="+2"/>
<location line="-1278"/>
<source>You joined this room.</source>
<translation>You joined this room.</translation>
</message>
<message>
<location line="+1280"/>
<source>Rejected the knock from %1.</source>
<translation>Rejected the knock from %1.</translation>
</message>
@ -746,7 +800,7 @@
<context>
<name>TimelineRow</name>
<message>
<location filename="../qml/TimelineRow.qml" line="+83"/>
<location filename="../qml/TimelineRow.qml" line="+84"/>
<source>React</source>
<translation type="unfinished"></translation>
</message>
@ -791,7 +845,7 @@
<message>
<location line="+6"/>
<source>View decrypted raw message</source>
<translation type="unfinished"></translation>
<translation>View decrypted raw message</translation>
</message>
<message>
<location line="+4"/>
@ -809,7 +863,7 @@
<translation>No room open</translation>
</message>
<message>
<location line="+254"/>
<location line="+256"/>
<source>Close</source>
<translation>Close</translation>
</message>
@ -893,7 +947,7 @@
<message>
<location line="+2"/>
<source>Decrypt messages in sidebar</source>
<translation type="unfinished"></translation>
<translation>Decrypt messages in sidebar</translation>
</message>
<message>
<location line="+1"/>

@ -5,7 +5,7 @@
<name>Cache</name>
<message>
<location filename="../../src/Cache.cpp" line="+1341"/>
<source>You joined this room</source>
<source>You joined this room.</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -18,12 +18,22 @@
</message>
<message>
<location line="+4"/>
<location line="+894"/>
<location line="+898"/>
<source>Invited user: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-5"/>
<location line="-463"/>
<source>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.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+428"/>
<source>Room %1 created.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+30"/>
<source>Failed to invite %1 to %2: %3</source>
<translation type="unfinished"></translation>
</message>
@ -58,7 +68,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="-819"/>
<location line="-823"/>
<source>Failed to upload media. Please try again.</source>
<translation type="unfinished"></translation>
</message>
@ -68,12 +78,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>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</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+12"/>
<location line="+13"/>
<source>Incompatible cache version</source>
<translation type="unfinished"></translation>
</message>
@ -99,7 +104,7 @@
</message>
<message>
<location line="+51"/>
<location line="+215"/>
<location line="+219"/>
<source>Please try to login again: %1</source>
<translation>Ole hyvä ja yritä kirjautua sisään uudelleen: %1</translation>
</message>
@ -124,12 +129,7 @@
<translation>Huoneen luominen epäonnistui: %1</translation>
</message>
<message>
<location line="+5"/>
<source>Room %1 created</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+11"/>
<location line="+16"/>
<source>Failed to leave room: %1</source>
<translation>Huoneesta poistuminen epäonnistui: %1</translation>
</message>
@ -238,10 +238,15 @@
<context>
<name>EncryptionIndicator</name>
<message>
<location filename="../qml/EncryptionIndicator.qml" line="+12"/>
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
<source>Encrypted</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<source>This message is not encrypted!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InviteeItem</name>
@ -254,7 +259,7 @@
<context>
<name>LoginPage</name>
<message>
<location filename="../../src/LoginPage.cpp" line="+82"/>
<location filename="../../src/LoginPage.cpp" line="+89"/>
<source>Matrix ID</source>
<translation>Matrix-tunnus</translation>
</message>
@ -264,22 +269,42 @@
<translation>esim. @joe:matrix.org</translation>
</message>
<message>
<location line="+15"/>
<location line="+2"/>
<source>Your login name. A mxid should start with @ followed by the user id. After the user id you need to include your server name after a :.
You can also put your homeserver address there, if your server doesn&apos;t support .well-known lookup.
Example: @user:server.my
If Nheko fails to discover your homeserver, it will show you a field to enter the server manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+21"/>
<source>Password</source>
<translation>Salasana</translation>
</message>
<message>
<location line="+4"/>
<location line="+5"/>
<source>Device name</source>
<translation>Laitteen nimi</translation>
</message>
<message>
<location line="+19"/>
<location line="+2"/>
<source>A name for this device, which will be shown to others, when verifying your devices. If none is provided, a random string is used for privacy purposes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+6"/>
<source>The address that can be used to contact you homeservers client API.
Example: https://server.my:8787</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<location line="+185"/>
<source>LOGIN</source>
<translation>KIRJAUDU</translation>
</message>
<message>
<location line="+85"/>
<location line="-100"/>
<source>Autodiscovery failed. Received malformed response.</source>
<translation>Palvelimen tietojen hakeminen epäonnistui: virheellinen vastaus.</translation>
</message>
@ -289,7 +314,7 @@
<translation>Palvelimen tietojen hakeminen epäonnistui: tuntematon virhe hakiessa .well-known -tiedostoa.</translation>
</message>
<message>
<location line="+24"/>
<location line="+25"/>
<source>The required endpoints were not found. Possibly not a Matrix server.</source>
<translation>Vaadittuja päätepisteitä ei löydetty. Mahdollisesti ei Matrix-palvelin.</translation>
</message>
@ -304,10 +329,20 @@
<translation>Tapahtui tuntematon virhe. Varmista, että kotipalvelimen osoite on pätevä.</translation>
</message>
<message>
<location line="+60"/>
<location line="+55"/>
<source>SSO LOGIN</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+25"/>
<source>Empty password</source>
<translation>Tyhjä salasana</translation>
</message>
<message>
<location line="+52"/>
<source>SSO login failed</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MemberList</name>
@ -325,7 +360,7 @@
<context>
<name>MessageDelegate</name>
<message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+64"/>
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
<source>redacted</source>
<translation type="unfinished"></translation>
</message>
@ -385,9 +420,19 @@
</message>
<message>
<location line="+3"/>
<source>The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+4"/>
<source>Password</source>
<translation>Salasana</translation>
</message>
<message>
<location line="+2"/>
<source>Please choose a secure password. The exact requirements for password strength may depend on your server.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+4"/>
<source>Password confirmation</source>
@ -395,11 +440,16 @@
</message>
<message>
<location line="+4"/>
<source>Home Server</source>
<translation>Kotipalvelin</translation>
<source>Homeserver</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<location line="+2"/>
<source>A server that allows registration. Since matrix is decentralized, you need to first find a server you can register on or host your own.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+17"/>
<source>REGISTER</source>
<translation>REKISTERÖIDY</translation>
</message>
@ -548,7 +598,7 @@
<context>
<name>TimelineModel</name>
<message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+844"/>
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
<source>-- Decryption Error (failed to communicate with DB) --</source>
<comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed when trying to lookup the session.</comment>
<translation type="unfinished">-- Virhe purkaessa salausta (tietokannan kanssa kommunikointi epäonnistui) --</translation>
@ -597,12 +647,7 @@
<translation type="unfinished">-- Salattu viesti (salauksen purkuavaimia ei löydetty) --</translation>
</message>
<message>
<location line="-258"/>
<source>You joined this room</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+340"/>
<location line="+82"/>
<source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet.</comment>
<translation type="unfinished">-- Salattu viesti (tuntematon viestityyppi) --</translation>
@ -722,7 +767,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<location line="-1278"/>
<source>You joined this room.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1280"/>
<source>Rejected the knock from %1.</source>
<translation type="unfinished"></translation>
</message>
@ -746,7 +796,7 @@
<context>
<name>TimelineRow</name>
<message>
<location filename="../qml/TimelineRow.qml" line="+83"/>
<location filename="../qml/TimelineRow.qml" line="+84"/>
<source>React</source>
<translation type="unfinished"></translation>
</message>
@ -809,7 +859,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+254"/>
<location line="+256"/>
<source>Close</source>
<translation type="unfinished">Sulje</translation>
</message>

@ -5,7 +5,7 @@
<name>Cache</name>
<message>
<location filename="../../src/Cache.cpp" line="+1341"/>
<source>You joined this room</source>
<source>You joined this room.</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -18,12 +18,22 @@
</message>
<message>
<location line="+4"/>
<location line="+894"/>
<location line="+898"/>
<source>Invited user: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-5"/>
<location line="-463"/>
<source>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.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+428"/>
<source>Room %1 created.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+30"/>
<source>Failed to invite %1 to %2: %3</source>
<translation type="unfinished"></translation>
</message>
@ -58,7 +68,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="-819"/>
<location line="-823"/>
<source>Failed to upload media. Please try again.</source>
<translation type="unfinished"></translation>
</message>
@ -68,12 +78,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>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</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+12"/>
<location line="+13"/>
<source>Incompatible cache version</source>
<translation type="unfinished"></translation>
</message>
@ -99,7 +104,7 @@
</message>
<message>
<location line="+51"/>
<location line="+215"/>
<location line="+219"/>
<source>Please try to login again: %1</source>
<translation type="unfinished"></translation>
</message>
@ -124,12 +129,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+5"/>
<source>Room %1 created</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+11"/>
<location line="+16"/>
<source>Failed to leave room: %1</source>
<translation type="unfinished"></translation>
</message>
@ -238,10 +238,15 @@
<context>
<name>EncryptionIndicator</name>
<message>
<location filename="../qml/EncryptionIndicator.qml" line="+12"/>
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
<source>Encrypted</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<source>This message is not encrypted!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InviteeItem</name>
@ -254,7 +259,7 @@
<context>
<name>LoginPage</name>
<message>
<location filename="../../src/LoginPage.cpp" line="+82"/>
<location filename="../../src/LoginPage.cpp" line="+89"/>
<source>Matrix ID</source>
<translation>Identifiant Matrix</translation>
</message>
@ -264,22 +269,42 @@
<translation>ex : @joe:matrix.org</translation>
</message>
<message>
<location line="+15"/>
<location line="+2"/>
<source>Your login name. A mxid should start with @ followed by the user id. After the user id you need to include your server name after a :.
You can also put your homeserver address there, if your server doesn&apos;t support .well-known lookup.
Example: @user:server.my
If Nheko fails to discover your homeserver, it will show you a field to enter the server manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+21"/>
<source>Password</source>
<translation>Mot de passe</translation>
</message>
<message>
<location line="+4"/>
<location line="+5"/>
<source>Device name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+19"/>
<location line="+2"/>
<source>A name for this device, which will be shown to others, when verifying your devices. If none is provided, a random string is used for privacy purposes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+6"/>
<source>The address that can be used to contact you homeservers client API.
Example: https://server.my:8787</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<location line="+185"/>
<source>LOGIN</source>
<translation>CONNEXION</translation>
</message>
<message>
<location line="+85"/>
<location line="-100"/>
<source>Autodiscovery failed. Received malformed response.</source>
<translation type="unfinished"></translation>
</message>
@ -289,7 +314,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+24"/>
<location line="+25"/>
<source>The required endpoints were not found. Possibly not a Matrix server.</source>
<translation type="unfinished"></translation>
</message>
@ -304,10 +329,20 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+60"/>
<location line="+55"/>
<source>SSO LOGIN</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+25"/>
<source>Empty password</source>
<translation>Mot de passe vide</translation>
</message>
<message>
<location line="+52"/>
<source>SSO login failed</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MemberList</name>
@ -325,7 +360,7 @@
<context>
<name>MessageDelegate</name>
<message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+64"/>
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
<source>redacted</source>
<translation type="unfinished"></translation>
</message>
@ -385,9 +420,19 @@
</message>
<message>
<location line="+3"/>
<source>The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+4"/>
<source>Password</source>
<translation>Mot de passe</translation>
</message>
<message>
<location line="+2"/>
<source>Please choose a secure password. The exact requirements for password strength may depend on your server.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+4"/>
<source>Password confirmation</source>
@ -395,12 +440,16 @@
</message>
<message>
<location line="+4"/>
<source>Home Server</source>
<translatorcomment>À affiner...</translatorcomment>
<translation>Serveur Matrix</translation>
<source>Homeserver</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<location line="+2"/>
<source>A server that allows registration. Since matrix is decentralized, you need to first find a server you can register on or host your own.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+17"/>
<source>REGISTER</source>
<translation>S&apos;ENREGISTRER</translation>
</message>
@ -549,7 +598,7 @@
<context>
<name>TimelineModel</name>
<message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+844"/>
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
<source>-- Decryption Error (failed to communicate with DB) --</source>
<comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed when trying to lookup the session.</comment>
<translation type="unfinished"></translation>
@ -598,12 +647,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="-258"/>
<source>You joined this room</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+340"/>
<location line="+82"/>
<source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet.</comment>
<translation type="unfinished"></translation>
@ -723,7 +767,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<location line="-1278"/>
<source>You joined this room.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1280"/>
<source>Rejected the knock from %1.</source>
<translation type="unfinished"></translation>
</message>
@ -747,7 +796,7 @@
<context>
<name>TimelineRow</name>
<message>
<location filename="../qml/TimelineRow.qml" line="+83"/>
<location filename="../qml/TimelineRow.qml" line="+84"/>
<source>React</source>
<translation type="unfinished"></translation>
</message>
@ -810,7 +859,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+254"/>
<location line="+256"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>

@ -5,7 +5,7 @@
<name>Cache</name>
<message>
<location filename="../../src/Cache.cpp" line="+1341"/>
<source>You joined this room</source>
<source>You joined this room.</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -18,12 +18,22 @@
</message>
<message>
<location line="+4"/>
<location line="+894"/>
<location line="+898"/>
<source>Invited user: %1</source>
<translation>: %1</translation>
</message>
<message>
<location line="-5"/>
<location line="-463"/>
<source>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.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+428"/>
<source>Room %1 created.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+30"/>
<source>Failed to invite %1 to %2: %3</source>
<translation>%2%1: %3</translation>
</message>
@ -58,7 +68,7 @@
<translation>: %1</translation>
</message>
<message>
<location line="-819"/>
<location line="-823"/>
<source>Failed to upload media. Please try again.</source>
<translation></translation>
</message>
@ -68,12 +78,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>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</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+12"/>
<location line="+13"/>
<source>Incompatible cache version</source>
<translation type="unfinished"></translation>
</message>
@ -99,7 +104,7 @@
</message>
<message>
<location line="+51"/>
<location line="+215"/>
<location line="+219"/>
<source>Please try to login again: %1</source>
<translation>: %1</translation>
</message>
@ -124,12 +129,7 @@
<translation>: %1</translation>
</message>
<message>
<location line="+5"/>
<source>Room %1 created</source>
<translation> %1 </translation>
</message>
<message>
<location line="+11"/>
<location line="+16"/>
<source>Failed to leave room: %1</source>
<translation>: %1</translation>
</message>
@ -238,10 +238,15 @@
<context>
<name>EncryptionIndicator</name>
<message>
<location filename="../qml/EncryptionIndicator.qml" line="+12"/>
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
<source>Encrypted</source>
<translation></translation>
</message>
<message>
<location line="+2"/>
<source>This message is not encrypted!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InviteeItem</name>
@ -254,7 +259,7 @@
<context>
<name>LoginPage</name>
<message>
<location filename="../../src/LoginPage.cpp" line="+82"/>
<location filename="../../src/LoginPage.cpp" line="+89"/>
<source>Matrix ID</source>
<translation>Matrix ID</translation>
</message>
@ -264,22 +269,42 @@
<translation> @joe:matrix.org</translation>
</message>
<message>
<location line="+15"/>
<location line="+2"/>
<source>Your login name. A mxid should start with @ followed by the user id. After the user id you need to include your server name after a :.
You can also put your homeserver address there, if your server doesn&apos;t support .well-known lookup.
Example: @user:server.my
If Nheko fails to discover your homeserver, it will show you a field to enter the server manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+21"/>
<source>Password</source>
<translation></translation>
</message>
<message>
<location line="+4"/>
<location line="+5"/>
<source>Device name</source>
<translation></translation>
</message>
<message>
<location line="+19"/>
<location line="+2"/>
<source>A name for this device, which will be shown to others, when verifying your devices. If none is provided, a random string is used for privacy purposes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+6"/>
<source>The address that can be used to contact you homeservers client API.
Example: https://server.my:8787</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<location line="+185"/>
<source>LOGIN</source>
<translation></translation>
</message>
<message>
<location line="+85"/>
<location line="-100"/>
<source>Autodiscovery failed. Received malformed response.</source>
<translation></translation>
</message>
@ -289,7 +314,7 @@
<translation>.well-known要求時の不明なエラー</translation>
</message>
<message>
<location line="+24"/>
<location line="+25"/>
<source>The required endpoints were not found. Possibly not a Matrix server.</source>
<translation>Matrixサーバーではないかもしれません</translation>
</message>
@ -304,10 +329,20 @@
<translation></translation>
</message>
<message>
<location line="+60"/>
<location line="+55"/>
<source>SSO LOGIN</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+25"/>
<source>Empty password</source>
<translation></translation>
</message>
<message>
<location line="+52"/>
<source>SSO login failed</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MemberList</name>
@ -325,7 +360,7 @@
<context>
<name>MessageDelegate</name>
<message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+64"/>
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
<source>redacted</source>
<translation></translation>
</message>
@ -385,9 +420,19 @@
</message>
<message>
<location line="+3"/>
<source>The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+4"/>
<source>Password</source>
<translation></translation>
</message>
<message>
<location line="+2"/>
<source>Please choose a secure password. The exact requirements for password strength may depend on your server.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+4"/>
<source>Password confirmation</source>
@ -395,11 +440,16 @@
</message>
<message>
<location line="+4"/>
<source>Home Server</source>
<translation></translation>
<source>Homeserver</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<location line="+2"/>
<source>A server that allows registration. Since matrix is decentralized, you need to first find a server you can register on or host your own.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+17"/>
<source>REGISTER</source>
<translation></translation>
</message>
@ -548,7 +598,7 @@
<context>
<name>TimelineModel</name>
<message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+844"/>
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
<source>-- Decryption Error (failed to communicate with DB) --</source>
<comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed when trying to lookup the session.</comment>
<translation>-- () --</translation>
@ -597,12 +647,7 @@
<translation type="unfinished">-- () --</translation>
</message>
<message>
<location line="-258"/>
<source>You joined this room</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+340"/>
<location line="+82"/>
<source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet.</comment>
<translation type="unfinished">-- () --</translation>
@ -721,7 +766,12 @@
<translation>%1</translation>
</message>
<message>
<location line="+2"/>
<location line="-1278"/>
<source>You joined this room.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1280"/>
<source>Rejected the knock from %1.</source>
<translation>%1</translation>
</message>
@ -745,7 +795,7 @@
<context>
<name>TimelineRow</name>
<message>
<location filename="../qml/TimelineRow.qml" line="+83"/>
<location filename="../qml/TimelineRow.qml" line="+84"/>
<source>React</source>
<translation type="unfinished"></translation>
</message>
@ -808,7 +858,7 @@
<translation></translation>
</message>
<message>
<location line="+254"/>
<location line="+256"/>
<source>Close</source>
<translation></translation>
</message>

@ -5,7 +5,7 @@
<name>Cache</name>
<message>
<location filename="../../src/Cache.cpp" line="+1341"/>
<source>You joined this room</source>
<source>You joined this room.</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -18,12 +18,22 @@
</message>
<message>
<location line="+4"/>
<location line="+894"/>
<location line="+898"/>
<source>Invited user: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-5"/>
<location line="-463"/>
<source>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.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+428"/>
<source>Room %1 created.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+30"/>
<source>Failed to invite %1 to %2: %3</source>
<translation type="unfinished"></translation>
</message>
@ -58,7 +68,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="-819"/>
<location line="-823"/>
<source>Failed to upload media. Please try again.</source>
<translation type="unfinished"></translation>
</message>
@ -68,12 +78,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>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</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+12"/>
<location line="+13"/>
<source>Incompatible cache version</source>
<translation type="unfinished"></translation>
</message>
@ -99,7 +104,7 @@
</message>
<message>
<location line="+51"/>
<location line="+215"/>
<location line="+219"/>
<source>Please try to login again: %1</source>
<translation type="unfinished"></translation>
</message>
@ -124,12 +129,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+5"/>
<source>Room %1 created</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+11"/>
<location line="+16"/>
<source>Failed to leave room: %1</source>
<translation type="unfinished"></translation>
</message>
@ -238,10 +238,15 @@
<context>
<name>EncryptionIndicator</name>
<message>
<location filename="../qml/EncryptionIndicator.qml" line="+12"/>
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
<source>Encrypted</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<source>This message is not encrypted!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InviteeItem</name>
@ -254,7 +259,7 @@
<context>
<name>LoginPage</name>
<message>
<location filename="../../src/LoginPage.cpp" line="+82"/>
<location filename="../../src/LoginPage.cpp" line="+89"/>
<source>Matrix ID</source>
<translation>Matrix-id</translation>
</message>
@ -264,22 +269,42 @@
<translation>b.v @jan:matrix.org&lt;</translation>
</message>
<message>
<location line="+15"/>
<location line="+2"/>
<source>Your login name. A mxid should start with @ followed by the user id. After the user id you need to include your server name after a :.
You can also put your homeserver address there, if your server doesn&apos;t support .well-known lookup.
Example: @user:server.my
If Nheko fails to discover your homeserver, it will show you a field to enter the server manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+21"/>
<source>Password</source>
<translation>Wachtwoord</translation>
</message>
<message>
<location line="+4"/>
<location line="+5"/>
<source>Device name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+19"/>
<location line="+2"/>
<source>A name for this device, which will be shown to others, when verifying your devices. If none is provided, a random string is used for privacy purposes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+6"/>
<source>The address that can be used to contact you homeservers client API.
Example: https://server.my:8787</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<location line="+185"/>
<source>LOGIN</source>
<translation>INLOGGEN</translation>
</message>
<message>
<location line="+85"/>
<location line="-100"/>
<source>Autodiscovery failed. Received malformed response.</source>
<translation type="unfinished"></translation>
</message>
@ -289,7 +314,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+24"/>
<location line="+25"/>
<source>The required endpoints were not found. Possibly not a Matrix server.</source>
<translation type="unfinished"></translation>
</message>
@ -304,10 +329,20 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+60"/>
<location line="+55"/>
<source>SSO LOGIN</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+25"/>
<source>Empty password</source>
<translation>Leeg wachtwoord</translation>
</message>
<message>
<location line="+52"/>
<source>SSO login failed</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MemberList</name>
@ -325,7 +360,7 @@
<context>
<name>MessageDelegate</name>
<message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+64"/>
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
<source>redacted</source>
<translation type="unfinished"></translation>
</message>
@ -385,9 +420,19 @@
</message>
<message>
<location line="+3"/>
<source>The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+4"/>
<source>Password</source>
<translation>Wachtwoord</translation>
</message>
<message>
<location line="+2"/>
<source>Please choose a secure password. The exact requirements for password strength may depend on your server.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+4"/>
<source>Password confirmation</source>
@ -395,11 +440,16 @@
</message>
<message>
<location line="+4"/>
<source>Home Server</source>
<translation>Thuisserver</translation>
<source>Homeserver</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<location line="+2"/>
<source>A server that allows registration. Since matrix is decentralized, you need to first find a server you can register on or host your own.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+17"/>
<source>REGISTER</source>
<translation>REGISTREREN</translation>
</message>
@ -548,7 +598,7 @@
<context>
<name>TimelineModel</name>
<message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+844"/>
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
<source>-- Decryption Error (failed to communicate with DB) --</source>
<comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed when trying to lookup the session.</comment>
<translation type="unfinished"></translation>
@ -597,12 +647,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="-258"/>
<source>You joined this room</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+340"/>
<location line="+82"/>
<source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet.</comment>
<translation type="unfinished"></translation>
@ -722,7 +767,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<location line="-1278"/>
<source>You joined this room.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1280"/>
<source>Rejected the knock from %1.</source>
<translation type="unfinished"></translation>
</message>
@ -746,7 +796,7 @@
<context>
<name>TimelineRow</name>
<message>
<location filename="../qml/TimelineRow.qml" line="+83"/>
<location filename="../qml/TimelineRow.qml" line="+84"/>
<source>React</source>
<translation type="unfinished"></translation>
</message>
@ -809,7 +859,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+254"/>
<location line="+256"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>

@ -5,7 +5,7 @@
<name>Cache</name>
<message>
<location filename="../../src/Cache.cpp" line="+1341"/>
<source>You joined this room</source>
<source>You joined this room.</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -18,12 +18,22 @@
</message>
<message>
<location line="+4"/>
<location line="+894"/>
<location line="+898"/>
<source>Invited user: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-5"/>
<location line="-463"/>
<source>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.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+428"/>
<source>Room %1 created.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+30"/>
<source>Failed to invite %1 to %2: %3</source>
<translation type="unfinished"></translation>
</message>
@ -58,7 +68,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="-819"/>
<location line="-823"/>
<source>Failed to upload media. Please try again.</source>
<translation type="unfinished"></translation>
</message>
@ -68,12 +78,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>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</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+12"/>
<location line="+13"/>
<source>Incompatible cache version</source>
<translation type="unfinished"></translation>
</message>
@ -99,7 +104,7 @@
</message>
<message>
<location line="+51"/>
<location line="+215"/>
<location line="+219"/>
<source>Please try to login again: %1</source>
<translation>Spróbuj zalogować się ponownie: %1</translation>
</message>
@ -124,12 +129,7 @@
<translation>Tworzenie pokoju nie powiodło się: %1</translation>
</message>
<message>
<location line="+5"/>
<source>Room %1 created</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+11"/>
<location line="+16"/>
<source>Failed to leave room: %1</source>
<translation>Nie udało się opuścić pokoju: %1</translation>
</message>
@ -238,10 +238,15 @@
<context>
<name>EncryptionIndicator</name>
<message>
<location filename="../qml/EncryptionIndicator.qml" line="+12"/>
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
<source>Encrypted</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<source>This message is not encrypted!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InviteeItem</name>
@ -254,7 +259,7 @@
<context>
<name>LoginPage</name>
<message>
<location filename="../../src/LoginPage.cpp" line="+82"/>
<location filename="../../src/LoginPage.cpp" line="+89"/>
<source>Matrix ID</source>
<translation>ID Matrixa</translation>
</message>
@ -264,22 +269,42 @@
<translation>np. @joe:matrix.org</translation>
</message>
<message>
<location line="+15"/>
<location line="+2"/>
<source>Your login name. A mxid should start with @ followed by the user id. After the user id you need to include your server name after a :.
You can also put your homeserver address there, if your server doesn&apos;t support .well-known lookup.
Example: @user:server.my
If Nheko fails to discover your homeserver, it will show you a field to enter the server manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+21"/>
<source>Password</source>
<translation>Hasło</translation>
</message>
<message>
<location line="+4"/>
<location line="+5"/>
<source>Device name</source>
<translation>Nazwa urządzenia</translation>
</message>
<message>
<location line="+19"/>
<location line="+2"/>
<source>A name for this device, which will be shown to others, when verifying your devices. If none is provided, a random string is used for privacy purposes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+6"/>
<source>The address that can be used to contact you homeservers client API.
Example: https://server.my:8787</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<location line="+185"/>
<source>LOGIN</source>
<translation>ZALOGUJ</translation>
</message>
<message>
<location line="+85"/>
<location line="-100"/>
<source>Autodiscovery failed. Received malformed response.</source>
<translation type="unfinished"></translation>
</message>
@ -289,7 +314,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+24"/>
<location line="+25"/>
<source>The required endpoints were not found. Possibly not a Matrix server.</source>
<translation>Nie odnaleziono wymaganych punktów końcowych. To może nie być serwer Matriksa.</translation>
</message>
@ -304,10 +329,20 @@
<translation>Wystąpił nieznany błąd. Upewnij się, że domena serwera domowego jest prawidłowa.</translation>
</message>
<message>
<location line="+60"/>
<location line="+55"/>
<source>SSO LOGIN</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+25"/>
<source>Empty password</source>
<translation>Puste hasło</translation>
</message>
<message>
<location line="+52"/>
<source>SSO login failed</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MemberList</name>
@ -325,7 +360,7 @@
<context>
<name>MessageDelegate</name>
<message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+64"/>
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
<source>redacted</source>
<translation type="unfinished"></translation>
</message>
@ -385,9 +420,19 @@
</message>
<message>
<location line="+3"/>
<source>The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+4"/>
<source>Password</source>
<translation>Hasło</translation>
</message>
<message>
<location line="+2"/>
<source>Please choose a secure password. The exact requirements for password strength may depend on your server.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+4"/>
<source>Password confirmation</source>
@ -395,11 +440,16 @@
</message>
<message>
<location line="+4"/>
<source>Home Server</source>
<translation>Serwer domowy</translation>
<source>Homeserver</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<location line="+2"/>
<source>A server that allows registration. Since matrix is decentralized, you need to first find a server you can register on or host your own.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+17"/>
<source>REGISTER</source>
<translation>ZAREJESTRUJ</translation>
</message>
@ -548,7 +598,7 @@
<context>
<name>TimelineModel</name>
<message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+844"/>
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
<source>-- Decryption Error (failed to communicate with DB) --</source>
<comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed when trying to lookup the session.</comment>
<translation type="unfinished"></translation>
@ -597,12 +647,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="-258"/>
<source>You joined this room</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+340"/>
<location line="+82"/>
<source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet.</comment>
<translation type="unfinished"></translation>
@ -723,7 +768,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<location line="-1278"/>
<source>You joined this room.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1280"/>
<source>Rejected the knock from %1.</source>
<translation type="unfinished"></translation>
</message>
@ -747,7 +797,7 @@
<context>
<name>TimelineRow</name>
<message>
<location filename="../qml/TimelineRow.qml" line="+83"/>
<location filename="../qml/TimelineRow.qml" line="+84"/>
<source>React</source>
<translation type="unfinished"></translation>
</message>
@ -810,7 +860,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+254"/>
<location line="+256"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>

@ -5,7 +5,7 @@
<name>Cache</name>
<message>
<location filename="../../src/Cache.cpp" line="+1341"/>
<source>You joined this room</source>
<source>You joined this room.</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -18,12 +18,22 @@
</message>
<message>
<location line="+4"/>
<location line="+894"/>
<location line="+898"/>
<source>Invited user: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-5"/>
<location line="-463"/>
<source>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.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+428"/>
<source>Room %1 created.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+30"/>
<source>Failed to invite %1 to %2: %3</source>
<translation type="unfinished"></translation>
</message>
@ -58,7 +68,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="-819"/>
<location line="-823"/>
<source>Failed to upload media. Please try again.</source>
<translation type="unfinished"></translation>
</message>
@ -68,12 +78,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>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</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+12"/>
<location line="+13"/>
<source>Incompatible cache version</source>
<translation type="unfinished"></translation>
</message>
@ -99,7 +104,7 @@
</message>
<message>
<location line="+51"/>
<location line="+215"/>
<location line="+219"/>
<source>Please try to login again: %1</source>
<translation>Повторите попытку входа: %1</translation>
</message>
@ -124,12 +129,7 @@
<translation>Не удалось создать комнату: %1</translation>
</message>
<message>
<location line="+5"/>
<source>Room %1 created</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+11"/>
<location line="+16"/>
<source>Failed to leave room: %1</source>
<translation>Не удалось покинуть комнату: %1</translation>
</message>
@ -238,10 +238,15 @@
<context>
<name>EncryptionIndicator</name>
<message>
<location filename="../qml/EncryptionIndicator.qml" line="+12"/>
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
<source>Encrypted</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<source>This message is not encrypted!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InviteeItem</name>
@ -254,7 +259,7 @@
<context>
<name>LoginPage</name>
<message>
<location filename="../../src/LoginPage.cpp" line="+82"/>
<location filename="../../src/LoginPage.cpp" line="+89"/>
<source>Matrix ID</source>
<translation>Идентификатор Matrix</translation>
</message>
@ -264,22 +269,42 @@
<translation>Пример: @joe:matrix.org</translation>
</message>
<message>
<location line="+15"/>
<location line="+2"/>
<source>Your login name. A mxid should start with @ followed by the user id. After the user id you need to include your server name after a :.
You can also put your homeserver address there, if your server doesn&apos;t support .well-known lookup.
Example: @user:server.my
If Nheko fails to discover your homeserver, it will show you a field to enter the server manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+21"/>
<source>Password</source>
<translation>Пароль</translation>
</message>
<message>
<location line="+4"/>
<location line="+5"/>
<source>Device name</source>
<translation>Имя устройства</translation>
</message>
<message>
<location line="+19"/>
<location line="+2"/>
<source>A name for this device, which will be shown to others, when verifying your devices. If none is provided, a random string is used for privacy purposes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+6"/>
<source>The address that can be used to contact you homeservers client API.
Example: https://server.my:8787</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<location line="+185"/>
<source>LOGIN</source>
<translation>ВОЙТИ</translation>
</message>
<message>
<location line="+85"/>
<location line="-100"/>
<source>Autodiscovery failed. Received malformed response.</source>
<translation type="unfinished"></translation>
</message>
@ -289,7 +314,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+24"/>
<location line="+25"/>
<source>The required endpoints were not found. Possibly not a Matrix server.</source>
<translation>Необходимые конечные точки не найдены. Возможно, это не сервер Matrix.</translation>
</message>
@ -304,10 +329,20 @@
<translation>Произошла неизвестная ошибка. Убедитесь, что домен homeserver действителен.</translation>
</message>
<message>
<location line="+60"/>
<location line="+55"/>
<source>SSO LOGIN</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+25"/>
<source>Empty password</source>
<translation>Пустой пароль</translation>
</message>
<message>
<location line="+52"/>
<source>SSO login failed</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MemberList</name>
@ -325,7 +360,7 @@
<context>
<name>MessageDelegate</name>
<message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+64"/>
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
<source>redacted</source>
<translation type="unfinished"></translation>
</message>
@ -385,9 +420,19 @@
</message>
<message>
<location line="+3"/>
<source>The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+4"/>
<source>Password</source>
<translation>Пароль</translation>
</message>
<message>
<location line="+2"/>
<source>Please choose a secure password. The exact requirements for password strength may depend on your server.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+4"/>
<source>Password confirmation</source>
@ -395,11 +440,16 @@
</message>
<message>
<location line="+4"/>
<source>Home Server</source>
<translation>Домашний сервер</translation>
<source>Homeserver</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<location line="+2"/>
<source>A server that allows registration. Since matrix is decentralized, you need to first find a server you can register on or host your own.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+17"/>
<source>REGISTER</source>
<translation>РЕГИСТРАЦИЯ</translation>
</message>
@ -548,7 +598,7 @@
<context>
<name>TimelineModel</name>
<message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+844"/>
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
<source>-- Decryption Error (failed to communicate with DB) --</source>
<comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed when trying to lookup the session.</comment>
<translation type="unfinished"></translation>
@ -597,12 +647,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="-258"/>
<source>You joined this room</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+340"/>
<location line="+82"/>
<source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet.</comment>
<translation type="unfinished"></translation>
@ -723,7 +768,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<location line="-1278"/>
<source>You joined this room.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1280"/>
<source>Rejected the knock from %1.</source>
<translation type="unfinished"></translation>
</message>
@ -747,7 +797,7 @@
<context>
<name>TimelineRow</name>
<message>
<location filename="../qml/TimelineRow.qml" line="+83"/>
<location filename="../qml/TimelineRow.qml" line="+84"/>
<source>React</source>
<translation type="unfinished"></translation>
</message>
@ -810,7 +860,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+254"/>
<location line="+256"/>
<source>Close</source>
<translation type="unfinished">Закрыть</translation>
</message>

@ -5,7 +5,7 @@
<name>Cache</name>
<message>
<location filename="../../src/Cache.cpp" line="+1341"/>
<source>You joined this room</source>
<source>You joined this room.</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -18,12 +18,22 @@
</message>
<message>
<location line="+4"/>
<location line="+894"/>
<location line="+898"/>
<source>Invited user: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-5"/>
<location line="-463"/>
<source>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.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+428"/>
<source>Room %1 created.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+30"/>
<source>Failed to invite %1 to %2: %3</source>
<translation type="unfinished"></translation>
</message>
@ -58,7 +68,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="-819"/>
<location line="-823"/>
<source>Failed to upload media. Please try again.</source>
<translation type="unfinished"></translation>
</message>
@ -68,12 +78,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>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</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+12"/>
<location line="+13"/>
<source>Incompatible cache version</source>
<translation type="unfinished"></translation>
</message>
@ -99,7 +104,7 @@
</message>
<message>
<location line="+51"/>
<location line="+215"/>
<location line="+219"/>
<source>Please try to login again: %1</source>
<translation>%1</translation>
</message>
@ -124,12 +129,7 @@
<translation>%1</translation>
</message>
<message>
<location line="+5"/>
<source>Room %1 created</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+11"/>
<location line="+16"/>
<source>Failed to leave room: %1</source>
<translation>%1</translation>
</message>
@ -238,10 +238,15 @@
<context>
<name>EncryptionIndicator</name>
<message>
<location filename="../qml/EncryptionIndicator.qml" line="+12"/>
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
<source>Encrypted</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<source>This message is not encrypted!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InviteeItem</name>
@ -254,7 +259,7 @@
<context>
<name>LoginPage</name>
<message>
<location filename="../../src/LoginPage.cpp" line="+82"/>
<location filename="../../src/LoginPage.cpp" line="+89"/>
<source>Matrix ID</source>
<translation></translation>
</message>
@ -264,22 +269,42 @@
<translation> @joe:matrix.org</translation>
</message>
<message>
<location line="+15"/>
<location line="+2"/>
<source>Your login name. A mxid should start with @ followed by the user id. After the user id you need to include your server name after a :.
You can also put your homeserver address there, if your server doesn&apos;t support .well-known lookup.
Example: @user:server.my
If Nheko fails to discover your homeserver, it will show you a field to enter the server manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+21"/>
<source>Password</source>
<translation></translation>
</message>
<message>
<location line="+4"/>
<location line="+5"/>
<source>Device name</source>
<translation></translation>
</message>
<message>
<location line="+19"/>
<location line="+2"/>
<source>A name for this device, which will be shown to others, when verifying your devices. If none is provided, a random string is used for privacy purposes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+6"/>
<source>The address that can be used to contact you homeservers client API.
Example: https://server.my:8787</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<location line="+185"/>
<source>LOGIN</source>
<translation></translation>
</message>
<message>
<location line="+85"/>
<location line="-100"/>
<source>Autodiscovery failed. Received malformed response.</source>
<translation type="unfinished"></translation>
</message>
@ -289,7 +314,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+24"/>
<location line="+25"/>
<source>The required endpoints were not found. Possibly not a Matrix server.</source>
<translation> Matrix </translation>
</message>
@ -304,10 +329,20 @@
<translation></translation>
</message>
<message>
<location line="+60"/>
<location line="+55"/>
<source>SSO LOGIN</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+25"/>
<source>Empty password</source>
<translation></translation>
</message>
<message>
<location line="+52"/>
<source>SSO login failed</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MemberList</name>
@ -325,7 +360,7 @@
<context>
<name>MessageDelegate</name>
<message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+64"/>
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
<source>redacted</source>
<translation type="unfinished"></translation>
</message>
@ -385,9 +420,19 @@
</message>
<message>
<location line="+3"/>
<source>The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+4"/>
<source>Password</source>
<translation></translation>
</message>
<message>
<location line="+2"/>
<source>Please choose a secure password. The exact requirements for password strength may depend on your server.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+4"/>
<source>Password confirmation</source>
@ -395,11 +440,16 @@
</message>
<message>
<location line="+4"/>
<source>Home Server</source>
<translation></translation>
<source>Homeserver</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<location line="+2"/>
<source>A server that allows registration. Since matrix is decentralized, you need to first find a server you can register on or host your own.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+17"/>
<source>REGISTER</source>
<translation></translation>
</message>
@ -548,7 +598,7 @@
<context>
<name>TimelineModel</name>
<message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+844"/>
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
<source>-- Decryption Error (failed to communicate with DB) --</source>
<comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed when trying to lookup the session.</comment>
<translation type="unfinished"></translation>
@ -597,12 +647,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="-258"/>
<source>You joined this room</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+340"/>
<location line="+82"/>
<source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet.</comment>
<translation type="unfinished"></translation>
@ -721,7 +766,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<location line="-1278"/>
<source>You joined this room.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1280"/>
<source>Rejected the knock from %1.</source>
<translation type="unfinished"></translation>
</message>
@ -745,7 +795,7 @@
<context>
<name>TimelineRow</name>
<message>
<location filename="../qml/TimelineRow.qml" line="+83"/>
<location filename="../qml/TimelineRow.qml" line="+84"/>
<source>React</source>
<translation type="unfinished"></translation>
</message>
@ -808,7 +858,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location line="+254"/>
<location line="+256"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>

@ -3,13 +3,14 @@ import QtQuick.Controls 2.1
import im.nheko 1.0
Rectangle {
property bool encrypted: false
id: indicator
color: "transparent"
width: 16
height: 16
ToolTip.visible: ma.containsMouse && indicator.visible
ToolTip.text: qsTr("Encrypted")
ToolTip.text: getEncryptionTooltip()
MouseArea{
id: ma
@ -20,7 +21,21 @@ Rectangle {
Image {
id: stateImg
anchors.fill: parent
source: "image://colorimage/:/icons/icons/ui/lock.png?"+colors.buttonText
source: getEncryptionImage()
}
function getEncryptionImage() {
if (encrypted)
return "image://colorimage/:/icons/icons/ui/lock.png?"+colors.buttonText
else
return "image://colorimage/:/icons/icons/ui/unlock.png?#dd3d3d"
}
function getEncryptionTooltip() {
if (encrypted)
return qsTr("Encrypted")
else
return qsTr("This message is not encrypted!")
}
}

@ -71,6 +71,8 @@ MouseArea {
pixelDelta = wheel.pixelDelta.y
}
pixelDelta = Math.round(pixelDelta)
if (!pixelDelta) {
return flickableItem.contentY;
}

@ -67,7 +67,8 @@ MouseArea {
}
EncryptionIndicator {
visible: model.isEncrypted
visible: model.isRoomEncrypted
encrypted: model.isEncrypted
Layout.alignment: Qt.AlignRight | Qt.AlignTop
Layout.preferredHeight: 16
width: 16

@ -125,6 +125,8 @@ Page {
visible: timelineManager.timeline != null
cacheBuffer: 500
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top

@ -6,10 +6,11 @@ Item {
property double tempWidth: Math.min(parent ? parent.width : undefined, model.data.width < 1 ? parent.width : model.data.width)
property double tempHeight: tempWidth * model.data.proportionalHeight
property bool tooHigh: tempHeight > timelineRoot.height / 2
property double divisor: model.isReply ? 4 : 2
property bool tooHigh: tempHeight > timelineRoot.height / divisor
height: tooHigh ? timelineRoot.height / 2 : tempHeight
width: tooHigh ? (timelineRoot.height / 2) / model.data.proportionalHeight : tempWidth
height: tooHigh ? timelineRoot.height / divisor : tempHeight
width: tooHigh ? (timelineRoot.height / divisor) / model.data.proportionalHeight : tempWidth
Image {
id: blurhash

@ -6,9 +6,11 @@ Item {
Item {
id: model
property var data;
property bool isReply: false
}
property alias modelData: model.data
property alias isReply: model.isReply
height: chooser.childrenRect.height
property real implicitWidth: (chooser.child && chooser.child.implicitWidth) ? chooser.child.implicitWidth : width

@ -1,4 +1,6 @@
TextMessage {
font.italic: true
color: colors.buttonText
height: isReply ? Math.min(chat.height / 8, implicitHeight) : undefined
clip: true
}

@ -20,8 +20,14 @@ Rectangle {
Rectangle {
id: videoContainer
visible: model.data.type == MtxEvent.VideoMessage
width: Math.min(parent.width, model.data.width ? model.data.width : 400) // some media has 0 as size...
height: width*model.data.proportionalHeight
property double tempWidth: Math.min(parent ? parent.width : undefined, model.data.width < 1 ? 400 : model.data.width)
property double tempHeight: tempWidth * model.data.proportionalHeight
property double divisor: model.isReply ? 4 : 2
property bool tooHigh: tempHeight > timelineRoot.height / divisor
height: tooHigh ? timelineRoot.height / divisor : tempHeight
width: tooHigh ? (timelineRoot.height / divisor) / model.data.proportionalHeight : tempWidth
Image {
anchors.fill: parent
source: model.data.thumbnailUrl.replace("mxc://", "image://MxcImage/")

@ -51,6 +51,7 @@ Item {
MessageDelegate {
id: reply
width: parent.width
isReply: true
}
}

@ -4,4 +4,6 @@ MatrixText {
property string formatted: model.data.formattedBody
text: "<style type=\"text/css\">a { color:"+colors.link+";}</style>" + formatted.replace("<pre>", "<pre style='white-space: pre-wrap'>")
width: parent ? parent.width : undefined
height: isReply ? Math.min(chat.height / 8, implicitHeight) : undefined
clip: true
}

@ -14,6 +14,8 @@
<file>icons/ui/double-tick-indicator@2x.png</file>
<file>icons/ui/lock.png</file>
<file>icons/ui/lock@2x.png</file>
<file>icons/ui/unlock.png</file>
<file>icons/ui/unlock@2x.png</file>
<file>icons/ui/clock.png</file>
<file>icons/ui/clock@2x.png</file>
<file>icons/ui/checkmark.png</file>

@ -1338,7 +1338,7 @@ Cache::getLastMessageInfo(lmdb::txn &txn, const std::string &room_id)
auto time = QDateTime::fromMSecsSinceEpoch(ts);
fallbackDesc = DescInfo{QString::fromStdString(obj["event"]["event_id"]),
local_user,
tr("You joined this room"),
tr("You joined this room."),
utils::descriptiveTime(time),
ts,
time};

@ -666,7 +666,7 @@ ChatPage::bootstrap(QString userid, QString homeserver, QString token)
"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"));
"manually."));
QCoreApplication::quit();
}
loadStateFromCache();
@ -994,8 +994,12 @@ ChatPage::trySync()
const auto err_code = mtx::errors::to_string(err->matrix_error.errcode);
const int status_code = static_cast<int>(err->status_code);
if (http::is_logged_in() && err->matrix_error.errcode ==
mtx::errors::ErrorCode::M_UNKNOWN_TOKEN) {
if ((http::is_logged_in() &&
(err->matrix_error.errcode ==
mtx::errors::ErrorCode::M_UNKNOWN_TOKEN ||
err->matrix_error.errcode ==
mtx::errors::ErrorCode::M_MISSING_TOKEN)) ||
!http::is_logged_in()) {
emit dropToLoginPageCb(msg);
return;
}
@ -1086,7 +1090,7 @@ ChatPage::createRoom(const mtx::requests::CreateRoom &req)
}
emit showNotification(
tr("Room %1 created").arg(QString::fromStdString(res.room_id.to_string())));
tr("Room %1 created.").arg(QString::fromStdString(res.room_id.to_string())));
});
}

@ -15,28 +15,35 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QDesktopServices>
#include <QPainter>
#include <QStyleOption>
#include <mtx/identifiers.hpp>
#include <mtx/requests.hpp>
#include <mtx/responses/login.hpp>
#include "Config.h"
#include "Logging.h"
#include "LoginPage.h"
#include "MatrixClient.h"
#include "SSOHandler.h"
#include "ui/FlatButton.h"
#include "ui/LoadingIndicator.h"
#include "ui/OverlayModal.h"
#include "ui/RaisedButton.h"
#include "ui/TextField.h"
Q_DECLARE_METATYPE(LoginPage::LoginMethod)
using namespace mtx::identifiers;
LoginPage::LoginPage(QWidget *parent)
: QWidget(parent)
, inferredServerAddress_()
{
qRegisterMetaType<LoginPage::LoginMethod>("LoginPage::LoginMethod");
top_layout_ = new QVBoxLayout();
top_bar_layout_ = new QHBoxLayout();
@ -81,6 +88,14 @@ LoginPage::LoginPage(QWidget *parent)
matrixid_input_ = new TextField(this);
matrixid_input_->setLabel(tr("Matrix ID"));
matrixid_input_->setPlaceholderText(tr("e.g @joe:matrix.org"));
matrixid_input_->setToolTip(
tr("Your login name. A mxid should start with @ followed by the user id. After the user "
"id you need to include your server name after a :.\nYou can also put your homeserver "
"address there, if your server doesn't support .well-known lookup.\nExample: "
"@user:server.my\nIf Nheko fails to discover your homeserver, it will show you a "
"field to enter the server manually."));
matrixid_input_->setValidator(
new QRegularExpressionValidator(QRegularExpression("@.+?:.{3,}"), this));
spinner_ = new LoadingIndicator(this);
spinner_->setFixedHeight(40);
@ -97,13 +112,19 @@ LoginPage::LoginPage(QWidget *parent)
password_input_ = new TextField(this);
password_input_->setLabel(tr("Password"));
password_input_->setEchoMode(QLineEdit::Password);
password_input_->setToolTip("Your password.");
deviceName_ = new TextField(this);
deviceName_->setLabel(tr("Device name"));
deviceName_->setToolTip(
tr("A name for this device, which will be shown to others, when verifying your devices. "
"If none is provided, a random string is used for privacy purposes."));
serverInput_ = new TextField(this);
serverInput_->setLabel("Homeserver address");
serverInput_->setPlaceholderText("matrix.org");
serverInput_->setToolTip(tr("The address that can be used to contact you homeservers "
"client API.\nExample: https://server.my:8787"));
serverInput_->hide();
serverLayout_ = new QHBoxLayout();
@ -212,7 +233,8 @@ LoginPage::onMatrixIdEntered()
emit versionErrorCb(tr("Autodiscovery failed. Unknown error when "
"requesting .well-known."));
nhlog::net()->error("Autodiscovery failed. Unknown error when "
"requesting .well-known.");
"requesting .well-known. {}",
err->error_code.message());
return;
}
@ -249,7 +271,16 @@ LoginPage::checkHomeserverVersion()
return;
}
emit versionOkCb();
http::client()->get_login(
[this](mtx::responses::LoginFlows flows, mtx::http::RequestErr err) {
if (err || flows.flows.empty())
emit versionOkCb(LoginMethod::Password);
if (flows.flows[0].type == mtx::user_interactive::auth_types::sso)
emit versionOkCb(LoginMethod::SSO);
else
emit versionOkCb(LoginMethod::Password);
});
});
}
@ -280,12 +311,22 @@ LoginPage::versionError(const QString &error)
}
void
LoginPage::versionOk()
LoginPage::versionOk(LoginMethod loginMethod_)
{
this->loginMethod = loginMethod_;
serverLayout_->removeWidget(spinner_);
matrixidLayout_->removeWidget(spinner_);
spinner_->stop();
if (loginMethod == LoginMethod::SSO) {
password_input_->hide();
login_button_->setText(tr("SSO LOGIN"));
} else {
password_input_->show();
login_button_->setText(tr("LOGIN"));
}
if (serverInput_->isVisible())
serverInput_->hide();
}
@ -303,29 +344,68 @@ LoginPage::onLoginButtonClicked()
return loginError("You have entered an invalid Matrix ID e.g @joe:matrix.org");
}
if (password_input_->text().isEmpty())
return loginError(tr("Empty password"));
if (loginMethod == LoginMethod::Password) {
if (password_input_->text().isEmpty())
return loginError(tr("Empty password"));
http::client()->login(
user.localpart(),
password_input_->text().toStdString(),
deviceName_->text().trimmed().isEmpty() ? initialDeviceName()
: deviceName_->text().toStdString(),
[this](const mtx::responses::Login &res, mtx::http::RequestErr err) {
if (err) {
emit loginError(QString::fromStdString(err->matrix_error.error));
emit errorOccurred();
return;
}
http::client()->login(
user.localpart(),
password_input_->text().toStdString(),
deviceName_->text().trimmed().isEmpty() ? initialDeviceName()
: deviceName_->text().toStdString(),
[this](const mtx::responses::Login &res, mtx::http::RequestErr err) {
if (err) {
emit loginError(QString::fromStdString(err->matrix_error.error));
emit errorOccurred();
return;
}
if (res.well_known) {
http::client()->set_server(res.well_known->homeserver.base_url);
nhlog::net()->info("Login requested to user server: " +
res.well_known->homeserver.base_url);
}
if (res.well_known) {
http::client()->set_server(res.well_known->homeserver.base_url);
nhlog::net()->info("Login requested to user server: " +
res.well_known->homeserver.base_url);
}
emit loginOk(res);
});
} else {
auto sso = new SSOHandler();
connect(sso, &SSOHandler::ssoSuccess, this, [this, sso](std::string token) {
mtx::requests::Login req{};
req.token = token;
req.type = mtx::user_interactive::auth_types::token;
req.device_id = deviceName_->text().trimmed().isEmpty()
? initialDeviceName()
: deviceName_->text().toStdString();
http::client()->login(
req, [this](const mtx::responses::Login &res, mtx::http::RequestErr err) {
if (err) {
emit loginError(
QString::fromStdString(err->matrix_error.error));
emit errorOccurred();
return;
}
if (res.well_known) {
http::client()->set_server(
res.well_known->homeserver.base_url);
nhlog::net()->info("Login requested to user server: " +
res.well_known->homeserver.base_url);
}
emit loginOk(res);
});
sso->deleteLater();
});
connect(sso, &SSOHandler::ssoFailed, this, [this, sso]() {
emit loginError(tr("SSO login failed"));
emit errorOccurred();
sso->deleteLater();
});
emit loginOk(res);
});
QDesktopServices::openUrl(
QString::fromStdString(http::client()->login_sso_redirect(sso->url())));
}
emit loggingIn();
}
@ -335,6 +415,7 @@ LoginPage::reset()
{
matrixid_input_->clear();
password_input_->clear();
password_input_->show();
serverInput_->clear();
spinner_->stop();

@ -38,6 +38,12 @@ class LoginPage : public QWidget
Q_OBJECT
public:
enum class LoginMethod
{
Password,
SSO,
};
LoginPage(QWidget *parent = nullptr);
void reset();
@ -50,7 +56,7 @@ signals:
//! Used to trigger the corresponding slot outside of the main thread.
void versionErrorCb(const QString &err);
void loginErrorCb(const QString &err);
void versionOkCb();
void versionOkCb(LoginPage::LoginMethod method);
void loginOk(const mtx::responses::Login &res);
@ -77,7 +83,7 @@ private slots:
// Callback for errors produced during server probing
void versionError(const QString &error_message);
// Callback for successful server probing
void versionOk();
void versionOk(LoginPage::LoginMethod method);
private:
bool isMatrixIdValid();
@ -123,4 +129,5 @@ private:
TextField *password_input_;
TextField *deviceName_;
TextField *serverInput_;
LoginMethod loginMethod = LoginMethod::Password;
};

@ -85,17 +85,26 @@ RegisterPage::RegisterPage(QWidget *parent)
username_input_ = new TextField();
username_input_->setLabel(tr("Username"));
username_input_->setValidator(
new QRegularExpressionValidator(QRegularExpression("[a-z0-9._=/-]+"), this));
username_input_->setToolTip(tr("The username must not be empty, and must contain only the "
"characters a-z, 0-9, ., _, =, -, and /."));
password_input_ = new TextField();
password_input_->setLabel(tr("Password"));
password_input_->setEchoMode(QLineEdit::Password);
password_input_->setToolTip(tr("Please choose a secure password. The exact requirements "
"for password strength may depend on your server."));
password_confirmation_ = new TextField();
password_confirmation_->setLabel(tr("Password confirmation"));
password_confirmation_->setEchoMode(QLineEdit::Password);
server_input_ = new TextField();
server_input_->setLabel(tr("Home Server"));
server_input_->setLabel(tr("Homeserver"));
server_input_->setToolTip(
tr("A server that allows registration. Since matrix is decentralized, you need to first "
"find a server you can register on or host your own."));
form_layout_->addWidget(username_input_, Qt::AlignHCenter, nullptr);
form_layout_->addWidget(password_input_, Qt::AlignHCenter, nullptr);

@ -0,0 +1,53 @@
#include "SSOHandler.h"
#include <QTimer>
#include <thread>
#include "Logging.h"
SSOHandler::SSOHandler(QObject *)
{
QTimer::singleShot(120000, this, &SSOHandler::ssoFailed);
using namespace httplib;
svr.set_logger([](const Request &req, const Response &res) {
nhlog::net()->info("req: {}, res: {}", req.path, res.status);
});
svr.Get("/sso", [this](const Request &req, Response &res) {
if (req.has_param("loginToken")) {
auto val = req.get_param_value("loginToken");
res.set_content("SSO success", "text/plain");
emit ssoSuccess(val);
} else {
res.set_content("Missing loginToken for SSO login!", "text/plain");
emit ssoFailed();
}
});
std::thread t([this]() {
this->port = svr.bind_to_any_port("localhost");
svr.listen_after_bind();
});
t.detach();
while (!svr.is_running()) {
std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
}
SSOHandler::~SSOHandler()
{
svr.stop();
while (svr.is_running()) {
std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
}
std::string
SSOHandler::url() const
{
return "http://localhost:" + std::to_string(port) + "/sso";
}

@ -0,0 +1,24 @@
#include "httplib.h"
#include <QObject>
#include <string>
class SSOHandler : public QObject
{
Q_OBJECT
public:
SSOHandler(QObject *parent = nullptr);
~SSOHandler();
std::string url() const;
signals:
void ssoSuccess(std::string token);
void ssoFailed();
private:
httplib::Server svr;
int port = 0;
};

@ -224,6 +224,7 @@ TimelineModel::roleNames() const
{Id, "id"},
{State, "state"},
{IsEncrypted, "isEncrypted"},
{IsRoomEncrypted, "isRoomEncrypted"},
{ReplyTo, "replyTo"},
{Reactions, "reactions"},
{RoomId, "roomId"},
@ -294,6 +295,10 @@ TimelineModel::data(const QString &id, int role) const
if (isReply)
formattedBody_ = formattedBody_.remove(replyFallback);
}
formattedBody_.replace("<img src=\"mxc:&#47;&#47;", "<img src=\"image://mxcImage/");
formattedBody_.replace("<img src=\"mxc://", "<img src=\"image://mxcImage/");
return QVariant(utils::replaceEmoji(
utils::linkifyMessage(utils::escapeBlacklistedHtml(formattedBody_))));
}
@ -346,6 +351,9 @@ TimelineModel::data(const QString &id, int role) const
return std::holds_alternative<
mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(events[id]);
}
case IsRoomEncrypted: {
return cache::isRoomEncrypted(room_id_.toStdString());
}
case ReplyTo:
return QVariant(QString::fromStdString(in_reply_to_event(event)));
case Reactions:
@ -383,6 +391,7 @@ TimelineModel::data(const QString &id, int role) const
m.insert(names[Id], data(id, static_cast<int>(Id)));
m.insert(names[State], data(id, static_cast<int>(State)));
m.insert(names[IsEncrypted], data(id, static_cast<int>(IsEncrypted)));
m.insert(names[IsRoomEncrypted], data(id, static_cast<int>(IsRoomEncrypted)));
m.insert(names[ReplyTo], data(id, static_cast<int>(ReplyTo)));
m.insert(names[RoomName], data(id, static_cast<int>(RoomName)));
m.insert(names[RoomTopic], data(id, static_cast<int>(RoomTopic)));
@ -566,7 +575,7 @@ TimelineModel::updateLastMessage()
room_id_,
DescInfo{QString::fromStdString(mtx::accessors::event_id(event)),
QString::fromStdString(http::client()->user_id().to_string()),
tr("You joined this room"),
tr("You joined this room."),
utils::descriptiveTime(time),
ts,
time});

@ -159,6 +159,7 @@ public:
Id,
State,
IsEncrypted,
IsRoomEncrypted,
ReplyTo,
Reactions,
RoomId,

@ -147,7 +147,10 @@ QColor
TextField::underlineColor() const
{
if (!underline_color_.isValid()) {
return QPalette().color(QPalette::Highlight);
if (hasAcceptableInput() || !isModified())
return QPalette().color(QPalette::Highlight);
else
return Qt::red;
}
return underline_color_;

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save