Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
Vanessa 2025-02-16 11:52:41 +08:00
commit eacd80493c
26 changed files with 73 additions and 58 deletions

View file

@ -14,10 +14,10 @@ Install pnpm: `npm install -g pnpm@9.12.1`
Set the Electron mirror environment variable and install Electron:
* macOS/Linux: `ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ pnpm install electron@v33.4.0 -D`
* macOS/Linux: `ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ pnpm install electron@v33.4.1 -D`
* Windows:
* `SET ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/`
* `pnpm install electron@v33.4.0 -D`
* `pnpm install electron@v33.4.1 -D`
NPM mirror:
@ -28,7 +28,7 @@ NPM mirror:
On the desktop, go to the app folder to run:
* `pnpm install electron@v33.4.0 -D`
* `pnpm install electron@v33.4.1 -D`
* `pnpm run dev`
* `pnpm run start`

View file

@ -16,11 +16,11 @@
* macOS/Linux:
```
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ pnpm install electron@v33.4.0 -D
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ pnpm install electron@v33.4.1 -D
```
* Windows:
* `SET ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/`
* `pnpm install electron@v33.4.0 -D`
* `pnpm install electron@v33.4.1 -D`
NPM 镜像:
@ -30,7 +30,7 @@ NPM 镜像:
桌面端进入 app 文件夹运行:
* `pnpm install electron@v33.4.0 -D`
* `pnpm install electron@v33.4.1 -D`
* `pnpm run dev`
* `pnpm run start`

View file

@ -1050,8 +1050,8 @@
"md7": "رمز صورة الشبكة",
"md8": "بعد التمكين، إذا كانت الصورة ملف ويب (ملف أصول غير محلي)، فستعرض علامة زاوية",
"md9": "قائمة إدراج الكلمات المفتاحية المرجعية الافتراضية",
"md12": "الإشارات المرجعية والأسماء والأسماء المستعارة والملاحظات وعدد المراجع",
"md16": "بعد التمكين، إذا كانت هناك هذه المعلومات، سيتم عرضها على الجانب الأيمن العلوي من الكتلة",
"md12": "رمز الزاوية لكتلة المحتوى",
"md16": "عرض في الزاوية العلوية اليمنى الإشارات المرجعية والأسماء والأسماء المستعارة والملاحظات واسم قاعدة البيانات المرتبطة وعدد المراجع",
"md27": "رقم السطر لكتلة الكود",
"md28": "بعد التمكين، ستعرض كتلة الكود رقم السطر (يرجى ملاحظة أن التمكين قد يقلل من أداء المحرر)",
"md29": "‫عدد مسافات لمفتاح Tab",

View file

@ -1050,8 +1050,8 @@
"md7": "Netzwerkbildsymbol",
"md8": "Nach der Aktivierung wird, wenn das Bild eine Webdatei (kein lokales Asset) ist, ein Eckzeichen angezeigt",
"md9": "Virtuelle Referenz-Stichwort-Einschlussliste",
"md12": "Lesezeichen, Namen, Aliase, Notizen und Referenzanzahl",
"md16": "Nach der Aktivierung wird, wenn solche Informationen vorhanden sind, dies auf der oberen rechten Seite des Blocks angezeigt",
"md12": "Ecke-Icon des Inhaltsblocks",
"md16": "In der oberen rechten Ecke anzeigen: Lesezeichen, Namen, Aliase, Notizen, den Namen der verbundenen Datenbank und die Referenzanzahl",
"md27": "Codeblock-Zeilennummer",
"md28": "Nach der Aktivierung zeigt der Codeblock die Zeilennummer an (Bitte beachten Sie, dass die Aktivierung die Leistung des Editors beeinträchtigen kann)",
"md29": "Anzahl der Tabulatoren",

View file

