obsidian-limitless-plugin/main.ts

63 lines
1.4 KiB
TypeScript

import { Plugin } from "obsidian";
import {
DEFAULT_SETTINGS,
LimitlessPluginSettings,
LimitlessSettingTab,
} from "./settings.ts";
import { createActor } from "xstate";
import { pluginActor } from "./actors/plugin.ts";
export default class LimitlessPlugin extends Plugin {
settings!: LimitlessPluginSettings;
override async onload() {
await this.loadSettings();
this.addSettingTab(new LimitlessSettingTab(this.app, this));
const readyActor = pluginActor.provide({
actions: {
persistLatestLog: async (_, params) => {
this.settings.latestLog = params.endDate.toISOString();
await this.saveSettings();
},
},
});
const actor = createActor(readyActor, {
input: {
...this.settings,
vault: this.app.vault,
},
});
actor.subscribe((snapshot) => {
console.log(snapshot.value);
});
actor.start();
this.addCommand({
id: "limitless-lifelogs-sync",
name: "Sync Lifelogs Now",
callback: () => {
actor.send({ type: "lifelogs::sync" });
},
});
if (this.settings.syncAtStart) {
actor.send({ type: "lifelogs::sync" });
}
}
override onunload() {
}
async loadSettings() {
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
}
async saveSettings() {
await this.saveData(this.settings);
}
}