Move typing display to qml

This commit is contained in:
Nicolas Werner 2020-01-17 01:25:14 +01:00
parent 8c5e4db42c
commit fe912240bc
18 changed files with 377 additions and 506 deletions

View File

@ -242,7 +242,6 @@ set(SRC_FILES
src/TextInputWidget.cpp src/TextInputWidget.cpp
src/TopRoomBar.cpp src/TopRoomBar.cpp
src/TrayIcon.cpp src/TrayIcon.cpp
src/TypingDisplay.cpp
src/Utils.cpp src/Utils.cpp
src/UserInfoWidget.cpp src/UserInfoWidget.cpp
src/UserSettingsPage.cpp src/UserSettingsPage.cpp
@ -379,7 +378,6 @@ qt5_wrap_cpp(MOC_HEADERS
src/TextInputWidget.h src/TextInputWidget.h
src/TopRoomBar.h src/TopRoomBar.h
src/TrayIcon.h src/TrayIcon.h
src/TypingDisplay.h
src/UserInfoWidget.h src/UserInfoWidget.h
src/UserSettingsPage.h src/UserSettingsPage.h
src/WelcomePage.h src/WelcomePage.h

View File

@ -4,12 +4,12 @@
<context> <context>
<name>ChatPage</name> <name>ChatPage</name>
<message> <message>
<location filename="../../src/ChatPage.cpp" line="+346"/> <location filename="../../src/ChatPage.cpp" line="+329"/>
<source>Failed to upload media. Please try again.</source> <source>Failed to upload media. Please try again.</source>
<translation>Medienupload fehlgeschlagen. Bitte versuche es erneut.</translation> <translation>Medienupload fehlgeschlagen. Bitte versuche es erneut.</translation>
</message> </message>
<message> <message>
<location line="+389"/> <location line="+392"/>
<source>Failed to restore OLM account. Please login again.</source> <source>Failed to restore OLM account. Please login again.</source>
<translation>Wiederherstellung des OLM Accounts fehlgeschlagen. Bitte logge dich erneut ein.</translation> <translation>Wiederherstellung des OLM Accounts fehlgeschlagen. Bitte logge dich erneut ein.</translation>
</message> </message>
@ -19,7 +19,7 @@
<translation>Gespeicherte Nachrichten konnten nicht wiederhergestellt werden. Bitte melde Dich erneut an.</translation> <translation>Gespeicherte Nachrichten konnten nicht wiederhergestellt werden. Bitte melde Dich erneut an.</translation>
</message> </message>
<message> <message>
<location line="+181"/> <location line="+148"/>
<source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
<translation>Fehler beim Setup der Verschlüsselungsschlüssel. Servermeldung: %1 %2. Bitte versuche es später erneut.</translation> <translation>Fehler beim Setup der Verschlüsselungsschlüssel. Servermeldung: %1 %2. Bitte versuche es später erneut.</translation>
</message> </message>
@ -72,7 +72,7 @@
<context> <context>
<name>EditModal</name> <name>EditModal</name>
<message> <message>
<location filename="../../src/dialogs/RoomSettings.cpp" line="+58"/> <location filename="../../src/dialogs/RoomSettings.cpp" line="+59"/>
<source>Apply</source> <source>Apply</source>
<translation>Anwenden</translation> <translation>Anwenden</translation>
</message> </message>
@ -182,7 +182,7 @@
<context> <context>
<name>MessageDelegate</name> <name>MessageDelegate</name>
<message> <message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+43"/> <location filename="../qml/delegates/MessageDelegate.qml" line="+60"/>
<source>redacted</source> <source>redacted</source>
<translation>gelöscht</translation> <translation>gelöscht</translation>
</message> </message>
@ -223,7 +223,7 @@
<context> <context>
<name>QuickSwitcher</name> <name>QuickSwitcher</name>
<message> <message>
<location filename="../../src/QuickSwitcher.cpp" line="+71"/> <location filename="../../src/QuickSwitcher.cpp" line="+72"/>
<source>Search for a room...</source> <source>Search for a room...</source>
<translation>Raum suchen</translation> <translation>Raum suchen</translation>
</message> </message>
@ -279,7 +279,7 @@
<context> <context>
<name>ReplyPopup</name> <name>ReplyPopup</name>
<message> <message>
<location filename="../../src/popups/ReplyPopup.cpp" line="+45"/> <location filename="../../src/popups/ReplyPopup.cpp" line="+46"/>
<source>Logout</source> <source>Logout</source>
<translation>Abmelden</translation> <translation>Abmelden</translation>
</message> </message>
@ -287,7 +287,7 @@
<context> <context>
<name>RoomInfo</name> <name>RoomInfo</name>
<message> <message>
<location filename="../../src/Cache.cpp" line="+2307"/> <location filename="../../src/Cache.cpp" line="+2303"/>
<source>no version stored</source> <source>no version stored</source>
<translation>keine Version gespeichert</translation> <translation>keine Version gespeichert</translation>
</message> </message>
@ -300,12 +300,12 @@
<translation>Raum verlassen</translation> <translation>Raum verlassen</translation>
</message> </message>
<message> <message>
<location line="+161"/> <location line="+151"/>
<source>Accept</source> <source>Accept</source>
<translation>Akzeptieren</translation> <translation>Akzeptieren</translation>
</message> </message>
<message> <message>
<location line="+1"/> <location line="+3"/>
<source>Decline</source> <source>Decline</source>
<translation>Ablehnen</translation> <translation>Ablehnen</translation>
</message> </message>
@ -364,13 +364,13 @@
<context> <context>
<name>TextInputWidget</name> <name>TextInputWidget</name>
<message> <message>
<location filename="../../src/TextInputWidget.cpp" line="+502"/> <location filename="../../src/TextInputWidget.cpp" line="+496"/>
<source>Send a file</source> <source>Send a file</source>
<translation>Versende Datei</translation> <translation>Versende Datei</translation>
</message> </message>
<message> <message>
<location line="+13"/> <location line="+13"/>
<location filename="../../src/TextInputWidget.h" line="+161"/> <location filename="../../src/TextInputWidget.h" line="+163"/>
<source>Write a message...</source> <source>Write a message...</source>
<translation>Schreibe eine Nachricht</translation> <translation>Schreibe eine Nachricht</translation>
</message> </message>
@ -385,7 +385,7 @@
<translation>Emoji</translation> <translation>Emoji</translation>
</message> </message>
<message> <message>
<location line="+72"/> <location line="+73"/>
<source>Select a file</source> <source>Select a file</source>
<translation>Datei auswählen</translation> <translation>Datei auswählen</translation>
</message> </message>
@ -403,7 +403,7 @@
<context> <context>
<name>TimelineModel</name> <name>TimelineModel</name>
<message> <message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+867"/> <location filename="../../src/timeline/TimelineModel.cpp" line="+687"/>
<source>-- Encrypted Event (No keys found for decryption) --</source> <source>-- Encrypted Event (No keys found for decryption) --</source>
<comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment> <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
<translation>-- verschlüsselter Event (keine Schlüssel zur Entschlüsselung gefunden) --</translation> <translation>-- verschlüsselter Event (keine Schlüssel zur Entschlüsselung gefunden) --</translation>
@ -427,18 +427,18 @@
<translation>-- Entschlüsselungsfehler (%1) --</translation> <translation>-- Entschlüsselungsfehler (%1) --</translation>
</message> </message>
<message> <message>
<location line="+25"/> <location line="+29"/>
<source>-- Encrypted Event (Unknown event type) --</source> <source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment> <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
<translation>-- verschlüsselter Event (Unbekannter Eventtyp) --</translation> <translation>-- verschlüsselter Event (Unbekannter Eventtyp) --</translation>
</message> </message>
<message> <message>
<location line="+54"/> <location line="+48"/>
<source>Message redaction failed: %1</source> <source>Message redaction failed: %1</source>
<translation>Nachricht zurückziehen fehlgeschlagen: %1</translation> <translation>Nachricht zurückziehen fehlgeschlagen: %1</translation>
</message> </message>
<message> <message>
<location line="+453"/> <location line="+454"/>
<source>Save image</source> <source>Save image</source>
<translation>Bild speichern</translation> <translation>Bild speichern</translation>
</message> </message>
@ -457,11 +457,20 @@
<source>Save file</source> <source>Save file</source>
<translation>Datei speichern</translation> <translation>Datei speichern</translation>
</message> </message>
<message numerus="yes">
<location line="+126"/>
<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">
<numerusform>%1%2 tippt</numerusform>
<numerusform>%1 und %2 tippen</numerusform>
</translation>
</message>
</context> </context>
<context> <context>
<name>TimelineRow</name> <name>TimelineRow</name>
<message> <message>
<location filename="../qml/TimelineRow.qml" line="+57"/> <location filename="../qml/TimelineRow.qml" line="+104"/>
<source>Reply</source> <source>Reply</source>
<translation>Antworten</translation> <translation>Antworten</translation>
</message> </message>
@ -550,18 +559,6 @@
<translation>Schließen</translation> <translation>Schließen</translation>
</message> </message>
</context> </context>
<context>
<name>TypingDisplay</name>
<message numerus="yes">
<location filename="../../src/TypingDisplay.cpp" line="+37"/>
<source>%1 and %2 are typing</source>
<comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
<translation>
<numerusform>%1%2 tippt</numerusform>
<numerusform>%1 und %2 tippen</numerusform>
</translation>
</message>
</context>
<context> <context>
<name>UserInfoWidget</name> <name>UserInfoWidget</name>
<message> <message>
@ -573,7 +570,7 @@
<context> <context>
<name>UserSettingsPage</name> <name>UserSettingsPage</name>
<message> <message>
<location filename="../../src/UserSettingsPage.cpp" line="+171"/> <location filename="../../src/UserSettingsPage.cpp" line="+172"/>
<source>Minimize to tray</source> <source>Minimize to tray</source>
<translation>Ins Benachrichtigungsfeld minimieren</translation> <translation>Ins Benachrichtigungsfeld minimieren</translation>
</message> </message>
@ -740,7 +737,7 @@
<context> <context>
<name>descriptiveTime</name> <name>descriptiveTime</name>
<message> <message>
<location filename="../../src/Utils.cpp" line="+104"/> <location filename="../../src/Utils.cpp" line="+106"/>
<source>Yesterday</source> <source>Yesterday</source>
<translation>Gestern</translation> <translation>Gestern</translation>
</message> </message>
@ -1014,7 +1011,7 @@ Medien-Größe: %2
<translation>Aktivierung der Verschlüsselung fehlgeschlagen: %1</translation> <translation>Aktivierung der Verschlüsselung fehlgeschlagen: %1</translation>
</message> </message>
<message> <message>
<location line="+148"/> <location line="+146"/>
<source>Select an avatar</source> <source>Select an avatar</source>
<translation>Wähle einen Avatar</translation> <translation>Wähle einen Avatar</translation>
</message> </message>
@ -1114,7 +1111,7 @@ Medien-Größe: %2
<context> <context>
<name>message-description sent:</name> <name>message-description sent:</name>
<message> <message>
<location filename="../../src/Utils.h" line="+95"/> <location filename="../../src/Utils.h" line="+100"/>
<source>You sent an audio clip</source> <source>You sent an audio clip</source>
<translation>Du hast eine Audiodatei gesendet.</translation> <translation>Du hast eine Audiodatei gesendet.</translation>
</message> </message>
@ -1210,7 +1207,7 @@ Medien-Größe: %2
<context> <context>
<name>utils</name> <name>utils</name>
<message> <message>
<location filename="../../src/Utils.cpp" line="+282"/> <location filename="../../src/Utils.cpp" line="+306"/>
<source>sent a file.</source> <source>sent a file.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -4,12 +4,12 @@
<context> <context>
<name>ChatPage</name> <name>ChatPage</name>
<message> <message>
<location filename="../../src/ChatPage.cpp" line="+346"/> <location filename="../../src/ChatPage.cpp" line="+329"/>
<source>Failed to upload media. Please try again.</source> <source>Failed to upload media. Please try again.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+389"/> <location line="+392"/>
<source>Failed to restore OLM account. Please login again.</source> <source>Failed to restore OLM account. Please login again.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -19,7 +19,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+181"/> <location line="+148"/>
<source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -72,7 +72,7 @@
<context> <context>
<name>EditModal</name> <name>EditModal</name>
<message> <message>
<location filename="../../src/dialogs/RoomSettings.cpp" line="+58"/> <location filename="../../src/dialogs/RoomSettings.cpp" line="+59"/>
<source>Apply</source> <source>Apply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -182,7 +182,7 @@
<context> <context>
<name>MessageDelegate</name> <name>MessageDelegate</name>
<message> <message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+43"/> <location filename="../qml/delegates/MessageDelegate.qml" line="+60"/>
<source>redacted</source> <source>redacted</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -223,7 +223,7 @@
<context> <context>
<name>QuickSwitcher</name> <name>QuickSwitcher</name>
<message> <message>
<location filename="../../src/QuickSwitcher.cpp" line="+71"/> <location filename="../../src/QuickSwitcher.cpp" line="+72"/>
<source>Search for a room...</source> <source>Search for a room...</source>
<translation>Αναζήτηση συνομιλίας...</translation> <translation>Αναζήτηση συνομιλίας...</translation>
</message> </message>
@ -279,7 +279,7 @@
<context> <context>
<name>ReplyPopup</name> <name>ReplyPopup</name>
<message> <message>
<location filename="../../src/popups/ReplyPopup.cpp" line="+45"/> <location filename="../../src/popups/ReplyPopup.cpp" line="+46"/>
<source>Logout</source> <source>Logout</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -287,7 +287,7 @@
<context> <context>
<name>RoomInfo</name> <name>RoomInfo</name>
<message> <message>
<location filename="../../src/Cache.cpp" line="+2307"/> <location filename="../../src/Cache.cpp" line="+2303"/>
<source>no version stored</source> <source>no version stored</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -300,12 +300,12 @@
<translation>Βγές</translation> <translation>Βγές</translation>
</message> </message>
<message> <message>
<location line="+161"/> <location line="+151"/>
<source>Accept</source> <source>Accept</source>
<translation>Αποδοχή</translation> <translation>Αποδοχή</translation>
</message> </message>
<message> <message>
<location line="+1"/> <location line="+3"/>
<source>Decline</source> <source>Decline</source>
<translation>Απόρριψη</translation> <translation>Απόρριψη</translation>
</message> </message>
@ -364,13 +364,13 @@
<context> <context>
<name>TextInputWidget</name> <name>TextInputWidget</name>
<message> <message>
<location filename="../../src/TextInputWidget.cpp" line="+502"/> <location filename="../../src/TextInputWidget.cpp" line="+496"/>
<source>Send a file</source> <source>Send a file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+13"/> <location line="+13"/>
<location filename="../../src/TextInputWidget.h" line="+161"/> <location filename="../../src/TextInputWidget.h" line="+163"/>
<source>Write a message...</source> <source>Write a message...</source>
<translation>Γράψε ένα μήνυμα...</translation> <translation>Γράψε ένα μήνυμα...</translation>
</message> </message>
@ -385,7 +385,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+72"/> <location line="+73"/>
<source>Select a file</source> <source>Select a file</source>
<translation>Διάλεξε ένα αρχείο</translation> <translation>Διάλεξε ένα αρχείο</translation>
</message> </message>
@ -403,7 +403,7 @@
<context> <context>
<name>TimelineModel</name> <name>TimelineModel</name>
<message> <message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+867"/> <location filename="../../src/timeline/TimelineModel.cpp" line="+687"/>
<source>-- Encrypted Event (No keys found for decryption) --</source> <source>-- Encrypted Event (No keys found for decryption) --</source>
<comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment> <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -427,18 +427,18 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+25"/> <location line="+29"/>
<source>-- Encrypted Event (Unknown event type) --</source> <source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment> <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+54"/> <location line="+48"/>
<source>Message redaction failed: %1</source> <source>Message redaction failed: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+453"/> <location line="+454"/>
<source>Save image</source> <source>Save image</source>
<translation type="unfinished">Αποθήκευση Εικόνας</translation> <translation type="unfinished">Αποθήκευση Εικόνας</translation>
</message> </message>
@ -457,11 +457,20 @@
<source>Save file</source> <source>Save file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message numerus="yes">
<location line="+126"/>
<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">
<numerusform></numerusform>
<numerusform></numerusform>
</translation>
</message>
</context> </context>
<context> <context>
<name>TimelineRow</name> <name>TimelineRow</name>
<message> <message>
<location filename="../qml/TimelineRow.qml" line="+57"/> <location filename="../qml/TimelineRow.qml" line="+104"/>
<source>Reply</source> <source>Reply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -550,18 +559,6 @@
<translation>Έξοδος</translation> <translation>Έξοδος</translation>
</message> </message>
</context> </context>
<context>
<name>TypingDisplay</name>
<message numerus="yes">
<location filename="../../src/TypingDisplay.cpp" line="+37"/>
<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">
<numerusform></numerusform>
<numerusform></numerusform>
</translation>
</message>
</context>
<context> <context>
<name>UserInfoWidget</name> <name>UserInfoWidget</name>
<message> <message>
@ -573,7 +570,7 @@
<context> <context>
<name>UserSettingsPage</name> <name>UserSettingsPage</name>
<message> <message>
<location filename="../../src/UserSettingsPage.cpp" line="+171"/> <location filename="../../src/UserSettingsPage.cpp" line="+172"/>
<source>Minimize to tray</source> <source>Minimize to tray</source>
<translation>Ελαχιστοποίηση</translation> <translation>Ελαχιστοποίηση</translation>
</message> </message>
@ -740,7 +737,7 @@
<context> <context>
<name>descriptiveTime</name> <name>descriptiveTime</name>
<message> <message>
<location filename="../../src/Utils.cpp" line="+104"/> <location filename="../../src/Utils.cpp" line="+106"/>
<source>Yesterday</source> <source>Yesterday</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1012,7 +1009,7 @@ Media size: %2
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+148"/> <location line="+146"/>
<source>Select an avatar</source> <source>Select an avatar</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1112,7 +1109,7 @@ Media size: %2
<context> <context>
<name>message-description sent:</name> <name>message-description sent:</name>
<message> <message>
<location filename="../../src/Utils.h" line="+95"/> <location filename="../../src/Utils.h" line="+100"/>
<source>You sent an audio clip</source> <source>You sent an audio clip</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1208,7 +1205,7 @@ Media size: %2
<context> <context>
<name>utils</name> <name>utils</name>
<message> <message>
<location filename="../../src/Utils.cpp" line="+282"/> <location filename="../../src/Utils.cpp" line="+306"/>
<source>sent a file.</source> <source>sent a file.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -4,12 +4,12 @@
<context> <context>
<name>ChatPage</name> <name>ChatPage</name>
<message> <message>
<location filename="../../src/ChatPage.cpp" line="+346"/> <location filename="../../src/ChatPage.cpp" line="+329"/>
<source>Failed to upload media. Please try again.</source> <source>Failed to upload media. Please try again.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+389"/> <location line="+392"/>
<source>Failed to restore OLM account. Please login again.</source> <source>Failed to restore OLM account. Please login again.</source>
<translation>Failed to restore OLM account. Please login again.</translation> <translation>Failed to restore OLM account. Please login again.</translation>
</message> </message>
@ -19,7 +19,7 @@
<translation>Failed to restore save data. Please login again.</translation> <translation>Failed to restore save data. Please login again.</translation>
</message> </message>
<message> <message>
<location line="+181"/> <location line="+148"/>
<source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
<translation>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</translation> <translation>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</translation>
</message> </message>
@ -72,7 +72,7 @@
<context> <context>
<name>EditModal</name> <name>EditModal</name>
<message> <message>
<location filename="../../src/dialogs/RoomSettings.cpp" line="+58"/> <location filename="../../src/dialogs/RoomSettings.cpp" line="+59"/>
<source>Apply</source> <source>Apply</source>
<translation>Apply</translation> <translation>Apply</translation>
</message> </message>
@ -182,7 +182,7 @@
<context> <context>
<name>MessageDelegate</name> <name>MessageDelegate</name>
<message> <message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+43"/> <location filename="../qml/delegates/MessageDelegate.qml" line="+60"/>
<source>redacted</source> <source>redacted</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -223,7 +223,7 @@
<context> <context>
<name>QuickSwitcher</name> <name>QuickSwitcher</name>
<message> <message>
<location filename="../../src/QuickSwitcher.cpp" line="+71"/> <location filename="../../src/QuickSwitcher.cpp" line="+72"/>
<source>Search for a room...</source> <source>Search for a room...</source>
<translation>Search for a room</translation> <translation>Search for a room</translation>
</message> </message>
@ -279,7 +279,7 @@
<context> <context>
<name>ReplyPopup</name> <name>ReplyPopup</name>
<message> <message>
<location filename="../../src/popups/ReplyPopup.cpp" line="+45"/> <location filename="../../src/popups/ReplyPopup.cpp" line="+46"/>
<source>Logout</source> <source>Logout</source>
<translation>Logout</translation> <translation>Logout</translation>
</message> </message>
@ -287,7 +287,7 @@
<context> <context>
<name>RoomInfo</name> <name>RoomInfo</name>
<message> <message>
<location filename="../../src/Cache.cpp" line="+2307"/> <location filename="../../src/Cache.cpp" line="+2303"/>
<source>no version stored</source> <source>no version stored</source>
<translation>no version stored</translation> <translation>no version stored</translation>
</message> </message>
@ -300,12 +300,12 @@
<translation>Leave room</translation> <translation>Leave room</translation>
</message> </message>
<message> <message>
<location line="+161"/> <location line="+151"/>
<source>Accept</source> <source>Accept</source>
<translation>Accept</translation> <translation>Accept</translation>
</message> </message>
<message> <message>
<location line="+1"/> <location line="+3"/>
<source>Decline</source> <source>Decline</source>
<translation>Decline</translation> <translation>Decline</translation>
</message> </message>
@ -364,13 +364,13 @@
<context> <context>
<name>TextInputWidget</name> <name>TextInputWidget</name>
<message> <message>
<location filename="../../src/TextInputWidget.cpp" line="+502"/> <location filename="../../src/TextInputWidget.cpp" line="+496"/>
<source>Send a file</source> <source>Send a file</source>
<translation>Send a file</translation> <translation>Send a file</translation>
</message> </message>
<message> <message>
<location line="+13"/> <location line="+13"/>
<location filename="../../src/TextInputWidget.h" line="+161"/> <location filename="../../src/TextInputWidget.h" line="+163"/>
<source>Write a message...</source> <source>Write a message...</source>
<translation>Write a message</translation> <translation>Write a message</translation>
</message> </message>
@ -385,7 +385,7 @@
<translation>Emoji</translation> <translation>Emoji</translation>
</message> </message>
<message> <message>
<location line="+72"/> <location line="+73"/>
<source>Select a file</source> <source>Select a file</source>
<translation>Select a file</translation> <translation>Select a file</translation>
</message> </message>
@ -403,7 +403,7 @@
<context> <context>
<name>TimelineModel</name> <name>TimelineModel</name>
<message> <message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+867"/> <location filename="../../src/timeline/TimelineModel.cpp" line="+687"/>
<source>-- Encrypted Event (No keys found for decryption) --</source> <source>-- Encrypted Event (No keys found for decryption) --</source>
<comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment> <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
<translation type="unfinished">-- Encrypted Event (No keys found for decryption) --</translation> <translation type="unfinished">-- Encrypted Event (No keys found for decryption) --</translation>
@ -427,18 +427,18 @@
<translation type="unfinished">-- Decryption Error (%1) --</translation> <translation type="unfinished">-- Decryption Error (%1) --</translation>
</message> </message>
<message> <message>
<location line="+25"/> <location line="+29"/>
<source>-- Encrypted Event (Unknown event type) --</source> <source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment> <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
<translation type="unfinished">-- Encrypted Event (Unknown event type) --</translation> <translation type="unfinished">-- Encrypted Event (Unknown event type) --</translation>
</message> </message>
<message> <message>
<location line="+54"/> <location line="+48"/>
<source>Message redaction failed: %1</source> <source>Message redaction failed: %1</source>
<translation type="unfinished">Message redaction failed: %1</translation> <translation type="unfinished">Message redaction failed: %1</translation>
</message> </message>
<message> <message>
<location line="+453"/> <location line="+454"/>
<source>Save image</source> <source>Save image</source>
<translation type="unfinished">Save image</translation> <translation type="unfinished">Save image</translation>
</message> </message>
@ -457,11 +457,20 @@
<source>Save file</source> <source>Save file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message numerus="yes">
<location line="+126"/>
<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">
<numerusform>%1%2 is typing</numerusform>
<numerusform>%1 and %2 are typing</numerusform>
</translation>
</message>
</context> </context>
<context> <context>
<name>TimelineRow</name> <name>TimelineRow</name>
<message> <message>
<location filename="../qml/TimelineRow.qml" line="+57"/> <location filename="../qml/TimelineRow.qml" line="+104"/>
<source>Reply</source> <source>Reply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -550,18 +559,6 @@
<translation>Quit</translation> <translation>Quit</translation>
</message> </message>
</context> </context>
<context>
<name>TypingDisplay</name>
<message numerus="yes">
<location filename="../../src/TypingDisplay.cpp" line="+37"/>
<source>%1 and %2 are typing</source>
<comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
<translation>
<numerusform>%1%2 is typing</numerusform>
<numerusform>%1 and %2 are typing</numerusform>
</translation>
</message>
</context>
<context> <context>
<name>UserInfoWidget</name> <name>UserInfoWidget</name>
<message> <message>
@ -573,7 +570,7 @@
<context> <context>
<name>UserSettingsPage</name> <name>UserSettingsPage</name>
<message> <message>
<location filename="../../src/UserSettingsPage.cpp" line="+171"/> <location filename="../../src/UserSettingsPage.cpp" line="+172"/>
<source>Minimize to tray</source> <source>Minimize to tray</source>
<translation>Minimize to tray</translation> <translation>Minimize to tray</translation>
</message> </message>
@ -740,7 +737,7 @@
<context> <context>
<name>descriptiveTime</name> <name>descriptiveTime</name>
<message> <message>
<location filename="../../src/Utils.cpp" line="+104"/> <location filename="../../src/Utils.cpp" line="+106"/>
<source>Yesterday</source> <source>Yesterday</source>
<translation>Yesterday</translation> <translation>Yesterday</translation>
</message> </message>
@ -1016,7 +1013,7 @@ Media size: %2
<translation>Failed to enable encryption: %1</translation> <translation>Failed to enable encryption: %1</translation>
</message> </message>
<message> <message>
<location line="+148"/> <location line="+146"/>
<source>Select an avatar</source> <source>Select an avatar</source>
<translation>Select an avatar</translation> <translation>Select an avatar</translation>
</message> </message>
@ -1116,7 +1113,7 @@ Media size: %2
<context> <context>
<name>message-description sent:</name> <name>message-description sent:</name>
<message> <message>
<location filename="../../src/Utils.h" line="+95"/> <location filename="../../src/Utils.h" line="+100"/>
<source>You sent an audio clip</source> <source>You sent an audio clip</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1212,7 +1209,7 @@ Media size: %2
<context> <context>
<name>utils</name> <name>utils</name>
<message> <message>
<location filename="../../src/Utils.cpp" line="+282"/> <location filename="../../src/Utils.cpp" line="+306"/>
<source>sent a file.</source> <source>sent a file.</source>
<translation>sent a file.</translation> <translation>sent a file.</translation>
</message> </message>

View File

@ -4,12 +4,12 @@
<context> <context>
<name>ChatPage</name> <name>ChatPage</name>
<message> <message>
<location filename="../../src/ChatPage.cpp" line="+346"/> <location filename="../../src/ChatPage.cpp" line="+329"/>
<source>Failed to upload media. Please try again.</source> <source>Failed to upload media. Please try again.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+389"/> <location line="+392"/>
<source>Failed to restore OLM account. Please login again.</source> <source>Failed to restore OLM account. Please login again.</source>
<translation>OLM-tilin palauttaminen epäonnistui. Ole hyvä ja kirjaudu sisään uudelleen.</translation> <translation>OLM-tilin palauttaminen epäonnistui. Ole hyvä ja kirjaudu sisään uudelleen.</translation>
</message> </message>
@ -19,7 +19,7 @@
<translation>Tallennettujen tietojen palauttaminen epäonnistui. Ole hyvä ja kirjaudu sisään uudelleen.</translation> <translation>Tallennettujen tietojen palauttaminen epäonnistui. Ole hyvä ja kirjaudu sisään uudelleen.</translation>
</message> </message>
<message> <message>
<location line="+181"/> <location line="+148"/>
<source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
<translation>Salausavainten lähetys epäonnistui. Palvelimen vastaus: %1 %2. Ole hyvä ja yritä uudelleen myöhemmin.</translation> <translation>Salausavainten lähetys epäonnistui. Palvelimen vastaus: %1 %2. Ole hyvä ja yritä uudelleen myöhemmin.</translation>
</message> </message>
@ -72,7 +72,7 @@
<context> <context>
<name>EditModal</name> <name>EditModal</name>
<message> <message>
<location filename="../../src/dialogs/RoomSettings.cpp" line="+58"/> <location filename="../../src/dialogs/RoomSettings.cpp" line="+59"/>
<source>Apply</source> <source>Apply</source>
<translation>Tallenna</translation> <translation>Tallenna</translation>
</message> </message>
@ -182,7 +182,7 @@
<context> <context>
<name>MessageDelegate</name> <name>MessageDelegate</name>
<message> <message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+43"/> <location filename="../qml/delegates/MessageDelegate.qml" line="+60"/>
<source>redacted</source> <source>redacted</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -223,7 +223,7 @@
<context> <context>
<name>QuickSwitcher</name> <name>QuickSwitcher</name>
<message> <message>
<location filename="../../src/QuickSwitcher.cpp" line="+71"/> <location filename="../../src/QuickSwitcher.cpp" line="+72"/>
<source>Search for a room...</source> <source>Search for a room...</source>
<translation>Etsi huonetta</translation> <translation>Etsi huonetta</translation>
</message> </message>
@ -279,7 +279,7 @@
<context> <context>
<name>ReplyPopup</name> <name>ReplyPopup</name>
<message> <message>
<location filename="../../src/popups/ReplyPopup.cpp" line="+45"/> <location filename="../../src/popups/ReplyPopup.cpp" line="+46"/>
<source>Logout</source> <source>Logout</source>
<translation>Kirjaudu ulos</translation> <translation>Kirjaudu ulos</translation>
</message> </message>
@ -287,7 +287,7 @@
<context> <context>
<name>RoomInfo</name> <name>RoomInfo</name>
<message> <message>
<location filename="../../src/Cache.cpp" line="+2307"/> <location filename="../../src/Cache.cpp" line="+2303"/>
<source>no version stored</source> <source>no version stored</source>
<translation>ei tallennettua versiota</translation> <translation>ei tallennettua versiota</translation>
</message> </message>
@ -300,12 +300,12 @@
<translation>Poistu huoneesta</translation> <translation>Poistu huoneesta</translation>
</message> </message>
<message> <message>
<location line="+161"/> <location line="+151"/>
<source>Accept</source> <source>Accept</source>
<translation>Hyväksy</translation> <translation>Hyväksy</translation>
</message> </message>
<message> <message>
<location line="+1"/> <location line="+3"/>
<source>Decline</source> <source>Decline</source>
<translation>Hylkää</translation> <translation>Hylkää</translation>
</message> </message>
@ -364,13 +364,13 @@
<context> <context>
<name>TextInputWidget</name> <name>TextInputWidget</name>
<message> <message>
<location filename="../../src/TextInputWidget.cpp" line="+502"/> <location filename="../../src/TextInputWidget.cpp" line="+496"/>
<source>Send a file</source> <source>Send a file</source>
<translation>Lähetä tiedosto</translation> <translation>Lähetä tiedosto</translation>
</message> </message>
<message> <message>
<location line="+13"/> <location line="+13"/>
<location filename="../../src/TextInputWidget.h" line="+161"/> <location filename="../../src/TextInputWidget.h" line="+163"/>
<source>Write a message...</source> <source>Write a message...</source>
<translation>Kirjoita viesti</translation> <translation>Kirjoita viesti</translation>
</message> </message>
@ -385,7 +385,7 @@
<translation>Emoji</translation> <translation>Emoji</translation>
</message> </message>
<message> <message>
<location line="+72"/> <location line="+73"/>
<source>Select a file</source> <source>Select a file</source>
<translation>Valitse tiedosto</translation> <translation>Valitse tiedosto</translation>
</message> </message>
@ -403,7 +403,7 @@
<context> <context>
<name>TimelineModel</name> <name>TimelineModel</name>
<message> <message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+867"/> <location filename="../../src/timeline/TimelineModel.cpp" line="+687"/>
<source>-- Encrypted Event (No keys found for decryption) --</source> <source>-- Encrypted Event (No keys found for decryption) --</source>
<comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment> <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
<translation type="unfinished">-- Salattu viesti (salauksen purkuavaimia ei löydetty) --</translation> <translation type="unfinished">-- Salattu viesti (salauksen purkuavaimia ei löydetty) --</translation>
@ -427,18 +427,18 @@
<translation type="unfinished">-- Virhe purkaessa salausta (%1) --</translation> <translation type="unfinished">-- Virhe purkaessa salausta (%1) --</translation>
</message> </message>
<message> <message>
<location line="+25"/> <location line="+29"/>
<source>-- Encrypted Event (Unknown event type) --</source> <source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment> <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
<translation type="unfinished">-- Salattu viesti (tuntematon viestityyppi) --</translation> <translation type="unfinished">-- Salattu viesti (tuntematon viestityyppi) --</translation>
</message> </message>
<message> <message>
<location line="+54"/> <location line="+48"/>
<source>Message redaction failed: %1</source> <source>Message redaction failed: %1</source>
<translation type="unfinished">Viestin poisto epäonnistui: %1</translation> <translation type="unfinished">Viestin poisto epäonnistui: %1</translation>
</message> </message>
<message> <message>
<location line="+453"/> <location line="+454"/>
<source>Save image</source> <source>Save image</source>
<translation type="unfinished">Tallenna kuva</translation> <translation type="unfinished">Tallenna kuva</translation>
</message> </message>
@ -457,11 +457,20 @@
<source>Save file</source> <source>Save file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message numerus="yes">
<location line="+126"/>
<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">
<numerusform>%1%2 kirjoittaa</numerusform>
<numerusform>%1 ja %2 kirjoittavat</numerusform>
</translation>
</message>
</context> </context>
<context> <context>
<name>TimelineRow</name> <name>TimelineRow</name>
<message> <message>
<location filename="../qml/TimelineRow.qml" line="+57"/> <location filename="../qml/TimelineRow.qml" line="+104"/>
<source>Reply</source> <source>Reply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -550,18 +559,6 @@
<translation>Lopeta</translation> <translation>Lopeta</translation>
</message> </message>
</context> </context>
<context>
<name>TypingDisplay</name>
<message numerus="yes">
<location filename="../../src/TypingDisplay.cpp" line="+37"/>
<source>%1 and %2 are typing</source>
<comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
<translation>
<numerusform>%1%2 kirjoittaa</numerusform>
<numerusform>%1 ja %2 kirjoittavat</numerusform>
</translation>
</message>
</context>
<context> <context>
<name>UserInfoWidget</name> <name>UserInfoWidget</name>
<message> <message>
@ -573,7 +570,7 @@
<context> <context>
<name>UserSettingsPage</name> <name>UserSettingsPage</name>
<message> <message>
<location filename="../../src/UserSettingsPage.cpp" line="+171"/> <location filename="../../src/UserSettingsPage.cpp" line="+172"/>
<source>Minimize to tray</source> <source>Minimize to tray</source>
<translation>Pienennä ilmoitusalueelle</translation> <translation>Pienennä ilmoitusalueelle</translation>
</message> </message>
@ -740,7 +737,7 @@
<context> <context>
<name>descriptiveTime</name> <name>descriptiveTime</name>
<message> <message>
<location filename="../../src/Utils.cpp" line="+104"/> <location filename="../../src/Utils.cpp" line="+106"/>
<source>Yesterday</source> <source>Yesterday</source>
<translation>Eilen</translation> <translation>Eilen</translation>
</message> </message>
@ -1016,7 +1013,7 @@ Median koko: %2
<translation>Salauksen aktivointi epäonnistui: %1</translation> <translation>Salauksen aktivointi epäonnistui: %1</translation>
</message> </message>
<message> <message>
<location line="+148"/> <location line="+146"/>
<source>Select an avatar</source> <source>Select an avatar</source>
<translation>Valitse profiilikuva</translation> <translation>Valitse profiilikuva</translation>
</message> </message>
@ -1116,7 +1113,7 @@ Median koko: %2
<context> <context>
<name>message-description sent:</name> <name>message-description sent:</name>
<message> <message>
<location filename="../../src/Utils.h" line="+95"/> <location filename="../../src/Utils.h" line="+100"/>
<source>You sent an audio clip</source> <source>You sent an audio clip</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1212,7 +1209,7 @@ Median koko: %2
<context> <context>
<name>utils</name> <name>utils</name>
<message> <message>
<location filename="../../src/Utils.cpp" line="+282"/> <location filename="../../src/Utils.cpp" line="+306"/>
<source>sent a file.</source> <source>sent a file.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -4,12 +4,12 @@
<context> <context>
<name>ChatPage</name> <name>ChatPage</name>
<message> <message>
<location filename="../../src/ChatPage.cpp" line="+346"/> <location filename="../../src/ChatPage.cpp" line="+329"/>
<source>Failed to upload media. Please try again.</source> <source>Failed to upload media. Please try again.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+389"/> <location line="+392"/>
<source>Failed to restore OLM account. Please login again.</source> <source>Failed to restore OLM account. Please login again.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -19,7 +19,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+181"/> <location line="+148"/>
<source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -72,7 +72,7 @@
<context> <context>
<name>EditModal</name> <name>EditModal</name>
<message> <message>
<location filename="../../src/dialogs/RoomSettings.cpp" line="+58"/> <location filename="../../src/dialogs/RoomSettings.cpp" line="+59"/>
<source>Apply</source> <source>Apply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -182,7 +182,7 @@
<context> <context>
<name>MessageDelegate</name> <name>MessageDelegate</name>
<message> <message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+43"/> <location filename="../qml/delegates/MessageDelegate.qml" line="+60"/>
<source>redacted</source> <source>redacted</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -223,7 +223,7 @@
<context> <context>
<name>QuickSwitcher</name> <name>QuickSwitcher</name>
<message> <message>
<location filename="../../src/QuickSwitcher.cpp" line="+71"/> <location filename="../../src/QuickSwitcher.cpp" line="+72"/>
<source>Search for a room...</source> <source>Search for a room...</source>
<translation>Chercher un salon</translation> <translation>Chercher un salon</translation>
</message> </message>
@ -280,7 +280,7 @@
<context> <context>
<name>ReplyPopup</name> <name>ReplyPopup</name>
<message> <message>
<location filename="../../src/popups/ReplyPopup.cpp" line="+45"/> <location filename="../../src/popups/ReplyPopup.cpp" line="+46"/>
<source>Logout</source> <source>Logout</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -288,7 +288,7 @@
<context> <context>
<name>RoomInfo</name> <name>RoomInfo</name>
<message> <message>
<location filename="../../src/Cache.cpp" line="+2307"/> <location filename="../../src/Cache.cpp" line="+2303"/>
<source>no version stored</source> <source>no version stored</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -301,12 +301,12 @@
<translation>Quitter le salon</translation> <translation>Quitter le salon</translation>
</message> </message>
<message> <message>
<location line="+161"/> <location line="+151"/>
<source>Accept</source> <source>Accept</source>
<translation>Accepter</translation> <translation>Accepter</translation>
</message> </message>
<message> <message>
<location line="+1"/> <location line="+3"/>
<source>Decline</source> <source>Decline</source>
<translation>Décliner</translation> <translation>Décliner</translation>
</message> </message>
@ -365,13 +365,13 @@
<context> <context>
<name>TextInputWidget</name> <name>TextInputWidget</name>
<message> <message>
<location filename="../../src/TextInputWidget.cpp" line="+502"/> <location filename="../../src/TextInputWidget.cpp" line="+496"/>
<source>Send a file</source> <source>Send a file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+13"/> <location line="+13"/>
<location filename="../../src/TextInputWidget.h" line="+161"/> <location filename="../../src/TextInputWidget.h" line="+163"/>
<source>Write a message...</source> <source>Write a message...</source>
<translation>Écrivez un message...</translation> <translation>Écrivez un message...</translation>
</message> </message>
@ -386,7 +386,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+72"/> <location line="+73"/>
<source>Select a file</source> <source>Select a file</source>
<translation>Sélectionnez un fichier</translation> <translation>Sélectionnez un fichier</translation>
</message> </message>
@ -404,7 +404,7 @@
<context> <context>
<name>TimelineModel</name> <name>TimelineModel</name>
<message> <message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+867"/> <location filename="../../src/timeline/TimelineModel.cpp" line="+687"/>
<source>-- Encrypted Event (No keys found for decryption) --</source> <source>-- Encrypted Event (No keys found for decryption) --</source>
<comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment> <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -428,18 +428,18 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+25"/> <location line="+29"/>
<source>-- Encrypted Event (Unknown event type) --</source> <source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment> <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+54"/> <location line="+48"/>
<source>Message redaction failed: %1</source> <source>Message redaction failed: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+453"/> <location line="+454"/>
<source>Save image</source> <source>Save image</source>
<translation type="unfinished">Enregistrer l&apos;image</translation> <translation type="unfinished">Enregistrer l&apos;image</translation>
</message> </message>
@ -458,11 +458,20 @@
<source>Save file</source> <source>Save file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message numerus="yes">
<location line="+126"/>
<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">
<numerusform></numerusform>
<numerusform></numerusform>
</translation>
</message>
</context> </context>
<context> <context>
<name>TimelineRow</name> <name>TimelineRow</name>
<message> <message>
<location filename="../qml/TimelineRow.qml" line="+57"/> <location filename="../qml/TimelineRow.qml" line="+104"/>
<source>Reply</source> <source>Reply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -551,18 +560,6 @@
<translation>Quitter</translation> <translation>Quitter</translation>
</message> </message>
</context> </context>
<context>
<name>TypingDisplay</name>
<message numerus="yes">
<location filename="../../src/TypingDisplay.cpp" line="+37"/>
<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">
<numerusform></numerusform>
<numerusform></numerusform>
</translation>
</message>
</context>
<context> <context>
<name>UserInfoWidget</name> <name>UserInfoWidget</name>
<message> <message>
@ -574,7 +571,7 @@
<context> <context>
<name>UserSettingsPage</name> <name>UserSettingsPage</name>
<message> <message>
<location filename="../../src/UserSettingsPage.cpp" line="+171"/> <location filename="../../src/UserSettingsPage.cpp" line="+172"/>
<source>Minimize to tray</source> <source>Minimize to tray</source>
<translation>Réduire à la barre des tâches</translation> <translation>Réduire à la barre des tâches</translation>
</message> </message>
@ -741,7 +738,7 @@
<context> <context>
<name>descriptiveTime</name> <name>descriptiveTime</name>
<message> <message>
<location filename="../../src/Utils.cpp" line="+104"/> <location filename="../../src/Utils.cpp" line="+106"/>
<source>Yesterday</source> <source>Yesterday</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1015,7 +1012,7 @@ Taille du média : %2
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+148"/> <location line="+146"/>
<source>Select an avatar</source> <source>Select an avatar</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1115,7 +1112,7 @@ Taille du média : %2
<context> <context>
<name>message-description sent:</name> <name>message-description sent:</name>
<message> <message>
<location filename="../../src/Utils.h" line="+95"/> <location filename="../../src/Utils.h" line="+100"/>
<source>You sent an audio clip</source> <source>You sent an audio clip</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1211,7 +1208,7 @@ Taille du média : %2
<context> <context>
<name>utils</name> <name>utils</name>
<message> <message>
<location filename="../../src/Utils.cpp" line="+282"/> <location filename="../../src/Utils.cpp" line="+306"/>
<source>sent a file.</source> <source>sent a file.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -4,12 +4,12 @@
<context> <context>
<name>ChatPage</name> <name>ChatPage</name>
<message> <message>
<location filename="../../src/ChatPage.cpp" line="+346"/> <location filename="../../src/ChatPage.cpp" line="+329"/>
<source>Failed to upload media. Please try again.</source> <source>Failed to upload media. Please try again.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+389"/> <location line="+392"/>
<source>Failed to restore OLM account. Please login again.</source> <source>Failed to restore OLM account. Please login again.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -19,7 +19,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+181"/> <location line="+148"/>
<source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -72,7 +72,7 @@
<context> <context>
<name>EditModal</name> <name>EditModal</name>
<message> <message>
<location filename="../../src/dialogs/RoomSettings.cpp" line="+58"/> <location filename="../../src/dialogs/RoomSettings.cpp" line="+59"/>
<source>Apply</source> <source>Apply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -182,7 +182,7 @@
<context> <context>
<name>MessageDelegate</name> <name>MessageDelegate</name>
<message> <message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+43"/> <location filename="../qml/delegates/MessageDelegate.qml" line="+60"/>
<source>redacted</source> <source>redacted</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -223,7 +223,7 @@
<context> <context>
<name>QuickSwitcher</name> <name>QuickSwitcher</name>
<message> <message>
<location filename="../../src/QuickSwitcher.cpp" line="+71"/> <location filename="../../src/QuickSwitcher.cpp" line="+72"/>
<source>Search for a room...</source> <source>Search for a room...</source>
<translation>Zoek een kamer...</translation> <translation>Zoek een kamer...</translation>
</message> </message>
@ -279,7 +279,7 @@
<context> <context>
<name>ReplyPopup</name> <name>ReplyPopup</name>
<message> <message>
<location filename="../../src/popups/ReplyPopup.cpp" line="+45"/> <location filename="../../src/popups/ReplyPopup.cpp" line="+46"/>
<source>Logout</source> <source>Logout</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -287,7 +287,7 @@
<context> <context>
<name>RoomInfo</name> <name>RoomInfo</name>
<message> <message>
<location filename="../../src/Cache.cpp" line="+2307"/> <location filename="../../src/Cache.cpp" line="+2303"/>
<source>no version stored</source> <source>no version stored</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -300,12 +300,12 @@
<translation>Kamer verlaten</translation> <translation>Kamer verlaten</translation>
</message> </message>
<message> <message>
<location line="+161"/> <location line="+151"/>
<source>Accept</source> <source>Accept</source>
<translation>Accepteren</translation> <translation>Accepteren</translation>
</message> </message>
<message> <message>
<location line="+1"/> <location line="+3"/>
<source>Decline</source> <source>Decline</source>
<translation>Afwijzen</translation> <translation>Afwijzen</translation>
</message> </message>
@ -364,13 +364,13 @@
<context> <context>
<name>TextInputWidget</name> <name>TextInputWidget</name>
<message> <message>
<location filename="../../src/TextInputWidget.cpp" line="+502"/> <location filename="../../src/TextInputWidget.cpp" line="+496"/>
<source>Send a file</source> <source>Send a file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+13"/> <location line="+13"/>
<location filename="../../src/TextInputWidget.h" line="+161"/> <location filename="../../src/TextInputWidget.h" line="+163"/>
<source>Write a message...</source> <source>Write a message...</source>
<translation>Typ een bericht...</translation> <translation>Typ een bericht...</translation>
</message> </message>
@ -385,7 +385,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+72"/> <location line="+73"/>
<source>Select a file</source> <source>Select a file</source>
<translation>Kies een bestand</translation> <translation>Kies een bestand</translation>
</message> </message>
@ -403,7 +403,7 @@
<context> <context>
<name>TimelineModel</name> <name>TimelineModel</name>
<message> <message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+867"/> <location filename="../../src/timeline/TimelineModel.cpp" line="+687"/>
<source>-- Encrypted Event (No keys found for decryption) --</source> <source>-- Encrypted Event (No keys found for decryption) --</source>
<comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment> <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -427,18 +427,18 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+25"/> <location line="+29"/>
<source>-- Encrypted Event (Unknown event type) --</source> <source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment> <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+54"/> <location line="+48"/>
<source>Message redaction failed: %1</source> <source>Message redaction failed: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+453"/> <location line="+454"/>
<source>Save image</source> <source>Save image</source>
<translation type="unfinished">Afbeelding opslaan</translation> <translation type="unfinished">Afbeelding opslaan</translation>
</message> </message>
@ -457,11 +457,20 @@
<source>Save file</source> <source>Save file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message numerus="yes">
<location line="+126"/>
<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">
<numerusform></numerusform>
<numerusform></numerusform>
</translation>
</message>
</context> </context>
<context> <context>
<name>TimelineRow</name> <name>TimelineRow</name>
<message> <message>
<location filename="../qml/TimelineRow.qml" line="+57"/> <location filename="../qml/TimelineRow.qml" line="+104"/>
<source>Reply</source> <source>Reply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -550,18 +559,6 @@
<translation>Afsluiten</translation> <translation>Afsluiten</translation>
</message> </message>
</context> </context>
<context>
<name>TypingDisplay</name>
<message numerus="yes">
<location filename="../../src/TypingDisplay.cpp" line="+37"/>
<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">
<numerusform></numerusform>
<numerusform></numerusform>
</translation>
</message>
</context>
<context> <context>
<name>UserInfoWidget</name> <name>UserInfoWidget</name>
<message> <message>
@ -573,7 +570,7 @@
<context> <context>
<name>UserSettingsPage</name> <name>UserSettingsPage</name>
<message> <message>
<location filename="../../src/UserSettingsPage.cpp" line="+171"/> <location filename="../../src/UserSettingsPage.cpp" line="+172"/>
<source>Minimize to tray</source> <source>Minimize to tray</source>
<translation>Minimaliseren naar systeemvak</translation> <translation>Minimaliseren naar systeemvak</translation>
</message> </message>
@ -740,7 +737,7 @@
<context> <context>
<name>descriptiveTime</name> <name>descriptiveTime</name>
<message> <message>
<location filename="../../src/Utils.cpp" line="+104"/> <location filename="../../src/Utils.cpp" line="+106"/>
<source>Yesterday</source> <source>Yesterday</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1014,7 +1011,7 @@ Mediagrootte: %2
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+148"/> <location line="+146"/>
<source>Select an avatar</source> <source>Select an avatar</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1114,7 +1111,7 @@ Mediagrootte: %2
<context> <context>
<name>message-description sent:</name> <name>message-description sent:</name>
<message> <message>
<location filename="../../src/Utils.h" line="+95"/> <location filename="../../src/Utils.h" line="+100"/>
<source>You sent an audio clip</source> <source>You sent an audio clip</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1210,7 +1207,7 @@ Mediagrootte: %2
<context> <context>
<name>utils</name> <name>utils</name>
<message> <message>
<location filename="../../src/Utils.cpp" line="+282"/> <location filename="../../src/Utils.cpp" line="+306"/>
<source>sent a file.</source> <source>sent a file.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -4,12 +4,12 @@
<context> <context>
<name>ChatPage</name> <name>ChatPage</name>
<message> <message>
<location filename="../../src/ChatPage.cpp" line="+346"/> <location filename="../../src/ChatPage.cpp" line="+329"/>
<source>Failed to upload media. Please try again.</source> <source>Failed to upload media. Please try again.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+389"/> <location line="+392"/>
<source>Failed to restore OLM account. Please login again.</source> <source>Failed to restore OLM account. Please login again.</source>
<translation>Nie udało się przywrócić konta OLM. Spróbuj zalogować się ponownie.</translation> <translation>Nie udało się przywrócić konta OLM. Spróbuj zalogować się ponownie.</translation>
</message> </message>
@ -19,7 +19,7 @@
<translation>Nie udało się przywrócić zapisanych danych. Spróbuj zalogować się ponownie.</translation> <translation>Nie udało się przywrócić zapisanych danych. Spróbuj zalogować się ponownie.</translation>
</message> </message>
<message> <message>
<location line="+181"/> <location line="+148"/>
<source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -72,7 +72,7 @@
<context> <context>
<name>EditModal</name> <name>EditModal</name>
<message> <message>
<location filename="../../src/dialogs/RoomSettings.cpp" line="+58"/> <location filename="../../src/dialogs/RoomSettings.cpp" line="+59"/>
<source>Apply</source> <source>Apply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -182,7 +182,7 @@
<context> <context>
<name>MessageDelegate</name> <name>MessageDelegate</name>
<message> <message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+43"/> <location filename="../qml/delegates/MessageDelegate.qml" line="+60"/>
<source>redacted</source> <source>redacted</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -223,7 +223,7 @@
<context> <context>
<name>QuickSwitcher</name> <name>QuickSwitcher</name>
<message> <message>
<location filename="../../src/QuickSwitcher.cpp" line="+71"/> <location filename="../../src/QuickSwitcher.cpp" line="+72"/>
<source>Search for a room...</source> <source>Search for a room...</source>
<translation>Wyszukaj pokoju</translation> <translation>Wyszukaj pokoju</translation>
</message> </message>
@ -279,7 +279,7 @@
<context> <context>
<name>ReplyPopup</name> <name>ReplyPopup</name>
<message> <message>
<location filename="../../src/popups/ReplyPopup.cpp" line="+45"/> <location filename="../../src/popups/ReplyPopup.cpp" line="+46"/>
<source>Logout</source> <source>Logout</source>
<translation type="unfinished">Wyloguj</translation> <translation type="unfinished">Wyloguj</translation>
</message> </message>
@ -287,7 +287,7 @@
<context> <context>
<name>RoomInfo</name> <name>RoomInfo</name>
<message> <message>
<location filename="../../src/Cache.cpp" line="+2307"/> <location filename="../../src/Cache.cpp" line="+2303"/>
<source>no version stored</source> <source>no version stored</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -300,12 +300,12 @@
<translation>Opuść pokój</translation> <translation>Opuść pokój</translation>
</message> </message>
<message> <message>
<location line="+161"/> <location line="+151"/>
<source>Accept</source> <source>Accept</source>
<translation>Akceptuj</translation> <translation>Akceptuj</translation>
</message> </message>
<message> <message>
<location line="+1"/> <location line="+3"/>
<source>Decline</source> <source>Decline</source>
<translation>Odrzuć</translation> <translation>Odrzuć</translation>
</message> </message>
@ -364,13 +364,13 @@
<context> <context>
<name>TextInputWidget</name> <name>TextInputWidget</name>
<message> <message>
<location filename="../../src/TextInputWidget.cpp" line="+502"/> <location filename="../../src/TextInputWidget.cpp" line="+496"/>
<source>Send a file</source> <source>Send a file</source>
<translation>Wyślij plik</translation> <translation>Wyślij plik</translation>
</message> </message>
<message> <message>
<location line="+13"/> <location line="+13"/>
<location filename="../../src/TextInputWidget.h" line="+161"/> <location filename="../../src/TextInputWidget.h" line="+163"/>
<source>Write a message...</source> <source>Write a message...</source>
<translation>Napisz wiadomość</translation> <translation>Napisz wiadomość</translation>
</message> </message>
@ -385,7 +385,7 @@
<translation>Emoji</translation> <translation>Emoji</translation>
</message> </message>
<message> <message>
<location line="+72"/> <location line="+73"/>
<source>Select a file</source> <source>Select a file</source>
<translation>Wybierz plik</translation> <translation>Wybierz plik</translation>
</message> </message>
@ -403,7 +403,7 @@
<context> <context>
<name>TimelineModel</name> <name>TimelineModel</name>
<message> <message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+867"/> <location filename="../../src/timeline/TimelineModel.cpp" line="+687"/>
<source>-- Encrypted Event (No keys found for decryption) --</source> <source>-- Encrypted Event (No keys found for decryption) --</source>
<comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment> <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -427,18 +427,18 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+25"/> <location line="+29"/>
<source>-- Encrypted Event (Unknown event type) --</source> <source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment> <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+54"/> <location line="+48"/>
<source>Message redaction failed: %1</source> <source>Message redaction failed: %1</source>
<translation type="unfinished">Redagowanie wiadomości nie powiodło się: %1</translation> <translation type="unfinished">Redagowanie wiadomości nie powiodło się: %1</translation>
</message> </message>
<message> <message>
<location line="+453"/> <location line="+454"/>
<source>Save image</source> <source>Save image</source>
<translation type="unfinished">Zapisz obraz</translation> <translation type="unfinished">Zapisz obraz</translation>
</message> </message>
@ -457,11 +457,21 @@
<source>Save file</source> <source>Save file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message numerus="yes">
<location line="+126"/>
<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">
<numerusform></numerusform>
<numerusform></numerusform>
<numerusform></numerusform>
</translation>
</message>
</context> </context>
<context> <context>
<name>TimelineRow</name> <name>TimelineRow</name>
<message> <message>
<location filename="../qml/TimelineRow.qml" line="+57"/> <location filename="../qml/TimelineRow.qml" line="+104"/>
<source>Reply</source> <source>Reply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -550,19 +560,6 @@
<translation>Zakończ</translation> <translation>Zakończ</translation>
</message> </message>
</context> </context>
<context>
<name>TypingDisplay</name>
<message numerus="yes">
<location filename="../../src/TypingDisplay.cpp" line="+37"/>
<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">
<numerusform></numerusform>
<numerusform></numerusform>
<numerusform></numerusform>
</translation>
</message>
</context>
<context> <context>
<name>UserInfoWidget</name> <name>UserInfoWidget</name>
<message> <message>
@ -574,7 +571,7 @@
<context> <context>
<name>UserSettingsPage</name> <name>UserSettingsPage</name>
<message> <message>
<location filename="../../src/UserSettingsPage.cpp" line="+171"/> <location filename="../../src/UserSettingsPage.cpp" line="+172"/>
<source>Minimize to tray</source> <source>Minimize to tray</source>
<translation>Zminimalizuj do paska zadań</translation> <translation>Zminimalizuj do paska zadań</translation>
</message> </message>
@ -741,7 +738,7 @@
<context> <context>
<name>descriptiveTime</name> <name>descriptiveTime</name>
<message> <message>
<location filename="../../src/Utils.cpp" line="+104"/> <location filename="../../src/Utils.cpp" line="+106"/>
<source>Yesterday</source> <source>Yesterday</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1018,7 +1015,7 @@ Rozmiar multimediów: %2
<translation>Nie udało się włączyć szyfrowania: %1</translation> <translation>Nie udało się włączyć szyfrowania: %1</translation>
</message> </message>
<message> <message>
<location line="+148"/> <location line="+146"/>
<source>Select an avatar</source> <source>Select an avatar</source>
<translation>Wybierz awatar</translation> <translation>Wybierz awatar</translation>
</message> </message>
@ -1118,7 +1115,7 @@ Rozmiar multimediów: %2
<context> <context>
<name>message-description sent:</name> <name>message-description sent:</name>
<message> <message>
<location filename="../../src/Utils.h" line="+95"/> <location filename="../../src/Utils.h" line="+100"/>
<source>You sent an audio clip</source> <source>You sent an audio clip</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1214,7 +1211,7 @@ Rozmiar multimediów: %2
<context> <context>
<name>utils</name> <name>utils</name>
<message> <message>
<location filename="../../src/Utils.cpp" line="+282"/> <location filename="../../src/Utils.cpp" line="+306"/>
<source>sent a file.</source> <source>sent a file.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -4,12 +4,12 @@
<context> <context>
<name>ChatPage</name> <name>ChatPage</name>
<message> <message>
<location filename="../../src/ChatPage.cpp" line="+346"/> <location filename="../../src/ChatPage.cpp" line="+329"/>
<source>Failed to upload media. Please try again.</source> <source>Failed to upload media. Please try again.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+389"/> <location line="+392"/>
<source>Failed to restore OLM account. Please login again.</source> <source>Failed to restore OLM account. Please login again.</source>
<translation>Не удалось восстановить учетную запись OLM. Пожалуйста, войдите снова.</translation> <translation>Не удалось восстановить учетную запись OLM. Пожалуйста, войдите снова.</translation>
</message> </message>
@ -19,7 +19,7 @@
<translation>Не удалось восстановить сохраненные данные. Пожалуйста, войдите снова.</translation> <translation>Не удалось восстановить сохраненные данные. Пожалуйста, войдите снова.</translation>
</message> </message>
<message> <message>
<location line="+181"/> <location line="+148"/>
<source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
<translation>Не удалось настроить ключи шифрования. Ответ сервера:%1 %2. Пожалуйста, попробуйте позже.</translation> <translation>Не удалось настроить ключи шифрования. Ответ сервера:%1 %2. Пожалуйста, попробуйте позже.</translation>
</message> </message>
@ -72,7 +72,7 @@
<context> <context>
<name>EditModal</name> <name>EditModal</name>
<message> <message>
<location filename="../../src/dialogs/RoomSettings.cpp" line="+58"/> <location filename="../../src/dialogs/RoomSettings.cpp" line="+59"/>
<source>Apply</source> <source>Apply</source>
<translation>Применить</translation> <translation>Применить</translation>
</message> </message>
@ -182,7 +182,7 @@
<context> <context>
<name>MessageDelegate</name> <name>MessageDelegate</name>
<message> <message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+43"/> <location filename="../qml/delegates/MessageDelegate.qml" line="+60"/>
<source>redacted</source> <source>redacted</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -223,7 +223,7 @@
<context> <context>
<name>QuickSwitcher</name> <name>QuickSwitcher</name>
<message> <message>
<location filename="../../src/QuickSwitcher.cpp" line="+71"/> <location filename="../../src/QuickSwitcher.cpp" line="+72"/>
<source>Search for a room...</source> <source>Search for a room...</source>
<translation>Поиск комнаты...</translation> <translation>Поиск комнаты...</translation>
</message> </message>
@ -279,7 +279,7 @@
<context> <context>
<name>ReplyPopup</name> <name>ReplyPopup</name>
<message> <message>
<location filename="../../src/popups/ReplyPopup.cpp" line="+45"/> <location filename="../../src/popups/ReplyPopup.cpp" line="+46"/>
<source>Logout</source> <source>Logout</source>
<translation type="unfinished">Выйти</translation> <translation type="unfinished">Выйти</translation>
</message> </message>
@ -287,7 +287,7 @@
<context> <context>
<name>RoomInfo</name> <name>RoomInfo</name>
<message> <message>
<location filename="../../src/Cache.cpp" line="+2307"/> <location filename="../../src/Cache.cpp" line="+2303"/>
<source>no version stored</source> <source>no version stored</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -300,12 +300,12 @@
<translation>Покинуть комнату</translation> <translation>Покинуть комнату</translation>
</message> </message>
<message> <message>
<location line="+161"/> <location line="+151"/>
<source>Accept</source> <source>Accept</source>
<translation>Принять</translation> <translation>Принять</translation>
</message> </message>
<message> <message>
<location line="+1"/> <location line="+3"/>
<source>Decline</source> <source>Decline</source>
<translation>Отказаться</translation> <translation>Отказаться</translation>
</message> </message>
@ -364,13 +364,13 @@
<context> <context>
<name>TextInputWidget</name> <name>TextInputWidget</name>
<message> <message>
<location filename="../../src/TextInputWidget.cpp" line="+502"/> <location filename="../../src/TextInputWidget.cpp" line="+496"/>
<source>Send a file</source> <source>Send a file</source>
<translation>Отправить файл</translation> <translation>Отправить файл</translation>
</message> </message>
<message> <message>
<location line="+13"/> <location line="+13"/>
<location filename="../../src/TextInputWidget.h" line="+161"/> <location filename="../../src/TextInputWidget.h" line="+163"/>
<source>Write a message...</source> <source>Write a message...</source>
<translation>Написать сообщение...</translation> <translation>Написать сообщение...</translation>
</message> </message>
@ -385,7 +385,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+72"/> <location line="+73"/>
<source>Select a file</source> <source>Select a file</source>
<translation>Выберите файл</translation> <translation>Выберите файл</translation>
</message> </message>
@ -403,7 +403,7 @@
<context> <context>
<name>TimelineModel</name> <name>TimelineModel</name>
<message> <message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+867"/> <location filename="../../src/timeline/TimelineModel.cpp" line="+687"/>
<source>-- Encrypted Event (No keys found for decryption) --</source> <source>-- Encrypted Event (No keys found for decryption) --</source>
<comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment> <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -427,18 +427,18 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+25"/> <location line="+29"/>
<source>-- Encrypted Event (Unknown event type) --</source> <source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment> <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+54"/> <location line="+48"/>
<source>Message redaction failed: %1</source> <source>Message redaction failed: %1</source>
<translation type="unfinished">Ошибка редактирования сообщения: %1</translation> <translation type="unfinished">Ошибка редактирования сообщения: %1</translation>
</message> </message>
<message> <message>
<location line="+453"/> <location line="+454"/>
<source>Save image</source> <source>Save image</source>
<translation type="unfinished">Сохранить изображение</translation> <translation type="unfinished">Сохранить изображение</translation>
</message> </message>
@ -457,11 +457,21 @@
<source>Save file</source> <source>Save file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message numerus="yes">
<location line="+126"/>
<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">
<numerusform></numerusform>
<numerusform></numerusform>
<numerusform></numerusform>
</translation>
</message>
</context> </context>
<context> <context>
<name>TimelineRow</name> <name>TimelineRow</name>
<message> <message>
<location filename="../qml/TimelineRow.qml" line="+57"/> <location filename="../qml/TimelineRow.qml" line="+104"/>
<source>Reply</source> <source>Reply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -550,19 +560,6 @@
<translation>Выйти</translation> <translation>Выйти</translation>
</message> </message>
</context> </context>
<context>
<name>TypingDisplay</name>
<message numerus="yes">
<location filename="../../src/TypingDisplay.cpp" line="+37"/>
<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">
<numerusform></numerusform>
<numerusform></numerusform>
<numerusform></numerusform>
</translation>
</message>
</context>
<context> <context>
<name>UserInfoWidget</name> <name>UserInfoWidget</name>
<message> <message>
@ -574,7 +571,7 @@
<context> <context>
<name>UserSettingsPage</name> <name>UserSettingsPage</name>
<message> <message>
<location filename="../../src/UserSettingsPage.cpp" line="+171"/> <location filename="../../src/UserSettingsPage.cpp" line="+172"/>
<source>Minimize to tray</source> <source>Minimize to tray</source>
<translation>Сворачивать в системную панель</translation> <translation>Сворачивать в системную панель</translation>
</message> </message>
@ -742,7 +739,7 @@
<context> <context>
<name>descriptiveTime</name> <name>descriptiveTime</name>
<message> <message>
<location filename="../../src/Utils.cpp" line="+104"/> <location filename="../../src/Utils.cpp" line="+106"/>
<source>Yesterday</source> <source>Yesterday</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1017,7 +1014,7 @@ Media size: %2
<translation>Не удалось включить шифрование: %1</translation> <translation>Не удалось включить шифрование: %1</translation>
</message> </message>
<message> <message>
<location line="+148"/> <location line="+146"/>
<source>Select an avatar</source> <source>Select an avatar</source>
<translation>Выберите аватар</translation> <translation>Выберите аватар</translation>
</message> </message>
@ -1117,7 +1114,7 @@ Media size: %2
<context> <context>
<name>message-description sent:</name> <name>message-description sent:</name>
<message> <message>
<location filename="../../src/Utils.h" line="+95"/> <location filename="../../src/Utils.h" line="+100"/>
<source>You sent an audio clip</source> <source>You sent an audio clip</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1213,7 +1210,7 @@ Media size: %2
<context> <context>
<name>utils</name> <name>utils</name>
<message> <message>
<location filename="../../src/Utils.cpp" line="+282"/> <location filename="../../src/Utils.cpp" line="+306"/>
<source>sent a file.</source> <source>sent a file.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -4,12 +4,12 @@
<context> <context>
<name>ChatPage</name> <name>ChatPage</name>
<message> <message>
<location filename="../../src/ChatPage.cpp" line="+346"/> <location filename="../../src/ChatPage.cpp" line="+329"/>
<source>Failed to upload media. Please try again.</source> <source>Failed to upload media. Please try again.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+389"/> <location line="+392"/>
<source>Failed to restore OLM account. Please login again.</source> <source>Failed to restore OLM account. Please login again.</source>
<translation> OLM </translation> <translation> OLM </translation>
</message> </message>
@ -19,7 +19,7 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location line="+181"/> <location line="+148"/>
<source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -72,7 +72,7 @@
<context> <context>
<name>EditModal</name> <name>EditModal</name>
<message> <message>
<location filename="../../src/dialogs/RoomSettings.cpp" line="+58"/> <location filename="../../src/dialogs/RoomSettings.cpp" line="+59"/>
<source>Apply</source> <source>Apply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -182,7 +182,7 @@
<context> <context>
<name>MessageDelegate</name> <name>MessageDelegate</name>
<message> <message>
<location filename="../qml/delegates/MessageDelegate.qml" line="+43"/> <location filename="../qml/delegates/MessageDelegate.qml" line="+60"/>
<source>redacted</source> <source>redacted</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -223,7 +223,7 @@
<context> <context>
<name>QuickSwitcher</name> <name>QuickSwitcher</name>
<message> <message>
<location filename="../../src/QuickSwitcher.cpp" line="+71"/> <location filename="../../src/QuickSwitcher.cpp" line="+72"/>
<source>Search for a room...</source> <source>Search for a room...</source>
<translation>...</translation> <translation>...</translation>
</message> </message>
@ -279,7 +279,7 @@
<context> <context>
<name>ReplyPopup</name> <name>ReplyPopup</name>
<message> <message>
<location filename="../../src/popups/ReplyPopup.cpp" line="+45"/> <location filename="../../src/popups/ReplyPopup.cpp" line="+46"/>
<source>Logout</source> <source>Logout</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -287,7 +287,7 @@
<context> <context>
<name>RoomInfo</name> <name>RoomInfo</name>
<message> <message>
<location filename="../../src/Cache.cpp" line="+2307"/> <location filename="../../src/Cache.cpp" line="+2303"/>
<source>no version stored</source> <source>no version stored</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -300,12 +300,12 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location line="+161"/> <location line="+151"/>
<source>Accept</source> <source>Accept</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location line="+1"/> <location line="+3"/>
<source>Decline</source> <source>Decline</source>
<translation></translation> <translation></translation>
</message> </message>
@ -364,13 +364,13 @@
<context> <context>
<name>TextInputWidget</name> <name>TextInputWidget</name>
<message> <message>
<location filename="../../src/TextInputWidget.cpp" line="+502"/> <location filename="../../src/TextInputWidget.cpp" line="+496"/>
<source>Send a file</source> <source>Send a file</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location line="+13"/> <location line="+13"/>
<location filename="../../src/TextInputWidget.h" line="+161"/> <location filename="../../src/TextInputWidget.h" line="+163"/>
<source>Write a message...</source> <source>Write a message...</source>
<translation>...</translation> <translation>...</translation>
</message> </message>
@ -385,7 +385,7 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location line="+72"/> <location line="+73"/>
<source>Select a file</source> <source>Select a file</source>
<translation></translation> <translation></translation>
</message> </message>
@ -403,7 +403,7 @@
<context> <context>
<name>TimelineModel</name> <name>TimelineModel</name>
<message> <message>
<location filename="../../src/timeline/TimelineModel.cpp" line="+867"/> <location filename="../../src/timeline/TimelineModel.cpp" line="+687"/>
<source>-- Encrypted Event (No keys found for decryption) --</source> <source>-- Encrypted Event (No keys found for decryption) --</source>
<comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment> <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -427,18 +427,18 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+25"/> <location line="+29"/>
<source>-- Encrypted Event (Unknown event type) --</source> <source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment> <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+54"/> <location line="+48"/>
<source>Message redaction failed: %1</source> <source>Message redaction failed: %1</source>
<translation type="unfinished">%1</translation> <translation type="unfinished">%1</translation>
</message> </message>
<message> <message>
<location line="+453"/> <location line="+454"/>
<source>Save image</source> <source>Save image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -457,11 +457,19 @@
<source>Save file</source> <source>Save file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message numerus="yes">
<location line="+126"/>
<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">
<numerusform></numerusform>
</translation>
</message>
</context> </context>
<context> <context>
<name>TimelineRow</name> <name>TimelineRow</name>
<message> <message>
<location filename="../qml/TimelineRow.qml" line="+57"/> <location filename="../qml/TimelineRow.qml" line="+104"/>
<source>Reply</source> <source>Reply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -550,17 +558,6 @@
<translation>退</translation> <translation>退</translation>
</message> </message>
</context> </context>
<context>
<name>TypingDisplay</name>
<message numerus="yes">
<location filename="../../src/TypingDisplay.cpp" line="+37"/>
<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">
<numerusform></numerusform>
</translation>
</message>
</context>
<context> <context>
<name>UserInfoWidget</name> <name>UserInfoWidget</name>
<message> <message>
@ -572,7 +569,7 @@
<context> <context>
<name>UserSettingsPage</name> <name>UserSettingsPage</name>
<message> <message>
<location filename="../../src/UserSettingsPage.cpp" line="+171"/> <location filename="../../src/UserSettingsPage.cpp" line="+172"/>
<source>Minimize to tray</source> <source>Minimize to tray</source>
<translation></translation> <translation></translation>
</message> </message>
@ -739,7 +736,7 @@
<context> <context>
<name>descriptiveTime</name> <name>descriptiveTime</name>
<message> <message>
<location filename="../../src/Utils.cpp" line="+104"/> <location filename="../../src/Utils.cpp" line="+106"/>
<source>Yesterday</source> <source>Yesterday</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1014,7 +1011,7 @@ Media size: %2
<translation>%1</translation> <translation>%1</translation>
</message> </message>
<message> <message>
<location line="+148"/> <location line="+146"/>
<source>Select an avatar</source> <source>Select an avatar</source>
<translation></translation> <translation></translation>
</message> </message>
@ -1122,7 +1119,7 @@ Media size: %2
<context> <context>
<name>message-description sent:</name> <name>message-description sent:</name>
<message> <message>
<location filename="../../src/Utils.h" line="+95"/> <location filename="../../src/Utils.h" line="+100"/>
<source>You sent an audio clip</source> <source>You sent an audio clip</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1218,7 +1215,7 @@ Media size: %2
<context> <context>
<name>utils</name> <name>utils</name>
<message> <message>
<location filename="../../src/Utils.cpp" line="+282"/> <location filename="../../src/Utils.cpp" line="+306"/>
<source>sent a file.</source> <source>sent a file.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -38,7 +38,11 @@ Item {
id: chat id: chat
visible: timelineManager.timeline != null visible: timelineManager.timeline != null
anchors.fill: parent
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
anchors.bottom: chatFooter.top
anchors.leftMargin: 4 anchors.leftMargin: 4
anchors.rightMargin: scrollbar.width anchors.rightMargin: scrollbar.width
@ -179,6 +183,31 @@ Item {
} }
} }
} }
}
Rectangle {
id: chatFooter
height: Math.max(16, typingDisplay.height)
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
z: 3
color: colors.window
Text {
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
anchors.leftMargin: 10
anchors.rightMargin: 10
id: typingDisplay
text: chat.model ? chat.model.formatTypingUsers(chat.model.typingUsers, chatFooter.color) : ""
color: colors.windowText
}
} }
} }
} }

