release: 1.7.1

This commit is contained in:
yan 2026-05-07 10:23:40 +08:00
parent eee0ac32d0
commit bef0ecbc87
6 changed files with 90 additions and 3 deletions

View file

@ -1,7 +1,7 @@
{
"id": "istart-note-ai",
"name": "IStart-Note-AI",
"version": "1.7.0",
"version": "1.7.1",
"minAppVersion": "1.4.0",
"description": "Generate structured knowledge notes from questions and selected text using DeepSeek AI, with automatic concept pages, bidirectional links, and a question graph.",
"author": "Yan",

View file

@ -1,6 +1,6 @@
{
"name": "istart-note-ai",
"version": "1.7.0",
"version": "1.7.1",
"description": "IStart-Note-AI: DeepSeek-powered knowledge graph plugin for Obsidian",
"main": "main.js",
"scripts": {

View file

@ -139,6 +139,14 @@ export class BaiduSyncService {
result.skipped = plans.length - uploadPlans.length;
await this.saveMeta(meta);
// 备份插件本身
if (this.config.backupPlugin) {
const pluginResult = await this.backupPlugin();
result.uploaded += pluginResult.uploaded;
result.failed += pluginResult.failed;
}
return result;
}
@ -387,6 +395,72 @@ export class BaiduSyncService {
return false;
}
/**
* main.js, manifest.json, styles.css, data.json
* {remotePath}/_plugin/
*/
async backupPlugin(): Promise<{ uploaded: number; failed: number }> {
if (!this.config.backupPlugin) return { uploaded: 0, failed: 0 };
const pluginDir = ".obsidian/plugins/istart-note-ai";
const filesToBackup = ["main.js", "manifest.json", "styles.css", "data.json"];
const remotePluginDir = `${this.config.remotePath}/_plugin`.replace(/\/+/g, "/");
await this.client.mkdir(remotePluginDir);
let uploaded = 0;
let failed = 0;
for (const fileName of filesToBackup) {
const localPath = `${pluginDir}/${fileName}`;
try {
const exists = await this.app.vault.adapter.exists(localPath);
if (!exists) continue;
const content = await this.app.vault.adapter.readBinary(localPath);
const remotePath = `${remotePluginDir}/${fileName}`;
const ok = await this.client.uploadFile(content, remotePath);
if (ok) uploaded++;
else failed++;
} catch {
// 文件不存在或读取失败,跳过
}
}
return { uploaded, failed };
}
/**
*
*/
async restorePlugin(): Promise<{ downloaded: number; failed: number }> {
const remotePluginDir = `${this.config.remotePath}/_plugin`.replace(/\/+/g, "/");
const pluginDir = ".obsidian/plugins/istart-note-ai";
// 确保本地插件目录存在
const dirExists = await this.app.vault.adapter.exists(pluginDir);
if (!dirExists) await this.app.vault.adapter.mkdir(pluginDir);
const remoteFiles = await this.client.listFiles(remotePluginDir);
let downloaded = 0;
let failed = 0;
for (const entry of remoteFiles) {
if (entry.isdir) continue;
try {
const content = await this.client.downloadFile(entry.path);
if (!content) { failed++; continue; }
const localPath = `${pluginDir}/${entry.server_filename}`;
await this.app.vault.adapter.writeBinary(localPath, content);
downloaded++;
} catch {
failed++;
}
}
return { downloaded, failed };
}
private async writeLocalFile(localPath: string, content: ArrayBuffer) {
const dir = localPath.substring(0, localPath.lastIndexOf("/"));
if (dir) {

View file

@ -190,6 +190,16 @@ export class DeepSeekSettingsTab extends PluginSettingTab {
})
);
new Setting(containerEl)
.setName("备份插件本身")
.setDesc("备份时包含插件文件main.js、配置等方便换设备恢复")
.addToggle((t) =>
t.setValue(this.plugin.settings.baiduSync.backupPlugin).onChange(async (v) => {
this.plugin.settings.baiduSync.backupPlugin = v;
await this.plugin.saveSettings();
})
);
new Setting(containerEl)
.setName("忽略规则")
.setDesc("正则表达式,匹配的文件路径将被跳过")

View file

@ -19,6 +19,7 @@ export interface BaiduSyncConfig {
tokenExpiresAt: string; // ISO 时间字符串
remotePath: string; // 远端备份根目录,如 /apps/istart-note-ai
autoBackup: boolean; // 每次生成笔记后自动备份
backupPlugin: boolean; // 备份时包含插件本身
ignorePattern: string; // 忽略规则(正则)
fileSizeLimitMB: number; // 单文件大小限制
}
@ -32,6 +33,7 @@ export const DEFAULT_BAIDU_SYNC_CONFIG: BaiduSyncConfig = {
tokenExpiresAt: "",
remotePath: "/apps/istart-note-ai",
autoBackup: false,
backupPlugin: false,
ignorePattern: "",
fileSizeLimitMB: 100,
};

View file

@ -10,5 +10,6 @@
"1.5.7": "1.4.0",
"1.6.0": "1.4.0",
"1.6.1": "1.4.0",
"1.7.0": "1.4.0"
"1.7.0": "1.4.0",
"1.7.1": "1.4.0"
}