Ìmprove handling of multiple rapid file changes

This commit is contained in:
2025-09-20 15:30:08 +02:00
parent 8c432bb834
commit f8f36b98db
6 changed files with 106 additions and 79 deletions

View File

@@ -11,7 +11,6 @@ import (
"git.blackforestbytes.com/BlackForestBytes/goext/exerr"
"git.blackforestbytes.com/BlackForestBytes/goext/langext"
"git.blackforestbytes.com/BlackForestBytes/goext/timeext"
"mikescher.com/kpsync/assets"
)
@@ -225,21 +224,16 @@ func (app *Application) runKeepass(fallback bool) {
}
func (app *Application) onDBFileChanged() {
app.masterLock.Lock()
app.uploadRunning.Wait(false)
app.uploadRunning.Set(true)
app.masterLock.Unlock()
func (app *Application) runDBUpload() {
app.uploadWaiting.Set(false)
defer app.uploadRunning.Set(false)
app.uploadActive.Set(true)
defer app.uploadActive.Set(false)
fin1 := app.setTrayState("Uploading database", assets.IconUpload)
defer fin1()
app.LogInfo("Database file was modified")
app.LogInfo(fmt.Sprintf("Sleeping for %d ms", app.config.Debounce))
time.Sleep(timeext.FromMilliseconds(app.config.Debounce))
app.LogInfo("Starting upload-check")
state := app.readState()
localCS, err := app.calcLocalChecksum()
@@ -373,12 +367,12 @@ func (app *Application) doDBUpload(state *State, stateClear func(), allowConflic
func (app *Application) runFinalSync() {
app.masterLock.Lock()
app.uploadRunning.Wait(false)
app.uploadRunning.Set(true)
app.uploadDCI.CancelPendingRequests()
app.uploadActive.Wait(false)
app.uploadActive.Set(true)
defer app.uploadActive.Set(false)
app.masterLock.Unlock()
defer app.uploadRunning.Set(false)
fin1 := app.setTrayState("Uploading database", assets.IconUpload)
defer fin1()
@@ -411,12 +405,12 @@ func (app *Application) runFinalSync() {
func (app *Application) runExplicitSync(force bool) {
app.masterLock.Lock()
app.uploadRunning.Wait(false)
app.uploadRunning.Set(true)
app.uploadDCI.CancelPendingRequests()
app.uploadActive.Wait(false)
app.uploadActive.Set(true)
defer app.uploadActive.Set(false)
app.masterLock.Unlock()
defer app.uploadRunning.Set(false)
state := app.readState()
if !force {