update at 2025-10-16 16:10:58

This commit is contained in:
douboer
2025-10-16 16:10:58 +08:00
parent 9f3a4e8812
commit 28942bea17
17 changed files with 1843 additions and 23 deletions

View File

@@ -21,6 +21,10 @@ import { NMPSettings } from './settings';
import AssetsManager from './assets';
import { waitForLayoutReady, uevent } from './utils';
import { LocalFile } from './markdown/local-file';
import { ErrorHandler } from './core/error-handler';
import { ProgressIndicator } from './core/progress-indicator';
import { ConfigManager } from './core/config-manager';
import { ContentProcessor } from './core/content-processor';
export const VIEW_TYPE_NOTE_PREVIEW = 'note-preview';
@@ -101,31 +105,47 @@ export class PreviewView extends ItemView {
*/
async onOpen(): Promise<void> {
console.log('[PreviewView] 视图打开 layoutReady=', this.app.workspace.layoutReady);
// 不在未完成 layoutReady 时做重初始化,改为延迟
if (!this.app.workspace.layoutReady) {
this.showLoading();
console.log('[PreviewView] defer initialization until layoutReady');
this.app.workspace.onLayoutReady(() => {
// 使用微任务再推进,确保其它插件也完成
setTimeout(() => this.performInitialization(), 0);
});
return;
const progress = new ProgressIndicator();
progress.start('初始化预览视图');
try {
// 不在未完成 layoutReady 时做重初始化,改为延迟
if (!this.app.workspace.layoutReady) {
this.showLoading();
console.log('[PreviewView] defer initialization until layoutReady');
this.app.workspace.onLayoutReady(() => {
// 使用微任务再推进,确保其它插件也完成
setTimeout(() => this.performInitialization(), 0);
});
return;
}
await this.performInitialization();
progress.finish('预览视图初始化完成');
} catch (error) {
progress.error('预览视图初始化失败');
ErrorHandler.handle(error as Error, 'PreviewView.onOpen');
}
await this.performInitialization();
}
private async performInitialization(): Promise<void> {
const progress = new ProgressIndicator();
try {
const start = performance.now();
this.showLoading();
progress.update('初始化设置');
console.time('[PreviewView] initializeSettings');
await this.initializeSettings();
console.timeEnd('[PreviewView] initializeSettings');
progress.update('创建管理器');
console.time('[PreviewView] createManager');
await this.createManager();
console.timeEnd('[PreviewView] createManager');
progress.update('注册事件监听器');
console.time('[PreviewView] registerEventListeners');
this.registerEventListeners();
console.timeEnd('[PreviewView] registerEventListeners');
@@ -142,16 +162,13 @@ export class PreviewView extends ItemView {
}
console.log('[PreviewView] 初始化耗时(ms):', (performance.now() - start).toFixed(1));
progress.finish('视图初始化完成');
uevent('open');
} catch (error) {
console.error('[PreviewView] 初始化失败:', error);
new Notice('预览视图初始化失败: ' + (error instanceof Error ? error.message : String(error)));
const container = this.containerEl.children[1] as HTMLElement;
container.empty();
const errorDiv = container.createDiv({ cls: 'preview-error' });
errorDiv.createEl('h3', { text: '预览视图初始化失败' });
errorDiv.createEl('p', { text: error instanceof Error ? error.message : String(error) });
errorDiv.createEl('p', { text: '请尝试重新加载插件或查看控制台获取更多信息' });
progress.error('视图初始化失败');
ErrorHandler.handle(error as Error, 'PreviewView.performInitialization');
console.error('[PreviewView] 初始化失败', error);
this.showError('预览视图初始化失败,请检查插件设置');
}
}
@@ -331,6 +348,18 @@ export class PreviewView extends ItemView {
}
}
/**
* 显示错误信息
*/
private showError(message: string): void {
const container = this.containerEl.children[1] as HTMLElement;
container.empty();
const errorDiv = container.createDiv({ cls: 'preview-error' });
errorDiv.createEl('h3', { text: '预览视图错误' });
errorDiv.createEl('p', { text: message });
errorDiv.createEl('p', { text: '请尝试重新加载插件或查看控制台获取更多信息' });
}
/** 外部接口:切换平台 */
async changePlatform(platform: 'wechat' | 'xiaohongshu') {
await this.manager?.switchPlatform(platform as any);