View File

@ -34,7 +34,6 @@
#include "Splitter.h" #include "Splitter.h"
#include "TextInputWidget.h" #include "TextInputWidget.h"
#include "TopRoomBar.h" #include "TopRoomBar.h"
#include "TypingDisplay.h"
#include "UserInfoWidget.h" #include "UserInfoWidget.h"
#include "UserSettingsPage.h" #include "UserSettingsPage.h"
#include "Utils.h" #include "Utils.h"
@ -130,11 +129,6 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
text_input_ = new TextInputWidget(this); text_input_ = new TextInputWidget(this);
contentLayout_->addWidget(text_input_); contentLayout_->addWidget(text_input_);
typingDisplay_ = new TypingDisplay(content_);
typingDisplay_->hide();
connect(
text_input_, &TextInputWidget::heightChanged, typingDisplay_, &TypingDisplay::setOffset);
typingRefresher_ = new QTimer(this); typingRefresher_ = new QTimer(this);
typingRefresher_->setInterval(TYPING_REFRESH_TIMEOUT); typingRefresher_->setInterval(TYPING_REFRESH_TIMEOUT);
@ -225,19 +219,6 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
} }
}); });
connect(room_list_, &RoomList::roomChanged, this, [this](const QString &roomid) {
QStringList users;
if (!userSettings_->isTypingNotificationsEnabled()) {
typingDisplay_->setUsers(users);
return;
}
if (typingUsers_.find(roomid) != typingUsers_.end())
users = typingUsers_[roomid];
typingDisplay_->setUsers(users);
});
connect(room_list_, &RoomList::roomChanged, text_input_, &TextInputWidget::stopTyping); connect(room_list_, &RoomList::roomChanged, text_input_, &TextInputWidget::stopTyping);
connect(room_list_, &RoomList::roomChanged, this, &ChatPage::changeTopRoomInfo); connect(room_list_, &RoomList::roomChanged, this, &ChatPage::changeTopRoomInfo);
connect(room_list_, &RoomList::roomChanged, splitter, &Splitter::showChatView); connect(room_list_, &RoomList::roomChanged, splitter, &Splitter::showChatView);
@ -472,8 +453,6 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
bool hasNotifications = false; bool hasNotifications = false;
for (const auto &room : rooms.join) { for (const auto &room : rooms.join) {
auto room_id = QString::fromStdString(room.first); auto room_id = QString::fromStdString(room.first);
updateTypingUsers(room_id, room.second.ephemeral.typing);
updateRoomNotificationCount( updateRoomNotificationCount(
room_id, room_id,
room.second.unread_notifications.notification_count, room.second.unread_notifications.notification_count,
@ -786,38 +765,6 @@ ChatPage::removeRoom(const QString &room_id)
room_list_->removeRoom(room_id, room_id == current_room_); room_list_->removeRoom(room_id, room_id == current_room_);
} }
void
ChatPage::updateTypingUsers(const QString &roomid, const std::vector<std::string> &user_ids)
{
if (!userSettings_->isTypingNotificationsEnabled())
return;
typingUsers_[roomid] = generateTypingUsers(roomid, user_ids);
if (current_room_ == roomid)
typingDisplay_->setUsers(typingUsers_[roomid]);
}
QStringList
ChatPage::generateTypingUsers(const QString &room_id, const std::vector<std::string> &typing_users)
{
QStringList users;
auto local_user = utils::localUser();
for (const auto &uid : typing_users) {
const auto remote_user = QString::fromStdString(uid);
if (remote_user == local_user)
continue;
users.append(cache::displayName(room_id, remote_user));
}
users.sort();
return users;
}
void void
ChatPage::removeLeftRooms(const std::map<std::string, mtx::responses::LeftRoom> &rooms) ChatPage::removeLeftRooms(const std::map<std::string, mtx::responses::LeftRoom> &rooms)
{ {

View File

@ -48,7 +48,6 @@ class Splitter;
class TextInputWidget; class TextInputWidget;
class TimelineViewManager; class TimelineViewManager;
class TopRoomBar; class TopRoomBar;
class TypingDisplay;
class UserInfoWidget; class UserInfoWidget;
class UserSettings; class UserSettings;
class NotificationsManager; class NotificationsManager;
@ -187,8 +186,6 @@ private:
using LeftRooms = std::map<std::string, mtx::responses::LeftRoom>; using LeftRooms = std::map<std::string, mtx::responses::LeftRoom>;
void removeLeftRooms(const LeftRooms &rooms); void removeLeftRooms(const LeftRooms &rooms);
void updateTypingUsers(const QString &roomid, const std::vector<std::string> &user_ids);
void loadStateFromCache(); void loadStateFromCache();
void resetUI(); void resetUI();
//! Decides whether or not to hide the group's sidebar. //! Decides whether or not to hide the group's sidebar.
@ -206,9 +203,6 @@ private:
void showNotificationsDialog(const QPoint &point); void showNotificationsDialog(const QPoint &point);
QStringList generateTypingUsers(const QString &room_id,
const std::vector<std::string> &typing_users);
QHBoxLayout *topLayout_; QHBoxLayout *topLayout_;
Splitter *splitter; Splitter *splitter;
@ -228,7 +222,6 @@ private:
TopRoomBar *top_bar_; TopRoomBar *top_bar_;
TextInputWidget *text_input_; TextInputWidget *text_input_;
TypingDisplay *typingDisplay_;
QTimer connectivityTimer_; QTimer connectivityTimer_;
std::atomic_bool isConnected_; std::atomic_bool isConnected_;
@ -240,8 +233,6 @@ private:
popups::UserMentions *user_mentions_popup_; popups::UserMentions *user_mentions_popup_;
// Keeps track of the users currently typing on each room.
std::map<QString, QList<QString>> typingUsers_;
QTimer *typingRefresher_; QTimer *typingRefresher_;
// Global user settings. // Global user settings.

View File

@ -1,86 +0,0 @@
#include <QDebug>
#include <QPainter>
#include <QPoint>
#include <QShowEvent>
#include <QtGlobal>
#include "Config.h"
#include "TypingDisplay.h"
#include "ui/Painter.h"
constexpr int LEFT_PADDING = 24;
constexpr int RECT_PADDING = 2;
TypingDisplay::TypingDisplay(QWidget *parent)
: OverlayWidget(parent)
, offset_{conf::textInput::height}
{
setFixedHeight(QFontMetrics(font()).height() + RECT_PADDING);
setAttribute(Qt::WA_TransparentForMouseEvents);
}
void
TypingDisplay::setOffset(int margin)
{
offset_ = margin;
move(0, parentWidget()->height() - offset_ - height());
}
void
TypingDisplay::setUsers(const QStringList &uid)
{
move(0, parentWidget()->height() - offset_ - height());
text_.clear();
QString temp = text_ +=
tr("%1 and %2 are typing",
"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.)",
uid.size());
if (uid.isEmpty()) {
hide();
update();
return;
}
QStringList uidWithoutLast = uid;
uidWithoutLast.pop_back();
text_ = temp.arg(uidWithoutLast.join(", ")).arg(uid.back());
show();
update();
}
void
TypingDisplay::paintEvent(QPaintEvent *)
{
Painter p(this);
PainterHighQualityEnabler hq(p);
QFont f;
f.setPointSizeF(f.pointSizeF() * 0.9);
p.setFont(f);
p.setPen(QPen(textColor()));
QRect region = rect();
region.translate(LEFT_PADDING, 0);
QFontMetrics fm(f);
text_ = fm.elidedText(text_, Qt::ElideRight, (double)(width() * 0.75));
QPainterPath path;
#if QT_VERSION < QT_VERSION_CHECK(5, 11, 0)
path.addRoundedRect(QRectF(0, 0, fm.width(text_) + 2 * LEFT_PADDING, height()), 3, 3);
#else
path.addRoundedRect(
QRectF(0, 0, fm.horizontalAdvance(text_) + 2 * LEFT_PADDING, height()), 3, 3);
#endif
p.fillPath(path, backgroundColor());
p.drawText(region, Qt::AlignVCenter, text_);
}

View File

@ -1,36 +0,0 @@
#pragma once
#include "ui/OverlayWidget.h"
class QPaintEvent;
class TypingDisplay : public OverlayWidget
{
Q_OBJECT
Q_PROPERTY(QColor textColor WRITE setTextColor READ textColor)
Q_PROPERTY(QColor backgroundColor WRITE setBackgroundColor READ backgroundColor)
public:
TypingDisplay(QWidget *parent = nullptr);
void setUsers(const QStringList &user_ids);
void setTextColor(const QColor &color) { textColor_ = color; };
QColor textColor() const { return textColor_; };
void setBackgroundColor(const QColor &color) { bgColor_ = color; };
QColor backgroundColor() const { return bgColor_; };
public slots:
void setOffset(int margin);
protected:
void paintEvent(QPaintEvent *event) override;
private:
int offset_;
QColor textColor_;
QColor bgColor_;
QString text_;
};

View File

@ -1388,3 +1388,33 @@ TimelineModel::cacheMedia(QString eventId)
emit mediaCached(mxcUrl, filename.filePath()); emit mediaCached(mxcUrl, filename.filePath());
}); });
} }
QString
TimelineModel::formatTypingUsers(const std::vector<QString> &users, QColor bg)
{
QString temp =
tr("%1 and %2 are typing",
"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.)",
users.size());
if (users.empty()) {
return "";
}
QStringList uidWithoutLast;
auto formatUser = [this, bg](const QString &user_id) -> QString {
return QString("<font color=\"%1\">%2</font>")
.arg(userColor(user_id, bg).name())
.arg(escapeEmoji(displayName(user_id).toHtmlEscaped()));
};
for (size_t i = 0; i + 1 < users.size(); i++) {
uidWithoutLast.append(formatUser(users[i]));
}
return temp.arg(uidWithoutLast.join(", ")).arg(formatUser(users.back()));
}

