download kind works

This commit is contained in:
2025-08-19 10:03:12 +02:00
parent e7293464c1
commit 0f9b423d2f
14 changed files with 587 additions and 36 deletions

View File

@@ -3,9 +3,13 @@ package app
import (
"encoding/json"
"os"
"strings"
"time"
"git.blackforestbytes.com/BlackForestBytes/goext/cryptext"
"git.blackforestbytes.com/BlackForestBytes/goext/exerr"
"github.com/shirou/gopsutil/v3/process"
"mikescher.com/kpsync/log"
)
func fileExists(p string) bool {
@@ -17,12 +21,16 @@ func fileExists(p string) bool {
}
type State struct {
ETag string `json:"etag"`
Size int64 `json:"size"`
Checksum string `json:"checksum"`
ETag string `json:"etag"`
Size int64 `json:"size"`
Checksum string `json:"checksum"`
LastModified time.Time `json:"lastModified"`
}
func (app *Application) readState() *State {
app.masterLock.Lock()
defer app.masterLock.Unlock()
bin, err := os.ReadFile(app.stateFile)
if err != nil {
return nil
@@ -37,6 +45,30 @@ func (app *Application) readState() *State {
return &state
}
func (app *Application) saveState(eTag string, lastModified time.Time, checksum string, size int64) error {
app.masterLock.Lock()
defer app.masterLock.Unlock()
obj := State{
ETag: eTag,
Size: size,
Checksum: checksum,
LastModified: lastModified,
}
bin, err := json.MarshalIndent(obj, "", " ")
if err != nil {
return exerr.Wrap(err, "Failed to marshal state").Build()
}
err = os.WriteFile(app.stateFile, bin, 0644)
if err != nil {
return exerr.Wrap(err, "Failed to write state file").Build()
}
return nil
}
func (app *Application) calcLocalChecksum() (string, error) {
bin, err := os.ReadFile(app.dbFile)
if err != nil {
@@ -45,3 +77,24 @@ func (app *Application) calcLocalChecksum() (string, error) {
return cryptext.BytesSha256(bin), nil
}
func isKeepassRunning() bool {
proc, err := process.Processes()
if err != nil {
log.LogError("failed to query existing keepass process", err)
return false
}
for _, p := range proc {
name, err := p.Name()
if err != nil {
continue
}
if strings.ToLower(name) == "keepass" || strings.ToLower(name) == "keepassxc" {
return true
}
}
return false
}