From ddbc4b46b3bd4e45a30a21655e2f310a37649d31 Mon Sep 17 00:00:00 2001 From: Christian Busch Date: Tue, 2 Feb 2021 14:37:52 +0100 Subject: [PATCH 001/155] feat: bumped up version --- .vscode/launch.json | 2 +- frontend/package-lock.json | 2 +- frontend/package.json | 2 +- project.json | 2 +- surge.iss | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index fa6e084..84d6b28 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,5 +1,5 @@ { - "version": "0.3.2-beta", + "version": "0.4.0-beta", "configurations": [ { "name": "Wails: build debug", diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 4dee5be..bfb01a5 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,6 +1,6 @@ { "name": "surge", - "version": "0.3.2-beta", + "version": "0.4.0-beta", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/frontend/package.json b/frontend/package.json index 96aba8b..d7781ef 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -2,7 +2,7 @@ "name": "surge", "author": "Christian Busch", "private": true, - "version": "0.3.2-beta", + "version": "0.4.0-beta", "scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build", diff --git a/project.json b/project.json index 8db70d2..0c45aa4 100644 --- a/project.json +++ b/project.json @@ -5,7 +5,7 @@ "name": "Christian Busch", "email": "kontakt@christian-busch.com" }, - "version": "0.3.2-beta", + "version": "0.4.0-beta", "binaryname": "surge", "frontend": { "dir": "frontend", diff --git a/surge.iss b/surge.iss index c997c76..236280d 100644 --- a/surge.iss +++ b/surge.iss @@ -2,7 +2,7 @@ ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! #define MyAppName "Surge" -#define MyAppVersion "0.3.2-beta" +#define MyAppVersion "0.4.0-beta" #define MyAppPublisher "Rule110" #define MyAppURL "http://rule110.io/" #define MyAppExeName "surge.exe" From cc0038c04aa70412d2328ec486ba7ea6fed8c0ec Mon Sep 17 00:00:00 2001 From: Christian Busch Date: Tue, 2 Feb 2021 17:10:51 +0100 Subject: [PATCH 002/155] feat: renamed basic folders --- {surge => backend}/FileListSorting.go | 0 {surge => backend}/Notifications.go | 0 {surge => backend}/SliceUitl.go | 0 {surge => backend}/SurgeAccount.go | 2 +- {surge => backend}/SurgeClient.go | 6 +++--- {surge => backend}/SurgeCore.go | 8 ++++---- {surge => backend}/SurgeDB.go | 2 +- {surge => backend}/SurgeLog.go | 2 +- {surge => backend}/SurgeMessageStream.go | 5 ++--- {surge => backend}/constants/network.go | 0 {surge => backend}/constants/timeouts.go | 0 {surge => backend}/download.go | 6 +++--- {surge => backend}/nSurge.go | 4 ++-- {surge => backend}/platform/appDelegate_darwin.h | 0 {surge => backend}/platform/appDelegate_darwin.m | 0 {surge => backend}/platform/crossplatform.go | 0 {surge => backend}/platform/dialogs_darwin.go | 0 {surge => backend}/platform/dialogs_linux.go | 0 {surge => backend}/platform/dialogs_windows.go | 0 {surge => backend}/platform/events_darwin.go | 0 {surge => backend}/platform/events_linux.go | 0 {surge => backend}/platform/events_windows.go | 0 {surge => backend}/platform/foldersShared.go | 0 {surge => backend}/platform/folders_darwin.go | 0 {surge => backend}/platform/folders_linux.go | 0 {surge => backend}/platform/folders_windows.go | 0 {surge => backend}/platform/handleStartup_darwin.go | 0 {surge => backend}/platform/handleStartup_linux.go | 0 {surge => backend}/platform/handleStartup_windows.go | 2 +- {surge => backend}/platform/handler_darwin.h | 0 {surge => backend}/platform/handler_darwin.m | 0 {surge => backend}/platform/notifications_darwin.go | 0 {surge => backend}/platform/notifications_linux.go | 0 {surge => backend}/platform/notifications_windows.go | 0 {surge => backend}/query.go | 6 +++--- {surge => backend}/searchFiles.go | 0 {surge => backend}/sessionmanager/session.go | 2 +- frontend/src/components/Settings/Settings.vue | 2 +- go.mod | 2 +- go.sum | 1 + main.go | 4 ++-- surge.iss | 4 ++-- 42 files changed, 29 insertions(+), 29 deletions(-) rename {surge => backend}/FileListSorting.go (100%) rename {surge => backend}/Notifications.go (100%) rename {surge => backend}/SliceUitl.go (100%) rename {surge => backend}/SurgeAccount.go (95%) rename {surge => backend}/SurgeClient.go (97%) rename {surge => backend}/SurgeCore.go (98%) rename {surge => backend}/SurgeDB.go (98%) rename {surge => backend}/SurgeLog.go (95%) rename {surge => backend}/SurgeMessageStream.go (96%) rename {surge => backend}/constants/network.go (100%) rename {surge => backend}/constants/timeouts.go (100%) rename {surge => backend}/download.go (98%) rename {surge => backend}/nSurge.go (99%) rename {surge => backend}/platform/appDelegate_darwin.h (100%) rename {surge => backend}/platform/appDelegate_darwin.m (100%) rename {surge => backend}/platform/crossplatform.go (100%) rename {surge => backend}/platform/dialogs_darwin.go (100%) rename {surge => backend}/platform/dialogs_linux.go (100%) rename {surge => backend}/platform/dialogs_windows.go (100%) rename {surge => backend}/platform/events_darwin.go (100%) rename {surge => backend}/platform/events_linux.go (100%) rename {surge => backend}/platform/events_windows.go (100%) rename {surge => backend}/platform/foldersShared.go (100%) rename {surge => backend}/platform/folders_darwin.go (100%) rename {surge => backend}/platform/folders_linux.go (100%) rename {surge => backend}/platform/folders_windows.go (100%) rename {surge => backend}/platform/handleStartup_darwin.go (100%) rename {surge => backend}/platform/handleStartup_linux.go (100%) rename {surge => backend}/platform/handleStartup_windows.go (98%) rename {surge => backend}/platform/handler_darwin.h (100%) rename {surge => backend}/platform/handler_darwin.m (100%) rename {surge => backend}/platform/notifications_darwin.go (100%) rename {surge => backend}/platform/notifications_linux.go (100%) rename {surge => backend}/platform/notifications_windows.go (100%) rename {surge => backend}/query.go (96%) rename {surge => backend}/searchFiles.go (100%) rename {surge => backend}/sessionmanager/session.go (99%) diff --git a/surge/FileListSorting.go b/backend/FileListSorting.go similarity index 100% rename from surge/FileListSorting.go rename to backend/FileListSorting.go diff --git a/surge/Notifications.go b/backend/Notifications.go similarity index 100% rename from surge/Notifications.go rename to backend/Notifications.go diff --git a/surge/SliceUitl.go b/backend/SliceUitl.go similarity index 100% rename from surge/SliceUitl.go rename to backend/SliceUitl.go diff --git a/surge/SurgeAccount.go b/backend/SurgeAccount.go similarity index 95% rename from surge/SurgeAccount.go rename to backend/SurgeAccount.go index 307e28d..93bb68d 100644 --- a/surge/SurgeAccount.go +++ b/backend/SurgeAccount.go @@ -7,7 +7,7 @@ import ( "log" nkn "github.com/nknorg/nkn-sdk-go" - "github.com/rule110-io/surge-ui/surge/platform" + "github.com/rule110-io/surge/backend/platform" ) const accountPath = "account.surge" diff --git a/surge/SurgeClient.go b/backend/SurgeClient.go similarity index 97% rename from surge/SurgeClient.go rename to backend/SurgeClient.go index 25297ae..0df13f7 100644 --- a/surge/SurgeClient.go +++ b/backend/SurgeClient.go @@ -7,9 +7,9 @@ import ( "log" nkn "github.com/nknorg/nkn-sdk-go" - "github.com/rule110-io/surge-ui/surge/constants" - "github.com/rule110-io/surge-ui/surge/platform" - "github.com/rule110-io/surge-ui/surge/sessionmanager" + "github.com/rule110-io/surge/backend/constants" + "github.com/rule110-io/surge/backend/platform" + "github.com/rule110-io/surge/backend/sessionmanager" ) //ChunkSize is size of chunk in bytes (256 kB) diff --git a/surge/SurgeCore.go b/backend/SurgeCore.go similarity index 98% rename from surge/SurgeCore.go rename to backend/SurgeCore.go index 6edaa4b..197ed33 100644 --- a/surge/SurgeCore.go +++ b/backend/SurgeCore.go @@ -18,10 +18,10 @@ import ( "log" bitmap "github.com/boljen/go-bitmap" - pb "github.com/rule110-io/surge-ui/payloads" - "github.com/rule110-io/surge-ui/surge/constants" - "github.com/rule110-io/surge-ui/surge/platform" - "github.com/rule110-io/surge-ui/surge/sessionmanager" + "github.com/rule110-io/surge/backend/constants" + "github.com/rule110-io/surge/backend/platform" + "github.com/rule110-io/surge/backend/sessionmanager" + pb "github.com/rule110-io/surge/payloads" "google.golang.org/protobuf/proto" open "github.com/skratchdot/open-golang/open" diff --git a/surge/SurgeDB.go b/backend/SurgeDB.go similarity index 98% rename from surge/SurgeDB.go rename to backend/SurgeDB.go index e2f09b5..11468ac 100644 --- a/surge/SurgeDB.go +++ b/backend/SurgeDB.go @@ -6,7 +6,7 @@ import ( "log" - "github.com/rule110-io/surge-ui/surge/platform" + "github.com/rule110-io/surge/backend/platform" "github.com/xujiajun/nutsdb" ) diff --git a/surge/SurgeLog.go b/backend/SurgeLog.go similarity index 95% rename from surge/SurgeLog.go rename to backend/SurgeLog.go index ee7cf20..680e418 100644 --- a/surge/SurgeLog.go +++ b/backend/SurgeLog.go @@ -4,7 +4,7 @@ import ( "log" "os" - "github.com/rule110-io/surge-ui/surge/platform" + "github.com/rule110-io/surge/backend/platform" "gopkg.in/natefinch/lumberjack.v2" ) diff --git a/surge/SurgeMessageStream.go b/backend/SurgeMessageStream.go similarity index 96% rename from surge/SurgeMessageStream.go rename to backend/SurgeMessageStream.go index f0d8420..5a4d360 100644 --- a/surge/SurgeMessageStream.go +++ b/backend/SurgeMessageStream.go @@ -7,12 +7,11 @@ import ( "log" - "github.com/rule110-io/surge-ui/surge/sessionmanager" + "github.com/rule110-io/surge/backend/sessionmanager" ) // SessionWrite writes to session func SessionWrite(Session *sessionmanager.Session, Data []byte, ID byte) (written int, err error) { - if Session == nil || Session.Session == nil { return 0, errors.New("write to session error, session nil") @@ -42,7 +41,7 @@ func SessionWrite(Session *sessionmanager.Session, Data []byte, ID byte) (writte //SessionRead reads from session func SessionRead(Session *sessionmanager.Session) (data []byte, ID byte, err error) { - + headerBuffer := make([]byte, 5) //int32 size of header + 1 for packid // the header of 4 bytes + 1 for packid diff --git a/surge/constants/network.go b/backend/constants/network.go similarity index 100% rename from surge/constants/network.go rename to backend/constants/network.go diff --git a/surge/constants/timeouts.go b/backend/constants/timeouts.go similarity index 100% rename from surge/constants/timeouts.go rename to backend/constants/timeouts.go diff --git a/surge/download.go b/backend/download.go similarity index 98% rename from surge/download.go rename to backend/download.go index ed1773a..62a620f 100644 --- a/surge/download.go +++ b/backend/download.go @@ -10,9 +10,9 @@ import ( "time" bitmap "github.com/boljen/go-bitmap" - "github.com/rule110-io/surge-ui/surge/constants" - "github.com/rule110-io/surge-ui/surge/platform" - "github.com/rule110-io/surge-ui/surge/sessionmanager" + "github.com/rule110-io/surge/backend/constants" + "github.com/rule110-io/surge/backend/platform" + "github.com/rule110-io/surge/backend/sessionmanager" ) //DownloadFile downloads the file diff --git a/surge/nSurge.go b/backend/nSurge.go similarity index 99% rename from surge/nSurge.go rename to backend/nSurge.go index e5b4301..7bad360 100644 --- a/surge/nSurge.go +++ b/backend/nSurge.go @@ -8,8 +8,8 @@ import ( "log" - "github.com/rule110-io/surge-ui/surge/platform" - "github.com/rule110-io/surge-ui/surge/sessionmanager" + "github.com/rule110-io/surge/backend/platform" + "github.com/rule110-io/surge/backend/sessionmanager" bitmap "github.com/boljen/go-bitmap" movavg "github.com/mxmCherry/movavg" diff --git a/surge/platform/appDelegate_darwin.h b/backend/platform/appDelegate_darwin.h similarity index 100% rename from surge/platform/appDelegate_darwin.h rename to backend/platform/appDelegate_darwin.h diff --git a/surge/platform/appDelegate_darwin.m b/backend/platform/appDelegate_darwin.m similarity index 100% rename from surge/platform/appDelegate_darwin.m rename to backend/platform/appDelegate_darwin.m diff --git a/surge/platform/crossplatform.go b/backend/platform/crossplatform.go similarity index 100% rename from surge/platform/crossplatform.go rename to backend/platform/crossplatform.go diff --git a/surge/platform/dialogs_darwin.go b/backend/platform/dialogs_darwin.go similarity index 100% rename from surge/platform/dialogs_darwin.go rename to backend/platform/dialogs_darwin.go diff --git a/surge/platform/dialogs_linux.go b/backend/platform/dialogs_linux.go similarity index 100% rename from surge/platform/dialogs_linux.go rename to backend/platform/dialogs_linux.go diff --git a/surge/platform/dialogs_windows.go b/backend/platform/dialogs_windows.go similarity index 100% rename from surge/platform/dialogs_windows.go rename to backend/platform/dialogs_windows.go diff --git a/surge/platform/events_darwin.go b/backend/platform/events_darwin.go similarity index 100% rename from surge/platform/events_darwin.go rename to backend/platform/events_darwin.go diff --git a/surge/platform/events_linux.go b/backend/platform/events_linux.go similarity index 100% rename from surge/platform/events_linux.go rename to backend/platform/events_linux.go diff --git a/surge/platform/events_windows.go b/backend/platform/events_windows.go similarity index 100% rename from surge/platform/events_windows.go rename to backend/platform/events_windows.go diff --git a/surge/platform/foldersShared.go b/backend/platform/foldersShared.go similarity index 100% rename from surge/platform/foldersShared.go rename to backend/platform/foldersShared.go diff --git a/surge/platform/folders_darwin.go b/backend/platform/folders_darwin.go similarity index 100% rename from surge/platform/folders_darwin.go rename to backend/platform/folders_darwin.go diff --git a/surge/platform/folders_linux.go b/backend/platform/folders_linux.go similarity index 100% rename from surge/platform/folders_linux.go rename to backend/platform/folders_linux.go diff --git a/surge/platform/folders_windows.go b/backend/platform/folders_windows.go similarity index 100% rename from surge/platform/folders_windows.go rename to backend/platform/folders_windows.go diff --git a/surge/platform/handleStartup_darwin.go b/backend/platform/handleStartup_darwin.go similarity index 100% rename from surge/platform/handleStartup_darwin.go rename to backend/platform/handleStartup_darwin.go diff --git a/surge/platform/handleStartup_linux.go b/backend/platform/handleStartup_linux.go similarity index 100% rename from surge/platform/handleStartup_linux.go rename to backend/platform/handleStartup_linux.go diff --git a/surge/platform/handleStartup_windows.go b/backend/platform/handleStartup_windows.go similarity index 98% rename from surge/platform/handleStartup_windows.go rename to backend/platform/handleStartup_windows.go index 5d67d0b..6d926e9 100644 --- a/surge/platform/handleStartup_windows.go +++ b/backend/platform/handleStartup_windows.go @@ -10,7 +10,7 @@ import ( "log" - "github.com/rule110-io/surge-ui/mailslot" + "github.com/rule110-io/surge/mailslot" "github.com/sqweek/dialog" ) diff --git a/surge/platform/handler_darwin.h b/backend/platform/handler_darwin.h similarity index 100% rename from surge/platform/handler_darwin.h rename to backend/platform/handler_darwin.h diff --git a/surge/platform/handler_darwin.m b/backend/platform/handler_darwin.m similarity index 100% rename from surge/platform/handler_darwin.m rename to backend/platform/handler_darwin.m diff --git a/surge/platform/notifications_darwin.go b/backend/platform/notifications_darwin.go similarity index 100% rename from surge/platform/notifications_darwin.go rename to backend/platform/notifications_darwin.go diff --git a/surge/platform/notifications_linux.go b/backend/platform/notifications_linux.go similarity index 100% rename from surge/platform/notifications_linux.go rename to backend/platform/notifications_linux.go diff --git a/surge/platform/notifications_windows.go b/backend/platform/notifications_windows.go similarity index 100% rename from surge/platform/notifications_windows.go rename to backend/platform/notifications_windows.go diff --git a/surge/query.go b/backend/query.go similarity index 96% rename from surge/query.go rename to backend/query.go index c5fea5d..3d55c1b 100644 --- a/surge/query.go +++ b/backend/query.go @@ -6,9 +6,9 @@ import ( "strconv" "strings" - pb "github.com/rule110-io/surge-ui/payloads" - "github.com/rule110-io/surge-ui/surge/constants" - "github.com/rule110-io/surge-ui/surge/sessionmanager" + "github.com/rule110-io/surge/backend/constants" + "github.com/rule110-io/surge/backend/sessionmanager" + pb "github.com/rule110-io/surge/payloads" "google.golang.org/protobuf/proto" ) diff --git a/surge/searchFiles.go b/backend/searchFiles.go similarity index 100% rename from surge/searchFiles.go rename to backend/searchFiles.go diff --git a/surge/sessionmanager/session.go b/backend/sessionmanager/session.go similarity index 99% rename from surge/sessionmanager/session.go rename to backend/sessionmanager/session.go index 9857bb2..f8fcd2b 100644 --- a/surge/sessionmanager/session.go +++ b/backend/sessionmanager/session.go @@ -9,7 +9,7 @@ import ( "sync" "time" - "github.com/rule110-io/surge-ui/surge/constants" + "github.com/rule110-io/surge/backend/constants" nkn "github.com/nknorg/nkn-sdk-go" ) diff --git a/frontend/src/components/Settings/Settings.vue b/frontend/src/components/Settings/Settings.vue index 6bce23c..2999e69 100644 --- a/frontend/src/components/Settings/Settings.vue +++ b/frontend/src/components/Settings/Settings.vue @@ -47,7 +47,7 @@
Latest version installed
-
-
#
-
Pubkey
-
-
#
+
Pubkey
+
Last Activity
+
Workers
+ +
diff --git a/frontend/wailsjs/go/bindings.js b/frontend/wailsjs/go/bindings.js index 4862ea7..1450c36 100755 --- a/frontend/wailsjs/go/bindings.js +++ b/frontend/wailsjs/go/bindings.js @@ -140,6 +140,13 @@ const go = { "SeedFile": (arg1) => { return window.go.surge.MiddlewareFunctions.SeedFile(arg1); }, + /** + * SetDownloadFolder + * @returns {Promise} - Go Type: bool + */ + "SetDownloadFolder": () => { + return window.go.surge.MiddlewareFunctions.SetDownloadFolder(); + }, /** * SetDownloadPause * @param {Array} arg1 - Go Type: []string diff --git a/surge-res.syso b/surge-res.syso deleted file mode 100644 index b8ba1965292a47ce87489e934bc4d17bbd4c687a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41114 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 Date: Tue, 21 Dec 2021 14:30:28 +0300 Subject: [PATCH 117/155] fix: chunkbar --- frontend/src/components/File/FileChunks/FileChunks.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/File/FileChunks/FileChunks.vue b/frontend/src/components/File/FileChunks/FileChunks.vue index 85e6b0f..40aa906 100644 --- a/frontend/src/components/File/FileChunks/FileChunks.vue +++ b/frontend/src/components/File/FileChunks/FileChunks.vue @@ -36,7 +36,7 @@ export default { const isNewFileHash = !this._.isEmpty(newFileHash); if (isNewFileHash) { - this.drawProgress(newFileHash.ChunkMap); + this.getChunkMap(); } }, "file.FileHash": { From 6510621a983be45ea5b5edd343d4b8ef301a0a24 Mon Sep 17 00:00:00 2001 From: lightmyfire Date: Tue, 21 Dec 2021 14:51:01 +0300 Subject: [PATCH 118/155] fix: modal --- frontend/src/components/Modals/Modal/Modal.scss | 2 +- .../components/Modals/RemoveFileModal/RemoveFileModal.vue | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/Modals/Modal/Modal.scss b/frontend/src/components/Modals/Modal/Modal.scss index 0139584..a98e865 100644 --- a/frontend/src/components/Modals/Modal/Modal.scss +++ b/frontend/src/components/Modals/Modal/Modal.scss @@ -4,7 +4,7 @@ border-radius: $br-lg; backdrop-filter: $blur; box-shadow: $shadow-1; - min-width: 454px; + width: 454px; box-sizing: border-box; position: fixed; top: 50%; diff --git a/frontend/src/components/Modals/RemoveFileModal/RemoveFileModal.vue b/frontend/src/components/Modals/RemoveFileModal/RemoveFileModal.vue index 07cbbcb..46c23d0 100644 --- a/frontend/src/components/Modals/RemoveFileModal/RemoveFileModal.vue +++ b/frontend/src/components/Modals/RemoveFileModal/RemoveFileModal.vue @@ -21,7 +21,7 @@ From 7ac35f5cc290ab1063859a5c1c7a15e6ca217b63 Mon Sep 17 00:00:00 2001 From: lightmyfire Date: Thu, 23 Dec 2021 00:10:27 +0300 Subject: [PATCH 123/155] feat: add file speed chart, fix stuff --- .../BandwidthChart/BandwidthChart.scss | 8 +- .../BandwidthChart/BandwidthChart.vue | 73 ++++++++++++++----- frontend/src/components/Charts/Bandwidth.js | 2 - .../components/File/FileChunks/FileChunks.vue | 1 - .../src/components/File/FileDown/FileDown.vue | 2 + .../src/components/File/FileUp/FileUp.vue | 6 +- .../TransfersDetails/TransfersDetails.vue | 2 - .../TransfersHeader/TransfersHeader.vue | 2 - .../TransfersInfoCard/TransfersInfoCard.scss | 1 + .../TransfersSpeed/TransfersSpeed.vue | 7 +- 10 files changed, 68 insertions(+), 36 deletions(-) diff --git a/frontend/src/components/BandwidthChart/BandwidthChart.scss b/frontend/src/components/BandwidthChart/BandwidthChart.scss index 6a27f64..096d762 100644 --- a/frontend/src/components/BandwidthChart/BandwidthChart.scss +++ b/frontend/src/components/BandwidthChart/BandwidthChart.scss @@ -1,16 +1,10 @@ .bandwidth-chart { - height: 40px; - margin-right: $padding-normal; - position: absolute; + height: 170px; width: 100%; - border-top-left-radius: 18px; - border-top-right-radius: 18px; overflow: hidden; left: 0; top: 0; canvas { - height: 40px; - width: 100%; } } diff --git a/frontend/src/components/BandwidthChart/BandwidthChart.vue b/frontend/src/components/BandwidthChart/BandwidthChart.vue index ac8dd26..7a60b0c 100644 --- a/frontend/src/components/BandwidthChart/BandwidthChart.vue +++ b/frontend/src/components/BandwidthChart/BandwidthChart.vue @@ -1,9 +1,9 @@ + + diff --git a/frontend/src/components/Modals/SettingsModal/SettingsModal.scss b/frontend/src/components/Modals/SettingsModal/SettingsModal.scss new file mode 100644 index 0000000..eeabc0a --- /dev/null +++ b/frontend/src/components/Modals/SettingsModal/SettingsModal.scss @@ -0,0 +1,90 @@ +.settings { + width: 592px; + + &__tabs { + width: max-content; + margin-bottom: $padding-xl; + } + + &__path { + display: grid; + align-items: center; + grid-template-columns: 1fr max-content; + grid-gap: $padding-llg; + + &-control { + background: linear-gradient( + 0deg, + rgba(255, 255, 255, 0.03), + rgba(255, 255, 255, 0.03) + ); + box-shadow: $shadow-5; + border-radius: 8px; + box-sizing: border-box; + padding: $padding-sm $padding-md; + font-size: $fz-sm; + line-height: 16px; + color: $white; + box-sizing: border-box; + height: 40px; + } + + &-icon { + cursor: pointer; + transition: $transition-1; + + path { + transition: $transition-1; + } + + &:hover { + path { + stroke: $primary; + } + } + } + } + + &__slider { + display: flex; + gap: $padding-llg; + align-items: center; + + &-input { + width: 56px; + height: 40px; + } + + &-control { + flex: 1; + + .vue-slider { + &-rail { + border-radius: 0 !important; + background: #505052 !important; + } + + &-dot { + background-color: unset !important; + background: linear-gradient( + 0deg, + rgba(10, 151, 149, 0.2), + rgba(10, 151, 149, 0.2) + ), + #131416; + border: 1px solid $primary !important; + box-shadow: inset -1px 0px 1px rgba(255, 255, 255, 0.04), + inset 0px 0px 6px rgba(255, 255, 255, 0.03) !important; + backdrop-filter: $blur !important; + border-radius: 100%; + cursor: pointer; + } + + &-process { + background: $primary !important; + border-radius: 0 !important; + } + } + } + } +} diff --git a/frontend/src/components/Modals/SettingsModal/SettingsModal.vue b/frontend/src/components/Modals/SettingsModal/SettingsModal.vue new file mode 100644 index 0000000..40e7572 --- /dev/null +++ b/frontend/src/components/Modals/SettingsModal/SettingsModal.vue @@ -0,0 +1,181 @@ + + + + + diff --git a/frontend/src/components/Tabs/Tabs.scss b/frontend/src/components/Tabs/Tabs.scss index 24568a9..2b75a62 100644 --- a/frontend/src/components/Tabs/Tabs.scss +++ b/frontend/src/components/Tabs/Tabs.scss @@ -52,9 +52,5 @@ background: $primary-gradient; } } - - &:not(:last-child) { - margin-right: $padding-sm; - } } } diff --git a/frontend/src/mixins/FormMixin.js b/frontend/src/mixins/FormMixin.js index 6f11f40..4090140 100644 --- a/frontend/src/mixins/FormMixin.js +++ b/frontend/src/mixins/FormMixin.js @@ -17,6 +17,7 @@ export default { this.$bus.$off(this.openModalEvent); }, methods: { + clearModal() {}, openModal() { this.showModal = true; }, From 006d8115b2011e7cf2463ab3e26fbbdb48f52da6 Mon Sep 17 00:00:00 2001 From: lightmyfire Date: Sat, 8 Jan 2022 16:42:28 +0300 Subject: [PATCH 131/155] fix: modal --- frontend/src/components/Modals/Modal/Modal.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/components/Modals/Modal/Modal.scss b/frontend/src/components/Modals/Modal/Modal.scss index a98e865..28cd98e 100644 --- a/frontend/src/components/Modals/Modal/Modal.scss +++ b/frontend/src/components/Modals/Modal/Modal.scss @@ -50,6 +50,7 @@ align-items: center; justify-content: flex-end; gap: $padding-llg; + margin-top: $padding-max; } } From c23750e788e28ba87020b71d24a465845ffc8fe7 Mon Sep 17 00:00:00 2001 From: Mitchel Disveld Date: Sat, 8 Jan 2022 21:18:11 +0100 Subject: [PATCH 132/155] v2 settings initialization --- backend/client.go | 2 +- backend/constants/configs.go | 2 +- backend/settingsmanager.go | 3 ++- main.go | 11 +++++++++++ 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/backend/client.go b/backend/client.go index c2de39d..4844fc1 100644 --- a/backend/client.go +++ b/backend/client.go @@ -185,7 +185,7 @@ func DownloadFileByHash(Hash string) bool { pushNotification("Download Started", file.FileName) - remoteFolder, err := getDownloadFolderPath() + remoteFolder, err := GetDownloadFolderPath() if err != nil { log.Println("Remote folder does not exist") pushError("Error on download file", "Could not access download folder at path: "+remoteFolder) diff --git a/backend/constants/configs.go b/backend/constants/configs.go index ba9ec5f..fa07ae7 100644 --- a/backend/constants/configs.go +++ b/backend/constants/configs.go @@ -14,7 +14,7 @@ const ( ChunkSize = 1024 * 1024 //NumClients is the number of NKN clients - NumClients = 8 + NumClients = 4 NumClientsMin = 1 NumClientsMax = 8 diff --git a/backend/settingsmanager.go b/backend/settingsmanager.go index 34ad88f..8fa51d7 100644 --- a/backend/settingsmanager.go +++ b/backend/settingsmanager.go @@ -7,7 +7,8 @@ import ( "github.com/rule110-io/surge/backend/platform" ) -func getDownloadFolderPath() (string, error) { +//GetDownloadFolderPath uses the folder setting, or default donwload folder fallback. +func GetDownloadFolderPath() (string, error) { folder, err := DbReadSetting("downloadFolder") if err == nil && len(folder) > 0 { return folder, nil diff --git a/main.go b/main.go index 72c6561..b0a2d5d 100644 --- a/main.go +++ b/main.go @@ -3,10 +3,12 @@ package main import ( "embed" "os" + "strconv" "log" surge "github.com/rule110-io/surge/backend" + "github.com/rule110-io/surge/backend/constants" "github.com/rule110-io/surge/backend/platform" "github.com/wailsapp/wails/v2" "github.com/wailsapp/wails/v2/pkg/logger" @@ -62,6 +64,15 @@ func main() { surge.DbWriteSetting("DarkMode", "false") } + //check if one of the v2 settings has been set. + _, err = surge.DbReadSetting("numClients") + if err != nil { + dFolder, _ := platform.GetRemoteFolder() + surge.DbWriteSetting("downloadFolder", dFolder) + surge.DbWriteSetting("numClients", strconv.Itoa(constants.NumClients)) + surge.DbWriteSetting("numWorkers", strconv.Itoa(constants.NumWorkers)) + } + surge.StartClient(arguments) app := NewApp() From ad6df24dfebe588ac8136a200301c74dc43fc424 Mon Sep 17 00:00:00 2001 From: Mitchel Disveld Date: Sat, 8 Jan 2022 21:27:54 +0100 Subject: [PATCH 133/155] fix path=>folder in settingname --- frontend/src/components/Modals/SettingsModal/SettingsModal.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/Modals/SettingsModal/SettingsModal.vue b/frontend/src/components/Modals/SettingsModal/SettingsModal.vue index 40e7572..745ba41 100644 --- a/frontend/src/components/Modals/SettingsModal/SettingsModal.vue +++ b/frontend/src/components/Modals/SettingsModal/SettingsModal.vue @@ -155,7 +155,7 @@ export default { window.go.surge.MiddlewareFunctions.SetDownloadFolder(); }, getDownloadPath() { - window.go.surge.MiddlewareFunctions.ReadSetting("downloadPath").then( + window.go.surge.MiddlewareFunctions.ReadSetting("downloadFolder").then( (res) => { this.downloadPath = res; console.log(res); From ca33af10f68f1166f33a009deef45a9327628868 Mon Sep 17 00:00:00 2001 From: Mitchel Disveld Date: Sat, 8 Jan 2022 21:28:05 +0100 Subject: [PATCH 134/155] add vueslider component --- frontend/package-lock.json | 52 ++++++++++++++++++++++++++++++++++++++ frontend/package.json | 1 + 2 files changed, 53 insertions(+) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 7fd2df3..98d82de 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -32,6 +32,7 @@ "vue-moment": "^4.1.0", "vue-range-component": "^1.0.3", "vue-router": "^3.3.4", + "vue-slider-component": "^3.2.15", "vue-tour": "^1.5.0", "vuex": "^3.5.1" }, @@ -15381,6 +15382,14 @@ "vue": "^2.5.17" } }, + "node_modules/vue-class-component": { + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/vue-class-component/-/vue-class-component-7.2.6.tgz", + "integrity": "sha512-+eaQXVrAm/LldalI272PpDe3+i4mPis0ORiMYxF6Ae4hyuCh15W8Idet7wPUEs4N4YptgFHGys4UrgNQOMyO6w==", + "peerDependencies": { + "vue": "^2.0.0" + } + }, "node_modules/vue-clickaway": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/vue-clickaway/-/vue-clickaway-2.2.2.tgz", @@ -15594,6 +15603,17 @@ "vue": ">=1.x.x" } }, + "node_modules/vue-property-decorator": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-8.5.1.tgz", + "integrity": "sha512-O6OUN2OMsYTGPvgFtXeBU3jPnX5ffQ9V4I1WfxFQ6dqz6cOUbR3Usou7kgFpfiXDvV7dJQSFcJ5yUPgOtPPm1Q==", + "dependencies": { + "vue-class-component": "^7.1.0" + }, + "peerDependencies": { + "vue": "*" + } + }, "node_modules/vue-range-component": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/vue-range-component/-/vue-range-component-1.0.3.tgz", @@ -15615,6 +15635,15 @@ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.5.3.tgz", "integrity": "sha512-FUlILrW3DGitS2h+Xaw8aRNvGTwtuaxrRkNSHWTizOfLUie7wuYwezeZ50iflRn8YPV5kxmU2LQuu3nM/b3Zsg==" }, + "node_modules/vue-slider-component": { + "version": "3.2.15", + "resolved": "https://registry.npmjs.org/vue-slider-component/-/vue-slider-component-3.2.15.tgz", + "integrity": "sha512-FpmMsQ6MQFn22B6boDcEjRmuawdaHwjHRVZiuv5w37jijHra6+HogjSrh3mb42jE+PUIFFagXi36oFEzpDbadg==", + "dependencies": { + "core-js": "^3.6.5", + "vue-property-decorator": "^8.0.0" + } + }, "node_modules/vue-style-loader": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", @@ -29190,6 +29219,12 @@ "resize-detector": "^0.1.10" } }, + "vue-class-component": { + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/vue-class-component/-/vue-class-component-7.2.6.tgz", + "integrity": "sha512-+eaQXVrAm/LldalI272PpDe3+i4mPis0ORiMYxF6Ae4hyuCh15W8Idet7wPUEs4N4YptgFHGys4UrgNQOMyO6w==", + "requires": {} + }, "vue-clickaway": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/vue-clickaway/-/vue-clickaway-2.2.2.tgz", @@ -29347,6 +29382,14 @@ "moment": "^2.19.2" } }, + "vue-property-decorator": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-8.5.1.tgz", + "integrity": "sha512-O6OUN2OMsYTGPvgFtXeBU3jPnX5ffQ9V4I1WfxFQ6dqz6cOUbR3Usou7kgFpfiXDvV7dJQSFcJ5yUPgOtPPm1Q==", + "requires": { + "vue-class-component": "^7.1.0" + } + }, "vue-range-component": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/vue-range-component/-/vue-range-component-1.0.3.tgz", @@ -29365,6 +29408,15 @@ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.5.3.tgz", "integrity": "sha512-FUlILrW3DGitS2h+Xaw8aRNvGTwtuaxrRkNSHWTizOfLUie7wuYwezeZ50iflRn8YPV5kxmU2LQuu3nM/b3Zsg==" }, + "vue-slider-component": { + "version": "3.2.15", + "resolved": "https://registry.npmjs.org/vue-slider-component/-/vue-slider-component-3.2.15.tgz", + "integrity": "sha512-FpmMsQ6MQFn22B6boDcEjRmuawdaHwjHRVZiuv5w37jijHra6+HogjSrh3mb42jE+PUIFFagXi36oFEzpDbadg==", + "requires": { + "core-js": "^3.6.5", + "vue-property-decorator": "^8.0.0" + } + }, "vue-style-loader": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", diff --git a/frontend/package.json b/frontend/package.json index ea3bdf7..c18e791 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -33,6 +33,7 @@ "vue-moment": "^4.1.0", "vue-range-component": "^1.0.3", "vue-router": "^3.3.4", + "vue-slider-component": "^3.2.15", "vue-tour": "^1.5.0", "vuex": "^3.5.1" }, From 21f6eb89d6e714538e9f336552883df79098ffd0 Mon Sep 17 00:00:00 2001 From: lightmyfire Date: Sun, 9 Jan 2022 14:00:52 +0300 Subject: [PATCH 135/155] fix: settings download folder --- .../Modals/SettingsModal/SettingsModal.vue | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/Modals/SettingsModal/SettingsModal.vue b/frontend/src/components/Modals/SettingsModal/SettingsModal.vue index 745ba41..d6a7a92 100644 --- a/frontend/src/components/Modals/SettingsModal/SettingsModal.vue +++ b/frontend/src/components/Modals/SettingsModal/SettingsModal.vue @@ -8,14 +8,11 @@