@ -1050,8 +1050,8 @@
"md7": "Network image icon",
"md8": "After enabling, if the image is a web file (non-local asset file), it will display a corner mark",
"md9": "Virtual Reference keyword inclusion list",
"md12": "Bookmark, name, alias, memo and reference count",
"md16": "After enabling, if there is such information, it will be displayed on the upper right side of the block",
"md12": "Content block corner icon",
"md16": "Display bookmarks, names, aliases, notes, the name of the bound database, and reference count in the top right corner",
"md27": "Code block line number",
"md28": "After enabling, the code block will display the line number (Please note that enabling may reduce editor performance)",
"md29": "Number of Tab Spaces",

View file

@ -1050,8 +1050,8 @@
"md7": "Icono de imagen de red",
"md8": "Después de habilitarlo, si la imagen es un archivo de red (archivo de activos no locales), mostrará una marca de esquina",
"md9": "Lista de inclusión de palabras clave de referencia virtual",
"md12": "Marcadores, nombres, alias, notas y recuento de referencias",
"md16": "Una vez habilitado, si existe dicha información, se mostrará en la parte superior derecha del bloque",
"md12": "Icono de esquina del bloque de contenido",
"md16": "Mostrar en la esquina superior derecha los marcadores, nombres, alias, notas, el nombre de la base de datos vinculada y el recuento de referencias",
"md27": "Número de línea del bloque de código",
"md28": "Tras la habilitación, el bloque de código mostrará el número de línea (Tenga en cuenta que habilitarlo puede reducir el rendimiento del editor)",
"md29": "Número de espacios de Tab",

View file

@ -1050,8 +1050,8 @@
"md7": "Icône d'image réseau",
"md8": "Après l'activation, si l'image est un fichier web (fichier d'actif non local), une marque d'angle apparaîtra.",
"md9": "Liste d'inclusion de mots-clés de référence virtuelle",
"md12": "Signets, noms, alias, notes et nombre de références",
"md16": "Après l'activation, si de telles informations existent, elles seront affichées dans la partie haute à droite du bloc.",
"md12": "Icône de coin du bloc de contenu",
"md16": "Afficher en haut à droite les signets, noms, alias, notes, le nom de la base de données liée et le nombre de références",
"md27": "Numéro de ligne du bloc de code",
"md28": "Après l'activation, le bloc de code affichera le numéro de ligne. (Veuillez noter que l'activation peut réduire les performances de l'éditeur)",
"md29": "Nombre d'espaces Tab ",

View file

@ -1050,8 +1050,8 @@
"md7": "סמל תמונה ברשת",
"md8": "לאחר הפעלת אפשרות זו, אם התמונה היא קובץ אינטרנט (קובץ נכס שאינו מקומי), היא תציג סימן פינה",
"md9": "רשימת מילות מפתח כלליות של הפניה וירטואלית לכלול",
"md12": "סימניות, שמות, כינויים, הערות ומספר הפניות",
"md16": "לאחר הפעלת אפשרות זו, אם יש מידע זה, הוא יוצג בצד ימין העליון של הבלוק",
"md12": "סמל פינה של בלוק התוכן",
"md16": "הצג בפינה העליונה הימנית סימניות, שמות, כינויים, הערות, שם מסד הנתונים הקשור ומספר הפניות",
"md27": "מספר שורת הקוד",
"md28": "לאחר הפעלת אפשרות זו, בלוק הקוד יציג את מספר השורה (שימו לב, הפעלת אפשרות זו עשויה להוריד את ביצועי העורך)",
"md29": "מספר רווחי טאב",

View file

@ -1050,8 +1050,8 @@
"md7": "Icona immagine di rete",
"md8": "Dopo l'abilitazione, se l'immagine è un file web (non un file di asset locale), verrà mostrato un marchio d'angolo",
"md9": "Lista di inclusione delle parole chiave di riferimento virtuale",
"md12": "Segnalibri, nomi, alias, note e conteggio dei riferimenti",
"md16": "Dopo l'abilitazione, se ci sono tali informazioni, verranno visualizzate sul lato destro del blocco",
"md12": "Icona dell'angolo del blocco di contenuto",
"md16": "Visualizza in alto a destra segnalibri, nomi, alias, note, nome del database associato e conteggio dei riferimenti",
"md27": "Numerazione delle righe del blocco di codice",
"md28": "Dopo l'abilitazione, il blocco di codice mostrerà il numero di riga (Nota: l'abilitazione può ridurre le prestazioni dell'editor)",
"md29": "Numero di spazi del Tab",

