Explorar el Código

:art: Show "What's News" after upgrading https://github.com/siyuan-note/siyuan/issues/7902

Liang Ding hace 2 años
padre
commit
5a7e436ba5

+ 1 - 0
CHANGELOG.md

@@ -0,0 +1 @@
+Please see app/changelogs/ for details.

+ 1 - 0
Dockerfile

@@ -14,6 +14,7 @@ RUN apk add --no-cache gcc musl-dev git && \
     mv /go/src/github.com/siyuan-note/siyuan/app/appearance/ /opt/siyuan/ && \
     mv /go/src/github.com/siyuan-note/siyuan/app/stage/ /opt/siyuan/ && \
     mv /go/src/github.com/siyuan-note/siyuan/app/guide/ /opt/siyuan/ && \
+    mv /go/src/github.com/siyuan-note/siyuan/app/changelogs/ /opt/siyuan/ && \
     mv /go/src/github.com/siyuan-note/siyuan/kernel/kernel /opt/siyuan/ && \
     find /opt/siyuan/ -name .git | xargs rm -rf
 

+ 0 - 0
changelogs/v0.1.0-v2.8.3.md → app/changelogs/v0.1.0-v2.8.3.md


+ 0 - 0
changelogs/v2.8.4.md → app/changelogs/v2.8.4.md


+ 0 - 0
changelogs/v2.8.4_zh_CN.md → app/changelogs/v2.8.4_zh_CN.md


+ 5 - 3
app/electron-builder-darwin-arm64.yml

@@ -29,14 +29,16 @@ mac:
       arch: "arm64"
 
 extraResources:
-  - from: "appearance/boot"
-    to: "appearance/boot"
-    filter: "!**/{.DS_Store}"
+  - from: "changelogs"
+    to: "changelogs"
   - from: "stage"
     to: "stage"
   - from: "guide"
     to: "guide"
     filter: "!**/{.DS_Store,.git,.gitignore,.idea}"
+  - from: "appearance/boot"
+    to: "appearance/boot"
+    filter: "!**/{.DS_Store}"
   - from: "appearance/icons"
     to: "appearance/icons"
     filter: "!**/{.DS_Store}"

+ 5 - 3
app/electron-builder-darwin.yml

@@ -28,14 +28,16 @@ mac:
     - target: "dmg"
 
 extraResources:
-  - from: "appearance/boot"
-    to: "appearance/boot"
-    filter: "!**/{.DS_Store}"
+  - from: "changelogs"
+    to: "changelogs"
   - from: "stage"
     to: "stage"
   - from: "guide"
     to: "guide"
     filter: "!**/{.DS_Store,.git,.gitignore,.idea}"
+  - from: "appearance/boot"
+    to: "appearance/boot"
+    filter: "!**/{.DS_Store}"
   - from: "appearance/icons"
     to: "appearance/icons"
     filter: "!**/{.DS_Store}"

+ 5 - 3
app/electron-builder-linux.yml

@@ -25,14 +25,16 @@ linux:
     - target: "AppImage"
 
 extraResources:
-  - from: "appearance/boot"
-    to: "appearance/boot"
-    filter: "!**/{.DS_Store}"
+  - from: "changelogs"
+    to: "changelogs"
   - from: "stage"
     to: "stage"
   - from: "guide"
     to: "guide"
     filter: "!**/{.DS_Store,.git,.gitignore,.idea}"
+  - from: "appearance/boot"
+    to: "appearance/boot"
+    filter: "!**/{.DS_Store}"
   - from: "appearance/icons"
     to: "appearance/icons"
     filter: "!**/{.DS_Store}"

+ 5 - 3
app/electron-builder.yml

@@ -42,14 +42,16 @@ nsis:
   uninstallerSidebar: "nsis/uninstallerSidebar.bmp"
 
 extraResources:
