gui, lib/config: Add default path for new folders (fixes #2157)

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4192
This commit is contained in:
Simon Frei 2017-07-20 13:16:54 +00:00 committed by Jakob Borg
parent 0ad10b0fee
commit a04b92332f
4 changed files with 47 additions and 12 deletions

View File

@ -74,7 +74,8 @@ angular.module('syncthing.core')
staggeredCleanInterval: 3600, staggeredCleanInterval: 3600,
staggeredVersionsPath: "", staggeredVersionsPath: "",
externalCommand: "", externalCommand: "",
autoNormalize: true autoNormalize: true,
path: ""
}; };
$scope.localStateTotal = { $scope.localStateTotal = {
@ -606,6 +607,21 @@ angular.module('syncthing.core')
$scope.neededTotal = data.total; $scope.neededTotal = data.total;
} }
function pathJoin(base, name) {
base = expandTilde(base);
if (base[base.length - 1] !== $scope.system.pathSeparator) {
return base + $scope.system.pathSeparator + name;
}
return base + name;
}
function expandTilde(path) {
if (path && path.trim().charAt(0) === '~') {
return $scope.system.tilde + path.trim().substring(1);
}
return path;
}
$scope.neededPageChanged = function (page) { $scope.neededPageChanged = function (page) {
$scope.neededCurrentPage = page; $scope.neededCurrentPage = page;
refreshNeed($scope.neededFolder); refreshNeed($scope.neededFolder);
@ -1360,9 +1376,10 @@ angular.module('syncthing.core')
$scope.directoryList = []; $scope.directoryList = [];
$scope.$watch('currentFolder.path', function (newvalue) { $scope.$watch('currentFolder.path', function (newvalue) {
if (newvalue && newvalue.trim().charAt(0) === '~') { if (!newvalue) {
$scope.currentFolder.path = $scope.system.tilde + newvalue.trim().substring(1); return;
} }
$scope.currentFolder.path = expandTilde(newvalue);
$http.get(urlbase + '/system/browse', { $http.get(urlbase + '/system/browse', {
params: { current: newvalue } params: { current: newvalue }
}).success(function (data) { }).success(function (data) {
@ -1370,6 +1387,20 @@ angular.module('syncthing.core')
}).error($scope.emitHTTPError); }).error($scope.emitHTTPError);
}); });
$scope.$watch('currentFolder.label', function (newvalue) {
if (!$scope.config.options || !$scope.config.options.defaultFolderPath || $scope.editingExisting || !$scope.folderEditor.folderPath.$pristine || !newvalue) {
return;
}
$scope.currentFolder.path = pathJoin($scope.config.options.defaultFolderPath, newvalue);
});
$scope.$watch('currentFolder.id', function (newvalue) {
if (!$scope.config.options || !$scope.config.options.defaultFolderPath || !$scope.folderEditor.folderPath.$pristine || !newvalue || $scope.currentFolder.label) {
return;
}
$scope.currentFolder.path = pathJoin($scope.config.options.defaultFolderPath, newvalue);
});
$scope.loadFormIntoScope = function (form) { $scope.loadFormIntoScope = function (form) {
console.log('loadFormIntoScope',form.$name); console.log('loadFormIntoScope',form.$name);
switch (form.$name) { switch (form.$name) {
@ -1394,6 +1425,7 @@ angular.module('syncthing.core')
}; };
$scope.editFolder = function (folderCfg) { $scope.editFolder = function (folderCfg) {
$scope.editingExisting = true;
$scope.currentFolder = angular.copy(folderCfg); $scope.currentFolder = angular.copy(folderCfg);
if ($scope.currentFolder.path.slice(-1) === $scope.system.pathSeparator) { if ($scope.currentFolder.path.slice(-1) === $scope.system.pathSeparator) {
$scope.currentFolder.path = $scope.currentFolder.path.slice(0, -1); $scope.currentFolder.path = $scope.currentFolder.path.slice(0, -1);
@ -1436,21 +1468,21 @@ angular.module('syncthing.core')
} }
$scope.currentFolder.externalCommand = $scope.currentFolder.externalCommand || ""; $scope.currentFolder.externalCommand = $scope.currentFolder.externalCommand || "";
$scope.editingExisting = true;
$scope.editFolderModal(); $scope.editFolderModal();
}; };
$scope.addFolder = function () { $scope.addFolder = function () {
$http.get(urlbase + '/svc/random/string?length=10').success(function (data) { $http.get(urlbase + '/svc/random/string?length=10').success(function (data) {
$scope.editingExisting = false;
$scope.currentFolder = angular.copy($scope.folderDefaults); $scope.currentFolder = angular.copy($scope.folderDefaults);
$scope.currentFolder.id = (data.random.substr(0, 5) + '-' + data.random.substr(5, 5)).toLowerCase(); $scope.currentFolder.id = (data.random.substr(0, 5) + '-' + data.random.substr(5, 5)).toLowerCase();
$scope.editingExisting = false;
$scope.editFolderModal(); $scope.editFolderModal();
}); });
}; };
$scope.addFolderAndShare = function (folder, folderLabel, device) { $scope.addFolderAndShare = function (folder, folderLabel, device) {
$scope.dismissFolderRejection(folder, device); $scope.dismissFolderRejection(folder, device);
$scope.editingExisting = false;
$scope.currentFolder = angular.copy($scope.folderDefaults); $scope.currentFolder = angular.copy($scope.folderDefaults);
$scope.currentFolder.id = folder; $scope.currentFolder.id = folder;
$scope.currentFolder.label = folderLabel; $scope.currentFolder.label = folderLabel;
@ -1459,7 +1491,6 @@ angular.module('syncthing.core')
}; };
$scope.currentFolder.selectedDevices[device] = true; $scope.currentFolder.selectedDevices[device] = true;
$scope.editingExisting = false;
$scope.editFolderModal(); $scope.editFolderModal();
}; };

View File

@ -73,6 +73,7 @@ func TestDefaultValues(t *testing.T) {
KCPSendWindowSize: 128, KCPSendWindowSize: 128,
KCPUpdateIntervalMs: 25, KCPUpdateIntervalMs: 25,
KCPFastResend: false, KCPFastResend: false,
DefaultFolderPath: "~",
} }
cfg := New(device1) cfg := New(device1)
@ -221,6 +222,7 @@ func TestOverriddenValues(t *testing.T) {
KCPSendWindowSize: 1280, KCPSendWindowSize: 1280,
KCPUpdateIntervalMs: 1000, KCPUpdateIntervalMs: 1000,
KCPFastResend: true, KCPFastResend: true,
DefaultFolderPath: "/media/syncthing",
} }
os.Unsetenv("STNOUPGRADE") os.Unsetenv("STNOUPGRADE")

