diff --git a/src/lang/locale/en.ts b/src/lang/locale/en.ts index 8306035..aaa3877 100644 --- a/src/lang/locale/en.ts +++ b/src/lang/locale/en.ts @@ -4,6 +4,9 @@ export const en = { databaseNext: "NotionNext", databaseGeneral: "General", databaseCustom: "Custom", + databaseFullName: "Database Full Name", + databaseFullNameDesc: "Please give a full name for your database", + databaseFullNameText: "Enter your database full name", databaseAbbreviateName: "Database Abbreviate Name", databaseAbbreviateNameDesc: "Please give a nick name for your database", databaseAbbreviateNameText: "Enter your database nick name", diff --git a/src/lang/locale/ja.ts b/src/lang/locale/ja.ts index 34e64b4..ac48ae5 100644 --- a/src/lang/locale/ja.ts +++ b/src/lang/locale/ja.ts @@ -4,6 +4,9 @@ export const ja = { databaseNext: "NotionNext", databaseGeneral: "一般的なNotion", databaseCustom: "カスタム", + databaseFullName: "データベースの全称", + databaseFullNameDesc: "データベースの全称を入力してください", + databaseFullNameText: "データベースの全称を入力", databaseAbbreviateName: "データベースの略称", databaseAbbreviateNameDesc: "データベースの略称を入力してください", databaseAbbreviateNameText: "データベースの略称を入力", diff --git a/src/lang/locale/zh.ts b/src/lang/locale/zh.ts index 5198943..d049627 100644 --- a/src/lang/locale/zh.ts +++ b/src/lang/locale/zh.ts @@ -4,6 +4,9 @@ export const zh = { databaseNext: "NotionNext", databaseGeneral: "普通", databaseCustom: "自定义", + databaseFullName: "数据库全称", + databaseFullNameDesc: "给你的数据库起一个全称", + databaseFullNameText: "输入你的数据库全称", databaseAbbreviateName: "数据库简称", databaseAbbreviateNameDesc: "给你的数据库起一个简称", databaseAbbreviateNameText: "输入你的数据库简称", diff --git a/src/main.ts b/src/main.ts index 8263f0c..21805bc 100644 --- a/src/main.ts +++ b/src/main.ts @@ -64,6 +64,23 @@ export default class ObsidianSyncNotionPlugin extends Plugin { await this.saveSettings(); } + async deleteDatabaseDetails(dbDetails: DatabaseDetails) { + delete this.settings.databaseDetails[dbDetails.abName]; + + await this.saveSettings(); + } + + async updateDatabaseDetails(dbDetails: DatabaseDetails) { + // delete the old database details + delete this.settings.databaseDetails[dbDetails.abName]; + + this.settings.databaseDetails = { + ...this.settings.databaseDetails, + [dbDetails.abName]: dbDetails, + }; + + await this.saveSettings(); + } } diff --git a/src/ui/settingModal.ts b/src/ui/settingModal.ts index d16e3c4..42e4a1c 100644 --- a/src/ui/settingModal.ts +++ b/src/ui/settingModal.ts @@ -15,6 +15,7 @@ import {SettingGeneralTabs} from "./settingGeneralTabs"; export class SettingModal extends Modal { data: Record = { databaseFormat: 'none', + databaseFullName: '', databaseAbbreviateName: '', notionAPI: '', databaseID: '', @@ -33,6 +34,7 @@ export class SettingModal extends Modal { this.settingTab = settingTab; if (dbDetails) { this.data.databaseFormat = dbDetails.format; + this.data.databaseFullName = dbDetails.fullName; this.data.databaseAbbreviateName = dbDetails.abName; this.data.notionAPI = dbDetails.notionAPI; this.data.databaseID = dbDetails.databaseID; @@ -110,6 +112,9 @@ export class SettingModal extends Modal { if (value === 'general') { nextTabs.createEl('h3', { text: i18nConfig.NotionGeneralSettingHeader }); + // add full name + this.createSettingEl(nextTabs, i18nConfig.databaseFullName, i18nConfig.databaseFullNameDesc, 'text', i18nConfig.databaseFullNameText, this.data.databaseFullName, 'databaseFullName') + // add abbreviate name this.createSettingEl(nextTabs, i18nConfig.databaseAbbreviateName, i18nConfig.databaseAbbreviateNameDesc, 'text', i18nConfig.databaseAbbreviateNameText, this.data.databaseAbbreviateName, 'databaseAbbreviateName') @@ -128,6 +133,9 @@ export class SettingModal extends Modal { nextTabs.createEl('h3', { text: i18nConfig.NotionNextSettingHeader }); + // add full name + this.createSettingEl(nextTabs, i18nConfig.databaseFullName, i18nConfig.databaseFullNameDesc, 'text', i18nConfig.databaseFullNameText, this.data.databaseFullName, 'databaseFullName') + // add abbreviate name this.createSettingEl(nextTabs, i18nConfig.databaseAbbreviateName, i18nConfig.databaseAbbreviateNameDesc, 'text', i18nConfig.databaseAbbreviateNameText, this.data.databaseAbbreviateName, 'databaseAbbreviateName') @@ -141,6 +149,9 @@ export class SettingModal extends Modal { } else if (value === 'custom') { nextTabs.createEl('h3', { text: i18nConfig.NotionCustomSettingHeader}); + // add full name + this.createSettingEl(nextTabs, i18nConfig.databaseFullName, i18nConfig.databaseFullNameDesc, 'text', i18nConfig.databaseFullNameText, this.data.databaseFullName, 'databaseFullName') + // add abbreviate name this.createSettingEl(nextTabs, i18nConfig.databaseAbbreviateName, i18nConfig.databaseAbbreviateNameDesc, 'text', i18nConfig.databaseAbbreviateNameText, this.data.databaseAbbreviateName, 'databaseAbbreviateName') diff --git a/src/ui/settingTabs.ts b/src/ui/settingTabs.ts index 96959d8..8800a42 100644 --- a/src/ui/settingTabs.ts +++ b/src/ui/settingTabs.ts @@ -4,6 +4,7 @@ import ObsidianSyncNotionPlugin from "../main"; import {SettingModal} from "./settingModal"; import {SettingNextTabs} from "./settingNextTabs"; import {SettingGeneralTabs} from "./settingGeneralTabs"; +import {set} from "yaml/dist/schema/yaml-1.1/set"; export interface PluginSettings { NextButton: boolean; @@ -28,6 +29,7 @@ export interface PluginSettings { export interface DatabaseDetails { format: string; + fullName: string; abName: string; notionAPI: string; databaseID: string; @@ -60,6 +62,7 @@ export const DEFAULT_SETTINGS: PluginSettings = { export class ObsidianSettingTab extends PluginSettingTab { plugin: ObsidianSyncNotionPlugin; + databaseEl: HTMLDivElement; constructor(app: App, plugin: ObsidianSyncNotionPlugin) { super(app, plugin); @@ -96,6 +99,7 @@ export class ObsidianSettingTab extends PluginSettingTab { if (modal.data.saved) { const dbDetails = { format: modal.data.databaseFormat, + fullName: modal.data.databaseFullName, abName: modal.data.databaseAbbreviateName, notionAPI: modal.data.notionAPI, databaseID: modal.data.databaseID, @@ -117,8 +121,14 @@ export class ObsidianSettingTab extends PluginSettingTab { }); }); + // new section to display all created database + containerEl.createEl('h2', {text: "Database List"}); + this.databaseEl = containerEl.createDiv('database-list'); // list all created database + this.showDatabase(); + + @@ -212,4 +222,70 @@ export class ObsidianSettingTab extends PluginSettingTab { } } + // function to show all the database details + showDatabase() { + this.databaseEl.empty(); + + for (let key in this.plugin.settings.databaseDetails) { + let dbDetails = this.plugin.settings.databaseDetails[key]; + + const databaseDiv = this.databaseEl.createDiv('database-div'); + + let settingEl = new Setting(databaseDiv) + .setName(`${dbDetails.fullName} (${dbDetails.abName})`) + .setDesc(dbDetails.format) + + // settingEl + // .addButton((button: ButtonComponent): ButtonComponent => { + // return button + // .setTooltip("Edit Database") + // .setIcon("pencil") + // .onClick(async () => { + // let modal = new SettingModal(this.app, this.plugin, this, dbDetails); + // + // modal.onClose = () => { + // if (modal.data.saved) { + // const dbDetails = { + // format: modal.data.databaseFormat, + // fullName: modal.data.databaseFullName, + // abName: modal.data.databaseAbbreviateName, + // notionAPI: modal.data.notionAPI, + // databaseID: modal.data.databaseID, + // tagButton: modal.data.tagButton, + // customTitleButton: modal.data.customTitleButton, + // customTitleName: modal.data.customTitleName, + // // customValues: modal.data.customValues, + // } + // + // this.plugin.updateDatabaseDetails(dbDetails); + // + // this.plugin.commands.updateCommand(); + // + // this.display() + // } + // } + // + // modal.open(); + // }); + // }); + + settingEl + .addButton((button: ButtonComponent): ButtonComponent => { + return button + .setTooltip("Delete Database") + .setIcon("trash") + .onClick(async () => { + await this.plugin.deleteDatabaseDetails(dbDetails); + + await this.plugin.commands.updateCommand(); + + this.display() + }); + }); + } + } } +function addExtraButton(arg0: (button: ButtonComponent) => ButtonComponent): any { + throw new Error("Function not implemented."); +} + diff --git a/src/upload/updateYaml.ts b/src/upload/updateYaml.ts index 5e90a85..2a91687 100644 --- a/src/upload/updateYaml.ts +++ b/src/upload/updateYaml.ts @@ -1,6 +1,6 @@ import { App, Notice, TFile } from "obsidian"; import ObsidianSyncNotionPlugin from "../main"; -import { PluginSettings } from "../ui/settingTabs"; +import {DatabaseDetails, PluginSettings} from "../ui/settingTabs"; export async function updateYamlInfo( yamlContent: string, @@ -8,10 +8,14 @@ export async function updateYamlInfo( res: any, app: App, plugin: ObsidianSyncNotionPlugin, + dbDetails: DatabaseDetails, ) { let { url, id } = res.json // replace www to notionID const { notionUser } = plugin.settings; + const { abName } = dbDetails + const notionIDKey = `NotionID-${abName}`; + const linkKey = `link-${abName}`; if (notionUser !== "") { // replace url str "www" to notionID @@ -19,15 +23,15 @@ export async function updateYamlInfo( } await app.fileManager.processFrontMatter(nowFile, yamlContent => { - if (yamlContent['notionID']) { - delete yamlContent['notionID'] + if (yamlContent[notionIDKey]) { + delete yamlContent[notionIDKey] } - if (yamlContent['link']) { - delete yamlContent['link'] + if (yamlContent[linkKey]) { + delete yamlContent[linkKey] } // add new notionID and link - yamlContent.notionID = id; - yamlContent.link = url; + yamlContent[notionIDKey] = id; + yamlContent[linkKey] = url; }); try { diff --git a/src/upload/uploadCommand.ts b/src/upload/uploadCommand.ts index 58ed18e..06b9b45 100644 --- a/src/upload/uploadCommand.ts +++ b/src/upload/uploadCommand.ts @@ -57,7 +57,7 @@ export async function uploadCommandGeneral( app: App, ) { - const { notionAPI, databaseID } = settings; + const { notionAPI, databaseID } = dbDetails; // Check if the user has set up the Notion API and database ID if (notionAPI === "" || databaseID === "") { diff --git a/src/upload/upload_next/Upload2NotionNext.ts b/src/upload/upload_next/Upload2NotionNext.ts index a1e0d2f..1558441 100644 --- a/src/upload/upload_next/Upload2NotionNext.ts +++ b/src/upload/upload_next/Upload2NotionNext.ts @@ -15,6 +15,7 @@ export class Upload2NotionNext extends UploadBaseNext { constructor(plugin: MyPlugin, dbDetails: DatabaseDetails) { super(plugin); + this.dbDetails = dbDetails } // 因为需要解析notion的block进行对比,非常的麻烦, @@ -280,7 +281,7 @@ export class Upload2NotionNext extends UploadBaseNext { ); } if (res.status === 200) { - await updateYamlInfo(markdown, nowFile, res, app, this.plugin) + await updateYamlInfo(markdown, nowFile, res, app, this.plugin, this.dbDetails) } else { new Notice(`${res.text}`) }