mirror of
https://github.com/balzack/databag.git
synced 2025-02-12 19:49:16 +00:00
52 lines
1002 B
Go
52 lines
1002 B
Go
package databag
|
|
|
|
import (
|
|
"sync"
|
|
"os"
|
|
"databag/internal/store"
|
|
)
|
|
|
|
var garbageSync sync.Mutex
|
|
|
|
func garbageCollect(act *store.Account) {
|
|
garbageSync.Lock()
|
|
defer garbageSync.Unlock()
|
|
|
|
// get all asset files
|
|
dir := getStrConfigValue(CONFIG_ASSETPATH, ".") + "/" + act.Guid
|
|
files, err := os.ReadDir(dir)
|
|
if err != nil {
|
|
ErrMsg(err)
|
|
return
|
|
}
|
|
|
|
// create map of all files
|
|
list := make(map[string]bool)
|
|
for _, file := range files {
|
|
list[file.Name()] = false
|
|
}
|
|
|
|
// get all asset records
|
|
var assets []store.Asset
|
|
if err := store.DB.Where("account_id = ?", act.ID).Find(&assets).Error; err != nil {
|
|
ErrMsg(err)
|
|
return
|
|
}
|
|
|
|
// mark all referenced files
|
|
for _, asset := range assets {
|
|
list[asset.AssetId] = true
|
|
}
|
|
|
|
// delete any unreferenced file
|
|
for id, set := range list {
|
|
if !set {
|
|
LogMsg("removing file asset " + act.Guid + "/" + id)
|
|
if err := os.Remove(dir + "/" + id); err != nil {
|
|
ErrMsg(err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|