View File

@ -140,6 +140,7 @@ type OptionsConfiguration struct {
KCPCongestionControl bool `xml:"kcpCongestionControl" json:"kcpCongestionControl" default:"true"` KCPCongestionControl bool `xml:"kcpCongestionControl" json:"kcpCongestionControl" default:"true"`
KCPSendWindowSize int `xml:"kcpSendWindowSize" json:"kcpSendWindowSize" default:"128"` KCPSendWindowSize int `xml:"kcpSendWindowSize" json:"kcpSendWindowSize" default:"128"`
KCPReceiveWindowSize int `xml:"kcpReceiveWindowSize" json:"kcpReceiveWindowSize" default:"128"` KCPReceiveWindowSize int `xml:"kcpReceiveWindowSize" json:"kcpReceiveWindowSize" default:"128"`
DefaultFolderPath string `xml:"defaultFolderPath" json:"defaultFolderPath" default:"~"`
DeprecatedUPnPEnabled bool `xml:"upnpEnabled,omitempty" json:"-"` DeprecatedUPnPEnabled bool `xml:"upnpEnabled,omitempty" json:"-"`
DeprecatedUPnPLeaseM int `xml:"upnpLeaseMinutes,omitempty" json:"-"` DeprecatedUPnPLeaseM int `xml:"upnpLeaseMinutes,omitempty" json:"-"`

View File

@ -38,11 +38,12 @@
<stunKeepaliveSeconds>10</stunKeepaliveSeconds> <stunKeepaliveSeconds>10</stunKeepaliveSeconds>
<stunServer>a.stun.com</stunServer> <stunServer>a.stun.com</stunServer>
<stunServer>b.stun.com</stunServer> <stunServer>b.stun.com</stunServer>
<defaultKCPEnabled>true</defaultKCPEnabled> <defaultKCPEnabled>true</defaultKCPEnabled>
<kcpCongestionControl>false</kcpCongestionControl> <kcpCongestionControl>false</kcpCongestionControl>
<kcpReceiveWindowSize>1280</kcpReceiveWindowSize> <kcpReceiveWindowSize>1280</kcpReceiveWindowSize>
<kcpSendWindowSize>1280</kcpSendWindowSize> <kcpSendWindowSize>1280</kcpSendWindowSize>
<kcpUpdateIntervalMs>1000</kcpUpdateIntervalMs> <kcpUpdateIntervalMs>1000</kcpUpdateIntervalMs>
<kcpFastResend>true</kcpFastResend> <kcpFastResend>true</kcpFastResend>
<defaultFolderPath>/media/syncthing</defaultFolderPath>
</options> </options>
</configuration> </configuration>