diff --git a/src/commands/NotionCommands.ts b/src/commands/NotionCommands.ts index 4e5979e..1b8a767 100644 --- a/src/commands/NotionCommands.ts +++ b/src/commands/NotionCommands.ts @@ -1,7 +1,7 @@ import { i18nConfig } from "src/lang/I18n"; import {Editor, MarkdownView, setTooltip} from "obsidian"; import { FuzzySuggester, DatabaseList } from "./FuzzySuggester"; -import { uploadCommandGeneral, uploadCommandNext } from "../upload/uploadCommand"; +import {uploadCommandCustom, uploadCommandGeneral, uploadCommandNext} from "../upload/uploadCommand"; import ObsidianSyncNotionPlugin from "src/main"; import {DatabaseDetails} from "../ui/settingTabs"; @@ -94,11 +94,11 @@ export default class RibbonCommands { await uploadCommandGeneral(this.plugin, this.plugin.settings, dbDetails, this.plugin.app); }; } - // else if (dbDetails.format === 'custom') { - // editorCallback = async (editor, view) => { - // await uploadCommandGeneral(this.plugin, dbDetails, this.plugin.app); - // }; - // } + else if (dbDetails.format === 'custom') { + editorCallback = async (editor, view) => { + await uploadCommandCustom(this.plugin, this.plugin.settings, dbDetails, this.plugin.app); + }; + } this.Ncommand.push({ id: commandId, name: commandName, editorCallback }); } diff --git a/src/ui/CustomModal.ts b/src/ui/CustomModal.ts index 844034b..e3428d4 100644 --- a/src/ui/CustomModal.ts +++ b/src/ui/CustomModal.ts @@ -4,7 +4,7 @@ import {ObsidianSettingTab} from "./settingTabs"; export class CustomModal extends Modal { propertyLines: Setting[] = []; // Store all property line settings - properties: { customValue: string, customType: string }[] = []; // Array to store property values and types + properties: { customName: string, customType: string }[] = []; // Array to store property values and types plugin: ObsidianSyncNotionPlugin; settingTab: ObsidianSettingTab; @@ -14,19 +14,45 @@ export class CustomModal extends Modal { createPropertyLine(containerEl: HTMLElement): void { const propertyIndex = this.properties.length; - this.properties.push({customValue: "", customType: ""}); // Initialize with empty values + this.properties.push({customName: "", customType: ""}); // Initialize with empty values const propertyLine = new Setting(containerEl) + if (propertyIndex === 0) { + propertyLine + .setName("Title") + .setDesc("The title of the page, must be the first property") + + propertyLine.addText((text) => { + text + .setPlaceholder("Property name") + .setValue("") + .onChange(async (value) => { + this.properties[propertyIndex].customName = value; // Update the customValue of the specific property + }); + + } + ) + + propertyLine.addDropdown((dropdown) => { + dropdown + .addOption("title", "Title") + .setValue("") + .onChange(async (value) => { + this.properties[propertyIndex].customType = value; // Update the customType of the specific property + }); + } + ) + } else { propertyLine - .setName("Property " + (propertyIndex + 1)) + .setName("Property " + (propertyIndex)) propertyLine.addText((text) => { text .setPlaceholder("Property name") .setValue("") .onChange(async (value) => { - this.properties[propertyIndex].customValue = value; // Update the customValue of the specific property + this.properties[propertyIndex].customName = value; // Update the customValue of the specific property }); } ) @@ -70,7 +96,7 @@ export class CustomModal extends Modal { }); } ); - + } this.propertyLines.push(propertyLine); } diff --git a/src/ui/EditModal.ts b/src/ui/EditModal.ts index 80088ba..2e0cc44 100644 --- a/src/ui/EditModal.ts +++ b/src/ui/EditModal.ts @@ -235,9 +235,6 @@ export class EditModal extends SettingModal { // add database id this.createSettingEl(nextTabs, i18nConfig.DatabaseID, i18nConfig.NotionAPIDesc, 'password', i18nConfig.DatabaseIDText, this.dataTemp.databaseIDTemp, 'dataTemp', 'databaseIDTemp') - // add custom title name - this.createSettingEl(nextTabs, i18nConfig.NotionCustomTitleName, i18nConfig.NotionCustomTitleNameDesc, 'text', i18nConfig.NotionCustomTitleText, this.dataTemp.customTitleNameTemp, 'dataTemp', 'customTitleNameTemp') - // add new property button new Setting(nextTabs) .setName(i18nConfig.NotionCustomValues) diff --git a/src/ui/settingModal.ts b/src/ui/settingModal.ts index 8fdbf77..c526324 100644 --- a/src/ui/settingModal.ts +++ b/src/ui/settingModal.ts @@ -214,9 +214,6 @@ export class SettingModal extends Modal { // add database id this.createSettingEl(nextTabs, i18nConfig.DatabaseID, i18nConfig.NotionAPIDesc, 'password', i18nConfig.DatabaseIDText, this.data.databaseID, 'data', 'databaseID') - // add custom title name - this.createSettingEl(nextTabs, i18nConfig.NotionCustomTitleName, i18nConfig.NotionCustomTitleNameDesc, 'text', i18nConfig.NotionCustomTitleText, this.data.customTitleName, 'data', 'customTitleName') - // add new property button new Setting(nextTabs) .setName(i18nConfig.NotionCustomValues) @@ -251,9 +248,9 @@ export class SettingModal extends Modal { renderCustomPreview(properties: any[], nextTabs: HTMLElement) { const previewContainer = nextTabs.createDiv('preview-container'); - properties.forEach((property: { customValue: any; customType: any; }) => { + properties.forEach((property: { customName: any; customType: any; }) => { const propertyEl = previewContainer.createEl('div', {cls: 'property-preview'}); - propertyEl.createEl('span', {text: `Property: ${property.customValue}, Type: ${property.customType}`}); + propertyEl.createEl('span', {text: `Property: ${property.customName}, Type: ${property.customType}`}); }); } diff --git a/src/ui/settingTabs.ts b/src/ui/settingTabs.ts index 0247cb0..28291d3 100644 --- a/src/ui/settingTabs.ts +++ b/src/ui/settingTabs.ts @@ -37,7 +37,7 @@ export interface DatabaseDetails { tagButton: boolean; customTitleButton: boolean; customTitleName: string; - customProperties:{ customValue: string, customType: string }[]; + customProperties:{ customName: string, customType: string }[]; // customValues: string; saved: boolean; } diff --git a/src/upload/uploadCommand.ts b/src/upload/uploadCommand.ts index fce960b..a9b8235 100644 --- a/src/upload/uploadCommand.ts +++ b/src/upload/uploadCommand.ts @@ -1,118 +1,131 @@ -import { i18nConfig } from "../lang/I18n"; -import { App, Notice } from "obsidian"; -import { Upload2NotionNext } from "./upload_next/Upload2NotionNext"; -import { Upload2NotionGeneral } from "./upload_general/Upload2NotionGeneral"; -import { Upload2NotionCustom } from "./upoload_custom/Upload2NotionCustom"; +import {i18nConfig} from "../lang/I18n"; +import {App, Notice} from "obsidian"; +import {Upload2NotionNext} from "./upload_next/Upload2NotionNext"; +import {Upload2NotionGeneral} from "./upload_general/Upload2NotionGeneral"; +import {Upload2NotionCustom} from "./upoload_custom/Upload2NotionCustom"; import {DatabaseDetails, PluginSettings} from "../ui/settingTabs"; import ObsidianSyncNotionPlugin from "../main"; -import { getNowFileMarkdownContentNext } from "./upload_next/getMarkdownNext"; -import { getNowFileMarkdownContentGeneral } from "./upload_general/getMarkdownGeneral"; +import {getNowFileMarkdownContentNext} from "./upload_next/getMarkdownNext"; +import {getNowFileMarkdownContentGeneral} from "./upload_general/getMarkdownGeneral"; import {getNowFileMarkdownContentCustom} from "./upoload_custom/getMarkdownCustom"; export async function uploadCommandNext( - plugin: ObsidianSyncNotionPlugin, - settings: PluginSettings, + plugin: ObsidianSyncNotionPlugin, + settings: PluginSettings, dbDetails: DatabaseDetails, - app: App, + app: App, ) { - const { notionAPI, databaseID } = dbDetails; + const {notionAPI, databaseID} = dbDetails; - // Check if NNon exists - // if (NNon === undefined) { - // const NNonmessage = i18nConfig.NNonMissing; - // new Notice(NNonmessage); - // return; - // } + // Check if NNon exists + // if (NNon === undefined) { + // const NNonmessage = i18nConfig.NNonMissing; + // new Notice(NNonmessage); + // return; + // } - // Check if the user has set up the Notion API and database ID - if (notionAPI === "" || databaseID === "") { - const setAPIMessage = i18nConfig["set-api-id"]; - new Notice(setAPIMessage); - return; - } + // Check if the user has set up the Notion API and database ID + if (notionAPI === "" || databaseID === "") { + const setAPIMessage = i18nConfig["set-api-id"]; + new Notice(setAPIMessage); + return; + } - const { markDownData, nowFile, emoji, cover, tags, type, slug, stats, category, summary, paword, favicon, datetime } = await getNowFileMarkdownContentNext(app, settings) + const { + markDownData, + nowFile, + emoji, + cover, + tags, + type, + slug, + stats, + category, + summary, + paword, + favicon, + datetime + } = await getNowFileMarkdownContentNext(app, settings) - if (markDownData) { - const { basename } = nowFile; - const upload = new Upload2NotionNext(plugin, dbDetails); - const res = await upload.syncMarkdownToNotionNext(basename, emoji, cover, tags, type, slug, stats, category, summary, paword, favicon, datetime, markDownData, nowFile, this.app); + if (markDownData) { + const {basename} = nowFile; + const upload = new Upload2NotionNext(plugin, dbDetails); + const res = await upload.syncMarkdownToNotionNext(basename, emoji, cover, tags, type, slug, stats, category, summary, paword, favicon, datetime, markDownData, nowFile, this.app); - if (res.status === 200) { - new Notice(`${i18nConfig["sync-success"]}${basename}`); - } else { - new Notice(`${i18nConfig["sync-fail"]}${basename}`, 5000); - } + if (res.status === 200) { + new Notice(`${i18nConfig["sync-success"]}${basename}`); + } else { + new Notice(`${i18nConfig["sync-fail"]}${basename}`, 5000); + } - } + } } - export async function uploadCommandGeneral( - plugin: ObsidianSyncNotionPlugin, - settings: PluginSettings, + plugin: ObsidianSyncNotionPlugin, + settings: PluginSettings, dbDetails: DatabaseDetails, - app: App, + app: App, ) { - const { notionAPI, databaseID } = dbDetails; + const {notionAPI, databaseID} = dbDetails; - // Check if the user has set up the Notion API and database ID - if (notionAPI === "" || databaseID === "") { - const setAPIMessage = i18nConfig["set-api-id"]; - new Notice(setAPIMessage); - return; - } + // Check if the user has set up the Notion API and database ID + if (notionAPI === "" || databaseID === "") { + const setAPIMessage = i18nConfig["set-api-id"]; + new Notice(setAPIMessage); + return; + } - const { markDownData, nowFile, cover, tags } = await getNowFileMarkdownContentGeneral(app, settings) + const {markDownData, nowFile, cover, tags} = await getNowFileMarkdownContentGeneral(app, settings) - if (markDownData) { - const { basename } = nowFile; + if (markDownData) { + const {basename} = nowFile; - const upload = new Upload2NotionGeneral(plugin, dbDetails); - const res = await upload.syncMarkdownToNotionGeneral(basename, cover, tags, markDownData, nowFile, this.app); + const upload = new Upload2NotionGeneral(plugin, dbDetails); + const res = await upload.syncMarkdownToNotionGeneral(basename, cover, tags, markDownData, nowFile, this.app); - if (res.status === 200) { - new Notice(`${i18nConfig["sync-success"]}${basename}`); - } else { - new Notice(`${i18nConfig["sync-fail"]}${basename}`, 5000); - } + if (res.status === 200) { + new Notice(`${i18nConfig["sync-success"]}${basename}`); + } else { + new Notice(`${i18nConfig["sync-fail"]}${basename}`, 5000); + } - } + } } export async function uploadCommandCustom( - plugin: ObsidianSyncNotionPlugin, - settings: PluginSettings, + plugin: ObsidianSyncNotionPlugin, + settings: PluginSettings, dbDetails: DatabaseDetails, - app: App, + app: App, ) { - const { notionAPI, databaseID } = settings; + const {notionAPI, databaseID} = settings; - // Check if the user has set up the Notion API and database ID - if (notionAPI === "" || databaseID === "") { - const setAPIMessage = i18nConfig["set-api-id"]; - new Notice(setAPIMessage); - return; - } + // Check if the user has set up the Notion API and database ID + if (notionAPI === "" || databaseID === "") { + const setAPIMessage = i18nConfig["set-api-id"]; + new Notice(setAPIMessage); + return; + } - const { markDownData, nowFile, cover, customValues} = await getNowFileMarkdownContentCustom(app, dbDetails, settings) + const {markDownData, nowFile, cover, customValues} = await getNowFileMarkdownContentCustom(app, dbDetails, settings) - if (markDownData) { - const { basename } = nowFile; + if (markDownData) { + const { basename} = nowFile; - const upload = new Upload2NotionCustom(plugin,dbDetails); - const res = await upload.syncMarkdownToNotionCustom(basename, cover, customValues, markDownData, nowFile, this.app); + const upload = new Upload2NotionCustom(plugin, dbDetails); + const res = await upload.syncMarkdownToNotionCustom(cover, customValues, markDownData, nowFile, this.app); - if (res.status === 200) { - new Notice(`${i18nConfig["sync-success"]}${basename}`); - } else { - new Notice(`${i18nConfig["sync-fail"]}${basename}`, 5000); - } + if (res.status === 200) { + new Notice(`${i18nConfig["sync-success"]}${basename}`); + } else { + new Notice(`${i18nConfig["sync-fail"]}${basename}`, 5000); + } - } + } } diff --git a/src/upload/upload_general/BaseUpload2NotionGeneral.ts b/src/upload/upload_general/BaseUpload2NotionGeneral.ts index a5d6795..7cca716 100644 --- a/src/upload/upload_general/BaseUpload2NotionGeneral.ts +++ b/src/upload/upload_general/BaseUpload2NotionGeneral.ts @@ -7,89 +7,90 @@ import MyPlugin from "src/main"; import {DatabaseDetails} from "../../ui/settingTabs"; export class UploadBaseGeneral { - plugin: MyPlugin; - notion: Client; - agent: any; + plugin: MyPlugin; + notion: Client; + agent: any; dbDetails: DatabaseDetails - constructor(plugin: MyPlugin, dbDetails: DatabaseDetails) { - this.plugin = plugin; + + constructor(plugin: MyPlugin, dbDetails: DatabaseDetails) { + this.plugin = plugin; this.dbDetails = dbDetails - } + } - async deletePage(notionID: string) { + async deletePage(notionID: string) { const {notionAPI} = this.dbDetails - return requestUrl({ - url: `https://api.notion.com/v1/blocks/${notionID}`, - method: 'DELETE', - headers: { - 'Content-Type': 'application/json', - 'Authorization': 'Bearer ' + notionAPI, - 'Notion-Version': '2022-06-28', - }, - body: '' - }); - } + return requestUrl({ + url: `https://api.notion.com/v1/blocks/${notionID}`, + method: 'DELETE', + headers: { + 'Content-Type': 'application/json', + 'Authorization': 'Bearer ' + notionAPI, + 'Notion-Version': '2022-06-28', + }, + body: '' + }); + } - async getDataBase(databaseID: string) { + async getDataBase(databaseID: string) { const {notionAPI} = this.dbDetails - const response = await requestUrl({ - url: `https://api.notion.com/v1/databases/${databaseID}`, - method: 'GET', - headers: { - 'Authorization': 'Bearer ' + notionAPI, - 'Notion-Version': '2022-06-28', - } - } - ) + const response = await requestUrl({ + url: `https://api.notion.com/v1/databases/${databaseID}`, + method: 'GET', + headers: { + 'Authorization': 'Bearer ' + notionAPI, + 'Notion-Version': '2022-06-28', + } + } + ) - // Check if cover is present in the JSON response and then get the URL - if (response.json.cover && response.json.cover.external) { - return response.json.cover.external.url; - } else { - return null; // or some other default value, if you prefer - } - } + // Check if cover is present in the JSON response and then get the URL + if (response.json.cover && response.json.cover.external) { + return response.json.cover.external.url; + } else { + return null; // or some other default value, if you prefer + } + } - // async updateYamlInfo(yamlContent: string, nowFile: TFile, res: any, app: App, settings: any) { - // let {url, id} = res.json - // // replace www to notionID - // const {notionUser} = this.plugin.settings; - // - // if (notionUser !== "") { - // // replace url str "www" to notionID - // url = url.replace("www.notion.so", `${notionUser}.notion.site`) - // } - // - // await app.fileManager.processFrontMatter(nowFile, yamlContent => { - // if (yamlContent['notionID']) { - // delete yamlContent['notionID'] - // } - // if (yamlContent['link']) { - // delete yamlContent['link'] - // } - // // add new notionID and link - // yamlContent.notionID = id; - // yamlContent.link = url; - // }); - // - // try { - // await navigator.clipboard.writeText(url) - // } catch (error) { - // new Notice(`复制链接失败,请手动复制${error}`) - // } - // // const __content = yamlContent.__content; - // // delete yamlContent.__content - // // const yamlhead = yaml.stringify(yamlContent) - // // // if yamlhead hava last \n remove it - // // const yamlhead_remove_n = yamlhead.replace(/\n$/, '') - // // // if __content have start \n remove it - // // const __content_remove_n = __content.replace(/^\n/, '') - // // const content = '---\n' +yamlhead_remove_n +'\n---\n' + __content_remove_n; - // // try { - // // await nowFile.vault.modify(nowFile, content) - // // } catch (error) { - // // new Notice(`write file error ${error}`) - // // } - // } + // async updateYamlInfo(yamlContent: string, nowFile: TFile, res: any, app: App, settings: any) { + // let {url, id} = res.json + // // replace www to notionID + // const {notionUser} = this.plugin.settings; + // + // if (notionUser !== "") { + // // replace url str "www" to notionID + // url = url.replace("www.notion.so", `${notionUser}.notion.site`) + // } + // + // await app.fileManager.processFrontMatter(nowFile, yamlContent => { + // if (yamlContent['notionID']) { + // delete yamlContent['notionID'] + // } + // if (yamlContent['link']) { + // delete yamlContent['link'] + // } + // // add new notionID and link + // yamlContent.notionID = id; + // yamlContent.link = url; + // }); + // + // try { + // await navigator.clipboard.writeText(url) + // } catch (error) { + // new Notice(`复制链接失败,请手动复制${error}`) + // } + // // const __content = yamlContent.__content; + // // delete yamlContent.__content + // // const yamlhead = yaml.stringify(yamlContent) + // // // if yamlhead hava last \n remove it + // // const yamlhead_remove_n = yamlhead.replace(/\n$/, '') + // // // if __content have start \n remove it + // // const __content_remove_n = __content.replace(/^\n/, '') + // // const content = '---\n' +yamlhead_remove_n +'\n---\n' + __content_remove_n; + // // try { + // // await nowFile.vault.modify(nowFile, content) + // // } catch (error) { + // // new Notice(`write file error ${error}`) + // // } + // } } diff --git a/src/upload/upload_general/getMarkdownGeneral.ts b/src/upload/upload_general/getMarkdownGeneral.ts index f035727..a1f7379 100644 --- a/src/upload/upload_general/getMarkdownGeneral.ts +++ b/src/upload/upload_general/getMarkdownGeneral.ts @@ -3,31 +3,31 @@ import {i18nConfig} from "../../lang/I18n"; import {PluginSettings} from "../../ui/settingTabs"; export async function getNowFileMarkdownContentGeneral( - app: App, - settings: PluginSettings, + app: App, + settings: PluginSettings, ) { - const nowFile = app.workspace.getActiveFile(); - let cover = ''; - let tags = []; + const nowFile = app.workspace.getActiveFile(); + let cover = ''; + let tags = []; - const FileCache = app.metadataCache.getFileCache(nowFile); - try { - cover = FileCache.frontmatter.coverurl; - tags = FileCache.frontmatter.tags; - } catch (error) { - new Notice(i18nConfig["set-tags-fail"]); - } + const FileCache = app.metadataCache.getFileCache(nowFile); + try { + cover = FileCache.frontmatter.coverurl; + tags = FileCache.frontmatter.tags; + } catch (error) { + new Notice(i18nConfig["set-tags-fail"]); + } - if (nowFile) { - const markDownData = await nowFile.vault.read(nowFile); - return { - markDownData, - nowFile, - cover, - tags, - }; - } else { - new Notice(i18nConfig["open-file"]); - return; - } + if (nowFile) { + const markDownData = await nowFile.vault.read(nowFile); + return { + markDownData, + nowFile, + cover, + tags, + }; + } else { + new Notice(i18nConfig["open-file"]); + return; + } } diff --git a/src/upload/upoload_custom/Upload2NotionCustom.ts b/src/upload/upoload_custom/Upload2NotionCustom.ts index 33dadc3..3f73bf6 100644 --- a/src/upload/upoload_custom/Upload2NotionCustom.ts +++ b/src/upload/upoload_custom/Upload2NotionCustom.ts @@ -1,11 +1,10 @@ -import { App, Notice, requestUrl, TFile } from "obsidian"; -import { Client } from "@notionhq/client"; -import { markdownToBlocks } from "@tryfabric/martian"; +import {App, Notice, requestUrl, TFile} from "obsidian"; +import {markdownToBlocks} from "@tryfabric/martian"; import * as yamlFrontMatter from "yaml-front-matter"; // import * as yaml from "yaml" import MyPlugin from "src/main"; import {DatabaseDetails, PluginSettings} from "../../ui/settingTabs"; -import { updateYamlInfo } from "../updateYaml"; +import {updateYamlInfo} from "../updateYaml"; import {UploadBaseCustom} from "./BaseUpload2NotionCustom"; export class Upload2NotionCustom extends UploadBaseCustom { @@ -21,14 +20,13 @@ export class Upload2NotionCustom extends UploadBaseCustom { // 暂时就直接删除,新建一个page async updatePage( notionID: string, - title: string, cover: string, customValues: Record, childArr: any, ) { await this.deletePage(notionID); - const { databaseID } = this.dbDetails; + const {databaseID} = this.dbDetails; const databaseCover = await this.getDataBase( databaseID @@ -38,11 +36,10 @@ export class Upload2NotionCustom extends UploadBaseCustom { cover = databaseCover; } - return await this.createPage(title, cover, customValues, childArr); + return await this.createPage(cover, customValues, childArr); } async createPage( - title: string, cover: string, customValues: Record, childArr: any, @@ -50,42 +47,11 @@ export class Upload2NotionCustom extends UploadBaseCustom { const { databaseID, - customTitleButton, - customTitleName, + customProperties, notionAPI } = this.dbDetails; - const bodyString: any = { - parent: { - database_id: databaseID, - }, - properties: { - [customTitleButton - ? customTitleName - : "title"]: { - title: [ - { - text: { - content: title, - }, - }, - ], - }, - ...(Object.keys(customValues).reduce((acc, key) => { - acc[key] = { - rich_text: [ - { - text: { - content: customValues[key] || '', - }, - }, - ], - }; - return acc; - }, {} as Record)), - }, - children: childArr, - }; + const bodyString: any = this.buildBodyString(customProperties, customValues, childArr); if (cover) { bodyString.cover = { @@ -124,7 +90,6 @@ export class Upload2NotionCustom extends UploadBaseCustom { } async syncMarkdownToNotionCustom( - title: string, cover: string, customValues: Record, markdown: string, @@ -147,13 +112,12 @@ export class Upload2NotionCustom extends UploadBaseCustom { if (notionID) { res = await this.updatePage( notionID, - title, cover, customValues, file2Block, ); } else { - res = await this.createPage(title, cover, customValues, file2Block); + res = await this.createPage(cover, customValues, file2Block); } if (res.status === 200) { await updateYamlInfo(markdown, nowFile, res, app, this.plugin, this.dbDetails); @@ -162,4 +126,72 @@ export class Upload2NotionCustom extends UploadBaseCustom { } return res; } + + private buildPropertyObject(customName: string, customType: string, customValues: Record) { + const value = customValues[customName] || ''; + + switch (customType) { + case "title": + return { + title: [ + { + text: { + content: value, + }, + }, + ], + }; + case "rich_text": + return { + rich_text: [ + { + text: { + content: value || '', + }, + }, + ], + }; + case "date": + return { + date: { + start: value || new Date().toISOString(), + }, + }; + case "select": + return { + select: { + name: value, + }, + }; + case "multi_select": + return { + multi_select: Array.isArray(value) ? value.map(item => ({name: item})) : [{name: value}], + }; + } + } + + private buildBodyString( + customProperties: { customName: string; customType: string }[], + customValues: Record, + childArr: any, + ) { + + const properties: { [key: string]: any } = {}; + + customProperties.forEach(({customName, customType}) => { + properties[customName] = this.buildPropertyObject(customName, customType, customValues); + } + ); + + + return { + parent: { + database_id: this.dbDetails.databaseID, + }, + properties, + children: childArr, + }; + } + + } diff --git a/src/upload/upoload_custom/getMarkdownCustom.ts b/src/upload/upoload_custom/getMarkdownCustom.ts index e39b748..0dacc09 100644 --- a/src/upload/upoload_custom/getMarkdownCustom.ts +++ b/src/upload/upoload_custom/getMarkdownCustom.ts @@ -1,4 +1,4 @@ -import {App, Notice} from "obsidian"; +import {App, Notice, TAbstractFile, TFile} from "obsidian"; import {i18nConfig} from "../../lang/I18n"; import {DatabaseDetails, PluginSettings} from "../../ui/settingTabs"; @@ -8,22 +8,29 @@ export async function getNowFileMarkdownContentCustom( settings: PluginSettings, ) { const nowFile = app.workspace.getActiveFile(); - let cover = ''; - let customValues: Record = {}; // Change 'any' to a more specific type if possible + if (!nowFile) { + new Notice(i18nConfig["open-file"]); + return; + } + let cover = ''; + let customValues: Record = {}; const FileCache = app.metadataCache.getFileCache(nowFile); try { cover = FileCache.frontmatter.coverurl; // Get custom property names from dbDetails - const customPropertyNames = dbDetails.customProperties.map(property => property.customValue); + const customPropertyValues = dbDetails.customProperties.map(property => property.customName); // Extract custom values from the frontmatter based on the names - customPropertyNames.forEach(propertyName => { + customPropertyValues.forEach( propertyName => { if (FileCache.frontmatter[propertyName] !== undefined) { customValues[propertyName] = FileCache.frontmatter[propertyName]; } }); + + customValues['title'] = nowFile.basename; // Use 'basename' for the file name without extension + } catch (error) { new Notice(i18nConfig["set-tags-fail"]); }