|
@@ -19,6 +19,7 @@ const (
|
|
|
FolderIdle folderState = iota
|
|
FolderIdle folderState = iota
|
|
|
FolderScanning
|
|
FolderScanning
|
|
|
FolderScanWaiting
|
|
FolderScanWaiting
|
|
|
|
|
+ FolderSyncPreparing
|
|
|
FolderSyncing
|
|
FolderSyncing
|
|
|
FolderError
|
|
FolderError
|
|
|
)
|
|
)
|
|
@@ -31,6 +32,8 @@ func (s folderState) String() string {
|
|
|
return "scanning"
|
|
return "scanning"
|
|
|
case FolderScanWaiting:
|
|
case FolderScanWaiting:
|
|
|
return "scan-waiting"
|
|
return "scan-waiting"
|
|
|
|
|
+ case FolderSyncPreparing:
|
|
|
|
|
+ return "sync-preparing"
|
|
|
case FolderSyncing:
|
|
case FolderSyncing:
|
|
|
return "syncing"
|
|
return "syncing"
|
|
|
case FolderError:
|
|
case FolderError:
|
|
@@ -65,29 +68,32 @@ func (s *stateTracker) setState(newState folderState) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
s.mut.Lock()
|
|
s.mut.Lock()
|
|
|
- if newState != s.current {
|
|
|
|
|
- /* This should hold later...
|
|
|
|
|
- if s.current != FolderIdle && (newState == FolderScanning || newState == FolderSyncing) {
|
|
|
|
|
- panic("illegal state transition " + s.current.String() + " -> " + newState.String())
|
|
|
|
|
- }
|
|
|
|
|
- */
|
|
|
|
|
-
|
|
|
|
|
- eventData := map[string]interface{}{
|
|
|
|
|
- "folder": s.folderID,
|
|
|
|
|
- "to": newState.String(),
|
|
|
|
|
- "from": s.current.String(),
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if !s.changed.IsZero() {
|
|
|
|
|
- eventData["duration"] = time.Since(s.changed).Seconds()
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- s.current = newState
|
|
|
|
|
- s.changed = time.Now()
|
|
|
|
|
-
|
|
|
|
|
- s.evLogger.Log(events.StateChanged, eventData)
|
|
|
|
|
|
|
+ defer s.mut.Unlock()
|
|
|
|
|
+
|
|
|
|
|
+ if newState == s.current {
|
|
|
|
|
+ return
|
|
|
}
|
|
}
|
|
|
- s.mut.Unlock()
|
|
|
|
|
|
|
+
|
|
|
|
|
+ /* This should hold later...
|
|
|
|
|
+ if s.current != FolderIdle && (newState == FolderScanning || newState == FolderSyncing) {
|
|
|
|
|
+ panic("illegal state transition " + s.current.String() + " -> " + newState.String())
|
|
|
|
|
+ }
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
|
|
+ eventData := map[string]interface{}{
|
|
|
|
|
+ "folder": s.folderID,
|
|
|
|
|
+ "to": newState.String(),
|
|
|
|
|
+ "from": s.current.String(),
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if !s.changed.IsZero() {
|
|
|
|
|
+ eventData["duration"] = time.Since(s.changed).Seconds()
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ s.current = newState
|
|
|
|
|
+ s.changed = time.Now()
|
|
|
|
|
+
|
|
|
|
|
+ s.evLogger.Log(events.StateChanged, eventData)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// getState returns the current state, the time when it last changed, and the
|
|
// getState returns the current state, the time when it last changed, and the
|