Просмотр исходного кода

Simplify usage reporting config options (fixes #370)

Jakob Borg 11 лет назад
Родитель
Сommit
b05fcbc9d7
8 измененных файлов с 47 добавлено и 44 удалено
  1. 0 0
      auto/gui.files.go
  2. 3 15
      cmd/syncthing/gui.go
  3. 3 3
      cmd/syncthing/main.go
  4. 4 1
      cmd/syncthing/usage_report.go
  5. 10 5
      config/config.go
  6. 20 14
      gui/app.js
  7. 6 6
      gui/index.html
  8. 1 0
      scanner/walk_test.go

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
auto/gui.files.go


+ 3 - 15
cmd/syncthing/gui.go

@@ -250,30 +250,18 @@ func restPostConfig(req *http.Request, m *model.Model) {
 			}
 		}
 
-		if newCfg.Options.UREnabled && !cfg.Options.UREnabled {
+		if newCfg.Options.URAccepted > cfg.Options.URAccepted {
 			// UR was enabled
-			cfg.Options.UREnabled = true
-			cfg.Options.URDeclined = false
-			cfg.Options.URAccepted = usageReportVersion
-			// Set the corresponding options in newCfg so we don't trigger the restart check if this was the only option change
-			newCfg.Options.URDeclined = false
 			newCfg.Options.URAccepted = usageReportVersion
 			err := sendUsageReport(m)
 			if err != nil {
 				l.Infoln("Usage report:", err)
 			}
 			go usageReportingLoop(m)
-		} else if !newCfg.Options.UREnabled && cfg.Options.UREnabled {
+		} else if newCfg.Options.URAccepted < cfg.Options.URAccepted {
 			// UR was disabled
-			cfg.Options.UREnabled = false
-			cfg.Options.URDeclined = true
-			cfg.Options.URAccepted = 0
-			// Set the corresponding options in newCfg so we don't trigger the restart check if this was the only option change
-			newCfg.Options.URDeclined = true
-			newCfg.Options.URAccepted = 0
+			newCfg.Options.URAccepted = -1
 			stopUsageReporting()
-		} else {
-			cfg.Options.URDeclined = newCfg.Options.URDeclined
 		}
 
 		if !reflect.DeepEqual(cfg.Options, newCfg.Options) || !reflect.DeepEqual(cfg.GUI, newCfg.GUI) {

+ 3 - 3
cmd/syncthing/main.go

@@ -415,11 +415,11 @@ nextRepo:
 		}
 	}
 
