Browse Source

Merge pull request #1639 from calmh/events

Improve event handling a little bit.
Audrius Butkevicius 10 years ago
parent
commit
8ca85a4918
3 changed files with 59 additions and 41 deletions
  1. 18 14
      cmd/syncthing/summarysvc.go
  2. 0 9
      internal/db/truncated.go
  3. 41 18
      internal/model/rwfolder.go

+ 18 - 14
cmd/syncthing/summarysvc.go

@@ -66,21 +66,25 @@ func (c *folderSummarySvc) listenForUpdates() {
 			data := ev.Data.(map[string]interface{})
 			folder := data["folder"].(string)
 
-			if ev.Type == events.StateChanged && data["to"].(string) == "idle" && data["from"].(string) == "syncing" {
-				// The folder changed to idle from syncing. We should do an
-				// immediate refresh to update the GUI. The send to
-				// c.immediate must be nonblocking so that we can continue
-				// handling events.
-
-				select {
-				case c.immediate <- folder:
-					c.foldersMut.Lock()
-					delete(c.folders, folder)
-					c.foldersMut.Unlock()
-
-				default:
+			switch ev.Type {
+			case events.StateChanged:
+				if data["to"].(string) == "idle" && data["from"].(string) == "syncing" {
+					// The folder changed to idle from syncing. We should do an
+					// immediate refresh to update the GUI. The send to
+					// c.immediate must be nonblocking so that we can continue
+					// handling events.
+
+					select {
+					case c.immediate <- folder:
+						c.foldersMut.Lock()
+						delete(c.folders, folder)
+						c.foldersMut.Unlock()
+
+					default:
+					}
 				}
-			} else {
+
+			default:
 				// This folder needs to be refreshed whenever we do the next
 				// refresh.
 

+ 0 - 9
internal/db/truncated.go

@@ -13,15 +13,6 @@ type FileInfoTruncated struct {
 	ActualSize int64
 }
 
-func ToTruncated(file protocol.FileInfo) FileInfoTruncated {
-	t := FileInfoTruncated{
-		FileInfo:   file,
-		ActualSize: file.Size(),
-	}
-	t.FileInfo.Blocks = nil
-	return t
-}
-
 func (f *FileInfoTruncated) UnmarshalXDR(bs []byte) error {
 	err := f.FileInfo.UnmarshalXDR(bs)
 	f.ActualSize = f.FileInfo.Size()

+ 41 - 18
internal/model/rwfolder.go

@@ -476,15 +476,19 @@ nextFile:
 func (p *rwFolder) handleDir(file protocol.FileInfo) {
 	var err error
 	events.Default.Log(events.ItemStarted, map[string]interface{}{
-		"folder":  p.folder,
-		"item":    file.Name,
-		"details": db.ToTruncated(file),
+		"folder": p.folder,
+		"item":   file.Name,
+		"type":   "dir",
+		"action": "update",
 	})
+
 	defer func() {
 		events.Default.Log(events.ItemFinished, map[string]interface{}{
 			"folder": p.folder,
 			"item":   file.Name,
 			"error":  err,
+			"type":   "dir",
+			"action": "update",
 		})
 	}()
 
@@ -555,15 +559,18 @@ func (p *rwFolder) handleDir(file protocol.FileInfo) {
 func (p *rwFolder) deleteDir(file protocol.FileInfo) {
 	var err error
 	events.Default.Log(events.ItemStarted, map[string]interface{}{
-		"folder":  p.folder,
-		"item":    file.Name,
-		"details": db.ToTruncated(file),
+		"folder": p.folder,
+		"item":   file.Name,
+		"type":   "dir",
+		"action": "delete",
 	})
 	defer func() {
 		events.Default.Log(events.ItemFinished, map[string]interface{}{
 			"folder": p.folder,
 			"item":   file.Name,
 			"error":  err,
+			"type":   "dir",
+			"action": "delete",
 		})
 	}()
 
@@ -590,15 +597,18 @@ func (p *rwFolder) deleteDir(file protocol.FileInfo) {
 func (p *rwFolder) deleteFile(file protocol.FileInfo) {
 	var err error
 	events.Default.Log(events.ItemStarted, map[string]interface{}{
-		"folder":  p.folder,
-		"item":    file.Name,
-		"details": db.ToTruncated(file),
+		"folder": p.folder,
+		"item":   file.Name,
+		"type":   "file",
+		"action": "delete",
 	})
 	defer func() {
 		events.Default.Log(events.ItemFinished, map[string]interface{}{
 			"folder": p.folder,
 			"item":   file.Name,
 			"error":  err,
+			"type":   "file",
+			"action": "delete",
 		})
 	}()
 
@@ -629,25 +639,31 @@ func (p *rwFolder) deleteFile(file protocol.FileInfo) {
 func (p *rwFolder) renameFile(source, target protocol.FileInfo) {
 	var err error
 	events.Default.Log(events.ItemStarted, map[string]interface{}{
-		"folder":  p.folder,
-		"item":    source.Name,
-		"details": db.ToTruncated(source),
+		"folder": p.folder,
+		"item":   source.Name,
+		"type":   "file",
+		"action": "delete",
 	})
 	events.Default.Log(events.ItemStarted, map[string]interface{}{
-		"folder":  p.folder,
-		"item":    target.Name,
-		"details": db.ToTruncated(source),
+		"folder": p.folder,
+		"item":   target.Name,
+		"type":   "file",
+		"action": "update",
 	})
 	defer func() {
 		events.Default.Log(events.ItemFinished, map[string]interface{}{
 			"folder": p.folder,
 			"item":   source.Name,
 			"error":  err,
+			"type":   "file",
+			"action": "delete",
 		})
 		events.Default.Log(events.ItemFinished, map[string]interface{}{
 			"folder": p.folder,
 			"item":   target.Name,
 			"error":  err,
+			"type":   "file",
+			"action": "update",
 		})
 	}()
 
@@ -698,9 +714,10 @@ func (p *rwFolder) renameFile(source, target protocol.FileInfo) {
 // changed file.
 func (p *rwFolder) handleFile(file protocol.FileInfo, copyChan chan<- copyBlocksState, finisherChan chan<- *sharedPullerState) {
 	events.Default.Log(events.ItemStarted, map[string]interface{}{
-		"folder":  p.folder,
-		"item":    file.Name,
-		"details": db.ToTruncated(file),
+		"folder": p.folder,
+		"item":   file.Name,
+		"type":   "file",
+		"action": "update",
 	})
 
 	curFile, ok := p.model.CurrentFolderFile(p.folder, file.Name)
@@ -723,6 +740,8 @@ func (p *rwFolder) handleFile(file protocol.FileInfo, copyChan chan<- copyBlocks
 			"folder": p.folder,
 			"item":   file.Name,
 			"error":  err,
+			"type":   "file",
+			"action": "update",
 		})
 		return
 	}
@@ -994,6 +1013,8 @@ func (p *rwFolder) performFinish(state *sharedPullerState) {
 			"folder": p.folder,
 			"item":   state.file.Name,
 			"error":  err,
+			"type":   "file",
+			"action": "update",
 		})
 	}()
 
@@ -1097,6 +1118,8 @@ func (p *rwFolder) finisherRoutine(in <-chan *sharedPullerState) {
 					"folder": p.folder,
 					"item":   state.file.Name,
 					"error":  state.failed(),
+					"type":   "file",
+					"action": "update",
 				})
 			}
 			p.model.receivedFile(p.folder, state.file.Name)