Merge pull request #1639 from calmh/events

Improve event handling a little bit.
This commit is contained in:
Audrius Butkevicius 2015-04-16 14:18:52 +01:00
commit 8ca85a4918
3 changed files with 57 additions and 39 deletions

View File

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

View File

@ -13,15 +13,6 @@ type FileInfoTruncated struct {
ActualSize int64 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 { func (f *FileInfoTruncated) UnmarshalXDR(bs []byte) error {
err := f.FileInfo.UnmarshalXDR(bs) err := f.FileInfo.UnmarshalXDR(bs)
f.ActualSize = f.FileInfo.Size() f.ActualSize = f.FileInfo.Size()

View File

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