A privacy-first, self-hosted, fully open source personal knowledge management software, written in typescript and golang. (PERSONAL FORK)
1// SiYuan - Refactor your thinking
2// Copyright (c) 2020-present, b3log.org
3//
4// This program is free software: you can redistribute it and/or modify
5// it under the terms of the GNU Affero General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// This program is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU Affero General Public License for more details.
13//
14// You should have received a copy of the GNU Affero General Public License
15// along with this program. If not, see <https://www.gnu.org/licenses/>.
16
17package treenode
18
19import (
20 "path/filepath"
21
22 "github.com/siyuan-note/filelock"
23 "github.com/siyuan-note/logging"
24 "github.com/siyuan-note/siyuan/kernel/av"
25 "github.com/siyuan-note/siyuan/kernel/util"
26 "github.com/vmihailenco/msgpack/v5"
27)
28
29func GetMirrorAttrViewBlockIDs(avID string) (ret []string) {
30 av.AttributeViewBlocksLock.Lock()
31 defer av.AttributeViewBlocksLock.Unlock()
32
33 ret = []string{}
34 blocks := filepath.Join(util.DataDir, "storage", "av", "blocks.msgpack")
35 if !filelock.IsExist(blocks) {
36 return
37 }
38
39 data, err := filelock.ReadFile(blocks)
40 if err != nil {
41 logging.LogErrorf("read attribute view blocks failed: %s", err)
42 return
43 }
44
45 avBlocks := map[string][]string{}
46 if err = msgpack.Unmarshal(data, &avBlocks); err != nil {
47 logging.LogErrorf("unmarshal attribute view blocks failed: %s", err)
48 return
49 }
50
51 blockIDs := avBlocks[avID]
52 bts := GetBlockTrees(blockIDs)
53 for blockID := range bts {
54 ret = append(ret, blockID)
55 }
56 return
57}