Vanessa 2023-04-25 18:53:41 +08:00
parent e0e40dbad2
commit 34e833d0c1
7 changed files with 72 additions and 5 deletions

View file

@ -15,6 +15,53 @@ import {escapeHtml} from "../util/escape";
import {getWorkspaceName} from "../util/noRelyPCFunction"; import {getWorkspaceName} from "../util/noRelyPCFunction";
import {needSubscribe} from "../util/needSubscribe"; import {needSubscribe} from "../util/needSubscribe";
import {redirectToCheckAuth} from "../util/pathName"; import {redirectToCheckAuth} from "../util/pathName";
import {getAllModels} from "../layout/getAll";
import {reloadProtyle} from "../protyle/util/reload";
export const reloadSync = (data:{upsertRootIDs: string[], removeRootIDs: string[]}) => {
const allModels = getAllModels()
allModels.editor.forEach(item => {
if (data.upsertRootIDs.includes(item.editor.protyle.block.rootID)) {
reloadProtyle(item.editor.protyle)
} else if (data.removeRootIDs.includes(item.editor.protyle.block.rootID)) {
item.parent.parent.removeTab(item.parent.id, false, false, false);
}
})
allModels.graph.forEach(item => {
item.searchGraph(false);
})
allModels.outline.forEach(item => {
if (item.type === "local" && data.removeRootIDs.includes(item.blockId)) {
item.parent.parent.removeTab(item.parent.id, false, false, false);
} else if (item.type !== "local" || data.upsertRootIDs.includes(item.blockId)){
fetchPost("/api/outline/getDocOutline", {
id: item.blockId,
}, response => {
item.update(response);
});
}
})
allModels.backlink.forEach(item => {
if (item.type === "local" && data.removeRootIDs.includes(item.rootId)) {
item.parent.parent.removeTab(item.parent.id, false, false, false);
} else {
item.refresh();
}
})
allModels.files.forEach(item => {
item.init(false);
})
allModels.bookmark.forEach(item => {
item.update();
})
allModels.tag.forEach(item => {
item.update();
})
// NOTE asset 无法获取推送地址,先不处理
allModels.search.forEach(item => {
item.parent.panelElement.querySelector("#searchRefresh").dispatchEvent(new CustomEvent("input"));
})
}
export const lockScreen = () => { export const lockScreen = () => {
if (window.siyuan.config.readonly) { if (window.siyuan.config.readonly) {

View file

@ -17,7 +17,7 @@ import {
processSync, processSync,
progressBackgroundTask, progressBackgroundTask,
progressLoading, progressLoading,
progressStatus, progressStatus, reloadSync,
setTitle, setTitle,
transactionError transactionError
} from "./dialog/processSystem"; } from "./dialog/processSystem";
@ -53,6 +53,9 @@ class App {
msgCallback: (data) => { msgCallback: (data) => {
if (data) { if (data) {
switch (data.cmd) { switch (data.cmd) {
case "syncMergeResult":
reloadSync(data.data);
break;
case "readonly": case "readonly":
window.siyuan.config.editor.readOnly = data.data; window.siyuan.config.editor.readOnly = data.data;
updateEditModeElement(); updateEditModeElement();

View file

@ -452,7 +452,7 @@ export class Backlink extends Model {
} }
} }
private refresh() { public refresh() {
const element = this.element.querySelector('.block__icon[data-type="refresh"] svg'); const element = this.element.querySelector('.block__icon[data-type="refresh"] svg');
element.classList.add("fn__rotate"); element.classList.add("fn__rotate");
fetchPost("/api/ref/refreshBacklink", { fetchPost("/api/ref/refreshBacklink", {

View file

@ -636,7 +636,7 @@ export class Files extends Model {
} }
} }
private init(init = true) { public init(init = true) {
let html = ""; let html = "";
let closeHtml = ""; let closeHtml = "";
window.siyuan.notebooks.forEach((item) => { window.siyuan.notebooks.forEach((item) => {

View file

@ -184,7 +184,7 @@ export class Tag extends Model {
setPanelFocus(this.element); setPanelFocus(this.element);
} }
private update() { public update() {
const element = this.element.querySelector('.block__icon[data-type="refresh"] svg'); const element = this.element.querySelector('.block__icon[data-type="refresh"] svg');
if (element.classList.contains("fn__rotate")) { if (element.classList.contains("fn__rotate")) {
return; return;

View file

@ -6,6 +6,9 @@ import {Outline} from "./dock/Outline";
import {Backlink} from "./dock/Backlink"; import {Backlink} from "./dock/Backlink";
import {Asset} from "../asset"; import {Asset} from "../asset";
import {Search} from "../search"; import {Search} from "../search";
import {Files} from "./dock/Files";
import {Bookmark} from "./dock/Bookmark";
import {Tag} from "./dock/Tag";
export const getAllModels = () => { export const getAllModels = () => {
const models: IModels = { const models: IModels = {
@ -14,7 +17,11 @@ export const getAllModels = () => {
asset: [], asset: [],
outline: [], outline: [],
backlink: [], backlink: [],
search: [] search: [],
inbox: [],
files: [],
bookmark: [],
tag: []
}; };
const getTabs = (layout: Layout) => { const getTabs = (layout: Layout) => {
for (let i = 0; i < layout.children.length; i++) { for (let i = 0; i < layout.children.length; i++) {
@ -33,6 +40,12 @@ export const getAllModels = () => {
models.asset.push(model); models.asset.push(model);
} else if (model instanceof Search) { } else if (model instanceof Search) {
models.search.push(model); models.search.push(model);
} else if (model instanceof Files) {
models.files.push(model);
} else if (model instanceof Bookmark) {
models.bookmark.push(model);
} else if (model instanceof Tag) {
models.tag.push(model);
} }
} else { } else {
getTabs(item as Layout); getTabs(item as Layout);

View file

@ -651,6 +651,10 @@ declare interface IModels {
graph: import("../layout/dock/Graph").Graph[], graph: import("../layout/dock/Graph").Graph[],
outline: import("../layout/dock/Outline").Outline[] outline: import("../layout/dock/Outline").Outline[]
backlink: import("../layout/dock/Backlink").Backlink[] backlink: import("../layout/dock/Backlink").Backlink[]
inbox: import("../layout/dock/Inbox").Inbox[]
files: import("../layout/dock/Files").Files[]
bookmark: import("../layout/dock/Bookmark").Bookmark[]
tag: import("../layout/dock/Tag").Tag[]
asset: import("../asset").Asset[] asset: import("../asset").Asset[]
search: import("../search").Search[] search: import("../search").Search[]
} }