diff --git a/cmd/syncthing/connections.go b/cmd/syncthing/connections.go index 2c47b3b3c..eda71da9f 100644 --- a/cmd/syncthing/connections.go +++ b/cmd/syncthing/connections.go @@ -158,6 +158,10 @@ next: l.Infof("Connected to already connected device (%s)", remoteID) c.Conn.Close() continue + } else if s.model.IsPaused(remoteID) { + l.Infof("Connection from paused device (%s)", remoteID) + c.Conn.Close() + continue } for deviceID, deviceCfg := range s.cfg.Devices() { @@ -235,6 +239,10 @@ func (s *connectionSvc) connect() { continue } + if s.model.IsPaused(deviceID) { + continue + } + connected := s.model.ConnectedTo(deviceID) s.mut.RLock() diff --git a/cmd/syncthing/gui.go b/cmd/syncthing/gui.go index c19567f66..0dafaaf07 100644 --- a/cmd/syncthing/gui.go +++ b/cmd/syncthing/gui.go @@ -169,6 +169,8 @@ func (s *apiSvc) Serve() { postRestMux.HandleFunc("/rest/system/restart", s.postSystemRestart) // - postRestMux.HandleFunc("/rest/system/shutdown", s.postSystemShutdown) // - postRestMux.HandleFunc("/rest/system/upgrade", s.postSystemUpgrade) // - + postRestMux.HandleFunc("/rest/system/pause", s.postSystemPause) // device + postRestMux.HandleFunc("/rest/system/resume", s.postSystemResume) // device // Debug endpoints, not for general use getRestMux.HandleFunc("/rest/debug/peerCompletion", s.getPeerCompletion) @@ -833,6 +835,32 @@ func (s *apiSvc) postSystemUpgrade(w http.ResponseWriter, r *http.Request) { } } +func (s *apiSvc) postSystemPause(w http.ResponseWriter, r *http.Request) { + var qs = r.URL.Query() + var deviceStr = qs.Get("device") + + device, err := protocol.DeviceIDFromString(deviceStr) + if err != nil { + http.Error(w, err.Error(), 500) + return + } + + s.model.PauseDevice(device) +} + +func (s *apiSvc) postSystemResume(w http.ResponseWriter, r *http.Request) { + var qs = r.URL.Query() + var deviceStr = qs.Get("device") + + device, err := protocol.DeviceIDFromString(deviceStr) + if err != nil { + http.Error(w, err.Error(), 500) + return + } + + s.model.ResumeDevice(device) +} + func (s *apiSvc) postDBScan(w http.ResponseWriter, r *http.Request) { qs := r.URL.Query() folder := qs.Get("folder") diff --git a/cmd/syncthing/verbose.go b/cmd/syncthing/verbose.go index e94ad4690..8856f5be4 100644 --- a/cmd/syncthing/verbose.go +++ b/cmd/syncthing/verbose.go @@ -123,6 +123,15 @@ func (s *verboseSvc) formatEvent(ev events.Event) string { delete(sum, "ignorePatterns") delete(sum, "stateChanged") return fmt.Sprintf("Summary for folder %q is %v", data["folder"], data["summary"]) + + case events.DevicePaused: + data := ev.Data.(map[string]string) + device := data["device"] + return fmt.Sprintf("Device %v was paused", device) + case events.DeviceResumed: + data := ev.Data.(map[string]string) + device := data["device"] + return fmt.Sprintf("Device %v was resumed", device) } return fmt.Sprintf("%s %#v", ev.Type, ev) diff --git a/gui/assets/lang/lang-en.json b/gui/assets/lang/lang-en.json index fd89ca253..527f49971 100644 --- a/gui/assets/lang/lang-en.json +++ b/gui/assets/lang/lang-en.json @@ -113,6 +113,8 @@ "Override Changes": "Override Changes", "Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for": "Path to the folder on the local computer. Will be created if it does not exist. The tilde character (~) can be used as a shortcut for", "Path where versions should be stored (leave empty for the default .stversions folder in the folder).": "Path where versions should be stored (leave empty for the default .stversions folder in the folder).", + "Pause": "Pause", + "Paused": "Paused", "Please consult the release notes before performing a major upgrade.": "Please consult the release notes before performing a major upgrade.", "Please wait": "Please wait", "Preview": "Preview", @@ -130,6 +132,7 @@ "Restart": "Restart", "Restart Needed": "Restart Needed", "Restarting": "Restarting", + "Resume": "Resume", "Reused": "Reused", "Save": "Save", "Scanning": "Scanning", diff --git a/gui/index.html b/gui/index.html index fd244d652..7cc8b567d 100755 --- a/gui/index.html +++ b/gui/index.html @@ -425,6 +425,7 @@ ({{completion[deviceCfg.deviceID]._total | number:0}}%) + @@ -434,18 +435,18 @@
- + - + @@ -461,11 +462,11 @@ - + - + @@ -482,6 +483,12 @@ + +
diff --git a/gui/syncthing/core/eventService.js b/gui/syncthing/core/eventService.js index 0adc23004..c2a0a1a85 100644 --- a/gui/syncthing/core/eventService.js +++ b/gui/syncthing/core/eventService.js @@ -63,6 +63,8 @@ angular.module('syncthing.core') DEVICE_DISCONNECTED: 'DeviceDisconnected', // Generated each time a connection to a device has been terminated DEVICE_DISCOVERED: 'DeviceDiscovered', // Emitted when a new device is discovered using local discovery DEVICE_REJECTED: 'DeviceRejected', // Emitted when there is a connection from a device we are not configured to talk to + DEVICE_PAUSED: 'DevicePaused', // Emitted when a device has been paused + DEVICE_RESUMED: 'DeviceResumed', // Emitted when a device has been resumed DOWNLOAD_PROGRESS: 'DownloadProgress', // Emitted during file downloads for each folder for each file FOLDER_COMPLETION: 'FolderCompletion', //Emitted when the local or remote contents for a folder changes FOLDER_REJECTED: 'FolderRejected', // Emitted when a device sends index information for a folder we do not have, or have but do not share with the device in question diff --git a/gui/syncthing/core/syncthingController.js b/gui/syncthing/core/syncthingController.js index 4980af052..001410ea4 100755 --- a/gui/syncthing/core/syncthingController.js +++ b/gui/syncthing/core/syncthingController.js @@ -165,7 +165,7 @@ angular.module('syncthing.core') }); $scope.$on(Events.DEVICE_DISCONNECTED, function (event, arg) { - delete $scope.connections[arg.data.id]; + $scope.connections[arg.data.id].connected = false; refreshDeviceStats(); }); @@ -209,6 +209,14 @@ angular.module('syncthing.core') $scope.deviceRejections[arg.data.device] = arg; }); + $scope.$on(Events.DEVICE_PAUSED, function (event, arg) { + $scope.connections[arg.data.device].paused = true; + }); + + $scope.$on(Events.DEVICE_RESUMED, function (event, arg) { + $scope.connections[arg.data.device].paused = false; + }); + $scope.$on(Events.FOLDER_REJECTED, function (event, arg) { $scope.folderRejections[arg.data.folder + "-" + arg.data.device] = arg; }); @@ -625,7 +633,15 @@ angular.module('syncthing.core') return 'unused'; } - if ($scope.connections[deviceCfg.deviceID]) { + if (typeof $scope.connections[deviceCfg.deviceID] === 'undefined') { + return 'unknown'; + } + + if ($scope.connections[deviceCfg.deviceID].paused) { + return 'paused'; + } + + if ($scope.connections[deviceCfg.deviceID].connected) { if ($scope.completion[deviceCfg.deviceID] && $scope.completion[deviceCfg.deviceID]._total === 100) { return 'insync'; } else { @@ -643,7 +659,15 @@ angular.module('syncthing.core') return 'warning'; } - if ($scope.connections[deviceCfg.deviceID]) { + if (typeof $scope.connections[deviceCfg.deviceID] === 'undefined') { + return 'info'; + } + + if ($scope.connections[deviceCfg.deviceID].paused) { + return 'default'; + } + + if ($scope.connections[deviceCfg.deviceID].connected) { if ($scope.completion[deviceCfg.deviceID] && $scope.completion[deviceCfg.deviceID]._total === 100) { return 'success'; } else { @@ -657,7 +681,7 @@ angular.module('syncthing.core') $scope.deviceAddr = function (deviceCfg) { var conn = $scope.connections[deviceCfg.deviceID]; - if (conn) { + if (conn && conn.connected) { return conn.address; } return '?'; @@ -702,6 +726,14 @@ angular.module('syncthing.core') return device.deviceID.substr(0, 6); }; + $scope.pauseDevice = function (device) { + $http.post(urlbase + "/system/pause?device=" + device); + }; + + $scope.resumeDevice = function (device) { + $http.post(urlbase + "/system/resume?device=" + device); + }; + $scope.editSettings = function () { // Make a working copy $scope.tmpOptions = angular.copy($scope.config.options); diff --git a/lib/auto/gui.files.go b/lib/auto/gui.files.go index 9101f756a..368db8a40 100644 --- a/lib/auto/gui.files.go +++ b/lib/auto/gui.files.go @@ -5,7 +5,7 @@ import ( ) const ( - AssetsBuildDate = "Wed, 19 Aug 2015 20:10:12 GMT" + AssetsBuildDate = "Sun, 23 Aug 2015 19:54:43 GMT" ) func Assets() map[string][]byte { @@ -50,7 +50,7 @@ func Assets() map[string][]byte { assets["assets/lang/lang-zh-TW.json"], _ = base64.StdEncoding.DecodeString("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") assets["assets/lang/prettyprint.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/1xSUY7TMBD95xRWvrISuQASEiQsCxSVKpuF79nGm5g442hst9oijsNJuBgzdtSW/eq892bGb15zAFIWcNiRDuF5IYNBvVW/iseheFPU0Q5ABrB4XeyBiQYC2BW+O4DVuDdXvCq/rxzeSI8X6aT3I4NeM7jTNKdxbQWR1pMAZHCLgzV+TLC6qy+MKh/QBN2rjcGhd7Ns1rL5fgFcJ3x1e39hVMmFSRaeDNMfDa6NTySQ2GJGVfP+TKiyAYQeZGyMTH+KeL7eBCY+85EZ/pSjvwA/p71mPLlq0zK1caQlhvQri6zMfTVhjOwsjeIjM1tHRz0woWo3zX//WBEkkg8xJGuI/3Vtn9GRl6wW6dq5NaolVHWbCApxiGxGlTXBydibrO66F2quIenkqvYb662bkztVrlUSJYI2ep9t+4Pke9R9fjhIkF2kKcM4MXyYiFPP7aexarby748G07tSpL2sdD+ulQ7MUb6X36/+AQAA//8BAAD//5YJ/N+MAgAA") assets["assets/lang/valid-langs.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/yTMvQ6CMBTF8d2nIJ29j2CiEOOgUVNJHIxDgQqVppC2dPDpvacsv38/kpOUL5Kyprso14diV7xE04utaFVmz3/atSbfAtNpRlvgMnQq0ZCh44P7McBnqDpwh4UxkfliaZzoLLkWL64BWHRYnHGaI5Vy7b3m+onkDcVOSEzE/DIyv4Gq69r6Kd6bPwAAAP//AQAA//8bXi5E0gAAAA==") - assets["index.html"], _ = base64.StdEncoding.DecodeString("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") + assets["index.html"], _ = base64.StdEncoding.DecodeString("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") assets["modal.html"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/3RST0/cPhC9/z7F/HLogkQ2gDjRXaoWqVIlKiHBpceJPUlcHDuyJ9BtlO/eibNNYbUcEv97783Mm9lo8wzKYozbrPUaLVSoKQPG0jhNv7ZZfpGBq3NkDrlGxrxE9aSD77bZMAjVR4JPwKEnuIZVZGSjVjCOB6wn2pUeg06sL95bQneS2KcT+OY/gM3/eS5LUcCt73bB1A3Dye0pXJ5fXMFjQ/Cwc4ob42r43HPjQ1wn+Mx5bEyEB98HRcLXBF99aEHuYl/+JMXAHlhEmEIbwVfp8N3/NtYi3PelNWoWujOKXKQzeF7D5fp8Dd8qQFCS0sK6v4MXjOA8gzaRgyl7Jg0vhhsBSMzKWDqb5X74HhQ68CWjkcURIEPD3F0XRTvHX/tQF6JaSLxiKirPkyGHzcm1QevrZO3+fljNL7ZeXYPFUNNs5jG28o7J8f79GKIh6X4AtBR4/ufDMPW0j+O48ITZXL0lsmFLrwACiZ1ULYmaapsZCZ39ZVQoQya60+Wkuikm6GvuMCS9cfwXsGiulrQLyfv9Gkqvd8khDuiisr2m95n7/NIgZm91Ku9lVl4XLV1m74B3HW2z+bBwSnYgX66pwt5y2sc2gzT8MiStWZSP2PTGGTYtxcWWD66M3ccZliqyyHRzOyV8aNymmJM6Uu6y3W/2yx8AAAD//wEAAP//qvxG6f8DAAA=") assets["syncthing/app.js"], _ = base64.StdEncoding.DecodeString("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") assets["syncthing/core/aboutModalDirective.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/1SOMQ7CMAxF954im1upSnc6cQBG2ENqWktOglwHhFDvTgpSgT/+/yw/F8fMTmxIQ2asYX5ErxPF0fokCE1lSuxAgl7pVgB3TlkPaXAMrbnkQlOKpm7M842uEdQs8af4lLMKed0Z2EP7NymGKzvFo3BZN4NuNei+/06EdztpYNiul75amr56AQAA//8BAAD//xLf4CHFAAAA") @@ -59,7 +59,7 @@ func Assets() map[string][]byte { assets["syncthing/core/basenameFilter.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/2yOTU7DMBCF9z3F0I1tCRx1XXySpgvTjBNLziTyDxIiuTuJg4QNvNVI75tvRlOfnPZynLrkkLPwQY84WOrlY/LIxAm2SGNdRM/Zmw5IekT2DCZtoJ0IuIDPTO3xGJOnorQ0p1gSe6z5LkApBYk6NJawExVU6M7na1W9aw+z9jGAguyRYXY28ubWNm17b8T1z7mng1+WY1E6pD4O8AqX388Vd7O7dq2nf7isvFXiF7jcfzbXY1y3x74AAAD//wEAAP//1ZQ6AXEBAAA=") assets["syncthing/core/binaryFilter.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/6SSTU7DMBCF9z3F7GxDZUrFLjJLWKAewsTjdiR3jFxbokK5O0lTJIMa/jKbRJrvPX+LsbwtwSa9j64ElOJw5DbviLe6jQmFWkA/2lPImKR4JrbpKJbgS49RZJAK3k7MMAlzSVwtiV9KrolhyJ8XYIyBwg49MbqvWFUoViCaT8tuovEeblfrO7iqP5eKR/rGXMCbKYtTRuf4QK/opMOW9jYcxoeXsFYKrkHAI/1H9beOM+U2f5P70WqmztP3Oueujc07nWJ/KB/3NGSrZDf+dqpZvAMAAP//AQAA///Yhw40zwIAAA==") assets["syncthing/core/durationFilter.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/3RUTW/aQBS8+1dMV6rsAAE7iVBlQnpoOeTQ5JBjFFUbvMYuthftB21K/N/7FnAwBS+S9TDzZmbnPTHq9TCX1VooA15KWxnIFFrQu0TDSGij8mqBVKqSG7AEGUpoht+5yaQ1+CuUxJoXVmgPPayUmOc6lxVKqw1eBWQlHKWf+AP4mXuU7qH9IBEpt4W5cH2zP7xcFSJ29WYTXUXhVRiG1++JVdwQXV3DncvLO0Q3YZggGme4CUtc666WmJWM2k5auvHZCX6P/R/THIe9jTKv1xt5vFrYgqthKRNbiMDXb9XcZJTdcC6V8OmWdIZpXhihAr8hpChSS0CXWHCBjddQ+1aLbfhz40+8j9drrvA0+/b48P3p5/0DptiwhMX4MibHA5C7GNfjbVlSOaYCTFMV1ZMPDiWMVVVLN69W1gwOs2v7aESV0DQrEmRscvRjniL41NnqzmEnps7McXt9TOacEGzFlRb3lWmsReHFcRvtIwLna0k9rUTO6TuYI92RjQ7g5+UL3kHUGI3wg5tsmBZSKu+Ewd3R4I6gZ+h3kW7T6dMF6dMnuT6WkxNofZ66FdAUy26N7dj2Ul+bIga7jViHHkRBa3Seb5f15ymOAjlnuvvb3hN7niklVUyctOx0GwOr+UIMuv8PnOPH118EHS7Fmw7aI+yDvbTWZL+6Na3APwAAAP//AQAA///R6NJhrwQAAA==") - assets["syncthing/core/eventService.js"], _ = base64.StdEncoding.DecodeString("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") + assets["syncthing/core/eventService.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/8xXXY/bthJ9z69gggDy4hqOc4F7HzZIC8OWNy52bcP2Ji2KYkFLlM2WIl2SWscp9r93hpRkfXkbFClQP+zqYzRz5vDMDPlINYnZNtuFj0xaQ96Tl1Zn7N2LF1TuMkH1IFVxJlgvMCcZ2T2Xu0GkNAuuXhD4DQzTjzyC1/77oE9+Dl7vrT3AVfBaK2XXkTowd2d5ylRm4TrJwBdXkvScbZ+cLeE6t7sif7gY+Asyw4ixmkc2AGzFY0QvqLGzCQAfvqs9N0wk8BQgm8oXZWSTRREzZgoYYmppNRj+3rwhn/ZMknWRNdHMWKqBouOeCwZ+GREKnh+UEPg+UlIy75sbwmXT3UGrHfgw7sutVkegjiAQlTJyENQmSqcGwthMS0Mo+e9wSHqGy8gFa7rbMxozbcieGrJlgDQRmdmzmBy53bsY3hPgihn6uur7V1IRTHjQdLgBosiWGh5RIU4kZVQiVmqds0p2ZUTIhtk+oTL2JvBd0+kRbKWyhEY2c25z2pNM1AHwhPRedi0E/pjWSk+lX6h3rdc+0frzp9rdWV6D10A9jSMQTQ8VMljMb2fz8KoikQJOLqzvyBAw+XQwFZZy+OOrJdEqJQnXxiIZByUNa6FzZMPahjTa987Cdx66ki3CV6rykhn+YGGMEmwg1K73yjl91ffwBjwuruwJC8tfXyCxTdrz5LUcd/h8umouSu22qF6XJJSqY+qgDr3GZ8VihJcoK1tAaQW5Pxu66DGVBely7LrTYMdsL9MCaoOR/5DgjV/8711pvg/gkY9/1cneIFd8r2w4F+ycyHu51JvE9cn/hkPom1QYVnn31NHYcg8goCxNT82snquE6bSrFL4FVYJD0bx/G/yzFL0d/gVHxUhjny2Tscu63+77WOAWGun25IZHnQ3fLq5hIt3PFhIaP4y2uoFn8doZJElu8UyMcq7ihMD068bjxXw6u3lYjz6Gk+vyaTBWMuG7NX1kMcxT5zPMfdLEwmTJmzYYnRu2QXOfFyOZmz8ab89DjlskpQZgEn6cjcMHwDEPx5sCRDBhOPfHfiycQdwwyTRFGAz6HUHtwCirTA+r4D52H5+B4WjdCo7zqyv2ZLauhs9jT7iJvk144CvlEj+7GP1juMpTr0Z/ZLrN/xH3DZRIdiwCwWCNS3MgHpkWCuZl+fjUFXgV/lBhvAi8Yr/WUq6FhYXVLl4taTemyrSPQAkY4SzzAskQFRBjqfgN/ndBWY7u1xX95VCWFER0Kf8myQdn3J3n+v7u7L3M02TpV3vX3rrufvFpfrsYTR6Wq8UNBFnn66eOUkDnW+YbsmaEONO4QAnu8uLcFkY9lIrTVKIEbLwq92BXCztd3E7CFRTM3fI23MwWcx926r4bq/QgGK5KHra5fLkwwLtmqbKuiK3fbMAzWoSP9tDMmOkK3JSND/ysbEo+DfRF3LzG7DP8xR0p9Qqqxj4iL04/e2gofcSKF2Sb2eKF2aPEyq1oUQeS/J5BrYPHLuCggrvR6qdSBx74GsYY1adO3AUZBUUOhqcm9kSKemXNNuHdw3Q2n60/VOU8syydcukaULuVHOsHAUcRdu29VpJ/wUfUq8U1F6h7gAQ1bZppuuDrzWi1qbVyDL7Go8VXxN6yHZd/L/rtYjy6fZjNJ+GPD/fLySjvpbfI0gwX/P4Q08sYztJsqwOrMGe9D+XjoNQhKslQJqnC7gT55ltnN6Tg3GL9KCq64bk/5jIvapISE9F6WsvZ/OaaNH/BEszbmdDMKsTsjzgMGy/5/xBUDwqK68W0Cu8Wm7DJV7ByRfk8X+fRgzOgTRfHU17EOA7jWmuuAXBCaSUXOKVUkivqgX2GMxYkpWBT2m/Kxp9c+yCfBFfgQLXJj6yu/XtYzEZtAPfLopEV488ByA55I2s3lA4gUFmWU8G/lPlH+dfu8FjZfiAzND45AWEc8OYkgC/xeOBbisIxl3Nmmphh0cYfRvOban0DZsvGXqEXGmC9r2J029nWw9VqsVqfXfsmFeKetDVJ6q6xStze1cBOz22M8+LNhHDlUt/4ufyvy339v3PTfd5l52+efoGLPwEAAP//AQAA//+XBFHnVRIAAA==") assets["syncthing/core/httpErrorDialogDirective.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/1yOwcrCMBCE732K3LaFkt7/nn7QR9B7SNd2YZOU7UYR6bubKhR1jjOzO5+LY2YnNqQhM9aw3KPXieJofRKEpjJFdiBBr3QthUl1PookOZDjNEJrLrmcUIqmbszj1d8kqFnih/E2FxXy+mfgH9qvSDHM7BRPwiXdMboNo/sZPRPe7KSBYX+x9tXa9NUTAAD//wEAAP//F1ZQpc8AAAA=") assets["syncthing/core/httpErrorDialogView.html"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/0yQsW7DMAxE5/orCC2ZmvyA7aXoXqBfwMgXW4AsqSQNJEjz75VcFM0kvLvDiWS/5okjhWlwi1l5F8niSI1t08FNnGZUDj6nweHqI69sIadXH8RHOLJgEYO73w9vOSX4ZtLecqBvMuGkkQ2Phxu7l778KxWJPm/J2xLSTAqsSpbpDMK1QAKSbwZTkXyOWNvrodrEW96EBF8b1I70EcGKyheBLmQLqPAMyi1TVxF7+ihcfgN/pRANanqs053K2PWn/SBj9wMAAP//AQAA//+4f+ClGQEAAA==") assets["syncthing/core/identiconDirective.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/5xVTVPbMBC951dsZwp2GkcOdHpJ6s4wDMxwgENz6IEyHVdWYk0VKSPLcSnkv3clJ8F2FL50wUj79r2V3m5SOS9FqslCZaVgYVDcS2pyLueEKs2Cfg9wkYxrRg1fYQDPmDScKhlEcBt8rLjMVIXfsxKBXEkIN3t9eHBgu1aphmI1v5lCAkFuzHIcx1VVkeozUXoen45GoxjPg0lvB9nlu9oShqtUlCyCgv9jzeQNAkyfKVouEEGoZqlhF4LZ/26moeOPILA8/ck+OlelyC65EN+x1DODqZ5K0qqKgCrRpbVLM1NqCR+2dZNlqgt2JU2tl9A81ecqY2fGpoGBzQOf6ioiOBn14QhOO4LWh/Rdc62Vfq9Cy2nZ4PjYqUiSBBY8ywQ7R+RLChaOGyMvlW5xP0/rSIeObwgnL9Y5e/sLWJj152te38bZ5/eopYYUDHmN5r9Lg1b/i7YO69eyp1PnuwEER13/HMDfW7x983fiK56ZHHNswW/B5ozPc+MD76Hxaki6XDKZnedcZKFFvOxHG+XZVdX+Jl6hz00b3/lTW8kdrVZnu0gq0qLAGhtDqSPcmS+p/zw+wpf26e5uEuzDEcQurh2yk4kx16nJCWVc1I0UY9vWlm4h+AzqzvdbFQ8wVT0ajJpiLXIe9olmS5FSFsa3P3/8uos5FuV9rBn2nvNUAqOJvW74WquGwUC3h+4ezLV84+JdT36D4ckEhsMDvdWsqjsin5ryOaSj92A8xfkJmzPv9ZQ+2uYEc1PL00vNtT546j/Z323vrHsd+9UDcjV/ktEI2Rw/dDAFWoaaMQQXQdT2OlVLNj5kOgQkQVtNGy64/DNuTFyXLgJWj9AI0m3fFb6r34RtBkkoWdX44XapSN0U3cnSa3+t7zDgPwAAAP//AQAA//9afsjulQgAAA==") @@ -79,7 +79,7 @@ func Assets() map[string][]byte { assets["syncthing/core/selectOnClickDirective.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/3SQQWvEIBCF7/srPBRiIEjPXXooe2+hPZYeRKeprJkpo2YpJf+9atLdJWzeSZ/z+Z5q7JPXrAayyYNswg+a+OWwV4YYmnYnspR1DCa6sQyAz8sXPHhnjk0nPlMGHKGQdyeHlk6t+K1QEUNMjFdGkXd4fLjigqFv6ES+dwCMndAxcmhXUNEyoQhlY1bx8hZQNGoWc+cS9iiWlqqH+PZvy3a/yXL+IcicJZNqumHQEV6LvcVVRs2pz2ThQBgzGuTygvf7jw3y3FQxDDTCk/c1KWxFXQBt7Vyqpt8Yn1bedN5N+105/AMAAP//AQAA//+SF+4JDAIAAA==") assets["syncthing/core/shutdownDialogDirective.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/1SOwQqDQAxE737F3qIg672eCv2F9r6sqQZitsRspRT/vdqC1DnOTDIvSJ85qB9TlxlLmF4SbSDpfUyKUBVule9IMRo9t8KQrUuzXChw6qF297xeUBJXVu79rW9StKzyZ/zMyZSinRycoT5EhuODg+FVeU13imajaI6bN8LZDzYy7B+WtliqtvgAAAD//wEAAP//3qFOo80AAAA=") assets["syncthing/core/shutdownDialogView.html"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/0TOTaqDMBAH8PXzFMNsXL16gZhNj+AJ0jjWQJwJzgQp1ru3lkK3P/h/uEXGkCGNPepcbZSNEdSCVX1LjZFUEVIU7rHIRuu/TBOCJcvU4763wzcFV1lKJqMWnmBrYM3B6DjQN3+u/MQPD442J77DHBRuRAznMpwlF9cV37juc8o3LwAAAP//AQAA//99X8KxnQAAAA==") - assets["syncthing/core/syncthingController.js"], _ = base64.StdEncoding.DecodeString("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") + assets["syncthing/core/syncthingController.js"], _ = base64.StdEncoding.DecodeString("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") assets["syncthing/core/uniqueFolderDirective.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/7SSwW4yMQyE7zyFD7+0IK3CHc5/b1V74h5tvKzVkIDtQFHFuzdhUaGwtJWqzgVp4vkYW2vDMnnLZhVd8jiuZB8a7SgsTRMZq8kIsowjxkZpmwdSoE3Ch+gdclVDm/I8xQDjCbwdh4sYNXG4MHpzkzJnBlVYPkaHvqo/vXsKL7MLoDRxjTWgX9VgVVlqaJT95ApbVHzzb21ZkMWkIB21Oj6jtoS7hfUJh8JF1J7+z6Ajzev/fyUpv/cCRdMp7BCki8m7UClsrSdnFe8G+pqCuiiTpPubcyrnjvNBwCFfQvCiaXsMiemsPO3CM2ePM/K86zfdtUPoGYBlWwHrGa3b/6J/a3PHrxf4aScS6OF/dM5B9/ThftzwNnu44p05h/moPL4DAAD//wEAAP//r65WJ1IDAAA=") assets["syncthing/core/upgradingDialogDirective.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/1yOwQrCMBBE7/2K3LaFkt7tSfAX9B7SNV3YJmW7UUT676YKRZ3jzNudcTFkdmKnNGTGGpZH9DpSDNYnQWgqU2QHEvRKtwLkOYgbCnAixylAa665nFCKpm7M881vEtQs8cv4mIsKeT0YOEL7EylOMzvFs3BJ9xndNqP7K70Q3u2oE8P+Yu2rtemrFwAAAP//AQAA//99zQ2GzwAAAA==") assets["syncthing/core/upgradingDialogView.html"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/1zOTarDMAwE4PXLKYQ2WSW5gO0zPCg9gHDcVODaxlIIJc3dm5b+QLfDN8yYSx4pAo8W5zJVGjlNCKKks1jkdMoI7HOySLXmpfNcfQzdXBCUNQaL69oe380WbqCVkkTSsG3omj9TnJFC6Zu7wzV5Pe8cWOCz2pvh4Rz88v8YSAIsxPoifb/j4hozPN+75g4AAP//AQAA///kaeW6xgAAAA==") diff --git a/lib/events/events.go b/lib/events/events.go index 78c1d692f..e83b9150f 100644 --- a/lib/events/events.go +++ b/lib/events/events.go @@ -25,6 +25,8 @@ const ( DeviceConnected DeviceDisconnected DeviceRejected + DevicePaused + DeviceResumed LocalIndexUpdated RemoteIndexUpdated ItemStarted @@ -78,6 +80,10 @@ func (t EventType) String() string { return "FolderCompletion" case FolderErrors: return "FolderErrors" + case DevicePaused: + return "DevicePaused" + case DeviceResumed: + return "DeviceResumed" default: return "Unknown" } diff --git a/lib/model/model.go b/lib/model/model.go index 617615e0e..df46e1efe 100644 --- a/lib/model/model.go +++ b/lib/model/model.go @@ -87,9 +87,10 @@ type Model struct { folderStatRefs map[string]*stats.FolderStatisticsReference // folder -> statsRef fmut sync.RWMutex // protects the above - conn map[protocol.DeviceID]Connection - deviceVer map[protocol.DeviceID]string - pmut sync.RWMutex // protects conn and deviceVer + conn map[protocol.DeviceID]Connection + deviceVer map[protocol.DeviceID]string + devicePaused map[protocol.DeviceID]bool + pmut sync.RWMutex // protects the above reqValidationCache map[string]time.Time // folder / file name => time when confirmed to exist rvmut sync.RWMutex // protects reqValidationCache @@ -131,6 +132,7 @@ func NewModel(cfg *config.Wrapper, id protocol.DeviceID, deviceName, clientName, folderStatRefs: make(map[string]*stats.FolderStatisticsReference), conn: make(map[protocol.DeviceID]Connection), deviceVer: make(map[protocol.DeviceID]string), + devicePaused: make(map[protocol.DeviceID]bool), reqValidationCache: make(map[string]time.Time), fmut: sync.NewRWMutex(), @@ -217,6 +219,8 @@ func (m *Model) StartFolderRO(folder string) { type ConnectionInfo struct { protocol.Statistics + Connected bool + Paused bool Address string ClientVersion string Type ConnectionType @@ -227,9 +231,11 @@ func (info ConnectionInfo) MarshalJSON() ([]byte, error) { "at": info.At, "inBytesTotal": info.InBytesTotal, "outBytesTotal": info.OutBytesTotal, + "connected": info.Connected, + "paused": info.Paused, "address": info.Address, - "type": info.Type.String(), "clientVersion": info.ClientVersion, + "type": info.Type.String(), }) } @@ -242,16 +248,21 @@ func (m *Model) ConnectionStats() map[string]interface{} { m.pmut.RLock() m.fmut.RLock() - var res = make(map[string]interface{}) - conns := make(map[string]ConnectionInfo, len(m.conn)) - for device, conn := range m.conn { + res := make(map[string]interface{}) + devs := m.cfg.Devices() + conns := make(map[string]ConnectionInfo, len(devs)) + for device := range devs { ci := ConnectionInfo{ - Statistics: conn.Statistics(), ClientVersion: m.deviceVer[device], + Paused: m.devicePaused[device], } - if addr := m.conn[device].RemoteAddr(); addr != nil { - ci.Address = addr.String() + if conn, ok := m.conn[device]; ok { ci.Type = conn.Type + ci.Connected = ok + ci.Statistics = conn.Statistics() + if addr := conn.RemoteAddr(); addr != nil { + ci.Address = addr.String() + } } conns[device.String()] = ci @@ -956,6 +967,31 @@ func (m *Model) AddConnection(conn Connection) { m.deviceWasSeen(deviceID) } +func (m *Model) PauseDevice(device protocol.DeviceID) { + m.pmut.Lock() + m.devicePaused[device] = true + _, ok := m.conn[device] + m.pmut.Unlock() + if ok { + m.Close(device, errors.New("device paused")) + } + events.Default.Log(events.DevicePaused, map[string]string{"device": device.String()}) +} + +func (m *Model) ResumeDevice(device protocol.DeviceID) { + m.pmut.Lock() + m.devicePaused[device] = false + m.pmut.Unlock() + events.Default.Log(events.DeviceResumed, map[string]string{"device": device.String()}) +} + +func (m *Model) IsPaused(device protocol.DeviceID) bool { + m.pmut.Lock() + paused := m.devicePaused[device] + m.pmut.Unlock() + return paused +} + func (m *Model) deviceStatRef(deviceID protocol.DeviceID) *stats.DeviceStatisticsReference { m.fmut.Lock() defer m.fmut.Unlock()
 Download Rate {{connections[deviceCfg.deviceID].inbps | binary}}B/s ({{connections[deviceCfg.deviceID].inBytesTotal | binary}}B)
 Upload Rate {{connections[deviceCfg.deviceID].outbps | binary}}B/s ({{connections[deviceCfg.deviceID].outBytesTotal | binary}}B)
- Address + Address Relayed via {{deviceAddr(deviceCfg)}} Introducer Yes
 Version {{connections[deviceCfg.deviceID].clientVersion}}
 Last seen Never {{deviceStats[deviceCfg.deviceID].lastSeen | date:"yyyy-MM-dd HH:mm:ss"}}