From 163c91ffbe4706d0f6a4187a7b0f9a45332f5bba Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sun, 19 Oct 2025 09:32:03 +0800 Subject: [PATCH 1/3] :art: Improve the database rollup and asset field filtering https://github.com/siyuan-note/siyuan/issues/16126 Signed-off-by: Daniel <845765@qq.com> --- kernel/av/filter.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/av/filter.go b/kernel/av/filter.go index ad2b0f36e..876d03a85 100644 --- a/kernel/av/filter.go +++ b/kernel/av/filter.go @@ -393,7 +393,7 @@ func (value *Value) Filter(filter *ViewFilter, attrView *AttributeView, itemID s case FilterQuantifierNone: if FilterOperatorIsEmpty == filter.Operator { if 1 > len(value.MAsset) { - return true + return false } for _, asset := range value.MAsset { @@ -404,7 +404,7 @@ func (value *Value) Filter(filter *ViewFilter, attrView *AttributeView, itemID s return true } else if FilterOperatorIsNotEmpty == filter.Operator { if 1 > len(value.MAsset) { - return false + return true } for _, asset := range value.MAsset { From 0ffa864c8f54eb655ccedb76e217990850fe97b8 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sun, 19 Oct 2025 09:46:55 +0800 Subject: [PATCH 2/3] :art: https://github.com/siyuan-note/siyuan/issues/16149 Signed-off-by: Daniel <845765@qq.com> --- kernel/model/session.go | 2 +- kernel/model/storage.go | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/kernel/model/session.go b/kernel/model/session.go index 82b76d559..e0fef0d03 100644 --- a/kernel/model/session.go +++ b/kernel/model/session.go @@ -181,7 +181,7 @@ func GetCaptcha(c *gin.Context) { } func CheckReadonly(c *gin.Context) { - if util.ReadOnly { + if util.ReadOnly || IsReadOnlyRole(GetGinContextRole(c)) { result := util.NewResult() result.Code = -1 result.Msg = Conf.Language(34) diff --git a/kernel/model/storage.go b/kernel/model/storage.go index 377e93361..187739343 100644 --- a/kernel/model/storage.go +++ b/kernel/model/storage.go @@ -362,10 +362,6 @@ func GetLocalStorage() (ret map[string]interface{}) { } func setLocalStorage(val interface{}) (err error) { - if util.ReadOnly { - return - } - dirPath := filepath.Join(util.DataDir, "storage") if err = os.MkdirAll(dirPath, 0755); err != nil { logging.LogErrorf("create storage [local] dir failed: %s", err) @@ -437,7 +433,7 @@ func SetOutlineStorage(docID string, val interface{}) (err error) { DocID: docID, Data: make(map[string]interface{}), } - + if valMap, ok := val.(map[string]interface{}); ok { outlineDoc.Data = valMap } @@ -457,7 +453,7 @@ func SetOutlineStorage(docID string, val interface{}) (err error) { // 将新的文档信息添加到最前面 outlineDocs = append([]*OutlineDoc{outlineDoc}, outlineDocs...) - + // 限制为2000个文档 if 2000 < len(outlineDocs) { outlineDocs = outlineDocs[:2000] From b4e10e5704b62e83c7f9975e1c2c89cf90421283 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sun, 19 Oct 2025 09:57:41 +0800 Subject: [PATCH 3/3] :art: https://github.com/siyuan-note/siyuan/issues/16149 https://github.com/siyuan-note/siyuan/issues/16121 Signed-off-by: Daniel <845765@qq.com> --- app/src/layout/dock/Outline.ts | 13 +++++++++++-- app/src/plugin/index.ts | 4 ++++ app/src/protyle/util/compatibility.ts | 5 ++--- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/app/src/layout/dock/Outline.ts b/app/src/layout/dock/Outline.ts index b0b795907..5e3c0f4d4 100644 --- a/app/src/layout/dock/Outline.ts +++ b/app/src/layout/dock/Outline.ts @@ -6,7 +6,13 @@ import {getDockByType} from "../tabUtil"; import {fetchPost} from "../../util/fetch"; import {getAllModels} from "../getAll"; import {hasClosestBlock, hasClosestByClassName, hasTopClosestByClassName} from "../../protyle/util/hasClosest"; -import {setStorageVal, updateHotkeyAfterTip, updateHotkeyTip} from "../../protyle/util/compatibility"; +import { + isInAndroid, + isInHarmony, + setStorageVal, + updateHotkeyAfterTip, + writeText +} from "../../protyle/util/compatibility"; import {openFileById} from "../../editor/util"; import {Constants} from "../../constants"; import {MenuItem} from "../../menus/Menu"; @@ -18,7 +24,6 @@ import {checkFold} from "../../util/noRelyPCFunction"; import {transaction, turnsIntoTransaction} from "../../protyle/wysiwyg/transaction"; import {goHome} from "../../protyle/wysiwyg/commonHotkey"; import {Editor} from "../../editor"; -import {writeText, isInAndroid, isInHarmony} from "../../protyle/util/compatibility"; import {mathRender} from "../../protyle/render/mathRender"; import {genEmptyElement} from "../../block/util"; import {focusBlock, focusByWbr} from "../../protyle/util/selection"; @@ -658,6 +663,10 @@ export class Outline extends Model { } public saveExpendIds() { + if (window.siyuan.config.readonly || window.siyuan.isPublish) { + return; + } + if (!this.isPreview && this.type === "pin") { fetchPost("/api/storage/setOutlineStorage", { docID: this.blockId, diff --git a/app/src/plugin/index.ts b/app/src/plugin/index.ts index 7a4aa8712..24041baa5 100644 --- a/app/src/plugin/index.ts +++ b/app/src/plugin/index.ts @@ -251,6 +251,10 @@ export class Plugin { } public saveData(storageName: string, data: any) { + if (window.siyuan.config.readonly || window.siyuan.isPublish) { + return; + } + return new Promise((resolve) => { const pathString = `/data/storage/petal/${this.name}/${storageName}`; let file: File; diff --git a/app/src/protyle/util/compatibility.ts b/app/src/protyle/util/compatibility.ts index d0bb8c31a..32bbefb84 100644 --- a/app/src/protyle/util/compatibility.ts +++ b/app/src/protyle/util/compatibility.ts @@ -2,8 +2,7 @@ import {focusByRange} from "./selection"; import {fetchPost, fetchSyncPost} from "../../util/fetch"; import {Constants} from "../../constants"; /// #if !BROWSER -import {clipboard} from "electron"; -import {ipcRenderer} from "electron"; +import {clipboard, ipcRenderer} from "electron"; /// #endif export const encodeBase64 = (text: string): string => { @@ -500,7 +499,7 @@ export const getLocalStorage = (cb: () => void) => { }; export const setStorageVal = (key: string, val: any, cb?: () => void) => { - if (window.siyuan.config.readonly) { + if (window.siyuan.config.readonly || window.siyuan.isPublish) { return; } fetchPost("/api/storage/setLocalStorageVal", {