diff --git a/manifest.json b/manifest.json index e199b80..0964ffa 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "sonicnote-sync", "name": "SonicNote Sync", - "version": "1.1.5", + "version": "1.1.6", "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 daaa4d5..5b14aa1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sonicnote-sync", - "version": "1.1.5", + "version": "1.1.6", "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 5189cfe..2187820 100644 --- a/release/obsidian-plugin.html +++ b/release/obsidian-plugin.html @@ -343,7 +343,7 @@
- v1.1.5 + v1.1.6 Obsidian 插件 2 个 Skills 视频教程 @@ -351,7 +351,7 @@

SonicNote for Obsidian

录音同步、待办提取、工作总结 — 让 Obsidian 成为你的智能笔记中心

- + SonicNote Sync 插件 @@ -407,6 +407,10 @@

更新记录

+

v1.1.6

+
    +
  • 登录方式从手机号+验证码切换为 API Key(在妙记 App → 我的 → API Key 管理中创建)
  • +

v1.1.5

  • 新增学习总结同步:自动同步知识全景图、核心收获和课后巩固内容
  • @@ -447,7 +451,7 @@

    安装

      -
    1. 点击上方按钮下载 sonicnote-sync-v1.1.5.zip
    2. +
    3. 点击上方按钮下载 sonicnote-sync-v1.1.6.zip
    4. 解压 zip 文件,得到以下文件:
      • main.js
      • @@ -476,7 +480,7 @@
        1. 进入 设置 → SonicNote Sync
        2. 点击"登录"按钮
        3. -
        4. 输入 SonicNote 妙记的手机号和密码(使用 APP 验证码或申领长期密码)
        5. +
        6. 输入 API Key(在妙记 App → 我的 → API Key 管理中创建,格式:sk-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

        同步录音

        diff --git a/release/sonicnote-sync-1.1.6.zip b/release/sonicnote-sync-1.1.6.zip new file mode 100644 index 0000000..ecb818c Binary files /dev/null and b/release/sonicnote-sync-1.1.6.zip differ diff --git a/src/api.ts b/src/api.ts index 33d8185..3cc78a7 100644 --- a/src/api.ts +++ b/src/api.ts @@ -52,9 +52,9 @@ export class SonicNoteApiClient { } } - async login(phone: string, code: string): Promise<{ token: string; userId: string }> { - const res = await this.request('POST', '/app/user/loginByPhone', { - body: { phonenumber: phone, code: code }, + async login(apiKey: string): Promise<{ token: string; userId: string }> { + const res = await this.request('POST', '/app/mcp/login', { + body: { apiKey }, }); if (res.code !== 200) { throw new Error(res.msg || '登录失败'); diff --git a/src/main.ts b/src/main.ts index a36088b..ecbb096 100644 --- a/src/main.ts +++ b/src/main.ts @@ -56,7 +56,7 @@ export default class SonicNoteSyncPlugin extends Plugin { name: '登出', callback: async () => { this.settings.token = ''; - this.settings.phoneNumber = ''; + this.settings.apiKey = ''; await this.saveSettings(); new Notice('已登出 SonicNote'); this.updateStatusBar(); diff --git a/src/settings.ts b/src/settings.ts index 247b5a8..774c79d 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -177,15 +177,18 @@ export class SonicNoteSettingTab extends PluginSettingTab { loginSection.createEl('h3', { text: '账号' }); if (this.api.isAuthenticated()) { + const maskedKey = settings.apiKey.length > 10 + ? settings.apiKey.slice(0, 10) + '...' + : settings.apiKey; new Setting(loginSection) .setName('登录状态') - .setDesc(`已登录: ${settings.phoneNumber}`) + .setDesc(`已登录: ${maskedKey}`) .addButton(btn => btn .setButtonText('登出') .setWarning() .onClick(async () => { settings.token = ''; - settings.phoneNumber = ''; + settings.apiKey = ''; await this.saveSettings(); new Notice('已登出'); this.display(); @@ -193,7 +196,7 @@ export class SonicNoteSettingTab extends PluginSettingTab { } else { new Setting(loginSection) .setName('登录') - .setDesc('使用手机号和验证码登录智音笔记') + .setDesc('使用 API Key 登录 SonicNote') .addButton(btn => btn .setButtonText('登录') .onClick(() => { @@ -229,38 +232,34 @@ class LoginModal extends Modal { contentEl.createEl('h2', { text: '登录 SonicNote' }); - let phone = ''; - let code = ''; + let apiKey = ''; new Setting(contentEl) - .setName('手机号') - .addText(text => text - .setPlaceholder('请输入手机号') - .onChange((value) => { phone = value; })); - - new Setting(contentEl) - .setName('密码') - .setDesc('使用 APP 验证码或者申领长期密码') - .addText(text => text - .setPlaceholder('请输入密码') - .onChange((value) => { code = value; })); + .setName('API Key') + .setDesc('在妙记 App → 我的 → API Key 管理中创建') + .addText(text => { + text + .setPlaceholder('sk-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx') + .onChange((value) => { apiKey = value; }); + text.inputEl.type = 'password'; + }); new Setting(contentEl) .addButton(btn => btn .setButtonText('登录') .setCta() .onClick(async () => { - if (!phone || !code) { - new Notice('请输入手机号和密码'); + if (!apiKey) { + new Notice('请输入 API Key'); return; } try { btn.setButtonText('登录中...'); btn.setDisabled(true); - const result = await this.api.login(phone, code); + const result = await this.api.login(apiKey); const settings = this.getSettings(); settings.token = result.token; - settings.phoneNumber = phone; + settings.apiKey = apiKey; await this.saveSettings(); new Notice('登录成功'); this.close(); diff --git a/src/types.ts b/src/types.ts index 39575fb..f468abd 100644 --- a/src/types.ts +++ b/src/types.ts @@ -15,7 +15,7 @@ export interface SonicNotePluginSettings { frontmatterFields: Record; customFrontmatter: CustomFrontmatterField[]; token: string; - phoneNumber: string; + apiKey: string; lastSyncTime: string; } @@ -53,7 +53,7 @@ export const DEFAULT_SETTINGS: SonicNotePluginSettings = { }, customFrontmatter: [], token: '', - phoneNumber: '', + apiKey: '', lastSyncTime: '', };