ソースを参照

lib/model, lib/stats: Keep track of folder's last scan time (ref #3143)

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3250
LGTM: calmh, AudriusButkevicius
Majed Abdulaziz 9 年 前
コミット
48245effdf

+ 7 - 0
gui/default/index.html

@@ -360,6 +360,13 @@
                       <th><span class="fa fa-fw fa-share-alt"></span>&nbsp;<span translate>Shared With</span></th>
                       <td class="text-right">{{sharesFolder(folder)}}</td>
                     </tr>
+                    <tr>
+                      <th><span class="fa fa-fw fa-clock-o"></span>&nbsp;<span translate>Last Scan</span></th>
+                      <td translate ng-if="folderStats[folder.id].lastScanDays >= 365" class="text-right">Never</td>
+                      <td ng-if="folderStats[folder.id].lastScanDays < 365" class="text-right">
+                        <span>{{folderStats[folder.id].lastScan | date:'yyyy-MM-dd HH:mm:ss'}}</span>
+                      </td>
+                    </tr>
                     <tr ng-if="folder.type != 'readonly' && folderStats[folder.id].lastFile && folderStats[folder.id].lastFile.filename">
                       <th><span class="fa fa-fw fa-exchange"></span>&nbsp;<span translate>Last File Received</span></th>
                       <td class="text-right">

+ 9 - 0
gui/default/syncthing/core/syncthingController.js

@@ -171,6 +171,12 @@ angular.module('syncthing.core')
                 if (data.to === 'scanning') {
                     delete $scope.scanProgress[data.folder];
                 }
+
+                // If a folder finished scanning, then refresh folder stats
+                // to update last scan time.
+                if(data.from === 'scanning' && data.to === 'idle') {
+                    refreshFolderStats();
+                }
             }
         });
 
@@ -585,6 +591,9 @@ angular.module('syncthing.core')
                     if ($scope.folderStats[folder].lastFile) {
                         $scope.folderStats[folder].lastFile.at = new Date($scope.folderStats[folder].lastFile.at);
                     }
+
+                    $scope.folderStats[folder].lastScan = new Date($scope.folderStats[folder].lastScan);
+                    $scope.folderStats[folder].lastScanDays = (new Date() - $scope.folderStats[folder].lastScan) / 1000 / 86400;
                 }
                 console.log("refreshfolderStats", data);
             }).error($scope.emitHTTPError);

+ 1 - 0
lib/model/model.go

@@ -1602,6 +1602,7 @@ func (m *Model) internalScanFolderSubdirs(folder string, subs []string) error {
 		m.updateLocalsFromScanning(folder, batch)
 	}
 
+	m.folderStatRef(folder).ScanCompleted()
 	runner.setState(FolderIdle)
 	return nil
 }

+ 15 - 1
lib/stats/folder.go

@@ -13,7 +13,8 @@ import (
 )
 
 type FolderStatistics struct {
-	LastFile LastFile `json:"lastFile"`
+	LastFile LastFile  `json:"lastFile"`
+	LastScan time.Time `json:"lastScan"`
 }
 
 type FolderStatisticsReference struct {
@@ -59,8 +60,21 @@ func (s *FolderStatisticsReference) ReceivedFile(file string, deleted bool) {
 	s.ns.PutBool("lastFileDeleted", deleted)
 }
 
+func (s *FolderStatisticsReference) ScanCompleted() {
+	s.ns.PutTime("lastScan", time.Now())
+}
+
+func (s *FolderStatisticsReference) GetLastScanTime() time.Time {
+	lastScan, ok := s.ns.Time("lastScan")
+	if !ok {
+		return time.Time{}
+	}
+	return lastScan
+}
+
 func (s *FolderStatisticsReference) GetStatistics() FolderStatistics {
 	return FolderStatistics{
 		LastFile: s.GetLastFile(),
+		LastScan: s.GetLastScanTime(),
 	}
 }