gui: Split folders into two categories on the sharing tab for devices (#7162)

This commit is contained in:
André Colomb
2020-12-09 14:54:51 +01:00
committed by GitHub
parent b0a525a504
commit 4198b5061f
4 changed files with 94 additions and 69 deletions
@@ -1430,32 +1430,28 @@ angular.module('syncthing.core')
} }
$scope.currentDevice._addressesStr = deviceCfg.addresses.join(', '); $scope.currentDevice._addressesStr = deviceCfg.addresses.join(', ');
initShareEditing('device'); initShareEditing('device');
$scope.currentSharing.selected = {}; $scope.deviceFolders($scope.currentDevice).forEach(function (folderID) {
$scope.deviceFolders($scope.currentDevice).forEach(function (folder) { $scope.currentSharing.shared.push($scope.folders[folderID]);
$scope.currentSharing.selected[folder] = true; $scope.currentSharing.selected[folderID] = true;
});
$scope.currentSharing.unrelated = $scope.folderList().filter(function (n) {
return !$scope.currentSharing.selected[n.id];
}); });
$scope.deviceEditor.$setPristine(); $scope.deviceEditor.$setPristine();
$('#editDevice').modal(); $('#editDevice').modal();
}; };
$scope.selectAllFolders = function (state) {
var folders = $scope.folders;
for (var id in folders) {
$scope.currentSharing.selected[id] = !!state;
};
};
$scope.selectAllSharedFolders = function (state) { $scope.selectAllSharedFolders = function (state) {
var devices = $scope.currentSharing.shared; var folders = $scope.currentSharing.shared;
for (var i = 0; i < devices.length; i++) { for (var i = 0; i < folders.length; i++) {
$scope.currentSharing.selected[devices[i].deviceID] = !!state; $scope.currentSharing.selected[folders[i].id] = !!state;
} }
}; };
$scope.selectAllUnrelatedFolders = function (state) { $scope.selectAllUnrelatedFolders = function (state) {
var devices = $scope.currentSharing.unrelated; var folders = $scope.currentSharing.unrelated;
for (var i = 0; i < devices.length; i++) { for (var i = 0; i < folders.length; i++) {
$scope.currentSharing.selected[devices[i].deviceID] = !!state; $scope.currentSharing.selected[folders[i].id] = !!state;
} }
}; };
@@ -1485,6 +1481,7 @@ angular.module('syncthing.core')
}; };
$scope.editingExisting = false; $scope.editingExisting = false;
initShareEditing('device'); initShareEditing('device');
$scope.currentSharing.unrelated = $scope.folderList();
$scope.deviceEditor.$setPristine(); $scope.deviceEditor.$setPristine();
$('#editDevice').modal(); $('#editDevice').modal();
}); });
@@ -1533,17 +1530,22 @@ angular.module('syncthing.core')
} }
if (!found) { if (!found) {
// Add device to folder
$scope.folders[id].devices.push({ $scope.folders[id].devices.push({
deviceID: deviceCfg.deviceID deviceID: deviceCfg.deviceID
}); });
} }
} else { } else {
// Remove device from folder
$scope.folders[id].devices = $scope.folders[id].devices.filter(function (n) { $scope.folders[id].devices = $scope.folders[id].devices.filter(function (n) {
return n.deviceID !== deviceCfg.deviceID; return n.deviceID !== deviceCfg.deviceID;
}); });
} }
} }
delete $scope.currentSharing;
$scope.config.folders = folderList($scope.folders);
$scope.saveConfig(); $scope.saveConfig();
}; };
@@ -65,15 +65,38 @@
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<div class="form-group"> <div class="form-group" ng-if="currentSharing.shared.length">
<label translate for="folders">Share Folders With Device</label> <label translate for="folders">Shared Folders</label>
<p class="help-block"> <p class="help-block">
<span translate>Select the folders to share with this device.</span>&emsp; <span translate>Deselect folders to stop sharing with this device.</span>&emsp;
<small><a href="#" ng-click="selectAllFolders(true)" translate>Select All</a>&emsp; <small><a href="#" ng-click="selectAllSharedFolders(true)" translate>Select All</a>&emsp;
<a href="#" ng-click="selectAllFolders(false)" translate>Deselect All</a></small> <a href="#" ng-click="selectAllSharedFolders(false)" translate>Deselect All</a></small>
</p> </p>
<div class="row"> <div class="row">
<div class="col-md-4" ng-repeat="folder in folderList()"> <div class="col-md-4" ng-repeat="folder in currentSharing.shared">
<div class="checkbox">
<label ng-if="folder.label.length == 0">
<input type="checkbox" ng-model="currentSharing.selected[folder.id]" />&nbsp;{{folder.id}}
</label>
<label ng-if="folder.label.length != 0">
<input type="checkbox" ng-model="currentSharing.selected[folder.id]" />&nbsp; <span tooltip data-original-title="{{folder.id}}">{{folder.label}}</span>
</label>
</div>
</div>
</div>
</div>
<div class="form-group" ng-if="currentSharing.unrelated.length || folderList().length == 0">
<label translate for="folders">Unshared Folders</label>
<p class="help-block" ng-if="folderList().length > 0">
<span translate>Select additional folders to share with this device.</span>&emsp;
<small><a href="#" ng-click="selectAllUnrelatedFolders(true)" translate>Select All</a>&emsp;
<a href="#" ng-click="selectAllUnrelatedFolders(false)" translate>Deselect All</a></small>
</p>
<p class="help-block" ng-if="folderList().length == 0">
<span translate>There are no folders to share with this device.</span>
</p>
<div class="row">
<div class="col-md-4" ng-repeat="folder in currentSharing.unrelated">
<div class="checkbox"> <div class="checkbox">
<label ng-if="folder.label.length == 0"> <label ng-if="folder.label.length == 0">
<input type="checkbox" ng-model="currentSharing.selected[folder.id]">&nbsp;{{folder.id}} <input type="checkbox" ng-model="currentSharing.selected[folder.id]">&nbsp;{{folder.id}}
@@ -1433,40 +1433,36 @@ angular.module('syncthing.core')
} }
} }
$scope.currentDevice._addressesStr = deviceCfg.addresses.join(', '); $scope.currentDevice._addressesStr = deviceCfg.addresses.join(', ');
initShareEditing('device'); initShareEditing('device');
for (var folderID in $scope.folders) { $scope.deviceFolders($scope.currentDevice).forEach(function (folderID) {
var found = false; $scope.currentSharing.shared.push($scope.folders[folderID]);
for (var i = 0; i < $scope.folders[folderID].devices.length; i++) { $scope.currentSharing.selected[folderID] = true;
if ($scope.folders[folderID].devices[i].deviceID === deviceCfg.deviceID) { var folderdevices = $scope.folders[folderID].devices;
found = true; for (var i = 0; i < folderdevices.length; i++) {
if (folderdevices[i].deviceID === deviceCfg.deviceID) {
$scope.currentSharing.encryptionPasswords[folderID] = folderdevices[i].encryptionPassword;
break; break;
} }
} }
if (found) { });
$scope.currentSharing.encryptionPasswords[folderID] = $scope.folders[folderID].devices[i].encryptionPassword; $scope.currentSharing.unrelated = $scope.folderList().filter(function (n) {
$scope.currentSharing.shared.push($scope.folders[folderID]); return !$scope.currentSharing.selected[n.id];
} else { });
$scope.currentSharing.unrelated.push($scope.folders[folderID]);
}
$scope.currentSharing.selected[folderID] = found;
}
$scope.deviceEditor.$setPristine(); $scope.deviceEditor.$setPristine();
$('#editDevice').modal(); $('#editDevice').modal();
}; };
$scope.selectAllSharedFolders = function (state) { $scope.selectAllSharedFolders = function (state) {
var devices = $scope.currentSharing.shared; var folders = $scope.currentSharing.shared;
for (var i = 0; i < devices.length; i++) { for (var i = 0; i < folders.length; i++) {
$scope.currentSharing.selected[devices[i].deviceID] = !!state; $scope.currentSharing.selected[folders[i].id] = !!state;
} }
}; };
$scope.selectAllUnrelatedFolders = function (state) { $scope.selectAllUnrelatedFolders = function (state) {
var devices = $scope.currentSharing.unrelated; var folders = $scope.currentSharing.unrelated;
for (var i = 0; i < devices.length; i++) { for (var i = 0; i < folders.length; i++) {
$scope.currentSharing.selected[devices[i].deviceID] = !!state; $scope.currentSharing.selected[folders[i].id] = !!state;
} }
}; };
@@ -1496,6 +1492,7 @@ angular.module('syncthing.core')
}; };
$scope.editingExisting = false; $scope.editingExisting = false;
initShareEditing('device'); initShareEditing('device');
$scope.currentSharing.unrelated = $scope.folderList();
$scope.deviceEditor.$setPristine(); $scope.deviceEditor.$setPristine();
$('#editDevice').modal(); $('#editDevice').modal();
}); });
@@ -1533,36 +1530,36 @@ angular.module('syncthing.core')
$scope.devices[deviceCfg.deviceID] = deviceCfg; $scope.devices[deviceCfg.deviceID] = deviceCfg;
$scope.config.devices = deviceList($scope.devices); $scope.config.devices = deviceList($scope.devices);
$scope.currentSharing.shared.forEach(function (folder) { for (var id in $scope.currentSharing.selected) {
var id = folder.id; if ($scope.currentSharing.selected[id]) {
if ($scope.currentSharing.selected[id] !== true) { var found = false;
// Remove device from folder
$scope.folders[id].devices = $scope.folders[id].devices.filter(function (n) {
return n.deviceID !== deviceCfg.deviceID;
});
return;
}
// Update encryption pw
for (i = 0; i < $scope.folders[id].devices.length; i++) { for (i = 0; i < $scope.folders[id].devices.length; i++) {
if ($scope.folders[id].devices[i].deviceID === deviceCfg.deviceID) { if ($scope.folders[id].devices[i].deviceID === deviceCfg.deviceID) {
found = true;
// Update encryption pw
$scope.folders[id].devices[i].encryptionPassword = $scope.currentSharing.encryptionPasswords[id]; $scope.folders[id].devices[i].encryptionPassword = $scope.currentSharing.encryptionPasswords[id];
break; break;
} }
} }
});
$scope.currentSharing.unrelated.forEach(function (folder) { if (!found) {
if ($scope.currentSharing.selected[folder.id] === true) { // Add device to folder
$scope.folders[folder.id].devices.push({ $scope.folders[id].devices.push({
deviceID: deviceCfg.deviceID, deviceID: deviceCfg.deviceID,
encryptionPassword: $scope.currentSharing.encryptionPasswords[folder.id], encryptionPassword: $scope.currentSharing.encryptionPasswords[id]
}); });
} }
} else {
// Remove device from folder
$scope.folders[id].devices = $scope.folders[id].devices.filter(function (n) {
return n.deviceID !== deviceCfg.deviceID;
}); });
}
}
delete $scope.currentSharing; delete $scope.currentSharing;
$scope.config.folders = folderList($scope.folders); $scope.config.folders = folderList($scope.folders);
$scope.saveConfig(); $scope.saveConfig();
}; };
@@ -1981,8 +1978,8 @@ angular.module('syncthing.core')
// Bump time // Bump time
pendingFolder.time = (new Date()).toISOString(); pendingFolder.time = (new Date()).toISOString();
if (id in $scope.devices) { if (device in $scope.devices) {
$scope.devices[id].ignoredFolders.push(pendingFolder); $scope.devices[device].ignoredFolders.push(pendingFolder);
$scope.saveConfig(); $scope.saveConfig();
} }
}; };
@@ -67,7 +67,7 @@
<div class="form-horizontal" ng-if="currentSharing.shared.length"> <div class="form-horizontal" ng-if="currentSharing.shared.length">
<label translate for="folders">Shared Folders</label> <label translate for="folders">Shared Folders</label>
<p class="help-block"> <p class="help-block">
<span translate>Select the folders to share with this device.</span>&emsp; <span translate>Deselect folders to stop sharing with this device.</span>&emsp;
<small><a href="#" ng-click="selectAllSharedFolders(true)" translate>Select All</a>&emsp; <small><a href="#" ng-click="selectAllSharedFolders(true)" translate>Select All</a>&emsp;
<a href="#" ng-click="selectAllSharedFolders(false)" translate>Deselect All</a></small> <a href="#" ng-click="selectAllSharedFolders(false)" translate>Deselect All</a></small>
</p> </p>
@@ -76,12 +76,15 @@
</div> </div>
</div> </div>
<div class="form-horizontal" ng-if="currentSharing.unrelated.length"> <div class="form-horizontal" ng-if="currentSharing.unrelated.length">
<label translate>Unshared Folders</label> <label translate for="folders">Unshared Folders</label>
<p class="help-block"> <p class="help-block" ng-if="folderList().length > 0">
<span translate>Select additional folders to share with this device.</span>&emsp; <span translate>Select additional folders to share with this device.</span>&emsp;
<small><a href="#" ng-click="selectAllUnrelatedFolders(true)" translate>Select All</a>&emsp; <small><a href="#" ng-click="selectAllUnrelatedFolders(true)" translate>Select All</a>&emsp;
<a href="#" ng-click="selectAllUnrelatedFolders(false)" translate>Deselect All</a></small> <a href="#" ng-click="selectAllUnrelatedFolders(false)" translate>Deselect All</a></small>
</p> </p>
<p class="help-block" ng-if="folderList().length == 0">
<span translate>There are no folders to share with this device.</span>
</p>
<div class="form-group" ng-repeat="folder in currentSharing.unrelated"> <div class="form-group" ng-repeat="folder in currentSharing.unrelated">
<share-template selected="currentSharing.selected" encryption-passwords="currentSharing.encryptionPasswords" id="{{folder.id}}" label="{{folderLabel(folder.id)}}" folder-type="{{folder.type}}" untrusted="{{currentDevice.untrusted}}" /> <share-template selected="currentSharing.selected" encryption-passwords="currentSharing.encryptionPasswords" id="{{folder.id}}" label="{{folderLabel(folder.id)}}" folder-type="{{folder.type}}" untrusted="{{currentDevice.untrusted}}" />
</div> </div>