diff --git a/kernel/model/assets.go b/kernel/model/assets.go index f7b40a539..160b10fb4 100644 --- a/kernel/model/assets.go +++ b/kernel/model/assets.go @@ -961,6 +961,12 @@ func MissingAssets() (ret []string) { } func emojisInTree(tree *parse.Tree) (ret []string) { + if icon := tree.Root.IALAttr("icon"); "" != icon { + if !strings.Contains(icon, "://") && !strings.HasPrefix(icon, "api/icon/") { + ret = append(ret, "/emojis/"+icon) + } + } + ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus { if !entering { return ast.WalkContinue diff --git a/kernel/model/export.go b/kernel/model/export.go index fa833b352..9b59e5edd 100644 --- a/kernel/model/export.go +++ b/kernel/model/export.go @@ -751,7 +751,7 @@ func ExportMarkdownHTML(id, savePath string, docx, merge bool) (name, dom string from := filepath.Join(util.DataDir, emoji) to := filepath.Join(savePath, emoji) if err := filelock.Copy(from, to); err != nil { - logging.LogErrorf("copy emojis from [%s] to [%s] failed: %s", from, savePath, err) + logging.LogErrorf("copy emojis from [%s] to [%s] failed: %s", from, to, err) return } } @@ -909,7 +909,7 @@ func ExportHTML(id, savePath string, pdf, image, keepFold, merge bool) (name, do from := filepath.Join(util.DataDir, emoji) to := filepath.Join(savePath, emoji) if err := filelock.Copy(from, to); err != nil { - logging.LogErrorf("copy emojis from [%s] to [%s] failed: %s", from, savePath, err) + logging.LogErrorf("copy emojis from [%s] to [%s] failed: %s", from, to, err) return } } @@ -1722,6 +1722,16 @@ func exportSYZip(boxID, rootDirPath, baseFolderName string, docPaths []string) ( copiedAssets.Add(asset) } + + // 复制自定义表情图片 + emojis := emojisInTree(tree) + for _, emoji := range emojis { + from := filepath.Join(util.DataDir, emoji) + to := filepath.Join(exportFolder, emoji) + if copyErr := filelock.Copy(from, to); copyErr != nil { + logging.LogErrorf("copy emojis from [%s] to [%s] failed: %s", from, to, copyErr) + } + } } // 导出数据库 Attribute View export https://github.com/siyuan-note/siyuan/issues/8710 diff --git a/kernel/model/import.go b/kernel/model/import.go index d9ff764cc..bafd50d1e 100644 --- a/kernel/model/import.go +++ b/kernel/model/import.go @@ -554,6 +554,25 @@ func ImportSY(zipPath, boxID, toPath string) (err error) { os.RemoveAll(assets) } + // 将包含的自定义表情统一移动到 data/emojis/ 下 + var emojiDirs []string + filelock.Walk(unzipRootPath, func(path string, d fs.DirEntry, err error) error { + if strings.Contains(path, "emojis") && d.IsDir() { + emojiDirs = append(emojiDirs, path) + } + return nil + }) + dataEmojis := filepath.Join(util.DataDir, "emojis") + for _, emojis := range emojiDirs { + if gulu.File.IsDir(emojis) { + if err = filelock.Copy(emojis, dataEmojis); err != nil { + logging.LogErrorf("copy emojis from [%s] to [%s] failed: %s", emojis, dataEmojis, err) + return + } + } + os.RemoveAll(emojis) + } + var baseTargetPath string if "/" == toPath { baseTargetPath = "/"