Page MenuHomePhorge

D124.1732569387.diff
No OneTemporary

Size
9 KB
Referenced Files
None
Subscribers
None

D124.1732569387.diff

diff --git a/src/contents/ui/main.qml b/src/contents/ui/main.qml
--- a/src/contents/ui/main.qml
+++ b/src/contents/ui/main.qml
@@ -227,17 +227,42 @@
return userId + '/' + deviceId;
}
+ function getSessionLoadError(res, sessionName) {
+ switch (res) {
+ case MK.MatrixSdk.SessionNotFound:
+ return l10n.get('session-load-failure-not-found', { sessionName });
+
+ case MK.MatrixSdk.SessionFormatUnknown:
+ return l10n.get('session-load-failure-format-unknown', { sessionName });
+
+ case MK.MatrixSdk.SessionCannotBackup:
+ return l10n.get('session-load-failure-cannot-backup', { sessionName });
+
+ case MK.MatrixSdk.SessionLockFailed:
+ return l10n.get('session-load-failure-lock-failed', { sessionName });
+
+ case MK.MatrixSdk.SessionCannotOpenFile:
+ return l10n.get('session-load-failure-cannot-open-file', { sessionName });
+
+ case MK.MatrixSdk.SessionDeserializeFailed:
+ return l10n.get('session-load-failure-deserialize-failed', { sessionName });
+
+ default:
+ console.error('loadSession: Encountered an unknown error code');
+ }
+ }
+
function loadSession(sessionName) {
- const succ = matrixSdk.loadSession(sessionName);
+ const res = matrixSdk.loadSession(sessionName);
- if (succ) {
+ if (res === MK.MatrixSdk.SessionLoadSuccess) {
console.log('load session successful');
switchToMainPage();
recordLastSession();
} else {
- console.log('load session failed');
+ showPassiveNotification(getSessionLoadError(res, sessionName));
}
- return succ;
+ return res;
}
function loadLastSession() {
diff --git a/src/l10n/cmn-Hans/100-ui.ftl b/src/l10n/cmn-Hans/100-ui.ftl
--- a/src/l10n/cmn-Hans/100-ui.ftl
+++ b/src/l10n/cmn-Hans/100-ui.ftl
@@ -41,6 +41,13 @@
login-page-request-failed-prompt = 登录失败。错误代码:{ $errorCode }。错误讯息:{ $errorMsg }。
login-page-discover-failed-prompt = 不能检测此用户所在的服务器,或者服务器不可用。错误代码:{ $errorCode }。错误讯息:{ $errorMsg }。
+session-load-failure-not-found = 找不到会话 { $sessionName }。
+session-load-failure-format-unknown = 会话 { $sessionName } 包含不支持的格式。是由未来版本的 { -kt-app-name } 保存的吗?
+session-load-failure-cannot-backup = 无法备份会话 { $sessionName }。
+session-load-failure-lock-failed = 会话 { $sessionName } 正在被别的程序使用。
+session-load-failure-cannot-open-file = 无法打开会话 { $sessionName } 的存档文件。
+session-load-failure-deserialize-failed = 无法打开会话 { $sessionName }。是被损坏了或者是由未来版本的 { -kt-app-name } 保存的吗?
+
main-page-title = { -kt-app-name } - { $userId }
main-page-recent-tab-title = 最近
main-page-favourites-tab-title = 最爱
diff --git a/src/l10n/en/100-ui.ftl b/src/l10n/en/100-ui.ftl
--- a/src/l10n/en/100-ui.ftl
+++ b/src/l10n/en/100-ui.ftl
@@ -41,6 +41,13 @@
login-page-request-failed-prompt = Login failed. Error code: { $errorCode }. Error message: { $errorMsg }.
login-page-discover-failed-prompt = Unable to detect the server this user is on, or the server is unavailable. Error code: { $errorCode }. Error message: { $errorMsg }.
+session-load-failure-not-found = The session { $sessionName } is not found.
+session-load-failure-format-unknown = The session { $sessionName } contains an unsupported format. Is it saved using a future version of { -kt-app-name }?
+session-load-failure-cannot-backup = Cannot make a backup of the session { $sessionName }.
+session-load-failure-lock-failed = The session { $sessionName } is being used by another program.
+session-load-failure-cannot-open-file = Unable to open the store file for the session { $sessionName }.
+session-load-failure-deserialize-failed = The session { $sessionName } cannot be opened. Is it corrupted or saved using a future version of { -kt-app-name }?
+
main-page-title = { -kt-app-name } - { $userId }
main-page-recent-tab-title = Recent
main-page-favourites-tab-title = Favourites
diff --git a/src/matrix-sdk.hpp b/src/matrix-sdk.hpp
--- a/src/matrix-sdk.hpp
+++ b/src/matrix-sdk.hpp
@@ -61,6 +61,25 @@
Q_ENUM(CreateRoomPreset);
+ enum LoadSessionResult {
+ /// Successfully loaded the session
+ SessionLoadSuccess,
+ /// There is no store file
+ SessionNotFound,
+ /// The format of the store file is not supported
+ SessionFormatUnknown,
+ /// The store file cannot be backed up
+ SessionCannotBackup,
+ /// Cannot grab the lock on the session file
+ SessionLockFailed,
+ /// Cannot open store file
+ SessionCannotOpenFile,
+ /// Cannot deserialize the store file
+ SessionDeserializeFailed,
+ };
+
+ Q_ENUM(LoadSessionResult);
+
explicit MatrixSdk(QObject *parent = 0);
~MatrixSdk() override;
@@ -109,7 +128,7 @@
*
* @return true if successful, false otherwise.
*/
- bool loadSession(QString sessionName);
+ LoadSessionResult loadSession(QString sessionName);
/**
* Start an empty session.
diff --git a/src/matrix-sdk.cpp b/src/matrix-sdk.cpp
--- a/src/matrix-sdk.cpp
+++ b/src/matrix-sdk.cpp
@@ -447,7 +447,7 @@
m_d->maybeSerialize();
}
-bool MatrixSdk::loadSession(QString sessionName)
+auto MatrixSdk::loadSession(QString sessionName) -> LoadSessionResult
{
using StdPath = std::filesystem::path;
std::unique_ptr<KazvSessionLockGuard> lockGuard;
@@ -458,7 +458,7 @@
if (! std::filesystem::exists(storeFile)) {
qDebug() << "storeFile does not exist, skip loading session " << sessionName;
- return false;
+ return SessionNotFound;
}
if (std::filesystem::exists(metadataFile)) {
@@ -467,7 +467,7 @@
auto format = mdGroup.readEntry("archiveFormat");
if (format != QStringLiteral("text")) {
qDebug() << "Unknown archive format:" << format;
- return false;
+ return SessionFormatUnknown;
}
auto version = mdGroup.readEntry("kazvVersion");
auto curVersion = kazvVersionString();
@@ -481,7 +481,7 @@
if (! std::filesystem::create_directories(backupDir, err)
&& err) {
qDebug() << "Cannot create backup directory";
- return false;
+ return SessionCannotBackup;
}
std::filesystem::copy_file(storeFile, backupDir / "store");
std::filesystem::copy_file(metadataFile, backupDir / "metadata");
@@ -493,7 +493,7 @@
auto storeStream = std::ifstream(storeFile);
if (! storeStream) {
qDebug() << "Unable to open storeFile";
- return false;
+ return SessionCannotOpenFile;
}
using IAr = boost::archive::text_iarchive;
auto archive = IAr{storeStream};
@@ -501,10 +501,10 @@
qDebug() << "Finished loading session";
} catch (const std::exception &e) {
qDebug() << "Error when loading session:" << QString::fromStdString(e.what());
- return false;
+ return SessionDeserializeFailed;
}
emplace(std::move(model), std::move(lockGuard));
- return true;
+ return SessionLoadSuccess;
};
qDebug() << "in loadSession(), sessionName=" << sessionName;
@@ -519,12 +519,12 @@
lockGuard = std::make_unique<KazvSessionLockGuard>(sessionDir);
} catch (const std::runtime_error &e) {
qCWarning(kazvLog) << "Error locking session: " << e.what();
- return false;
+ return SessionLockFailed;
}
return loadFromSession(sessionDir);
}
qDebug(kazvLog) << "no session found for" << sessionName;
- return false;
+ return SessionNotFound;
}
bool MatrixSdk::startNewSession()
diff --git a/src/tests/matrix-sdk-session-loader.cpp b/src/tests/matrix-sdk-session-loader.cpp
--- a/src/tests/matrix-sdk-session-loader.cpp
+++ b/src/tests/matrix-sdk-session-loader.cpp
@@ -15,9 +15,9 @@
std::string sessionName = argv[2];
auto sdk = MatrixSdkSessionsTest::makeMatrixSdkImpl(userDataDir);
auto res = sdk->loadSession(QString::fromStdString(sessionName));
- if (!res) {
+ if (res != MatrixSdk::SessionLoadSuccess) {
std::cout << "cannot load session" << std::endl;
- return 1;
+ return res == MatrixSdk::SessionLockFailed ? 1 : 2;
}
std::cout << "loaded session" << std::endl;
diff --git a/src/tests/matrix-sdk-sessions-test.cpp b/src/tests/matrix-sdk-sessions-test.cpp
--- a/src/tests/matrix-sdk-sessions-test.cpp
+++ b/src/tests/matrix-sdk-sessions-test.cpp
@@ -101,7 +101,7 @@
auto sdk = makeMatrixSdk();
auto res = sdk->loadSession("@mew:example.com/device4");
- QVERIFY(res);
+ QCOMPARE(res, MatrixSdk::SessionLoadSuccess);
QCOMPARE(sdk->userId(), QStringLiteral("@mew:example.com"));
QCOMPARE(sdk->deviceId(), QStringLiteral("device4"));
}

File Metadata

Mime Type
text/plain
Expires
Mon, Nov 25, 1:16 PM (13 h, 32 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
39897
Default Alt Text
D124.1732569387.diff (9 KB)

Event Timeline