View File

@ -120,6 +120,8 @@ class TimelineModel : public QAbstractListModel
Q_OBJECT Q_OBJECT
Q_PROPERTY( Q_PROPERTY(
int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged) int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged)
Q_PROPERTY(std::vector<QString> typingUsers READ typingUsers WRITE updateTypingUsers NOTIFY
typingUsersChanged)
public: public:
explicit TimelineModel(TimelineViewManager *manager, QString room_id, QObject *parent = 0); explicit TimelineModel(TimelineViewManager *manager, QString room_id, QObject *parent = 0);
@ -162,6 +164,7 @@ public:
Q_INVOKABLE QString displayName(QString id) const; Q_INVOKABLE QString displayName(QString id) const;
Q_INVOKABLE QString avatarUrl(QString id) const; Q_INVOKABLE QString avatarUrl(QString id) const;
Q_INVOKABLE QString formatDateSeparator(QDate date) const; Q_INVOKABLE QString formatDateSeparator(QDate date) const;
Q_INVOKABLE QString formatTypingUsers(const std::vector<QString> &users, QColor bg);
Q_INVOKABLE QString escapeEmoji(QString str) const; Q_INVOKABLE QString escapeEmoji(QString str) const;
Q_INVOKABLE void viewRawMessage(QString id) const; Q_INVOKABLE void viewRawMessage(QString id) const;
@ -183,6 +186,14 @@ public slots:
int currentIndex() const { return idToIndex(currentId); } int currentIndex() const { return idToIndex(currentId); }
void markEventsAsRead(const std::vector<QString> &event_ids); void markEventsAsRead(const std::vector<QString> &event_ids);
QVariantMap getDump(QString eventId) const; QVariantMap getDump(QString eventId) const;
void updateTypingUsers(const std::vector<QString> &users)
{
if (this->typingUsers_ != users) {
this->typingUsers_ = users;
emit typingUsersChanged(typingUsers_);
}
}
std::vector<QString> typingUsers() const { return typingUsers_; }
private slots: private slots:
// Add old events at the top of the timeline. // Add old events at the top of the timeline.
@ -202,6 +213,7 @@ signals:
void mediaCached(QString mxcUrl, QString cacheUrl); void mediaCached(QString mxcUrl, QString cacheUrl);
void newEncryptedImage(mtx::crypto::EncryptedFile encryptionInfo); void newEncryptedImage(mtx::crypto::EncryptedFile encryptionInfo);
void replyFetched(QString requestingEvent, mtx::events::collections::TimelineEvents event); void replyFetched(QString requestingEvent, mtx::events::collections::TimelineEvents event);
void typingUsersChanged(std::vector<QString> users);
private: private:
DecryptionResult decryptEvent( DecryptionResult decryptEvent(
@ -232,6 +244,7 @@ private:
QHash<QString, QColor> userColors; QHash<QString, QColor> userColors;
QString currentId; QString currentId;
std::vector<QString> typingUsers_;
TimelineViewManager *manager_; TimelineViewManager *manager_;

View File

@ -8,6 +8,7 @@
#include "ColorImageProvider.h" #include "ColorImageProvider.h"
#include "DelegateChooser.h" #include "DelegateChooser.h"
#include "Logging.h" #include "Logging.h"
#include "MatrixClient.h"
#include "MxcImageProvider.h" #include "MxcImageProvider.h"
#include "UserSettingsPage.h" #include "UserSettingsPage.h"
#include "dialogs/ImageOverlay.h" #include "dialogs/ImageOverlay.h"
@ -92,10 +93,21 @@ TimelineViewManager::TimelineViewManager(QWidget *parent)
void void
TimelineViewManager::sync(const mtx::responses::Rooms &rooms) TimelineViewManager::sync(const mtx::responses::Rooms &rooms)
{ {
for (auto it = rooms.join.cbegin(); it != rooms.join.cend(); ++it) { for (const auto &[room_id, room] : rooms.join) {
// addRoom will only add the room, if it doesn't exist // addRoom will only add the room, if it doesn't exist
addRoom(QString::fromStdString(it->first)); addRoom(QString::fromStdString(room_id));
models.value(QString::fromStdString(it->first))->addEvents(it->second.timeline); const auto &room_model = models.value(QString::fromStdString(room_id));
room_model->addEvents(room.timeline);
if (ChatPage::instance()->userSettings()->isTypingNotificationsEnabled()) {
std::vector<QString> typing;
typing.reserve(room.ephemeral.typing.size());
for (const auto &user : room.ephemeral.typing) {
if (user != http::client()->user_id().to_string())
typing.push_back(QString::fromStdString(user));
}
room_model->updateTypingUsers(typing);
}
} }
this->isInitialSync_ = false; this->isInitialSync_ = false;