View file

@ -1050,8 +1050,8 @@
"md7": "ネットワーク画像アイコン",
"md8": "ネットワーク画像 (ローカルのアセットファイル以外) の隅にマークを表示します",
"md9": "仮想参照に含めるキーワードのリスト",
"md12": "ブックマーク、名前、エイリアス、メモ、および参照数",
"md16": "ブックマーク、名前、エイリアス、メモ、参照数をブロックの右上に表示します",
"md12": "コンテンツブロックのコーナーアイコン",
"md16": "右上にブックマーク、名前、エイリアス、メモ、バインドされたデータベースの名前および参照数を表示する",
"md27": "コードブロックの行番号",
"md28": "コードブロックに行番号を表示します (エディタのパフォーマンスが低下する可能性があります)",
"md29": "Tab スペースの数",

View file

@ -1050,8 +1050,8 @@
"md7": "Ikona obrazu sieciowego",
"md8": "Po włączeniu, jeśli obraz jest plikiem internetowym (nie lokalnym plikiem zasobu), zostanie wyświetlony znacznik rogu",
"md9": "Lista słów kluczowych referencji wirtualnych",
"md12": "Zakładki, nazwy, aliasy, notatki i liczba odwołań",
"md16": "Po włączeniu, jeśli taka informacja jest dostępna, zostanie wyświetlona w prawym górnym rogu bloku",
"md12": "Ikona rogu bloku treści",
"md16": "Wyświetlaj w prawym górnym rogu zakładki, nazwy, aliasy, notatki, nazwę powiązanej bazy danych i liczbę odwołań",
"md27": "Numer linii bloku kodu",
"md28": "Po włączeniu, blok kodu wyświetli numer linii (Proszę pamiętać, że włączenie może obniżyć wydajność edytora)",
"md29": "Ilość spacji Tab",

View file

@ -1050,8 +1050,8 @@
"md7": "Значок сетевого изображения",
"md8": "После включения, если изображение является веб-файлом (не локальный файл ресурса), станет виден угловой знак",
"md9": "Список включаемых ключевых слов виртуальной ссылки",
"md12": "Закладки, имена, псевдонимы, заметки и количество ссылок",
"md16": "После включения, если такая информация есть, она будет отображена в верхней правой части блока",
"md12": "Угловая иконка блока контента",
"md16": "Отображать в правом верхнем углу закладки, имена, псевдонимы, заметки, имя связанной базы данных и количество ссылок",
"md27": "Номер строки блока кода",
"md28": "После включения блок кода будет отображать номер строки (пожалуйста, обратите внимание, что включение может снизить производительность редактора)",
"md29": "Количество пробелов табуляции",

View file

@ -1050,8 +1050,8 @@
"md7": "網路圖片角標",
"md8": "啟用後如果圖片是網路檔(非本地資源檔)則會顯示角標",
"md9": "虛擬引用關鍵字包含列表",
"md12": "書籤、命名、別名、備註和引用計數",
"md16": "啟用後如果存在這些資訊則將在塊的右上側進行顯示",
"md12": "內容塊角標",
"md16": "在右上側顯示書籤、命名、別名、備註、綁定資料庫的名稱和引用計數",
"md27": "代碼塊顯示行號",
"md28": "啟用後代碼塊會顯示行號(請注意啟用後可能會降低編輯器性能)",
"md29": "Tab 空格數",

View file

@ -1050,8 +1050,8 @@
"md7": "网络图片角标",
"md8": "启用后如果图片是网络文件(非本地资源文件)则会显示角标",
"md9": "虚拟引用关键字包含列表",
"md12": "书签、命名、别名、备注和引用计数",
"md16": "启用后如果存在这些信息则将在块的右上侧进行显示",
"md12": "内容块角标",
"md16": "在右上侧显示书签、命名、别名、备注、绑定数据库的名称和引用计数",
"md27": "代码块显示行号",
"md28": "启用后代码块会显示行号(请注意启用后可能会降低编辑器性能)",
"md29": "Tab 空格数",

