Merge remote-tracking branch 'nheko-im/master' into privacy_screen
This commit is contained in:
commit
53c653a228
1
.github/ISSUE_TEMPLATE/bug_report.md
vendored
1
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -26,6 +26,7 @@ If applicable, add screenshots to help explain your problem.
|
||||
### System:
|
||||
|
||||
- Nheko version: <!-- Get the version from the settings menu (bottom left corner) -->
|
||||
- Profile used: <!-- If you are not using the default profile, mention it here -->
|
||||
- Installation method: <!-- AppImage, some repository, local build etc -->
|
||||
- Operating System:
|
||||
- Qt version: <!-- If you compiled it yourself -->
|
||||
|
38
CHANGELOG.md
38
CHANGELOG.md
@ -1,5 +1,43 @@
|
||||
# Changelog
|
||||
|
||||
## [0.8.1] -- 2021-01-27
|
||||
|
||||
### Features
|
||||
|
||||
- `/plain` and `/md` commands to override the current markdown setting. (contributed by lorendb)
|
||||
- Allow persistent hiding of rooms with a specific tag (or from a community) via a context menu.
|
||||
- Allow open media messages in an external program immediately. (contributed by rnhmjoj)
|
||||
|
||||
### Improvements
|
||||
|
||||
- Use async dbus connection for notifications. (contributed by lorendb)
|
||||
- Update Hungarian translations. (contributed by maxigaz)
|
||||
- Update Finnish translations. (contributed by Priit)
|
||||
- Update Malayalam translations. (contributed by vachan-maker)
|
||||
- Update Dutch translations. (contributed by Glael)
|
||||
- Store splitter size across restarts.
|
||||
- Add a border around the completer. (contributed by lorendb)
|
||||
- Request keys for messages with unknown message indices (once per restart, when they are shown).
|
||||
- Move the database location to XDG_DATA_DIR. (contributed by rnhmjoj)
|
||||
- Reload the timeline after key backup import.
|
||||
- Autoclose completer on `space`, when there are no matches.
|
||||
- Make completer only react, when the mouse cursor is moved.
|
||||
|
||||
### Bugfixes
|
||||
|
||||
- Fix unhandled exception, when a device has no keys.
|
||||
- Fix some cmake warnings regarding GNUInstallDirs.
|
||||
- Fix tags being broken. If you have no tags showing up, you may want to logout and login again.
|
||||
- Fix versionOk being called on the wrong thread. (contributed by Jedi18)
|
||||
- Fix font tags showing up in media message filenames.
|
||||
- Fix user profile in dark themes showing the wrong colors. (contributed by lorendb)
|
||||
- Fix emoji category switching on old Qt versions. (contributed by lorendb)
|
||||
- Fix old messages being replayed after a limited timeline.
|
||||
- Fix empty secrets being returned from the wallet breaking verification.
|
||||
- Make matrix link chat invites create a direct chat.
|
||||
- Fix focus handling on room change or reply button clicks.
|
||||
- Fix username completion deleting the character before it.
|
||||
|
||||
## [0.8.0] -- 2021-01-21
|
||||
|
||||
### Highlights
|
||||
|
@ -72,15 +72,16 @@ if(${CMAKE_VERSION} VERSION_LESS "3.14.0")
|
||||
endmacro()
|
||||
endif()
|
||||
|
||||
include(GNUInstallDirs)
|
||||
|
||||
# Include Qt basic functions
|
||||
include(QtCommon)
|
||||
|
||||
project(nheko LANGUAGES CXX C)
|
||||
|
||||
include(GNUInstallDirs)
|
||||
|
||||
set(CPACK_PACKAGE_VERSION_MAJOR "0")
|
||||
set(CPACK_PACKAGE_VERSION_MINOR "8")
|
||||
set(CPACK_PACKAGE_VERSION_PATCH "0")
|
||||
set(CPACK_PACKAGE_VERSION_PATCH "1")
|
||||
set(PROJECT_VERSION_MAJOR ${CPACK_PACKAGE_VERSION_MAJOR})
|
||||
set(PROJECT_VERSION_MINOR ${CPACK_PACKAGE_VERSION_MINOR})
|
||||
set(PROJECT_VERSION_PATCH ${CPACK_PACKAGE_VERSION_PATCH})
|
||||
@ -260,7 +261,7 @@ set(SRC_FILES
|
||||
|
||||
# Emoji
|
||||
src/emoji/EmojiModel.cpp
|
||||
src/emoji/Provider_new.cpp
|
||||
src/emoji/Provider.cpp
|
||||
|
||||
|
||||
# Timeline
|
||||
@ -354,13 +355,13 @@ if(USE_BUNDLED_MTXCLIENT)
|
||||
FetchContent_Declare(
|
||||
MatrixClient
|
||||
GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git
|
||||
GIT_TAG v0.4.0
|
||||
GIT_TAG v0.4.1
|
||||
)
|
||||
set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "")
|
||||
set(BUILD_LIB_TESTS OFF CACHE INTERNAL "")
|
||||
FetchContent_MakeAvailable(MatrixClient)
|
||||
else()
|
||||
find_package(MatrixClient 0.4.0 REQUIRED)
|
||||
find_package(MatrixClient 0.4.1 REQUIRED)
|
||||
endif()
|
||||
if(USE_BUNDLED_OLM)
|
||||
include(FetchContent)
|
||||
|
@ -2,7 +2,7 @@ nheko
|
||||
----
|
||||
[![Build Status](https://nheko.im/nheko-reborn/nheko/badges/master/pipeline.svg)](https://nheko.im/nheko-reborn/nheko/-/pipelines/latest)
|
||||
[![Build status](https://ci.appveyor.com/api/projects/status/07qrqbfylsg4hw2h/branch/master?svg=true)](https://ci.appveyor.com/project/redsky17/nheko/branch/master)
|
||||
[![Stable Version](https://img.shields.io/badge/download-stable-green.svg)](https://github.com/Nheko-Reborn/nheko/releases/v0.8.0)
|
||||
[![Stable Version](https://img.shields.io/badge/download-stable-green.svg)](https://github.com/Nheko-Reborn/nheko/releases/v0.8.1)
|
||||
[![Nightly](https://img.shields.io/badge/download-nightly-green.svg)](https://matrix-static.neko.dev/room/!TshDrgpBNBDmfDeEGN:neko.dev/)
|
||||
[![#nheko-reborn:matrix.org](https://img.shields.io/matrix/nheko-reborn:matrix.org.svg?label=%23nheko-reborn:matrix.org)](https://matrix.to/#/#nheko-reborn:matrix.org)
|
||||
[![AUR: nheko](https://img.shields.io/badge/AUR-nheko-blue.svg)](https://aur.archlinux.org/packages/nheko)
|
||||
|
13
appveyor.yml
13
appveyor.yml
@ -23,15 +23,15 @@ build:
|
||||
|
||||
install:
|
||||
- set QT_DIR=C:\Qt\5.15\msvc2019_64
|
||||
- set PATH=C:\Strawberry\perl\bin;%PATH%;%QT_DIR%\bin
|
||||
- set PATH=C:\Strawberry\perl\bin;C:\Python39-x64;%PATH%;%QT_DIR%\bin
|
||||
- call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
|
||||
|
||||
build_script:
|
||||
# VERSION format: branch-master/branch-1.2
|
||||
# INSTVERSION format: x.y.z
|
||||
# WINVERSION format: 9999.0.0.123/1.2.0.234
|
||||
- if "%APPVEYOR_REPO_TAG%"=="false" set INSTVERSION=0.8.0
|
||||
- if "%APPVEYOR_REPO_TAG%"=="false" set VERSION=0.8.0
|
||||
- if "%APPVEYOR_REPO_TAG%"=="false" set INSTVERSION=0.8.1
|
||||
- if "%APPVEYOR_REPO_TAG%"=="false" set VERSION=0.8.1
|
||||
- if "%APPVEYOR_REPO_TAG%"=="false" if "%APPVEYOR_REPO_BRANCH%"=="master" set INSTVERSION=9999.0
|
||||
- if "%APPVEYOR_REPO_TAG%"=="false" set WINVERSION=%INSTVERSION%.0.%APPVEYOR_BUILD_NUMBER%
|
||||
# VERSION format: v1.2.3/v1.3.4
|
||||
@ -46,7 +46,6 @@ build_script:
|
||||
- echo %DATE%
|
||||
|
||||
# Build nheko
|
||||
#- cmake -G "Visual Studio 15 2017 Win64" -H. -Bbuild
|
||||
- cmake -G "Visual Studio 16 2019" -A x64 -H. -Bbuild
|
||||
-DHUNTER_ROOT="C:\hunter"
|
||||
-DHUNTER_ENABLED=ON -DBUILD_SHARED_LIBS=OFF
|
||||
@ -91,9 +90,9 @@ after_build:
|
||||
- copy %BUILD%\deploy\installer\cleanup\package.xml installer\packages\io.github.nhekoreborn.nheko.cleanup\meta
|
||||
- copy %BUILD%\deploy\installer\cleanup\installscript.qs installer\packages\io.github.nhekoreborn.nheko.cleanup\meta
|
||||
# Amend version and date
|
||||
- sed -i "s/__VERSION__/0.8.0/" installer\config\config.xml
|
||||
- sed -i "s/__VERSION__/0.8.0/" installer\packages\io.github.nhekoreborn.nheko\meta\package.xml
|
||||
- sed -i "s/__VERSION__/0.8.0/" installer\packages\io.github.nhekoreborn.nheko.cleanup\meta\package.xml
|
||||
- sed -i "s/__VERSION__/0.8.1/" installer\config\config.xml
|
||||
- sed -i "s/__VERSION__/0.8.1/" installer\packages\io.github.nhekoreborn.nheko\meta\package.xml
|
||||
- sed -i "s/__VERSION__/0.8.1/" installer\packages\io.github.nhekoreborn.nheko.cleanup\meta\package.xml
|
||||
- sed -i "s/__DATE__/%DATE%/" installer\packages\io.github.nhekoreborn.nheko\meta\package.xml
|
||||
- sed -i "s/__DATE__/%DATE%/" installer\packages\io.github.nhekoreborn.nheko.cleanup\meta\package.xml
|
||||
# Copy nheko data
|
||||
|
@ -220,8 +220,8 @@
|
||||
"name": "mtxclient",
|
||||
"sources": [
|
||||
{
|
||||
"commit": "2d6e3f79917ce2065a54ca32e6a9f9d42c0b6347",
|
||||
"tag": "v0.4.0",
|
||||
"commit": "4951190c938740defa0988d98d5e861038622936",
|
||||
"tag": "v0.4.1",
|
||||
"type": "git",
|
||||
"url": "https://github.com/Nheko-Reborn/mtxclient.git"
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -51,7 +51,7 @@
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1951"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1978"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -126,7 +126,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+779"/>
|
||||
<location line="+796"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -280,7 +280,12 @@
|
||||
<context>
|
||||
<name>CommunitiesListItem</name>
|
||||
<message>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+133"/>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+26"/>
|
||||
<source>Hide rooms with this tag or from this community</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+153"/>
|
||||
<source>All rooms</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -474,11 +479,17 @@
|
||||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+548"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+559"/>
|
||||
<source>-- Encrypted Event (No keys found for decryption) --</source>
|
||||
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>-- Encrypted Event (Key not valid for this index) --</source>
|
||||
<comment>Placeholder, when the message can't be decrypted with this key since it is not valid for this index </comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<location line="+63"/>
|
||||
@ -557,7 +568,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+340"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -596,7 +607,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+2"/>
|
||||
<source>Your password.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Device name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -606,19 +622,37 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+4"/>
|
||||
<source>Homeserver address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<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="+19"/>
|
||||
<location line="+217"/>
|
||||
<location line="+218"/>
|
||||
<source>LOGIN</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-104"/>
|
||||
<location line="-151"/>
|
||||
<location line="+11"/>
|
||||
<location line="+157"/>
|
||||
<location line="+11"/>
|
||||
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-132"/>
|
||||
<source>Autodiscovery failed. Received malformed response.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -763,7 +797,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+152"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -870,7 +904,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+182"/>
|
||||
<location filename="../../src/main.cpp" line="+179"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -973,7 +1007,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1859"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1868"/>
|
||||
<source>no version stored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1015,7 +1049,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+38"/>
|
||||
<location line="+39"/>
|
||||
<source>New tag...</source>
|
||||
<comment>Add a new tag to the room</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
@ -1115,7 +1149,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+864"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+860"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1126,7 +1160,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+156"/>
|
||||
<location line="+164"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1146,7 +1180,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+129"/>
|
||||
<location line="+143"/>
|
||||
<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 type="unfinished">
|
||||
@ -1266,12 +1300,12 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-749"/>
|
||||
<location line="-771"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+751"/>
|
||||
<location line="+773"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1352,6 +1386,11 @@ Example: https://server.my:8787</source>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open in external program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<source>No room open</source>
|
||||
@ -1464,7 +1503,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+53"/>
|
||||
<location filename="../qml/UserProfile.qml" line="+54"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1487,7 +1526,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+781"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+794"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -51,7 +51,7 @@
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1951"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1978"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Du bist dem Raum beigetreten.</translation>
|
||||
</message>
|
||||
@ -126,7 +126,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+779"/>
|
||||
<location line="+796"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation>Eingeladener Benutzer: %1</translation>
|
||||
</message>
|
||||
@ -274,13 +274,18 @@
|
||||
<message>
|
||||
<location line="+54"/>
|
||||
<source>Failed to kick %1 from %2: %3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Kontte %1 nicht aus %2 entfernen: %3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CommunitiesListItem</name>
|
||||
<message>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+133"/>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+26"/>
|
||||
<source>Hide rooms with this tag or from this community</source>
|
||||
<translation>Verstecke Räume mit diesem Tag oder aus dieser Community</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+153"/>
|
||||
<source>All rooms</source>
|
||||
<translation>Alle Räume</translation>
|
||||
</message>
|
||||
@ -474,11 +479,17 @@
|
||||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+548"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+559"/>
|
||||
<source>-- Encrypted Event (No keys found for decryption) --</source>
|
||||
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment>
|
||||
<translation>-- Verschlüsseltes Event (keine Schlüssel zur Entschlüsselung gefunden) --</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>-- Encrypted Event (Key not valid for this index) --</source>
|
||||
<comment>Placeholder, when the message can't be decrypted with this key since it is not valid for this index </comment>
|
||||
<translation>-- Verschlüsseltes Event (Schlüssel passt nicht für diesen Nachrichtenindex) --</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<location line="+63"/>
|
||||
@ -557,7 +568,7 @@
|
||||
<translation>Alle Dateien (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+340"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation>Medienupload fehlgeschlagen. Bitte versuche es erneut.</translation>
|
||||
</message>
|
||||
@ -599,7 +610,12 @@ Wenn Nheko deinen Server nicht automatisch erkennen kann, wird es dich nach dem
|
||||
<translation>Passwort</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+2"/>
|
||||
<source>Your password.</source>
|
||||
<translation>Dein Passwort.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Device name</source>
|
||||
<translation>Gerätename</translation>
|
||||
</message>
|
||||
@ -609,7 +625,17 @@ Wenn Nheko deinen Server nicht automatisch erkennen kann, wird es dich nach dem
|
||||
<translation>Ein Name für dieses Gerät. Dieser wird der anderen Seite gezeigt, wenn das Gerät verifiziert wird. Wenn nichts angeben wird, wird einer generiert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+4"/>
|
||||
<source>Homeserver address</source>
|
||||
<translation>Heimserveradresse</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>server.my:8787</source>
|
||||
<translation>dein.server:8787</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<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.
|
||||
@ -617,12 +643,20 @@ Beispiel: https://mein.server:8787</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+19"/>
|
||||
<location line="+217"/>
|
||||
<location line="+218"/>
|
||||
<source>LOGIN</source>
|
||||
<translation>ANMELDEN</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-104"/>
|
||||
<location line="-151"/>
|
||||
<location line="+11"/>
|
||||
<location line="+157"/>
|
||||
<location line="+11"/>
|
||||
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
|
||||
<translation>Du hast eine invalide Matrix ID eingegeben. Normalerwise sehen die so aus: @joe:matrix.org</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-132"/>
|
||||
<source>Autodiscovery failed. Received malformed response.</source>
|
||||
<translation>Automatische Erkennung fehlgeschlagen. Antwort war fehlerhaft.</translation>
|
||||
</message>
|
||||
@ -767,7 +801,7 @@ Beispiel: https://mein.server:8787</translation>
|
||||
<translation>Schreibe eine Nachricht…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+152"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji</source>
|
||||
<translation>Emoji</translation>
|
||||
</message>
|
||||
@ -874,7 +908,7 @@ Beispiel: https://mein.server:8787</translation>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+182"/>
|
||||
<location filename="../../src/main.cpp" line="+179"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation>Benutze ein separates profil, wodurch mehrere Accounts und Nhekoinstanzen zur gleichen Zeit verwendet werden können.</translation>
|
||||
</message>
|
||||
@ -977,7 +1011,7 @@ Beispiel: https://mein.server:8787</translation>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1859"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1868"/>
|
||||
<source>no version stored</source>
|
||||
<translation>keine Version gespeichert</translation>
|
||||
</message>
|
||||
@ -1019,7 +1053,7 @@ Beispiel: https://mein.server:8787</translation>
|
||||
<translation>Fügt einen Tag hinzu oder entfernt ihn.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+38"/>
|
||||
<location line="+39"/>
|
||||
<source>New tag...</source>
|
||||
<comment>Add a new tag to the room</comment>
|
||||
<translation>Neuer Tag...</translation>
|
||||
@ -1119,7 +1153,7 @@ Beispiel: https://mein.server:8787</translation>
|
||||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+864"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+860"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation>Nachricht zurückziehen fehlgeschlagen: %1</translation>
|
||||
</message>
|
||||
@ -1130,7 +1164,7 @@ Beispiel: https://mein.server:8787</translation>
|
||||
<translation>Event konnte nicht verschlüsselt werden, senden wurde abgebrochen!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+156"/>
|
||||
<location line="+164"/>
|
||||
<source>Save image</source>
|
||||
<translation>Bild speichern</translation>
|
||||
</message>
|
||||
@ -1150,7 +1184,7 @@ Beispiel: https://mein.server:8787</translation>
|
||||
<translation>Datei speichern</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+129"/>
|
||||
<location line="+143"/>
|
||||
<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>
|
||||
@ -1269,12 +1303,12 @@ Beispiel: https://mein.server:8787</translation>
|
||||
<translation>%1 hat das Anklopfen zurückgezogen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-749"/>
|
||||
<location line="-771"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Du bist dem Raum beigetreten.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+751"/>
|
||||
<location line="+773"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation>Hat das Anklopfen von %1 abgewiesen.</translation>
|
||||
</message>
|
||||
@ -1355,6 +1389,11 @@ Beispiel: https://mein.server:8787</translation>
|
||||
<source>Save as</source>
|
||||
<translation>Speichern unter...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open in external program</source>
|
||||
<translation>Öffne in externen Programm</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<source>No room open</source>
|
||||
@ -1467,7 +1506,7 @@ Beispiel: https://mein.server:8787</translation>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+53"/>
|
||||
<location filename="../qml/UserProfile.qml" line="+54"/>
|
||||
<source>Verify</source>
|
||||
<translation>Verifizieren</translation>
|
||||
</message>
|
||||
@ -1490,7 +1529,7 @@ Beispiel: https://mein.server:8787</translation>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+781"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+794"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Ins Benachrichtigungsfeld minimieren</translation>
|
||||
</message>
|
||||
|
@ -51,7 +51,7 @@
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1951"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1978"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -126,7 +126,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+779"/>
|
||||
<location line="+796"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -280,7 +280,12 @@
|
||||
<context>
|
||||
<name>CommunitiesListItem</name>
|
||||
<message>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+133"/>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+26"/>
|
||||
<source>Hide rooms with this tag or from this community</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+153"/>
|
||||
<source>All rooms</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -474,11 +479,17 @@
|
||||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+548"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+559"/>
|
||||
<source>-- Encrypted Event (No keys found for decryption) --</source>
|
||||
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>-- Encrypted Event (Key not valid for this index) --</source>
|
||||
<comment>Placeholder, when the message can't be decrypted with this key since it is not valid for this index </comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<location line="+63"/>
|
||||
@ -557,7 +568,7 @@
|
||||
<translation type="unfinished">Όλα τα αρχεία (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+340"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -596,7 +607,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation>Κωδικός</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+2"/>
|
||||
<source>Your password.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Device name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -606,19 +622,37 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+4"/>
|
||||
<source>Homeserver address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<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="+19"/>
|
||||
<location line="+217"/>
|
||||
<location line="+218"/>
|
||||
<source>LOGIN</source>
|
||||
<translation>ΕΙΣΟΔΟΣ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-104"/>
|
||||
<location line="-151"/>
|
||||
<location line="+11"/>
|
||||
<location line="+157"/>
|
||||
<location line="+11"/>
|
||||
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-132"/>
|
||||
<source>Autodiscovery failed. Received malformed response.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -763,7 +797,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished">Γράψε ένα μήνυμα...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+152"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -870,7 +904,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+182"/>
|
||||
<location filename="../../src/main.cpp" line="+179"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -973,7 +1007,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1859"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1868"/>
|
||||
<source>no version stored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1015,7 +1049,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+38"/>
|
||||
<location line="+39"/>
|
||||
<source>New tag...</source>
|
||||
<comment>Add a new tag to the room</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
@ -1115,7 +1149,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+864"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+860"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1126,7 +1160,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+156"/>
|
||||
<location line="+164"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished">Αποθήκευση Εικόνας</translation>
|
||||
</message>
|
||||
@ -1146,7 +1180,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+129"/>
|
||||
<location line="+143"/>
|
||||
<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 type="unfinished">
|
||||
@ -1265,12 +1299,12 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-749"/>
|
||||
<location line="-771"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+751"/>
|
||||
<location line="+773"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1351,6 +1385,11 @@ Example: https://server.my:8787</source>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open in external program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<source>No room open</source>
|
||||
@ -1463,7 +1502,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+53"/>
|
||||
<location filename="../qml/UserProfile.qml" line="+54"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1486,7 +1525,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+781"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+794"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Ελαχιστοποίηση</translation>
|
||||
</message>
|
||||
|
@ -51,7 +51,7 @@
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1951"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1978"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>You joined this room.</translation>
|
||||
</message>
|
||||
@ -126,7 +126,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+779"/>
|
||||
<location line="+796"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation>Invited user: %1</translation>
|
||||
</message>
|
||||
@ -274,13 +274,18 @@
|
||||
<message>
|
||||
<location line="+54"/>
|
||||
<source>Failed to kick %1 from %2: %3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Failed to kick %1 from %2: %3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CommunitiesListItem</name>
|
||||
<message>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+133"/>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+26"/>
|
||||
<source>Hide rooms with this tag or from this community</source>
|
||||
<translation>Hide rooms with this tag or from this community</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+153"/>
|
||||
<source>All rooms</source>
|
||||
<translation>All rooms</translation>
|
||||
</message>
|
||||
@ -474,11 +479,17 @@
|
||||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+548"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+559"/>
|
||||
<source>-- Encrypted Event (No keys found for decryption) --</source>
|
||||
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment>
|
||||
<translation>-- Encrypted Event (No keys found for decryption) --</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>-- Encrypted Event (Key not valid for this index) --</source>
|
||||
<comment>Placeholder, when the message can't be decrypted with this key since it is not valid for this index </comment>
|
||||
<translation>-- Encrypted Event (Key not valid for this index) --</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<location line="+63"/>
|
||||
@ -557,7 +568,7 @@
|
||||
<translation>All Files (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+340"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation>Failed to upload media. Please try again.</translation>
|
||||
</message>
|
||||
@ -599,7 +610,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation>Password</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+2"/>
|
||||
<source>Your password.</source>
|
||||
<translation>Your password.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Device name</source>
|
||||
<translation>Device name</translation>
|
||||
</message>
|
||||
@ -609,7 +625,17 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation>A name for this device, which will be shown to others, when verifying your devices. If none is provided a default is used.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+4"/>
|
||||
<source>Homeserver address</source>
|
||||
<translation>Homeserver address</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>server.my:8787</source>
|
||||
<translation>server.my:8787</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<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.
|
||||
@ -617,12 +643,20 @@ Example: https://server.my:8787</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+19"/>
|
||||
<location line="+217"/>
|
||||
<location line="+218"/>
|
||||
<source>LOGIN</source>
|
||||
<translation>LOGIN</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-104"/>
|
||||
<location line="-151"/>
|
||||
<location line="+11"/>
|
||||
<location line="+157"/>
|
||||
<location line="+11"/>
|
||||
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
|
||||
<translation>You have entered an invalid Matrix ID e.g @joe:matrix.org</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-132"/>
|
||||
<source>Autodiscovery failed. Received malformed response.</source>
|
||||
<translation>Autodiscovery failed. Received malformed response.</translation>
|
||||
</message>
|
||||
@ -767,7 +801,7 @@ Example: https://server.my:8787</translation>
|
||||
<translation>Write a message…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+152"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji</source>
|
||||
<translation>Emoji</translation>
|
||||
</message>
|
||||
@ -874,7 +908,7 @@ Example: https://server.my:8787</translation>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+182"/>
|
||||
<location filename="../../src/main.cpp" line="+179"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</translation>
|
||||
</message>
|
||||
@ -977,7 +1011,7 @@ Example: https://server.my:8787</translation>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1859"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1868"/>
|
||||
<source>no version stored</source>
|
||||
<translation>no version stored</translation>
|
||||
</message>
|
||||
@ -1019,7 +1053,7 @@ Example: https://server.my:8787</translation>
|
||||
<translation>Adds or removes the specified tag.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+38"/>
|
||||
<location line="+39"/>
|
||||
<source>New tag...</source>
|
||||
<comment>Add a new tag to the room</comment>
|
||||
<translation>New tag…</translation>
|
||||
@ -1119,7 +1153,7 @@ Example: https://server.my:8787</translation>
|
||||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+864"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+860"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation>Message redaction failed: %1</translation>
|
||||
</message>
|
||||
@ -1130,7 +1164,7 @@ Example: https://server.my:8787</translation>
|
||||
<translation>Failed to encrypt event, sending aborted!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+156"/>
|
||||
<location line="+164"/>
|
||||
<source>Save image</source>
|
||||
<translation>Save image</translation>
|
||||
</message>
|
||||
@ -1150,7 +1184,7 @@ Example: https://server.my:8787</translation>
|
||||
<translation>Save file</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+129"/>
|
||||
<location line="+143"/>
|
||||
<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>
|
||||
@ -1269,12 +1303,12 @@ Example: https://server.my:8787</translation>
|
||||
<translation>%1 redacted their knock.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-749"/>
|
||||
<location line="-771"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>You joined this room.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+751"/>
|
||||
<location line="+773"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation>Rejected the knock from %1.</translation>
|
||||
</message>
|
||||
@ -1355,6 +1389,11 @@ Example: https://server.my:8787</translation>
|
||||
<source>Save as</source>
|
||||
<translation>Save as</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open in external program</source>
|
||||
<translation>Open in external program</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<source>No room open</source>
|
||||
@ -1467,7 +1506,7 @@ Example: https://server.my:8787</translation>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+53"/>
|
||||
<location filename="../qml/UserProfile.qml" line="+54"/>
|
||||
<source>Verify</source>
|
||||
<translation>Verify</translation>
|
||||
</message>
|
||||
@ -1490,7 +1529,7 @@ Example: https://server.my:8787</translation>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+781"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+794"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Minimize to tray</translation>
|
||||
</message>
|
||||
|
@ -51,7 +51,7 @@
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1951"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1978"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Vi aliĝis ĉi tiun ĉambron.</translation>
|
||||
</message>
|
||||
@ -126,7 +126,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+779"/>
|
||||
<location line="+796"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -281,7 +281,12 @@
|
||||
<context>
|
||||
<name>CommunitiesListItem</name>
|
||||
<message>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+133"/>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+26"/>
|
||||
<source>Hide rooms with this tag or from this community</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+153"/>
|
||||
<source>All rooms</source>
|
||||
<translation>Ĉiuj ĉambroj</translation>
|
||||
</message>
|
||||
@ -475,11 +480,17 @@
|
||||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+548"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+559"/>
|
||||
<source>-- Encrypted Event (No keys found for decryption) --</source>
|
||||
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>-- Encrypted Event (Key not valid for this index) --</source>
|
||||
<comment>Placeholder, when the message can't be decrypted with this key since it is not valid for this index </comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<location line="+63"/>
|
||||
@ -558,7 +569,7 @@
|
||||
<translation type="unfinished">Ĉiuj dosieroj (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+340"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -597,7 +608,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation type="unfinished">Pasvorto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+2"/>
|
||||
<source>Your password.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Device name</source>
|
||||
<translation>Aparata nomo</translation>
|
||||
</message>
|
||||
@ -608,7 +624,17 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation>Nomo por ĉi tiu aparato, montrot al aliaj, kiam kontrolant viajn aparatojn. Se neniom provizitis, defaŭlto uzit.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+4"/>
|
||||
<source>Homeserver address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>The address that can be used to contact you homeservers client API.
|
||||
Example: https://server.my:8787</source>
|
||||
<translatorcomment>API should be valid for the EO translation of application programming interface.</translatorcomment>
|
||||
@ -617,13 +643,21 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+19"/>
|
||||
<location line="+217"/>
|
||||
<location line="+218"/>
|
||||
<source>LOGIN</source>
|
||||
<translatorcomment>Maybe shouldn't be imperative?</translatorcomment>
|
||||
<translation>ENSALUTU</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-104"/>
|
||||
<location line="-151"/>
|
||||
<location line="+11"/>
|
||||
<location line="+157"/>
|
||||
<location line="+11"/>
|
||||
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-132"/>
|
||||
<source>Autodiscovery failed. Received malformed response.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -768,7 +802,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
||||
<translation type="unfinished">Skribu mesaĝon...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+152"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -875,7 +909,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+182"/>
|
||||
<location filename="../../src/main.cpp" line="+179"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -978,7 +1012,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1859"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1868"/>
|
||||
<source>no version stored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1020,7 +1054,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+38"/>
|
||||
<location line="+39"/>
|
||||
<source>New tag...</source>
|
||||
<comment>Add a new tag to the room</comment>
|
||||
<translation>Nova etikedo...</translation>
|
||||
@ -1122,7 +1156,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
||||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+864"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+860"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1133,7 +1167,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+156"/>
|
||||
<location line="+164"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1153,7 +1187,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+129"/>
|
||||
<location line="+143"/>
|
||||
<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>
|
||||
@ -1274,12 +1308,12 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-749"/>
|
||||
<location line="-771"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Vi aliĝis ĉi tiun ĉambron.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+751"/>
|
||||
<location line="+773"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1360,6 +1394,11 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open in external program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<source>No room open</source>
|
||||
@ -1472,7 +1511,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+53"/>
|
||||
<location filename="../qml/UserProfile.qml" line="+54"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1495,7 +1534,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+781"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+794"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -51,7 +51,7 @@
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1951"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1978"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Sa liitusid selle jututoaga.</translation>
|
||||
</message>
|
||||
@ -126,7 +126,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+779"/>
|
||||
<location line="+796"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation>Kutsutud kasutaja: %1</translation>
|
||||
</message>
|
||||
@ -274,13 +274,18 @@
|
||||
<message>
|
||||
<location line="+54"/>
|
||||
<source>Failed to kick %1 from %2: %3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Kasutaja %1 väljamüksamine %2 jututoast ei õnnestunud: %3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CommunitiesListItem</name>
|
||||
<message>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+133"/>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+26"/>
|
||||
<source>Hide rooms with this tag or from this community</source>
|
||||
<translation>Peida sellest kogukonnast antud sildiga jututoad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+153"/>
|
||||
<source>All rooms</source>
|
||||
<translation>Kõik jututoad</translation>
|
||||
</message>
|
||||
@ -474,11 +479,17 @@
|
||||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+548"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+559"/>
|
||||
<source>-- Encrypted Event (No keys found for decryption) --</source>
|
||||
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment>
|
||||
<translation>-- Krüptitud sündmus (Dekrüptimisvõtmeid ei leidunud) --</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>-- Encrypted Event (Key not valid for this index) --</source>
|
||||
<comment>Placeholder, when the message can't be decrypted with this key since it is not valid for this index </comment>
|
||||
<translation>-- Krüptitud sündmus (võti pole selle indeksi jaoks sobilik) --</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<location line="+63"/>
|
||||
@ -557,7 +568,7 @@
|
||||
<translation>Kõik failid (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+340"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation>Meediafailide üleslaadimine ei õnnestunud. Palun proovi uuesti.</translation>
|
||||
</message>
|
||||
@ -599,7 +610,12 @@ Kui Nheko ei suuda tuvastada sinu koduserverit, siis ta kuvab sulle andmevälja
|
||||
<translation>Salasõna</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+2"/>
|
||||
<source>Your password.</source>
|
||||
<translation>Sinu salasõna.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Device name</source>
|
||||
<translation>Seadme nimi</translation>
|
||||
</message>
|
||||
@ -609,7 +625,17 @@ Kui Nheko ei suuda tuvastada sinu koduserverit, siis ta kuvab sulle andmevälja
|
||||
<translation>Selle seadme nimi, mida näidetakse verifitseerimise ajal teisele kasutajatele. Kui sa ise nime ei pane, siis kasutame automaatselt pandud nime.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+4"/>
|
||||
<source>Homeserver address</source>
|
||||
<translation>Koduserveri aadress</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>server.my:8787</source>
|
||||
<translation>server.minu:8787</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>The address that can be used to contact you homeservers client API.
|
||||
Example: https://server.my:8787</source>
|
||||
<translation>Aadress, mida sinu koduserveri kliendipoole API kasutab.
|
||||
@ -617,12 +643,20 @@ Näiteks: https://server.minu:8787</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+19"/>
|
||||
<location line="+217"/>
|
||||
<location line="+218"/>
|
||||
<source>LOGIN</source>
|
||||
<translation>LOGI SISSE</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-104"/>
|
||||
<location line="-151"/>
|
||||
<location line="+11"/>
|
||||
<location line="+157"/>
|
||||
<location line="+11"/>
|
||||
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
|
||||
<translation>Sisestatud Matrix'i kasutajatunnus on vigane - peaks olema @kasutaja:server.tld</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-132"/>
|
||||
<source>Autodiscovery failed. Received malformed response.</source>
|
||||
<translation>Koduserveri automaatne tuvastamine ei õnnestunud: päringuvastus oli vigane.</translation>
|
||||
</message>
|
||||
@ -767,7 +801,7 @@ Näiteks: https://server.minu:8787</translation>
|
||||
<translation>Kirjuta sõnum…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+152"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji</source>
|
||||
<translation>Emoji</translation>
|
||||
</message>
|
||||
@ -874,7 +908,7 @@ Näiteks: https://server.minu:8787</translation>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+182"/>
|
||||
<location filename="../../src/main.cpp" line="+179"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation>Loo unikaalne profiil, mis võimaldab sul logida samaaegselt sisse erinevatele kasutajakontodele ning käivitada mitu Nheko programmiakent.</translation>
|
||||
</message>
|
||||
@ -977,7 +1011,7 @@ Näiteks: https://server.minu:8787</translation>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1859"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1868"/>
|
||||
<source>no version stored</source>
|
||||
<translation>salvestatud versiooni ei leidu</translation>
|
||||
</message>
|
||||
@ -1019,7 +1053,7 @@ Näiteks: https://server.minu:8787</translation>
|
||||
<translation>Lisab või eemaldab selle sildi.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+38"/>
|
||||
<location line="+39"/>
|
||||
<source>New tag...</source>
|
||||
<comment>Add a new tag to the room</comment>
|
||||
<translation>Uus silt…</translation>
|
||||
@ -1119,7 +1153,7 @@ Näiteks: https://server.minu:8787</translation>
|
||||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+864"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+860"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation>Sõnumi ümbersõnastamine ebaõnnestus: %1</translation>
|
||||
</message>
|
||||
@ -1130,7 +1164,7 @@ Näiteks: https://server.minu:8787</translation>
|
||||
<translation>Sündmuse krüptimine ei õnnestunud, katkestame saatmise!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+156"/>
|
||||
<location line="+164"/>
|
||||
<source>Save image</source>
|
||||
<translation>Salvesta pilt</translation>
|
||||
</message>
|
||||
@ -1150,7 +1184,7 @@ Näiteks: https://server.minu:8787</translation>
|
||||
<translation>Salvesta fail</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+129"/>
|
||||
<location line="+143"/>
|
||||
<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>
|
||||
@ -1269,12 +1303,12 @@ Näiteks: https://server.minu:8787</translation>
|
||||
<translation>%1 muutis oma koputust jututoa uksele.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-749"/>
|
||||
<location line="-771"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Sa liitusid jututoaga.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+751"/>
|
||||
<location line="+773"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation>Lükkas tagasi %1 koputuse jututoa uksele.</translation>
|
||||
</message>
|
||||
@ -1355,6 +1389,11 @@ Näiteks: https://server.minu:8787</translation>
|
||||
<source>Save as</source>
|
||||
<translation>Salvesta kui</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open in external program</source>
|
||||
<translation>Ava välise rakendusega</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<source>No room open</source>
|
||||
@ -1467,7 +1506,7 @@ Näiteks: https://server.minu:8787</translation>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+53"/>
|
||||
<location filename="../qml/UserProfile.qml" line="+54"/>
|
||||
<source>Verify</source>
|
||||
<translation>Verifitseeri</translation>
|
||||
</message>
|
||||
@ -1490,7 +1529,7 @@ Näiteks: https://server.minu:8787</translation>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+781"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+794"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Vähenda tegumiribale</translation>
|
||||
</message>
|
||||
|
@ -51,7 +51,7 @@
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1951"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1978"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -94,7 +94,7 @@
|
||||
<message>
|
||||
<location line="+11"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished">Hyväksy</translation>
|
||||
<translation>Hyväksy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
@ -109,7 +109,7 @@
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Decline</source>
|
||||
<translation type="unfinished">Hylkää</translation>
|
||||
<translation>Hylkää</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-28"/>
|
||||
@ -126,7 +126,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+779"/>
|
||||
<location line="+796"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -280,7 +280,12 @@
|
||||
<context>
|
||||
<name>CommunitiesListItem</name>
|
||||
<message>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+133"/>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+26"/>
|
||||
<source>Hide rooms with this tag or from this community</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+153"/>
|
||||
<source>All rooms</source>
|
||||
<translation>Kaikki huoneet</translation>
|
||||
</message>
|
||||
@ -474,11 +479,17 @@
|
||||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+548"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+559"/>
|
||||
<source>-- Encrypted Event (No keys found for decryption) --</source>
|
||||
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment>
|
||||
<translation>-- Salattu viesti (salauksen purkuavaimia ei löydetty) --</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>-- Encrypted Event (Key not valid for this index) --</source>
|
||||
<comment>Placeholder, when the message can't be decrypted with this key since it is not valid for this index </comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<location line="+63"/>
|
||||
@ -554,10 +565,10 @@
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>All Files (*)</source>
|
||||
<translation type="unfinished">Kaikki Tiedostot (*)</translation>
|
||||
<translation>Kaikki Tiedostot (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+340"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -596,7 +607,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation>Salasana</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+2"/>
|
||||
<source>Your password.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Device name</source>
|
||||
<translation>Laitteen nimi</translation>
|
||||
</message>
|
||||
@ -606,19 +622,37 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+4"/>
|
||||
<source>Homeserver address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<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="+19"/>
|
||||
<location line="+217"/>
|
||||
<location line="+218"/>
|
||||
<source>LOGIN</source>
|
||||
<translation>KIRJAUDU</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-104"/>
|
||||
<location line="-151"/>
|
||||
<location line="+11"/>
|
||||
<location line="+157"/>
|
||||
<location line="+11"/>
|
||||
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-132"/>
|
||||
<source>Autodiscovery failed. Received malformed response.</source>
|
||||
<translation>Palvelimen tietojen hakeminen epäonnistui: virheellinen vastaus.</translation>
|
||||
</message>
|
||||
@ -763,7 +797,7 @@ Example: https://server.my:8787</source>
|
||||
<translation>Kirjoita viesti…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+152"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji</source>
|
||||
<translation type="unfinished">Emoji</translation>
|
||||
</message>
|
||||
@ -856,7 +890,7 @@ Example: https://server.my:8787</source>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Peruuta</translation>
|
||||
<translation>Peruuta</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -870,7 +904,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+182"/>
|
||||
<location filename="../../src/main.cpp" line="+179"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -973,7 +1007,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1859"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1868"/>
|
||||
<source>no version stored</source>
|
||||
<translation>ei tallennettua versiota</translation>
|
||||
</message>
|
||||
@ -1015,7 +1049,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+38"/>
|
||||
<location line="+39"/>
|
||||
<source>New tag...</source>
|
||||
<comment>Add a new tag to the room</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
@ -1115,7 +1149,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+864"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+860"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation>Viestin muokkaus epäonnistui: %1</translation>
|
||||
</message>
|
||||
@ -1126,7 +1160,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+156"/>
|
||||
<location line="+164"/>
|
||||
<source>Save image</source>
|
||||
<translation>Tallenna kuva</translation>
|
||||
</message>
|
||||
@ -1146,7 +1180,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+129"/>
|
||||
<location line="+143"/>
|
||||
<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>
|
||||
@ -1265,12 +1299,12 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-749"/>
|
||||
<location line="-771"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+751"/>
|
||||
<location line="+773"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1351,6 +1385,11 @@ Example: https://server.my:8787</source>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open in external program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<source>No room open</source>
|
||||
@ -1463,7 +1502,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+53"/>
|
||||
<location filename="../qml/UserProfile.qml" line="+54"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1486,7 +1525,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+781"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+794"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Pienennä ilmoitusalueelle</translation>
|
||||
</message>
|
||||
@ -1856,7 +1895,7 @@ This usually causes the application icon in the task bar to animate in some fash
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>All Files (*)</source>
|
||||
<translation type="unfinished">Kaikki Tiedostot (*)</translation>
|
||||
<translation>Kaikki Tiedostot (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+225"/>
|
||||
|
@ -51,7 +51,7 @@
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1951"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1978"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Vous avez rejoint ce salon.</translation>
|
||||
</message>
|
||||
@ -126,7 +126,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+779"/>
|
||||
<location line="+796"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation>%1 a été invité(e)</translation>
|
||||
</message>
|
||||
@ -280,7 +280,12 @@
|
||||
<context>
|
||||
<name>CommunitiesListItem</name>
|
||||
<message>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+133"/>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+26"/>
|
||||
<source>Hide rooms with this tag or from this community</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+153"/>
|
||||
<source>All rooms</source>
|
||||
<translation>Tous les salons</translation>
|
||||
</message>
|
||||
@ -474,11 +479,17 @@
|
||||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+548"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+559"/>
|
||||
<source>-- Encrypted Event (No keys found for decryption) --</source>
|
||||
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment>
|
||||
<translation>-- Évènement chiffré (pas de clé trouvée pour le déchiffrement) --</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>-- Encrypted Event (Key not valid for this index) --</source>
|
||||
<comment>Placeholder, when the message can't be decrypted with this key since it is not valid for this index </comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<location line="+63"/>
|
||||
@ -557,7 +568,7 @@
|
||||
<translation>Tous les types de fichiers (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+340"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation>Échec de l'envoi du média. Veuillez réessayer.</translation>
|
||||
</message>
|
||||
@ -599,7 +610,12 @@ Si Nheko n'arrive pas à trouver votre serveur, il vous proposera de l&apos
|
||||
<translation>Mot de passe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+2"/>
|
||||
<source>Your password.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Device name</source>
|
||||
<translation>Nom de l'appareil</translation>
|
||||
</message>
|
||||
@ -609,7 +625,17 @@ Si Nheko n'arrive pas à trouver votre serveur, il vous proposera de l&apos
|
||||
<translation>Un nom pour cet appareil, qui sera montré aux autres utilisateurs lorsque ceux-ci le vérifieront. Si aucun n'est fourni, un nom par défaut est utilisé.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+4"/>
|
||||
<source>Homeserver address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>The address that can be used to contact you homeservers client API.
|
||||
Example: https://server.my:8787</source>
|
||||
<translation>L'adresse qui peut être utilisée pour joindre l'API client de votre serveur.
|
||||
@ -617,12 +643,20 @@ Exemple : https ://monserveur.example.com :8787</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+19"/>
|
||||
<location line="+217"/>
|
||||
<location line="+218"/>
|
||||
<source>LOGIN</source>
|
||||
<translation>CONNEXION</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-104"/>
|
||||
<location line="-151"/>
|
||||
<location line="+11"/>
|
||||
<location line="+157"/>
|
||||
<location line="+11"/>
|
||||
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-132"/>
|
||||
<source>Autodiscovery failed. Received malformed response.</source>
|
||||
<translation>Échec de la découverte automatique. Réponse mal formatée reçue.</translation>
|
||||
</message>
|
||||
@ -767,7 +801,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
|
||||
<translation>Écrivez un message…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+152"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji</source>
|
||||
<translation>Émoji</translation>
|
||||
</message>
|
||||
@ -874,7 +908,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+182"/>
|
||||
<location filename="../../src/main.cpp" line="+179"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation>Créer un profil unique, vous permettant de vous connecter simultanément à plusieurs comptes et à lancer plusieurs instances de nheko.</translation>
|
||||
</message>
|
||||
@ -977,7 +1011,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1859"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1868"/>
|
||||
<source>no version stored</source>
|
||||
<translation>pas de version enregistrée</translation>
|
||||
</message>
|
||||
@ -1019,7 +1053,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
|
||||
<translation>Ajoute ou retire l'étiquette spécifiée.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+38"/>
|
||||
<location line="+39"/>
|
||||
<source>New tag...</source>
|
||||
<comment>Add a new tag to the room</comment>
|
||||
<translation>Nouvelle étiquette…</translation>
|
||||
@ -1119,7 +1153,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
|
||||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+864"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+860"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation>Échec de la suppression du message : %1</translation>
|
||||
</message>
|
||||
@ -1130,7 +1164,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
|
||||
<translation>Échec du chiffrement de l'évènement, envoi abandonné !</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+156"/>
|
||||
<location line="+164"/>
|
||||
<source>Save image</source>
|
||||
<translation>Enregistrer l'image</translation>
|
||||
</message>
|
||||
@ -1150,7 +1184,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
|
||||
<translation>Enregistrer le fichier</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+129"/>
|
||||
<location line="+143"/>
|
||||
<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>
|
||||
@ -1269,12 +1303,12 @@ Exemple : https ://monserveur.example.com :8787</translation>
|
||||
<translation>%1 ne frappe plus au salon.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-749"/>
|
||||
<location line="-771"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Vous avez rejoint ce salon.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+751"/>
|
||||
<location line="+773"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation>%1 a été rejeté après avoir frappé au salon.</translation>
|
||||
</message>
|
||||
@ -1355,6 +1389,11 @@ Exemple : https ://monserveur.example.com :8787</translation>
|
||||
<source>Save as</source>
|
||||
<translation>Enregistrer sous</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open in external program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<source>No room open</source>
|
||||
@ -1467,7 +1506,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+53"/>
|
||||
<location filename="../qml/UserProfile.qml" line="+54"/>
|
||||
<source>Verify</source>
|
||||
<translation>Vérifier</translation>
|
||||
</message>
|
||||
@ -1490,7 +1529,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+781"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+794"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Réduire à la barre des tâches</translation>
|
||||
</message>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -51,7 +51,7 @@
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1951"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1978"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Sei entrato in questa stanza.</translation>
|
||||
</message>
|
||||
@ -126,7 +126,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+779"/>
|
||||
<location line="+796"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation>Invitato utente: %1</translation>
|
||||
</message>
|
||||
@ -280,7 +280,12 @@
|
||||
<context>
|
||||
<name>CommunitiesListItem</name>
|
||||
<message>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+133"/>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+26"/>
|
||||
<source>Hide rooms with this tag or from this community</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+153"/>
|
||||
<source>All rooms</source>
|
||||
<translation>Tutte le stanze</translation>
|
||||
</message>
|
||||
@ -474,11 +479,17 @@
|
||||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+548"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+559"/>
|
||||
<source>-- Encrypted Event (No keys found for decryption) --</source>
|
||||
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment>
|
||||
<translation type="unfinished">-- Evento Criptato (Chiavi per la decriptazione non trovate) --</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>-- Encrypted Event (Key not valid for this index) --</source>
|
||||
<comment>Placeholder, when the message can't be decrypted with this key since it is not valid for this index </comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<location line="+63"/>
|
||||
@ -557,7 +568,7 @@
|
||||
<translation type="unfinished">Tutti i File (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+340"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished">Impossibile inviare il file multimediale. Per favore riprova.</translation>
|
||||
</message>
|
||||
@ -599,7 +610,12 @@ Se Nheko non conclude la ricerca del tuo homeserver, ti mostrerà un campo in cu
|
||||
<translation>Password</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+2"/>
|
||||
<source>Your password.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Device name</source>
|
||||
<translation>Nome del dispositivo</translation>
|
||||
</message>
|
||||
@ -609,7 +625,17 @@ Se Nheko non conclude la ricerca del tuo homeserver, ti mostrerà un campo in cu
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+4"/>
|
||||
<source>Homeserver address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>The address that can be used to contact you homeservers client API.
|
||||
Example: https://server.my:8787</source>
|
||||
<translation>L'indirizzo che può essere usato per contattare le API client del tuo homeserver.
|
||||
@ -617,12 +643,20 @@ Esempio: https://server.mio:8787</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+19"/>
|
||||
<location line="+217"/>
|
||||
<location line="+218"/>
|
||||
<source>LOGIN</source>
|
||||
<translation>ACCEDI</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-104"/>
|
||||
<location line="-151"/>
|
||||
<location line="+11"/>
|
||||
<location line="+157"/>
|
||||
<location line="+11"/>
|
||||
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-132"/>
|
||||
<source>Autodiscovery failed. Received malformed response.</source>
|
||||
<translation>Ricerca automatica fallita. Ricevuta risposta malformata.</translation>
|
||||
</message>
|
||||
@ -767,7 +801,7 @@ Esempio: https://server.mio:8787</translation>
|
||||
<translation type="unfinished">Scrivi un messaggio…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+152"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji</source>
|
||||
<translation type="unfinished">Emoji</translation>
|
||||
</message>
|
||||
@ -874,7 +908,7 @@ Esempio: https://server.mio:8787</translation>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+182"/>
|
||||
<location filename="../../src/main.cpp" line="+179"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -977,7 +1011,7 @@ Esempio: https://server.mio:8787</translation>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1859"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1868"/>
|
||||
<source>no version stored</source>
|
||||
<translation>nessuna versione memorizzata</translation>
|
||||
</message>
|
||||
@ -1019,7 +1053,7 @@ Esempio: https://server.mio:8787</translation>
|
||||
<translation type="unfinished">Aggiungi o rimuovi il tag specificato.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+38"/>
|
||||
<location line="+39"/>
|
||||
<source>New tag...</source>
|
||||
<comment>Add a new tag to the room</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
@ -1119,7 +1153,7 @@ Esempio: https://server.mio:8787</translation>
|
||||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+864"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+860"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation>Oscuramento del messaggio fallito: %1</translation>
|
||||
</message>
|
||||
@ -1130,7 +1164,7 @@ Esempio: https://server.mio:8787</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+156"/>
|
||||
<location line="+164"/>
|
||||
<source>Save image</source>
|
||||
<translation>Salva immagine</translation>
|
||||
</message>
|
||||
@ -1150,7 +1184,7 @@ Esempio: https://server.mio:8787</translation>
|
||||
<translation>Salva file</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+129"/>
|
||||
<location line="+143"/>
|
||||
<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>
|
||||
@ -1269,12 +1303,12 @@ Esempio: https://server.mio:8787</translation>
|
||||
<translation>%1 ha oscurato la sua bussata.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-749"/>
|
||||
<location line="-771"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Sei entrato in questa stanza.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+751"/>
|
||||
<location line="+773"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation>Rifiutata la bussata di %1.</translation>
|
||||
</message>
|
||||
@ -1355,6 +1389,11 @@ Esempio: https://server.mio:8787</translation>
|
||||
<source>Save as</source>
|
||||
<translation>Salva come</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open in external program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<source>No room open</source>
|
||||
@ -1467,7 +1506,7 @@ Esempio: https://server.mio:8787</translation>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+53"/>
|
||||
<location filename="../qml/UserProfile.qml" line="+54"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1490,7 +1529,7 @@ Esempio: https://server.mio:8787</translation>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+781"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+794"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Minimizza nella tray</translation>
|
||||
</message>
|
||||
|
@ -51,7 +51,7 @@
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1951"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1978"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -126,7 +126,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+779"/>
|
||||
<location line="+796"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation>招待されたユーザー: %1</translation>
|
||||
</message>
|
||||
@ -280,7 +280,12 @@
|
||||
<context>
|
||||
<name>CommunitiesListItem</name>
|
||||
<message>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+133"/>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+26"/>
|
||||
<source>Hide rooms with this tag or from this community</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+153"/>
|
||||
<source>All rooms</source>
|
||||
<translation>全ての部屋</translation>
|
||||
</message>
|
||||
@ -474,11 +479,17 @@
|
||||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+548"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+559"/>
|
||||
<source>-- Encrypted Event (No keys found for decryption) --</source>
|
||||
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment>
|
||||
<translation type="unfinished">-- 暗号化イベント (復号鍵が見つかりません) --</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>-- Encrypted Event (Key not valid for this index) --</source>
|
||||
<comment>Placeholder, when the message can't be decrypted with this key since it is not valid for this index </comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<location line="+63"/>
|
||||
@ -557,7 +568,7 @@
|
||||
<translation type="unfinished">全てのファイル (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+340"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished">メディアをアップロードできませんでした。やり直して下さい。</translation>
|
||||
</message>
|
||||
@ -596,7 +607,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation>パスワード</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+2"/>
|
||||
<source>Your password.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Device name</source>
|
||||
<translation>デバイス名</translation>
|
||||
</message>
|
||||
@ -606,19 +622,37 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+4"/>
|
||||
<source>Homeserver address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<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="+19"/>
|
||||
<location line="+217"/>
|
||||
<location line="+218"/>
|
||||
<source>LOGIN</source>
|
||||
<translation>ログイン</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-104"/>
|
||||
<location line="-151"/>
|
||||
<location line="+11"/>
|
||||
<location line="+157"/>
|
||||
<location line="+11"/>
|
||||
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-132"/>
|
||||
<source>Autodiscovery failed. Received malformed response.</source>
|
||||
<translation>自動検出できませんでした。不正な形式の応答を受信しました。</translation>
|
||||
</message>
|
||||
@ -763,7 +797,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished">メッセージを書く...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+152"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji</source>
|
||||
<translation type="unfinished">絵文字</translation>
|
||||
</message>
|
||||
@ -870,7 +904,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+182"/>
|
||||
<location filename="../../src/main.cpp" line="+179"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -973,7 +1007,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1859"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1868"/>
|
||||
<source>no version stored</source>
|
||||
<translation>バージョンが保存されていません</translation>
|
||||
</message>
|
||||
@ -1015,7 +1049,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+38"/>
|
||||
<location line="+39"/>
|
||||
<source>New tag...</source>
|
||||
<comment>Add a new tag to the room</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
@ -1115,7 +1149,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+864"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+860"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation>メッセージを編集できませんでした: %1</translation>
|
||||
</message>
|
||||
@ -1126,7 +1160,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+156"/>
|
||||
<location line="+164"/>
|
||||
<source>Save image</source>
|
||||
<translation>画像を保存</translation>
|
||||
</message>
|
||||
@ -1146,7 +1180,7 @@ Example: https://server.my:8787</source>
|
||||
<translation>ファイルを保存</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+129"/>
|
||||
<location line="+143"/>
|
||||
<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>
|
||||
@ -1264,12 +1298,12 @@ Example: https://server.my:8787</source>
|
||||
<translation>%1がノックを編集しました。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-749"/>
|
||||
<location line="-771"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+751"/>
|
||||
<location line="+773"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation>%1からのノックを拒否しました。</translation>
|
||||
</message>
|
||||
@ -1350,6 +1384,11 @@ Example: https://server.my:8787</source>
|
||||
<source>Save as</source>
|
||||
<translation>名前を付けて保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open in external program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<source>No room open</source>
|
||||
@ -1462,7 +1501,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+53"/>
|
||||
<location filename="../qml/UserProfile.qml" line="+54"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1485,7 +1524,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+781"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+794"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>トレイへ最小化</translation>
|
||||
</message>
|
||||
|
2452
resources/langs/nheko_ml.ts
Normal file
2452
resources/langs/nheko_ml.ts
Normal file
File diff suppressed because it is too large
Load Diff
@ -51,9 +51,9 @@
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1951"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1978"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Je bent lid geworden van deze kamer.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -122,13 +122,13 @@
|
||||
<message>
|
||||
<location filename="../../src/ChatPage.cpp" line="+211"/>
|
||||
<source>Failed to invite user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Gebruiker uitnodigen mislukt: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+779"/>
|
||||
<location line="+796"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Gebruiker uitgenodigd: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-500"/>
|
||||
@ -138,7 +138,7 @@
|
||||
<message>
|
||||
<location line="+456"/>
|
||||
<source>Room %1 created.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Kamer %1 gecreëerd.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+27"/>
|
||||
@ -280,7 +280,12 @@
|
||||
<context>
|
||||
<name>CommunitiesListItem</name>
|
||||
<message>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+133"/>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+26"/>
|
||||
<source>Hide rooms with this tag or from this community</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+153"/>
|
||||
<source>All rooms</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -474,11 +479,17 @@
|
||||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+548"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+559"/>
|
||||
<source>-- Encrypted Event (No keys found for decryption) --</source>
|
||||
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>-- Encrypted Event (Key not valid for this index) --</source>
|
||||
<comment>Placeholder, when the message can't be decrypted with this key since it is not valid for this index </comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<location line="+63"/>
|
||||
@ -557,7 +568,7 @@
|
||||
<translation type="unfinished">Alle bestanden (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+340"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -596,7 +607,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation>Wachtwoord</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+2"/>
|
||||
<source>Your password.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Device name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -606,19 +622,37 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+4"/>
|
||||
<source>Homeserver address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<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="+19"/>
|
||||
<location line="+217"/>
|
||||
<location line="+218"/>
|
||||
<source>LOGIN</source>
|
||||
<translation>INLOGGEN</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-104"/>
|
||||
<location line="-151"/>
|
||||
<location line="+11"/>
|
||||
<location line="+157"/>
|
||||
<location line="+11"/>
|
||||
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-132"/>
|
||||
<source>Autodiscovery failed. Received malformed response.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -763,7 +797,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished">Typ een bericht...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+152"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -870,7 +904,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+182"/>
|
||||
<location filename="../../src/main.cpp" line="+179"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -973,7 +1007,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1859"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1868"/>
|
||||
<source>no version stored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1015,7 +1049,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+38"/>
|
||||
<location line="+39"/>
|
||||
<source>New tag...</source>
|
||||
<comment>Add a new tag to the room</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
@ -1115,7 +1149,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+864"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+860"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1126,7 +1160,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+156"/>
|
||||
<location line="+164"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished">Afbeelding opslaan</translation>
|
||||
</message>
|
||||
@ -1146,7 +1180,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+129"/>
|
||||
<location line="+143"/>
|
||||
<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 type="unfinished">
|
||||
@ -1265,12 +1299,12 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-749"/>
|
||||
<location line="-771"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation type="unfinished">Je bent lid geworden van deze kamer.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+751"/>
|
||||
<location line="+773"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1351,6 +1385,11 @@ Example: https://server.my:8787</source>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open in external program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<source>No room open</source>
|
||||
@ -1463,7 +1502,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+53"/>
|
||||
<location filename="../qml/UserProfile.qml" line="+54"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1486,7 +1525,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+781"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+794"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Minimaliseren naar systeemvak</translation>
|
||||
</message>
|
||||
|
@ -51,7 +51,7 @@
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1951"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1978"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Dołączyłeś(-łaś) do tego pokoju.</translation>
|
||||
</message>
|
||||
@ -126,7 +126,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+779"/>
|
||||
<location line="+796"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -280,7 +280,12 @@
|
||||
<context>
|
||||
<name>CommunitiesListItem</name>
|
||||
<message>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+133"/>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+26"/>
|
||||
<source>Hide rooms with this tag or from this community</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+153"/>
|
||||
<source>All rooms</source>
|
||||
<translation>Wszystkie pokoje</translation>
|
||||
</message>
|
||||
@ -474,11 +479,17 @@
|
||||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+548"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+559"/>
|
||||
<source>-- Encrypted Event (No keys found for decryption) --</source>
|
||||
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment>
|
||||
<translation>-- Zdarzenie szyfrowania (Nie znaleziono kluczy deszyfrujących)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>-- Encrypted Event (Key not valid for this index) --</source>
|
||||
<comment>Placeholder, when the message can't be decrypted with this key since it is not valid for this index </comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<location line="+63"/>
|
||||
@ -557,7 +568,7 @@
|
||||
<translation type="unfinished">Wszystkie pliki (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+340"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -598,7 +609,12 @@ Jeżeli Nheko nie odnajdzie Twojego serwera domowego, wyświetli formularz umoż
|
||||
<translation>Hasło</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+2"/>
|
||||
<source>Your password.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Device name</source>
|
||||
<translation>Nazwa urządzenia</translation>
|
||||
</message>
|
||||
@ -608,19 +624,37 @@ Jeżeli Nheko nie odnajdzie Twojego serwera domowego, wyświetli formularz umoż
|
||||
<translation>Nazwa dla tego urządzenia, będzie ona widoczna dla innych użytkowników, kiedy będą weryfikować Twoje urządzenia. Jeżeli żadna nie jest podana, używana jest domyślna.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+4"/>
|
||||
<source>Homeserver address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<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="+19"/>
|
||||
<location line="+217"/>
|
||||
<location line="+218"/>
|
||||
<source>LOGIN</source>
|
||||
<translation>ZALOGUJ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-104"/>
|
||||
<location line="-151"/>
|
||||
<location line="+11"/>
|
||||
<location line="+157"/>
|
||||
<location line="+11"/>
|
||||
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-132"/>
|
||||
<source>Autodiscovery failed. Received malformed response.</source>
|
||||
<translation>Automatyczne odkrywanie zakończone niepowodzeniem. Otrzymano nieprawidłową odpowiedź.</translation>
|
||||
</message>
|
||||
@ -765,7 +799,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished">Napisz wiadomość…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+152"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji</source>
|
||||
<translation type="unfinished">Emoji</translation>
|
||||
</message>
|
||||
@ -872,7 +906,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+182"/>
|
||||
<location filename="../../src/main.cpp" line="+179"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation>Stwórz unikalny profil, który pozwoli Ci na zalogowanie się do kilku kont jednocześnie i uruchomienie wielu instancji Nheko.</translation>
|
||||
</message>
|
||||
@ -975,7 +1009,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1859"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1868"/>
|
||||
<source>no version stored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1017,7 +1051,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+38"/>
|
||||
<location line="+39"/>
|
||||
<source>New tag...</source>
|
||||
<comment>Add a new tag to the room</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
@ -1117,7 +1151,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+864"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+860"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished">Redagowanie wiadomości nie powiodło się: %1</translation>
|
||||
</message>
|
||||
@ -1128,7 +1162,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+156"/>
|
||||
<location line="+164"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished">Zapisz obraz</translation>
|
||||
</message>
|
||||
@ -1148,7 +1182,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+129"/>
|
||||
<location line="+143"/>
|
||||
<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 type="unfinished">
|
||||
@ -1268,12 +1302,12 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-749"/>
|
||||
<location line="-771"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished">Dołączyłeś(-łaś) do tego pokoju.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+751"/>
|
||||
<location line="+773"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1354,6 +1388,11 @@ Example: https://server.my:8787</source>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open in external program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<source>No room open</source>
|
||||
@ -1466,7 +1505,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+53"/>
|
||||
<location filename="../qml/UserProfile.qml" line="+54"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1489,7 +1528,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+781"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+794"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Zminimalizuj do paska zadań</translation>
|
||||
</message>
|
||||
|
@ -51,7 +51,7 @@
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1951"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1978"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -126,7 +126,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+779"/>
|
||||
<location line="+796"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -280,7 +280,12 @@
|
||||
<context>
|
||||
<name>CommunitiesListItem</name>
|
||||
<message>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+133"/>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+26"/>
|
||||
<source>Hide rooms with this tag or from this community</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+153"/>
|
||||
<source>All rooms</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -474,11 +479,17 @@
|
||||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+548"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+559"/>
|
||||
<source>-- Encrypted Event (No keys found for decryption) --</source>
|
||||
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>-- Encrypted Event (Key not valid for this index) --</source>
|
||||
<comment>Placeholder, when the message can't be decrypted with this key since it is not valid for this index </comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<location line="+63"/>
|
||||
@ -557,7 +568,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+340"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -596,7 +607,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+2"/>
|
||||
<source>Your password.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Device name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -606,19 +622,37 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+4"/>
|
||||
<source>Homeserver address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<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="+19"/>
|
||||
<location line="+217"/>
|
||||
<location line="+218"/>
|
||||
<source>LOGIN</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-104"/>
|
||||
<location line="-151"/>
|
||||
<location line="+11"/>
|
||||
<location line="+157"/>
|
||||
<location line="+11"/>
|
||||
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-132"/>
|
||||
<source>Autodiscovery failed. Received malformed response.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -763,7 +797,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+152"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -870,7 +904,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+182"/>
|
||||
<location filename="../../src/main.cpp" line="+179"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -973,7 +1007,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1859"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1868"/>
|
||||
<source>no version stored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1015,7 +1049,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+38"/>
|
||||
<location line="+39"/>
|
||||
<source>New tag...</source>
|
||||
<comment>Add a new tag to the room</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
@ -1115,7 +1149,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+864"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+860"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1126,7 +1160,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+156"/>
|
||||
<location line="+164"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1146,7 +1180,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+129"/>
|
||||
<location line="+143"/>
|
||||
<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 type="unfinished">
|
||||
@ -1265,12 +1299,12 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-749"/>
|
||||
<location line="-771"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+751"/>
|
||||
<location line="+773"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1351,6 +1385,11 @@ Example: https://server.my:8787</source>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open in external program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<source>No room open</source>
|
||||
@ -1463,7 +1502,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+53"/>
|
||||
<location filename="../qml/UserProfile.qml" line="+54"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1486,7 +1525,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+781"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+794"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -51,7 +51,7 @@
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1951"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1978"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Te-ai alăturat camerei.</translation>
|
||||
</message>
|
||||
@ -126,7 +126,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+779"/>
|
||||
<location line="+796"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation>Utilizator invitat: %1</translation>
|
||||
</message>
|
||||
@ -280,7 +280,12 @@
|
||||
<context>
|
||||
<name>CommunitiesListItem</name>
|
||||
<message>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+133"/>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+26"/>
|
||||
<source>Hide rooms with this tag or from this community</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+153"/>
|
||||
<source>All rooms</source>
|
||||
<translation>Toate camerele</translation>
|
||||
</message>
|
||||
@ -474,11 +479,17 @@
|
||||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+548"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+559"/>
|
||||
<source>-- Encrypted Event (No keys found for decryption) --</source>
|
||||
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>-- Encrypted Event (Key not valid for this index) --</source>
|
||||
<comment>Placeholder, when the message can't be decrypted with this key since it is not valid for this index </comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<location line="+63"/>
|
||||
@ -557,7 +568,7 @@
|
||||
<translation type="unfinished">Toate fișierele (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+340"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -599,7 +610,12 @@ Dacă Nheko nu vă poate găsi homeserverul, vă va arăta un câmp pentru intro
|
||||
<translation>Parolă</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+2"/>
|
||||
<source>Your password.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Device name</source>
|
||||
<translation>Nume dispozitiv</translation>
|
||||
</message>
|
||||
@ -609,7 +625,17 @@ Dacă Nheko nu vă poate găsi homeserverul, vă va arăta un câmp pentru intro
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+4"/>
|
||||
<source>Homeserver address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>The address that can be used to contact you homeservers client API.
|
||||
Example: https://server.my:8787</source>
|
||||
<translation>Adresa la care se poate contacta APIul homeserverului dumneavoastră.
|
||||
@ -617,12 +643,20 @@ Exemplu: https://serverul.meu:8787</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+19"/>
|
||||
<location line="+217"/>
|
||||
<location line="+218"/>
|
||||
<source>LOGIN</source>
|
||||
<translation>CONECTARE</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-104"/>
|
||||
<location line="-151"/>
|
||||
<location line="+11"/>
|
||||
<location line="+157"/>
|
||||
<location line="+11"/>
|
||||
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-132"/>
|
||||
<source>Autodiscovery failed. Received malformed response.</source>
|
||||
<translation>Autodescoperirea a eșuat. Răspunsul primit este defectuos.</translation>
|
||||
</message>
|
||||
@ -767,7 +801,7 @@ Exemplu: https://serverul.meu:8787</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+152"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -874,7 +908,7 @@ Exemplu: https://serverul.meu:8787</translation>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+182"/>
|
||||
<location filename="../../src/main.cpp" line="+179"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -977,7 +1011,7 @@ Exemplu: https://serverul.meu:8787</translation>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1859"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1868"/>
|
||||
<source>no version stored</source>
|
||||
<translation>nicio versiune stocată</translation>
|
||||
</message>
|
||||
@ -1019,7 +1053,7 @@ Exemplu: https://serverul.meu:8787</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+38"/>
|
||||
<location line="+39"/>
|
||||
<source>New tag...</source>
|
||||
<comment>Add a new tag to the room</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
@ -1119,7 +1153,7 @@ Exemplu: https://serverul.meu:8787</translation>
|
||||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+864"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+860"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation>Redactare mesaj eșuată: %1</translation>
|
||||
</message>
|
||||
@ -1130,7 +1164,7 @@ Exemplu: https://serverul.meu:8787</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+156"/>
|
||||
<location line="+164"/>
|
||||
<source>Save image</source>
|
||||
<translation>Salvați imaginea</translation>
|
||||
</message>
|
||||
@ -1150,7 +1184,7 @@ Exemplu: https://serverul.meu:8787</translation>
|
||||
<translation>Salvați fișier</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+129"/>
|
||||
<location line="+143"/>
|
||||
<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>
|
||||
@ -1270,12 +1304,12 @@ Exemplu: https://serverul.meu:8787</translation>
|
||||
<translation>%1 și-a redactat ciocănitul.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-749"/>
|
||||
<location line="-771"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Te-ai alăturat camerei.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+751"/>
|
||||
<location line="+773"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation>Ciocănit refuzat de la %1.</translation>
|
||||
</message>
|
||||
@ -1356,6 +1390,11 @@ Exemplu: https://serverul.meu:8787</translation>
|
||||
<source>Save as</source>
|
||||
<translation>Salvare ca</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open in external program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<source>No room open</source>
|
||||
@ -1468,7 +1507,7 @@ Exemplu: https://serverul.meu:8787</translation>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+53"/>
|
||||
<location filename="../qml/UserProfile.qml" line="+54"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1491,7 +1530,7 @@ Exemplu: https://serverul.meu:8787</translation>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+781"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+794"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Minimizează în bara de notificări</translation>
|
||||
</message>
|
||||
|
@ -6,18 +6,18 @@
|
||||
<message>
|
||||
<location filename="../qml/voip/ActiveCallBar.qml" line="+66"/>
|
||||
<source>Calling...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Вызов...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<location line="+10"/>
|
||||
<source>Connecting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Соединение...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+76"/>
|
||||
<source>Toggle camera view</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Сменить вид камеры</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
@ -51,7 +51,7 @@
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1951"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1978"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Вы присоединились к этой комнате.</translation>
|
||||
</message>
|
||||
@ -61,17 +61,17 @@
|
||||
<message>
|
||||
<location filename="../qml/voip/CallInvite.qml" line="+66"/>
|
||||
<source>Video Call</source>
|
||||
<translation type="unfinished">Видео Звонок</translation>
|
||||
<translation>Видео Звонок</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Voice Call</source>
|
||||
<translation type="unfinished">Голосовой Звонок</translation>
|
||||
<translation>Голосовой Звонок</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+62"/>
|
||||
<source>No microphone found.</source>
|
||||
<translation type="unfinished">Микрофон не найден.</translation>
|
||||
<translation>Микрофон не найден.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -126,7 +126,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+779"/>
|
||||
<location line="+796"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation>Приглашенный пользователь: %1</translation>
|
||||
</message>
|
||||
@ -280,7 +280,12 @@
|
||||
<context>
|
||||
<name>CommunitiesListItem</name>
|
||||
<message>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+133"/>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+26"/>
|
||||
<source>Hide rooms with this tag or from this community</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+153"/>
|
||||
<source>All rooms</source>
|
||||
<translation>Все комнаты</translation>
|
||||
</message>
|
||||
@ -474,11 +479,17 @@
|
||||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+548"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+559"/>
|
||||
<source>-- Encrypted Event (No keys found for decryption) --</source>
|
||||
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment>
|
||||
<translation>-- Зашифрованное событие (Нет найдено ключей для дешифрования) --</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>-- Encrypted Event (Key not valid for this index) --</source>
|
||||
<comment>Placeholder, when the message can't be decrypted with this key since it is not valid for this index </comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<location line="+63"/>
|
||||
@ -557,7 +568,7 @@
|
||||
<translation>Все файлы (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+340"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation>Не удалось загрузить медиа. Пожалуйста попробуйте ещё раз</translation>
|
||||
</message>
|
||||
@ -599,7 +610,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation>Пароль</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+2"/>
|
||||
<source>Your password.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Device name</source>
|
||||
<translation>Имя устройства</translation>
|
||||
</message>
|
||||
@ -609,7 +625,17 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation>Имя устройства, которое будет отображаться для других, когда верифицируют ваше устройство. Если не предоставить имя устройста,то будет использоваться имя по умолчанию.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+4"/>
|
||||
<source>Homeserver address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>The address that can be used to contact you homeservers client API.
|
||||
Example: https://server.my:8787</source>
|
||||
<translation>Адрес который будет использоваться для связи клиентского API вашего домашнего сервера.
|
||||
@ -617,12 +643,20 @@ Example: https://server.my:8787</source>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+19"/>
|
||||
<location line="+217"/>
|
||||
<location line="+218"/>
|
||||
<source>LOGIN</source>
|
||||
<translation>ВОЙТИ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-104"/>
|
||||
<location line="-151"/>
|
||||
<location line="+11"/>
|
||||
<location line="+157"/>
|
||||
<location line="+11"/>
|
||||
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-132"/>
|
||||
<source>Autodiscovery failed. Received malformed response.</source>
|
||||
<translation>Автообноружение не удалось. Получен поврежденный ответ.</translation>
|
||||
</message>
|
||||
@ -767,7 +801,7 @@ Example: https://server.my:8787</source>
|
||||
<translation>Написать сообщение…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+152"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji</source>
|
||||
<translation>Эмоджи</translation>
|
||||
</message>
|
||||
@ -874,7 +908,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+182"/>
|
||||
<location filename="../../src/main.cpp" line="+179"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation>Создать уникальный профиль, который позволяет вести несколько аккаунтов и запускать множество сущностей nheko. </translation>
|
||||
</message>
|
||||
@ -977,7 +1011,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1859"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1868"/>
|
||||
<source>no version stored</source>
|
||||
<translation>нет сохраненной версии</translation>
|
||||
</message>
|
||||
@ -1019,7 +1053,7 @@ Example: https://server.my:8787</source>
|
||||
<translation>Добавить или удалить выбранные тэг.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+38"/>
|
||||
<location line="+39"/>
|
||||
<source>New tag...</source>
|
||||
<comment>Add a new tag to the room</comment>
|
||||
<translation>Добавить новый тег для комнаты</translation>
|
||||
@ -1119,7 +1153,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+864"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+860"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation>Ошибка редактирования сообщения: %1</translation>
|
||||
</message>
|
||||
@ -1130,7 +1164,7 @@ Example: https://server.my:8787</source>
|
||||
<translation>Не удалось зашифровать сообщение, отправка отменена!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+156"/>
|
||||
<location line="+164"/>
|
||||
<source>Save image</source>
|
||||
<translation>Сохранить изображение</translation>
|
||||
</message>
|
||||
@ -1150,7 +1184,7 @@ Example: https://server.my:8787</source>
|
||||
<translation>Сохранить файл</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+129"/>
|
||||
<location line="+143"/>
|
||||
<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>
|
||||
@ -1270,12 +1304,12 @@ Example: https://server.my:8787</source>
|
||||
<translation>%1 отредактировал его "стук".</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-749"/>
|
||||
<location line="-771"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Вы присоединились к этой комнате.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+751"/>
|
||||
<location line="+773"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation>Отверг "стук" от %1</translation>
|
||||
</message>
|
||||
@ -1356,6 +1390,11 @@ Example: https://server.my:8787</source>
|
||||
<source>Save as</source>
|
||||
<translation>Сохранить как</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open in external program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<source>No room open</source>
|
||||
@ -1468,7 +1507,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+53"/>
|
||||
<location filename="../qml/UserProfile.qml" line="+54"/>
|
||||
<source>Verify</source>
|
||||
<translation>Верифицировать</translation>
|
||||
</message>
|
||||
@ -1491,7 +1530,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+781"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+794"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Сворачивать в системную панель</translation>
|
||||
</message>
|
||||
|
@ -51,7 +51,7 @@
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1951"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1978"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -126,7 +126,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+779"/>
|
||||
<location line="+796"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -280,7 +280,12 @@
|
||||
<context>
|
||||
<name>CommunitiesListItem</name>
|
||||
<message>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+133"/>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+26"/>
|
||||
<source>Hide rooms with this tag or from this community</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+153"/>
|
||||
<source>All rooms</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -474,11 +479,17 @@
|
||||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+548"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+559"/>
|
||||
<source>-- Encrypted Event (No keys found for decryption) --</source>
|
||||
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>-- Encrypted Event (Key not valid for this index) --</source>
|
||||
<comment>Placeholder, when the message can't be decrypted with this key since it is not valid for this index </comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<location line="+63"/>
|
||||
@ -557,7 +568,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+340"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -596,7 +607,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+2"/>
|
||||
<source>Your password.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Device name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -606,19 +622,37 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+4"/>
|
||||
<source>Homeserver address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<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="+19"/>
|
||||
<location line="+217"/>
|
||||
<location line="+218"/>
|
||||
<source>LOGIN</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-104"/>
|
||||
<location line="-151"/>
|
||||
<location line="+11"/>
|
||||
<location line="+157"/>
|
||||
<location line="+11"/>
|
||||
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-132"/>
|
||||
<source>Autodiscovery failed. Received malformed response.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -763,7 +797,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+152"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -870,7 +904,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+182"/>
|
||||
<location filename="../../src/main.cpp" line="+179"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -973,7 +1007,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1859"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1868"/>
|
||||
<source>no version stored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1015,7 +1049,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+38"/>
|
||||
<location line="+39"/>
|
||||
<source>New tag...</source>
|
||||
<comment>Add a new tag to the room</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
@ -1115,7 +1149,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+864"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+860"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1126,7 +1160,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+156"/>
|
||||
<location line="+164"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1146,7 +1180,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+129"/>
|
||||
<location line="+143"/>
|
||||
<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 type="unfinished">
|
||||
@ -1265,12 +1299,12 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-749"/>
|
||||
<location line="-771"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+751"/>
|
||||
<location line="+773"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1351,6 +1385,11 @@ Example: https://server.my:8787</source>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open in external program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<source>No room open</source>
|
||||
@ -1463,7 +1502,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+53"/>
|
||||
<location filename="../qml/UserProfile.qml" line="+54"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1486,7 +1525,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+781"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+794"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -51,7 +51,7 @@
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1951"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1978"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Du gick med i detta rum.</translation>
|
||||
</message>
|
||||
@ -126,7 +126,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+779"/>
|
||||
<location line="+796"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation>Bjöd in användare: %1</translation>
|
||||
</message>
|
||||
@ -280,7 +280,12 @@
|
||||
<context>
|
||||
<name>CommunitiesListItem</name>
|
||||
<message>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+133"/>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+26"/>
|
||||
<source>Hide rooms with this tag or from this community</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+153"/>
|
||||
<source>All rooms</source>
|
||||
<translation>Alla rum</translation>
|
||||
</message>
|
||||
@ -474,11 +479,17 @@
|
||||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+548"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+559"/>
|
||||
<source>-- Encrypted Event (No keys found for decryption) --</source>
|
||||
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment>
|
||||
<translation>-- Krypterat Event (Inga nycklar kunde hittas för dekryptering) --</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>-- Encrypted Event (Key not valid for this index) --</source>
|
||||
<comment>Placeholder, when the message can't be decrypted with this key since it is not valid for this index </comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<location line="+63"/>
|
||||
@ -557,7 +568,7 @@
|
||||
<translation>Alla Filer (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+340"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation>Kunde inte ladda upp media. Vänligen försök igen.</translation>
|
||||
</message>
|
||||
@ -599,7 +610,12 @@ Om Nheko inte kan hitta din hemserver automatiskt kommer ett fält dyka upp där
|
||||
<translation>Lösenord</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+2"/>
|
||||
<source>Your password.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Device name</source>
|
||||
<translation>Enhetsnamn</translation>
|
||||
</message>
|
||||
@ -609,7 +625,17 @@ Om Nheko inte kan hitta din hemserver automatiskt kommer ett fält dyka upp där
|
||||
<translation>Ett namn för denna enhet. Namnet kommer synas för andra när du verifierar dina enheter. Om du inte förser ett namn kommer ett standardnamn användas.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+4"/>
|
||||
<source>Homeserver address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>The address that can be used to contact you homeservers client API.
|
||||
Example: https://server.my:8787</source>
|
||||
<translation>Addressen som kan användas för att kontakta din hemservers klient-API.
|
||||
@ -617,12 +643,20 @@ Exempel: https://server.my:8787</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+19"/>
|
||||
<location line="+217"/>
|
||||
<location line="+218"/>
|
||||
<source>LOGIN</source>
|
||||
<translation>INLOGGNING</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-104"/>
|
||||
<location line="-151"/>
|
||||
<location line="+11"/>
|
||||
<location line="+157"/>
|
||||
<location line="+11"/>
|
||||
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-132"/>
|
||||
<source>Autodiscovery failed. Received malformed response.</source>
|
||||
<translation>Autouppslag misslyckades. Mottog felkonstruerat svar.</translation>
|
||||
</message>
|
||||
@ -767,7 +801,7 @@ Exempel: https://server.my:8787</translation>
|
||||
<translation>Skriv ett meddelande…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+152"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji</source>
|
||||
<translation>Emoji</translation>
|
||||
</message>
|
||||
@ -874,7 +908,7 @@ Exempel: https://server.my:8787</translation>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+182"/>
|
||||
<location filename="../../src/main.cpp" line="+179"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation>Skapa en unik profil, vilket tillåter dig att logga in på flera konton samtidigt och starta flera instanser av Nheko.</translation>
|
||||
</message>
|
||||
@ -977,7 +1011,7 @@ Exempel: https://server.my:8787</translation>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1859"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1868"/>
|
||||
<source>no version stored</source>
|
||||
<translation>ingen version lagrad</translation>
|
||||
</message>
|
||||
@ -1019,7 +1053,7 @@ Exempel: https://server.my:8787</translation>
|
||||
<translation>Lägger till eller tar bort den angivna taggen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+38"/>
|
||||
<location line="+39"/>
|
||||
<source>New tag...</source>
|
||||
<comment>Add a new tag to the room</comment>
|
||||
<translation>Ny tagg…</translation>
|
||||
@ -1119,7 +1153,7 @@ Exempel: https://server.my:8787</translation>
|
||||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+864"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+860"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation>Kunde inte maskera meddelande: %1</translation>
|
||||
</message>
|
||||
@ -1130,7 +1164,7 @@ Exempel: https://server.my:8787</translation>
|
||||
<translation>Kunde inte kryptera event, sändning avbruten!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+156"/>
|
||||
<location line="+164"/>
|
||||
<source>Save image</source>
|
||||
<translation>Spara bild</translation>
|
||||
</message>
|
||||
@ -1150,7 +1184,7 @@ Exempel: https://server.my:8787</translation>
|
||||
<translation>Spara fil</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+129"/>
|
||||
<location line="+143"/>
|
||||
<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>
|
||||
@ -1269,12 +1303,12 @@ Exempel: https://server.my:8787</translation>
|
||||
<translation>%1 maskerade sin knackning.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-749"/>
|
||||
<location line="-771"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Du gick med i detta rum.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+751"/>
|
||||
<location line="+773"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation>Avvisade knackningen från %1.</translation>
|
||||
</message>
|
||||
@ -1355,6 +1389,11 @@ Exempel: https://server.my:8787</translation>
|
||||
<source>Save as</source>
|
||||
<translation>Spara som</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open in external program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<source>No room open</source>
|
||||
@ -1467,7 +1506,7 @@ Exempel: https://server.my:8787</translation>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+53"/>
|
||||
<location filename="../qml/UserProfile.qml" line="+54"/>
|
||||
<source>Verify</source>
|
||||
<translation>Bekräfta</translation>
|
||||
</message>
|
||||
@ -1490,7 +1529,7 @@ Exempel: https://server.my:8787</translation>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+781"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+794"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Minimera till systemtråg</translation>
|
||||
</message>
|
||||
|
@ -51,7 +51,7 @@
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1951"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1978"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>您已加入此房间</translation>
|
||||
</message>
|
||||
@ -126,7 +126,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+779"/>
|
||||
<location line="+796"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation>邀请已发送: %1</translation>
|
||||
</message>
|
||||
@ -280,7 +280,12 @@
|
||||
<context>
|
||||
<name>CommunitiesListItem</name>
|
||||
<message>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+133"/>
|
||||
<location filename="../../src/CommunitiesListItem.cpp" line="+26"/>
|
||||
<source>Hide rooms with this tag or from this community</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+153"/>
|
||||
<source>All rooms</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -474,11 +479,17 @@
|
||||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+548"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+559"/>
|
||||
<source>-- Encrypted Event (No keys found for decryption) --</source>
|
||||
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>-- Encrypted Event (Key not valid for this index) --</source>
|
||||
<comment>Placeholder, when the message can't be decrypted with this key since it is not valid for this index </comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<location line="+63"/>
|
||||
@ -557,7 +568,7 @@
|
||||
<translation type="unfinished">所有文件(*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+340"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -596,7 +607,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation>密码</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+2"/>
|
||||
<source>Your password.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Device name</source>
|
||||
<translation>设备名</translation>
|
||||
</message>
|
||||
@ -606,19 +622,37 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+4"/>
|
||||
<source>Homeserver address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<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="+19"/>
|
||||
<location line="+217"/>
|
||||
<location line="+218"/>
|
||||
<source>LOGIN</source>
|
||||
<translation>登录</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-104"/>
|
||||
<location line="-151"/>
|
||||
<location line="+11"/>
|
||||
<location line="+157"/>
|
||||
<location line="+11"/>
|
||||
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-132"/>
|
||||
<source>Autodiscovery failed. Received malformed response.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -763,7 +797,7 @@ Example: https://server.my:8787</source>
|
||||
<translation>写一条消息…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+152"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -870,7 +904,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+182"/>
|
||||
<location filename="../../src/main.cpp" line="+179"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -973,7 +1007,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1859"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1868"/>
|
||||
<source>no version stored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1015,7 +1049,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+38"/>
|
||||
<location line="+39"/>
|
||||
<source>New tag...</source>
|
||||
<comment>Add a new tag to the room</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
@ -1115,7 +1149,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+864"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+860"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished">删除消息失败:%1</translation>
|
||||
</message>
|
||||
@ -1126,7 +1160,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+156"/>
|
||||
<location line="+164"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished">保存图像</translation>
|
||||
</message>
|
||||
@ -1146,7 +1180,7 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+129"/>
|
||||
<location line="+143"/>
|
||||
<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 type="unfinished">
|
||||
@ -1264,12 +1298,12 @@ Example: https://server.my:8787</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-749"/>
|
||||
<location line="-771"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished">您已加入此房间</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+751"/>
|
||||
<location line="+773"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1350,6 +1384,11 @@ Example: https://server.my:8787</source>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open in external program</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<source>No room open</source>
|
||||
@ -1462,7 +1501,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+53"/>
|
||||
<location filename="../qml/UserProfile.qml" line="+54"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1485,7 +1524,7 @@ Example: https://server.my:8787</source>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+781"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+794"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>最小化至托盘</translation>
|
||||
</message>
|
||||
|
@ -43,6 +43,7 @@
|
||||
<url type="homepage">https://github.com/Nheko-Reborn/nheko</url>
|
||||
<update_contact>https://github.com/Nheko-Reborn</update_contact>
|
||||
<releases>
|
||||
<release date="2021-01-27" version="0.8.1"/>
|
||||
<release date="2021-01-21" version="0.8.0"/>
|
||||
<release date="2020-06-12" version="0.7.2"/>
|
||||
<release date="2020-04-24" version="0.7.1"/>
|
||||
|
@ -11,6 +11,7 @@ Popup {
|
||||
property string completerName
|
||||
property var completer
|
||||
property bool bottomToTop: true
|
||||
property alias count: listView.count
|
||||
|
||||
signal completionClicked(string completion)
|
||||
|
||||
@ -57,9 +58,9 @@ Popup {
|
||||
completer = undefined;
|
||||
}
|
||||
}
|
||||
padding: 0
|
||||
padding: 1
|
||||
onAboutToShow: currentIndex = -1
|
||||
height: listView.contentHeight
|
||||
height: listView.contentHeight + 2 // + 2 for the padding on top and bottom
|
||||
|
||||
Connections {
|
||||
onTimelineChanged: completer = null
|
||||
@ -84,7 +85,7 @@ Popup {
|
||||
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
onEntered: popup.currentIndex = model.index
|
||||
onPositionChanged: popup.currentIndex = model.index
|
||||
onClicked: popup.completionClicked(completer.completionAt(model.index))
|
||||
|
||||
Ripple {
|
||||
@ -183,6 +184,7 @@ Popup {
|
||||
color: colors.base
|
||||
implicitHeight: popup.contentHeight
|
||||
implicitWidth: popup.contentWidth
|
||||
border.color: colors.mid
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -98,29 +98,28 @@ Rectangle {
|
||||
clip: true
|
||||
boundsBehavior: Flickable.StopAtBounds
|
||||
flickableDirection: Flickable.VerticalFlick
|
||||
implicitWidth: textArea.width
|
||||
implicitHeight: textArea.height
|
||||
contentWidth: textArea.width
|
||||
contentHeight: textArea.height
|
||||
implicitWidth: messageInput.width
|
||||
implicitHeight: messageInput.height
|
||||
contentWidth: messageInput.width
|
||||
contentHeight: messageInput.height
|
||||
|
||||
TextArea {
|
||||
id: textArea
|
||||
id: messageInput
|
||||
|
||||
property int completerTriggeredAt: -1
|
||||
|
||||
function insertCompletion(completion) {
|
||||
textArea.remove(completerTriggeredAt, cursorPosition);
|
||||
textArea.insert(cursorPosition, completion);
|
||||
messageInput.remove(completerTriggeredAt, cursorPosition);
|
||||
messageInput.insert(cursorPosition, completion);
|
||||
}
|
||||
|
||||
function openCompleter(pos, type) {
|
||||
completerTriggeredAt = pos;
|
||||
popup.completerName = type;
|
||||
popup.open();
|
||||
popup.completer.setSearchString(textArea.getText(completerTriggeredAt, cursorPosition));
|
||||
popup.completer.setSearchString(messageInput.getText(completerTriggeredAt, cursorPosition));
|
||||
}
|
||||
|
||||
text: "asfkajsdf"
|
||||
selectByMouse: true
|
||||
placeholderText: qsTr("Write a message...")
|
||||
//placeholderTextColor: colors.buttonText
|
||||
@ -152,7 +151,7 @@ Rectangle {
|
||||
popup.close();
|
||||
}
|
||||
if (popup.opened)
|
||||
popup.completer.setSearchString(textArea.getText(completerTriggeredAt, cursorPosition));
|
||||
popup.completer.setSearchString(messageInput.getText(completerTriggeredAt, cursorPosition));
|
||||
|
||||
}
|
||||
onSelectionStartChanged: TimelineManager.timeline.input.updateState(selectionStart, selectionEnd, cursorPosition, text)
|
||||
@ -163,17 +162,21 @@ Rectangle {
|
||||
if (event.matches(StandardKey.Paste)) {
|
||||
TimelineManager.timeline.input.paste(false);
|
||||
event.accepted = true;
|
||||
} else if (event.key == Qt.Key_Space) {
|
||||
if (popup.opened && popup.count <= 0)
|
||||
popup.close();
|
||||
|
||||
} else if (event.modifiers == Qt.ControlModifier && event.key == Qt.Key_U) {
|
||||
textArea.clear();
|
||||
messageInput.clear();
|
||||
} else if (event.modifiers == Qt.ControlModifier && event.key == Qt.Key_P) {
|
||||
textArea.text = TimelineManager.timeline.input.previousText();
|
||||
messageInput.text = TimelineManager.timeline.input.previousText();
|
||||
} else if (event.modifiers == Qt.ControlModifier && event.key == Qt.Key_N) {
|
||||
textArea.text = TimelineManager.timeline.input.nextText();
|
||||
messageInput.text = TimelineManager.timeline.input.nextText();
|
||||
} else if (event.key == Qt.Key_At) {
|
||||
textArea.openCompleter(cursorPosition, "user");
|
||||
messageInput.openCompleter(cursorPosition, "user");
|
||||
popup.open();
|
||||
} else if (event.key == Qt.Key_Colon) {
|
||||
textArea.openCompleter(cursorPosition, "emoji");
|
||||
messageInput.openCompleter(cursorPosition, "emoji");
|
||||
popup.open();
|
||||
} else if (event.key == Qt.Key_Escape && popup.opened) {
|
||||
completerTriggeredAt = -1;
|
||||
@ -186,13 +189,13 @@ Rectangle {
|
||||
popup.completerName = "";
|
||||
popup.close();
|
||||
if (currentCompletion) {
|
||||
textArea.insertCompletion(currentCompletion);
|
||||
messageInput.insertCompletion(currentCompletion);
|
||||
event.accepted = true;
|
||||
return ;
|
||||
}
|
||||
}
|
||||
TimelineManager.timeline.input.send();
|
||||
textArea.clear();
|
||||
messageInput.clear();
|
||||
event.accepted = true;
|
||||
} else if (event.key == Qt.Key_Tab) {
|
||||
event.accepted = true;
|
||||
@ -201,19 +204,22 @@ Rectangle {
|
||||
} else {
|
||||
var pos = cursorPosition - 1;
|
||||
while (pos > -1) {
|
||||
var t = textArea.getText(pos, pos + 1);
|
||||
var t = messageInput.getText(pos, pos + 1);
|
||||
console.log('"' + t + '"');
|
||||
if (t == '@' || t == ' ' || t == '\t') {
|
||||
textArea.openCompleter(pos, "user");
|
||||
if (t == '@') {
|
||||
messageInput.openCompleter(pos, "user");
|
||||
return ;
|
||||
} else if (t == ' ' || t == '\t') {
|
||||
messageInput.openCompleter(pos + 1, "user");
|
||||
return ;
|
||||
} else if (t == ':') {
|
||||
textArea.openCompleter(pos, "emoji");
|
||||
messageInput.openCompleter(pos, "emoji");
|
||||
return ;
|
||||
}
|
||||
pos = pos - 1;
|
||||
}
|
||||
// At start of input
|
||||
textArea.openCompleter(0, "user");
|
||||
messageInput.openCompleter(0, "user");
|
||||
}
|
||||
} else if (event.key == Qt.Key_Up && popup.opened) {
|
||||
event.accepted = true;
|
||||
@ -226,33 +232,40 @@ Rectangle {
|
||||
background: null
|
||||
|
||||
Connections {
|
||||
onTimelineChanged: {
|
||||
textArea.clear();
|
||||
textArea.append(TimelineManager.timeline.input.text());
|
||||
textArea.completerTriggeredAt = -1;
|
||||
onActiveTimelineChanged: {
|
||||
messageInput.clear();
|
||||
messageInput.append(TimelineManager.timeline.input.text());
|
||||
messageInput.completerTriggeredAt = -1;
|
||||
popup.completerName = "";
|
||||
messageInput.forceActiveFocus();
|
||||
}
|
||||
target: TimelineManager
|
||||
}
|
||||
|
||||
Connections {
|
||||
onCompletionClicked: textArea.insertCompletion(completion)
|
||||
onCompletionClicked: messageInput.insertCompletion(completion)
|
||||
target: popup
|
||||
}
|
||||
|
||||
Completer {
|
||||
id: popup
|
||||
|
||||
x: textArea.completerTriggeredAt >= 0 ? textArea.positionToRectangle(textArea.completerTriggeredAt).x : 0
|
||||
y: textArea.completerTriggeredAt >= 0 ? textArea.positionToRectangle(textArea.completerTriggeredAt).y - height : 0
|
||||
x: messageInput.completerTriggeredAt >= 0 ? messageInput.positionToRectangle(messageInput.completerTriggeredAt).x : 0
|
||||
y: messageInput.completerTriggeredAt >= 0 ? messageInput.positionToRectangle(messageInput.completerTriggeredAt).y - height : 0
|
||||
}
|
||||
|
||||
Connections {
|
||||
ignoreUnknownSignals: true
|
||||
onInsertText: textArea.insert(textArea.cursorPosition, text)
|
||||
onInsertText: messageInput.insert(messageInput.cursorPosition, text)
|
||||
target: TimelineManager.timeline ? TimelineManager.timeline.input : null
|
||||
}
|
||||
|
||||
Connections {
|
||||
ignoreUnknownSignals: true
|
||||
onReplyChanged: messageInput.forceActiveFocus()
|
||||
target: TimelineManager.timeline
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
// workaround for wrong cursor shape on some platforms
|
||||
anchors.fill: parent
|
||||
@ -284,7 +297,7 @@ Rectangle {
|
||||
ToolTip.visible: hovered
|
||||
ToolTip.text: qsTr("Emoji")
|
||||
onClicked: emojiPopup.visible ? emojiPopup.close() : emojiPopup.show(emojiButton, function(emoji) {
|
||||
textArea.insert(textArea.cursorPosition, emoji);
|
||||
messageInput.insert(messageInput.cursorPosition, emoji);
|
||||
})
|
||||
}
|
||||
|
||||
@ -299,7 +312,7 @@ Rectangle {
|
||||
ToolTip.text: qsTr("Send")
|
||||
onClicked: {
|
||||
TimelineManager.timeline.input.send();
|
||||
textArea.clear();
|
||||
messageInput.clear();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,7 @@ Page {
|
||||
colors: palette
|
||||
|
||||
model: EmojiProxyModel {
|
||||
category: EmojiCategory.People
|
||||
category: Emoji.Category.People
|
||||
|
||||
sourceModel: EmojiModel {
|
||||
}
|
||||
@ -125,6 +125,13 @@ Page {
|
||||
onTriggered: TimelineManager.timeline.saveMedia(messageContextMenu.eventId)
|
||||
}
|
||||
|
||||
MenuItem {
|
||||
visible: messageContextMenu.eventType == MtxEvent.ImageMessage || messageContextMenu.eventType == MtxEvent.VideoMessage || messageContextMenu.eventType == MtxEvent.AudioMessage || messageContextMenu.eventType == MtxEvent.FileMessage || messageContextMenu.eventType == MtxEvent.Sticker
|
||||
height: visible ? implicitHeight : 0
|
||||
text: qsTr("Open in external program")
|
||||
onTriggered: TimelineManager.timeline.openMedia(messageContextMenu.eventId)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
|
@ -10,10 +10,19 @@ ApplicationWindow {
|
||||
|
||||
property var profile
|
||||
|
||||
x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
|
||||
y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
|
||||
height: 650
|
||||
width: 420
|
||||
minimumHeight: 420
|
||||
palette: colors
|
||||
color: colors.window
|
||||
title: profile.isGlobalUserProfile ? "Global User Profile" : "Room User Profile"
|
||||
|
||||
Shortcut {
|
||||
sequence: StandardKey.Cancel
|
||||
onActivated: userProfileDialog.close()
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: contentL
|
||||
@ -32,13 +41,42 @@ ApplicationWindow {
|
||||
onClicked: TimelineManager.openImageOverlay(TimelineManager.timeline.avatarUrl(userid), TimelineManager.timeline.data.id)
|
||||
}
|
||||
|
||||
Label {
|
||||
TextInput {
|
||||
id: displayUsername
|
||||
|
||||
property bool isUsernameEditingAllowed
|
||||
|
||||
readOnly: !isUsernameEditingAllowed
|
||||
text: profile.displayName
|
||||
fontSizeMode: Text.HorizontalFit
|
||||
font.pixelSize: 20
|
||||
color: TimelineManager.userColor(profile.userid, colors.window)
|
||||
font.bold: true
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
selectByMouse: true
|
||||
|
||||
onAccepted: {
|
||||
profile.changeUsername(displayUsername.text)
|
||||
displayUsername.isUsernameEditingAllowed = false
|
||||
}
|
||||
|
||||
ImageButton {
|
||||
visible: profile.isSelf
|
||||
anchors.leftMargin: 5
|
||||
anchors.left: displayUsername.right
|
||||
anchors.verticalCenter: displayUsername.verticalCenter
|
||||
image: displayUsername.isUsernameEditingAllowed ? ":/icons/icons/ui/checkmark.png" : ":/icons/icons/ui/edit.png"
|
||||
|
||||
onClicked: {
|
||||
if (displayUsername.isUsernameEditingAllowed) {
|
||||
profile.changeUsername(displayUsername.text)
|
||||
displayUsername.isUsernameEditingAllowed = false
|
||||
} else {
|
||||
displayUsername.isUsernameEditingAllowed = true
|
||||
displayUsername.focus = true
|
||||
displayUsername.selectAll()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MatrixText {
|
||||
|
@ -194,7 +194,6 @@ Rectangle {
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
text: model.data.body
|
||||
textFormat: Text.PlainText
|
||||
elide: Text.ElideRight
|
||||
color: colors.text
|
||||
}
|
||||
|
@ -126,7 +126,7 @@ Popup {
|
||||
interval: 350 // tweak as needed?
|
||||
onTriggered: {
|
||||
emojiPopup.model.filter = emojiSearch.text;
|
||||
emojiPopup.model.category = EmojiCategory.Search;
|
||||
emojiPopup.model.category = Emoji.Category.Search;
|
||||
}
|
||||
}
|
||||
|
||||
@ -178,42 +178,42 @@ Popup {
|
||||
// TODO: Would like to get 'simple' icons for the categories
|
||||
ListElement {
|
||||
image: ":/icons/icons/emoji-categories/people.png"
|
||||
category: EmojiCategory.People
|
||||
category: Emoji.Category.People
|
||||
}
|
||||
|
||||
ListElement {
|
||||
image: ":/icons/icons/emoji-categories/nature.png"
|
||||
category: EmojiCategory.Nature
|
||||
category: Emoji.Category.Nature
|
||||
}
|
||||
|
||||
ListElement {
|
||||
image: ":/icons/icons/emoji-categories/foods.png"
|
||||
category: EmojiCategory.Food
|
||||
category: Emoji.Category.Food
|
||||
}
|
||||
|
||||
ListElement {
|
||||
image: ":/icons/icons/emoji-categories/activity.png"
|
||||
category: EmojiCategory.Activity
|
||||
category: Emoji.Category.Activity
|
||||
}
|
||||
|
||||
ListElement {
|
||||
image: ":/icons/icons/emoji-categories/travel.png"
|
||||
category: EmojiCategory.Travel
|
||||
category: Emoji.Category.Travel
|
||||
}
|
||||
|
||||
ListElement {
|
||||
image: ":/icons/icons/emoji-categories/objects.png"
|
||||
category: EmojiCategory.Objects
|
||||
category: Emoji.Category.Objects
|
||||
}
|
||||
|
||||
ListElement {
|
||||
image: ":/icons/icons/emoji-categories/symbols.png"
|
||||
category: EmojiCategory.Symbols
|
||||
category: Emoji.Category.Symbols
|
||||
}
|
||||
|
||||
ListElement {
|
||||
image: ":/icons/icons/emoji-categories/flags.png"
|
||||
category: EmojiCategory.Flags
|
||||
category: Emoji.Category.Flags
|
||||
}
|
||||
|
||||
}
|
||||
@ -224,21 +224,21 @@ Popup {
|
||||
hoverEnabled: true
|
||||
ToolTip.text: {
|
||||
switch (model.category) {
|
||||
case EmojiCategory.People:
|
||||
case Emoji.Category.People:
|
||||
return qsTr('People');
|
||||
case EmojiCategory.Nature:
|
||||
case Emoji.Category.Nature:
|
||||
return qsTr('Nature');
|
||||
case EmojiCategory.Food:
|
||||
case Emoji.Category.Food:
|
||||
return qsTr('Food');
|
||||
case EmojiCategory.Activity:
|
||||
case Emoji.Category.Activity:
|
||||
return qsTr('Activity');
|
||||
case EmojiCategory.Travel:
|
||||
case Emoji.Category.Travel:
|
||||
return qsTr('Travel');
|
||||
case EmojiCategory.Objects:
|
||||
case Emoji.Category.Objects:
|
||||
return qsTr('Objects');
|
||||
case EmojiCategory.Symbols:
|
||||
case Emoji.Category.Symbols:
|
||||
return qsTr('Symbols');
|
||||
case EmojiCategory.Flags:
|
||||
case Emoji.Category.Flags:
|
||||
return qsTr('Flags');
|
||||
}
|
||||
}
|
||||
@ -295,7 +295,7 @@ Popup {
|
||||
ToolTip.visible: hovered
|
||||
onClicked: {
|
||||
// clear any filters
|
||||
emojiPopup.model.category = EmojiCategory.Search;
|
||||
emojiPopup.model.category = Emoji.Category.Search;
|
||||
gridView.positionViewAtBeginning();
|
||||
emojiSearch.forceActiveFocus();
|
||||
}
|
||||
|
@ -155,11 +155,12 @@ RoomInfoListItem > Avatar {
|
||||
|
||||
CommunitiesListItem {
|
||||
qproperty-highlightedBackgroundColor: #4d84c7;
|
||||
qproperty-disabledBackgroundColor: palette(mid);
|
||||
qproperty-hoverBackgroundColor: rgb(67, 70, 77);
|
||||
qproperty-backgroundColor: #2d3139;
|
||||
|
||||
qproperty-avatarBgColor: #202228;
|
||||
qproperty-avatarFgColor: palette(window);
|
||||
qproperty-avatarFgColor: black;
|
||||
}
|
||||
|
||||
LoadingIndicator {
|
||||
|
@ -122,11 +122,12 @@ RoomInfoListItem > Avatar {
|
||||
|
||||
CommunitiesListItem {
|
||||
qproperty-highlightedBackgroundColor: #38A3D8;
|
||||
qproperty-disabledBackgroundColor: palette(mid);
|
||||
qproperty-hoverBackgroundColor: rgb(70, 77, 93);
|
||||
qproperty-backgroundColor: #f2f5f8;
|
||||
|
||||
qproperty-avatarBgColor: #eee;
|
||||
qproperty-avatarFgColor: black;
|
||||
qproperty-avatarFgColor: palette(buttonText);
|
||||
}
|
||||
|
||||
#ChatPageLoadSpinner {
|
||||
|
@ -118,6 +118,7 @@ RoomInfoListItem > Avatar {
|
||||
|
||||
CommunitiesListItem {
|
||||
qproperty-highlightedBackgroundColor: palette(highlight);
|
||||
qproperty-disabledBackgroundColor: palette(mid);
|
||||
qproperty-hoverBackgroundColor: palette(light);
|
||||
qproperty-backgroundColor: palette(window);
|
||||
|
||||
|
@ -11,26 +11,13 @@ class Emoji(object):
|
||||
self.code = repr(code.encode('utf-8'))[1:].strip("'")
|
||||
self.shortname = shortname
|
||||
|
||||
def generate_code(emojis, category):
|
||||
tmpl = Template('''
|
||||
const std::vector<Emoji> emoji::Provider::{{ category }} = {
|
||||
// {{ category.capitalize() }}
|
||||
{%- for e in emoji %}
|
||||
Emoji{QString::fromUtf8("{{ e.code }}"), "{{ e.shortname }}", emoji::EmojiCategory::{{ category.capitalize() }}},
|
||||
{%- endfor %}
|
||||
};
|
||||
''')
|
||||
|
||||
d = dict(category=category, emoji=emojis)
|
||||
print(tmpl.render(d))
|
||||
|
||||
def generate_qml_list(**kwargs):
|
||||
tmpl = Template('''
|
||||
const QVector<Emoji> emoji::Provider::emoji = {
|
||||
{%- for c in kwargs.items() %}
|
||||
// {{ c[0].capitalize() }}
|
||||
{%- for e in c[1] %}
|
||||
Emoji{QString::fromUtf8("{{ e.code }}"), "{{ e.shortname }}", emoji::EmojiCategory::{{ c[0].capitalize() }}},
|
||||
Emoji{QString::fromUtf8("{{ e.code }}"), "{{ e.shortname }}", emoji::Emoji::Category::{{ c[0].capitalize() }}},
|
||||
{%- endfor %}
|
||||
{%- endfor %}
|
||||
};
|
||||
@ -93,12 +80,4 @@ if __name__ == '__main__':
|
||||
|
||||
# Use xclip to pipe the output to clipboard.
|
||||
# e.g ./codegen.py emoji.json | xclip -sel clip
|
||||
generate_code(people, 'people')
|
||||
generate_code(nature, 'nature')
|
||||
generate_code(food, 'food')
|
||||
generate_code(activity, 'activity')
|
||||
generate_code(travel, 'travel')
|
||||
generate_code(objects, 'objects')
|
||||
generate_code(symbols, 'symbols')
|
||||
generate_code(flags, 'flags')
|
||||
generate_qml_list(people=people, nature=nature, food=food, activity=activity, travel=travel, objects=objects, symbols=symbols, flags=flags)
|
||||
generate_qml_list(people=people, nature=nature, food=food, activity=activity, travel=travel, objects=objects, symbols=symbols, flags=flags)
|
||||
|
@ -169,13 +169,35 @@ Cache::setup()
|
||||
|
||||
nhlog::db()->debug("setting up cache");
|
||||
|
||||
// Previous location of the cache directory
|
||||
auto oldCache = QString("%1/%2%3")
|
||||
.arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation))
|
||||
.arg(QString::fromUtf8(localUserId_.toUtf8().toHex()))
|
||||
.arg(QString::fromUtf8(settings->profile().toUtf8().toHex()));
|
||||
|
||||
cacheDirectory_ = QString("%1/%2%3")
|
||||
.arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation))
|
||||
.arg(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation))
|
||||
.arg(QString::fromUtf8(localUserId_.toUtf8().toHex()))
|
||||
.arg(QString::fromUtf8(settings->profile().toUtf8().toHex()));
|
||||
|
||||
bool isInitial = !QFile::exists(cacheDirectory_);
|
||||
|
||||
// NOTE: If both cache directories exist it's better to do nothing: it
|
||||
// could mean a previous migration failed or was interrupted.
|
||||
bool needsMigration = isInitial && QFile::exists(oldCache);
|
||||
|
||||
if (needsMigration) {
|
||||
nhlog::db()->info("found old state directory, migrating");
|
||||
if (!QDir().rename(oldCache, cacheDirectory_)) {
|
||||
throw std::runtime_error(("Unable to migrate the old state directory (" +
|
||||
oldCache + ") to the new location (" +
|
||||
cacheDirectory_ + ")")
|
||||
.toStdString()
|
||||
.c_str());
|
||||
}
|
||||
nhlog::db()->info("completed state migration");
|
||||
}
|
||||
|
||||
env_ = lmdb::env::create();
|
||||
env_.set_mapsize(DB_SIZE);
|
||||
env_.set_max_dbs(MAX_DBS);
|
||||
@ -305,6 +327,7 @@ Cache::importSessionKeys(const mtx::crypto::ExportedSessionKeys &keys)
|
||||
auto exported_session = mtx::crypto::import_session(s.session_key);
|
||||
|
||||
saveInboundMegolmSession(index, std::move(exported_session));
|
||||
ChatPage::instance()->receivedSessionKey(index.room_id, index.session_id);
|
||||
}
|
||||
}
|
||||
|
||||
@ -639,6 +662,10 @@ Cache::secret(const std::string &name)
|
||||
"Restoring secret '{}' failed: {}", name, job.errorString().toStdString());
|
||||
return std::nullopt;
|
||||
}
|
||||
if (secret.isEmpty()) {
|
||||
nhlog::db()->debug("Restored empty secret '{}'.", name);
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
return secret.toStdString();
|
||||
}
|
||||
@ -1235,11 +1262,11 @@ Cache::saveState(const mtx::responses::Sync &res)
|
||||
updatedInfo.avatar_url = getRoomAvatarUrl(txn, statesdb, membersdb).toStdString();
|
||||
updatedInfo.version = getRoomVersion(txn, statesdb).toStdString();
|
||||
|
||||
bool has_new_tags = false;
|
||||
// Process the account_data associated with this room
|
||||
if (!room.second.account_data.events.empty()) {
|
||||
auto accountDataDb = getAccountDataDb(txn, room.first);
|
||||
|
||||
bool has_new_tags = false;
|
||||
for (const auto &evt : room.second.account_data.events) {
|
||||
std::visit(
|
||||
[&txn, &accountDataDb](const auto &event) {
|
||||
@ -1266,21 +1293,21 @@ Cache::saveState(const mtx::responses::Sync &res)
|
||||
nhlog::db()->debug("Fully read: {}", fr->content.event_id);
|
||||
}
|
||||
}
|
||||
if (!has_new_tags) {
|
||||
// retrieve the old tags, they haven't changed
|
||||
lmdb::val data;
|
||||
if (lmdb::dbi_get(txn, roomsDb_, lmdb::val(room.first), data)) {
|
||||
try {
|
||||
RoomInfo tmp = json::parse(
|
||||
std::string_view(data.data(), data.size()));
|
||||
updatedInfo.tags = tmp.tags;
|
||||
} catch (const json::exception &e) {
|
||||
nhlog::db()->warn(
|
||||
"failed to parse room info: room_id ({}), {}: {}",
|
||||
room.first,
|
||||
std::string(data.data(), data.size()),
|
||||
e.what());
|
||||
}
|
||||
}
|
||||
if (!has_new_tags) {
|
||||
// retrieve the old tags, they haven't changed
|
||||
lmdb::val data;
|
||||
if (lmdb::dbi_get(txn, roomsDb_, lmdb::val(room.first), data)) {
|
||||
try {
|
||||
RoomInfo tmp =
|
||||
json::parse(std::string_view(data.data(), data.size()));
|
||||
updatedInfo.tags = tmp.tags;
|
||||
} catch (const json::exception &e) {
|
||||
nhlog::db()->warn(
|
||||
"failed to parse room info: room_id ({}), {}: {}",
|
||||
room.first,
|
||||
std::string(data.data(), data.size()),
|
||||
e.what());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -111,7 +111,11 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
|
||||
connect(sidebarActions_, &SideBarActions::joinRoom, this, &ChatPage::joinRoom);
|
||||
connect(sidebarActions_, &SideBarActions::createRoom, this, &ChatPage::createRoom);
|
||||
|
||||
user_info_widget_ = new UserInfoWidget(sideBar_);
|
||||
user_info_widget_ = new UserInfoWidget(sideBar_);
|
||||
connect(user_info_widget_, &UserInfoWidget::openGlobalUserProfile, this, [this]() {
|
||||
view_manager_->activeTimeline()->openUserProfile(utils::localUser(), true);
|
||||
});
|
||||
|
||||
user_mentions_popup_ = new popups::UserMentions();
|
||||
room_list_ = new RoomList(userSettings, sideBar_);
|
||||
connect(room_list_, &RoomList::joinRoom, this, &ChatPage::joinRoom);
|
||||
@ -267,10 +271,27 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
|
||||
[this](const QString &groupId) {
|
||||
current_community_ = groupId;
|
||||
|
||||
if (groupId == "world")
|
||||
room_list_->removeFilter();
|
||||
else
|
||||
room_list_->applyFilter(communitiesList_->roomList(groupId));
|
||||
if (groupId == "world") {
|
||||
auto hidden = communitiesList_->hiddenTagsAndCommunities();
|
||||
std::set<QString> roomsToHide = communitiesList_->roomList(groupId);
|
||||
for (const auto &hiddenTag : hidden) {
|
||||
auto temp = communitiesList_->roomList(hiddenTag);
|
||||
roomsToHide.insert(temp.begin(), temp.end());
|
||||
}
|
||||
|
||||
room_list_->removeFilter(roomsToHide);
|
||||
} else {
|
||||
auto hidden = communitiesList_->hiddenTagsAndCommunities();
|
||||
hidden.erase(current_community_);
|
||||
|
||||
auto roomsToShow = communitiesList_->roomList(groupId);
|
||||
for (const auto &hiddenTag : hidden) {
|
||||
for (const auto &r : communitiesList_->roomList(hiddenTag))
|
||||
roomsToShow.erase(r);
|
||||
}
|
||||
|
||||
room_list_->applyFilter(roomsToShow);
|
||||
}
|
||||
});
|
||||
|
||||
connect(¬ificationsManager,
|
||||
@ -1299,8 +1320,10 @@ ChatPage::startChat(QString userid)
|
||||
mtx::requests::CreateRoom req;
|
||||
req.preset = mtx::requests::Preset::PrivateChat;
|
||||
req.visibility = mtx::common::RoomVisibility::Private;
|
||||
if (utils::localUser() != userid)
|
||||
req.invite = {userid.toStdString()};
|
||||
if (utils::localUser() != userid) {
|
||||
req.invite = {userid.toStdString()};
|
||||
req.is_direct = true;
|
||||
}
|
||||
emit ChatPage::instance()->createRoom(req);
|
||||
}
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include "Logging.h"
|
||||
#include "MatrixClient.h"
|
||||
#include "Splitter.h"
|
||||
#include "UserSettingsPage.h"
|
||||
|
||||
#include <mtx/responses/groups.hpp>
|
||||
#include <nlohmann/json.hpp>
|
||||
@ -125,9 +126,15 @@ CommunitiesList::setTagsForRoom(const QString &room_id, const std::vector<std::s
|
||||
void
|
||||
CommunitiesList::addCommunity(const std::string &group_id)
|
||||
{
|
||||
auto hiddenTags = UserSettings::instance()->hiddenTags();
|
||||
|
||||
const auto id = QString::fromStdString(group_id);
|
||||
|
||||
CommunitiesListItem *list_item = new CommunitiesListItem(id, scrollArea_);
|
||||
|
||||
if (hiddenTags.contains(id))
|
||||
list_item->setDisabled(true);
|
||||
|
||||
communities_.emplace(id, QSharedPointer<CommunitiesListItem>(list_item));
|
||||
contentsLayout_->insertWidget(contentsLayout_->count() - 1, list_item);
|
||||
|
||||
@ -135,6 +142,21 @@ CommunitiesList::addCommunity(const std::string &group_id)
|
||||
&CommunitiesListItem::clicked,
|
||||
this,
|
||||
&CommunitiesList::highlightSelectedCommunity);
|
||||
connect(list_item, &CommunitiesListItem::isDisabledChanged, this, [this]() {
|
||||
for (const auto &community : communities_) {
|
||||
if (community.second->isPressed()) {
|
||||
emit highlightSelectedCommunity(community.first);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
auto hiddenTags = hiddenTagsAndCommunities();
|
||||
// Qt < 5.14 compat
|
||||
QStringList hiddenTags_;
|
||||
for (auto &&t : hiddenTags)
|
||||
hiddenTags_.push_back(t);
|
||||
UserSettings::instance()->setHiddenTags(hiddenTags_);
|
||||
});
|
||||
|
||||
if (group_id.empty() || group_id.front() != '+')
|
||||
return;
|
||||
@ -157,7 +179,9 @@ CommunitiesList::addCommunity(const std::string &group_id)
|
||||
connect(this,
|
||||
&CommunitiesList::groupRoomsRetrieved,
|
||||
this,
|
||||
[this](const QString &id, const std::map<QString, bool> &rooms) {
|
||||
[this](const QString &id, const std::set<QString> &rooms) {
|
||||
nhlog::ui()->info(
|
||||
"Fetched rooms for {}: {}", id.toStdString(), rooms.size());
|
||||
if (communities_.find(id) == communities_.end())
|
||||
return;
|
||||
|
||||
@ -179,9 +203,9 @@ CommunitiesList::addCommunity(const std::string &group_id)
|
||||
return;
|
||||
}
|
||||
|
||||
std::map<QString, bool> room_ids;
|
||||
std::set<QString> room_ids;
|
||||
for (const auto &room : res.at("chunk"))
|
||||
room_ids.emplace(QString::fromStdString(room.at("room_id")), true);
|
||||
room_ids.emplace(QString::fromStdString(room.at("room_id")));
|
||||
|
||||
emit groupRoomsRetrieved(id, room_ids);
|
||||
});
|
||||
@ -256,7 +280,7 @@ CommunitiesList::fetchCommunityAvatar(const QString &id, const QString &avatarUr
|
||||
});
|
||||
}
|
||||
|
||||
std::map<QString, bool>
|
||||
std::set<QString>
|
||||
CommunitiesList::roomList(const QString &id) const
|
||||
{
|
||||
if (communityExists(id))
|
||||
@ -277,6 +301,18 @@ CommunitiesList::currentTags() const
|
||||
return tags;
|
||||
}
|
||||
|
||||
std::set<QString>
|
||||
CommunitiesList::hiddenTagsAndCommunities() const
|
||||
{
|
||||
std::set<QString> hiddenTags;
|
||||
for (auto &entry : communities_) {
|
||||
if (entry.second->isDisabled())
|
||||
hiddenTags.insert(entry.first);
|
||||
}
|
||||
|
||||
return hiddenTags;
|
||||
}
|
||||
|
||||
void
|
||||
CommunitiesList::sortEntries()
|
||||
{
|
||||
|
@ -24,17 +24,18 @@ public:
|
||||
|
||||
void addCommunity(const std::string &id);
|
||||
void removeCommunity(const QString &id) { communities_.erase(id); };
|
||||
std::map<QString, bool> roomList(const QString &id) const;
|
||||
std::set<QString> roomList(const QString &id) const;
|
||||
|
||||
void syncTags(const std::map<QString, RoomInfo> &info);
|
||||
void setTagsForRoom(const QString &id, const std::vector<std::string> &tags);
|
||||
std::vector<std::string> currentTags() const;
|
||||
std::set<QString> hiddenTagsAndCommunities() const;
|
||||
|
||||
signals:
|
||||
void communityChanged(const QString &id);
|
||||
void avatarRetrieved(const QString &id, const QPixmap &img);
|
||||
void groupProfileRetrieved(const QString &group_id, const mtx::responses::GroupProfile &);
|
||||
void groupRoomsRetrieved(const QString &group_id, const std::map<QString, bool> &res);
|
||||
void groupRoomsRetrieved(const QString &group_id, const std::set<QString> &res);
|
||||
|
||||
public slots:
|
||||
void updateCommunityAvatar(const QString &id, const QPixmap &img);
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include "CommunitiesListItem.h"
|
||||
|
||||
#include <QMenu>
|
||||
#include <QMouseEvent>
|
||||
|
||||
#include "Utils.h"
|
||||
@ -20,18 +21,28 @@ CommunitiesListItem::CommunitiesListItem(QString group_id, QWidget *parent)
|
||||
rippleOverlay_->setClipPath(path);
|
||||
rippleOverlay_->setClipping(true);
|
||||
|
||||
if (groupId_ == "world")
|
||||
avatar_ = QPixmap(":/icons/icons/ui/world.png");
|
||||
else if (groupId_ == "tag:m.favourite")
|
||||
avatar_ = QPixmap(":/icons/icons/ui/star.png");
|
||||
else if (groupId_ == "tag:m.lowpriority")
|
||||
avatar_ = QPixmap(":/icons/icons/ui/lowprio.png");
|
||||
else if (groupId_.startsWith("tag:"))
|
||||
avatar_ = QPixmap(":/icons/icons/ui/tag.png");
|
||||
menu_ = new QMenu(this);
|
||||
hideRoomsWithTagAction_ =
|
||||
new QAction(tr("Hide rooms with this tag or from this community"), this);
|
||||
hideRoomsWithTagAction_->setCheckable(true);
|
||||
menu_->addAction(hideRoomsWithTagAction_);
|
||||
connect(menu_, &QMenu::aboutToShow, this, [this]() {
|
||||
hideRoomsWithTagAction_->setChecked(isDisabled_);
|
||||
});
|
||||
|
||||
connect(hideRoomsWithTagAction_, &QAction::triggered, this, [this](bool checked) {
|
||||
this->setDisabled(checked);
|
||||
});
|
||||
|
||||
updateTooltip();
|
||||
}
|
||||
|
||||
void
|
||||
CommunitiesListItem::contextMenuEvent(QContextMenuEvent *event)
|
||||
{
|
||||
menu_->popup(event->globalPos());
|
||||
}
|
||||
|
||||
void
|
||||
CommunitiesListItem::setName(QString name)
|
||||
{
|
||||
@ -48,6 +59,16 @@ CommunitiesListItem::setPressedState(bool state)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CommunitiesListItem::setDisabled(bool state)
|
||||
{
|
||||
if (isDisabled_ != state) {
|
||||
isDisabled_ = state;
|
||||
update();
|
||||
emit isDisabledChanged();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CommunitiesListItem::mousePressEvent(QMouseEvent *event)
|
||||
{
|
||||
@ -80,22 +101,47 @@ CommunitiesListItem::paintEvent(QPaintEvent *)
|
||||
|
||||
if (isPressed_)
|
||||
p.fillRect(rect(), highlightedBackgroundColor_);
|
||||
else if (isDisabled_)
|
||||
p.fillRect(rect(), disabledBackgroundColor_);
|
||||
else if (underMouse())
|
||||
p.fillRect(rect(), hoverBackgroundColor_);
|
||||
else
|
||||
p.fillRect(rect(), backgroundColor_);
|
||||
|
||||
if (avatar_.isNull()) {
|
||||
QFont font;
|
||||
font.setPointSizeF(font.pointSizeF() * 1.3);
|
||||
p.setFont(font);
|
||||
QPixmap source;
|
||||
if (groupId_ == "world")
|
||||
source = QPixmap(":/icons/icons/ui/world.png");
|
||||
else if (groupId_ == "tag:m.favourite")
|
||||
source = QPixmap(":/icons/icons/ui/star.png");
|
||||
else if (groupId_ == "tag:m.lowpriority")
|
||||
source = QPixmap(":/icons/icons/ui/lowprio.png");
|
||||
else if (groupId_.startsWith("tag:"))
|
||||
source = QPixmap(":/icons/icons/ui/tag.png");
|
||||
|
||||
p.drawLetterAvatar(utils::firstChar(resolveName()),
|
||||
avatarFgColor_,
|
||||
avatarBgColor_,
|
||||
width(),
|
||||
height(),
|
||||
IconSize);
|
||||
if (source.isNull()) {
|
||||
QFont font;
|
||||
font.setPointSizeF(font.pointSizeF() * 1.3);
|
||||
p.setFont(font);
|
||||
|
||||
p.drawLetterAvatar(utils::firstChar(resolveName()),
|
||||
avatarFgColor_,
|
||||
avatarBgColor_,
|
||||
width(),
|
||||
height(),
|
||||
IconSize);
|
||||
} else {
|
||||
QPainter painter(&source);
|
||||
painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
|
||||
painter.fillRect(source.rect(), avatarFgColor_);
|
||||
painter.end();
|
||||
|
||||
const int imageSz = 32;
|
||||
p.drawPixmap(
|
||||
QRect(
|
||||
(width() - imageSz) / 2, (height() - imageSz) / 2, imageSz, imageSz),
|
||||
source);
|
||||
}
|
||||
} else {
|
||||
p.save();
|
||||
|
||||
|
@ -3,17 +3,22 @@
|
||||
#include <QSharedPointer>
|
||||
#include <QWidget>
|
||||
|
||||
#include <set>
|
||||
|
||||
#include "Config.h"
|
||||
#include "ui/Theme.h"
|
||||
|
||||
class RippleOverlay;
|
||||
class QMouseEvent;
|
||||
class QMenu;
|
||||
|
||||
class CommunitiesListItem : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QColor highlightedBackgroundColor READ highlightedBackgroundColor WRITE
|
||||
setHighlightedBackgroundColor)
|
||||
Q_PROPERTY(QColor disabledBackgroundColor READ disabledBackgroundColor WRITE
|
||||
setDisabledBackgroundColor)
|
||||
Q_PROPERTY(
|
||||
QColor hoverBackgroundColor READ hoverBackgroundColor WRITE setHoverBackgroundColor)
|
||||
Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor)
|
||||
@ -26,16 +31,18 @@ public:
|
||||
|
||||
void setName(QString name);
|
||||
bool isPressed() const { return isPressed_; }
|
||||
bool isDisabled() const { return isDisabled_; }
|
||||
void setAvatar(const QImage &img);
|
||||
|
||||
void setRooms(std::map<QString, bool> room_ids) { room_ids_ = std::move(room_ids); }
|
||||
void addRoom(const QString &id) { room_ids_[id] = true; }
|
||||
void setRooms(std::set<QString> room_ids) { room_ids_ = std::move(room_ids); }
|
||||
void addRoom(const QString &id) { room_ids_.insert(id); }
|
||||
void delRoom(const QString &id) { room_ids_.erase(id); }
|
||||
std::map<QString, bool> rooms() const { return room_ids_; }
|
||||
std::set<QString> rooms() const { return room_ids_; }
|
||||
|
||||
bool is_tag() const { return groupId_.startsWith("tag:"); }
|
||||
|
||||
QColor highlightedBackgroundColor() const { return highlightedBackgroundColor_; }
|
||||
QColor disabledBackgroundColor() const { return disabledBackgroundColor_; }
|
||||
QColor hoverBackgroundColor() const { return hoverBackgroundColor_; }
|
||||
QColor backgroundColor() const { return backgroundColor_; }
|
||||
|
||||
@ -43,6 +50,7 @@ public:
|
||||
QColor avatarBgColor() const { return avatarBgColor_; }
|
||||
|
||||
void setHighlightedBackgroundColor(QColor &color) { highlightedBackgroundColor_ = color; }
|
||||
void setDisabledBackgroundColor(QColor &color) { disabledBackgroundColor_ = color; }
|
||||
void setHoverBackgroundColor(QColor &color) { hoverBackgroundColor_ = color; }
|
||||
void setBackgroundColor(QColor &color) { backgroundColor_ = color; }
|
||||
|
||||
@ -56,13 +64,16 @@ public:
|
||||
|
||||
signals:
|
||||
void clicked(const QString &group_id);
|
||||
void isDisabledChanged();
|
||||
|
||||
public slots:
|
||||
void setPressedState(bool state);
|
||||
void setDisabled(bool state);
|
||||
|
||||
protected:
|
||||
void mousePressEvent(QMouseEvent *event) override;
|
||||
void paintEvent(QPaintEvent *event) override;
|
||||
void contextMenuEvent(QContextMenuEvent *event) override;
|
||||
|
||||
private:
|
||||
const int IconSize = 36;
|
||||
@ -70,20 +81,24 @@ private:
|
||||
QString resolveName() const;
|
||||
void updateTooltip();
|
||||
|
||||
std::map<QString, bool> room_ids_;
|
||||
std::set<QString> room_ids_;
|
||||
|
||||
QString name_;
|
||||
QString groupId_;
|
||||
QPixmap avatar_;
|
||||
|
||||
QColor highlightedBackgroundColor_;
|
||||
QColor disabledBackgroundColor_;
|
||||
QColor hoverBackgroundColor_;
|
||||
QColor backgroundColor_;
|
||||
|
||||
QColor avatarFgColor_;
|
||||
QColor avatarBgColor_;
|
||||
|
||||
bool isPressed_ = false;
|
||||
bool isPressed_ = false;
|
||||
bool isDisabled_ = false;
|
||||
|
||||
RippleOverlay *rippleOverlay_;
|
||||
QMenu *menu_;
|
||||
QAction *hideRoomsWithTagAction_;
|
||||
};
|
||||
|
@ -120,7 +120,7 @@ LoginPage::LoginPage(QWidget *parent)
|
||||
password_input_ = new TextField(this);
|
||||
password_input_->setLabel(tr("Password"));
|
||||
password_input_->setEchoMode(QLineEdit::Password);
|
||||
password_input_->setToolTip("Your password.");
|
||||
password_input_->setToolTip(tr("Your password."));
|
||||
|
||||
deviceName_ = new TextField(this);
|
||||
deviceName_->setLabel(tr("Device name"));
|
||||
@ -129,8 +129,8 @@ LoginPage::LoginPage(QWidget *parent)
|
||||
"If none is provided a default is used."));
|
||||
|
||||
serverInput_ = new TextField(this);
|
||||
serverInput_->setLabel("Homeserver address");
|
||||
serverInput_->setPlaceholderText("matrix.org");
|
||||
serverInput_->setLabel(tr("Homeserver address"));
|
||||
serverInput_->setPlaceholderText(tr("server.my:8787"));
|
||||
serverInput_->setToolTip(tr("The address that can be used to contact you homeservers "
|
||||
"client API.\nExample: https://server.my:8787"));
|
||||
serverInput_->hide();
|
||||
@ -174,8 +174,9 @@ LoginPage::LoginPage(QWidget *parent)
|
||||
|
||||
setLayout(top_layout_);
|
||||
|
||||
connect(this, &LoginPage::versionOkCb, this, &LoginPage::versionOk);
|
||||
connect(this, &LoginPage::versionErrorCb, this, &LoginPage::versionError);
|
||||
connect(this, &LoginPage::versionOkCb, this, &LoginPage::versionOk, Qt::QueuedConnection);
|
||||
connect(
|
||||
this, &LoginPage::versionErrorCb, this, &LoginPage::versionError, Qt::QueuedConnection);
|
||||
|
||||
connect(back_button_, SIGNAL(clicked()), this, SLOT(onBackButtonClicked()));
|
||||
connect(login_button_, SIGNAL(clicked()), this, SLOT(onLoginButtonClicked()));
|
||||
@ -216,7 +217,7 @@ LoginPage::onMatrixIdEntered()
|
||||
if (!matrixid_input_->isValid()) {
|
||||
error_matrixid_label_->show();
|
||||
showError(error_matrixid_label_,
|
||||
"You have entered an invalid Matrix ID e.g @joe:matrix.org");
|
||||
tr("You have entered an invalid Matrix ID e.g @joe:matrix.org"));
|
||||
return;
|
||||
} else {
|
||||
error_matrixid_label_->setText("");
|
||||
@ -227,7 +228,7 @@ LoginPage::onMatrixIdEntered()
|
||||
user = parse<User>(matrixid_input_->text().toStdString());
|
||||
} catch (const std::exception &) {
|
||||
showError(error_matrixid_label_,
|
||||
"You have entered an invalid Matrix ID e.g @joe:matrix.org");
|
||||
tr("You have entered an invalid Matrix ID e.g @joe:matrix.org"));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -322,7 +323,7 @@ LoginPage::checkHomeserverVersion()
|
||||
break;
|
||||
}
|
||||
}
|
||||
emit versionOk(loginMethod_);
|
||||
emit versionOkCb(loginMethod_);
|
||||
});
|
||||
});
|
||||
}
|
||||
@ -384,7 +385,7 @@ LoginPage::onLoginButtonClicked()
|
||||
if (!matrixid_input_->isValid()) {
|
||||
error_matrixid_label_->show();
|
||||
showError(error_matrixid_label_,
|
||||
"You have entered an invalid Matrix ID e.g @joe:matrix.org");
|
||||
tr("You have entered an invalid Matrix ID e.g @joe:matrix.org"));
|
||||
return;
|
||||
} else {
|
||||
error_matrixid_label_->setText("");
|
||||
@ -395,7 +396,7 @@ LoginPage::onLoginButtonClicked()
|
||||
user = parse<User>(matrixid_input_->text().toStdString());
|
||||
} catch (const std::exception &) {
|
||||
showError(error_matrixid_label_,
|
||||
"You have entered an invalid Matrix ID e.g @joe:matrix.org");
|
||||
tr("You have entered an invalid Matrix ID e.g @joe:matrix.org"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -61,10 +61,15 @@ class MainWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY(int x READ x CONSTANT)
|
||||
Q_PROPERTY(int y READ y CONSTANT)
|
||||
Q_PROPERTY(int width READ width CONSTANT)
|
||||
Q_PROPERTY(int height READ height CONSTANT)
|
||||
|
||||
public:
|
||||
explicit MainWindow(QWidget *parent = nullptr);
|
||||
|
||||
static MainWindow *instance() { return instance_; };
|
||||
static MainWindow *instance() { return instance_; }
|
||||
void saveCurrentWindowSize();
|
||||
|
||||
void openLeaveRoomDialog(const QString &room_id);
|
||||
|
@ -1,6 +1,7 @@
|
||||
#include "MatrixClient.h"
|
||||
|
||||
#include <memory>
|
||||
#include <set>
|
||||
|
||||
#include <QMetaType>
|
||||
#include <QObject>
|
||||
@ -21,6 +22,7 @@ Q_DECLARE_METATYPE(nlohmann::json)
|
||||
Q_DECLARE_METATYPE(std::string)
|
||||
Q_DECLARE_METATYPE(std::vector<std::string>)
|
||||
Q_DECLARE_METATYPE(std::vector<QString>)
|
||||
Q_DECLARE_METATYPE(std::set<QString>)
|
||||
|
||||
namespace {
|
||||
auto client_ = std::make_shared<mtx::http::Client>();
|
||||
@ -55,6 +57,7 @@ init()
|
||||
qRegisterMetaType<std::vector<std::string>>();
|
||||
qRegisterMetaType<std::vector<QString>>();
|
||||
qRegisterMetaType<std::map<QString, bool>>("std::map<QString, bool>");
|
||||
qRegisterMetaType<std::set<QString>>();
|
||||
}
|
||||
|
||||
} // namespace http
|
||||
|
10
src/Olm.cpp
10
src/Olm.cpp
@ -890,12 +890,15 @@ decryptEvent(const MegolmSessionIndex &index,
|
||||
std::string msg_str;
|
||||
try {
|
||||
auto session = cache::client()->getInboundMegolmSession(index);
|
||||
|
||||
auto res =
|
||||
olm::client()->decrypt_group_message(session.get(), event.content.ciphertext);
|
||||
msg_str = std::string((char *)res.data.data(), res.data.size());
|
||||
} catch (const lmdb::error &e) {
|
||||
return {DecryptionErrorCode::DbError, e.what(), std::nullopt};
|
||||
} catch (const mtx::crypto::olm_exception &e) {
|
||||
if (e.error_code() == mtx::crypto::OlmErrorCode::UNKNOWN_MESSAGE_INDEX)
|
||||
return {DecryptionErrorCode::MissingSessionIndex, e.what(), std::nullopt};
|
||||
return {DecryptionErrorCode::DecryptionFailed, e.what(), std::nullopt};
|
||||
}
|
||||
|
||||
@ -961,6 +964,13 @@ send_encrypted_to_device_messages(const std::map<std::string, std::vector<std::s
|
||||
|
||||
auto d = deviceKeys->device_keys.at(device);
|
||||
|
||||
if (!d.keys.count("curve25519:" + device) ||
|
||||
!d.keys.count("ed25519:" + device)) {
|
||||
nhlog::crypto()->warn("Skipping device {} since it has no keys!",
|
||||
device);
|
||||
continue;
|
||||
}
|
||||
|
||||
auto session =
|
||||
cache::getLatestOlmSession(d.keys.at("curve25519:" + device));
|
||||
if (!session || force_new_session) {
|
||||
|
12
src/Olm.h
12
src/Olm.h
@ -17,11 +17,13 @@ enum class DecryptionErrorCode
|
||||
{
|
||||
MissingSession, // Session was not found, retrieve from backup or request from other devices
|
||||
// and try again
|
||||
DbError, // DB read failed
|
||||
DecryptionFailed, // libolm error
|
||||
ParsingFailed, // Failed to parse the actual event
|
||||
ReplayAttack, // Megolm index reused
|
||||
UnknownFingerprint, // Unknown device Fingerprint
|
||||
MissingSessionIndex, // Session was found, but it does not reach back enough to this index,
|
||||
// retrieve from backup or request from other devices and try again
|
||||
DbError, // DB read failed
|
||||
DecryptionFailed, // libolm error
|
||||
ParsingFailed, // Failed to parse the actual event
|
||||
ReplayAttack, // Megolm index reused
|
||||
UnknownFingerprint, // Unknown device Fingerprint
|
||||
};
|
||||
|
||||
struct DecryptionResult
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
#include <QDateTime>
|
||||
#include <QInputDialog>
|
||||
#include <QMenu>
|
||||
#include <QMouseEvent>
|
||||
#include <QPainter>
|
||||
#include <QSettings>
|
||||
@ -32,7 +33,6 @@
|
||||
#include "Splitter.h"
|
||||
#include "UserSettingsPage.h"
|
||||
#include "Utils.h"
|
||||
#include "ui/Menu.h"
|
||||
#include "ui/Ripple.h"
|
||||
#include "ui/RippleOverlay.h"
|
||||
|
||||
@ -98,7 +98,7 @@ RoomInfoListItem::init(QWidget *parent)
|
||||
|
||||
bubbleDiameter_ = QFontMetrics(unreadCountFont_).averageCharWidth() * 3;
|
||||
|
||||
menu_ = new Menu(this);
|
||||
menu_ = new QMenu(this);
|
||||
leaveRoom_ = new QAction(tr("Leave room"), this);
|
||||
connect(leaveRoom_, &QAction::triggered, this, [this]() { emit leaveRoom(roomId_); });
|
||||
|
||||
@ -145,11 +145,12 @@ RoomInfoListItem::init(QWidget *parent)
|
||||
tagAction->setWhatsThis(tr("Adds or removes the specified tag.",
|
||||
"WhatsThis hint for tag menu actions"));
|
||||
|
||||
for (const auto &riTag : roomInfo.tags)
|
||||
for (const auto &riTag : roomInfo.tags) {
|
||||
if (riTag == tag) {
|
||||
tagAction->setChecked(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
connect(tagAction, &QAction::triggered, this, [this, tag](bool checked) {
|
||||
if (checked)
|
||||
|
@ -28,7 +28,7 @@
|
||||
#include "UserSettingsPage.h"
|
||||
#include "ui/Avatar.h"
|
||||
|
||||
class Menu;
|
||||
class QMenu;
|
||||
class RippleOverlay;
|
||||
|
||||
class RoomInfoListItem : public QWidget
|
||||
@ -178,7 +178,7 @@ private:
|
||||
|
||||
DescInfo lastMsgInfo_;
|
||||
|
||||
Menu *menu_;
|
||||
QMenu *menu_;
|
||||
QAction *leaveRoom_;
|
||||
|
||||
bool isPressed_ = false;
|
||||
|
@ -50,8 +50,8 @@ RoomList::RoomList(QSharedPointer<UserSettings> userSettings, QWidget *parent)
|
||||
QScroller::grabGesture(scrollArea_, QScroller::TouchGesture);
|
||||
QScroller::grabGesture(scrollArea_, QScroller::LeftMouseButtonGesture);
|
||||
|
||||
// The scrollbar on macOS will hide itself when not active so it won't interfere
|
||||
// with the content.
|
||||
// The scrollbar on macOS will hide itself when not active so it won't interfere
|
||||
// with the content.
|
||||
#if not defined(Q_OS_MAC)
|
||||
scrollArea_->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
#endif
|
||||
@ -411,20 +411,24 @@ RoomList::closeJoinRoomDialog(bool isJoining, QString roomAlias)
|
||||
}
|
||||
|
||||
void
|
||||
RoomList::removeFilter()
|
||||
RoomList::removeFilter(const std::set<QString> &roomsToHide)
|
||||
{
|
||||
setUpdatesEnabled(false);
|
||||
for (int i = 0; i < contentsLayout_->count(); i++) {
|
||||
auto widget =
|
||||
qobject_cast<RoomInfoListItem *>(contentsLayout_->itemAt(i)->widget());
|
||||
if (widget)
|
||||
widget->show();
|
||||
if (widget) {
|
||||
if (roomsToHide.find(widget->roomId()) == roomsToHide.end())
|
||||
widget->show();
|
||||
else
|
||||
widget->hide();
|
||||
}
|
||||
}
|
||||
setUpdatesEnabled(true);
|
||||
}
|
||||
|
||||
void
|
||||
RoomList::applyFilter(const std::map<QString, bool> &filter)
|
||||
RoomList::applyFilter(const std::set<QString> &filter)
|
||||
{
|
||||
// Disabling paint updates will resolve issues with screen flickering on big room lists.
|
||||
setUpdatesEnabled(false);
|
||||
|
@ -23,6 +23,8 @@
|
||||
#include <QVBoxLayout>
|
||||
#include <QWidget>
|
||||
|
||||
#include <set>
|
||||
|
||||
#include "CacheStructs.h"
|
||||
#include "UserSettingsPage.h"
|
||||
|
||||
@ -54,9 +56,9 @@ public:
|
||||
void addInvitedRoom(const QString &room_id, const RoomInfo &info);
|
||||
void removeRoom(const QString &room_id, bool reset);
|
||||
//! Hide rooms that are not present in the given filter.
|
||||
void applyFilter(const std::map<QString, bool> &rooms);
|
||||
void applyFilter(const std::set<QString> &rooms);
|
||||
//! Show all the available rooms.
|
||||
void removeFilter();
|
||||
void removeFilter(const std::set<QString> &roomsToHide);
|
||||
void updateRoom(const QString &room_id, const RoomInfo &info);
|
||||
void cleanupInvites(const std::map<QString, bool> &invites);
|
||||
|
||||
|
@ -37,20 +37,22 @@ Splitter::restoreSizes(int fallback)
|
||||
int savedWidth = settings.value("sidebar/width").toInt();
|
||||
|
||||
auto left = widget(0);
|
||||
if (savedWidth == 0) {
|
||||
if (savedWidth <= 0) {
|
||||
hideSidebar();
|
||||
return;
|
||||
} else if (savedWidth == sz_.small) {
|
||||
} else if (savedWidth <= sz_.small) {
|
||||
if (left) {
|
||||
left->setMinimumWidth(sz_.small);
|
||||
left->setMaximumWidth(sz_.small);
|
||||
return;
|
||||
}
|
||||
} else if (savedWidth < sz_.normal) {
|
||||
savedWidth = sz_.normal;
|
||||
}
|
||||
|
||||
left->setMinimumWidth(sz_.normal);
|
||||
left->setMaximumWidth(2 * sz_.normal);
|
||||
setSizes({sz_.normal, fallback - sz_.normal});
|
||||
setSizes({savedWidth, fallback - savedWidth});
|
||||
|
||||
setStretchFactor(0, 0);
|
||||
setStretchFactor(1, 1);
|
||||
|
@ -125,6 +125,10 @@ UserInfoWidget::UserInfoWidget(QWidget *parent)
|
||||
ChatPage::instance()->setStatus(text);
|
||||
});
|
||||
|
||||
auto userProfileAction = menu->addAction(tr("User Profile Settings"));
|
||||
connect(
|
||||
userProfileAction, &QAction::triggered, this, [this]() { emit openGlobalUserProfile(); });
|
||||
|
||||
#if 0 // disable presence menu until issues in synapse are resolved
|
||||
auto setAutoPresence = menu->addAction(tr("Set presence automatically"));
|
||||
connect(setAutoPresence, &QAction::triggered, this, []() {
|
||||
|
@ -51,6 +51,9 @@ protected:
|
||||
void paintEvent(QPaintEvent *event) override;
|
||||
void contextMenuEvent(QContextMenuEvent *) override;
|
||||
|
||||
signals:
|
||||
void openGlobalUserProfile();
|
||||
|
||||
private:
|
||||
Avatar *userAvatar_;
|
||||
|
||||
|
@ -81,6 +81,7 @@ UserSettings::load(std::optional<QString> profile)
|
||||
hasAlertOnNotification_ = settings.value("user/alert_on_notification", false).toBool();
|
||||
startInTray_ = settings.value("user/window/start_in_tray", false).toBool();
|
||||
groupView_ = settings.value("user/group_view", true).toBool();
|
||||
hiddenTags_ = settings.value("user/hidden_tags", QStringList{}).toStringList();
|
||||
buttonsInTimeline_ = settings.value("user/timeline/buttons", true).toBool();
|
||||
timelineMaxWidth_ = settings.value("user/timeline/max_width", 0).toInt();
|
||||
messageHoverHighlight_ =
|
||||
@ -186,6 +187,13 @@ UserSettings::setGroupView(bool state)
|
||||
save();
|
||||
}
|
||||
|
||||
void
|
||||
UserSettings::setHiddenTags(QStringList hiddenTags)
|
||||
{
|
||||
hiddenTags_ = hiddenTags;
|
||||
save();
|
||||
}
|
||||
|
||||
void
|
||||
UserSettings::setMarkdown(bool state)
|
||||
{
|
||||
@ -564,6 +572,7 @@ UserSettings::save()
|
||||
settings.setValue("minor_events", sortByImportance_);
|
||||
settings.setValue("read_receipts", readReceipts_);
|
||||
settings.setValue("group_view", groupView_);
|
||||
settings.setValue("hidden_tags", hiddenTags_);
|
||||
settings.setValue("markdown_enabled", markdown_);
|
||||
settings.setValue("desktop_notifications", hasDesktopNotifications_);
|
||||
settings.setValue("alert_on_notification", hasAlertOnNotification_);
|
||||
|
@ -150,6 +150,7 @@ public:
|
||||
void setAccessToken(QString accessToken);
|
||||
void setDeviceId(QString deviceId);
|
||||
void setHomeserver(QString homeserver);
|
||||
void setHiddenTags(QStringList hiddenTags);
|
||||
|
||||
QString theme() const { return !theme_.isEmpty() ? theme_ : defaultTheme_; }
|
||||
bool messageHoverHighlight() const { return messageHoverHighlight_; }
|
||||
@ -190,6 +191,7 @@ public:
|
||||
QString accessToken() const { return accessToken_; }
|
||||
QString deviceId() const { return deviceId_; }
|
||||
QString homeserver() const { return homeserver_; }
|
||||
QStringList hiddenTags() const { return hiddenTags_; }
|
||||
|
||||
signals:
|
||||
void groupViewStateChanged(bool state);
|
||||
@ -269,6 +271,7 @@ private:
|
||||
QString accessToken_;
|
||||
QString deviceId_;
|
||||
QString homeserver_;
|
||||
QStringList hiddenTags_;
|
||||
|
||||
static QSharedPointer<UserSettings> instance_;
|
||||
};
|
||||
|
@ -55,8 +55,7 @@ utils::codepointIsEmoji(uint code)
|
||||
{
|
||||
// TODO: Be more precise here.
|
||||
return (code >= 0x2600 && code <= 0x27bf) || (code >= 0x2b00 && code <= 0x2bff) ||
|
||||
(code >= 0x1f300 && code <= 0x1f3ff) || (code >= 0x1f000 && code <= 0x1faff) ||
|
||||
code == 0x200d;
|
||||
(code >= 0x1f000 && code <= 0x1faff) || code == 0x200d || code == 0xfe0f;
|
||||
}
|
||||
|
||||
QString
|
||||
|
@ -63,14 +63,14 @@ EmojiProxyModel::EmojiProxyModel(QObject *parent)
|
||||
|
||||
EmojiProxyModel::~EmojiProxyModel() {}
|
||||
|
||||
EmojiCategory
|
||||
Emoji::Category
|
||||
EmojiProxyModel::category() const
|
||||
{
|
||||
return category_;
|
||||
}
|
||||
|
||||
void
|
||||
EmojiProxyModel::setCategory(EmojiCategory cat)
|
||||
EmojiProxyModel::setCategory(Emoji::Category cat)
|
||||
{
|
||||
if (category_ == cat) {
|
||||
return;
|
||||
@ -106,7 +106,7 @@ EmojiProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent
|
||||
const Emoji emoji = index.data(static_cast<int>(EmojiModel::Roles::Emoji)).value<Emoji>();
|
||||
|
||||
// TODO: Add favorites / recently used
|
||||
if (category_ != EmojiCategory::Search) {
|
||||
if (category_ != Emoji::Category::Search) {
|
||||
return emoji.category == category_;
|
||||
}
|
||||
|
||||
|
@ -36,15 +36,15 @@ class EmojiProxyModel : public QSortFilterProxyModel
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY(
|
||||
emoji::EmojiCategory category READ category WRITE setCategory NOTIFY categoryChanged)
|
||||
emoji::Emoji::Category category READ category WRITE setCategory NOTIFY categoryChanged)
|
||||
Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
|
||||
|
||||
public:
|
||||
explicit EmojiProxyModel(QObject *parent = nullptr);
|
||||
~EmojiProxyModel() override;
|
||||
|
||||
EmojiCategory category() const;
|
||||
void setCategory(EmojiCategory cat);
|
||||
Emoji::Category category() const;
|
||||
void setCategory(Emoji::Category cat);
|
||||
|
||||
QString filter() const;
|
||||
void setFilter(const QString &filter);
|
||||
@ -57,7 +57,7 @@ protected:
|
||||
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
|
||||
|
||||
private:
|
||||
EmojiCategory category_ = EmojiCategory::Search;
|
||||
Emoji::Category category_ = Emoji::Category::Search;
|
||||
emoji::Provider emoji_provider_;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -26,32 +26,32 @@
|
||||
namespace emoji {
|
||||
Q_NAMESPACE
|
||||
|
||||
enum class EmojiCategory
|
||||
{
|
||||
People,
|
||||
Nature,
|
||||
Food,
|
||||
Activity,
|
||||
Travel,
|
||||
Objects,
|
||||
Symbols,
|
||||
Flags,
|
||||
Search
|
||||
};
|
||||
Q_ENUM_NS(EmojiCategory)
|
||||
|
||||
struct Emoji
|
||||
{
|
||||
Q_GADGET
|
||||
public:
|
||||
enum class Category
|
||||
{
|
||||
People,
|
||||
Nature,
|
||||
Food,
|
||||
Activity,
|
||||
Travel,
|
||||
Objects,
|
||||
Symbols,
|
||||
Flags,
|
||||
Search
|
||||
};
|
||||
Q_ENUM(Category)
|
||||
|
||||
Q_PROPERTY(const QString &unicode MEMBER unicode)
|
||||
Q_PROPERTY(const QString &shortName MEMBER shortName)
|
||||
Q_PROPERTY(emoji::EmojiCategory category MEMBER category)
|
||||
Q_PROPERTY(emoji::Emoji::Category category MEMBER category)
|
||||
|
||||
public:
|
||||
QString unicode;
|
||||
QString shortName;
|
||||
EmojiCategory category;
|
||||
Category category;
|
||||
};
|
||||
|
||||
class Provider
|
||||
|
@ -93,9 +93,9 @@ screenCenter(int width, int height)
|
||||
}
|
||||
|
||||
void
|
||||
createCacheDirectory()
|
||||
createStandardDirectory(QStandardPaths::StandardLocation path)
|
||||
{
|
||||
auto dir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
|
||||
auto dir = QStandardPaths::writableLocation(path);
|
||||
|
||||
if (!QDir().mkpath(dir)) {
|
||||
throw std::runtime_error(
|
||||
@ -188,7 +188,8 @@ main(int argc, char *argv[])
|
||||
|
||||
http::init();
|
||||
|
||||
createCacheDirectory();
|
||||
createStandardDirectory(QStandardPaths::CacheLocation);
|
||||
createStandardDirectory(QStandardPaths::AppDataLocation);
|
||||
|
||||
registerSignalHandlers();
|
||||
|
||||
|
@ -47,7 +47,6 @@ public:
|
||||
|
||||
private:
|
||||
QDBusInterface dbus;
|
||||
uint showNotification(const QString summary, const QString text, const QImage image);
|
||||
void closeNotification(uint id);
|
||||
|
||||
// notification ID to (room ID, event ID)
|
||||
|
@ -1,10 +1,12 @@
|
||||
#include "notifications/Manager.h"
|
||||
|
||||
#include <QDBusConnection>
|
||||
#include <QDBusMessage>
|
||||
#include <QDBusMetaType>
|
||||
#include <QDBusPendingCallWatcher>
|
||||
#include <QDBusPendingReply>
|
||||
#include <QDebug>
|
||||
#include <QImage>
|
||||
#include <QtDBus/QDBusConnection>
|
||||
#include <QtDBus/QDBusMessage>
|
||||
#include <QtDBus/QDBusMetaType>
|
||||
|
||||
NotificationsManager::NotificationsManager(QObject *parent)
|
||||
: QObject(parent)
|
||||
@ -36,6 +38,12 @@ NotificationsManager::NotificationsManager(QObject *parent)
|
||||
SLOT(notificationReplied(uint, QString)));
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is based on code from
|
||||
* https://github.com/rohieb/StratumsphereTrayIcon
|
||||
* Copyright (C) 2012 Roland Hieber <rohieb@rohieb.name>
|
||||
* Licensed under the GNU General Public License, version 3
|
||||
*/
|
||||
void
|
||||
NotificationsManager::postNotification(const QString &roomid,
|
||||
const QString &eventid,
|
||||
@ -43,30 +51,16 @@ NotificationsManager::postNotification(const QString &roomid,
|
||||
const QString &sender,
|
||||
const QString &text,
|
||||
const QImage &icon)
|
||||
{
|
||||
uint id = showNotification(roomname, sender + ": " + text, icon);
|
||||
notificationIds[id] = roomEventId{roomid, eventid};
|
||||
}
|
||||
/**
|
||||
* This function is based on code from
|
||||
* https://github.com/rohieb/StratumsphereTrayIcon
|
||||
* Copyright (C) 2012 Roland Hieber <rohieb@rohieb.name>
|
||||
* Licensed under the GNU General Public License, version 3
|
||||
*/
|
||||
uint
|
||||
NotificationsManager::showNotification(const QString summary,
|
||||
const QString text,
|
||||
const QImage image)
|
||||
{
|
||||
QVariantMap hints;
|
||||
hints["image-data"] = image;
|
||||
hints["image-data"] = icon;
|
||||
hints["sound-name"] = "message-new-instant";
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << "nheko"; // app_name
|
||||
argumentList << (uint)0; // replace_id
|
||||
argumentList << ""; // app_icon
|
||||
argumentList << summary; // summary
|
||||
argumentList << text; // body
|
||||
argumentList << "nheko"; // app_name
|
||||
argumentList << (uint)0; // replace_id
|
||||
argumentList << ""; // app_icon
|
||||
argumentList << roomname; // summary
|
||||
argumentList << sender + ": " + text; // body
|
||||
// The list of actions has always the action name and then a localized version of that
|
||||
// action. Currently we just use an empty string for that.
|
||||
// TODO(Nico): Look into what to actually put there.
|
||||
@ -79,31 +73,33 @@ NotificationsManager::showNotification(const QString summary,
|
||||
static QDBusInterface notifyApp("org.freedesktop.Notifications",
|
||||
"/org/freedesktop/Notifications",
|
||||
"org.freedesktop.Notifications");
|
||||
QDBusMessage reply =
|
||||
notifyApp.callWithArgumentList(QDBus::AutoDetect, "Notify", argumentList);
|
||||
if (reply.type() == QDBusMessage::ErrorMessage) {
|
||||
qDebug() << "D-Bus Error:" << reply.errorMessage();
|
||||
return 0;
|
||||
} else {
|
||||
return reply.arguments().first().toUInt();
|
||||
}
|
||||
return true;
|
||||
QDBusPendingCall call = notifyApp.asyncCallWithArgumentList("Notify", argumentList);
|
||||
auto watcher = new QDBusPendingCallWatcher{call, this};
|
||||
connect(
|
||||
watcher, &QDBusPendingCallWatcher::finished, this, [watcher, this, roomid, eventid]() {
|
||||
if (watcher->reply().type() == QDBusMessage::ErrorMessage)
|
||||
qDebug() << "D-Bus Error:" << watcher->reply().errorMessage();
|
||||
else
|
||||
notificationIds[watcher->reply().arguments().first().toUInt()] =
|
||||
roomEventId{roomid, eventid};
|
||||
watcher->deleteLater();
|
||||
});
|
||||
}
|
||||
|
||||
void
|
||||
NotificationsManager::closeNotification(uint id)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << (uint)id; // replace_id
|
||||
|
||||
static QDBusInterface closeCall("org.freedesktop.Notifications",
|
||||
"/org/freedesktop/Notifications",
|
||||
"org.freedesktop.Notifications");
|
||||
QDBusMessage reply =
|
||||
closeCall.callWithArgumentList(QDBus::AutoDetect, "CloseNotification", argumentList);
|
||||
if (reply.type() == QDBusMessage::ErrorMessage) {
|
||||
qDebug() << "D-Bus Error:" << reply.errorMessage();
|
||||
}
|
||||
auto call = closeCall.asyncCall("CloseNotification", (uint)id); // replace_id
|
||||
auto watcher = new QDBusPendingCallWatcher{call, this};
|
||||
connect(watcher, &QDBusPendingCallWatcher::finished, this, [watcher, this]() {
|
||||
if (watcher->reply().type() == QDBusMessage::ErrorMessage) {
|
||||
qDebug() << "D-Bus Error:" << watcher->reply().errorMessage();
|
||||
};
|
||||
watcher->deleteLater();
|
||||
});
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -229,6 +229,9 @@ EventStore::clearTimeline()
|
||||
}
|
||||
nhlog::ui()->info("Range {} {}", this->last, this->first);
|
||||
|
||||
decryptedEvents_.clear();
|
||||
events_.clear();
|
||||
|
||||
emit endResetModel();
|
||||
}
|
||||
|
||||
@ -239,9 +242,12 @@ EventStore::receivedSessionKey(const std::string &session_id)
|
||||
return;
|
||||
|
||||
auto request = pending_key_requests.at(session_id);
|
||||
pending_key_requests.erase(session_id);
|
||||
|
||||
olm::send_key_request_for(request.events.front(), request.request_id, true);
|
||||
// Don't request keys again until Nheko is restarted (for now)
|
||||
pending_key_requests[session_id].events.clear();
|
||||
|
||||
if (!request.events.empty())
|
||||
olm::send_key_request_for(request.events.front(), request.request_id, true);
|
||||
|
||||
for (const auto &e : request.events) {
|
||||
auto idx = idToIndex(e.event_id);
|
||||
@ -265,6 +271,9 @@ EventStore::handleSync(const mtx::responses::Timeline &events)
|
||||
emit beginResetModel();
|
||||
this->first = std::numeric_limits<uint64_t>::max();
|
||||
this->last = std::numeric_limits<uint64_t>::max();
|
||||
|
||||
decryptedEvents_.clear();
|
||||
events_.clear();
|
||||
emit endResetModel();
|
||||
return;
|
||||
}
|
||||
@ -273,6 +282,9 @@ EventStore::handleSync(const mtx::responses::Timeline &events)
|
||||
emit beginResetModel();
|
||||
this->last = range->last;
|
||||
this->first = range->first;
|
||||
|
||||
decryptedEvents_.clear();
|
||||
events_.clear();
|
||||
emit endResetModel();
|
||||
} else if (range->last > this->last) {
|
||||
emit beginInsertRows(toExternalIdx(this->last + 1), toExternalIdx(range->last));
|
||||
@ -543,12 +555,21 @@ EventStore::decryptEvent(const IdIndex &idx,
|
||||
|
||||
if (decryptionResult.error) {
|
||||
switch (*decryptionResult.error) {
|
||||
case olm::DecryptionErrorCode::MissingSession: {
|
||||
dummy.content.body =
|
||||
tr("-- Encrypted Event (No keys found for decryption) --",
|
||||
"Placeholder, when the message was not decrypted yet or can't be "
|
||||
"decrypted.")
|
||||
.toStdString();
|
||||
case olm::DecryptionErrorCode::MissingSession:
|
||||
case olm::DecryptionErrorCode::MissingSessionIndex: {
|
||||
if (decryptionResult.error == olm::DecryptionErrorCode::MissingSession)
|
||||
dummy.content.body =
|
||||
tr("-- Encrypted Event (No keys found for decryption) --",
|
||||
"Placeholder, when the message was not decrypted yet or can't "
|
||||
"be "
|
||||
"decrypted.")
|
||||
.toStdString();
|
||||
else
|
||||
dummy.content.body =
|
||||
tr("-- Encrypted Event (Key not valid for this index) --",
|
||||
"Placeholder, when the message can't be decrypted with this "
|
||||
"key since it is not valid for this index ")
|
||||
.toStdString();
|
||||
nhlog::crypto()->info("Could not find inbound megolm session ({}, {}, {})",
|
||||
index.room_id,
|
||||
index.session_id,
|
||||
@ -760,7 +781,8 @@ EventStore::fetchMore()
|
||||
if (cache::client()->previousBatchToken(room_id_) != opts.from) {
|
||||
nhlog::net()->warn("Cache cleared while fetching more messages, dropping "
|
||||
"/messages response");
|
||||
emit fetchedMore();
|
||||
if (!opts.to.empty())
|
||||
emit fetchedMore();
|
||||
return;
|
||||
}
|
||||
if (err) {
|
||||
|
@ -251,12 +251,14 @@ InputBar::openFileSelection()
|
||||
}
|
||||
|
||||
void
|
||||
InputBar::message(QString msg)
|
||||
InputBar::message(QString msg, MarkdownOverride useMarkdown)
|
||||
{
|
||||
mtx::events::msg::Text text = {};
|
||||
text.body = msg.trimmed().toStdString();
|
||||
|
||||
if (ChatPage::instance()->userSettings()->markdown()) {
|
||||
if ((ChatPage::instance()->userSettings()->markdown() &&
|
||||
useMarkdown == MarkdownOverride::NOT_SPECIFIED) ||
|
||||
useMarkdown == MarkdownOverride::ON) {
|
||||
text.formatted_body = utils::markdownToHtml(msg).toStdString();
|
||||
|
||||
// Don't send formatted_body, when we don't need to
|
||||
@ -477,6 +479,10 @@ InputBar::command(QString command, QString args)
|
||||
room->clearTimeline();
|
||||
} else if (command == "rotate-megolm-session") {
|
||||
cache::dropOutboundMegolmSession(room->roomId().toStdString());
|
||||
} else if (command == "md") {
|
||||
message(args, MarkdownOverride::ON);
|
||||
} else if (command == "plain") {
|
||||
message(args, MarkdownOverride::OFF);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,13 @@ class QMimeData;
|
||||
class QDropEvent;
|
||||
class QStringList;
|
||||
|
||||
enum class MarkdownOverride
|
||||
{
|
||||
NOT_SPECIFIED, // no override set
|
||||
ON,
|
||||
OFF,
|
||||
};
|
||||
|
||||
class InputBar : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
@ -41,7 +48,7 @@ public slots:
|
||||
void updateState(int selectionStart, int selectionEnd, int cursorPosition, QString text);
|
||||
void openFileSelection();
|
||||
bool uploading() const { return uploading_; }
|
||||
void message(QString body);
|
||||
void message(QString body, MarkdownOverride useMarkdown = MarkdownOverride::NOT_SPECIFIED);
|
||||
|
||||
QObject *completerFor(QString completerName);
|
||||
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include <type_traits>
|
||||
|
||||
#include <QCache>
|
||||
#include <QDesktopServices>
|
||||
#include <QFileDialog>
|
||||
#include <QMimeDatabase>
|
||||
#include <QRegularExpression>
|
||||
@ -353,7 +354,8 @@ TimelineModel::data(const mtx::events::collections::TimelineEvents &event, int r
|
||||
return QVariant(emojiCount);
|
||||
}
|
||||
case Body:
|
||||
return QVariant(utils::replaceEmoji(QString::fromStdString(body(event))));
|
||||
return QVariant(
|
||||
utils::replaceEmoji(QString::fromStdString(body(event)).toHtmlEscaped()));
|
||||
case FormattedBody: {
|
||||
const static QRegularExpression replyFallback(
|
||||
"<mx-reply>.*</mx-reply>", QRegularExpression::DotMatchesEverythingOption);
|
||||
@ -797,9 +799,9 @@ TimelineModel::viewDecryptedRawMessage(QString id) const
|
||||
}
|
||||
|
||||
void
|
||||
TimelineModel::openUserProfile(QString userid)
|
||||
TimelineModel::openUserProfile(QString userid, bool global)
|
||||
{
|
||||
emit openProfile(new UserProfile(room_id_, userid, manager_, this));
|
||||
emit openProfile(new UserProfile(global ? "" : room_id_, userid, manager_, this));
|
||||
}
|
||||
|
||||
void
|
||||
@ -1072,6 +1074,14 @@ TimelineModel::addPendingMessage(mtx::events::collections::TimelineEvents event)
|
||||
std::visit(SendMessageVisitor{this}, event);
|
||||
}
|
||||
|
||||
void
|
||||
TimelineModel::openMedia(QString eventId)
|
||||
{
|
||||
cacheMedia(eventId, [](QString filename) {
|
||||
QDesktopServices::openUrl(QUrl::fromLocalFile(filename));
|
||||
});
|
||||
}
|
||||
|
||||
bool
|
||||
TimelineModel::saveMedia(QString eventId) const
|
||||
{
|
||||
@ -1148,7 +1158,7 @@ TimelineModel::saveMedia(QString eventId) const
|
||||
}
|
||||
|
||||
void
|
||||
TimelineModel::cacheMedia(QString eventId)
|
||||
TimelineModel::cacheMedia(QString eventId, std::function<void(const QString)> callback)
|
||||
{
|
||||
mtx::events::collections::TimelineEvents *event = events.get(eventId.toStdString(), "");
|
||||
if (!event)
|
||||
@ -1168,12 +1178,13 @@ TimelineModel::cacheMedia(QString eventId)
|
||||
|
||||
QString suffix = QMimeDatabase().mimeTypeForName(mimeType).preferredSuffix();
|
||||
|
||||
const auto url = mxcUrl.toStdString();
|
||||
const auto url = mxcUrl.toStdString();
|
||||
const auto name = QString(mxcUrl).remove("mxc://");
|
||||
QFileInfo filename(QString("%1/media_cache/%2.%3")
|
||||
.arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation))
|
||||
.arg(QString(mxcUrl).remove("mxc://"))
|
||||
.arg(name)
|
||||
.arg(suffix));
|
||||
if (QDir::cleanPath(filename.path()) != filename.path()) {
|
||||
if (QDir::cleanPath(name) != name) {
|
||||
nhlog::net()->warn("mxcUrl '{}' is not safe, not downloading file", url);
|
||||
return;
|
||||
}
|
||||
@ -1182,15 +1193,18 @@ TimelineModel::cacheMedia(QString eventId)
|
||||
|
||||
if (filename.isReadable()) {
|
||||
emit mediaCached(mxcUrl, filename.filePath());
|
||||
if (callback) {
|
||||
callback(filename.filePath());
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
http::client()->download(
|
||||
url,
|
||||
[this, mxcUrl, filename, url, encryptionInfo](const std::string &data,
|
||||
const std::string &,
|
||||
const std::string &,
|
||||
mtx::http::RequestErr err) {
|
||||
[this, callback, mxcUrl, filename, url, encryptionInfo](const std::string &data,
|
||||
const std::string &,
|
||||
const std::string &,
|
||||
mtx::http::RequestErr err) {
|
||||
if (err) {
|
||||
nhlog::net()->warn("failed to retrieve image {}: {} {}",
|
||||
url,
|
||||
@ -1212,6 +1226,10 @@ TimelineModel::cacheMedia(QString eventId)
|
||||
|
||||
file.write(QByteArray(temp.data(), (int)temp.size()));
|
||||
file.close();
|
||||
|
||||
if (callback) {
|
||||
callback(filename.filePath());
|
||||
}
|
||||
} catch (const std::exception &e) {
|
||||
nhlog::ui()->warn("Error while saving file to: {}", e.what());
|
||||
}
|
||||
@ -1220,6 +1238,12 @@ TimelineModel::cacheMedia(QString eventId)
|
||||
});
|
||||
}
|
||||
|
||||
void
|
||||
TimelineModel::cacheMedia(QString eventId)
|
||||
{
|
||||
cacheMedia(eventId, NULL);
|
||||
}
|
||||
|
||||
QString
|
||||
TimelineModel::formatTypingUsers(const std::vector<QString> &users, QColor bg)
|
||||
{
|
||||
|
@ -212,14 +212,16 @@ public:
|
||||
|
||||
Q_INVOKABLE void viewRawMessage(QString id) const;
|
||||
Q_INVOKABLE void viewDecryptedRawMessage(QString id) const;
|
||||
Q_INVOKABLE void openUserProfile(QString userid);
|
||||
Q_INVOKABLE void openUserProfile(QString userid, bool global = false);
|
||||
Q_INVOKABLE void replyAction(QString id);
|
||||
Q_INVOKABLE void readReceiptsAction(QString id) const;
|
||||
Q_INVOKABLE void redactEvent(QString id);
|
||||
Q_INVOKABLE int idToIndex(QString id) const;
|
||||
Q_INVOKABLE QString indexToId(int index) const;
|
||||
Q_INVOKABLE void openMedia(QString eventId);
|
||||
Q_INVOKABLE void cacheMedia(QString eventId);
|
||||
Q_INVOKABLE bool saveMedia(QString eventId) const;
|
||||
void cacheMedia(QString eventId, std::function<void(const QString filename)> callback);
|
||||
|
||||
std::vector<::Reaction> reactions(const std::string &event_id)
|
||||
{
|
||||
|
@ -128,6 +128,10 @@ TimelineViewManager::TimelineViewManager(CallManager *callManager, ChatPage *par
|
||||
"UserProfile needs to be instantiated on the C++ side");
|
||||
|
||||
static auto self = this;
|
||||
qmlRegisterSingletonType<MainWindow>(
|
||||
"im.nheko", 1, 0, "MainWindow", [](QQmlEngine *, QJSEngine *) -> QObject * {
|
||||
return MainWindow::instance();
|
||||
});
|
||||
qmlRegisterSingletonType<TimelineViewManager>(
|
||||
"im.nheko", 1, 0, "TimelineManager", [](QQmlEngine *, QJSEngine *) -> QObject * {
|
||||
return self;
|
||||
|
@ -7,6 +7,8 @@
|
||||
#include "mtx/responses/crypto.hpp"
|
||||
#include "timeline/TimelineModel.h"
|
||||
#include "timeline/TimelineViewManager.h"
|
||||
#include <mtx/responses.hpp>
|
||||
#include <mtx/responses/common.hpp>
|
||||
|
||||
UserProfile::UserProfile(QString roomid,
|
||||
QString userid,
|
||||
@ -44,6 +46,23 @@ UserProfile::UserProfile(QString roomid,
|
||||
}
|
||||
deviceList_.reset(deviceList_.deviceList_);
|
||||
});
|
||||
|
||||
connect(this,
|
||||
&UserProfile::globalUsernameRetrieved,
|
||||
this,
|
||||
&UserProfile::setGlobalUsername,
|
||||
Qt::QueuedConnection);
|
||||
|
||||
http::client()->get_profile(
|
||||
userid_.toStdString(),
|
||||
[this](const mtx::responses::Profile &res, mtx::http::RequestErr err) {
|
||||
if (err) {
|
||||
nhlog::net()->warn("failed to retrieve own profile info");
|
||||
return;
|
||||
}
|
||||
|
||||
emit globalUsernameRetrieved(QString::fromStdString(res.display_name));
|
||||
});
|
||||
}
|
||||
|
||||
QHash<int, QByteArray>
|
||||
@ -97,7 +116,7 @@ UserProfile::userid()
|
||||
QString
|
||||
UserProfile::displayName()
|
||||
{
|
||||
return cache::displayName(roomid_, userid_);
|
||||
return isGlobalUserProfile() ? globalUsername : cache::displayName(roomid_, userid_);
|
||||
}
|
||||
|
||||
QString
|
||||
@ -106,6 +125,12 @@ UserProfile::avatarUrl()
|
||||
return cache::avatarUrl(roomid_, userid_);
|
||||
}
|
||||
|
||||
bool
|
||||
UserProfile::isGlobalUserProfile() const
|
||||
{
|
||||
return roomid_ == "";
|
||||
}
|
||||
|
||||
bool
|
||||
UserProfile::getUserStatus()
|
||||
{
|
||||
@ -213,6 +238,40 @@ UserProfile::startChat()
|
||||
ChatPage::instance()->startChat(this->userid_);
|
||||
}
|
||||
|
||||
void
|
||||
UserProfile::changeUsername(QString username)
|
||||
{
|
||||
if (isGlobalUserProfile()) {
|
||||
// change global
|
||||
http::client()->set_displayname(
|
||||
username.toStdString(), [this](mtx::http::RequestErr err) {
|
||||
if (err) {
|
||||
nhlog::net()->warn("could not change username");
|
||||
return;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// change room username
|
||||
mtx::events::state::Member member;
|
||||
member.display_name = username.toStdString();
|
||||
member.avatar_url =
|
||||
cache::avatarUrl(roomid_,
|
||||
QString::fromStdString(http::client()->user_id().to_string()))
|
||||
.toStdString();
|
||||
member.membership = mtx::events::state::Membership::Join;
|
||||
|
||||
http::client()->send_state_event(
|
||||
roomid_.toStdString(),
|
||||
http::client()->user_id().to_string(),
|
||||
member,
|
||||
[](mtx::responses::EventId, mtx::http::RequestErr err) {
|
||||
if (err)
|
||||
nhlog::net()->error("Failed to set room displayname: {}",
|
||||
err->matrix_error.error);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
UserProfile::verify(QString device)
|
||||
{
|
||||
@ -228,3 +287,10 @@ UserProfile::unverify(QString device)
|
||||
{
|
||||
cache::markDeviceUnverified(userid_.toStdString(), device.toStdString());
|
||||
}
|
||||
|
||||
void
|
||||
UserProfile::setGlobalUsername(const QString &globalUser)
|
||||
{
|
||||
globalUsername = globalUser;
|
||||
emit displayNameChanged();
|
||||
}
|
@ -79,10 +79,11 @@ private:
|
||||
class UserProfile : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QString displayName READ displayName CONSTANT)
|
||||
Q_PROPERTY(QString displayName READ displayName NOTIFY displayNameChanged)
|
||||
Q_PROPERTY(QString userid READ userid CONSTANT)
|
||||
Q_PROPERTY(QString avatarUrl READ avatarUrl CONSTANT)
|
||||
Q_PROPERTY(DeviceInfoModel *deviceList READ deviceList CONSTANT)
|
||||
Q_PROPERTY(bool isGlobalUserProfile READ isGlobalUserProfile CONSTANT)
|
||||
Q_PROPERTY(bool isUserVerified READ getUserStatus NOTIFY userStatusChanged)
|
||||
Q_PROPERTY(
|
||||
bool userVerificationEnabled READ userVerificationEnabled NOTIFY userStatusChanged)
|
||||
@ -98,6 +99,7 @@ public:
|
||||
QString userid();
|
||||
QString displayName();
|
||||
QString avatarUrl();
|
||||
bool isGlobalUserProfile() const;
|
||||
bool getUserStatus();
|
||||
bool userVerificationEnabled() const;
|
||||
bool isSelf() const;
|
||||
@ -109,12 +111,19 @@ public:
|
||||
// Q_INVOKABLE void ignoreUser();
|
||||
Q_INVOKABLE void kickUser();
|
||||
Q_INVOKABLE void startChat();
|
||||
Q_INVOKABLE void changeUsername(QString username);
|
||||
|
||||
signals:
|
||||
void userStatusChanged();
|
||||
void displayNameChanged();
|
||||
void globalUsernameRetrieved(const QString &globalUser);
|
||||
|
||||
protected slots:
|
||||
void setGlobalUsername(const QString &globalUser);
|
||||
|
||||
private:
|
||||
QString roomid_, userid_;
|
||||
QString globalUsername;
|
||||
DeviceInfoModel deviceList_;
|
||||
bool isUserVerified = false;
|
||||
bool hasMasterKey = false;
|
||||
|
Loading…
Reference in New Issue
Block a user