Browse Source

Button to rescan all folders, fixes #1151

Karol Różycki 10 years ago
parent
commit
ec160f1f0a

+ 12 - 4
cmd/syncthing/gui.go

@@ -652,10 +652,18 @@ func restPostUpgrade(w http.ResponseWriter, r *http.Request) {
 func restPostScan(m *model.Model, w http.ResponseWriter, r *http.Request) {
 	qs := r.URL.Query()
 	folder := qs.Get("folder")
-	sub := qs.Get("sub")
-	err := m.ScanFolderSub(folder, sub)
-	if err != nil {
-		http.Error(w, err.Error(), 500)
+	if folder != "" {
+		sub := qs.Get("sub")
+		err := m.ScanFolderSub(folder, sub)
+		if err != nil {
+			http.Error(w, err.Error(), 500)
+		}
+	} else {
+		errors := m.ScanFolders()
+		if len(errors) > 0 {
+			http.Error(w, "Error scanning folders", 500)
+			json.NewEncoder(w).Encode(errors)
+		}
 	}
 }
 

+ 5 - 4
gui/index.html

@@ -273,10 +273,11 @@
             </div>
           </div>
         </div>
-        <div class="form-group">
-          <button class="btn btn-sm btn-default pull-right" ng-click="addFolder()"><span class="glyphicon glyphicon-plus"></span>&emsp;<span translate>Add Folder</span></button>
-          <div class="clearfix"></div>
-        </div>
+        <span class="pull-right">
+          <button class="btn btn-sm btn-default" ng-click="rescanAllFolders()"><span class="glyphicon glyphicon-repeat"></span>&emsp;<span translate>Rescan All</span></button>
+          <button class="btn btn-sm btn-default" ng-click="addFolder()"><span class="glyphicon glyphicon-plus"></span>&emsp;<span translate>Add Folder</span></button>
+        </span>
+        <div class="clearfix"></div>
         <hr class="visible-sm"/>
       </div>
 

+ 4 - 0
gui/scripts/syncthing/core/controllers/syncthingController.js

@@ -1156,6 +1156,10 @@ angular.module('syncthing.core')
             $scope.reportPreview = true;
         };
 
+        $scope.rescanAllFolders = function () {
+            $http.post(urlbase + "/scan");
+        };
+
         $scope.rescanFolder = function (folder) {
             $http.post(urlbase + "/scan?folder=" + encodeURIComponent(folder));
         };

File diff suppressed because it is too large
+ 0 - 0
internal/auto/gui.files.go


+ 8 - 1
internal/model/model.go

@@ -1111,7 +1111,7 @@ func (m *Model) AddFolder(cfg config.FolderConfiguration) {
 	m.fmut.Unlock()
 }
 
-func (m *Model) ScanFolders() {
+func (m *Model) ScanFolders() map[string]error {
 	m.fmut.RLock()
 	var folders = make([]string, 0, len(m.folderCfgs))
 	for folder := range m.folderCfgs {
@@ -1119,6 +1119,9 @@ func (m *Model) ScanFolders() {
 	}
 	m.fmut.RUnlock()
 
+	var errors = make(map[string]error, len(m.folderCfgs))
+	var errorsMut sync.Mutex
+
 	var wg sync.WaitGroup
 	wg.Add(len(folders))
 	for _, folder := range folders {
@@ -1126,12 +1129,16 @@ func (m *Model) ScanFolders() {
 		go func() {
 			err := m.ScanFolder(folder)
 			if err != nil {
+				errorsMut.Lock()
+				errors[folder] = err
+				errorsMut.Unlock()
 				m.cfg.InvalidateFolder(folder, err.Error())
 			}
 			wg.Done()
 		}()
 	}
 	wg.Wait()
+	return errors
 }
 
 func (m *Model) ScanFolder(folder string) error {

Some files were not shown because too many files changed in this diff