Explorar el Código

:art: 导出导入 .sy.zip 保持自定义排序 https://github.com/siyuan-note/siyuan/issues/5939

Liang Ding hace 2 años
padre
commit
b49f477f59
Se han modificado 1 ficheros con 43 adiciones y 0 borrados
  1. 43 0
      kernel/model/export.go

+ 43 - 0
kernel/model/export.go

@@ -896,6 +896,49 @@ func exportSYZip(boxID, rootDirPath, baseFolderName string, docPaths []string) (
 		}
 		}
 	}
 	}
 
 
+	// 导出自定义排序
+	sortPath := filepath.Join(util.DataDir, box.ID, ".siyuan", "sort.json")
+	fullSortIDs := map[string]int{}
+	sortIDs := map[string]int{}
+	var sortData []byte
+	var sortErr error
+	if gulu.File.IsExist(sortPath) {
+		sortData, sortErr = filelock.NoLockFileRead(sortPath)
+		if nil != sortErr {
+			logging.LogErrorf("read sort conf failed: %s", sortErr)
+		}
+
+		if sortErr = gulu.JSON.UnmarshalJSON(sortData, &fullSortIDs); nil != sortErr {
+			logging.LogErrorf("unmarshal sort conf failed: %s", sortErr)
+		}
+
+		if 0 < len(fullSortIDs) {
+			for _, tree := range trees {
+				if v, ok := fullSortIDs[tree.ID]; ok {
+					sortIDs[tree.ID] = v
+				}
+			}
+		}
+
+		if 0 < len(sortIDs) {
+			sortData, sortErr = gulu.JSON.MarshalJSON(sortIDs)
+			if nil != sortErr {
+				logging.LogErrorf("marshal sort conf failed: %s", sortErr)
+			}
+			if 0 < len(sortData) {
+				confDir := filepath.Join(exportFolder, ".siyuan")
+				if mkdirErr := os.MkdirAll(confDir, 0755); nil != mkdirErr {
+					logging.LogErrorf("create export conf folder [%s] failed: %s", confDir, mkdirErr)
+				} else {
+					sortPath = filepath.Join(confDir, "sort.json")
+					if writeErr := os.WriteFile(sortPath, sortData, 0644); nil != writeErr {
+						logging.LogErrorf("write sort conf failed: %s", writeErr)
+					}
+				}
+			}
+		}
+	}
+
 	zipPath = exportFolder + ".sy.zip"
 	zipPath = exportFolder + ".sy.zip"
 	zip, err := gulu.Zip.Create(zipPath)
 	zip, err := gulu.Zip.Create(zipPath)
 	if nil != err {
 	if nil != err {