diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts
index e92bf966..59c6dffd 100644
--- a/resources/langs/nheko_de.ts
+++ b/resources/langs/nheko_de.ts
@@ -2,37 +2,14 @@
<!DOCTYPE TS>
<TS version="2.1" language="de">
<context>
- <name>AudioItem</name>
- <message>
- <location filename="../../src/timeline/widgets/AudioItem.cpp" line="+118"/>
- <source>Save File</source>
- <translation>In Datei speichern</translation>
- </message>
-</context>
-<context>
<name>ChatPage</name>
<message>
- <location filename="../../src/ChatPage.cpp" line="+330"/>
- <source>Failed to upload image. Please try again.</source>
- <translation>Hochladen des Bildes fehlgeschlagen. Bitte versuche es erneut.</translation>
- </message>
- <message>
- <location line="+45"/>
- <source>Failed to upload file. Please try again.</source>
- <translation>Hochladen der Datei fehlgeschlagen. Bitte versuche es erneut.</translation>
+ <location filename="../../src/ChatPage.cpp" line="+346"/>
+ <source>Failed to upload media. Please try again.</source>
+ <translation>Medienupload fehlgeschlagen. Bitte versuche es erneut.</translation>
</message>
<message>
- <location line="+43"/>
- <source>Failed to upload audio. Please try again.</source>
- <translation>Hochladen der Audiodatei fehlgeschlagen. Bitte versuche es erneut.</translation>
- </message>
- <message>
- <location line="+42"/>
- <source>Failed to upload video. Please try again.</source>
- <translation>Hochladen der Videodatei fehlgeschlagen. Bitte versuche es erneut.</translation>
- </message>
- <message>
- <location line="+380"/>
+ <location line="+389"/>
<source>Failed to restore OLM account. Please login again.</source>
<translation>Wiederherstellung des OLM Accounts fehlgeschlagen. Bitte logge dich erneut ein.</translation>
</message>
@@ -42,18 +19,18 @@
<translation>Gespeicherte Nachrichten konnten nicht wiederhergestellt werden. Bitte melde Dich erneut an.</translation>
</message>
<message>
- <location line="+198"/>
+ <location line="+181"/>
<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>
</message>
<message>
<location line="+51"/>
- <location line="+153"/>
+ <location line="+155"/>
<source>Please try to login again: %1</source>
<translation>Bitte melde dich erneut an: %1</translation>
</message>
<message>
- <location line="-45"/>
+ <location line="-47"/>
<source>Room creation failed: %1</source>
<translation>Raum konnte nicht erstellt werden: %1</translation>
</message>
@@ -116,19 +93,11 @@
</message>
</context>
<context>
- <name>FileItem</name>
+ <name>EncryptionIndicator</name>
<message>
- <location filename="../../src/timeline/widgets/FileItem.cpp" line="+107"/>
- <source>Save File</source>
- <translation>Datei speichern</translation>
- </message>
-</context>
-<context>
- <name>ImageItem</name>
- <message>
- <location filename="../../src/timeline/widgets/ImageItem.cpp" line="+241"/>
- <source>Save image</source>
- <translation>Bild speichern</translation>
+ <location filename="../qml/EncryptionIndicator.qml" line="+11"/>
+ <source>Encrypted</source>
+ <translation>Verschlüsselt</translation>
</message>
</context>
<context>
@@ -200,7 +169,7 @@
<context>
<name>MemberList</name>
<message>
- <location filename="../../src/dialogs/MemberList.cpp" line="+96"/>
+ <location filename="../../src/dialogs/MemberList.cpp" line="+89"/>
<source>Room members</source>
<translation>Teilnehmerliste</translation>
</message>
@@ -211,6 +180,27 @@
</message>
</context>
<context>
+ <name>MessageDelegate</name>
+ <message>
+ <location filename="../qml/delegates/MessageDelegate.qml" line="+43"/>
+ <source>redacted</source>
+ <translation>gelöscht</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Encryption enabled</source>
+ <translation>Verschlüsselung aktiviert</translation>
+ </message>
+</context>
+<context>
+ <name>Placeholder</name>
+ <message>
+ <location filename="../qml/delegates/Placeholder.qml" line="+4"/>
+ <source>unimplemented event: </source>
+ <translation>unimplementiertes event: </translation>
+ </message>
+</context>
+<context>
<name>QuickSwitcher</name>
<message>
<location filename="../../src/QuickSwitcher.cpp" line="+71"/>
@@ -277,7 +267,7 @@
<context>
<name>RoomInfo</name>
<message>
- <location filename="../../src/Cache.cpp" line="+2205"/>
+ <location filename="../../src/Cache.cpp" line="+2307"/>
<source>no version stored</source>
<translation>keine Version gespeichert</translation>
</message>
@@ -285,12 +275,12 @@
<context>
<name>RoomInfoListItem</name>
<message>
- <location filename="../../src/RoomInfoListItem.cpp" line="+93"/>
+ <location filename="../../src/RoomInfoListItem.cpp" line="+95"/>
<source>Leave room</source>
<translation>Raum verlassen</translation>
</message>
<message>
- <location line="+181"/>
+ <location line="+161"/>
<source>Accept</source>
<translation>Akzeptieren</translation>
</message>
@@ -331,36 +321,36 @@
<context>
<name>StatusIndicator</name>
<message>
- <location filename="../../src/timeline/TimelineItem.cpp" line="+107"/>
- <source>Encrypted</source>
- <translation>Verschlüsselt</translation>
+ <location filename="../qml/StatusIndicator.qml" line="+13"/>
+ <source>Failed</source>
+ <translation>Fehlgeschlagen</translation>
</message>
<message>
- <location line="+3"/>
- <source>Delivered</source>
- <translation>Erhalten</translation>
+ <location line="+1"/>
+ <source>Sent</source>
+ <translation>Gesendet</translation>
</message>
<message>
- <location line="+3"/>
- <source>Seen</source>
- <translation>Gelesen</translation>
+ <location line="+1"/>
+ <source>Received</source>
+ <translation>Empfangen</translation>
</message>
<message>
- <location line="+3"/>
- <source>Sent</source>
- <translation>Gesendet</translation>
+ <location line="+1"/>
+ <source>Read</source>
+ <translation>Gelesen</translation>
</message>
</context>
<context>
<name>TextInputWidget</name>
<message>
- <location filename="../../src/TextInputWidget.cpp" line="+507"/>
+ <location filename="../../src/TextInputWidget.cpp" line="+502"/>
<source>Send a file</source>
<translation>Versende Datei</translation>
</message>
<message>
<location line="+13"/>
- <location filename="../../src/TextInputWidget.h" line="+164"/>
+ <location filename="../../src/TextInputWidget.h" line="+161"/>
<source>Write a message...</source>
<translation>Schreibe eine Nachricht…</translation>
</message>
@@ -375,7 +365,7 @@
<translation>Emoji</translation>
</message>
<message>
- <location line="+75"/>
+ <location line="+72"/>
<source>Select a file</source>
<translation>Datei auswählen</translation>
</message>
@@ -391,32 +381,9 @@
</message>
</context>
<context>
- <name>TimelineItem</name>
- <message>
- <location filename="../../src/timeline/TimelineItem.cpp" line="+85"/>
- <source>Message redaction failed: %1</source>
- <translation>Nachricht zurückziehen fehlgeschlagen: %1</translation>
- </message>
- <message>
- <location line="+39"/>
- <source>Reply</source>
- <translation>Antworten</translation>
- </message>
- <message>
- <location line="+11"/>
- <source>Options</source>
- <translation>Optionen</translation>
- </message>
-</context>
-<context>
- <name>TimelineView</name>
- <message>
- <location filename="../../src/timeline/TimelineView.cpp" line="+245"/>
- <source>Encryption is enabled</source>
- <translation>Verschlüsselung aktiv</translation>
- </message>
+ <name>TimelineModel</name>
<message>
- <location line="+65"/>
+ <location filename="../../src/timeline/TimelineModel.cpp" line="+835"/>
<source>-- Encrypted Event (No keys found for decryption) --</source>
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted</comment>
<translation>-- verschlüsselter Event (keine Schlüssel zur Entschlüsselung gefunden) --</translation>
@@ -440,16 +407,87 @@
<translation>-- Entschlüsselungsfehler (%1) --</translation>
</message>
<message>
- <location line="+27"/>
+ <location line="+25"/>
<source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet</comment>
<translation>-- verschlüsselter Event (Unbekannter Eventtyp) --</translation>
</message>
+ <message>
+ <location line="+54"/>
+ <source>Message redaction failed: %1</source>
+ <translation>Nachricht zurückziehen fehlgeschlagen: %1</translation>
+ </message>
+ <message>
+ <location line="+453"/>
+ <source>Save image</source>
+ <translation>Bild speichern</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save video</source>
+ <translation>Video speichern</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save audio</source>
+ <translation>Audiodatei speichern</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save file</source>
+ <translation>Datei speichern</translation>
+ </message>
+</context>
+<context>
+ <name>TimelineRow</name>
+ <message>
+ <location filename="../qml/TimelineRow.qml" line="+57"/>
+ <source>Reply</source>
+ <translation>Antworten</translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>Options</source>
+ <translation>Optionen</translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>Read receipts</source>
+ <translation>Lesebestätigungen</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Mark as read</source>
+ <translation>Als gelesen markieren</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>View raw message</source>
+ <translation>Zeige rohen Nachrichteninhalt</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Redact message</source>
+ <translation>Nachricht löschen</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Save as</source>
+ <translation>Speichern als...</translation>
+ </message>
+</context>
+<context>
+ <name>TimelineView</name>
+ <message>
+ <location filename="../qml/TimelineView.qml" line="+24"/>
+ <source>No room open</source>
+ <translation>Kein Raum geöffnet</translation>
+ </message>
</context>
<context>
<name>TopRoomBar</name>
<message>
- <location filename="../../src/TopRoomBar.cpp" line="+79"/>
+ <location filename="../../src/TopRoomBar.cpp" line="+78"/>
<source>Room options</source>
<translation>Raumoptionen</translation>
</message>
@@ -515,7 +553,7 @@
<context>
<name>UserSettingsPage</name>
<message>
- <location filename="../../src/UserSettingsPage.cpp" line="+166"/>
+ <location filename="../../src/UserSettingsPage.cpp" line="+171"/>
<source>Minimize to tray</source>
<translation>Ins Benachrichtigungsfeld minimieren</translation>
</message>
@@ -531,6 +569,11 @@
</message>
<message>
<location line="+9"/>
+ <source>Circular Avatars</source>
+ <translation>Runde Profilbilder</translation>
+ </message>
+ <message>
+ <location line="+9"/>
<source>Typing notifications</source>
<translation>Schreibbenachrichtigungen</translation>
</message>
@@ -605,7 +648,7 @@
<translation>ALLGEMEINES</translation>
</message>
<message>
- <location line="+156"/>
+ <location line="+161"/>
<source>Open Sessions File</source>
<translation>Öffne Sessions Datei</translation>
</message>
@@ -825,7 +868,7 @@ Medien-Größe: %2
<context>
<name>dialogs::ReadReceipts</name>
<message>
- <location filename="../../src/dialogs/ReadReceipts.cpp" line="+121"/>
+ <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/>
<source>Read receipts</source>
<translation>Lesebestätigungen</translation>
</message>
@@ -951,7 +994,7 @@ Medien-Größe: %2
<translation>Aktivierung der Verschlüsselung fehlgeschlagen: %1</translation>
</message>
<message>
- <location line="+149"/>
+ <location line="+148"/>
<source>Select an avatar</source>
<translation>Wähle einen Avatar</translation>
</message>
@@ -978,19 +1021,6 @@ Medien-Größe: %2
</message>
</context>
<context>
- <name>dialogs::UserMentions</name>
- <message>
- <location filename="../../src/dialogs/UserMentions.cpp" line="+53"/>
- <source>This Room</source>
- <translation>Dieser Raum</translation>
- </message>
- <message>
- <location line="+1"/>
- <source>All Rooms</source>
- <translation>Alle Räume</translation>
- </message>
-</context>
-<context>
<name>dialogs::UserProfile</name>
<message>
<location filename="../../src/dialogs/UserProfile.cpp" line="+63"/>
@@ -1013,7 +1043,7 @@ Medien-Größe: %2
<translation>Gespräch beginnen</translation>
</message>
<message>
- <location line="+57"/>
+ <location line="+56"/>
<source>Devices</source>
<translation>Geräte</translation>
</message>
@@ -1064,69 +1094,103 @@ Medien-Größe: %2
<context>
<name>message-description sent:</name>
<message>
- <location filename="../../src/Utils.h" line="+104"/>
- <source>%1 an audio clip</source>
- <translation>%1 einen Audioclip</translation>
+ <location filename="../../src/Utils.h" line="+95"/>
+ <source>You sent an audio clip</source>
+ <translation>Du hast eine Audiodatei gesendet.</translation>
</message>
<message>
<location line="+3"/>
- <source>%1 an image</source>
- <translation>%1 ein Bild</translation>
+ <source>%1 sent an audio clip</source>
+ <translation>%1 hat eine Audiodatei gesendet.</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent an image</source>
+ <translation>Du hast ein Bild gesendet.</translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a file</source>
- <translation>%1 eine Datei</translation>
+ <source>%1 sent an image</source>
+ <translation>%1 hat ein Bild gesendet.</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a file</source>
+ <translation>Du hast eine Datei gesendet.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>%1 sent a file</source>
+ <translation>%1 hat eine Datei gesendet.</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a video</source>
+ <translation>Du hast ein Video gesendet.</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>%1 sent a video</source>
+ <translation>%1 hat ein Video gesendet.</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a sticker</source>
+ <translation>Du hast einen Sticker gesendet.</translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a video clip</source>
- <translation>%1 einen Videoclip</translation>
+ <source>%1 sent a sticker</source>
+ <translation>%1 hat einen Sticker gesendet.</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a notification</source>
+ <translation>Du hast eine Benachrichtigung gesendet.</translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a sticker</source>
- <translation>%1 einen Sticker</translation>
+ <source>%1 sent a notification</source>
+ <translation>%1 hat eine Benachrichtigung gesendet.</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You: %1</source>
+ <translation>Du: %1</translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a notification</source>
- <translation>1% eine Benachrichtigung</translation>
+ <source>%1: %2</source>
+ <translation>%1: %2</translation>
</message>
<message>
<location line="+7"/>
- <source>%1 an encrypted message</source>
- <translation>1% eine verschüsselte Nachricht</translation>
+ <source>You sent an encrypted message</source>
+ <translation>Du hast eine verschlüsselte Nachricht gesendet.</translation>
</message>
-</context>
-<context>
- <name>message-description:</name>
<message>
- <location line="-26"/>
- <source>sent</source>
- <comment>For when someone else is the sender</comment>
- <translation type="unfinished"></translation>
+ <location line="+3"/>
+ <source>%1 sent an encrypted message</source>
+ <translation>%1 hat eine verschlüsselte Nachricht gesendet.</translation>
</message>
</context>
<context>
- <name>message-description: </name>
+ <name>popups::UserMentions</name>
<message>
- <location line="-2"/>
- <source>sent</source>
- <comment>For when you are the sender</comment>
- <translation type="unfinished"></translation>
+ <location filename="../../src/popups/UserMentions.cpp" line="+61"/>
+ <source>This Room</source>
+ <translation>Dieser Raum</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>All Rooms</source>
+ <translation>Alle Räume</translation>
</message>
</context>
<context>
<name>utils</name>
<message>
- <location filename="../../src/Utils.cpp" line="+46"/>
- <location filename="../../src/Utils.h" line="+55"/>
- <source>You</source>
- <translation>Du</translation>
- </message>
- <message>
- <location line="+219"/>
+ <location filename="../../src/Utils.cpp" line="+282"/>
<source>sent a file.</source>
<translation type="unfinished"></translation>
</message>
@@ -1146,7 +1210,7 @@ Medien-Größe: %2
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/Utils.h" line="-23"/>
+ <location filename="../../src/Utils.h" line="+4"/>
<source>Unknown Message Type</source>
<translation>Unbekannter Nachrichtentyp</translation>
</message>
diff --git a/resources/langs/nheko_el.ts b/resources/langs/nheko_el.ts
index 700c3d57..fe65785b 100644
--- a/resources/langs/nheko_el.ts
+++ b/resources/langs/nheko_el.ts
@@ -2,37 +2,14 @@
<!DOCTYPE TS>
<TS version="2.1" language="el">
<context>
- <name>AudioItem</name>
- <message>
- <location filename="../../src/timeline/widgets/AudioItem.cpp" line="+118"/>
- <source>Save File</source>
- <translation>Αποθήκευση</translation>
- </message>
-</context>
-<context>
<name>ChatPage</name>
<message>
- <location filename="../../src/ChatPage.cpp" line="+330"/>
- <source>Failed to upload image. Please try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+45"/>
- <source>Failed to upload file. Please try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+43"/>
- <source>Failed to upload audio. Please try again.</source>
+ <location filename="../../src/ChatPage.cpp" line="+346"/>
+ <source>Failed to upload media. Please try again.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+42"/>
- <source>Failed to upload video. Please try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+380"/>
+ <location line="+389"/>
<source>Failed to restore OLM account. Please login again.</source>
<translation type="unfinished"></translation>
</message>
@@ -42,18 +19,18 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+198"/>
+ <location line="+181"/>
<source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+51"/>
- <location line="+153"/>
+ <location line="+155"/>
<source>Please try to login again: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-45"/>
+ <location line="-47"/>
<source>Room creation failed: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -116,19 +93,11 @@
</message>
</context>
<context>
- <name>FileItem</name>
- <message>
- <location filename="../../src/timeline/widgets/FileItem.cpp" line="+107"/>
- <source>Save File</source>
- <translation>Αποθήκευση</translation>
- </message>
-</context>
-<context>
- <name>ImageItem</name>
+ <name>EncryptionIndicator</name>
<message>
- <location filename="../../src/timeline/widgets/ImageItem.cpp" line="+241"/>
- <source>Save image</source>
- <translation>Αποθήκευση Εικόνας</translation>
+ <location filename="../qml/EncryptionIndicator.qml" line="+11"/>
+ <source>Encrypted</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -200,7 +169,7 @@
<context>
<name>MemberList</name>
<message>
- <location filename="../../src/dialogs/MemberList.cpp" line="+96"/>
+ <location filename="../../src/dialogs/MemberList.cpp" line="+89"/>
<source>Room members</source>
<translation>Μέλη</translation>
</message>
@@ -211,6 +180,27 @@
</message>
</context>
<context>
+ <name>MessageDelegate</name>
+ <message>
+ <location filename="../qml/delegates/MessageDelegate.qml" line="+43"/>
+ <source>redacted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Encryption enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Placeholder</name>
+ <message>
+ <location filename="../qml/delegates/Placeholder.qml" line="+4"/>
+ <source>unimplemented event: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>QuickSwitcher</name>
<message>
<location filename="../../src/QuickSwitcher.cpp" line="+71"/>
@@ -277,7 +267,7 @@
<context>
<name>RoomInfo</name>
<message>
- <location filename="../../src/Cache.cpp" line="+2205"/>
+ <location filename="../../src/Cache.cpp" line="+2307"/>
<source>no version stored</source>
<translation type="unfinished"></translation>
</message>
@@ -285,12 +275,12 @@
<context>
<name>RoomInfoListItem</name>
<message>
- <location filename="../../src/RoomInfoListItem.cpp" line="+93"/>
+ <location filename="../../src/RoomInfoListItem.cpp" line="+95"/>
<source>Leave room</source>
<translation>Βγές</translation>
</message>
<message>
- <location line="+181"/>
+ <location line="+161"/>
<source>Accept</source>
<translation>Αποδοχή</translation>
</message>
@@ -331,36 +321,36 @@
<context>
<name>StatusIndicator</name>
<message>
- <location filename="../../src/timeline/TimelineItem.cpp" line="+107"/>
- <source>Encrypted</source>
+ <location filename="../qml/StatusIndicator.qml" line="+13"/>
+ <source>Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Delivered</source>
+ <location line="+1"/>
+ <source>Sent</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Seen</source>
+ <location line="+1"/>
+ <source>Received</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Sent</source>
+ <location line="+1"/>
+ <source>Read</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TextInputWidget</name>
<message>
- <location filename="../../src/TextInputWidget.cpp" line="+507"/>
+ <location filename="../../src/TextInputWidget.cpp" line="+502"/>
<source>Send a file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+13"/>
- <location filename="../../src/TextInputWidget.h" line="+164"/>
+ <location filename="../../src/TextInputWidget.h" line="+161"/>
<source>Write a message...</source>
<translation>Γράψε ένα μήνυμα...</translation>
</message>
@@ -375,7 +365,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+75"/>
+ <location line="+72"/>
<source>Select a file</source>
<translation>Διάλεξε ένα αρχείο</translation>
</message>
@@ -391,65 +381,113 @@
</message>
</context>
<context>
- <name>TimelineItem</name>
+ <name>TimelineModel</name>
<message>
- <location filename="../../src/timeline/TimelineItem.cpp" line="+85"/>
+ <location filename="../../src/timeline/TimelineModel.cpp" line="+835"/>
+ <source>-- Encrypted Event (No keys found for decryption) --</source>
+ <comment>Placeholder, when the message was not decrypted yet or can't be decrypted</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+15"/>
+ <source>-- Decryption Error (failed to communicate with DB) --</source>
+ <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+19"/>
+ <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source>
+ <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>-- Decryption Error (%1) --</source>
+ <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+25"/>
+ <source>-- Encrypted Event (Unknown event type) --</source>
+ <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+54"/>
<source>Message redaction failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+39"/>
- <source>Reply</source>
+ <location line="+453"/>
+ <source>Save image</source>
+ <translation type="unfinished">Αποθήκευση Εικόνας</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save video</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+11"/>
- <source>Options</source>
+ <location line="+2"/>
+ <source>Save audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save file</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>TimelineView</name>
+ <name>TimelineRow</name>
<message>
- <location filename="../../src/timeline/TimelineView.cpp" line="+245"/>
- <source>Encryption is enabled</source>
+ <location filename="../qml/TimelineRow.qml" line="+57"/>
+ <source>Reply</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+65"/>
- <source>-- Encrypted Event (No keys found for decryption) --</source>
- <comment>Placeholder, when the message was not decrypted yet or can't be decrypted</comment>
+ <location line="+14"/>
+ <source>Options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+15"/>
- <source>-- Decryption Error (failed to communicate with DB) --</source>
- <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment>
+ <location line="+12"/>
+ <source>Read receipts</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+19"/>
- <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source>
- <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment>
+ <location line="+4"/>
+ <source>Mark as read</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+12"/>
- <source>-- Decryption Error (%1) --</source>
- <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1</comment>
+ <location line="+3"/>
+ <source>View raw message</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+27"/>
- <source>-- Encrypted Event (Unknown event type) --</source>
- <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet</comment>
+ <location line="+4"/>
+ <source>Redact message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Save as</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TimelineView</name>
+ <message>
+ <location filename="../qml/TimelineView.qml" line="+24"/>
+ <source>No room open</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TopRoomBar</name>
<message>
- <location filename="../../src/TopRoomBar.cpp" line="+79"/>
+ <location filename="../../src/TopRoomBar.cpp" line="+78"/>
<source>Room options</source>
<translation type="unfinished"></translation>
</message>
@@ -515,7 +553,7 @@
<context>
<name>UserSettingsPage</name>
<message>
- <location filename="../../src/UserSettingsPage.cpp" line="+166"/>
+ <location filename="../../src/UserSettingsPage.cpp" line="+171"/>
<source>Minimize to tray</source>
<translation>Ελαχιστοποίηση</translation>
</message>
@@ -531,6 +569,11 @@
</message>
<message>
<location line="+9"/>
+ <source>Circular Avatars</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+9"/>
<source>Typing notifications</source>
<translation type="unfinished"></translation>
</message>
@@ -605,7 +648,7 @@
<translation>ΓΕΝΙΚΑ</translation>
</message>
<message>
- <location line="+156"/>
+ <location line="+161"/>
<source>Open Sessions File</source>
<translation type="unfinished"></translation>
</message>
@@ -823,7 +866,7 @@ Media size: %2
<context>
<name>dialogs::ReadReceipts</name>
<message>
- <location filename="../../src/dialogs/ReadReceipts.cpp" line="+121"/>
+ <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/>
<source>Read receipts</source>
<translation type="unfinished"></translation>
</message>
@@ -949,7 +992,7 @@ Media size: %2
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+149"/>
+ <location line="+148"/>
<source>Select an avatar</source>
<translation type="unfinished"></translation>
</message>
@@ -976,19 +1019,6 @@ Media size: %2
</message>
</context>
<context>
- <name>dialogs::UserMentions</name>
- <message>
- <location filename="../../src/dialogs/UserMentions.cpp" line="+53"/>
- <source>This Room</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+1"/>
- <source>All Rooms</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>dialogs::UserProfile</name>
<message>
<location filename="../../src/dialogs/UserProfile.cpp" line="+63"/>
@@ -1011,7 +1041,7 @@ Media size: %2
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+57"/>
+ <location line="+56"/>
<source>Devices</source>
<translation type="unfinished"></translation>
</message>
@@ -1062,69 +1092,103 @@ Media size: %2
<context>
<name>message-description sent:</name>
<message>
- <location filename="../../src/Utils.h" line="+104"/>
- <source>%1 an audio clip</source>
+ <location filename="../../src/Utils.h" line="+95"/>
+ <source>You sent an audio clip</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 an image</source>
+ <source>%1 sent an audio clip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent an image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>%1 sent an image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a file</source>
+ <source>%1 sent a file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>%1 sent a video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a sticker</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a video clip</source>
+ <source>%1 sent a sticker</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a notification</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a sticker</source>
+ <source>%1 sent a notification</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a notification</source>
+ <source>%1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+7"/>
- <source>%1 an encrypted message</source>
+ <source>You sent an encrypted message</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>message-description:</name>
<message>
- <location line="-26"/>
- <source>sent</source>
- <comment>For when someone else is the sender</comment>
+ <location line="+3"/>
+ <source>%1 sent an encrypted message</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>message-description: </name>
+ <name>popups::UserMentions</name>
<message>
- <location line="-2"/>
- <source>sent</source>
- <comment>For when you are the sender</comment>
+ <location filename="../../src/popups/UserMentions.cpp" line="+61"/>
+ <source>This Room</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>utils</name>
<message>
- <location filename="../../src/Utils.cpp" line="+46"/>
- <location filename="../../src/Utils.h" line="+55"/>
- <source>You</source>
+ <location line="+1"/>
+ <source>All Rooms</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>utils</name>
<message>
- <location line="+219"/>
+ <location filename="../../src/Utils.cpp" line="+282"/>
<source>sent a file.</source>
<translation type="unfinished"></translation>
</message>
@@ -1144,7 +1208,7 @@ Media size: %2
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/Utils.h" line="-23"/>
+ <location filename="../../src/Utils.h" line="+4"/>
<source>Unknown Message Type</source>
<translation type="unfinished"></translation>
</message>
diff --git a/resources/langs/nheko_en.ts b/resources/langs/nheko_en.ts
index edb95313..49ea7439 100644
--- a/resources/langs/nheko_en.ts
+++ b/resources/langs/nheko_en.ts
@@ -2,37 +2,14 @@
<!DOCTYPE TS>
<TS version="2.1" language="en">
<context>
- <name>AudioItem</name>
- <message>
- <location filename="../../src/timeline/widgets/AudioItem.cpp" line="+118"/>
- <source>Save File</source>
- <translation>Save File</translation>
- </message>
-</context>
-<context>
<name>ChatPage</name>
<message>
- <location filename="../../src/ChatPage.cpp" line="+330"/>
- <source>Failed to upload image. Please try again.</source>
- <translation>Failed to upload image. Please try again.</translation>
- </message>
- <message>
- <location line="+45"/>
- <source>Failed to upload file. Please try again.</source>
- <translation>Failed to upload file. Please try again.</translation>
- </message>
- <message>
- <location line="+43"/>
- <source>Failed to upload audio. Please try again.</source>
- <translation>Failed to upload audio. Please try again.</translation>
- </message>
- <message>
- <location line="+42"/>
- <source>Failed to upload video. Please try again.</source>
- <translation>Failed to upload video. Please try again.</translation>
+ <location filename="../../src/ChatPage.cpp" line="+346"/>
+ <source>Failed to upload media. Please try again.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+380"/>
+ <location line="+389"/>
<source>Failed to restore OLM account. Please login again.</source>
<translation>Failed to restore OLM account. Please login again.</translation>
</message>
@@ -42,18 +19,18 @@
<translation>Failed to restore save data. Please login again.</translation>
</message>
<message>
- <location line="+198"/>
+ <location line="+181"/>
<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>
</message>
<message>
<location line="+51"/>
- <location line="+153"/>
+ <location line="+155"/>
<source>Please try to login again: %1</source>
<translation>Please try to login again: %1</translation>
</message>
<message>
- <location line="-45"/>
+ <location line="-47"/>
<source>Room creation failed: %1</source>
<translation>Room creation failed: %1</translation>
</message>
@@ -116,19 +93,11 @@
</message>
</context>
<context>
- <name>FileItem</name>
- <message>
- <location filename="../../src/timeline/widgets/FileItem.cpp" line="+107"/>
- <source>Save File</source>
- <translation>Save File</translation>
- </message>
-</context>
-<context>
- <name>ImageItem</name>
+ <name>EncryptionIndicator</name>
<message>
- <location filename="../../src/timeline/widgets/ImageItem.cpp" line="+241"/>
- <source>Save image</source>
- <translation>Save image</translation>
+ <location filename="../qml/EncryptionIndicator.qml" line="+11"/>
+ <source>Encrypted</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -200,7 +169,7 @@
<context>
<name>MemberList</name>
<message>
- <location filename="../../src/dialogs/MemberList.cpp" line="+96"/>
+ <location filename="../../src/dialogs/MemberList.cpp" line="+89"/>
<source>Room members</source>
<translation>Room members</translation>
</message>
@@ -211,6 +180,27 @@
</message>
</context>
<context>
+ <name>MessageDelegate</name>
+ <message>
+ <location filename="../qml/delegates/MessageDelegate.qml" line="+43"/>
+ <source>redacted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Encryption enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Placeholder</name>
+ <message>
+ <location filename="../qml/delegates/Placeholder.qml" line="+4"/>
+ <source>unimplemented event: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>QuickSwitcher</name>
<message>
<location filename="../../src/QuickSwitcher.cpp" line="+71"/>
@@ -277,7 +267,7 @@
<context>
<name>RoomInfo</name>
<message>
- <location filename="../../src/Cache.cpp" line="+2205"/>
+ <location filename="../../src/Cache.cpp" line="+2307"/>
<source>no version stored</source>
<translation>no version stored</translation>
</message>
@@ -285,12 +275,12 @@
<context>
<name>RoomInfoListItem</name>
<message>
- <location filename="../../src/RoomInfoListItem.cpp" line="+93"/>
+ <location filename="../../src/RoomInfoListItem.cpp" line="+95"/>
<source>Leave room</source>
<translation>Leave room</translation>
</message>
<message>
- <location line="+181"/>
+ <location line="+161"/>
<source>Accept</source>
<translation>Accept</translation>
</message>
@@ -331,36 +321,36 @@
<context>
<name>StatusIndicator</name>
<message>
- <location filename="../../src/timeline/TimelineItem.cpp" line="+107"/>
- <source>Encrypted</source>
- <translation>Encrypted</translation>
+ <location filename="../qml/StatusIndicator.qml" line="+13"/>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Delivered</source>
- <translation>Delivered</translation>
+ <location line="+1"/>
+ <source>Sent</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Seen</source>
- <translation>Seen</translation>
+ <location line="+1"/>
+ <source>Received</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Sent</source>
- <translation>Sent</translation>
+ <location line="+1"/>
+ <source>Read</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TextInputWidget</name>
<message>
- <location filename="../../src/TextInputWidget.cpp" line="+507"/>
+ <location filename="../../src/TextInputWidget.cpp" line="+502"/>
<source>Send a file</source>
<translation>Send a file</translation>
</message>
<message>
<location line="+13"/>
- <location filename="../../src/TextInputWidget.h" line="+164"/>
+ <location filename="../../src/TextInputWidget.h" line="+161"/>
<source>Write a message...</source>
<translation>Write a message…</translation>
</message>
@@ -375,7 +365,7 @@
<translation>Emoji</translation>
</message>
<message>
- <location line="+75"/>
+ <location line="+72"/>
<source>Select a file</source>
<translation>Select a file</translation>
</message>
@@ -391,65 +381,113 @@
</message>
</context>
<context>
- <name>TimelineItem</name>
- <message>
- <location filename="../../src/timeline/TimelineItem.cpp" line="+85"/>
- <source>Message redaction failed: %1</source>
- <translation>Message redaction failed: %1</translation>
- </message>
- <message>
- <location line="+39"/>
- <source>Reply</source>
- <translation>Reply</translation>
- </message>
- <message>
- <location line="+11"/>
- <source>Options</source>
- <translation>Options</translation>
- </message>
-</context>
-<context>
- <name>TimelineView</name>
+ <name>TimelineModel</name>
<message>
- <location filename="../../src/timeline/TimelineView.cpp" line="+245"/>
- <source>Encryption is enabled</source>
- <translation>Encryption is enabled</translation>
- </message>
- <message>
- <location line="+65"/>
+ <location filename="../../src/timeline/TimelineModel.cpp" line="+835"/>
<source>-- Encrypted Event (No keys found for decryption) --</source>
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted</comment>
- <translation>-- Encrypted Event (No keys found for decryption) --</translation>
+ <translation type="unfinished">-- Encrypted Event (No keys found for decryption) --</translation>
</message>
<message>
<location line="+15"/>
<source>-- Decryption Error (failed to communicate with DB) --</source>
<comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment>
- <translation>-- Decryption Error (failed to communicate with DB) --</translation>
+ <translation type="unfinished">-- Decryption Error (failed to communicate with DB) --</translation>
</message>
<message>
<location line="+19"/>
<source>-- Decryption Error (failed to retrieve megolm keys from db) --</source>
<comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment>
- <translation>-- Decryption Error (failed to retrieve megolm keys from db) --</translation>
+ <translation type="unfinished">-- Decryption Error (failed to retrieve megolm keys from db) --</translation>
</message>
<message>
<location line="+12"/>
<source>-- Decryption Error (%1) --</source>
<comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1</comment>
- <translation>-- Decryption Error (%1) --</translation>
+ <translation type="unfinished">-- Decryption Error (%1) --</translation>
</message>
<message>
- <location line="+27"/>
+ <location line="+25"/>
<source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet</comment>
- <translation>-- Encrypted Event (Unknown event type) --</translation>
+ <translation type="unfinished">-- Encrypted Event (Unknown event type) --</translation>
+ </message>
+ <message>
+ <location line="+54"/>
+ <source>Message redaction failed: %1</source>
+ <translation type="unfinished">Message redaction failed: %1</translation>
+ </message>
+ <message>
+ <location line="+453"/>
+ <source>Save image</source>
+ <translation type="unfinished">Save image</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TimelineRow</name>
+ <message>
+ <location filename="../qml/TimelineRow.qml" line="+57"/>
+ <source>Reply</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>Read receipts</source>
+ <translation type="unfinished">Read receipts</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Mark as read</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>View raw message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Redact message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Save as</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TimelineView</name>
+ <message>
+ <location filename="../qml/TimelineView.qml" line="+24"/>
+ <source>No room open</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TopRoomBar</name>
<message>
- <location filename="../../src/TopRoomBar.cpp" line="+79"/>
+ <location filename="../../src/TopRoomBar.cpp" line="+78"/>
<source>Room options</source>
<translation>Room options</translation>
</message>
@@ -515,7 +553,7 @@
<context>
<name>UserSettingsPage</name>
<message>
- <location filename="../../src/UserSettingsPage.cpp" line="+166"/>
+ <location filename="../../src/UserSettingsPage.cpp" line="+171"/>
<source>Minimize to tray</source>
<translation>Minimize to tray</translation>
</message>
@@ -531,6 +569,11 @@
</message>
<message>
<location line="+9"/>
+ <source>Circular Avatars</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+9"/>
<source>Typing notifications</source>
<translation>Typing notifications</translation>
</message>
@@ -605,7 +648,7 @@
<translation>GENERAL</translation>
</message>
<message>
- <location line="+156"/>
+ <location line="+161"/>
<source>Open Sessions File</source>
<translation>Open Sessions File</translation>
</message>
@@ -825,7 +868,7 @@ Media size: %2
<context>
<name>dialogs::ReadReceipts</name>
<message>
- <location filename="../../src/dialogs/ReadReceipts.cpp" line="+121"/>
+ <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/>
<source>Read receipts</source>
<translation>Read receipts</translation>
</message>
@@ -953,7 +996,7 @@ Media size: %2
<translation>Failed to enable encryption: %1</translation>
</message>
<message>
- <location line="+149"/>
+ <location line="+148"/>
<source>Select an avatar</source>
<translation>Select an avatar</translation>
</message>
@@ -980,19 +1023,6 @@ Media size: %2
</message>
</context>
<context>
- <name>dialogs::UserMentions</name>
- <message>
- <location filename="../../src/dialogs/UserMentions.cpp" line="+53"/>
- <source>This Room</source>
- <translation>This Room</translation>
- </message>
- <message>
- <location line="+1"/>
- <source>All Rooms</source>
- <translation>All Rooms</translation>
- </message>
-</context>
-<context>
<name>dialogs::UserProfile</name>
<message>
<location filename="../../src/dialogs/UserProfile.cpp" line="+63"/>
@@ -1015,7 +1045,7 @@ Media size: %2
<translation>Start a conversation</translation>
</message>
<message>
- <location line="+57"/>
+ <location line="+56"/>
<source>Devices</source>
<translation>Devices</translation>
</message>
@@ -1066,69 +1096,103 @@ Media size: %2
<context>
<name>message-description sent:</name>
<message>
- <location filename="../../src/Utils.h" line="+104"/>
- <source>%1 an audio clip</source>
- <translation>%1 an audio clip</translation>
+ <location filename="../../src/Utils.h" line="+95"/>
+ <source>You sent an audio clip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>%1 sent an audio clip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent an image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>%1 sent an image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a file</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 an image</source>
- <translation>%1 an image</translation>
+ <source>%1 sent a file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a video</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a file</source>
- <translation>%1 a file</translation>
+ <source>%1 sent a video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a sticker</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a video clip</source>
- <translation>%1 a video clip</translation>
+ <source>%1 sent a sticker</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a notification</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a sticker</source>
- <translation>%1 a sticker</translation>
+ <source>%1 sent a notification</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You: %1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a notification</source>
- <translation>%1 a notification</translation>
+ <source>%1: %2</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location line="+7"/>
- <source>%1 an encrypted message</source>
- <translation>%1 an encrypted message</translation>
+ <source>You sent an encrypted message</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>message-description:</name>
<message>
- <location line="-26"/>
- <source>sent</source>
- <comment>For when someone else is the sender</comment>
- <translation>sent</translation>
+ <location line="+3"/>
+ <source>%1 sent an encrypted message</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>message-description: </name>
+ <name>popups::UserMentions</name>
<message>
- <location line="-2"/>
- <source>sent</source>
- <comment>For when you are the sender</comment>
- <translation>sent</translation>
+ <location filename="../../src/popups/UserMentions.cpp" line="+61"/>
+ <source>This Room</source>
+ <translation type="unfinished">This Room</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>All Rooms</source>
+ <translation type="unfinished">All Rooms</translation>
</message>
</context>
<context>
<name>utils</name>
<message>
- <location filename="../../src/Utils.cpp" line="+46"/>
- <location filename="../../src/Utils.h" line="+55"/>
- <source>You</source>
- <translation>You</translation>
- </message>
- <message>
- <location line="+219"/>
+ <location filename="../../src/Utils.cpp" line="+282"/>
<source>sent a file.</source>
<translation>sent a file.</translation>
</message>
@@ -1148,7 +1212,7 @@ Media size: %2
<translation>sent a video.</translation>
</message>
<message>
- <location filename="../../src/Utils.h" line="-23"/>
+ <location filename="../../src/Utils.h" line="+4"/>
<source>Unknown Message Type</source>
<translation>Unknown Message Type</translation>
</message>
diff --git a/resources/langs/nheko_fi.ts b/resources/langs/nheko_fi.ts
index 89eb33b7..4bb20e30 100644
--- a/resources/langs/nheko_fi.ts
+++ b/resources/langs/nheko_fi.ts
@@ -2,37 +2,14 @@
<!DOCTYPE TS>
<TS version="2.1" language="fi">
<context>
- <name>AudioItem</name>
- <message>
- <location filename="../../src/timeline/widgets/AudioItem.cpp" line="+118"/>
- <source>Save File</source>
- <translation>Tallenna tiedosto</translation>
- </message>
-</context>
-<context>
<name>ChatPage</name>
<message>
- <location filename="../../src/ChatPage.cpp" line="+330"/>
- <source>Failed to upload image. Please try again.</source>
- <translation>Kuvan lähettäminen epäonnistui. Ole hyvä ja yritä uudelleen.</translation>
- </message>
- <message>
- <location line="+45"/>
- <source>Failed to upload file. Please try again.</source>
- <translation>Tiedoston lähettäminen epäonnistui. Ole hyvä ja yritä uudelleen.</translation>
- </message>
- <message>
- <location line="+43"/>
- <source>Failed to upload audio. Please try again.</source>
- <translation>Äänitiedoston lähettäminen epäonnistui. Ole hyvä ja yritä uudelleen.</translation>
- </message>
- <message>
- <location line="+42"/>
- <source>Failed to upload video. Please try again.</source>
- <translation>Videon lähettäminen epäonnistui. Ole hyvä ja yritä uudelleen.</translation>
+ <location filename="../../src/ChatPage.cpp" line="+346"/>
+ <source>Failed to upload media. Please try again.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+380"/>
+ <location line="+389"/>
<source>Failed to restore OLM account. Please login again.</source>
<translation>OLM-tilin palauttaminen epäonnistui. Ole hyvä ja kirjaudu sisään uudelleen.</translation>
</message>
@@ -42,18 +19,18 @@
<translation>Tallennettujen tietojen palauttaminen epäonnistui. Ole hyvä ja kirjaudu sisään uudelleen.</translation>
</message>
<message>
- <location line="+198"/>
+ <location line="+181"/>
<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>
</message>
<message>
<location line="+51"/>
- <location line="+153"/>
+ <location line="+155"/>
<source>Please try to login again: %1</source>
<translation>Ole hyvä ja yritä kirjautua sisään uudelleen: %1</translation>
</message>
<message>
- <location line="-45"/>
+ <location line="-47"/>
<source>Room creation failed: %1</source>
<translation>Huoneen luominen epäonnistui: %1</translation>
</message>
@@ -116,19 +93,11 @@
</message>
</context>
<context>
- <name>FileItem</name>
+ <name>EncryptionIndicator</name>
<message>
- <location filename="../../src/timeline/widgets/FileItem.cpp" line="+107"/>
- <source>Save File</source>
- <translation>Tallenna tiedosto</translation>
- </message>
-</context>
-<context>
- <name>ImageItem</name>
- <message>
- <location filename="../../src/timeline/widgets/ImageItem.cpp" line="+241"/>
- <source>Save image</source>
- <translation>Tallenna kuva</translation>
+ <location filename="../qml/EncryptionIndicator.qml" line="+11"/>
+ <source>Encrypted</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -200,7 +169,7 @@
<context>
<name>MemberList</name>
<message>
- <location filename="../../src/dialogs/MemberList.cpp" line="+96"/>
+ <location filename="../../src/dialogs/MemberList.cpp" line="+89"/>
<source>Room members</source>
<translation>Huoneen jäsenet</translation>
</message>
@@ -211,6 +180,27 @@
</message>
</context>
<context>
+ <name>MessageDelegate</name>
+ <message>
+ <location filename="../qml/delegates/MessageDelegate.qml" line="+43"/>
+ <source>redacted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Encryption enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Placeholder</name>
+ <message>
+ <location filename="../qml/delegates/Placeholder.qml" line="+4"/>
+ <source>unimplemented event: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>QuickSwitcher</name>
<message>
<location filename="../../src/QuickSwitcher.cpp" line="+71"/>
@@ -277,7 +267,7 @@
<context>
<name>RoomInfo</name>
<message>
- <location filename="../../src/Cache.cpp" line="+2205"/>
+ <location filename="../../src/Cache.cpp" line="+2307"/>
<source>no version stored</source>
<translation>ei tallennettua versiota</translation>
</message>
@@ -285,12 +275,12 @@
<context>
<name>RoomInfoListItem</name>
<message>
- <location filename="../../src/RoomInfoListItem.cpp" line="+93"/>
+ <location filename="../../src/RoomInfoListItem.cpp" line="+95"/>
<source>Leave room</source>
<translation>Poistu huoneesta</translation>
</message>
<message>
- <location line="+181"/>
+ <location line="+161"/>
<source>Accept</source>
<translation>Hyväksy</translation>
</message>
@@ -331,36 +321,36 @@
<context>
<name>StatusIndicator</name>
<message>
- <location filename="../../src/timeline/TimelineItem.cpp" line="+107"/>
- <source>Encrypted</source>
- <translation>Salattu</translation>
+ <location filename="../qml/StatusIndicator.qml" line="+13"/>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Delivered</source>
- <translation>Toimitettu</translation>
+ <location line="+1"/>
+ <source>Sent</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Seen</source>
- <translation>Luettu</translation>
+ <location line="+1"/>
+ <source>Received</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Sent</source>
- <translation>Lähetetty</translation>
+ <location line="+1"/>
+ <source>Read</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TextInputWidget</name>
<message>
- <location filename="../../src/TextInputWidget.cpp" line="+507"/>
+ <location filename="../../src/TextInputWidget.cpp" line="+502"/>
<source>Send a file</source>
<translation>Lähetä tiedosto</translation>
</message>
<message>
<location line="+13"/>
- <location filename="../../src/TextInputWidget.h" line="+164"/>
+ <location filename="../../src/TextInputWidget.h" line="+161"/>
<source>Write a message...</source>
<translation>Kirjoita viesti…</translation>
</message>
@@ -375,7 +365,7 @@
<translation>Emoji</translation>
</message>
<message>
- <location line="+75"/>
+ <location line="+72"/>
<source>Select a file</source>
<translation>Valitse tiedosto</translation>
</message>
@@ -391,65 +381,113 @@
</message>
</context>
<context>
- <name>TimelineItem</name>
- <message>
- <location filename="../../src/timeline/TimelineItem.cpp" line="+85"/>
- <source>Message redaction failed: %1</source>
- <translation>Viestin poisto epäonnistui: %1</translation>
- </message>
- <message>
- <location line="+39"/>
- <source>Reply</source>
- <translation>Vastaa</translation>
- </message>
- <message>
- <location line="+11"/>
- <source>Options</source>
- <translation>Asetukset</translation>
- </message>
-</context>
-<context>
- <name>TimelineView</name>
+ <name>TimelineModel</name>
<message>
- <location filename="../../src/timeline/TimelineView.cpp" line="+245"/>
- <source>Encryption is enabled</source>
- <translation>Salaus on käytössä</translation>
- </message>
- <message>
- <location line="+65"/>
+ <location filename="../../src/timeline/TimelineModel.cpp" line="+835"/>
<source>-- Encrypted Event (No keys found for decryption) --</source>
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted</comment>
- <translation>-- Salattu viesti (salauksen purkuavaimia ei löydetty) --</translation>
+ <translation type="unfinished">-- Salattu viesti (salauksen purkuavaimia ei löydetty) --</translation>
</message>
<message>
<location line="+15"/>
<source>-- Decryption Error (failed to communicate with DB) --</source>
<comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment>
- <translation>-- Virhe purkaessa salausta (tietokannan kanssa kommunikointi epäonnistui) --</translation>
+ <translation type="unfinished">-- Virhe purkaessa salausta (tietokannan kanssa kommunikointi epäonnistui) --</translation>
</message>
<message>
<location line="+19"/>
<source>-- Decryption Error (failed to retrieve megolm keys from db) --</source>
<comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment>
- <translation>-- Virhe purkaessa salausta (megolm-avaimien hakeminen tietokannasta epäonnistui) --</translation>
+ <translation type="unfinished">-- Virhe purkaessa salausta (megolm-avaimien hakeminen tietokannasta epäonnistui) --</translation>
</message>
<message>
<location line="+12"/>
<source>-- Decryption Error (%1) --</source>
<comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1</comment>
- <translation>-- Virhe purkaessa salausta (%1) --</translation>
+ <translation type="unfinished">-- Virhe purkaessa salausta (%1) --</translation>
</message>
<message>
- <location line="+27"/>
+ <location line="+25"/>
<source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet</comment>
- <translation>-- Salattu viesti (tuntematon viestityyppi) --</translation>
+ <translation type="unfinished">-- Salattu viesti (tuntematon viestityyppi) --</translation>
+ </message>
+ <message>
+ <location line="+54"/>
+ <source>Message redaction failed: %1</source>
+ <translation type="unfinished">Viestin poisto epäonnistui: %1</translation>
+ </message>
+ <message>
+ <location line="+453"/>
+ <source>Save image</source>
+ <translation type="unfinished">Tallenna kuva</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TimelineRow</name>
+ <message>
+ <location filename="../qml/TimelineRow.qml" line="+57"/>
+ <source>Reply</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>Read receipts</source>
+ <translation type="unfinished">Lukukuittaukset</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Mark as read</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>View raw message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Redact message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Save as</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TimelineView</name>
+ <message>
+ <location filename="../qml/TimelineView.qml" line="+24"/>
+ <source>No room open</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TopRoomBar</name>
<message>
- <location filename="../../src/TopRoomBar.cpp" line="+79"/>
+ <location filename="../../src/TopRoomBar.cpp" line="+78"/>
<source>Room options</source>
<translation>Huonevaihtoehdot</translation>
</message>
@@ -515,7 +553,7 @@
<context>
<name>UserSettingsPage</name>
<message>
- <location filename="../../src/UserSettingsPage.cpp" line="+166"/>
+ <location filename="../../src/UserSettingsPage.cpp" line="+171"/>
<source>Minimize to tray</source>
<translation>Pienennä ilmoitusalueelle</translation>
</message>
@@ -531,6 +569,11 @@
</message>
<message>
<location line="+9"/>
+ <source>Circular Avatars</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+9"/>
<source>Typing notifications</source>
<translation>Kirjoitusilmoitukset</translation>
</message>
@@ -605,7 +648,7 @@
<translation>YLEISET ASETUKSET</translation>
</message>
<message>
- <location line="+156"/>
+ <location line="+161"/>
<source>Open Sessions File</source>
<translation>Avaa Istuntoavaintiedosto</translation>
</message>
@@ -825,7 +868,7 @@ Median koko: %2
<context>
<name>dialogs::ReadReceipts</name>
<message>
- <location filename="../../src/dialogs/ReadReceipts.cpp" line="+121"/>
+ <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/>
<source>Read receipts</source>
<translation>Lukukuittaukset</translation>
</message>
@@ -953,7 +996,7 @@ Median koko: %2
<translation>Salauksen aktivointi epäonnistui: %1</translation>
</message>
<message>
- <location line="+149"/>
+ <location line="+148"/>
<source>Select an avatar</source>
<translation>Valitse profiilikuva</translation>
</message>
@@ -980,19 +1023,6 @@ Median koko: %2
</message>
</context>
<context>
- <name>dialogs::UserMentions</name>
- <message>
- <location filename="../../src/dialogs/UserMentions.cpp" line="+53"/>
- <source>This Room</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+1"/>
- <source>All Rooms</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>dialogs::UserProfile</name>
<message>
<location filename="../../src/dialogs/UserProfile.cpp" line="+63"/>
@@ -1015,7 +1045,7 @@ Median koko: %2
<translation>Aloita keskustelu</translation>
</message>
<message>
- <location line="+57"/>
+ <location line="+56"/>
<source>Devices</source>
<translation>Laitteet</translation>
</message>
@@ -1066,69 +1096,103 @@ Median koko: %2
<context>
<name>message-description sent:</name>
<message>
- <location filename="../../src/Utils.h" line="+104"/>
- <source>%1 an audio clip</source>
+ <location filename="../../src/Utils.h" line="+95"/>
+ <source>You sent an audio clip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>%1 sent an audio clip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent an image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>%1 sent an image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 an image</source>
+ <source>%1 sent a file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a video</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a file</source>
+ <source>%1 sent a video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a sticker</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a video clip</source>
+ <source>%1 sent a sticker</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a notification</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a sticker</source>
+ <source>%1 sent a notification</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a notification</source>
+ <source>%1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+7"/>
- <source>%1 an encrypted message</source>
+ <source>You sent an encrypted message</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>message-description:</name>
<message>
- <location line="-26"/>
- <source>sent</source>
- <comment>For when someone else is the sender</comment>
+ <location line="+3"/>
+ <source>%1 sent an encrypted message</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>message-description: </name>
+ <name>popups::UserMentions</name>
<message>
- <location line="-2"/>
- <source>sent</source>
- <comment>For when you are the sender</comment>
+ <location filename="../../src/popups/UserMentions.cpp" line="+61"/>
+ <source>This Room</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>All Rooms</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>utils</name>
<message>
- <location filename="../../src/Utils.cpp" line="+46"/>
- <location filename="../../src/Utils.h" line="+55"/>
- <source>You</source>
- <translation>Sinä</translation>
- </message>
- <message>
- <location line="+219"/>
+ <location filename="../../src/Utils.cpp" line="+282"/>
<source>sent a file.</source>
<translation type="unfinished"></translation>
</message>
@@ -1148,7 +1212,7 @@ Median koko: %2
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/Utils.h" line="-23"/>
+ <location filename="../../src/Utils.h" line="+4"/>
<source>Unknown Message Type</source>
<translation type="unfinished"></translation>
</message>
diff --git a/resources/langs/nheko_fr.ts b/resources/langs/nheko_fr.ts
index 42f82b0f..8ef22268 100644
--- a/resources/langs/nheko_fr.ts
+++ b/resources/langs/nheko_fr.ts
@@ -2,37 +2,14 @@
<!DOCTYPE TS>
<TS version="2.1" language="fr">
<context>
- <name>AudioItem</name>
- <message>
- <location filename="../../src/timeline/widgets/AudioItem.cpp" line="+118"/>
- <source>Save File</source>
- <translation>Enregistrer le fichier</translation>
- </message>
-</context>
-<context>
<name>ChatPage</name>
<message>
- <location filename="../../src/ChatPage.cpp" line="+330"/>
- <source>Failed to upload image. Please try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+45"/>
- <source>Failed to upload file. Please try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+43"/>
- <source>Failed to upload audio. Please try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+42"/>
- <source>Failed to upload video. Please try again.</source>
+ <location filename="../../src/ChatPage.cpp" line="+346"/>
+ <source>Failed to upload media. Please try again.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+380"/>
+ <location line="+389"/>
<source>Failed to restore OLM account. Please login again.</source>
<translation type="unfinished"></translation>
</message>
@@ -42,18 +19,18 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+198"/>
+ <location line="+181"/>
<source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+51"/>
- <location line="+153"/>
+ <location line="+155"/>
<source>Please try to login again: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-45"/>
+ <location line="-47"/>
<source>Room creation failed: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -116,19 +93,11 @@
</message>
</context>
<context>
- <name>FileItem</name>
+ <name>EncryptionIndicator</name>
<message>
- <location filename="../../src/timeline/widgets/FileItem.cpp" line="+107"/>
- <source>Save File</source>
- <translation>Enregistrer le fichier</translation>
- </message>
-</context>
-<context>
- <name>ImageItem</name>
- <message>
- <location filename="../../src/timeline/widgets/ImageItem.cpp" line="+241"/>
- <source>Save image</source>
- <translation>Enregistrer l'image</translation>
+ <location filename="../qml/EncryptionIndicator.qml" line="+11"/>
+ <source>Encrypted</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -200,7 +169,7 @@
<context>
<name>MemberList</name>
<message>
- <location filename="../../src/dialogs/MemberList.cpp" line="+96"/>
+ <location filename="../../src/dialogs/MemberList.cpp" line="+89"/>
<source>Room members</source>
<translation>Membres du salon</translation>
</message>
@@ -211,6 +180,27 @@
</message>
</context>
<context>
+ <name>MessageDelegate</name>
+ <message>
+ <location filename="../qml/delegates/MessageDelegate.qml" line="+43"/>
+ <source>redacted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Encryption enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Placeholder</name>
+ <message>
+ <location filename="../qml/delegates/Placeholder.qml" line="+4"/>
+ <source>unimplemented event: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>QuickSwitcher</name>
<message>
<location filename="../../src/QuickSwitcher.cpp" line="+71"/>
@@ -278,7 +268,7 @@
<context>
<name>RoomInfo</name>
<message>
- <location filename="../../src/Cache.cpp" line="+2205"/>
+ <location filename="../../src/Cache.cpp" line="+2307"/>
<source>no version stored</source>
<translation type="unfinished"></translation>
</message>
@@ -286,12 +276,12 @@
<context>
<name>RoomInfoListItem</name>
<message>
- <location filename="../../src/RoomInfoListItem.cpp" line="+93"/>
+ <location filename="../../src/RoomInfoListItem.cpp" line="+95"/>
<source>Leave room</source>
<translation>Quitter le salon</translation>
</message>
<message>
- <location line="+181"/>
+ <location line="+161"/>
<source>Accept</source>
<translation>Accepter</translation>
</message>
@@ -332,36 +322,36 @@
<context>
<name>StatusIndicator</name>
<message>
- <location filename="../../src/timeline/TimelineItem.cpp" line="+107"/>
- <source>Encrypted</source>
+ <location filename="../qml/StatusIndicator.qml" line="+13"/>
+ <source>Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Delivered</source>
+ <location line="+1"/>
+ <source>Sent</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Seen</source>
+ <location line="+1"/>
+ <source>Received</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Sent</source>
+ <location line="+1"/>
+ <source>Read</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TextInputWidget</name>
<message>
- <location filename="../../src/TextInputWidget.cpp" line="+507"/>
+ <location filename="../../src/TextInputWidget.cpp" line="+502"/>
<source>Send a file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+13"/>
- <location filename="../../src/TextInputWidget.h" line="+164"/>
+ <location filename="../../src/TextInputWidget.h" line="+161"/>
<source>Write a message...</source>
<translation>Écrivez un message...</translation>
</message>
@@ -376,7 +366,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+75"/>
+ <location line="+72"/>
<source>Select a file</source>
<translation>Sélectionnez un fichier</translation>
</message>
@@ -392,65 +382,113 @@
</message>
</context>
<context>
- <name>TimelineItem</name>
+ <name>TimelineModel</name>
+ <message>
+ <location filename="../../src/timeline/TimelineModel.cpp" line="+835"/>
+ <source>-- Encrypted Event (No keys found for decryption) --</source>
+ <comment>Placeholder, when the message was not decrypted yet or can't be decrypted</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+15"/>
+ <source>-- Decryption Error (failed to communicate with DB) --</source>
+ <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+19"/>
+ <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source>
+ <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>-- Decryption Error (%1) --</source>
+ <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1</comment>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../src/timeline/TimelineItem.cpp" line="+85"/>
+ <location line="+25"/>
+ <source>-- Encrypted Event (Unknown event type) --</source>
+ <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+54"/>
<source>Message redaction failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+39"/>
- <source>Reply</source>
+ <location line="+453"/>
+ <source>Save image</source>
+ <translation type="unfinished">Enregistrer l'image</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save video</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+11"/>
- <source>Options</source>
+ <location line="+2"/>
+ <source>Save audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save file</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>TimelineView</name>
+ <name>TimelineRow</name>
<message>
- <location filename="../../src/timeline/TimelineView.cpp" line="+245"/>
- <source>Encryption is enabled</source>
+ <location filename="../qml/TimelineRow.qml" line="+57"/>
+ <source>Reply</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+65"/>
- <source>-- Encrypted Event (No keys found for decryption) --</source>
- <comment>Placeholder, when the message was not decrypted yet or can't be decrypted</comment>
+ <location line="+14"/>
+ <source>Options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+15"/>
- <source>-- Decryption Error (failed to communicate with DB) --</source>
- <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment>
+ <location line="+12"/>
+ <source>Read receipts</source>
+ <translation type="unfinished">Accusés de lecture</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Mark as read</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+19"/>
- <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source>
- <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment>
+ <location line="+3"/>
+ <source>View raw message</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+12"/>
- <source>-- Decryption Error (%1) --</source>
- <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1</comment>
+ <location line="+4"/>
+ <source>Redact message</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+27"/>
- <source>-- Encrypted Event (Unknown event type) --</source>
- <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet</comment>
+ <location line="+5"/>
+ <source>Save as</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TimelineView</name>
+ <message>
+ <location filename="../qml/TimelineView.qml" line="+24"/>
+ <source>No room open</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TopRoomBar</name>
<message>
- <location filename="../../src/TopRoomBar.cpp" line="+79"/>
+ <location filename="../../src/TopRoomBar.cpp" line="+78"/>
<source>Room options</source>
<translation type="unfinished"></translation>
</message>
@@ -516,7 +554,7 @@
<context>
<name>UserSettingsPage</name>
<message>
- <location filename="../../src/UserSettingsPage.cpp" line="+166"/>
+ <location filename="../../src/UserSettingsPage.cpp" line="+171"/>
<source>Minimize to tray</source>
<translation>Réduire à la barre des tâches</translation>
</message>
@@ -532,6 +570,11 @@
</message>
<message>
<location line="+9"/>
+ <source>Circular Avatars</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+9"/>
<source>Typing notifications</source>
<translation>Notifications d'écriture</translation>
</message>
@@ -606,7 +649,7 @@
<translation>GÉNÉRAL</translation>
</message>
<message>
- <location line="+156"/>
+ <location line="+161"/>
<source>Open Sessions File</source>
<translation type="unfinished"></translation>
</message>
@@ -826,7 +869,7 @@ Taille du média : %2
<context>
<name>dialogs::ReadReceipts</name>
<message>
- <location filename="../../src/dialogs/ReadReceipts.cpp" line="+121"/>
+ <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/>
<source>Read receipts</source>
<translation>Accusés de lecture</translation>
</message>
@@ -952,7 +995,7 @@ Taille du média : %2
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+149"/>
+ <location line="+148"/>
<source>Select an avatar</source>
<translation type="unfinished"></translation>
</message>
@@ -979,19 +1022,6 @@ Taille du média : %2
</message>
</context>
<context>
- <name>dialogs::UserMentions</name>
- <message>
- <location filename="../../src/dialogs/UserMentions.cpp" line="+53"/>
- <source>This Room</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+1"/>
- <source>All Rooms</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>dialogs::UserProfile</name>
<message>
<location filename="../../src/dialogs/UserProfile.cpp" line="+63"/>
@@ -1014,7 +1044,7 @@ Taille du média : %2
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+57"/>
+ <location line="+56"/>
<source>Devices</source>
<translation type="unfinished"></translation>
</message>
@@ -1065,69 +1095,103 @@ Taille du média : %2
<context>
<name>message-description sent:</name>
<message>
- <location filename="../../src/Utils.h" line="+104"/>
- <source>%1 an audio clip</source>
+ <location filename="../../src/Utils.h" line="+95"/>
+ <source>You sent an audio clip</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 an image</source>
+ <source>%1 sent an audio clip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent an image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>%1 sent an image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a file</source>
+ <source>%1 sent a file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>%1 sent a video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a sticker</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a video clip</source>
+ <source>%1 sent a sticker</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a notification</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a sticker</source>
+ <source>%1 sent a notification</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a notification</source>
+ <source>%1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+7"/>
- <source>%1 an encrypted message</source>
+ <source>You sent an encrypted message</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>message-description:</name>
<message>
- <location line="-26"/>
- <source>sent</source>
- <comment>For when someone else is the sender</comment>
+ <location line="+3"/>
+ <source>%1 sent an encrypted message</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>message-description: </name>
+ <name>popups::UserMentions</name>
<message>
- <location line="-2"/>
- <source>sent</source>
- <comment>For when you are the sender</comment>
+ <location filename="../../src/popups/UserMentions.cpp" line="+61"/>
+ <source>This Room</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>utils</name>
<message>
- <location filename="../../src/Utils.cpp" line="+46"/>
- <location filename="../../src/Utils.h" line="+55"/>
- <source>You</source>
+ <location line="+1"/>
+ <source>All Rooms</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>utils</name>
<message>
- <location line="+219"/>
+ <location filename="../../src/Utils.cpp" line="+282"/>
<source>sent a file.</source>
<translation type="unfinished"></translation>
</message>
@@ -1147,7 +1211,7 @@ Taille du média : %2
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/Utils.h" line="-23"/>
+ <location filename="../../src/Utils.h" line="+4"/>
<source>Unknown Message Type</source>
<translation type="unfinished"></translation>
</message>
diff --git a/resources/langs/nheko_nl.ts b/resources/langs/nheko_nl.ts
index 53840f82..aaeae41c 100644
--- a/resources/langs/nheko_nl.ts
+++ b/resources/langs/nheko_nl.ts
@@ -2,37 +2,14 @@
<!DOCTYPE TS>
<TS version="2.1" language="nl_NL">
<context>
- <name>AudioItem</name>
- <message>
- <location filename="../../src/timeline/widgets/AudioItem.cpp" line="+118"/>
- <source>Save File</source>
- <translation>Bestand opslaan</translation>
- </message>
-</context>
-<context>
<name>ChatPage</name>
<message>
- <location filename="../../src/ChatPage.cpp" line="+330"/>
- <source>Failed to upload image. Please try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+45"/>
- <source>Failed to upload file. Please try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+43"/>
- <source>Failed to upload audio. Please try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+42"/>
- <source>Failed to upload video. Please try again.</source>
+ <location filename="../../src/ChatPage.cpp" line="+346"/>
+ <source>Failed to upload media. Please try again.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+380"/>
+ <location line="+389"/>
<source>Failed to restore OLM account. Please login again.</source>
<translation type="unfinished"></translation>
</message>
@@ -42,18 +19,18 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+198"/>
+ <location line="+181"/>
<source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+51"/>
- <location line="+153"/>
+ <location line="+155"/>
<source>Please try to login again: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="-45"/>
+ <location line="-47"/>
<source>Room creation failed: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -116,19 +93,11 @@
</message>
</context>
<context>
- <name>FileItem</name>
+ <name>EncryptionIndicator</name>
<message>
- <location filename="../../src/timeline/widgets/FileItem.cpp" line="+107"/>
- <source>Save File</source>
- <translation>Bestand opslaan</translation>
- </message>
-</context>
-<context>
- <name>ImageItem</name>
- <message>
- <location filename="../../src/timeline/widgets/ImageItem.cpp" line="+241"/>
- <source>Save image</source>
- <translation>Afbeelding opslaan</translation>
+ <location filename="../qml/EncryptionIndicator.qml" line="+11"/>
+ <source>Encrypted</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -200,7 +169,7 @@
<context>
<name>MemberList</name>
<message>
- <location filename="../../src/dialogs/MemberList.cpp" line="+96"/>
+ <location filename="../../src/dialogs/MemberList.cpp" line="+89"/>
<source>Room members</source>
<translation>Kamerleden</translation>
</message>
@@ -211,6 +180,27 @@
</message>
</context>
<context>
+ <name>MessageDelegate</name>
+ <message>
+ <location filename="../qml/delegates/MessageDelegate.qml" line="+43"/>
+ <source>redacted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Encryption enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Placeholder</name>
+ <message>
+ <location filename="../qml/delegates/Placeholder.qml" line="+4"/>
+ <source>unimplemented event: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>QuickSwitcher</name>
<message>
<location filename="../../src/QuickSwitcher.cpp" line="+71"/>
@@ -277,7 +267,7 @@
<context>
<name>RoomInfo</name>
<message>
- <location filename="../../src/Cache.cpp" line="+2205"/>
+ <location filename="../../src/Cache.cpp" line="+2307"/>
<source>no version stored</source>
<translation type="unfinished"></translation>
</message>
@@ -285,12 +275,12 @@
<context>
<name>RoomInfoListItem</name>
<message>
- <location filename="../../src/RoomInfoListItem.cpp" line="+93"/>
+ <location filename="../../src/RoomInfoListItem.cpp" line="+95"/>
<source>Leave room</source>
<translation>Kamer verlaten</translation>
</message>
<message>
- <location line="+181"/>
+ <location line="+161"/>
<source>Accept</source>
<translation>Accepteren</translation>
</message>
@@ -331,36 +321,36 @@
<context>
<name>StatusIndicator</name>
<message>
- <location filename="../../src/timeline/TimelineItem.cpp" line="+107"/>
- <source>Encrypted</source>
+ <location filename="../qml/StatusIndicator.qml" line="+13"/>
+ <source>Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Delivered</source>
+ <location line="+1"/>
+ <source>Sent</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Seen</source>
+ <location line="+1"/>
+ <source>Received</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Sent</source>
+ <location line="+1"/>
+ <source>Read</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TextInputWidget</name>
<message>
- <location filename="../../src/TextInputWidget.cpp" line="+507"/>
+ <location filename="../../src/TextInputWidget.cpp" line="+502"/>
<source>Send a file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+13"/>
- <location filename="../../src/TextInputWidget.h" line="+164"/>
+ <location filename="../../src/TextInputWidget.h" line="+161"/>
<source>Write a message...</source>
<translation>Typ een bericht...</translation>
</message>
@@ -375,7 +365,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+75"/>
+ <location line="+72"/>
<source>Select a file</source>
<translation>Kies een bestand</translation>
</message>
@@ -391,65 +381,113 @@
</message>
</context>
<context>
- <name>TimelineItem</name>
+ <name>TimelineModel</name>
+ <message>
+ <location filename="../../src/timeline/TimelineModel.cpp" line="+835"/>
+ <source>-- Encrypted Event (No keys found for decryption) --</source>
+ <comment>Placeholder, when the message was not decrypted yet or can't be decrypted</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+15"/>
+ <source>-- Decryption Error (failed to communicate with DB) --</source>
+ <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+19"/>
+ <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source>
+ <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>-- Decryption Error (%1) --</source>
+ <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1</comment>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../src/timeline/TimelineItem.cpp" line="+85"/>
+ <location line="+25"/>
+ <source>-- Encrypted Event (Unknown event type) --</source>
+ <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+54"/>
<source>Message redaction failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+39"/>
- <source>Reply</source>
+ <location line="+453"/>
+ <source>Save image</source>
+ <translation type="unfinished">Afbeelding opslaan</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save video</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+11"/>
- <source>Options</source>
+ <location line="+2"/>
+ <source>Save audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save file</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>TimelineView</name>
+ <name>TimelineRow</name>
<message>
- <location filename="../../src/timeline/TimelineView.cpp" line="+245"/>
- <source>Encryption is enabled</source>
+ <location filename="../qml/TimelineRow.qml" line="+57"/>
+ <source>Reply</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+65"/>
- <source>-- Encrypted Event (No keys found for decryption) --</source>
- <comment>Placeholder, when the message was not decrypted yet or can't be decrypted</comment>
+ <location line="+14"/>
+ <source>Options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+15"/>
- <source>-- Decryption Error (failed to communicate with DB) --</source>
- <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment>
+ <location line="+12"/>
+ <source>Read receipts</source>
+ <translation type="unfinished">Leesbevestigingen</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Mark as read</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+19"/>
- <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source>
- <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment>
+ <location line="+3"/>
+ <source>View raw message</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+12"/>
- <source>-- Decryption Error (%1) --</source>
- <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1</comment>
+ <location line="+4"/>
+ <source>Redact message</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+27"/>
- <source>-- Encrypted Event (Unknown event type) --</source>
- <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet</comment>
+ <location line="+5"/>
+ <source>Save as</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TimelineView</name>
+ <message>
+ <location filename="../qml/TimelineView.qml" line="+24"/>
+ <source>No room open</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TopRoomBar</name>
<message>
- <location filename="../../src/TopRoomBar.cpp" line="+79"/>
+ <location filename="../../src/TopRoomBar.cpp" line="+78"/>
<source>Room options</source>
<translation type="unfinished"></translation>
</message>
@@ -515,7 +553,7 @@
<context>
<name>UserSettingsPage</name>
<message>
- <location filename="../../src/UserSettingsPage.cpp" line="+166"/>
+ <location filename="../../src/UserSettingsPage.cpp" line="+171"/>
<source>Minimize to tray</source>
<translation>Minimaliseren naar systeemvak</translation>
</message>
@@ -531,6 +569,11 @@
</message>
<message>
<location line="+9"/>
+ <source>Circular Avatars</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+9"/>
<source>Typing notifications</source>
<translation>Meldingen bij typen van berichten</translation>
</message>
@@ -605,7 +648,7 @@
<translation>ALGEMEEN</translation>
</message>
<message>
- <location line="+156"/>
+ <location line="+161"/>
<source>Open Sessions File</source>
<translation type="unfinished"></translation>
</message>
@@ -825,7 +868,7 @@ Mediagrootte: %2
<context>
<name>dialogs::ReadReceipts</name>
<message>
- <location filename="../../src/dialogs/ReadReceipts.cpp" line="+121"/>
+ <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/>
<source>Read receipts</source>
<translation>Leesbevestigingen</translation>
</message>
@@ -951,7 +994,7 @@ Mediagrootte: %2
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+149"/>
+ <location line="+148"/>
<source>Select an avatar</source>
<translation type="unfinished"></translation>
</message>
@@ -978,19 +1021,6 @@ Mediagrootte: %2
</message>
</context>
<context>
- <name>dialogs::UserMentions</name>
- <message>
- <location filename="../../src/dialogs/UserMentions.cpp" line="+53"/>
- <source>This Room</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+1"/>
- <source>All Rooms</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>dialogs::UserProfile</name>
<message>
<location filename="../../src/dialogs/UserProfile.cpp" line="+63"/>
@@ -1013,7 +1043,7 @@ Mediagrootte: %2
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+57"/>
+ <location line="+56"/>
<source>Devices</source>
<translation type="unfinished"></translation>
</message>
@@ -1064,69 +1094,103 @@ Mediagrootte: %2
<context>
<name>message-description sent:</name>
<message>
- <location filename="../../src/Utils.h" line="+104"/>
- <source>%1 an audio clip</source>
+ <location filename="../../src/Utils.h" line="+95"/>
+ <source>You sent an audio clip</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 an image</source>
+ <source>%1 sent an audio clip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent an image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>%1 sent an image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a file</source>
+ <source>%1 sent a file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>%1 sent a video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a sticker</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a video clip</source>
+ <source>%1 sent a sticker</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a notification</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a sticker</source>
+ <source>%1 sent a notification</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a notification</source>
+ <source>%1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+7"/>
- <source>%1 an encrypted message</source>
+ <source>You sent an encrypted message</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>message-description:</name>
<message>
- <location line="-26"/>
- <source>sent</source>
- <comment>For when someone else is the sender</comment>
+ <location line="+3"/>
+ <source>%1 sent an encrypted message</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>message-description: </name>
+ <name>popups::UserMentions</name>
<message>
- <location line="-2"/>
- <source>sent</source>
- <comment>For when you are the sender</comment>
+ <location filename="../../src/popups/UserMentions.cpp" line="+61"/>
+ <source>This Room</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>utils</name>
<message>
- <location filename="../../src/Utils.cpp" line="+46"/>
- <location filename="../../src/Utils.h" line="+55"/>
- <source>You</source>
+ <location line="+1"/>
+ <source>All Rooms</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>utils</name>
<message>
- <location line="+219"/>
+ <location filename="../../src/Utils.cpp" line="+282"/>
<source>sent a file.</source>
<translation type="unfinished"></translation>
</message>
@@ -1146,7 +1210,7 @@ Mediagrootte: %2
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/Utils.h" line="-23"/>
+ <location filename="../../src/Utils.h" line="+4"/>
<source>Unknown Message Type</source>
<translation type="unfinished"></translation>
</message>
diff --git a/resources/langs/nheko_pl.ts b/resources/langs/nheko_pl.ts
index f4f98dbb..b7c3878d 100644
--- a/resources/langs/nheko_pl.ts
+++ b/resources/langs/nheko_pl.ts
@@ -2,37 +2,14 @@
<!DOCTYPE TS>
<TS version="2.1" language="pl">
<context>
- <name>AudioItem</name>
- <message>
- <location filename="../../src/timeline/widgets/AudioItem.cpp" line="+118"/>
- <source>Save File</source>
- <translation>Zapisz plik</translation>
- </message>
-</context>
-<context>
<name>ChatPage</name>
<message>
- <location filename="../../src/ChatPage.cpp" line="+330"/>
- <source>Failed to upload image. Please try again.</source>
- <translation>Nie udało się wysłać obrazu. Spróbuj ponownie.</translation>
- </message>
- <message>
- <location line="+45"/>
- <source>Failed to upload file. Please try again.</source>
- <translation>Nie udało się wysłać pliku. Spróbuj ponownie.</translation>
- </message>
- <message>
- <location line="+43"/>
- <source>Failed to upload audio. Please try again.</source>
- <translation>Nie udało się wysłać pliku dźwiękowego. Spróbuj ponownie.</translation>
- </message>
- <message>
- <location line="+42"/>
- <source>Failed to upload video. Please try again.</source>
- <translation>Nie udało się wysłać filmu. Spróbuj ponownie.</translation>
+ <location filename="../../src/ChatPage.cpp" line="+346"/>
+ <source>Failed to upload media. Please try again.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+380"/>
+ <location line="+389"/>
<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>
</message>
@@ -42,18 +19,18 @@
<translation>Nie udało się przywrócić zapisanych danych. Spróbuj zalogować się ponownie.</translation>
</message>
<message>
- <location line="+198"/>
+ <location line="+181"/>
<source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+51"/>
- <location line="+153"/>
+ <location line="+155"/>
<source>Please try to login again: %1</source>
<translation>Spróbuj zalogować się ponownie: %1</translation>
</message>
<message>
- <location line="-45"/>
+ <location line="-47"/>
<source>Room creation failed: %1</source>
<translation>Tworzenie pokoju nie powiodło się: %1</translation>
</message>
@@ -116,19 +93,11 @@
</message>
</context>
<context>
- <name>FileItem</name>
+ <name>EncryptionIndicator</name>
<message>
- <location filename="../../src/timeline/widgets/FileItem.cpp" line="+107"/>
- <source>Save File</source>
- <translation>Zapisz plik</translation>
- </message>
-</context>
-<context>
- <name>ImageItem</name>
- <message>
- <location filename="../../src/timeline/widgets/ImageItem.cpp" line="+241"/>
- <source>Save image</source>
- <translation>Zapisz obraz</translation>
+ <location filename="../qml/EncryptionIndicator.qml" line="+11"/>
+ <source>Encrypted</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -200,7 +169,7 @@
<context>
<name>MemberList</name>
<message>
- <location filename="../../src/dialogs/MemberList.cpp" line="+96"/>
+ <location filename="../../src/dialogs/MemberList.cpp" line="+89"/>
<source>Room members</source>
<translation>Członkowie pokoju</translation>
</message>
@@ -211,6 +180,27 @@
</message>
</context>
<context>
+ <name>MessageDelegate</name>
+ <message>
+ <location filename="../qml/delegates/MessageDelegate.qml" line="+43"/>
+ <source>redacted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Encryption enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Placeholder</name>
+ <message>
+ <location filename="../qml/delegates/Placeholder.qml" line="+4"/>
+ <source>unimplemented event: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>QuickSwitcher</name>
<message>
<location filename="../../src/QuickSwitcher.cpp" line="+71"/>
@@ -277,7 +267,7 @@
<context>
<name>RoomInfo</name>
<message>
- <location filename="../../src/Cache.cpp" line="+2205"/>
+ <location filename="../../src/Cache.cpp" line="+2307"/>
<source>no version stored</source>
<translation type="unfinished"></translation>
</message>
@@ -285,12 +275,12 @@
<context>
<name>RoomInfoListItem</name>
<message>
- <location filename="../../src/RoomInfoListItem.cpp" line="+93"/>
+ <location filename="../../src/RoomInfoListItem.cpp" line="+95"/>
<source>Leave room</source>
<translation>Opuść pokój</translation>
</message>
<message>
- <location line="+181"/>
+ <location line="+161"/>
<source>Accept</source>
<translation>Akceptuj</translation>
</message>
@@ -331,36 +321,36 @@
<context>
<name>StatusIndicator</name>
<message>
- <location filename="../../src/timeline/TimelineItem.cpp" line="+107"/>
- <source>Encrypted</source>
- <translation>Szyfrowana</translation>
+ <location filename="../qml/StatusIndicator.qml" line="+13"/>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Delivered</source>
- <translation>Dostarczono</translation>
+ <location line="+1"/>
+ <source>Sent</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Seen</source>
- <translation>Wyświetlona</translation>
+ <location line="+1"/>
+ <source>Received</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Sent</source>
- <translation>Wysłana</translation>
+ <location line="+1"/>
+ <source>Read</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TextInputWidget</name>
<message>
- <location filename="../../src/TextInputWidget.cpp" line="+507"/>
+ <location filename="../../src/TextInputWidget.cpp" line="+502"/>
<source>Send a file</source>
<translation>Wyślij plik</translation>
</message>
<message>
<location line="+13"/>
- <location filename="../../src/TextInputWidget.h" line="+164"/>
+ <location filename="../../src/TextInputWidget.h" line="+161"/>
<source>Write a message...</source>
<translation>Napisz wiadomość…</translation>
</message>
@@ -375,7 +365,7 @@
<translation>Emoji</translation>
</message>
<message>
- <location line="+75"/>
+ <location line="+72"/>
<source>Select a file</source>
<translation>Wybierz plik</translation>
</message>
@@ -391,32 +381,9 @@
</message>
</context>
<context>
- <name>TimelineItem</name>
- <message>
- <location filename="../../src/timeline/TimelineItem.cpp" line="+85"/>
- <source>Message redaction failed: %1</source>
- <translation>Redagowanie wiadomości nie powiodło się: %1</translation>
- </message>
- <message>
- <location line="+39"/>
- <source>Reply</source>
- <translation type="unfinished"></translation>
- </message>
+ <name>TimelineModel</name>
<message>
- <location line="+11"/>
- <source>Options</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TimelineView</name>
- <message>
- <location filename="../../src/timeline/TimelineView.cpp" line="+245"/>
- <source>Encryption is enabled</source>
- <translation>Szyfrowanie jest włączone</translation>
- </message>
- <message>
- <location line="+65"/>
+ <location filename="../../src/timeline/TimelineModel.cpp" line="+835"/>
<source>-- Encrypted Event (No keys found for decryption) --</source>
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted</comment>
<translation type="unfinished"></translation>
@@ -440,16 +407,87 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+27"/>
+ <location line="+25"/>
<source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet</comment>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location line="+54"/>
+ <source>Message redaction failed: %1</source>
+ <translation type="unfinished">Redagowanie wiadomości nie powiodło się: %1</translation>
+ </message>
+ <message>
+ <location line="+453"/>
+ <source>Save image</source>
+ <translation type="unfinished">Zapisz obraz</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TimelineRow</name>
+ <message>
+ <location filename="../qml/TimelineRow.qml" line="+57"/>
+ <source>Reply</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>Read receipts</source>
+ <translation type="unfinished">Potwierdzenia przeczytania</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Mark as read</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>View raw message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Redact message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Save as</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TimelineView</name>
+ <message>
+ <location filename="../qml/TimelineView.qml" line="+24"/>
+ <source>No room open</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>TopRoomBar</name>
<message>
- <location filename="../../src/TopRoomBar.cpp" line="+79"/>
+ <location filename="../../src/TopRoomBar.cpp" line="+78"/>
<source>Room options</source>
<translation>Ustawienia pokoju</translation>
</message>
@@ -516,7 +554,7 @@
<context>
<name>UserSettingsPage</name>
<message>
- <location filename="../../src/UserSettingsPage.cpp" line="+166"/>
+ <location filename="../../src/UserSettingsPage.cpp" line="+171"/>
<source>Minimize to tray</source>
<translation>Zminimalizuj do paska zadań</translation>
</message>
@@ -532,6 +570,11 @@
</message>
<message>
<location line="+9"/>
+ <source>Circular Avatars</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+9"/>
<source>Typing notifications</source>
<translation>Powiadomienia o pisaniu</translation>
</message>
@@ -606,7 +649,7 @@
<translation>OGÓLNE</translation>
</message>
<message>
- <location line="+156"/>
+ <location line="+161"/>
<source>Open Sessions File</source>
<translation type="unfinished"></translation>
</message>
@@ -826,7 +869,7 @@ Rozmiar multimediów: %2
<context>
<name>dialogs::ReadReceipts</name>
<message>
- <location filename="../../src/dialogs/ReadReceipts.cpp" line="+121"/>
+ <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/>
<source>Read receipts</source>
<translation>Potwierdzenia przeczytania</translation>
</message>
@@ -955,7 +998,7 @@ Rozmiar multimediów: %2
<translation>Nie udało się włączyć szyfrowania: %1</translation>
</message>
<message>
- <location line="+149"/>
+ <location line="+148"/>
<source>Select an avatar</source>
<translation>Wybierz awatar</translation>
</message>
@@ -982,19 +1025,6 @@ Rozmiar multimediów: %2
</message>
</context>
<context>
- <name>dialogs::UserMentions</name>
- <message>
- <location filename="../../src/dialogs/UserMentions.cpp" line="+53"/>
- <source>This Room</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+1"/>
- <source>All Rooms</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>dialogs::UserProfile</name>
<message>
<location filename="../../src/dialogs/UserProfile.cpp" line="+63"/>
@@ -1017,7 +1047,7 @@ Rozmiar multimediów: %2
<translation>Rozpocznij rozmowę</translation>
</message>
<message>
- <location line="+57"/>
+ <location line="+56"/>
<source>Devices</source>
<translation>Urządzenia</translation>
</message>
@@ -1068,69 +1098,103 @@ Rozmiar multimediów: %2
<context>
<name>message-description sent:</name>
<message>
- <location filename="../../src/Utils.h" line="+104"/>
- <source>%1 an audio clip</source>
+ <location filename="../../src/Utils.h" line="+95"/>
+ <source>You sent an audio clip</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 an image</source>
+ <source>%1 sent an audio clip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent an image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>%1 sent an image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a file</source>
+ <source>%1 sent a file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>%1 sent a video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a sticker</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a video clip</source>
+ <source>%1 sent a sticker</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a notification</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a sticker</source>
+ <source>%1 sent a notification</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a notification</source>
+ <source>%1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+7"/>
- <source>%1 an encrypted message</source>
+ <source>You sent an encrypted message</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>message-description:</name>
<message>
- <location line="-26"/>
- <source>sent</source>
- <comment>For when someone else is the sender</comment>
+ <location line="+3"/>
+ <source>%1 sent an encrypted message</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>message-description: </name>
+ <name>popups::UserMentions</name>
<message>
- <location line="-2"/>
- <source>sent</source>
- <comment>For when you are the sender</comment>
+ <location filename="../../src/popups/UserMentions.cpp" line="+61"/>
+ <source>This Room</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>utils</name>
<message>
- <location filename="../../src/Utils.cpp" line="+46"/>
- <location filename="../../src/Utils.h" line="+55"/>
- <source>You</source>
+ <location line="+1"/>
+ <source>All Rooms</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>utils</name>
<message>
- <location line="+219"/>
+ <location filename="../../src/Utils.cpp" line="+282"/>
<source>sent a file.</source>
<translation type="unfinished"></translation>
</message>
@@ -1150,7 +1214,7 @@ Rozmiar multimediów: %2
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/Utils.h" line="-23"/>
+ <location filename="../../src/Utils.h" line="+4"/>
<source>Unknown Message Type</source>
<translation type="unfinished"></translation>
</message>
diff --git a/resources/langs/nheko_ru.ts b/resources/langs/nheko_ru.ts
index 04285c72..3069cdad 100644
--- a/resources/langs/nheko_ru.ts
+++ b/resources/langs/nheko_ru.ts
@@ -2,37 +2,14 @@
<!DOCTYPE TS>
<TS version="2.1" language="ru">
<context>
- <name>AudioItem</name>
- <message>
- <location filename="../../src/timeline/widgets/AudioItem.cpp" line="+118"/>
- <source>Save File</source>
- <translation>Сохранить файл</translation>
- </message>
-</context>
-<context>
<name>ChatPage</name>
<message>
- <location filename="../../src/ChatPage.cpp" line="+330"/>
- <source>Failed to upload image. Please try again.</source>
- <translation>Не удалось загрузить изображение. Пожалуйста, попробуйте еще раз.</translation>
- </message>
- <message>
- <location line="+45"/>
- <source>Failed to upload file. Please try again.</source>
- <translation>Не удалось загрузить файл. Пожалуйста, попробуйте еще раз.</translation>
- </message>
- <message>
- <location line="+43"/>
- <source>Failed to upload audio. Please try again.</source>
- <translation>Не удалось загрузить аудио. Пожалуйста, попробуйте еще раз.</translation>
- </message>
- <message>
- <location line="+42"/>
- <source>Failed to upload video. Please try again.</source>
- <translation>Не удалось загрузить видео. Пожалуйста, попробуйте еще раз.</translation>
+ <location filename="../../src/ChatPage.cpp" line="+346"/>
+ <source>Failed to upload media. Please try again.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+380"/>
+ <location line="+389"/>
<source>Failed to restore OLM account. Please login again.</source>
<translation>Не удалось восстановить учетную запись OLM. Пожалуйста, войдите снова.</translation>
</message>
@@ -42,18 +19,18 @@
<translation>Не удалось восстановить сохраненные данные. Пожалуйста, войдите снова.</translation>
</message>
<message>
- <location line="+198"/>
+ <location line="+181"/>
<source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
<translation>Не удалось настроить ключи шифрования. Ответ сервера:%1 %2. Пожалуйста, попробуйте позже.</translation>
</message>
<message>
<location line="+51"/>
- <location line="+153"/>
+ <location line="+155"/>
<source>Please try to login again: %1</source>
<translation>Повторите попытку входа: %1</translation>
</message>
<message>
- <location line="-45"/>
+ <location line="-47"/>
<source>Room creation failed: %1</source>
<translation>Не удалось создать комнату: %1</translation>
</message>
@@ -116,19 +93,11 @@
</message>
</context>
<context>
- <name>FileItem</name>
+ <name>EncryptionIndicator</name>
<message>
- <location filename="../../src/timeline/widgets/FileItem.cpp" line="+107"/>
- <source>Save File</source>
- <translation>Сохранить файл</translation>
- </message>
-</context>
-<context>
- <name>ImageItem</name>
- <message>
- <location filename="../../src/timeline/widgets/ImageItem.cpp" line="+241"/>
- <source>Save image</source>
- <translation>Сохранить изображение</translation>
+ <location filename="../qml/EncryptionIndicator.qml" line="+11"/>
+ <source>Encrypted</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -200,7 +169,7 @@
<context>
<name>MemberList</name>
<message>
- <location filename="../../src/dialogs/MemberList.cpp" line="+96"/>
+ <location filename="../../src/dialogs/MemberList.cpp" line="+89"/>
<source>Room members</source>
<translation>Участники комнаты</translation>
</message>
@@ -211,6 +180,27 @@
</message>
</context>
<context>
+ <name>MessageDelegate</name>
+ <message>
+ <location filename="../qml/delegates/MessageDelegate.qml" line="+43"/>
+ <source>redacted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Encryption enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Placeholder</name>
+ <message>
+ <location filename="../qml/delegates/Placeholder.qml" line="+4"/>
+ <source>unimplemented event: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>QuickSwitcher</name>
<message>
<location filename="../../src/QuickSwitcher.cpp" line="+71"/>
@@ -277,7 +267,7 @@
<context>
<name>RoomInfo</name>
<message>
- <location filename="../../src/Cache.cpp" line="+2205"/>
+ <location filename="../../src/Cache.cpp" line="+2307"/>
<source>no version stored</source>
<translation type="unfinished"></translation>
</message>
@@ -285,12 +275,12 @@
<context>
<name>RoomInfoListItem</name>
<message>
- <location filename="../../src/RoomInfoListItem.cpp" line="+93"/>
+ <location filename="../../src/RoomInfoListItem.cpp" line="+95"/>
<source>Leave room</source>
<translation>Покинуть комнату</translation>
</message>
<message>
- <location line="+181"/>
+ <location line="+161"/>
<source>Accept</source>
<translation>Принять</translation>
</message>
@@ -331,36 +321,36 @@
<context>
<name>StatusIndicator</name>
<message>
- <location filename="../../src/timeline/TimelineItem.cpp" line="+107"/>
- <source>Encrypted</source>
- <translation>Зашифровано</translation>
+ <location filename="../qml/StatusIndicator.qml" line="+13"/>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Delivered</source>
- <translation>Доставлено</translation>
+ <location line="+1"/>
+ <source>Sent</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Seen</source>
- <translation>Прочитано</translation>
+ <location line="+1"/>
+ <source>Received</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Sent</source>
- <translation>Отправлено</translation>
+ <location line="+1"/>
+ <source>Read</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TextInputWidget</name>
<message>
- <location filename="../../src/TextInputWidget.cpp" line="+507"/>
+ <location filename="../../src/TextInputWidget.cpp" line="+502"/>
<source>Send a file</source>
<translation>Отправить файл</translation>
</message>
<message>
<location line="+13"/>
- <location filename="../../src/TextInputWidget.h" line="+164"/>
+ <location filename="../../src/TextInputWidget.h" line="+161"/>
<source>Write a message...</source>
<translation>Написать сообщение...</translation>
</message>
@@ -375,7 +365,7 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+75"/>
+ <location line="+72"/>
<source>Select a file</source>
<translation>Выберите файл</translation>
</message>
@@ -391,32 +381,9 @@
</message>
</context>
<context>
- <name>TimelineItem</name>
- <message>
- <location filename="../../src/timeline/TimelineItem.cpp" line="+85"/>
- <source>Message redaction failed: %1</source>
- <translation>Ошибка редактирования сообщения: %1</translation>
- </message>
- <message>
- <location line="+39"/>
- <source>Reply</source>
- <translation type="unfinished"></translation>
- </message>
+ <name>TimelineModel</name>
<message>
- <location line="+11"/>
- <source>Options</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TimelineView</name>
- <message>
- <location filename="../../src/timeline/TimelineView.cpp" line="+245"/>
- <source>Encryption is enabled</source>
- <translation>Шифрование включено</translation>
- </message>
- <message>
- <location line="+65"/>
+ <location filename="../../src/timeline/TimelineModel.cpp" line="+835"/>
<source>-- Encrypted Event (No keys found for decryption) --</source>
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted</comment>
<translation type="unfinished"></translation>
@@ -440,16 +407,87 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+27"/>
+ <location line="+25"/>
<source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet</comment>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location line="+54"/>
+ <source>Message redaction failed: %1</source>
+ <translation type="unfinished">Ошибка редактирования сообщения: %1</translation>
+ </message>
+ <message>
+ <location line="+453"/>
+ <source>Save image</source>
+ <translation type="unfinished">Сохранить изображение</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TimelineRow</name>
+ <message>
+ <location filename="../qml/TimelineRow.qml" line="+57"/>
+ <source>Reply</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>Read receipts</source>
+ <translation type="unfinished">Подтверждать прочтение</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Mark as read</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>View raw message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Redact message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Save as</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TimelineView</name>
+ <message>
+ <location filename="../qml/TimelineView.qml" line="+24"/>
+ <source>No room open</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>TopRoomBar</name>
<message>
- <location filename="../../src/TopRoomBar.cpp" line="+79"/>
+ <location filename="../../src/TopRoomBar.cpp" line="+78"/>
<source>Room options</source>
<translation>Настройки комнаты</translation>
</message>
@@ -516,7 +554,7 @@
<context>
<name>UserSettingsPage</name>
<message>
- <location filename="../../src/UserSettingsPage.cpp" line="+166"/>
+ <location filename="../../src/UserSettingsPage.cpp" line="+171"/>
<source>Minimize to tray</source>
<translation>Сворачивать в системную панель</translation>
</message>
@@ -532,6 +570,11 @@
</message>
<message>
<location line="+9"/>
+ <source>Circular Avatars</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+9"/>
<source>Typing notifications</source>
<translation>Сообщать о наборе сообщения</translation>
</message>
@@ -606,7 +649,7 @@
<translation>ГЛАВНОЕ</translation>
</message>
<message>
- <location line="+156"/>
+ <location line="+161"/>
<source>Open Sessions File</source>
<translation>Открыть файл сеансов</translation>
</message>
@@ -827,7 +870,7 @@ Media size: %2
<context>
<name>dialogs::ReadReceipts</name>
<message>
- <location filename="../../src/dialogs/ReadReceipts.cpp" line="+121"/>
+ <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/>
<source>Read receipts</source>
<translation>Подтверждать прочтение</translation>
</message>
@@ -954,7 +997,7 @@ Media size: %2
<translation>Не удалось включить шифрование: %1</translation>
</message>
<message>
- <location line="+149"/>
+ <location line="+148"/>
<source>Select an avatar</source>
<translation>Выберите аватар</translation>
</message>
@@ -981,19 +1024,6 @@ Media size: %2
</message>
</context>
<context>
- <name>dialogs::UserMentions</name>
- <message>
- <location filename="../../src/dialogs/UserMentions.cpp" line="+53"/>
- <source>This Room</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+1"/>
- <source>All Rooms</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>dialogs::UserProfile</name>
<message>
<location filename="../../src/dialogs/UserProfile.cpp" line="+63"/>
@@ -1016,7 +1046,7 @@ Media size: %2
<translation>Начать разговор</translation>
</message>
<message>
- <location line="+57"/>
+ <location line="+56"/>
<source>Devices</source>
<translation>Устройства</translation>
</message>
@@ -1067,69 +1097,103 @@ Media size: %2
<context>
<name>message-description sent:</name>
<message>
- <location filename="../../src/Utils.h" line="+104"/>
- <source>%1 an audio clip</source>
+ <location filename="../../src/Utils.h" line="+95"/>
+ <source>You sent an audio clip</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 an image</source>
+ <source>%1 sent an audio clip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent an image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>%1 sent an image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a file</source>
+ <source>%1 sent a file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>%1 sent a video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a sticker</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a video clip</source>
+ <source>%1 sent a sticker</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a notification</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a sticker</source>
+ <source>%1 sent a notification</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a notification</source>
+ <source>%1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+7"/>
- <source>%1 an encrypted message</source>
+ <source>You sent an encrypted message</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>message-description:</name>
<message>
- <location line="-26"/>
- <source>sent</source>
- <comment>For when someone else is the sender</comment>
+ <location line="+3"/>
+ <source>%1 sent an encrypted message</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>message-description: </name>
+ <name>popups::UserMentions</name>
<message>
- <location line="-2"/>
- <source>sent</source>
- <comment>For when you are the sender</comment>
+ <location filename="../../src/popups/UserMentions.cpp" line="+61"/>
+ <source>This Room</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>utils</name>
<message>
- <location filename="../../src/Utils.cpp" line="+46"/>
- <location filename="../../src/Utils.h" line="+55"/>
- <source>You</source>
+ <location line="+1"/>
+ <source>All Rooms</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>utils</name>
<message>
- <location line="+219"/>
+ <location filename="../../src/Utils.cpp" line="+282"/>
<source>sent a file.</source>
<translation type="unfinished"></translation>
</message>
@@ -1149,7 +1213,7 @@ Media size: %2
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/Utils.h" line="-23"/>
+ <location filename="../../src/Utils.h" line="+4"/>
<source>Unknown Message Type</source>
<translation type="unfinished"></translation>
</message>
diff --git a/resources/langs/nheko_zh_CN.ts b/resources/langs/nheko_zh_CN.ts
index 1e539e64..31ca068c 100644
--- a/resources/langs/nheko_zh_CN.ts
+++ b/resources/langs/nheko_zh_CN.ts
@@ -2,37 +2,14 @@
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<context>
- <name>AudioItem</name>
- <message>
- <location filename="../../src/timeline/widgets/AudioItem.cpp" line="+118"/>
- <source>Save File</source>
- <translation>保存文件</translation>
- </message>
-</context>
-<context>
<name>ChatPage</name>
<message>
- <location filename="../../src/ChatPage.cpp" line="+330"/>
- <source>Failed to upload image. Please try again.</source>
- <translation>上传图像失败。请重试。</translation>
- </message>
- <message>
- <location line="+45"/>
- <source>Failed to upload file. Please try again.</source>
- <translation>上传文件失败,请重试。</translation>
- </message>
- <message>
- <location line="+43"/>
- <source>Failed to upload audio. Please try again.</source>
- <translation>上传音频失败。请重试。</translation>
- </message>
- <message>
- <location line="+42"/>
- <source>Failed to upload video. Please try again.</source>
- <translation>上传视频失败。请重试。</translation>
+ <location filename="../../src/ChatPage.cpp" line="+346"/>
+ <source>Failed to upload media. Please try again.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+380"/>
+ <location line="+389"/>
<source>Failed to restore OLM account. Please login again.</source>
<translation>恢复 OLM 账户失败。请重新登录。</translation>
</message>
@@ -42,18 +19,18 @@
<translation>恢复保存的数据失败。请重新登录。</translation>
</message>
<message>
- <location line="+198"/>
+ <location line="+181"/>
<source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+51"/>
- <location line="+153"/>
+ <location line="+155"/>
<source>Please try to login again: %1</source>
<translation>请尝试再次登录:%1</translation>
</message>
<message>
- <location line="-45"/>
+ <location line="-47"/>
<source>Room creation failed: %1</source>
<translation>创建聊天室失败:%1</translation>
</message>
@@ -116,19 +93,11 @@
</message>
</context>
<context>
- <name>FileItem</name>
+ <name>EncryptionIndicator</name>
<message>
- <location filename="../../src/timeline/widgets/FileItem.cpp" line="+107"/>
- <source>Save File</source>
- <translation>保存文件</translation>
- </message>
-</context>
-<context>
- <name>ImageItem</name>
- <message>
- <location filename="../../src/timeline/widgets/ImageItem.cpp" line="+241"/>
- <source>Save image</source>
- <translation>保存图像</translation>
+ <location filename="../qml/EncryptionIndicator.qml" line="+11"/>
+ <source>Encrypted</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -200,7 +169,7 @@
<context>
<name>MemberList</name>
<message>
- <location filename="../../src/dialogs/MemberList.cpp" line="+96"/>
+ <location filename="../../src/dialogs/MemberList.cpp" line="+89"/>
<source>Room members</source>
<translation>聊天室成员</translation>
</message>
@@ -211,6 +180,27 @@
</message>
</context>
<context>
+ <name>MessageDelegate</name>
+ <message>
+ <location filename="../qml/delegates/MessageDelegate.qml" line="+43"/>
+ <source>redacted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Encryption enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Placeholder</name>
+ <message>
+ <location filename="../qml/delegates/Placeholder.qml" line="+4"/>
+ <source>unimplemented event: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>QuickSwitcher</name>
<message>
<location filename="../../src/QuickSwitcher.cpp" line="+71"/>
@@ -277,7 +267,7 @@
<context>
<name>RoomInfo</name>
<message>
- <location filename="../../src/Cache.cpp" line="+2205"/>
+ <location filename="../../src/Cache.cpp" line="+2307"/>
<source>no version stored</source>
<translation type="unfinished"></translation>
</message>
@@ -285,12 +275,12 @@
<context>
<name>RoomInfoListItem</name>
<message>
- <location filename="../../src/RoomInfoListItem.cpp" line="+93"/>
+ <location filename="../../src/RoomInfoListItem.cpp" line="+95"/>
<source>Leave room</source>
<translation>离开聊天室</translation>
</message>
<message>
- <location line="+181"/>
+ <location line="+161"/>
<source>Accept</source>
<translation>接受</translation>
</message>
@@ -331,36 +321,36 @@
<context>
<name>StatusIndicator</name>
<message>
- <location filename="../../src/timeline/TimelineItem.cpp" line="+107"/>
- <source>Encrypted</source>
- <translation>加密的</translation>
+ <location filename="../qml/StatusIndicator.qml" line="+13"/>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Delivered</source>
- <translation>已送达</translation>
+ <location line="+1"/>
+ <source>Sent</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Seen</source>
- <translation>已阅读</translation>
+ <location line="+1"/>
+ <source>Received</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <source>Sent</source>
- <translation>已发送</translation>
+ <location line="+1"/>
+ <source>Read</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TextInputWidget</name>
<message>
- <location filename="../../src/TextInputWidget.cpp" line="+507"/>
+ <location filename="../../src/TextInputWidget.cpp" line="+502"/>
<source>Send a file</source>
<translation>发送一个文件</translation>
</message>
<message>
<location line="+13"/>
- <location filename="../../src/TextInputWidget.h" line="+164"/>
+ <location filename="../../src/TextInputWidget.h" line="+161"/>
<source>Write a message...</source>
<translation>写一条消息...</translation>
</message>
@@ -375,7 +365,7 @@
<translation></translation>
</message>
<message>
- <location line="+75"/>
+ <location line="+72"/>
<source>Select a file</source>
<translation>选择一个文件</translation>
</message>
@@ -391,32 +381,9 @@
</message>
</context>
<context>
- <name>TimelineItem</name>
- <message>
- <location filename="../../src/timeline/TimelineItem.cpp" line="+85"/>
- <source>Message redaction failed: %1</source>
- <translation>删除消息失败:%1</translation>
- </message>
- <message>
- <location line="+39"/>
- <source>Reply</source>
- <translation type="unfinished"></translation>
- </message>
+ <name>TimelineModel</name>
<message>
- <location line="+11"/>
- <source>Options</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TimelineView</name>
- <message>
- <location filename="../../src/timeline/TimelineView.cpp" line="+245"/>
- <source>Encryption is enabled</source>
- <translation>加密已启用</translation>
- </message>
- <message>
- <location line="+65"/>
+ <location filename="../../src/timeline/TimelineModel.cpp" line="+835"/>
<source>-- Encrypted Event (No keys found for decryption) --</source>
<comment>Placeholder, when the message was not decrypted yet or can't be decrypted</comment>
<translation type="unfinished"></translation>
@@ -440,16 +407,87 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+27"/>
+ <location line="+25"/>
<source>-- Encrypted Event (Unknown event type) --</source>
<comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet</comment>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location line="+54"/>
+ <source>Message redaction failed: %1</source>
+ <translation type="unfinished">删除消息失败:%1</translation>
+ </message>
+ <message>
+ <location line="+453"/>
+ <source>Save image</source>
+ <translation type="unfinished">保存图像</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Save file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TimelineRow</name>
+ <message>
+ <location filename="../qml/TimelineRow.qml" line="+57"/>
+ <source>Reply</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>Read receipts</source>
+ <translation type="unfinished">阅读回执</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Mark as read</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>View raw message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Redact message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Save as</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TimelineView</name>
+ <message>
+ <location filename="../qml/TimelineView.qml" line="+24"/>
+ <source>No room open</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>TopRoomBar</name>
<message>
- <location filename="../../src/TopRoomBar.cpp" line="+79"/>
+ <location filename="../../src/TopRoomBar.cpp" line="+78"/>
<source>Room options</source>
<translation>聊天室选项</translation>
</message>
@@ -514,7 +552,7 @@
<context>
<name>UserSettingsPage</name>
<message>
- <location filename="../../src/UserSettingsPage.cpp" line="+166"/>
+ <location filename="../../src/UserSettingsPage.cpp" line="+171"/>
<source>Minimize to tray</source>
<translation>最小化至托盘</translation>
</message>
@@ -530,6 +568,11 @@
</message>
<message>
<location line="+9"/>
+ <source>Circular Avatars</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+9"/>
<source>Typing notifications</source>
<translation>打字通知</translation>
</message>
@@ -604,7 +647,7 @@
<translation>通用</translation>
</message>
<message>
- <location line="+156"/>
+ <location line="+161"/>
<source>Open Sessions File</source>
<translation>打开会话文件</translation>
</message>
@@ -824,7 +867,7 @@ Media size: %2
<context>
<name>dialogs::ReadReceipts</name>
<message>
- <location filename="../../src/dialogs/ReadReceipts.cpp" line="+121"/>
+ <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/>
<source>Read receipts</source>
<translation>阅读回执</translation>
</message>
@@ -951,7 +994,7 @@ Media size: %2
<translation>启用加密失败:%1</translation>
</message>
<message>
- <location line="+149"/>
+ <location line="+148"/>
<source>Select an avatar</source>
<translation>选择一个头像</translation>
</message>
@@ -978,19 +1021,6 @@ Media size: %2
</message>
</context>
<context>
- <name>dialogs::UserMentions</name>
- <message>
- <location filename="../../src/dialogs/UserMentions.cpp" line="+53"/>
- <source>This Room</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+1"/>
- <source>All Rooms</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>dialogs::UserProfile</name>
<message>
<location filename="../../src/dialogs/UserProfile.cpp" line="+63"/>
@@ -1013,7 +1043,7 @@ Media size: %2
<translation>开始一个聊天</translation>
</message>
<message>
- <location line="+57"/>
+ <location line="+56"/>
<source>Devices</source>
<translation>设备</translation>
</message>
@@ -1072,69 +1102,103 @@ Media size: %2
<context>
<name>message-description sent:</name>
<message>
- <location filename="../../src/Utils.h" line="+104"/>
- <source>%1 an audio clip</source>
+ <location filename="../../src/Utils.h" line="+95"/>
+ <source>You sent an audio clip</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 an image</source>
+ <source>%1 sent an audio clip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent an image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>%1 sent an image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a file</source>
+ <source>%1 sent a file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>%1 sent a video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a sticker</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a video clip</source>
+ <source>%1 sent a sticker</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You sent a notification</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a sticker</source>
+ <source>%1 sent a notification</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>You: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
- <source>%1 a notification</source>
+ <source>%1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+7"/>
- <source>%1 an encrypted message</source>
+ <source>You sent an encrypted message</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>message-description:</name>
<message>
- <location line="-26"/>
- <source>sent</source>
- <comment>For when someone else is the sender</comment>
+ <location line="+3"/>
+ <source>%1 sent an encrypted message</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>message-description: </name>
+ <name>popups::UserMentions</name>
<message>
- <location line="-2"/>
- <source>sent</source>
- <comment>For when you are the sender</comment>
+ <location filename="../../src/popups/UserMentions.cpp" line="+61"/>
+ <source>This Room</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>utils</name>
<message>
- <location filename="../../src/Utils.cpp" line="+46"/>
- <location filename="../../src/Utils.h" line="+55"/>
- <source>You</source>
+ <location line="+1"/>
+ <source>All Rooms</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>utils</name>
<message>
- <location line="+219"/>
+ <location filename="../../src/Utils.cpp" line="+282"/>
<source>sent a file.</source>
<translation type="unfinished"></translation>
</message>
@@ -1154,7 +1218,7 @@ Media size: %2
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../src/Utils.h" line="-23"/>
+ <location filename="../../src/Utils.h" line="+4"/>
<source>Unknown Message Type</source>
<translation type="unfinished"></translation>
</message>
diff --git a/resources/qml/Avatar.qml b/resources/qml/Avatar.qml
new file mode 100644
index 00000000..a53f057b
--- /dev/null
+++ b/resources/qml/Avatar.qml
@@ -0,0 +1,51 @@
+import QtQuick 2.6
+import QtGraphicalEffects 1.0
+import Qt.labs.settings 1.0
+
+Rectangle {
+ id: avatar
+ width: 48
+ height: 48
+ radius: settings.avatar_circles ? height/2 : 3
+
+ Settings {
+ id: settings
+ category: "user"
+ property bool avatar_circles: true
+ }
+
+ property alias url: img.source
+ property string displayName
+
+ Text {
+ anchors.fill: parent
+ text: String.fromCodePoint(displayName.codePointAt(0))
+ color: colors.text
+ font.pixelSize: avatar.height/2
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ }
+
+ Image {
+ id: img
+ anchors.fill: parent
+ asynchronous: true
+ fillMode: Image.PreserveAspectCrop
+ mipmap: true
+ smooth: false
+
+ sourceSize.width: avatar.width
+ sourceSize.height: avatar.height
+
+ layer.enabled: true
+ layer.effect: OpacityMask {
+ maskSource: Rectangle {
+ anchors.fill: parent
+ width: avatar.width
+ height: avatar.height
+ radius: settings.avatar_circles ? height/2 : 3
+ }
+ }
+ }
+ color: colors.dark
+}
diff --git a/resources/qml/EncryptionIndicator.qml b/resources/qml/EncryptionIndicator.qml
new file mode 100644
index 00000000..905cf934
--- /dev/null
+++ b/resources/qml/EncryptionIndicator.qml
@@ -0,0 +1,24 @@
+import QtQuick 2.5
+import QtQuick.Controls 2.1
+import im.nheko 1.0
+
+Rectangle {
+ id: indicator
+ color: "transparent"
+ width: 16
+ height: 16
+ ToolTip.visible: ma.containsMouse && indicator.visible
+ ToolTip.text: qsTr("Encrypted")
+ MouseArea{
+ id: ma
+ anchors.fill: parent
+ hoverEnabled: true
+ }
+
+ Image {
+ id: stateImg
+ anchors.fill: parent
+ source: "image://colorimage/:/icons/icons/ui/lock.png?"+colors.buttonText
+ }
+}
+
diff --git a/resources/qml/ImageButton.qml b/resources/qml/ImageButton.qml
new file mode 100644
index 00000000..dc576e18
--- /dev/null
+++ b/resources/qml/ImageButton.qml
@@ -0,0 +1,29 @@
+import QtQuick 2.3
+import QtQuick.Controls 2.3
+
+Button {
+ property string image: undefined
+
+ id: button
+
+ flat: true
+
+ // disable background, because we don't want a border on hover
+ background: Item {
+ }
+
+ Image {
+ id: buttonImg
+ // Workaround, can't get icon.source working for now...
+ anchors.fill: parent
+ source: "image://colorimage/" + image + "?" + (button.hovered ? colors.highlight : colors.buttonText)
+ }
+
+ MouseArea
+ {
+ id: mouseArea
+ anchors.fill: parent
+ onPressed: mouse.accepted = false
+ cursorShape: Qt.PointingHandCursor
+ }
+}
diff --git a/resources/qml/MatrixText.qml b/resources/qml/MatrixText.qml
new file mode 100644
index 00000000..46e74711
--- /dev/null
+++ b/resources/qml/MatrixText.qml
@@ -0,0 +1,33 @@
+import QtQuick 2.5
+import QtQuick.Controls 2.3
+
+TextEdit {
+ textFormat: TextEdit.RichText
+ readOnly: true
+ wrapMode: Text.Wrap
+ selectByMouse: true
+ color: colors.text
+
+ onLinkActivated: {
+ if (/^https:\/\/matrix.to\/#\/(@.*)$/.test(link)) chat.model.openUserProfile(/^https:\/\/matrix.to\/#\/(@.*)$/.exec(link)[1])
+ else if (/^https:\/\/matrix.to\/#\/(![^\/]*)$/.test(link)) timelineManager.setHistoryView(/^https:\/\/matrix.to\/#\/(!.*)$/.exec(link)[1])
+ else if (/^https:\/\/matrix.to\/#\/(![^\/]*)\/(\$.*)$/.test(link)) {
+ var match = /^https:\/\/matrix.to\/#\/(![^\/]*)\/(\$.*)$/.exec(link)
+ timelineManager.setHistoryView(match[1])
+ chat.positionViewAtIndex(chat.model.idToIndex(match[2]), ListView.Contain)
+ }
+ else Qt.openUrlExternally(link)
+ }
+ MouseArea
+ {
+ anchors.fill: parent
+ onPressed: mouse.accepted = false
+ cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
+ }
+
+ ToolTip {
+ visible: parent.hoveredLink
+ text: parent.hoveredLink
+ palette: colors
+ }
+}
diff --git a/resources/qml/StatusIndicator.qml b/resources/qml/StatusIndicator.qml
new file mode 100644
index 00000000..91e8f769
--- /dev/null
+++ b/resources/qml/StatusIndicator.qml
@@ -0,0 +1,38 @@
+import QtQuick 2.5
+import QtQuick.Controls 2.1
+import im.nheko 1.0
+
+Rectangle {
+ id: indicator
+ property int state: 0
+ color: "transparent"
+ width: 16
+ height: 16
+ ToolTip.visible: ma.containsMouse && state != MtxEvent.Empty
+ ToolTip.text: switch (state) {
+ case MtxEvent.Failed: return qsTr("Failed")
+ case MtxEvent.Sent: return qsTr("Sent")
+ case MtxEvent.Received: return qsTr("Received")
+ case MtxEvent.Read: return qsTr("Read")
+ default: return ""
+ }
+ MouseArea{
+ id: ma
+ anchors.fill: parent
+ hoverEnabled: true
+ }
+
+ Image {
+ id: stateImg
+ // Workaround, can't get icon.source working for now...
+ anchors.fill: parent
+ source: switch (indicator.state) {
+ case MtxEvent.Failed: return "image://colorimage/:/icons/icons/ui/remove-symbol.png?" + colors.buttonText
+ case MtxEvent.Sent: return "image://colorimage/:/icons/icons/ui/clock.png?" + colors.buttonText
+ case MtxEvent.Received: return "image://colorimage/:/icons/icons/ui/checkmark.png?" + colors.buttonText
+ case MtxEvent.Read: return "image://colorimage/:/icons/icons/ui/double-tick-indicator.png?" + colors.buttonText
+ default: return ""
+ }
+ }
+}
+
diff --git a/resources/qml/TimelineRow.qml b/resources/qml/TimelineRow.qml
new file mode 100644
index 00000000..2c2ed02a
--- /dev/null
+++ b/resources/qml/TimelineRow.qml
@@ -0,0 +1,122 @@
+import QtQuick 2.6
+import QtQuick.Controls 2.3
+import QtQuick.Layouts 1.2
+import QtQuick.Window 2.2
+
+import im.nheko 1.0
+
+import "./delegates"
+
+RowLayout {
+ property var view: chat
+
+ anchors.leftMargin: avatarSize + 4
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ height: Math.max(contentItem.height, 16)
+
+ Column {
+ Layout.fillWidth: true
+ Layout.alignment: Qt.AlignTop
+
+ //property var replyTo: model.replyTo
+
+ //Text {
+ // property int idx: timelineManager.timeline.idToIndex(replyTo)
+ // text: "" + (idx != -1 ? timelineManager.timeline.data(timelineManager.timeline.index(idx, 0), 2) : "nothing")
+ //}
+ MessageDelegate {
+ id: contentItem
+
+ width: parent.width
+ height: childrenRect.height
+ }
+ }
+
+ StatusIndicator {
+ state: model.state
+ Layout.alignment: Qt.AlignRight | Qt.AlignTop
+ Layout.preferredHeight: 16
+ }
+
+ EncryptionIndicator {
+ visible: model.isEncrypted
+ Layout.alignment: Qt.AlignRight | Qt.AlignTop
+ Layout.preferredHeight: 16
+ }
+
+ ImageButton {
+ Layout.alignment: Qt.AlignRight | Qt.AlignTop
+ Layout.preferredHeight: 16
+ id: replyButton
+
+ image: ":/icons/icons/ui/mail-reply.png"
+ ToolTip {
+ visible: replyButton.hovered
+ text: qsTr("Reply")
+ palette: colors
+ }
+
+ onClicked: view.model.replyAction(model.id)
+ }
+ ImageButton {
+ Layout.alignment: Qt.AlignRight | Qt.AlignTop
+ Layout.preferredHeight: 16
+ id: optionsButton
+
+ image: ":/icons/icons/ui/vertical-ellipsis.png"
+ ToolTip {
+ visible: optionsButton.hovered
+ text: qsTr("Options")
+ palette: colors
+ }
+
+ onClicked: contextMenu.open()
+
+ Menu {
+ y: optionsButton.height
+ id: contextMenu
+ palette: colors
+
+ MenuItem {
+ text: qsTr("Read receipts")
+ onTriggered: view.model.readReceiptsAction(model.id)
+ }
+ MenuItem {
+ text: qsTr("Mark as read")
+ }
+ MenuItem {
+ text: qsTr("View raw message")
+ onTriggered: view.model.viewRawMessage(model.id)
+ }
+ MenuItem {
+ text: qsTr("Redact message")
+ onTriggered: view.model.redactEvent(model.id)
+ }
+ MenuItem {
+ visible: model.type == MtxEvent.ImageMessage || model.type == MtxEvent.VideoMessage || model.type == MtxEvent.AudioMessage || model.type == MtxEvent.FileMessage || model.type == MtxEvent.Sticker
+ text: qsTr("Save as")
+ onTriggered: timelineManager.timeline.saveMedia(model.id)
+ }
+ }
+ }
+
+ Text {
+ Layout.alignment: Qt.AlignRight | Qt.AlignTop
+ text: model.timestamp.toLocaleTimeString("HH:mm")
+ color: inactiveColors.text
+
+ MouseArea{
+ id: ma
+ anchors.fill: parent
+ hoverEnabled: true
+ }
+
+ ToolTip {
+ visible: ma.containsMouse
+ text: Qt.formatDateTime(model.timestamp, Qt.DefaultLocaleLongDate)
+ palette: colors
+ }
+ }
+}
diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml
new file mode 100644
index 00000000..1a1900ad
--- /dev/null
+++ b/resources/qml/TimelineView.qml
@@ -0,0 +1,185 @@
+import QtQuick 2.9
+import QtQuick.Controls 2.1
+import QtQuick.Layouts 1.2
+import QtGraphicalEffects 1.0
+import QtQuick.Window 2.2
+
+import im.nheko 1.0
+
+import "./delegates"
+
+Item {
+ property var colors: currentActivePalette
+ property var systemInactive: SystemPalette { colorGroup: SystemPalette.Disabled }
+ property var inactiveColors: currentInactivePalette ? currentInactivePalette : systemInactive
+ property int avatarSize: 40
+
+ Rectangle {
+ anchors.fill: parent
+ color: colors.window
+
+ Text {
+ visible: !timelineManager.timeline && !timelineManager.isInitialSync
+ anchors.centerIn: parent
+ text: qsTr("No room open")
+ font.pointSize: 24
+ color: colors.windowText
+ }
+
+ BusyIndicator {
+ anchors.centerIn: parent
+ running: timelineManager.isInitialSync
+ height: 200
+ width: 200
+ }
+
+ ListView {
+ id: chat
+
+ cacheBuffer: 2000
+
+ visible: timelineManager.timeline != null
+ anchors.fill: parent
+
+ anchors.leftMargin: 4
+ anchors.rightMargin: scrollbar.width
+
+ model: timelineManager.timeline
+
+ boundsBehavior: Flickable.StopAtBounds
+
+ onVerticalOvershootChanged: contentY = contentY - verticalOvershoot
+
+ MouseArea {
+ anchors.fill: parent
+ acceptedButtons: Qt.NoButton
+ propagateComposedEvents: true
+ z: -1
+ onWheel: {
+ if (wheel.angleDelta != 0) {
+ chat.contentY = chat.contentY - wheel.angleDelta.y
+ wheel.accepted = true
+ chat.forceLayout()
+ chat.updatePosition()
+ }
+ }
+ }
+
+ onModelChanged: {
+ if (model) {
+ currentIndex = model.currentIndex
+ if (model.currentIndex == count - 1) {
+ positionViewAtEnd()
+ } else {
+ positionViewAtIndex(model.currentIndex, ListView.End)
+ }
+ }
+ }
+
+ ScrollBar.vertical: ScrollBar {
+ id: scrollbar
+ parent: chat.parent
+ anchors.top: chat.top
+ anchors.left: chat.right
+ anchors.bottom: chat.bottom
+ onPressedChanged: if (!pressed) chat.updatePosition()
+ }
+
+ property bool atBottom: false
+ onCountChanged: {
+ if (atBottom) {
+ var newIndex = count - 1 // last index
+ positionViewAtEnd()
+ currentIndex = newIndex
+ model.currentIndex = newIndex
+ }
+
+ if (contentHeight < height && model) {
+ model.fetchHistory();
+ }
+ }
+
+ onAtYBeginningChanged: if (atYBeginning) { chat.model.currentIndex = 0; chat.currentIndex = 0; model.fetchHistory(); }
+
+ function updatePosition() {
+ for (var y = chat.contentY + chat.height; y > chat.height; y -= 9) {
+ var i = chat.itemAt(100, y);
+ if (!i) continue;
+ if (!i.isFullyVisible()) continue;
+ chat.model.currentIndex = i.getIndex();
+ chat.currentIndex = i.getIndex()
+ atBottom = i.getIndex() == count - 1;
+ break;
+ }
+ }
+ onMovementEnded: updatePosition()
+
+ spacing: 4
+ delegate: TimelineRow {
+ function isFullyVisible() {
+ return height > 1 && (y - chat.contentY - 1) + height < chat.height
+ }
+ function getIndex() {
+ return index;
+ }
+ }
+
+ section {
+ property: "section"
+ delegate: Column {
+ topPadding: 4
+ bottomPadding: 4
+ spacing: 8
+
+ width: parent.width
+ height: (section.includes(" ") ? dateBubble.height + 8 + userName.height : userName.height) + 8
+
+ Label {
+ id: dateBubble
+ anchors.horizontalCenter: parent.horizontalCenter
+ visible: section.includes(" ")
+ text: chat.model.formatDateSeparator(new Date(Number(section.split(" ")[1])))
+ color: colors.windowText
+
+ height: contentHeight * 1.2
+ width: contentWidth * 1.2
+ horizontalAlignment: Text.AlignHCenter
+ background: Rectangle {
+ radius: parent.height / 2
+ color: colors.dark
+ }
+ }
+ Row {
+ height: userName.height
+ spacing: 4
+ Avatar {
+ width: avatarSize
+ height: avatarSize
+ url: chat.model.avatarUrl(section.split(" ")[0]).replace("mxc://", "image://MxcImage/")
+ displayName: chat.model.displayName(section.split(" ")[0])
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: chat.model.openUserProfile(section.split(" ")[0])
+ cursorShape: Qt.PointingHandCursor
+ }
+ }
+
+ Text {
+ id: userName
+ text: chat.model.escapeEmoji(chat.model.displayName(section.split(" ")[0]))
+ color: chat.model.userColor(section.split(" ")[0], colors.window)
+ textFormat: Text.RichText
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: chat.model.openUserProfile(section.split(" ")[0])
+ cursorShape: Qt.PointingHandCursor
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/resources/qml/delegates/FileMessage.qml b/resources/qml/delegates/FileMessage.qml
new file mode 100644
index 00000000..2c911c5e
--- /dev/null
+++ b/resources/qml/delegates/FileMessage.qml
@@ -0,0 +1,57 @@
+import QtQuick 2.6
+import QtQuick.Layouts 1.2
+
+Rectangle {
+ radius: 10
+ color: colors.dark
+ height: row.height + 24
+ width: parent ? parent.width : undefined
+
+ RowLayout {
+ id: row
+
+ anchors.centerIn: parent
+ width: parent.width - 24
+
+ spacing: 15
+
+ Rectangle {
+ id: button
+ color: colors.light
+ radius: 22
+ height: 44
+ width: 44
+ Image {
+ id: img
+ anchors.centerIn: parent
+
+ source: "qrc:/icons/icons/ui/arrow-pointing-down.png"
+ fillMode: Image.Pad
+
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: timelineManager.timeline.saveMedia(model.id)
+ cursorShape: Qt.PointingHandCursor
+ }
+ }
+ ColumnLayout {
+ id: col
+
+ Text {
+ Layout.fillWidth: true
+ text: model.body
+ textFormat: Text.PlainText
+ elide: Text.ElideRight
+ color: colors.text
+ }
+ Text {
+ Layout.fillWidth: true
+ text: model.filesize
+ textFormat: Text.PlainText
+ elide: Text.ElideRight
+ color: colors.text
+ }
+ }
+ }
+}
diff --git a/resources/qml/delegates/ImageMessage.qml b/resources/qml/delegates/ImageMessage.qml
new file mode 100644
index 00000000..1b6e5729
--- /dev/null
+++ b/resources/qml/delegates/ImageMessage.qml
@@ -0,0 +1,23 @@
+import QtQuick 2.6
+
+import im.nheko 1.0
+
+Item {
+ width: Math.min(parent ? parent.width : undefined, model.width)
+ height: width * model.proportionalHeight
+
+ Image {
+ id: img
+ anchors.fill: parent
+
+ source: model.url.replace("mxc://", "image://MxcImage/")
+ asynchronous: true
+ fillMode: Image.PreserveAspectFit
+
+ MouseArea {
+ enabled: model.type == MtxEvent.ImageMessage
+ anchors.fill: parent
+ onClicked: timelineManager.openImageOverlay(model.url, model.id)
+ }
+ }
+}
diff --git a/resources/qml/delegates/MessageDelegate.qml b/resources/qml/delegates/MessageDelegate.qml
new file mode 100644
index 00000000..178dfd86
--- /dev/null
+++ b/resources/qml/delegates/MessageDelegate.qml
@@ -0,0 +1,55 @@
+import QtQuick 2.6
+import im.nheko 1.0
+
+DelegateChooser {
+ //role: "type" //< not supported in our custom implementation, have to use roleValue
+ roleValue: model.type
+
+ DelegateChoice {
+ roleValue: MtxEvent.TextMessage
+ TextMessage {}
+ }
+ DelegateChoice {
+ roleValue: MtxEvent.NoticeMessage
+ NoticeMessage {}
+ }
+ DelegateChoice {
+ roleValue: MtxEvent.EmoteMessage
+ TextMessage {}
+ }
+ DelegateChoice {
+ roleValue: MtxEvent.ImageMessage
+ ImageMessage {}
+ }
+ DelegateChoice {
+ roleValue: MtxEvent.Sticker
+ ImageMessage {}
+ }
+ DelegateChoice {
+ roleValue: MtxEvent.FileMessage
+ FileMessage {}
+ }
+ DelegateChoice {
+ roleValue: MtxEvent.VideoMessage
+ PlayableMediaMessage {}
+ }
+ DelegateChoice {
+ roleValue: MtxEvent.AudioMessage
+ PlayableMediaMessage {}
+ }
+ DelegateChoice {
+ roleValue: MtxEvent.Redacted
+ Pill {
+ text: qsTr("redacted")
+ }
+ }
+ DelegateChoice {
+ roleValue: MtxEvent.Encryption
+ Pill {
+ text: qsTr("Encryption enabled")
+ }
+ }
+ DelegateChoice {
+ Placeholder {}
+ }
+}
diff --git a/resources/qml/delegates/NoticeMessage.qml b/resources/qml/delegates/NoticeMessage.qml
new file mode 100644
index 00000000..a392eb5b
--- /dev/null
+++ b/resources/qml/delegates/NoticeMessage.qml
@@ -0,0 +1,8 @@
+import ".."
+
+MatrixText {
+ text: model.formattedBody
+ width: parent ? parent.width : undefined
+ font.italic: true
+ color: inactiveColors.text
+}
diff --git a/resources/qml/delegates/Pill.qml b/resources/qml/delegates/Pill.qml
new file mode 100644
index 00000000..53a9684e
--- /dev/null
+++ b/resources/qml/delegates/Pill.qml
@@ -0,0 +1,14 @@
+import QtQuick 2.5
+import QtQuick.Controls 2.1
+
+Label {
+ color: inactiveColors.text
+ horizontalAlignment: Text.AlignHCenter
+
+ height: contentHeight * 1.2
+ width: contentWidth * 1.2
+ background: Rectangle {
+ radius: parent.height / 2
+ color: colors.dark
+ }
+}
diff --git a/resources/qml/delegates/Placeholder.qml b/resources/qml/delegates/Placeholder.qml
new file mode 100644
index 00000000..4c0e68c3
--- /dev/null
+++ b/resources/qml/delegates/Placeholder.qml
@@ -0,0 +1,7 @@
+import ".."
+
+MatrixText {
+ text: qsTr("unimplemented event: ") + model.type
+ width: parent ? parent.width : undefined
+ color: inactiveColors.text
+}
diff --git a/resources/qml/delegates/PlayableMediaMessage.qml b/resources/qml/delegates/PlayableMediaMessage.qml
new file mode 100644
index 00000000..d0d4d7cb
--- /dev/null
+++ b/resources/qml/delegates/PlayableMediaMessage.qml
@@ -0,0 +1,164 @@
+import QtQuick 2.6
+import QtQuick.Layouts 1.2
+import QtQuick.Controls 2.1
+import QtMultimedia 5.6
+
+import im.nheko 1.0
+
+Rectangle {
+ id: bg
+ radius: 10
+ color: colors.dark
+ height: content.height + 24
+ width: parent ? parent.width : undefined
+
+ Column {
+ id: content
+ width: parent.width - 24
+ anchors.centerIn: parent
+
+ Rectangle {
+ id: videoContainer
+ visible: model.type == MtxEvent.VideoMessage
+ width: Math.min(parent.width, model.width ? model.width : 400) // some media has 0 as size...
+ height: width*model.proportionalHeight
+ Image {
+ anchors.fill: parent
+ source: model.thumbnailUrl.replace("mxc://", "image://MxcImage/")
+ asynchronous: true
+ fillMode: Image.PreserveAspectFit
+
+ VideoOutput {
+ anchors.fill: parent
+ fillMode: VideoOutput.PreserveAspectFit
+ source: media
+ }
+ }
+ }
+
+ RowLayout {
+ width: parent.width
+ Text {
+ id: positionText
+ text: "--:--:--"
+ color: colors.text
+ }
+ Slider {
+ Layout.fillWidth: true
+ id: progress
+ value: media.position
+ from: 0
+ to: media.duration
+
+ onMoved: media.seek(value)
+ //indeterminate: true
+ function updatePositionTexts() {
+ function formatTime(date) {
+ var hh = date.getUTCHours();
+ var mm = date.getUTCMinutes();
+ var ss = date.getSeconds();
+ if (hh < 10) {hh = "0"+hh;}
+ if (mm < 10) {mm = "0"+mm;}
+ if (ss < 10) {ss = "0"+ss;}
+ return hh+":"+mm+":"+ss;
+ }
+ positionText.text = formatTime(new Date(media.position))
+ durationText.text = formatTime(new Date(media.duration))
+ }
+ onValueChanged: updatePositionTexts()
+ }
+ Text {
+ id: durationText
+ text: "--:--:--"
+ color: colors.text
+ }
+ }
+
+ RowLayout {
+ width: parent.width
+
+ spacing: 15
+
+ Rectangle {
+ id: button
+ color: colors.light
+ radius: 22
+ height: 44
+ width: 44
+ Image {
+ id: img
+ anchors.centerIn: parent
+
+ source: "qrc:/icons/icons/ui/arrow-pointing-down.png"
+ fillMode: Image.Pad
+
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ switch (button.state) {
+ case "": timelineManager.timeline.cacheMedia(model.id); break;
+ case "stopped":
+ media.play(); console.log("play");
+ button.state = "playing"
+ break
+ case "playing":
+ media.pause(); console.log("pause");
+ button.state = "stopped"
+ break
+ }
+ }
+ cursorShape: Qt.PointingHandCursor
+ }
+ MediaPlayer {
+ id: media
+ onError: console.log(errorString)
+ onStatusChanged: if(status == MediaPlayer.Loaded) progress.updatePositionTexts()
+ onStopped: button.state = "stopped"
+ }
+
+ Connections {
+ target: timelineManager.timeline
+ onMediaCached: {
+ if (mxcUrl == model.url) {
+ media.source = "file://" + cacheUrl
+ button.state = "stopped"
+ console.log("media loaded: " + mxcUrl + " at " + cacheUrl)
+ }
+ console.log("media cached: " + mxcUrl + " at " + cacheUrl)
+ }
+ }
+
+ states: [
+ State {
+ name: "stopped"
+ PropertyChanges { target: img; source: "qrc:/icons/icons/ui/play-sign.png" }
+ },
+ State {
+ name: "playing"
+ PropertyChanges { target: img; source: "qrc:/icons/icons/ui/pause-symbol.png" }
+ }
+ ]
+ }
+ ColumnLayout {
+ id: col
+
+ Text {
+ Layout.fillWidth: true
+ text: model.body
+ textFormat: Text.PlainText
+ elide: Text.ElideRight
+ color: colors.text
+ }
+ Text {
+ Layout.fillWidth: true
+ text: model.filesize
+ textFormat: Text.PlainText
+ elide: Text.ElideRight
+ color: colors.text
+ }
+ }
+ }
+ }
+}
+
diff --git a/resources/qml/delegates/TextMessage.qml b/resources/qml/delegates/TextMessage.qml
new file mode 100644
index 00000000..f984b32f
--- /dev/null
+++ b/resources/qml/delegates/TextMessage.qml
@@ -0,0 +1,6 @@
+import ".."
+
+MatrixText {
+ text: model.formattedBody.replace("<pre>", "<pre style='white-space: pre-wrap'>")
+ width: parent ? parent.width : undefined
+}
diff --git a/resources/res.qrc b/resources/res.qrc
index ad27af5a..53406c48 100644
--- a/resources/res.qrc
+++ b/resources/res.qrc
@@ -114,4 +114,21 @@
<file>styles/nheko.qss</file>
<file>styles/nheko-dark.qss</file>
</qresource>
+ <qresource prefix="/">
+ <file>qml/TimelineView.qml</file>
+ <file>qml/Avatar.qml</file>
+ <file>qml/ImageButton.qml</file>
+ <file>qml/MatrixText.qml</file>
+ <file>qml/StatusIndicator.qml</file>
+ <file>qml/EncryptionIndicator.qml</file>
+ <file>qml/TimelineRow.qml</file>
+ <file>qml/delegates/MessageDelegate.qml</file>
+ <file>qml/delegates/TextMessage.qml</file>
+ <file>qml/delegates/NoticeMessage.qml</file>
+ <file>qml/delegates/ImageMessage.qml</file>
+ <file>qml/delegates/PlayableMediaMessage.qml</file>
+ <file>qml/delegates/FileMessage.qml</file>
+ <file>qml/delegates/Pill.qml</file>
+ <file>qml/delegates/Placeholder.qml</file>
+ </qresource>
</RCC>
|