-  - from: "appearance/boot"
-    to: "appearance/boot"
-    filter: "!**/{.DS_Store}"
+  - from: "changelogs"
+    to: "changelogs"
   - from: "stage"
     to: "stage"
   - from: "guide"
     to: "guide"
     filter: "!**/{.DS_Store,.git,.gitignore,.idea}"
+  - from: "appearance/boot"
+    to: "appearance/boot"
+    filter: "!**/{.DS_Store}"
   - from: "appearance/icons"
     to: "appearance/icons"
     filter: "!**/{.DS_Store}"

+ 1 - 0
kernel/api/router.go

@@ -56,6 +56,7 @@ func ServeAPI(ginServer *gin.Engine) {
 	ginServer.Handle("POST", "/api/system/getConf", model.CheckAuth, getConf)
 	ginServer.Handle("POST", "/api/system/checkUpdate", model.CheckAuth, checkUpdate)
 	ginServer.Handle("POST", "/api/system/exportLog", model.CheckAuth, exportLog)
+	ginServer.Handle("POST", "/api/system/getChangelog", model.CheckAuth, getChangelog)
 
 	ginServer.Handle("POST", "/api/storage/setLocalStorage", model.CheckAuth, setLocalStorage)
 	ginServer.Handle("POST", "/api/storage/getLocalStorage", model.CheckAuth, getLocalStorage)

+ 38 - 0
kernel/api/system.go

@@ -17,6 +17,7 @@
 package api
 
 import (
+	"github.com/88250/lute"
 	"net/http"
 	"os"
 	"path/filepath"
@@ -32,6 +33,43 @@ import (
 	"github.com/siyuan-note/siyuan/kernel/util"
 )
 
+func getChangelog(c *gin.Context) {
+	ret := gulu.Ret.NewResult()
+	defer c.JSON(http.StatusOK, ret)
+
+	data := map[string]interface{}{"show": false, "html": ""}
+
+	ret.Data = data
+
+	changelogsDir := filepath.Join(util.WorkingDir, "changelogs")
+	if !gulu.File.IsDir(changelogsDir) {
+		return
+	}
+
+	if !model.Conf.ShowChangelog {
+		return
+	}
+
+	changelogPath := filepath.Join(changelogsDir, "v"+util.Ver+".md")
+	if !gulu.File.IsExist(changelogPath) {
+		logging.LogWarnf("changelog not found: %s", changelogPath)
+		return
+	}
+
+	contentData, err := os.ReadFile(changelogPath)
+	if nil != err {
+		logging.LogErrorf("read changelog failed: %s", err)
+		return
+	}
+
+	luteEngine := lute.New()
+	htmlContent := luteEngine.Markdown("", contentData)
+
+	data["show"] = true
+	data["html"] = htmlContent
+	ret.Data = data
+}
+
 func getEmojiConf(c *gin.Context) {
 	ret := gulu.Ret.NewResult()
 	defer c.JSON(http.StatusOK, ret)

+ 2 - 0
kernel/model/conf.go

@@ -75,6 +75,7 @@ type AppConf struct {
 	Api            *conf.API        `json:"api"`            // API
 	Repo           *conf.Repo       `json:"repo"`           // 数据仓库
 	OpenHelp       bool             `json:"openHelp"`       // 启动后是否需要打开用户指南
+	ShowChangelog  bool             `json:"showChangelog"`  // 是否显示版本更新日志
 }
 
 func InitConf() {
@@ -219,6 +220,7 @@ func InitConf() {
 	} else {
 		if 0 < semver.Compare("v"+util.Ver, "v"+Conf.System.KernelVersion) {
 			logging.LogInfof("upgraded from version [%s] to [%s]", Conf.System.KernelVersion, util.Ver)
+			Conf.ShowChangelog = true
 		} else if 0 > semver.Compare("v"+util.Ver, "v"+Conf.System.KernelVersion) {
 			logging.LogInfof("downgraded from version [%s] to [%s]", Conf.System.KernelVersion, util.Ver)
 		}