From 551f5c3c18dec34318918f4ce61b5c305c3b059b Mon Sep 17 00:00:00 2001 From: Alexander Bilyak Date: Fri, 19 Nov 2021 09:40:02 +0000 Subject: [PATCH] GODT-1412: Refactor paths and links --- internal/frontend/qml/Bridge_test.qml | 20 ++++++++----- internal/frontend/qml/BugReportView.qml | 2 +- internal/frontend/qml/HelpView.qml | 4 +-- internal/frontend/qml/LocalCacheSettings.qml | 18 +++++------- .../qml/Notifications/Notifications.qml | 2 +- internal/frontend/qml/SettingsItem.qml | 2 ++ internal/frontend/qt/frontend.go | 4 +-- internal/frontend/qt/frontend_help.go | 10 +++++-- internal/frontend/qt/frontend_settings.go | 17 +++++++---- internal/frontend/qt/qml_backend.go | 28 +++++++++---------- 10 files changed, 61 insertions(+), 46 deletions(-) diff --git a/internal/frontend/qml/Bridge_test.qml b/internal/frontend/qml/Bridge_test.qml index 962e81f8..9e48c00e 100644 --- a/internal/frontend/qml/Bridge_test.qml +++ b/internal/frontend/qml/Bridge_test.qml @@ -23,6 +23,8 @@ import QtQuick.Controls 2.13 import QtQml.Models 2.12 +import Qt.labs.platform 1.1 + import Proton 4.0 import "./BridgeTest" @@ -630,11 +632,13 @@ Window { TextField { colorScheme:root.colorScheme label: "Path" - text: root.diskCachePath + text: root.diskCachePath.toString().replace("file://", "") implicitWidth: 160 - onEditingFinished: root.diskCachePath = this.text + onEditingFinished: { + root.diskCachePath = Qt.resolvedUrl("file://"+text) + } } - Button {colorScheme: root.colorScheme; text: "Change finished:"; onClicked: root.changeLocalCacheFinished()} + Button {colorScheme: root.colorScheme; text: "Change finished"; onClicked: root.changeLocalCacheFinished()} } RowLayout { Label {colorScheme: root.colorScheme; text: "Reset:"} @@ -686,7 +690,8 @@ Window { property bool isDiskCacheEnabled: true - property string diskCachePath: "/home/bridge" + // Qt.resolvedUrl("file:///C:/Users/user/AppData/Roaming/protonmail/bridge/cache/c11/messages") + property url diskCachePath: StandardPaths.standardLocations(StandardPaths.HomeLocation)[0] signal cacheUnavailable() signal cacheCantMove() signal cacheLocationChangeSuccess() @@ -749,10 +754,11 @@ Window { } signal resetFinished() - property string logsPath: "/home/cuto" // StandardPaths.locate(StandardPaths.DesktopLocation) property string version: "2.0.X-BridePreview" - property string licensePath: "/home/cuto" // StandardPaths.locate(StandardPaths.DesktopLocation) - property string releaseNotesLink: "https://protonmail.com/download/bridge/early_releases.html" + property url logsPath: StandardPaths.standardLocations(StandardPaths.HomeLocation)[0] + property url licensePath: StandardPaths.standardLocations(StandardPaths.HomeLocation)[0] + property url releaseNotesLink: Qt.resolvedUrl("https://protonmail.com/download/bridge/early_releases.html") + property url landingPageLink: Qt.resolvedUrl("https://protonmail.com/bridge") property string currentEmailClient: "" // "Apple Mail 14.0" function updateCurrentMailClient(){ diff --git a/internal/frontend/qml/BugReportView.qml b/internal/frontend/qml/BugReportView.qml index 7e6cc4f4..fe4ee8bf 100644 --- a/internal/frontend/qml/BugReportView.qml +++ b/internal/frontend/qml/BugReportView.qml @@ -122,7 +122,7 @@ SettingsView { text: qsTr("View logs") secondary: true colorScheme: root.colorScheme - onClicked: Qt.openUrlExternally("file://"+root.backend.logsPath) + onClicked: Qt.openUrlExternally(root.backend.logsPath) } } diff --git a/internal/frontend/qml/HelpView.qml b/internal/frontend/qml/HelpView.qml index a3ec8ec4..0e83559e 100644 --- a/internal/frontend/qml/HelpView.qml +++ b/internal/frontend/qml/HelpView.qml @@ -70,7 +70,7 @@ SettingsView { actionText: qsTr("View logs") description: qsTr("Open and review logs to troubleshoot.") type: SettingsItem.Button - onClicked: {Qt.openUrlExternally("file://"+root.backend.logsPath)} + onClicked: Qt.openUrlExternally(root.backend.logsPath) Layout.fillWidth: true } @@ -108,7 +108,7 @@ SettingsView { text: qsTr("Proton Mail Bridge v%1
© 2021 Proton AG
%2 %3"). arg(root.backend.version). - arg(link("file://"+root.backend.licensePath, qsTr("License"))). + arg(link(root.backend.licensePath, qsTr("License"))). arg(link(root.backend.releaseNotesLink, qsTr("Release notes"))) onLinkActivated: Qt.openUrlExternally(link) diff --git a/internal/frontend/qml/LocalCacheSettings.qml b/internal/frontend/qml/LocalCacheSettings.qml index efd95242..06ed20f0 100644 --- a/internal/frontend/qml/LocalCacheSettings.qml +++ b/internal/frontend/qml/LocalCacheSettings.qml @@ -30,7 +30,7 @@ SettingsView { property var notifications property bool _diskCacheEnabled: true - property string _diskCachePath: "/home" + property url _diskCachePath: pathDialog.shortcuts.home Label { colorScheme: root.colorScheme @@ -64,7 +64,10 @@ SettingsView { colorScheme: root.colorScheme text: qsTr("Current cache location") actionText: qsTr("Change location") - description: root._diskCachePath + description: root.backend.goos === "windows" ? + root._diskCachePath.toString().replace("file:///", "").replace(new RegExp("/", 'g'), "\\") + "\\" : + root._diskCachePath.toString().replace("file://", "") + "/" + descriptionWrap: Text.WrapAnywhere type: SettingsItem.Button enabled: root._diskCacheEnabled onClicked: { @@ -76,8 +79,8 @@ SettingsView { FileDialog { id: pathDialog title: qsTr("Select cache location") - folder: shortcuts.home - onAccepted: root.sanitizePath(pathDialog.fileUrl.toString()) + folder: root._diskCachePath + onAccepted: root._diskCachePath = pathDialog.fileUrl selectFolder: true } } @@ -120,7 +123,6 @@ SettingsView { } function submit(){ - console.log("submit") if (!root._diskCacheEnabled && root.backend.isDiskCacheEnabled) { root.notifications.askDisableLocalCache() return @@ -141,12 +143,6 @@ SettingsView { root._diskCachePath = root.backend.diskCachePath } - function sanitizePath(path) { - var pattern = "file://" - if (root.backend.goos=="windows") pattern+="/" - root._diskCachePath = path.replace(pattern, "") - } - onVisibleChanged: { root.setDefaultValues() } diff --git a/internal/frontend/qml/Notifications/Notifications.qml b/internal/frontend/qml/Notifications/Notifications.qml index ef26eb2b..b58cb7d9 100644 --- a/internal/frontend/qml/Notifications/Notifications.qml +++ b/internal/frontend/qml/Notifications/Notifications.qml @@ -689,7 +689,7 @@ QtObject { type: Notification.NotificationType.Warning group: Notifications.Group.Configuration | Notifications.Group.Dialogs - property var path + property url path Connections { target: root diff --git a/internal/frontend/qml/SettingsItem.qml b/internal/frontend/qml/SettingsItem.qml index 3dedea76..aab79406 100644 --- a/internal/frontend/qml/SettingsItem.qml +++ b/internal/frontend/qml/SettingsItem.qml @@ -29,6 +29,7 @@ Item { property string actionText: "Action" property string actionIcon: "" property string description: "Lorem ipsum dolor sit amet" + property alias descriptionWrap: descriptionLabel.wrapMode property var type: SettingsItem.ActionType.Toggle property bool checked: true @@ -67,6 +68,7 @@ Item { } Label { + id: descriptionLabel Layout.fillHeight: true Layout.fillWidth: true diff --git a/internal/frontend/qt/frontend.go b/internal/frontend/qt/frontend.go index 44531c9b..1497582e 100644 --- a/internal/frontend/qt/frontend.go +++ b/internal/frontend/qt/frontend.go @@ -141,8 +141,8 @@ func (f *FrontendQt) NotifyManualUpdate(version updater.VersionInfo, canInstall func (f *FrontendQt) SetVersion(version updater.VersionInfo) { f.newVersionInfo = version - f.qml.SetReleaseNotesLink(version.ReleaseNotesPage) - f.qml.SetLandingPageLink(version.LandingPage) + f.qml.SetReleaseNotesLink(core.NewQUrl3(version.ReleaseNotesPage, core.QUrl__TolerantMode)) + f.qml.SetLandingPageLink(core.NewQUrl3(version.LandingPage, core.QUrl__TolerantMode)) } func (f *FrontendQt) NotifySilentUpdateInstalled() { diff --git a/internal/frontend/qt/frontend_help.go b/internal/frontend/qt/frontend_help.go index 588375e2..d4c40c3f 100644 --- a/internal/frontend/qt/frontend_help.go +++ b/internal/frontend/qt/frontend_help.go @@ -15,11 +15,14 @@ // You should have received a copy of the GNU General Public License // along with ProtonMail Bridge. If not, see . +//go:build build_qt // +build build_qt package qt -import "github.com/therecipe/qt/core" +import ( + "github.com/therecipe/qt/core" +) func (f *FrontendQt) setVersion() { f.qml.SetVersion(f.programVersion) @@ -31,11 +34,12 @@ func (f *FrontendQt) setLogsPath() { f.log.WithError(err).Error("Cannot update path folder") return } - f.qml.SetLogsPath(path) + + f.qml.SetLogsPath(core.QUrl_FromLocalFile(path)) } func (f *FrontendQt) setLicensePath() { - f.qml.SetLicensePath(f.locations.GetLicenseFilePath()) + f.qml.SetLicensePath(core.QUrl_FromLocalFile(f.locations.GetLicenseFilePath())) } func (f *FrontendQt) setCurrentEmailClient() { diff --git a/internal/frontend/qt/frontend_settings.go b/internal/frontend/qt/frontend_settings.go index c3567a72..545de57d 100644 --- a/internal/frontend/qt/frontend_settings.go +++ b/internal/frontend/qt/frontend_settings.go @@ -21,12 +21,14 @@ package qt import ( + "runtime" "time" "github.com/ProtonMail/proton-bridge/internal/config/settings" "github.com/ProtonMail/proton-bridge/internal/frontend/clientconfig" "github.com/ProtonMail/proton-bridge/pkg/keychain" "github.com/ProtonMail/proton-bridge/pkg/ports" + "github.com/therecipe/qt/core" ) func (f *FrontendQt) setIsDiskCacheEnabled() { @@ -34,10 +36,10 @@ func (f *FrontendQt) setIsDiskCacheEnabled() { } func (f *FrontendQt) setDiskCachePath() { - f.qml.SetDiskCachePath(f.settings.Get(settings.CacheLocationKey)) + f.qml.SetDiskCachePath(core.QUrl_FromLocalFile(f.settings.Get(settings.CacheLocationKey))) } -func (f *FrontendQt) changeLocalCache(enableDiskCache bool, diskCachePath string) { +func (f *FrontendQt) changeLocalCache(enableDiskCache bool, diskCachePath *core.QUrl) { defer f.qml.ChangeLocalCacheFinished() defer f.setIsDiskCacheEnabled() defer f.setDiskCachePath() @@ -54,18 +56,23 @@ func (f *FrontendQt) changeLocalCache(enableDiskCache bool, diskCachePath string } } + _diskCachePath := diskCachePath.Path(core.QUrl__FullyDecoded) + if (runtime.GOOS == "windows") && (_diskCachePath[0] == '/') { + _diskCachePath = _diskCachePath[1:] + } + // If disk cache not enabled, or path not changed then no need to change location - if !enableDiskCache || diskCachePath == f.settings.Get(settings.CacheLocationKey) { + if !enableDiskCache || _diskCachePath == f.settings.Get(settings.CacheLocationKey) { return } - if err := f.bridge.MigrateCache(f.settings.Get(settings.CacheLocationKey), diskCachePath); err != nil { + if err := f.bridge.MigrateCache(f.settings.Get(settings.CacheLocationKey), _diskCachePath); err != nil { f.log.WithError(err).Error("The local cache location could not be changed.") f.qml.CacheCantMove() return } - f.settings.Set(settings.CacheLocationKey, diskCachePath) + f.settings.Set(settings.CacheLocationKey, _diskCachePath) f.qml.CacheLocationChangeSuccess() f.restart() } diff --git a/internal/frontend/qt/qml_backend.go b/internal/frontend/qt/qml_backend.go index 589aa03a..ad9f0bf6 100644 --- a/internal/frontend/qt/qml_backend.go +++ b/internal/frontend/qt/qml_backend.go @@ -80,14 +80,14 @@ type QMLBackend struct { _ func() `slot:"checkUpdates"` _ func() `signal:"checkUpdatesFinished"` - _ bool `property:"isDiskCacheEnabled"` - _ string `property:"diskCachePath"` - _ func() `signal:"cacheUnavailable"` - _ func() `signal:"cacheCantMove"` - _ func() `signal:"cacheLocationChangeSuccess"` - _ func() `signal:"diskFull"` - _ func(enableDiskCache bool, diskCachePath string) `slot:"changeLocalCache"` - _ func() `signal:"changeLocalCacheFinished"` + _ bool `property:"isDiskCacheEnabled"` + _ core.QUrl `property:"diskCachePath"` + _ func() `signal:"cacheUnavailable"` + _ func() `signal:"cacheCantMove"` + _ func() `signal:"cacheLocationChangeSuccess"` + _ func() `signal:"diskFull"` + _ func(enableDiskCache bool, diskCachePath core.QUrl) `slot:"changeLocalCache"` + _ func() `signal:"changeLocalCacheFinished"` _ bool `property:"isAutomaticUpdateOn"` _ func(makeItActive bool) `slot:"toggleAutomaticUpdate"` @@ -118,11 +118,11 @@ type QMLBackend struct { _ func() `slot:"triggerReset"` _ func() `signal:"resetFinished"` - _ string `property:"version"` - _ string `property:"logsPath"` - _ string `property:"licensePath"` - _ string `property:"releaseNotesLink"` - _ string `property:"landingPageLink"` + _ string `property:"version"` + _ core.QUrl `property:"logsPath"` + _ core.QUrl `property:"licensePath"` + _ core.QUrl `property:"releaseNotesLink"` + _ core.QUrl `property:"landingPageLink"` _ string `property:"currentEmailClient"` _ func() `slot:"updateCurrentMailClient"` @@ -207,7 +207,7 @@ func (q *QMLBackend) setup(f *FrontendQt) { f.setIsDiskCacheEnabled() f.setDiskCachePath() - q.ConnectChangeLocalCache(func(e bool, d string) { + q.ConnectChangeLocalCache(func(e bool, d *core.QUrl) { go func() { defer f.panicHandler.HandlePanic() f.changeLocalCache(e, d)