Something went wrong. Try again.
A privacy-first, self-hosted, fully open source personal knowledge management software, written in typescript and golang. (PERSONAL FORK)
Something went wrong. Try again.
Go
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131package av
import ( "os" "path/filepath" "sync"
"github.com/88250/gulu" "github.com/siyuan-note/filelock" "github.com/siyuan-note/logging" "github.com/siyuan-note/siyuan/kernel/util" "github.com/vmihailenco/msgpack/v5")
var ( attributeViewRelationsLock = sync.Mutex{})
func GetSrcAvIDs(destAvID string) []string { attributeViewRelationsLock.Lock() defer attributeViewRelationsLock.Unlock()
relations := filepath.Join(util.DataDir, "storage", "av", "relations.msgpack") if !filelock.IsExist(relations) { return nil }
data, err := filelock.ReadFile(relations) if err != nil { logging.LogErrorf("read attribute view relations failed: %s", err) return nil }
avRels := map[string][]string{} if err = msgpack.Unmarshal(data, &avRels); err != nil { logging.LogErrorf("unmarshal attribute view relations failed: %s", err) return nil }
srcAvIDs := avRels[destAvID] if nil == srcAvIDs { return nil } return srcAvIDs}
func RemoveAvRel(srcAvID, destAvID string) { attributeViewRelationsLock.Lock() defer attributeViewRelationsLock.Unlock()
relations := filepath.Join(util.DataDir, "storage", "av", "relations.msgpack") if !filelock.IsExist(relations) { return }
data, err := filelock.ReadFile(relations) if err != nil { logging.LogErrorf("read attribute view relations failed: %s", err) return }
avRels := map[string][]string{} if err = msgpack.Unmarshal(data, &avRels); err != nil { logging.LogErrorf("unmarshal attribute view relations failed: %s", err) return }
srcAvIDs := avRels[destAvID] if nil == srcAvIDs { return }
var newAvIDs []string for _, v := range srcAvIDs { if v != srcAvID { newAvIDs = append(newAvIDs, v) } } avRels[destAvID] = newAvIDs
data, err = msgpack.Marshal(avRels) if err != nil { logging.LogErrorf("marshal attribute view relations failed: %s", err) return } if err = filelock.WriteFile(relations, data); err != nil { logging.LogErrorf("write attribute view relations failed: %s", err) return }}
func UpsertAvBackRel(srcAvID, destAvID string) { attributeViewRelationsLock.Lock() defer attributeViewRelationsLock.Unlock()
avRelations := map[string][]string{} relations := filepath.Join(util.DataDir, "storage", "av", "relations.msgpack") if !filelock.IsExist(relations) { if err := os.MkdirAll(filepath.Dir(relations), 0755); err != nil { logging.LogErrorf("create attribute view dir failed: %s", err) return } } else { data, err := filelock.ReadFile(relations) if err != nil { logging.LogErrorf("read attribute view relations failed: %s", err) return }
if err = msgpack.Unmarshal(data, &avRelations); err != nil { logging.LogErrorf("unmarshal attribute view relations failed: %s", err) return } }
srcAvIDs := avRelations[destAvID] srcAvIDs = append(srcAvIDs, srcAvID) srcAvIDs = gulu.Str.RemoveDuplicatedElem(srcAvIDs) avRelations[destAvID] = srcAvIDs
data, err := msgpack.Marshal(avRelations) if err != nil { logging.LogErrorf("marshal attribute view relations failed: %s", err) return } if err = filelock.WriteFile(relations, data); err != nil { logging.LogErrorf("write attribute view relations failed: %s", err) return }}