Merge pull request #1639 from calmh/events
Improve event handling a little bit.
This commit is contained in:
commit
8ca85a4918
|
@ -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.
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue