-
Notifications
You must be signed in to change notification settings - Fork 184
Expand file tree
/
Copy pathpluginRuntime.ts
More file actions
103 lines (90 loc) · 3.61 KB
/
Copy pathpluginRuntime.ts
File metadata and controls
103 lines (90 loc) · 3.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import type TaskNotesPlugin from "../main";
import type { EventRef } from "obsidian";
import { TaskNotesSettingTab } from "../settings/TaskNotesSettingTab";
import { perfMonitor } from "../utils/PerformanceMonitor";
import { registerCliHandlers } from "../cli/registerCliHandlers";
import { TranslatedCommandRegistry } from "../commands/TranslatedCommandRegistry";
import { WorkspaceNavigationService } from "../ui/WorkspaceNavigationService";
import { TaskActionCoordinator } from "../ui/TaskActionCoordinator";
import { SettingsLifecycleService } from "../services/SettingsLifecycleService";
import { unregisterBasesViews } from "../bases/registration";
import {
initializeCoreServices,
registerRibbonIcons,
registerTaskNotesIcon,
} from "./pluginBootstrap";
import { createTaskNotesLogger } from "../utils/tasknotesLogger";
const tasknotesLogger = createTaskNotesLogger({ tag: "Bootstrap/PluginRuntime" });
export async function initializePluginRuntime(plugin: TaskNotesPlugin): Promise<void> {
registerTaskNotesIcon();
await initializeCoreServices(plugin);
plugin.workspaceNavigationService = new WorkspaceNavigationService(plugin);
plugin.taskActionCoordinator = new TaskActionCoordinator(plugin);
plugin.settingsLifecycleService = new SettingsLifecycleService(plugin);
plugin.commandRegistry = new TranslatedCommandRegistry(plugin);
plugin.settingsLifecycleService.captureCurrentSettings();
registerRibbonIcons(plugin);
plugin.commandRegistry.register();
registerCliHandlers(plugin);
plugin.addSettingTab(new TaskNotesSettingTab(plugin.app, plugin));
}
export async function cleanupPluginRuntime(plugin: TaskNotesPlugin): Promise<void> {
if (plugin.settings?.enableBases) {
try {
unregisterBasesViews(plugin);
plugin.basesRegistered = false;
} catch (error) {
tasknotesLogger.debug("[TaskNotes][Bases] Unregistration failed:", {
category: "internal",
operation: "unregistration",
error: error,
});
}
}
const cacheStats = perfMonitor.getStats("cache-initialization");
if (cacheStats && cacheStats.count > 0) {
perfMonitor.logSummary();
}
plugin.pomodoroService?.cleanup();
plugin.filterService?.cleanup();
plugin.viewPerformanceService?.destroy();
if (plugin.taskCardReadingModeCleanup) {
plugin.taskCardReadingModeCleanup();
plugin.taskCardReadingModeCleanup = null;
}
if (plugin.relationshipsReadingModeCleanup) {
plugin.relationshipsReadingModeCleanup();
plugin.relationshipsReadingModeCleanup = null;
}
plugin.autoArchiveService?.stop();
plugin.icsSubscriptionService?.destroy();
plugin.autoExportService?.destroy();
plugin.taskLinkDetectionService?.cleanup();
plugin.dragDropManager?.destroy();
void plugin.apiService?.stop();
void plugin.oauthService?.destroy();
plugin.taskFileLifecycleReconciliationService?.destroy();
plugin.taskCalendarSyncService?.destroy();
plugin.timeblockCalendarSyncService?.destroy();
plugin.googleCalendarService?.destroy();
plugin.microsoftCalendarService?.destroy();
plugin.calendarProviderRegistry?.destroyAll();
plugin.viewStateManager?.cleanup();
plugin.statusBarService?.destroy();
plugin.notificationService?.destroy();
plugin.projectSubtasksService?.destroy();
plugin.cacheManager?.destroy();
plugin.dependencyCache?.destroy();
plugin.requestDeduplicator?.cancelAll();
plugin.domReconciler?.destroy();
plugin.uiStateManager?.destroy();
plugin.settingsLifecycleService?.destroy();
plugin.performanceProfiler?.destroy();
if (typeof perfMonitor !== "undefined") {
perfMonitor.destroy();
}
if (plugin.taskUpdateListenerForEditor) {
plugin.emitter.offref(plugin.taskUpdateListenerForEditor as EventRef);
}
plugin.initializationComplete = false;
}