Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F54571892
D290.1774986110.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
6 KB
Referenced Files
None
Subscribers
None
D290.1774986110.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D290: Enable open cached file in external application
Attached
Detach File
Event Timeline
Log In to Comment