diff --git a/app/src/util/history.ts b/app/src/util/history.ts
index a757b3fc0..e0a90b950 100644
--- a/app/src/util/history.ts
+++ b/app/src/util/history.ts
@@ -86,7 +86,7 @@ const renderRepoItem = (response: IWebSocketData, element: Element, type: string
`;
}
let repoHTML = "";
- response.data.snapshots.forEach((item: { memo: string, id: string, hCreated: string, count: number, hSize: string, tag: string }) => {
+ response.data.snapshots.forEach((item: { memo: string, id: string, hCreated: string, count: number, hSize: string, tag: string, typesCount: { type: string, count: number }[] }) => {
if (isMobile()) {
repoHTML += `
@@ -110,7 +110,17 @@ const renderRepoItem = (response: IWebSocketData, element: Element, type: string
${item.hCreated}
${window.siyuan.languages.fileSize} ${item.hSize}
- ${window.siyuan.languages.fileCount} ${item.count}
+ ${window.siyuan.languages.fileCount} ${item.count}`
+ let statHTML = "";
+ if (item.typesCount && 0 < item.typesCount.length) {
+ statHTML += `
+
+ ${item.typesCount.map((type: { type: string, count: number }) => {
+ return `${type.type} ${type.count}`;
+ }).join(" ")}`
+ }
+ repoHTML += `${statHTML}
+
${actionHTML}
diff --git a/kernel/go.mod b/kernel/go.mod
index ae8dcf078..137140ca4 100644
--- a/kernel/go.mod
+++ b/kernel/go.mod
@@ -38,7 +38,7 @@ require (
github.com/panjf2000/ants/v2 v2.7.0
github.com/patrickmn/go-cache v2.1.0+incompatible
github.com/radovskyb/watcher v1.0.7
- github.com/siyuan-note/dejavu v0.0.0-20221214060041-f7b64a7eb12a
+ github.com/siyuan-note/dejavu v0.0.0-20221214071109-67333a5acbcb
github.com/siyuan-note/encryption v0.0.0-20220713091850-5ecd92177b75
github.com/siyuan-note/eventbus v0.0.0-20220916025349-3ac6e75522da
github.com/siyuan-note/filelock v0.0.0-20221117095924-e1947438a35e
diff --git a/kernel/go.sum b/kernel/go.sum
index 8493903c7..974f40691 100644
--- a/kernel/go.sum
+++ b/kernel/go.sum
@@ -361,8 +361,8 @@ github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1l
github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4=
github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw=
-github.com/siyuan-note/dejavu v0.0.0-20221214060041-f7b64a7eb12a h1:9sAurbeois47ROtvJ9EcQFWfJIdL7C6fPZm29PhTBXg=
-github.com/siyuan-note/dejavu v0.0.0-20221214060041-f7b64a7eb12a/go.mod h1:aarwJw3uJaqNoIGVLmyhZjMCjI+xAzwrMIg05scqmtc=
+github.com/siyuan-note/dejavu v0.0.0-20221214071109-67333a5acbcb h1:fS8iB5d7x57eyfvNjqlDOTL9XglVCSBtGoa5e3nQTkY=
+github.com/siyuan-note/dejavu v0.0.0-20221214071109-67333a5acbcb/go.mod h1:aarwJw3uJaqNoIGVLmyhZjMCjI+xAzwrMIg05scqmtc=
github.com/siyuan-note/encryption v0.0.0-20220713091850-5ecd92177b75 h1:Bi7/7f29LW+Fm0cHc0J1NO1cZqyJwljSWVmfOqVZgaE=
github.com/siyuan-note/encryption v0.0.0-20220713091850-5ecd92177b75/go.mod h1:H8fyqqAbp9XreANjeSbc72zEdFfKTXYN34tc1TjZwtw=
github.com/siyuan-note/eventbus v0.0.0-20220916025349-3ac6e75522da h1:/jNhl7LC+9BhkWvNxuJDdsNfA/2wvfuj9mqWx4CbV90=
diff --git a/kernel/model/repository.go b/kernel/model/repository.go
index e5fdeb53d..d2d2b9e55 100644
--- a/kernel/model/repository.go
+++ b/kernel/model/repository.go
@@ -28,6 +28,7 @@ import (
"os"
"path"
"path/filepath"
+ "sort"
"strings"
"sync"
"time"
@@ -53,7 +54,18 @@ func init() {
subscribeEvents()
}
-func GetRepoSnapshots(page int) (logs []*dejavu.Log, pageCount, totalCount int, err error) {
+type Snapshot struct {
+ *dejavu.Log
+ TypesCount []*TypeCount `json:"typesCount"`
+}
+
+type TypeCount struct {
+ Type string `json:"type"`
+ Count int `json:"count"`
+}
+
+func GetRepoSnapshots(page int) (ret []*Snapshot, pageCount, totalCount int, err error) {
+ ret = []*Snapshot{}
if 1 > len(Conf.Repo.Key) {
err = errors.New(Conf.Language(26))
return
@@ -64,7 +76,7 @@ func GetRepoSnapshots(page int) (logs []*dejavu.Log, pageCount, totalCount int,
return
}
- logs, pageCount, totalCount, err = repo.GetIndexLogs(page, 32)
+ logs, pageCount, totalCount, err := repo.GetIndexLogs(page, 32)
if nil != err {
if dejavu.ErrNotFoundIndex == err {
logs = []*dejavu.Log{}
@@ -75,6 +87,51 @@ func GetRepoSnapshots(page int) (logs []*dejavu.Log, pageCount, totalCount int,
logging.LogErrorf("get data repo index logs failed: %s", err)
return
}
+
+ ret = buildSnapshots(logs)
+ return
+}
+
+func buildSnapshots(logs []*dejavu.Log) (ret []*Snapshot) {
+ for _, l := range logs {
+ typesCount := statTypesByPath(l.Files)
+ ret = append(ret, &Snapshot{
+ Log: l,
+ TypesCount: typesCount,
+ })
+ }
+ return
+}
+
+func statTypesByPath(files []*entity.File) (ret []*TypeCount) {
+ for _, f := range files {
+ ext := path.Ext(f.Path)
+
+ found := false
+ for _, tc := range ret {
+ if tc.Type == ext {
+ tc.Count++
+ found = true
+ break
+ }
+ }
+ if !found {
+ ret = append(ret, &TypeCount{Type: ext, Count: 1})
+ }
+ }
+
+ sort.Slice(ret, func(i, j int) bool { return ret[i].Count > ret[j].Count })
+ if 10 < len(ret) {
+ otherCount := 0
+ for _, tc := range ret[10:] {
+ tc.Count += otherCount
+ }
+ other := &TypeCount{
+ Type: "Other",
+ Count: otherCount,
+ }
+ ret = append(ret[:10], other)
+ }
return
}
@@ -333,6 +390,7 @@ func RemoveCloudRepoTag(tag string) (err error) {
}
func GetCloudRepoTagSnapshots() (ret []*dejavu.Log, err error) {
+ ret = []*dejavu.Log{}
if 1 > len(Conf.Repo.Key) {
err = errors.New(Conf.Language(26))
return
@@ -343,14 +401,16 @@ func GetCloudRepoTagSnapshots() (ret []*dejavu.Log, err error) {
return
}
- ret, err = repo.GetCloudRepoTagLogs(map[string]interface{}{eventbus.CtxPushMsg: eventbus.CtxPushMsgToStatusBar})
- if 1 > len(ret) {
- ret = []*dejavu.Log{}
+ logs, err := repo.GetCloudRepoTagLogs(map[string]interface{}{eventbus.CtxPushMsg: eventbus.CtxPushMsgToStatusBar})
+ if nil != err {
+ return
}
+ ret = logs
return
}
-func GetTagSnapshots() (ret []*dejavu.Log, err error) {
+func GetTagSnapshots() (ret []*Snapshot, err error) {
+ ret = []*Snapshot{}
if 1 > len(Conf.Repo.Key) {
err = errors.New(Conf.Language(26))
return
@@ -361,10 +421,11 @@ func GetTagSnapshots() (ret []*dejavu.Log, err error) {
return
}
- ret, err = repo.GetTagLogs()
- if 1 > len(ret) {
- ret = []*dejavu.Log{}
+ logs, err := repo.GetTagLogs()
+ if nil != err {
+ return
}
+ ret = buildSnapshots(logs)
return
}