Page MenuHomePhorge

D290.1774986110.diff
No OneTemporary

Size
6 KB
Referenced Files
None
Subscribers
None

D290.1774986110.diff

diff --git a/src/contents/ui/FileHandler.qml b/src/contents/ui/FileHandler.qml
--- a/src/contents/ui/FileHandler.qml
+++ b/src/contents/ui/FileHandler.qml
@@ -53,6 +53,7 @@
}
function downloadFile(saveFileUrl) {
+ fileHandler.result = undefined;
const file = getFile();
if (!file) {
return;
@@ -61,11 +62,12 @@
const mediaId = getMediaId(file.mxcUri);
kazvIOManager.startNewDownloadJob(mxcToHttp(file.mxcUri), saveFileUrl, mediaId,
file.sha256, token, file.key, file.iv);
- fileHandler.updateKazvIOJob(mediaId);
+ fileHandler.updateKazvIOJob(mediaId, false);
fileHandler.startDownload();
}
function cacheFile() {
+ fileHandler.result = undefined;
const file = getThumbnail() || getFile();
if (!file) {
console.error('No valid file to cache');
@@ -73,14 +75,17 @@
}
const mediaId = getMediaId(file.mxcUri);
- fileHandler.cachedFile = kazvIOManager.cacheFile(mxcToHttp(file.mxcUri), mediaId,
- file.sha256, token, file.key, file.iv);
- fileHandler.updateKazvIOJob(mediaId);
+ const cachedFile = kazvIOManager.cacheFile(
+ mxcToHttp(file.mxcUri), mediaId,
+ file.sha256, token, file.key, file.iv);
+ fileHandler.cachedFile = cachedFile;
+ fileHandler.updateKazvIOJob(mediaId, true);
+ return cachedFile;
}
- function updateKazvIOJob(mediaId) {
+ function updateKazvIOJob(mediaId, isCache) {
fileHandler.kazvIOJob = null
- if (fileHandler.autoCache) {
+ if (isCache) {
fileHandler.kazvIOJob = fileHandler.kazvIOManager.getCacheJob(mediaId)
} else {
fileHandler.kazvIOJob = fileHandler.kazvIOManager.getDownloadJob(mediaId)
@@ -134,13 +139,31 @@
})
}
+ // Cache file and then open it
+ function openFile() {
+ const kazvIOManager = fileHandler.kazvIOManager;
+ const filePath = this.cacheFile();
+ if (kazvIOManager.fileExists(filePath)) {
+ Qt.openUrlExternally(filePath);
+ return;
+ }
+
+ this.kazvIOJob.result.connect((ec, data) => {
+ if (ec == MK.KazvIOBaseJob.NoError) {
+ Qt.openUrlExternally(filePath);
+ } else {
+ showPassiveNotification(kazvIOManager.jobResultL10nMsg(ec, false));
+ }
+ });
+ }
+
onEventContentChanged: {
if (fileHandler.autoCache) {
fileHandler.cacheFile();
} else {
// Check if the file is downloading
const mediaId = getMediaId(getFile()?.mxcUri || "");
- fileHandler.updateKazvIOJob(mediaId);
+ fileHandler.updateKazvIOJob(mediaId, autoCache);
fileHandler.onSuccessChanged.connect(function () {
fileHandler.kazvIOManager.deleteDownloadJob(mediaId);
});
diff --git a/src/contents/ui/KazvIOMenu.qml b/src/contents/ui/KazvIOMenu.qml
--- a/src/contents/ui/KazvIOMenu.qml
+++ b/src/contents/ui/KazvIOMenu.qml
@@ -52,17 +52,7 @@
return
}
- let resultL10nId = isUpload ? 'kazv-io-upload-failure-prompt' : 'kazv-io-download-failure-prompt'
- let detailL10nId = new Map([
- [MK.KazvIOBaseJob.UserCancel, 'kazv-io-failure-detail-user-cancel'],
- [MK.KazvIOBaseJob.OpenFileError, 'kazv-io-failure-detail-open-file-error'],
- [MK.KazvIOBaseJob.WriteFileError, 'kazv-io-failure-detail-write-file-error'],
- [MK.KazvIOBaseJob.KIOError, 'kazv-io-failure-detail-network-error'],
- [MK.KazvIOBaseJob.HashError, 'kazv-io-failure-detail-hash-error'],
- [MK.KazvIOBaseJob.ResponseError, 'kazv-io-failure-detail-response-error'],
- [MK.KazvIOBaseJob.KazvError, 'kazv-io-failure-detail-kazv-error']
- ])
- resultMsg.text = l10n.get(resultL10nId, {detail: l10n.get(detailL10nId.get(ec))})
+ resultMsg.text = kazvIOManager.jobResultL10nMsg(ec, isUpload);
}
}
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
@@ -20,6 +20,20 @@
property var kazvIOManager: MK.KazvIOManager {
cacheDirectory: kazvConfig.cacheDirectory
+
+ function jobResultL10nMsg(ec: MK.KazvIOBaseJob.ErrorCode, isUpload: bool): string {
+ const resultL10nId = isUpload ? 'kazv-io-upload-failure-prompt' : 'kazv-io-download-failure-prompt'
+ const detailL10nId = new Map([
+ [MK.KazvIOBaseJob.UserCancel, 'kazv-io-failure-detail-user-cancel'],
+ [MK.KazvIOBaseJob.OpenFileError, 'kazv-io-failure-detail-open-file-error'],
+ [MK.KazvIOBaseJob.WriteFileError, 'kazv-io-failure-detail-write-file-error'],
+ [MK.KazvIOBaseJob.KIOError, 'kazv-io-failure-detail-network-error'],
+ [MK.KazvIOBaseJob.HashError, 'kazv-io-failure-detail-hash-error'],
+ [MK.KazvIOBaseJob.ResponseError, 'kazv-io-failure-detail-response-error'],
+ [MK.KazvIOBaseJob.KazvError, 'kazv-io-failure-detail-kazv-error']
+ ]);
+ return l10n.get(resultL10nId, {detail: l10n.get(detailL10nId.get(ec))});
+ }
}
property bool loadingSession: false
diff --git a/src/contents/ui/MediaFileMenu.qml b/src/contents/ui/MediaFileMenu.qml
--- a/src/contents/ui/MediaFileMenu.qml
+++ b/src/contents/ui/MediaFileMenu.qml
@@ -33,8 +33,7 @@
property var viewAction: Kirigami.Action {
text: l10n.get('media-file-menu-option-view')
onTriggered: {
- fileHandler.cacheFile()
- Qt.openUrlExternally(fileHandler.cachedFile)
+ fileHandler.openFile();
}
}
diff --git a/src/kazv-io-manager.hpp b/src/kazv-io-manager.hpp
--- a/src/kazv-io-manager.hpp
+++ b/src/kazv-io-manager.hpp
@@ -69,6 +69,7 @@
Q_INVOKABLE void deleteRoomlessUploadJob(KazvIOBaseJob *job);
Q_INVOKABLE void deleteModelIfEmpty(const QString &roomId);
Q_INVOKABLE void clearJobs();
+ Q_INVOKABLE bool fileExists(const QUrl &filePath) const;
QString cacheDirectory() const;
void setCacheDirectory(QString cacheDirectory);
diff --git a/src/kazv-io-manager.cpp b/src/kazv-io-manager.cpp
--- a/src/kazv-io-manager.cpp
+++ b/src/kazv-io-manager.cpp
@@ -229,3 +229,8 @@
m_d->downloadJobs.clear();
Q_EMIT cacheDirectoryChanged();
}
+
+bool KazvIOManager::fileExists(const QUrl &filePath) const
+{
+ return QFile(filePath.toLocalFile()).exists();
+}

File Metadata

Mime Type
text/plain
Expires
Tue, Mar 31, 12:41 PM (9 h, 54 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1259765
Default Alt Text
D290.1774986110.diff (6 KB)

Event Timeline