From e45cbe6cc74c911d59cdbb6a5b4a25fbee45e05f Mon Sep 17 00:00:00 2001 From: huojl Date: Thu, 7 May 2026 10:29:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E8=87=B31.1.0=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=8C=85=E5=90=AB?= =?UTF-8?q?=E8=BD=AC=E5=BD=95=E5=86=85=E5=AE=B9=E9=80=89=E9=A1=B9=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=90=8C=E6=AD=A5=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifest.json | 2 +- package.json | 2 +- release/obsidian-plugin.html | 21 +++++++++++++++++---- release/sonicnote-sync-v1.1.0.zip | Bin 0 -> 5000 bytes release/sonicnote-sync.zip | Bin 4936 -> 0 bytes src/formatter.ts | 21 +++++++++------------ src/settings.ts | 11 +++++++++++ src/sync.ts | 19 ++++++++++--------- src/types.ts | 2 ++ versions.json | 3 ++- 10 files changed, 53 insertions(+), 28 deletions(-) create mode 100644 release/sonicnote-sync-v1.1.0.zip delete mode 100644 release/sonicnote-sync.zip diff --git a/manifest.json b/manifest.json index 645157d..183a99c 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "sonicnote-sync", "name": "SonicNote Sync", - "version": "1.0.0", + "version": "1.1.0", "minAppVersion": "0.15.0", "description": "Sync recordings from SonicNote to Obsidian as Markdown files", "author": "EasyLinkIn", diff --git a/package.json b/package.json index e33087a..31ea199 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sonicnote-sync", - "version": "1.0.0", + "version": "1.1.0", "description": "Sync recordings from SonicNote to Obsidian as Markdown files", "main": "main.js", "scripts": { diff --git a/release/obsidian-plugin.html b/release/obsidian-plugin.html index 86db441..4cac3a0 100644 --- a/release/obsidian-plugin.html +++ b/release/obsidian-plugin.html @@ -133,10 +133,10 @@
-
v1.0.0
+
v1.1.0

SonicNote Sync

将 SonicNote 妙记的录音、转录、总结同步到 Obsidian,以 Markdown 文件管理。

- + 下载插件 @@ -144,6 +144,18 @@
+
+

更新记录

+

v1.1.0

+
    +
  • 修复录音进行中重复创建文件的问题
  • +
  • AI 总结移至转录内容之前,优先阅读
  • +
  • 新增"包含转录内容"开关,可按需关闭
  • +
  • 文件名去除日期前缀,直接使用录音原始名称
  • +
  • 切换为 HTTPS 接口
  • +
+
+

前置要求

    @@ -155,7 +167,7 @@

    安装

      -
    1. 点击上方按钮下载 sonicnote-sync.zip
    2. +
    3. 点击上方按钮下载 sonicnote-sync-v1.1.0.zip
    4. 解压 zip 文件,得到以下文件:
      • main.js
      • @@ -204,8 +216,8 @@ Frontmatter录音元数据(ID、时间、时长、设备名、标签等) 笔记你在 App 中手写的笔记内容 - 转录内容AI 转写文本(含说话人、时间戳) AI 总结智能总结内容(要点、行动项等) + 转录内容AI 转写文本(含说话人、时间戳,可在设置中关闭)
    @@ -216,6 +228,7 @@ 设置默认值说明 同步文件夹SonicNoteSyncMarkdown 文件存放目录 + 包含转录内容开启关闭后同步文件中不包含逐字转录
