|
|
@@ -38,6 +38,8 @@ angular.module('syncthing.core')
|
|
|
$scope.upgradeInfo = null;
|
|
|
$scope.deviceStats = {};
|
|
|
$scope.folderStats = {};
|
|
|
+ $scope.pendingDevices = {};
|
|
|
+ $scope.pendingFolders = {};
|
|
|
$scope.progress = {};
|
|
|
$scope.version = {};
|
|
|
$scope.needed = {}
|
|
|
@@ -242,6 +244,34 @@ angular.module('syncthing.core')
|
|
|
}
|
|
|
});
|
|
|
|
|
|
+ $scope.$on(Events.DEVICE_REJECTED, function (event, arg) {
|
|
|
+ var pendingDevice = {
|
|
|
+ time: arg.time,
|
|
|
+ name: arg.data.name,
|
|
|
+ address: arg.data.address
|
|
|
+ };
|
|
|
+ console.log("rejected device:", arg.data.device, pendingDevice);
|
|
|
+
|
|
|
+ $scope.pendingDevices[arg.data.device] = pendingDevice;
|
|
|
+ });
|
|
|
+
|
|
|
+ $scope.$on(Events.FOLDER_REJECTED, function (event, arg) {
|
|
|
+ var offeringDevice = {
|
|
|
+ time: arg.time,
|
|
|
+ label: arg.data.folderLabel
|
|
|
+ };
|
|
|
+ console.log("rejected folder", arg.data.folder, "from device:", arg.data.device, offeringDevice);
|
|
|
+
|
|
|
+ var pendingFolder = $scope.pendingFolders[arg.data.folder];
|
|
|
+ if (pendingFolder === undefined) {
|
|
|
+ pendingFolder = {
|
|
|
+ offeredBy: {}
|
|
|
+ };
|
|
|
+ }
|
|
|
+ pendingFolder.offeredBy[arg.data.device] = offeringDevice;
|
|
|
+ $scope.pendingFolders[arg.data.folder] = pendingFolder;
|
|
|
+ });
|
|
|
+
|
|
|
$scope.$on('ConfigLoaded', function () {
|
|
|
if ($scope.config.options.urAccepted === 0) {
|
|
|
// If usage reporting has been neither accepted nor declined,
|
|
|
@@ -391,6 +421,7 @@ angular.module('syncthing.core')
|
|
|
});
|
|
|
});
|
|
|
|
|
|
+ refreshCluster();
|
|
|
refreshNoAuthWarning();
|
|
|
setDefaultTheme();
|
|
|
|
|
|
@@ -455,6 +486,16 @@ angular.module('syncthing.core')
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ function refreshCluster() {
|
|
|
+ $http.get(urlbase + '/cluster/pending/devices').success(function (data) {
|
|
|
+ $scope.pendingDevices = data;
|
|
|
+ console.log("refreshCluster devices", data);
|
|
|
+ }).error($scope.emitHTTPError);
|
|
|
+ $http.get(urlbase + '/cluster/pending/folders').success(function (data) {
|
|
|
+ $scope.pendingFolders = data;
|
|
|
+ console.log("refreshCluster folders", data);
|
|
|
+ }).error($scope.emitHTTPError);
|
|
|
+ }
|
|
|
|
|
|
function refreshDiscoveryCache() {
|
|
|
$http.get(urlbase + '/system/discovery').success(function (data) {
|
|
|
@@ -1016,7 +1057,6 @@ angular.module('syncthing.core')
|
|
|
|
|
|
// loop through all devices
|
|
|
var deviceCount = 0;
|
|
|
- var pendingFolders = 0;
|
|
|
for (var id in $scope.devices) {
|
|
|
var status = $scope.deviceStatus({
|
|
|
deviceID: id
|
|
|
@@ -1032,14 +1072,11 @@ angular.module('syncthing.core')
|
|
|
deviceCount--;
|
|
|
break;
|
|
|
}
|
|
|
- pendingFolders += $scope.devices[id].pendingFolders.length;
|
|
|
deviceCount++;
|
|
|
}
|
|
|
|
|
|
// enumerate notifications
|
|
|
- if ($scope.openNoAuth || !$scope.configInSync || $scope.errorList().length > 0 || !online || (
|
|
|
- !isEmptyObject($scope.config) && ($scope.config.pendingDevices.length > 0 || pendingFolders > 0)
|
|
|
- )) {
|
|
|
+ if ($scope.openNoAuth || !$scope.configInSync || $scope.errorList().length > 0 || !online || Object.keys($scope.pendingDevices).length > 0 || Object.keys($scope.pendingFolders).length > 0) {
|
|
|
notifyCount++;
|
|
|
}
|
|
|
|
|
|
@@ -1487,7 +1524,6 @@ angular.module('syncthing.core')
|
|
|
_addressesStr: 'dynamic',
|
|
|
compression: 'metadata',
|
|
|
introducer: false,
|
|
|
- pendingFolders: [],
|
|
|
ignoredFolders: []
|
|
|
};
|
|
|
$scope.editingExisting = false;
|
|
|
@@ -1563,11 +1599,12 @@ angular.module('syncthing.core')
|
|
|
$scope.saveConfig();
|
|
|
};
|
|
|
|
|
|
- $scope.ignoreDevice = function (pendingDevice) {
|
|
|
- pendingDevice = angular.copy(pendingDevice);
|
|
|
+ $scope.ignoreDevice = function (deviceID, pendingDevice) {
|
|
|
+ var ignoredDevice = angular.copy(pendingDevice);
|
|
|
+ ignoredDevice.deviceID = deviceID;
|
|
|
// Bump time
|
|
|
- pendingDevice.time = (new Date()).toISOString();
|
|
|
- $scope.config.remoteIgnoredDevices.push(pendingDevice);
|
|
|
+ ignoredDevice.time = (new Date()).toISOString();
|
|
|
+ $scope.config.remoteIgnoredDevices.push(ignoredDevice);
|
|
|
$scope.saveConfig();
|
|
|
};
|
|
|
|
|
|
@@ -1973,13 +2010,16 @@ angular.module('syncthing.core')
|
|
|
});
|
|
|
};
|
|
|
|
|
|
- $scope.ignoreFolder = function (device, pendingFolder) {
|
|
|
- pendingFolder = angular.copy(pendingFolder);
|
|
|
- // Bump time
|
|
|
- pendingFolder.time = (new Date()).toISOString();
|
|
|
+ $scope.ignoreFolder = function (device, folderID, offeringDevice) {
|
|
|
+ var ignoredFolder = {
|
|
|
+ id: folderID,
|
|
|
+ label: offeringDevice.label,
|
|
|
+ // Bump time
|
|
|
+ time: (new Date()).toISOString()
|
|
|
+ }
|
|
|
|
|
|
- if (device in $scope.devices) {
|
|
|
- $scope.devices[device].ignoredFolders.push(pendingFolder);
|
|
|
+ if (id in $scope.devices) {
|
|
|
+ $scope.devices[id].ignoredFolders.push(ignoredFolder);
|
|
|
$scope.saveConfig();
|
|
|
}
|
|
|
};
|