diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts index a97c3fb3d8b953ec20d44569a1b0a7c5f1750a0c..3f9cdc52ab6e72dfd8eca07ca2afa609a2eb5321 100644 --- a/resources/langs/nheko_de.ts +++ b/resources/langs/nheko_de.ts @@ -4,13 +4,13 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+225"/> + <location filename="../../src/ChatPage.cpp" line="+226"/> <source>Failed to invite user: %1</source> <translation>Nutzer konnte nicht eingeladen werden: %1</translation> </message> <message> <location line="+4"/> - <location line="+866"/> + <location line="+888"/> <source>Invited user: %1</source> <translation>Eingeladener Benutzer: %1</translation> </message> @@ -50,12 +50,32 @@ <translation>Verbannung von %1 wurde aufgehoben.</translation> </message> <message> - <location line="-791"/> + <location line="-813"/> <source>Failed to upload media. Please try again.</source> <translation>Medienupload fehlgeschlagen. Bitte versuche es erneut.</translation> </message> <message> - <location line="+404"/> + <location line="+296"/> + <source>Cache migration failed!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>Incompatible cache version</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+111"/> <source>Failed to restore OLM account. Please login again.</source> <translation>Wiederherstellung des OLM Accounts fehlgeschlagen. Bitte logge dich erneut ein.</translation> </message> @@ -71,7 +91,7 @@ </message> <message> <location line="+51"/> - <location line="+210"/> + <location line="+215"/> <source>Please try to login again: %1</source> <translation>Bitte melde dich erneut an: %1</translation> </message> @@ -355,7 +375,7 @@ <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+2311"/> + <location filename="../../src/Cache.cpp" line="+2213"/> <source>no version stored</source> <translation>keine Version gespeichert</translation> </message> @@ -368,7 +388,7 @@ <translation>Raum verlassen</translation> </message> <message> - <location line="+158"/> + <location line="+160"/> <source>Accept</source> <translation>Akzeptieren</translation> </message> @@ -471,7 +491,7 @@ <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+766"/> + <location filename="../../src/timeline/TimelineModel.cpp" line="+773"/> <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>-- Entschlüsselungsfehler (Fehler bei Kommunikation mit Datenbank) --</translation> @@ -489,7 +509,7 @@ <translation>-- Entschlüsselungsfehler (%1) --</translation> </message> <message> - <location line="+89"/> + <location line="+99"/> <source>Message redaction failed: %1</source> <translation>Nachricht zurückziehen fehlgeschlagen: %1</translation> </message> @@ -514,7 +534,7 @@ <translation>Datei speichern</translation> </message> <message> - <location line="-600"/> + <location line="-610"/> <source>-- Encrypted Event (No keys found for decryption) --</source> <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> <translation>-- Verschlüsseltes Event (keine Schlüssel zur Entschlüsselung gefunden) --</translation> @@ -526,7 +546,7 @@ <translation>-- Verschlüsseltes Event (Unbekannter Eventtyp) --</translation> </message> <message numerus="yes"> - <location line="+650"/> + <location line="+660"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation> @@ -677,7 +697,7 @@ <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+48"/> + <location filename="../qml/TimelineView.qml" line="+52"/> <source>Reply</source> <translation>Antworten</translation> </message> @@ -971,7 +991,7 @@ <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+138"/> + <location filename="../../src/Utils.cpp" line="+141"/> <source>Yesterday</source> <translation>Gestern</translation> </message> diff --git a/resources/langs/nheko_el.ts b/resources/langs/nheko_el.ts index 1f4c355c3dd884e3c4239d47972fbdbe3172222b..7cd9459353e2b990cb992e29221f2d96fd5c0798 100644 --- a/resources/langs/nheko_el.ts +++ b/resources/langs/nheko_el.ts @@ -4,13 +4,13 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+225"/> + <location filename="../../src/ChatPage.cpp" line="+226"/> <source>Failed to invite user: %1</source> <translation type="unfinished"></translation> </message> <message> <location line="+4"/> - <location line="+866"/> + <location line="+888"/> <source>Invited user: %1</source> <translation type="unfinished"></translation> </message> @@ -50,12 +50,32 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-791"/> + <location line="-813"/> <source>Failed to upload media. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+404"/> + <location line="+296"/> + <source>Cache migration failed!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>Incompatible cache version</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+111"/> <source>Failed to restore OLM account. Please login again.</source> <translation type="unfinished"></translation> </message> @@ -71,7 +91,7 @@ </message> <message> <location line="+51"/> - <location line="+210"/> + <location line="+215"/> <source>Please try to login again: %1</source> <translation type="unfinished"></translation> </message> @@ -355,7 +375,7 @@ <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+2311"/> + <location filename="../../src/Cache.cpp" line="+2213"/> <source>no version stored</source> <translation type="unfinished"></translation> </message> @@ -368,7 +388,7 @@ <translation>ΒγÎÏ‚</translation> </message> <message> - <location line="+158"/> + <location line="+160"/> <source>Accept</source> <translation>Αποδοχή</translation> </message> @@ -471,7 +491,7 @@ <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+766"/> + <location filename="../../src/timeline/TimelineModel.cpp" line="+773"/> <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> @@ -489,7 +509,7 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+89"/> + <location line="+99"/> <source>Message redaction failed: %1</source> <translation type="unfinished"></translation> </message> @@ -514,7 +534,7 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-600"/> + <location line="-610"/> <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> @@ -526,7 +546,7 @@ <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location line="+650"/> + <location line="+660"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation type="unfinished"> @@ -677,7 +697,7 @@ <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+48"/> + <location filename="../qml/TimelineView.qml" line="+52"/> <source>Reply</source> <translation type="unfinished"></translation> </message> @@ -971,7 +991,7 @@ <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+138"/> + <location filename="../../src/Utils.cpp" line="+141"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> diff --git a/resources/langs/nheko_en.ts b/resources/langs/nheko_en.ts index 52eb4a4c1efdfa57aea94f76cefc1f9f3b821099..10295fcfcd0a0e83f3c45509cdd1956da1cbb60e 100644 --- a/resources/langs/nheko_en.ts +++ b/resources/langs/nheko_en.ts @@ -4,13 +4,13 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+225"/> + <location filename="../../src/ChatPage.cpp" line="+226"/> <source>Failed to invite user: %1</source> <translation>Failed to invite user: %1</translation> </message> <message> <location line="+4"/> - <location line="+866"/> + <location line="+888"/> <source>Invited user: %1</source> <translation>Invited user: %1</translation> </message> @@ -50,12 +50,32 @@ <translation>Unbanned user: %1</translation> </message> <message> - <location line="-791"/> + <location line="-813"/> <source>Failed to upload media. Please try again.</source> <translation>Failed to upload media. Please try again.</translation> </message> <message> - <location line="+404"/> + <location line="+296"/> + <source>Cache migration failed!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>Incompatible cache version</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+111"/> <source>Failed to restore OLM account. Please login again.</source> <translation>Failed to restore OLM account. Please login again.</translation> </message> @@ -71,7 +91,7 @@ </message> <message> <location line="+51"/> - <location line="+210"/> + <location line="+215"/> <source>Please try to login again: %1</source> <translation>Please try to login again: %1</translation> </message> @@ -355,7 +375,7 @@ <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+2311"/> + <location filename="../../src/Cache.cpp" line="+2213"/> <source>no version stored</source> <translation>no version stored</translation> </message> @@ -368,7 +388,7 @@ <translation>Leave room</translation> </message> <message> - <location line="+158"/> + <location line="+160"/> <source>Accept</source> <translation>Accept</translation> </message> @@ -471,7 +491,7 @@ <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+766"/> + <location filename="../../src/timeline/TimelineModel.cpp" line="+773"/> <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> @@ -489,7 +509,7 @@ <translation>-- Decryption Error (%1) --</translation> </message> <message> - <location line="+89"/> + <location line="+99"/> <source>Message redaction failed: %1</source> <translation>Message redaction failed: %1</translation> </message> @@ -514,7 +534,7 @@ <translation>Save file</translation> </message> <message> - <location line="-600"/> + <location line="-610"/> <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> @@ -526,7 +546,7 @@ <translation>-- Encrypted Event (Unknown event type) --</translation> </message> <message numerus="yes"> - <location line="+650"/> + <location line="+660"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation> @@ -677,7 +697,7 @@ <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+48"/> + <location filename="../qml/TimelineView.qml" line="+52"/> <source>Reply</source> <translation>Reply</translation> </message> @@ -971,7 +991,7 @@ <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+138"/> + <location filename="../../src/Utils.cpp" line="+141"/> <source>Yesterday</source> <translation>Yesterday</translation> </message> diff --git a/resources/langs/nheko_fi.ts b/resources/langs/nheko_fi.ts index 3ab797d83ad849f5db6c43e4bfdc36a3ed896ed0..0f0cf1ac533252e9328448b3a01766a9229c6605 100644 --- a/resources/langs/nheko_fi.ts +++ b/resources/langs/nheko_fi.ts @@ -4,13 +4,13 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+225"/> + <location filename="../../src/ChatPage.cpp" line="+226"/> <source>Failed to invite user: %1</source> <translation type="unfinished"></translation> </message> <message> <location line="+4"/> - <location line="+866"/> + <location line="+888"/> <source>Invited user: %1</source> <translation type="unfinished"></translation> </message> @@ -50,12 +50,32 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-791"/> + <location line="-813"/> <source>Failed to upload media. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+404"/> + <location line="+296"/> + <source>Cache migration failed!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>Incompatible cache version</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+111"/> <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> @@ -71,7 +91,7 @@ </message> <message> <location line="+51"/> - <location line="+210"/> + <location line="+215"/> <source>Please try to login again: %1</source> <translation>Ole hyvä ja yritä kirjautua sisään uudelleen: %1</translation> </message> @@ -355,7 +375,7 @@ <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+2311"/> + <location filename="../../src/Cache.cpp" line="+2213"/> <source>no version stored</source> <translation>ei tallennettua versiota</translation> </message> @@ -368,7 +388,7 @@ <translation>Poistu huoneesta</translation> </message> <message> - <location line="+158"/> + <location line="+160"/> <source>Accept</source> <translation>Hyväksy</translation> </message> @@ -471,7 +491,7 @@ <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+766"/> + <location filename="../../src/timeline/TimelineModel.cpp" line="+773"/> <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">-- Virhe purkaessa salausta (tietokannan kanssa kommunikointi epäonnistui) --</translation> @@ -489,7 +509,7 @@ <translation type="unfinished">-- Virhe purkaessa salausta (%1) --</translation> </message> <message> - <location line="+89"/> + <location line="+99"/> <source>Message redaction failed: %1</source> <translation type="unfinished">Viestin poisto epäonnistui: %1</translation> </message> @@ -514,7 +534,7 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-600"/> + <location line="-610"/> <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">-- Salattu viesti (salauksen purkuavaimia ei löydetty) --</translation> @@ -526,7 +546,7 @@ <translation type="unfinished">-- Salattu viesti (tuntematon viestityyppi) --</translation> </message> <message numerus="yes"> - <location line="+650"/> + <location line="+660"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation> @@ -677,7 +697,7 @@ <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+48"/> + <location filename="../qml/TimelineView.qml" line="+52"/> <source>Reply</source> <translation type="unfinished"></translation> </message> @@ -971,7 +991,7 @@ <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+138"/> + <location filename="../../src/Utils.cpp" line="+141"/> <source>Yesterday</source> <translation>Eilen</translation> </message> diff --git a/resources/langs/nheko_fr.ts b/resources/langs/nheko_fr.ts index f90ff8c0f2ba765311384da7c0a8d99a83a1a873..3668e53ef8d22997afeaf10a4e57125e51a3fd0c 100644 --- a/resources/langs/nheko_fr.ts +++ b/resources/langs/nheko_fr.ts @@ -4,13 +4,13 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+225"/> + <location filename="../../src/ChatPage.cpp" line="+226"/> <source>Failed to invite user: %1</source> <translation type="unfinished"></translation> </message> <message> <location line="+4"/> - <location line="+866"/> + <location line="+888"/> <source>Invited user: %1</source> <translation type="unfinished"></translation> </message> @@ -50,12 +50,32 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-791"/> + <location line="-813"/> <source>Failed to upload media. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+404"/> + <location line="+296"/> + <source>Cache migration failed!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>Incompatible cache version</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+111"/> <source>Failed to restore OLM account. Please login again.</source> <translation type="unfinished"></translation> </message> @@ -71,7 +91,7 @@ </message> <message> <location line="+51"/> - <location line="+210"/> + <location line="+215"/> <source>Please try to login again: %1</source> <translation type="unfinished"></translation> </message> @@ -356,7 +376,7 @@ <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+2311"/> + <location filename="../../src/Cache.cpp" line="+2213"/> <source>no version stored</source> <translation type="unfinished"></translation> </message> @@ -369,7 +389,7 @@ <translation>Quitter le salon</translation> </message> <message> - <location line="+158"/> + <location line="+160"/> <source>Accept</source> <translation>Accepter</translation> </message> @@ -472,7 +492,7 @@ <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+766"/> + <location filename="../../src/timeline/TimelineModel.cpp" line="+773"/> <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> @@ -490,7 +510,7 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+89"/> + <location line="+99"/> <source>Message redaction failed: %1</source> <translation type="unfinished"></translation> </message> @@ -515,7 +535,7 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-600"/> + <location line="-610"/> <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> @@ -527,7 +547,7 @@ <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location line="+650"/> + <location line="+660"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation type="unfinished"> @@ -678,7 +698,7 @@ <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+48"/> + <location filename="../qml/TimelineView.qml" line="+52"/> <source>Reply</source> <translation type="unfinished"></translation> </message> @@ -972,7 +992,7 @@ <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+138"/> + <location filename="../../src/Utils.cpp" line="+141"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> diff --git a/resources/langs/nheko_ja.ts b/resources/langs/nheko_ja.ts index 884ca3579830987924e0853aeb6121ce3d064c60..c6f38fedbd29d67b8b85160b9d0a8b0757bd7a03 100644 --- a/resources/langs/nheko_ja.ts +++ b/resources/langs/nheko_ja.ts @@ -4,13 +4,13 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+225"/> + <location filename="../../src/ChatPage.cpp" line="+226"/> <source>Failed to invite user: %1</source> <translation>ユーザーを招待ã§ãã¾ã›ã‚“ã§ã—ãŸ: %1</translation> </message> <message> <location line="+4"/> - <location line="+866"/> + <location line="+888"/> <source>Invited user: %1</source> <translation>招待ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼: %1</translation> </message> @@ -50,12 +50,32 @@ <translation>永久追放を解除ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼: %1</translation> </message> <message> - <location line="-791"/> + <location line="-813"/> <source>Failed to upload media. Please try again.</source> <translation>メディアをアップãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã‚„ã‚Šç›´ã—ã¦ä¸‹ã•ã„。</translation> </message> <message> - <location line="+404"/> + <location line="+296"/> + <source>Cache migration failed!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>Incompatible cache version</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+111"/> <source>Failed to restore OLM account. Please login again.</source> <translation>OLMアカウントを復元ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã‚‚ã†ä¸€åº¦ãƒã‚°ã‚¤ãƒ³ã—ã¦ä¸‹ã•ã„。</translation> </message> @@ -71,7 +91,7 @@ </message> <message> <location line="+51"/> - <location line="+210"/> + <location line="+215"/> <source>Please try to login again: %1</source> <translation>ã‚‚ã†ä¸€åº¦ãƒã‚°ã‚¤ãƒ³ã—ã¦ã¿ã¦ä¸‹ã•ã„: %1</translation> </message> @@ -355,7 +375,7 @@ <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+2311"/> + <location filename="../../src/Cache.cpp" line="+2213"/> <source>no version stored</source> <translation>ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒä¿å˜ã•ã‚Œã¦ã„ã¾ã›ã‚“</translation> </message> @@ -368,7 +388,7 @@ <translation>部屋を出る</translation> </message> <message> - <location line="+158"/> + <location line="+160"/> <source>Accept</source> <translation>容èª</translation> </message> @@ -471,7 +491,7 @@ <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+766"/> + <location filename="../../src/timeline/TimelineModel.cpp" line="+773"/> <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>-- 復å·ã‚¨ãƒ©ãƒ¼ (データベースã¨é€šä¿¡ã§ãã¾ã›ã‚“ã§ã—ãŸ) --</translation> @@ -489,7 +509,7 @@ <translation type="unfinished">-- 復å·ã‚¨ãƒ©ãƒ¼ (%1) --</translation> </message> <message> - <location line="+89"/> + <location line="+99"/> <source>Message redaction failed: %1</source> <translation>メッセージを編集ã§ãã¾ã›ã‚“ã§ã—ãŸ: %1</translation> </message> @@ -514,7 +534,7 @@ <translation>ファイルをä¿å˜</translation> </message> <message> - <location line="-600"/> + <location line="-610"/> <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> @@ -526,7 +546,7 @@ <translation type="unfinished">-- æš—å·åŒ–イベント (ä¸æ˜Žãªã‚¤ãƒ™ãƒ³ãƒˆåž‹ã§ã™) --</translation> </message> <message numerus="yes"> - <location line="+650"/> + <location line="+660"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation> @@ -676,7 +696,7 @@ <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+48"/> + <location filename="../qml/TimelineView.qml" line="+52"/> <source>Reply</source> <translation type="unfinished">返信</translation> </message> @@ -970,7 +990,7 @@ <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+138"/> + <location filename="../../src/Utils.cpp" line="+141"/> <source>Yesterday</source> <translation>昨日</translation> </message> diff --git a/resources/langs/nheko_nl.ts b/resources/langs/nheko_nl.ts index 88b25e7fb700ca1bc7480cabbbcff975d7fe8103..f70e1fefc9d56027540a9c21eb0dbed91515950e 100644 --- a/resources/langs/nheko_nl.ts +++ b/resources/langs/nheko_nl.ts @@ -4,13 +4,13 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+225"/> + <location filename="../../src/ChatPage.cpp" line="+226"/> <source>Failed to invite user: %1</source> <translation type="unfinished"></translation> </message> <message> <location line="+4"/> - <location line="+866"/> + <location line="+888"/> <source>Invited user: %1</source> <translation type="unfinished"></translation> </message> @@ -50,12 +50,32 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-791"/> + <location line="-813"/> <source>Failed to upload media. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+404"/> + <location line="+296"/> + <source>Cache migration failed!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>Incompatible cache version</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+111"/> <source>Failed to restore OLM account. Please login again.</source> <translation type="unfinished"></translation> </message> @@ -71,7 +91,7 @@ </message> <message> <location line="+51"/> - <location line="+210"/> + <location line="+215"/> <source>Please try to login again: %1</source> <translation type="unfinished"></translation> </message> @@ -355,7 +375,7 @@ <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+2311"/> + <location filename="../../src/Cache.cpp" line="+2213"/> <source>no version stored</source> <translation type="unfinished"></translation> </message> @@ -368,7 +388,7 @@ <translation>Kamer verlaten</translation> </message> <message> - <location line="+158"/> + <location line="+160"/> <source>Accept</source> <translation>Accepteren</translation> </message> @@ -471,7 +491,7 @@ <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+766"/> + <location filename="../../src/timeline/TimelineModel.cpp" line="+773"/> <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> @@ -489,7 +509,7 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+89"/> + <location line="+99"/> <source>Message redaction failed: %1</source> <translation type="unfinished"></translation> </message> @@ -514,7 +534,7 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-600"/> + <location line="-610"/> <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> @@ -526,7 +546,7 @@ <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location line="+650"/> + <location line="+660"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation type="unfinished"> @@ -677,7 +697,7 @@ <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+48"/> + <location filename="../qml/TimelineView.qml" line="+52"/> <source>Reply</source> <translation type="unfinished"></translation> </message> @@ -971,7 +991,7 @@ <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+138"/> + <location filename="../../src/Utils.cpp" line="+141"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> diff --git a/resources/langs/nheko_pl.ts b/resources/langs/nheko_pl.ts index 749e172bf4bdf39f5eb7f25ef6b56218f5cfbd3a..07ecf4a4c46a41edff66ccc3074ed4044f2eaebb 100644 --- a/resources/langs/nheko_pl.ts +++ b/resources/langs/nheko_pl.ts @@ -4,13 +4,13 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+225"/> + <location filename="../../src/ChatPage.cpp" line="+226"/> <source>Failed to invite user: %1</source> <translation type="unfinished"></translation> </message> <message> <location line="+4"/> - <location line="+866"/> + <location line="+888"/> <source>Invited user: %1</source> <translation type="unfinished"></translation> </message> @@ -50,12 +50,32 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-791"/> + <location line="-813"/> <source>Failed to upload media. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+404"/> + <location line="+296"/> + <source>Cache migration failed!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>Incompatible cache version</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+111"/> <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> @@ -71,7 +91,7 @@ </message> <message> <location line="+51"/> - <location line="+210"/> + <location line="+215"/> <source>Please try to login again: %1</source> <translation>Spróbuj zalogować siÄ™ ponownie: %1</translation> </message> @@ -355,7 +375,7 @@ <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+2311"/> + <location filename="../../src/Cache.cpp" line="+2213"/> <source>no version stored</source> <translation type="unfinished"></translation> </message> @@ -368,7 +388,7 @@ <translation>Opuść pokój</translation> </message> <message> - <location line="+158"/> + <location line="+160"/> <source>Accept</source> <translation>Akceptuj</translation> </message> @@ -471,7 +491,7 @@ <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+766"/> + <location filename="../../src/timeline/TimelineModel.cpp" line="+773"/> <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> @@ -489,7 +509,7 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+89"/> + <location line="+99"/> <source>Message redaction failed: %1</source> <translation type="unfinished">Redagowanie wiadomoÅ›ci nie powiodÅ‚o siÄ™: %1</translation> </message> @@ -514,7 +534,7 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-600"/> + <location line="-610"/> <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> @@ -526,7 +546,7 @@ <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location line="+650"/> + <location line="+660"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation type="unfinished"> @@ -678,7 +698,7 @@ <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+48"/> + <location filename="../qml/TimelineView.qml" line="+52"/> <source>Reply</source> <translation type="unfinished"></translation> </message> @@ -972,7 +992,7 @@ <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+138"/> + <location filename="../../src/Utils.cpp" line="+141"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> diff --git a/resources/langs/nheko_ru.ts b/resources/langs/nheko_ru.ts index 05240613596baed900ad924363881ffa96f5969c..25abbe40a35b70dfce6d1fd3b6a5c0ebb3097ab3 100644 --- a/resources/langs/nheko_ru.ts +++ b/resources/langs/nheko_ru.ts @@ -4,13 +4,13 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+225"/> + <location filename="../../src/ChatPage.cpp" line="+226"/> <source>Failed to invite user: %1</source> <translation type="unfinished"></translation> </message> <message> <location line="+4"/> - <location line="+866"/> + <location line="+888"/> <source>Invited user: %1</source> <translation type="unfinished"></translation> </message> @@ -50,12 +50,32 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-791"/> + <location line="-813"/> <source>Failed to upload media. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+404"/> + <location line="+296"/> + <source>Cache migration failed!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>Incompatible cache version</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+111"/> <source>Failed to restore OLM account. Please login again.</source> <translation>Ðе удалоÑÑŒ воÑÑтановить учетную запиÑÑŒ OLM. ПожалуйÑта, войдите Ñнова.</translation> </message> @@ -71,7 +91,7 @@ </message> <message> <location line="+51"/> - <location line="+210"/> + <location line="+215"/> <source>Please try to login again: %1</source> <translation>Повторите попытку входа: %1</translation> </message> @@ -355,7 +375,7 @@ <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+2311"/> + <location filename="../../src/Cache.cpp" line="+2213"/> <source>no version stored</source> <translation type="unfinished"></translation> </message> @@ -368,7 +388,7 @@ <translation>Покинуть комнату</translation> </message> <message> - <location line="+158"/> + <location line="+160"/> <source>Accept</source> <translation>ПринÑÑ‚ÑŒ</translation> </message> @@ -471,7 +491,7 @@ <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+766"/> + <location filename="../../src/timeline/TimelineModel.cpp" line="+773"/> <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> @@ -489,7 +509,7 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+89"/> + <location line="+99"/> <source>Message redaction failed: %1</source> <translation type="unfinished">Ошибка Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑообщениÑ: %1</translation> </message> @@ -514,7 +534,7 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-600"/> + <location line="-610"/> <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> @@ -526,7 +546,7 @@ <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location line="+650"/> + <location line="+660"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation type="unfinished"> @@ -678,7 +698,7 @@ <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+48"/> + <location filename="../qml/TimelineView.qml" line="+52"/> <source>Reply</source> <translation type="unfinished"></translation> </message> @@ -973,7 +993,7 @@ <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+138"/> + <location filename="../../src/Utils.cpp" line="+141"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> diff --git a/resources/langs/nheko_zh_CN.ts b/resources/langs/nheko_zh_CN.ts index b6fe6d1d7216b80fa05c968d4c4287c6e9c06bc9..ddd8c01739e3a98d064f97300ba5ed769b6e1b36 100644 --- a/resources/langs/nheko_zh_CN.ts +++ b/resources/langs/nheko_zh_CN.ts @@ -4,13 +4,13 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+225"/> + <location filename="../../src/ChatPage.cpp" line="+226"/> <source>Failed to invite user: %1</source> <translation type="unfinished"></translation> </message> <message> <location line="+4"/> - <location line="+866"/> + <location line="+888"/> <source>Invited user: %1</source> <translation type="unfinished"></translation> </message> @@ -50,12 +50,32 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-791"/> + <location line="-813"/> <source>Failed to upload media. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+404"/> + <location line="+296"/> + <source>Cache migration failed!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>Incompatible cache version</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+111"/> <source>Failed to restore OLM account. Please login again.</source> <translation>æ¢å¤ OLM 账户失败。请é‡æ–°ç™»å½•ã€‚</translation> </message> @@ -71,7 +91,7 @@ </message> <message> <location line="+51"/> - <location line="+210"/> + <location line="+215"/> <source>Please try to login again: %1</source> <translation>请å°è¯•å†æ¬¡ç™»å½•ï¼š%1</translation> </message> @@ -355,7 +375,7 @@ <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+2311"/> + <location filename="../../src/Cache.cpp" line="+2213"/> <source>no version stored</source> <translation type="unfinished"></translation> </message> @@ -368,7 +388,7 @@ <translation>离开èŠå¤©å®¤</translation> </message> <message> - <location line="+158"/> + <location line="+160"/> <source>Accept</source> <translation>接å—</translation> </message> @@ -471,7 +491,7 @@ <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+766"/> + <location filename="../../src/timeline/TimelineModel.cpp" line="+773"/> <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> @@ -489,7 +509,7 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+89"/> + <location line="+99"/> <source>Message redaction failed: %1</source> <translation type="unfinished">åˆ é™¤æ¶ˆæ¯å¤±è´¥ï¼š%1</translation> </message> @@ -514,7 +534,7 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-600"/> + <location line="-610"/> <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> @@ -526,7 +546,7 @@ <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location line="+650"/> + <location line="+660"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation type="unfinished"> @@ -676,7 +696,7 @@ <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+48"/> + <location filename="../qml/TimelineView.qml" line="+52"/> <source>Reply</source> <translation type="unfinished"></translation> </message> @@ -970,7 +990,7 @@ <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+138"/> + <location filename="../../src/Utils.cpp" line="+141"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> diff --git a/src/Cache.cpp b/src/Cache.cpp index eb5c93aac5a5d1d7d82d59bc3a49deb13d17e041..1ae7a846a095544adeed79277c7056f1e3d433a0 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -36,7 +36,7 @@ //! Should be changed when a breaking change occurs in the cache format. //! This will reset client's data. -static const std::string CURRENT_CACHE_FORMAT_VERSION("2018.09.21"); +static const std::string CURRENT_CACHE_FORMAT_VERSION("2020.05.01"); static const std::string SECRET("secret"); static lmdb::val NEXT_BATCH_KEY("next_batch"); @@ -665,8 +665,9 @@ Cache::deleteData() } } +//! migrates db to the current format bool -Cache::isFormatValid() +Cache::runMigrations() { auto txn = lmdb::txn::begin(env_, nullptr, MDB_RDONLY); @@ -680,16 +681,61 @@ Cache::isFormatValid() std::string stored_version(current_version.data(), current_version.size()); - if (stored_version != CURRENT_CACHE_FORMAT_VERSION) { - nhlog::db()->warn("breaking changes in the cache format. stored: {}, current: {}", - stored_version, - CURRENT_CACHE_FORMAT_VERSION); - return false; + std::vector<std::pair<std::string, std::function<bool()>>> migrations{ + {"2020.05.01", + [this]() { + try { + auto txn = lmdb::txn::begin(env_, nullptr); + auto pending_receipts = + lmdb::dbi::open(txn, "pending_receipts", MDB_CREATE); + lmdb::dbi_drop(txn, pending_receipts, true); + txn.commit(); + } catch (const lmdb::error &) { + nhlog::db()->critical( + "Failed to delete pending_receipts database in migration!"); + return false; + } + + nhlog::db()->info("Successfully deleted pending receipts database."); + return true; + }}, + }; + + for (const auto &[target_version, migration] : migrations) { + if (target_version > stored_version) + if (!migration()) { + nhlog::db()->critical("migration failure!"); + return false; + } } + setCurrentFormat(); return true; } +cache::CacheVersion +Cache::formatVersion() +{ + auto txn = lmdb::txn::begin(env_, nullptr, MDB_RDONLY); + + lmdb::val current_version; + bool res = lmdb::dbi_get(txn, syncStateDb_, CACHE_FORMAT_VERSION_KEY, current_version); + + txn.commit(); + + if (!res) + return cache::CacheVersion::Older; + + std::string stored_version(current_version.data(), current_version.size()); + + if (stored_version < CURRENT_CACHE_FORMAT_VERSION) + return cache::CacheVersion::Older; + else if (stored_version > CURRENT_CACHE_FORMAT_VERSION) + return cache::CacheVersion::Older; + else + return cache::CacheVersion::Current; +} + void Cache::setCurrentFormat() { @@ -2468,10 +2514,17 @@ setup() } bool -isFormatValid() +runMigrations() { - return instance_->isFormatValid(); + return instance_->runMigrations(); } + +cache::CacheVersion +formatVersion() +{ + return instance_->formatVersion(); +} + void setCurrentFormat() { diff --git a/src/Cache.h b/src/Cache.h index 99c63550f5770b7ff7d31afb06b6c86d8078f6b3..12465c9d60744ae8d39e0b1a07a63570019d55ed 100644 --- a/src/Cache.h +++ b/src/Cache.h @@ -111,10 +111,15 @@ removeRoom(const QString &roomid); void setup(); -bool -isFormatValid(); +//! returns if the format is current, older or newer +cache::CacheVersion +formatVersion(); +//! set the format version to the current version void setCurrentFormat(); +//! migrates db to the current format +bool +runMigrations(); std::map<QString, mtx::responses::Timeline> roomMessages(); diff --git a/src/CacheStructs.h b/src/CacheStructs.h index ab7bbc71a84ca387be5b3fe275492c2665c6e1d1..ef08cfcbe25a50af18fe8b3da81fea4b2dd8d274 100644 --- a/src/CacheStructs.h +++ b/src/CacheStructs.h @@ -8,6 +8,15 @@ #include <mtx/events/join_rules.hpp> +namespace cache { +enum class CacheVersion : int +{ + Older = -1, + Current = 0, + Newer = 1, +}; +} + struct RoomMember { QString user_id; diff --git a/src/Cache_p.h b/src/Cache_p.h index 982099eaa932d508f6f2a403170e15ced3ffb034..0d66a608123529755626e5f50ef9e9700b34eee9 100644 --- a/src/Cache_p.h +++ b/src/Cache_p.h @@ -102,8 +102,9 @@ public: void removeRoom(const std::string &roomid); void setup(); - bool isFormatValid(); + cache::CacheVersion formatVersion(); void setCurrentFormat(); + bool runMigrations(); std::map<QString, mtx::responses::Timeline> roomMessages(); diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 981e6b80b29318799b90beb8f322f7892538c387..689e9ca4a022500458931380e9d3b254c5f49889 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -17,6 +17,7 @@ #include <QApplication> #include <QImageReader> +#include <QMessageBox> #include <QSettings> #include <QShortcut> #include <QtConcurrent> @@ -642,20 +643,37 @@ ChatPage::bootstrap(QString userid, QString homeserver, QString token) &NotificationsManager::removeNotification); const bool isInitialized = cache::isInitialized(); - const bool isValid = cache::isFormatValid(); + const auto cacheVersion = cache::formatVersion(); if (!isInitialized) { cache::setCurrentFormat(); - } else if (isInitialized && !isValid) { - // TODO: Deleting session data but keep using the - // same device doesn't work. - cache::deleteData(); - - cache::init(userid); - cache::setCurrentFormat(); - } else if (isInitialized) { - loadStateFromCache(); - return; + } else { + if (cacheVersion == cache::CacheVersion::Current) { + loadStateFromCache(); + return; + } else if (cacheVersion == cache::CacheVersion::Older) { + if (!cache::runMigrations()) { + QMessageBox::critical( + this, + tr("Cache migration failed!"), + tr("Migrating the cache to the current version failed. " + "This can have different reasons. Please open an " + "issue and try to use an older version in the mean " + "time. Alternatively you can try deleting the cache " + "manually")); + QCoreApplication::quit(); + } + loadStateFromCache(); + return; + } else if (cacheVersion == cache::CacheVersion::Newer) { + QMessageBox::critical( + this, + tr("Incompatible cache version"), + tr("The cache on your disk is newer than this version of Nheko " + "supports. Please update or clear your cache.")); + QCoreApplication::quit(); + return; + } } } catch (const lmdb::error &e) {