From b37909a2c8d2a840ff0693a9a6dc7d6f01a8a4ec Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Mon, 9 Sep 2024 23:15:45 +0200 Subject: [PATCH] Mark files as being downloaded from the web on Windows --- src/MxcImageProvider.cpp | 6 ++++-- src/Utils.cpp | 16 ++++++++++++++++ src/Utils.h | 3 +++ src/main.cpp | 1 - src/timeline/TimelineModel.cpp | 1 + src/timeline/TimelineViewManager.cpp | 1 + 6 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/MxcImageProvider.cpp b/src/MxcImageProvider.cpp index fee6f360..d4dd2f16 100644 --- a/src/MxcImageProvider.cpp +++ b/src/MxcImageProvider.cpp @@ -279,9 +279,10 @@ MxcImageProvider::download(const QString &id, } } image.setText(QStringLiteral("mxc url"), "mxc://" + id); - if (image.save(fileInfo.absoluteFilePath(), "png")) + if (image.save(fileInfo.absoluteFilePath(), "png")) { + utils::markFileAsFromWeb(fileInfo.absoluteFilePath()); nhlog::ui()->debug("Wrote: {}", fileInfo.absoluteFilePath().toStdString()); - else + } else nhlog::ui()->debug("Failed to write: {}", fileInfo.absoluteFilePath().toStdString()); @@ -356,6 +357,7 @@ MxcImageProvider::download(const QString &id, } f.write(tempData.data(), tempData.size()); f.close(); + utils::markFileAsFromWeb(fileInfo.absoluteFilePath()); if (encryptionInfo) { tempData = mtx::crypto::to_string( diff --git a/src/Utils.cpp b/src/Utils.cpp index 1e34d7a4..2bec9d36 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -2230,3 +2231,18 @@ utils::parseMatrixUri(QString uri) .vias = std::move(vias), }; } + +void +utils::markFileAsFromWeb(const QString &path [[maybe_unused]]) +{ +#ifdef Q_OS_WINDOWS + QFile file(path + ":Zone.Identifier"); + if (!file.open(QIODevice::Truncate | QIODevice::WriteOnly)) { + nhlog::net()->error("Failed to open alternate stream for {}", path.toStdString()); + return; + } + + file.write("[ZoneTransfer]\nZoneId=3"); + file.close(); +#endif +} diff --git a/src/Utils.h b/src/Utils.h index a3b39978..7f6f5466 100644 --- a/src/Utils.h +++ b/src/Utils.h @@ -215,4 +215,7 @@ struct MatrixUriParseResult std::optional parseMatrixUri(QString uri); + +void +markFileAsFromWeb(const QString &file); } diff --git a/src/main.cpp b/src/main.cpp index c156aa82..bab710c6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,7 +8,6 @@ #include #include #include -#include #include #include #include diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index 06ce0d94..d5645ac4 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -1990,6 +1990,7 @@ TimelineModel::saveMedia(const QString &eventId) const file.write(QByteArray(temp.data(), (int)temp.size())); file.close(); + utils::markFileAsFromWeb(filename); return; } catch (const std::exception &e) { diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp index 1b2635b0..389f34f7 100644 --- a/src/timeline/TimelineViewManager.cpp +++ b/src/timeline/TimelineViewManager.cpp @@ -369,6 +369,7 @@ TimelineViewManager::saveMedia(QString mxcUrl) file.write(QByteArray(data.data(), (int)data.size())); file.close(); + utils::markFileAsFromWeb(filename); return; } catch (const std::exception &e) {