diff --git a/release/sonicnote-sync-v1.1.0.zip b/release/sonicnote-sync-v1.1.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..9cf92859f6676dc3329e40fe41a70dfc7807ad53 GIT binary patch literal 5000 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 XKRwdb#Krs18_wUT_?zP?{&V^-W@sj5 diff --git a/src/formatter.ts b/src/formatter.ts index 8101b8a..22242c9 100644 --- a/src/formatter.ts +++ b/src/formatter.ts @@ -11,10 +11,7 @@ export function sanitizeFileName(name: string): string { export function formatFileName(recording: Recording): string { const displayName = recording.recordNickName || recording.recordName || '未命名录音'; - const date = recording.recordTime - ? recording.recordTime.substring(0, 10) - : new Date().toISOString().substring(0, 10); - return `${date}-${sanitizeFileName(displayName)}`; + return sanitizeFileName(displayName); } function formatDuration(seconds: string | number): string { @@ -96,6 +93,14 @@ export function toMarkdown( parts.push(''); } + // Summary section (before transcript) + if (summary && summary.summaryContent) { + parts.push('## AI 总结'); + parts.push(''); + parts.push(summary.summaryContent.trim()); + parts.push(''); + } + // Transcript section if (transcript && transcript.length > 0) { parts.push('## 转录内容'); @@ -104,13 +109,5 @@ export function toMarkdown( parts.push(''); } - // Summary section - if (summary && summary.summaryContent) { - parts.push('## AI 总结'); - parts.push(''); - parts.push(summary.summaryContent.trim()); - parts.push(''); - } - return parts.join('\n'); } diff --git a/src/settings.ts b/src/settings.ts index d625f74..102cd68 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -39,6 +39,17 @@ export class SonicNoteSettingTab extends PluginSettingTab { await this.saveSettings(); })); + // Include transcript + new Setting(containerEl) + .setName('包含转录内容') + .setDesc('关闭后同步的文件中不包含逐字转录内容') + .addToggle(toggle => toggle + .setValue(settings.includeTranscript) + .onChange(async (value) => { + settings.includeTranscript = value; + await this.saveSettings(); + })); + // Login status & actions const loginSection = containerEl.createDiv(); loginSection.createEl('h3', { text: '账号' }); diff --git a/src/sync.ts b/src/sync.ts index 5c9356b..49d6bda 100644 --- a/src/sync.ts +++ b/src/sync.ts @@ -116,20 +116,20 @@ export class SyncService { private async processRecording(recording: Recording, localIndex: Map, settings: SonicNotePluginSettings): Promise { const syncTime = new Date().toISOString(); - // Check if we need to update const local = localIndex.get(recording.audioId); - if (local && local.syncTime && recording.updateTime) { - if (recording.updateTime <= local.syncTime) { - // No update needed + + // Found existing file for this audioId — update it + if (local && local.path) { + // Skip if no update needed (has updateTime and it's older than syncTime) + if (local.syncTime && recording.updateTime && recording.updateTime <= local.syncTime) { return; } - // Check for conflict (user edited file locally after sync) const file = this.app.vault.getAbstractFileByPath(local.path); if (file instanceof TFile) { + // Check for conflict (user edited file locally after sync) const fileMtime = new Date(file.stat.mtime).toISOString(); - if (fileMtime > local.syncTime) { - // Conflict — write to a new file instead + if (local.syncTime && fileMtime > local.syncTime) { await this.writeRecordingToNewFile(recording, syncTime, settings, local.path); return; } @@ -172,11 +172,12 @@ export class SyncService { } private async buildRecordingContent(recording: Recording, syncTime: string): Promise { + const settings = this.getSettings(); const tasks: [string, Promise][] = []; - // Fetch transcript if available (status 2 = completed) + // Fetch transcript if enabled and available (status 2 = completed) let transcript: TranscriptSegment[] | null = null; - if (recording.transcriptStatus === 2) { + if (settings.includeTranscript && recording.transcriptStatus === 2) { tasks.push(['transcript', this.api.fetchTranscriptResult(recording.audioId).catch(() => null)]); } diff --git a/src/types.ts b/src/types.ts index bd4e727..4035b32 100644 --- a/src/types.ts +++ b/src/types.ts @@ -4,6 +4,7 @@ export interface SonicNotePluginSettings { serverUrl: string; syncFolder: string; pageSize: number; + includeTranscript: boolean; token: string; phoneNumber: string; lastSyncTime: string; @@ -13,6 +14,7 @@ export const DEFAULT_SETTINGS: SonicNotePluginSettings = { serverUrl: 'https://ainote.easylinkin.com:18048/prod-api', syncFolder: 'SonicNoteSync', pageSize: 50, + includeTranscript: true, token: '', phoneNumber: '', lastSyncTime: '', diff --git a/versions.json b/versions.json index af9a39e..4cf9870 100644 --- a/versions.json +++ b/versions.json @@ -1,3 +1,4 @@ { - "1.0.0": "0.15.0" + "1.0.0": "0.15.0", + "1.1.0": "0.15.0" }