View file

@ -56,7 +56,7 @@
"clean-webpack-plugin": "^4.0.0",
"css-loader": "^6.7.1",
"dayjs": "^1.11.5",
"electron": "33.4.0",
"electron": "33.4.1",
"electron-builder": "25.1.8",
"encoding": "^0.1.13",
"esbuild-loader": "^3.0.1",

16
app/pnpm-lock.yaml generated
View file

@ -10,7 +10,7 @@ importers:
dependencies:
'@electron/remote':
specifier: ^2.1.2
version: 2.1.2(electron@33.4.0)
version: 2.1.2(electron@33.4.1)
devDependencies:
'@types/node':
specifier: ^18.13.0
@ -34,8 +34,8 @@ importers:
specifier: ^1.11.5
version: 1.11.5
electron:
specifier: 33.4.0
version: 33.4.0
specifier: 33.4.1
version: 33.4.1
electron-builder:
specifier: 25.1.8
version: 25.1.8(electron-builder-squirrel-windows@25.0.5)
@ -1145,8 +1145,8 @@ packages:
electron-to-chromium@1.5.39:
resolution: {integrity: sha512-4xkpSR6CjuiaNyvwiWDI85N9AxsvbPawB8xc7yzLPonYTuP19BVgYweKyUMFtHEZgIcHWMt1ks5Cqx2m+6/Grg==}
electron@33.4.0:
resolution: {integrity: sha512-AO+Q/ygWwKKs+JtNEFgfS5ntjG3TA2HX7s4IEbiYi6lktaocuLP2oScG1/mmKRuUWoOcow2RRsf995L2mM4bvQ==}
electron@33.4.1:
resolution: {integrity: sha512-ICXI9hw3Ru3XwaZLZdwyARn85GpoF9n4BrrwkHJtsoi4rl3qA7IM/Qu5HlDhqnbH4XuPNmHwoJ8bGJqo0lJ4+A==}
engines: {node: '>= 12.20.55'}
hasBin: true
@ -2834,9 +2834,9 @@ snapshots:
- bluebird
- supports-color
'@electron/remote@2.1.2(electron@33.4.0)':
'@electron/remote@2.1.2(electron@33.4.1)':
dependencies:
electron: 33.4.0
electron: 33.4.1
'@electron/universal@2.0.1':
dependencies:
@ -4012,7 +4012,7 @@ snapshots:
electron-to-chromium@1.5.39: {}
electron@33.4.0:
electron@33.4.1:
dependencies:
'@electron/get': 2.0.2
'@types/node': 20.14.5

View file

@ -348,6 +348,7 @@ ${data.shorthandContent}
path: pathPosix().join(getDisplayName(toPath[0], false, true), Lute.NewNodeID() + ".sy"),
title: replaceFileName(response.data.shorthandTitle),
md: md,
listDocTree: true,
}, () => {
this.remove(item);
});

View file