-	if cfg.Options.UREnabled && cfg.Options.URAccepted < usageReportVersion {
+	if cfg.Options.URAccepted > 0 && cfg.Options.URAccepted < usageReportVersion {
 		l.Infoln("Anonymous usage report has changed; revoking acceptance")
-		cfg.Options.UREnabled = false
+		cfg.Options.URAccepted = 0
 	}
-	if cfg.Options.UREnabled {
+	if cfg.Options.URAccepted >= usageReportVersion {
 		go usageReportingLoop(m)
 		go func() {
 			time.Sleep(10 * time.Minute)

+ 4 - 1
cmd/syncthing/usage_report.go

@@ -107,7 +107,10 @@ loop:
 }
 
 func stopUsageReporting() {
-	stopUsageReportingCh <- struct{}{}
+	select {
+	case stopUsageReportingCh <- struct{}{}:
+	default:
+	}
 }
 
 // Returns CPU performance as a measure of single threaded SHA-256 MiB/s

+ 10 - 5
config/config.go

@@ -16,9 +16,9 @@ import (
 	"strconv"
 	"strings"
 
-	"github.com/calmh/syncthing/scanner"
 	"code.google.com/p/go.crypto/bcrypt"
 	"github.com/calmh/syncthing/logger"
+	"github.com/calmh/syncthing/scanner"
 )
 
 var l = logger.DefaultLogger
@@ -156,11 +156,10 @@ type OptionsConfiguration struct {
 	MaxChangeKbps      int      `xml:"maxChangeKbps" default:"10000"`
 	StartBrowser       bool     `xml:"startBrowser" default:"true"`
 	UPnPEnabled        bool     `xml:"upnpEnabled" default:"true"`
+	URAccepted         int      `xml:"urAccepted"` // Accepted usage reporting version; 0 for off (undecided), -1 for off (permanently)
 
-	UREnabled  bool `xml:"urEnabled"`  // If true, send usage reporting data
-	URDeclined bool `xml:"urDeclined"` // If true, don't ask again
-	URAccepted int  `xml:"urAccepted"` // Accepted usage reporting version
-
+	Deprecated_UREnabled  bool   `xml:"urEnabled,omitempty" json:"-"`
+	Deprecated_URDeclined bool   `xml:"urDeclined,omitempty" json:"-"`
 	Deprecated_ReadOnly   bool   `xml:"readOnly,omitempty" json:"-"`
 	Deprecated_GUIEnabled bool   `xml:"guiEnabled,omitempty" json:"-"`
 	Deprecated_GUIAddress string `xml:"guiAddress,omitempty" json:"-"`
@@ -345,6 +344,12 @@ func Load(rd io.Reader, myID string) (Configuration, error) {
 		}
 	}
 
+	if cfg.Options.Deprecated_URDeclined {
+		cfg.Options.URAccepted = -1
+	}
+	cfg.Options.Deprecated_URDeclined = false
+	cfg.Options.Deprecated_UREnabled = false
+
 	// Upgrade to v2 configuration if appropriate
 	if cfg.Version == 1 {
 		convertV1V2(&cfg)

+ 20 - 14
gui/app.js

@@ -279,8 +279,9 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) {
 
     $scope.editSettings = function () {
         // Make a working copy
-        $scope.config.workingOptions = angular.copy($scope.config.Options);
-        $scope.config.workingGUI = angular.copy($scope.config.GUI);
+        $scope.tmpOptions = angular.copy($scope.config.Options);
+        $scope.tmpOptions.UREnabled = ($scope.tmpOptions.URAccepted > 0);
+        $scope.tmpGUI = angular.copy($scope.config.GUI);
         $('#settings').modal({backdrop: 'static', keyboard: true});
     };
 
@@ -296,17 +297,24 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) {
 
     $scope.saveSettings = function () {
         // Make sure something changed
-        var changed = ! angular.equals($scope.config.Options, $scope.config.workingOptions) ||
-                      ! angular.equals($scope.config.GUI, $scope.config.workingGUI);
-        if(changed){
-            // see if protocol will need to be changed on restart
-            if($scope.config.GUI.UseTLS !== $scope.config.workingGUI.UseTLS){
+        var changed = !angular.equals($scope.config.Options, $scope.tmpOptions) ||
+                      !angular.equals($scope.config.GUI, $scope.tmpGUI);
+        if (changed) {
+            // Check if usage reporting has been enabled or disabled
+            if ($scope.tmpOptions.UREnabled && $scope.tmpOptions.URAccepted <= 0) {
+                $scope.tmpOptions.URAccepted = 1000;
+            } else if (!$scope.tmpOptions.UREnabled && $scope.tmpOptions.URAccepted > 0){
+                $scope.tmpOptions.URAccepted = -1;
+            }
+
+            // Check if protocol will need to be changed on restart
+            if($scope.config.GUI.UseTLS !== $scope.tmpGUI.UseTLS){
                 $scope.protocolChanged = true;
             }
 
             // Apply new settings locally
-            $scope.config.Options = angular.copy($scope.config.workingOptions);
-            $scope.config.GUI = angular.copy($scope.config.workingGUI);
+            $scope.config.Options = angular.copy($scope.tmpOptions);
+            $scope.config.GUI = angular.copy($scope.tmpGUI);
             $scope.config.Options.ListenAddress = $scope.config.Options.ListenStr.split(',').map(function (x) { return x.trim(); });
 
             $scope.saveConfig();
@@ -561,7 +569,7 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) {
 
             $scope.refresh();
 
-            if (!$scope.config.Options.UREnabled && !$scope.config.Options.URDeclined) {
+            if ($scope.config.Options.URAccepted == 0) {
                 // If usage reporting has been neither accepted nor declined,
                 // we want to ask the user to make a choice. But we don't want
                 // to bug them during initial setup, so we set a cookie with
@@ -590,15 +598,13 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http) {
     };
 
     $scope.acceptUR = function () {
-        $scope.config.Options.UREnabled = true;
-        $scope.config.Options.URDeclined = false;
+        $scope.config.Options.URAccepted = 1000; // Larger than the largest existing report version
         $scope.saveConfig();
         $('#ur').modal('hide');
     };
 
     $scope.declineUR = function () {
-        $scope.config.Options.UREnabled = false;
-        $scope.config.Options.URDeclined = true;
+        $scope.config.Options.URAccepted = -1;
         $scope.saveConfig();
         $('#ur').modal('hide');
     };

+ 6 - 6
gui/index.html

@@ -583,11 +583,11 @@ found in the LICENSE file.
                 <div class="form-group" ng-repeat="setting in settings">
                   <div ng-if="setting.type == 'text' || setting.type == 'number'">
                     <label for="{{setting.id}}">{{setting.descr}}</label>
-                    <input id="{{setting.id}}" class="form-control" type="{{setting.type}}" ng-model="config.workingOptions[setting.id]"></input>
+                    <input id="{{setting.id}}" class="form-control" type="{{setting.type}}" ng-model="tmpOptions[setting.id]"></input>
                   </div>
                   <div class="checkbox" ng-if="setting.type == 'bool'">
                     <label>
-                      {{setting.descr}} <input id="{{setting.id}}" type="checkbox" ng-model="config.workingOptions[setting.id]"></input>
+                      {{setting.descr}} <input id="{{setting.id}}" type="checkbox" ng-model="tmpOptions[setting.id]"></input>
                     </label>
                   </div>
                 </div>
@@ -596,17 +596,17 @@ found in the LICENSE file.
                 <div class="form-group" ng-repeat="setting in guiSettings">
                   <div ng-if="setting.type == 'text' || setting.type == 'number' || setting.type == 'password'">
                     <label for="{{setting.id}}">{{setting.descr}}</label>
-                    <input id="{{setting.id}}" class="form-control" type="{{setting.type}}" ng-model="config.workingGUI[setting.id]"></input>
+                    <input id="{{setting.id}}" class="form-control" type="{{setting.type}}" ng-model="tmpGUI[setting.id]"></input>
                   </div>
                   <div class="checkbox" ng-if="setting.type == 'bool'">
                     <label>
-                      {{setting.descr}} <input id="{{setting.id}}" type="checkbox" ng-model="config.workingGUI[setting.id]"></input>
+                      {{setting.descr}} <input id="{{setting.id}}" type="checkbox" ng-model="tmpGUI[setting.id]"></input>
                     </label>
                   </div>
                   <div ng-if="setting.type == 'apikey'">
                     <label>{{setting.descr}} (<a href="http://discourse.syncthing.net/t/v0-8-14-api-keys/335">Usage</a>)</label>
-                    <div class="well well-sm text-monospace">{{config.workingGUI[setting.id] || "-"}}</div>
-                    <button type="button" class="btn btn-sm btn-default" ng-click="setAPIKey(config.workingGUI)">Generate</button>
+                    <div class="well well-sm text-monospace">{{tmpGUI[setting.id] || "-"}}</div>
+                    <button type="button" class="btn btn-sm btn-default" ng-click="setAPIKey(tmpGUI)">Generate</button>
                   </div>
                 </div>
               </div>

+ 1 - 0
scanner/walk_test.go

@@ -97,6 +97,7 @@ func TestIgnore(t *testing.T) {
 		r bool
 	}{
 		{"foo/bar", true},
+		{"foofoo", false},
 		{"foo/quux", false},
 		{"foo/zuux", true},
 		{"foo/qzuux", false},

Некоторые файлы не были показаны из-за большого количества измененных файлов