@ -22,7 +22,6 @@ import (
"os"
"path/filepath"
"strings"
"sync"
"time"
"github.com/88250/gulu"
@ -166,7 +165,7 @@ func getEmojiConf(c *gin.Context) {
items := []map[string]interface{}{}
custom["items"] = items
if gulu.File.IsDir(customConfDir) {
model.CustomEmojis = sync.Map{}
model.ClearCustomEmojis()
customEmojis, err := os.ReadDir(customConfDir)
if err != nil {
logging.LogErrorf("read custom emojis failed: %s", err)
@ -224,7 +223,7 @@ func addCustomEmoji(name string, items *[]map[string]interface{}) {
*items = append(*items, emoji)
imgSrc := "/emojis/" + name
model.CustomEmojis.Store(nameWithoutExt, imgSrc)
model.AddCustomEmoji(nameWithoutExt, imgSrc)
}
func checkUpdate(c *gin.Context) {

View file

@ -748,11 +748,11 @@ func buildTreeBackmention(defSQLBlock *sql.Block, refBlocks []*Block, keyword st
mentionKeywords = append(mentionKeywords, v.(string))
}
mentionKeywords = prepareMarkKeywords(mentionKeywords)
ret = searchBackmention(mentionKeywords, keyword, excludeBacklinkIDs, rootID, beforeLen)
mentionKeywords, ret = searchBackmention(mentionKeywords, keyword, excludeBacklinkIDs, rootID, beforeLen)
return
}
func searchBackmention(mentionKeywords []string, keyword string, excludeBacklinkIDs *hashset.Set, rootID string, beforeLen int) (ret []*Block) {
func searchBackmention(mentionKeywords []string, keyword string, excludeBacklinkIDs *hashset.Set, rootID string, beforeLen int) (retMentionKeywords []string, ret []*Block) {
ret = []*Block{}
if 1 > len(mentionKeywords) {
return
@ -825,6 +825,9 @@ func searchBackmention(mentionKeywords []string, keyword string, excludeBacklink
newText := markReplaceSpanWithSplit(text, mentionKeywords, search.GetMarkSpanStart(search.MarkDataType), search.GetMarkSpanEnd())
if text != newText {
tmp = append(tmp, b)
k := gulu.Str.SubstringsBetween(newText, search.GetMarkSpanStart(search.MarkDataType), search.GetMarkSpanEnd())
retMentionKeywords = append(retMentionKeywords, k...)
} else {
// columnFilter 中的命名、别名和备注命中的情况
// 反链提及搜索范围增加命名、别名和备注 https://github.com/siyuan-note/siyuan/issues/7639
@ -836,6 +839,8 @@ func searchBackmention(mentionKeywords []string, keyword string, excludeBacklink
}
}
blocks = tmp
retMentionKeywords = gulu.Str.RemoveDuplicatedElem(retMentionKeywords)
mentionKeywords = retMentionKeywords
mentionBlockMap := map[string]*Block{}
for _, block := range blocks {

View file

@ -468,6 +468,7 @@ func GetCloudShorthand(id string) (ret map[string]interface{}, err error) {
luteEngine := NewLute()
luteEngine.SetFootnotes(true)
tree := parse.Parse("", []byte(md), luteEngine.ParseOptions)
luteEngine.RenderOptions.ProtyleMarkNetImg = false
content := luteEngine.ProtylePreview(tree, luteEngine.RenderOptions)
ret["shorthandContent"] = content
return
@ -521,6 +522,7 @@ func GetCloudShorthands(page int) (result map[string]interface{}, err error) {
md := shorthand["shorthandContent"].(string)
shorthand["shorthandMd"] = md
tree := parse.Parse("", []byte(md), luteEngine.ParseOptions)
luteEngine.RenderOptions.ProtyleMarkNetImg = false
content := luteEngine.ProtylePreview(tree, luteEngine.RenderOptions)
shorthand["shorthandContent"] = content
}

View file

@ -691,7 +691,15 @@ func Close(force, setCurrentWorkspace bool, execInstallPkg int) (exitCode int) {
return
}
var CustomEmojis = sync.Map{}
var customEmojis = sync.Map{}
func AddCustomEmoji(emojiName, imgSrc string) {
customEmojis.Store(emojiName, imgSrc)
}
func ClearCustomEmojis() {
customEmojis.Clear()
}
func NewLute() (ret *lute.Lute) {
ret = util.NewLute()
@ -701,7 +709,7 @@ func NewLute() (ret *lute.Lute) {
ret.SetSpellcheck(Conf.Editor.Spellcheck)
customEmojiMap := map[string]string{}
CustomEmojis.Range(func(key, value interface{}) bool {
customEmojis.Range(func(key, value interface{}) bool {
customEmojiMap[key.(string)] = value.(string)
return true
})

View file

@ -1601,7 +1601,7 @@ func removeDoc0(tree *parse.Tree, childrenDir string) {
if nil != defTree {
defNode := treenode.GetNodeInTree(defTree, defID)
if nil != defNode {
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, 1*time.Second, refreshRefCount, defTree.ID, defNode.ID)
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, util.SQLFlushInterval, refreshRefCount, defTree.ID, defNode.ID)
}
}
}

View file

@ -330,7 +330,7 @@ func RollbackDocHistory(boxID, historyPath string) (err error) {
if nil != defTree {
defNode := treenode.GetNodeInTree(defTree, defID)
if nil != defNode {
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, 1*time.Second, refreshRefCount, defTree.ID, defNode.ID)
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, util.SQLFlushInterval, refreshRefCount, defTree.ID, defNode.ID)
}
}
}

View file

@ -866,13 +866,13 @@ func ImportFromLocalPath(boxID, localPath string, toPath string) (err error) {
return ast.WalkContinue
}
absolutePath := filepath.Join(localPath, dest)
absolutePath := filepath.Join(currentDir, dest)
newAbsolutePath := absolutePath
decodedDest := string(html.DecodeDestination([]byte(dest)))
if decodedDest != dest {
dest = decodedDest
newAbsolutePath = filepath.Join(localPath, dest)
newAbsolutePath = filepath.Join(currentDir, dest)
gulu.File.Copy(absolutePath, newAbsolutePath)
}

View file

@ -381,8 +381,8 @@ func (tx *Transaction) doMove(operation *Operation) (ret *TxErr) {
if err = tx.writeTree(targetTree); err != nil {
return
}
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, 1*time.Second, refreshRefCount, srcTree.ID, srcTree.ID)
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, 1*time.Second, refreshRefCount, targetTree.ID, srcNode.ID)
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, util.SQLFlushInterval, refreshRefCount, srcTree.ID, srcTree.ID)
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, util.SQLFlushInterval, refreshRefCount, targetTree.ID, srcNode.ID)
}
return
}
@ -466,8 +466,8 @@ func (tx *Transaction) doMove(operation *Operation) (ret *TxErr) {
if err = tx.writeTree(targetTree); err != nil {
return &TxErr{code: TxErrCodeWriteTree, msg: err.Error(), id: id}
}
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, 1*time.Second, refreshRefCount, srcTree.ID, srcTree.ID)
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, 1*time.Second, refreshRefCount, targetTree.ID, srcNode.ID)
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, util.SQLFlushInterval, refreshRefCount, srcTree.ID, srcTree.ID)
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, util.SQLFlushInterval, refreshRefCount, targetTree.ID, srcNode.ID)
}
return
}
@ -779,7 +779,7 @@ func (tx *Transaction) doDelete(operation *Operation) (ret *TxErr) {
if nil != defTree {
defNode := treenode.GetNodeInTree(defTree, defID)
if nil != defNode {
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, 1*time.Second, refreshRefCount, defTree.ID, defNode.ID)
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, util.SQLFlushInterval, refreshRefCount, defTree.ID, defNode.ID)
}
}
}
@ -1110,7 +1110,7 @@ func (tx *Transaction) doInsert(operation *Operation) (ret *TxErr) {
if nil != defTree {
defNode := treenode.GetNodeInTree(defTree, defID)
if nil != defNode {
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, 1*time.Second, refreshRefCount, defTree.ID, defNode.ID)
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, util.SQLFlushInterval, refreshRefCount, defTree.ID, defNode.ID)
}
}
}
@ -1221,7 +1221,7 @@ func (tx *Transaction) doUpdate(operation *Operation) (ret *TxErr) {
if nil != defTree {
defNode := treenode.GetNodeInTree(defTree, defID)
if nil != defNode {
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, 1*time.Second, refreshRefCount, defTree.ID, defNode.ID)
task.AppendAsyncTaskWithDelay(task.SetDefRefCount, util.SQLFlushInterval, refreshRefCount, defTree.ID, defNode.ID)
}
}
}

View file

@ -179,7 +179,7 @@ func StatusJob() {
queueLock.Lock()
for _, task := range taskQueue {
action := task.Action
if c := count[action]; 2 < c {
if c := count[action]; 7 < c {
logging.LogWarnf("too many tasks [%s], ignore show its status", action)
continue
}