feat: convert tags support

This commit is contained in:
Jannik | Kuqs
2022-12-16 16:29:35 +01:00
parent 7be8f1c799
commit 82629c122f
4 changed files with 53 additions and 25 deletions

View File

@@ -100,6 +100,11 @@ if you write the Notion ID, it will share to the page link like:
https://your_user_name.notion.site/myworkspace/a8aec43384f447ed84390.
The visiter don't need to redirect url.
## Convert Tags [option]
Transfer the Obsidian tags to the Notion table.
It requires the column with the name 'Tags'.
![](./doc/7.png)
## Sync image to Notion
To sync images to your oss or cos bucket, use the [Obsidian Image Auto Upload Plugin](https://github.com/renmu123/obsidian-image-auto-upload-plugin).

View File

@@ -28,13 +28,13 @@ export class Upload2Notion {
// 因为需要解析notion的block进行对比非常的麻烦
// 暂时就直接删除新建一个page
async updatePage(notionID:string, title:string, childArr:any) {
async updatePage(notionID:string, title:string, allowTags:boolean, tags:string[], childArr:any) {
await this.deletePage(notionID)
const res = await this.createPage(title, childArr)
const res = await this.createPage(title, allowTags, tags, childArr)
return res
}
async createPage(title:string, childArr: any) {
async createPage(title:string, allowTags:boolean, tags:string[], childArr: any) {
const bodyString:any = {
parent: {
database_id: this.app.settings.databaseID
@@ -49,6 +49,11 @@ export class Upload2Notion {
},
],
},
Tags: {
multi_select: allowTags ? tags.map(tag => {
return {"name": tag}
}) : [],
},
},
children: childArr,
}
@@ -80,7 +85,7 @@ export class Upload2Notion {
}
}
async syncMarkdownToNotion(title:string, markdown: string, nowFile: TFile, app:App, settings:any): Promise<any> {
async syncMarkdownToNotion(title:string, allowTags:boolean, tags:string[], markdown: string, nowFile: TFile, app:App, settings:any): Promise<any> {
let res:any
const yamlObj:any = yamlFrontMatter.loadFront(markdown);
const __content = yamlObj.__content
@@ -89,9 +94,9 @@ export class Upload2Notion {
const notionID = frontmasster ? frontmasster.notionID : null
if(notionID){
res = await this.updatePage(notionID, title, file2Block);
res = await this.updatePage(notionID, title, allowTags, tags, file2Block);
} else {
res = await this.createPage(title, file2Block);
res = await this.createPage(title, allowTags, tags, file2Block);
}
if (res.status === 200) {
await this.updateYamlInfo(markdown, nowFile, res, app, settings)

BIN
doc/7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

26
main.ts
View File

@@ -24,6 +24,7 @@ interface PluginSettings {
bannerUrl: string;
notionID: string;
proxy: string;
allowTags: boolean;
}
const langConfig = NoticeMConfig( window.localStorage.getItem('language') || 'en')
@@ -34,6 +35,7 @@ const DEFAULT_SETTINGS: PluginSettings = {
bannerUrl: "",
notionID: "",
proxy: "",
allowTags: false
};
export default class ObsidianSyncNotionPlugin extends Plugin {
@@ -72,21 +74,21 @@ export default class ObsidianSyncNotionPlugin extends Plugin {
onunload() {}
async upload(){
const { notionAPI, databaseID } = this.settings;
const { notionAPI, databaseID, allowTags } = this.settings;
if (notionAPI === "" || databaseID === "") {
new Notice(
"Please set up the notion API and database ID in the settings tab."
);
return;
}
const { markDownData, nowFile } =
const { markDownData, nowFile, tags } =
await this.getNowFileMarkdownContent(this.app);
if (markDownData) {
const { basename } = nowFile;
const upload = new Upload2Notion(this);
const res = await upload.syncMarkdownToNotion(basename, markDownData,nowFile, this.app, this.settings)
const res = await upload.syncMarkdownToNotion(basename, allowTags, tags, markDownData, nowFile, this.app, this.settings)
if(res.status === 200){
new Notice(`${langConfig["sync-success"]}${basename}`)
}else {
@@ -97,11 +99,14 @@ export default class ObsidianSyncNotionPlugin extends Plugin {
async getNowFileMarkdownContent(app: App) {
const nowFile = app.workspace.getActiveFile();
const tags = app.metadataCache.getFileCache(nowFile).frontmatter.tags;
if (nowFile) {
const markDownData = await nowFile.vault.read(nowFile);
return {
markDownData,
nowFile,
tags
};
} else {
new Notice(langConfig["open-file"]);
@@ -139,7 +144,7 @@ class SampleSettingTab extends PluginSettingTab {
text: "Settings for obsidian to notion plugin.",
});
const notionApiKye = new Setting(containerEl)
new Setting(containerEl)
.setName("Notion API Token")
.setDesc("It's a secret")
.addText((text) =>{
@@ -201,5 +206,18 @@ class SampleSettingTab extends PluginSettingTab {
})
);
new Setting(containerEl)
.setName("Convert tags(optional)")
.setDesc("Transfer the Obsidian tags to the Notion table. It requires the column with the name 'Tags'")
.addToggle((toggle) =>
toggle
.setValue(this.plugin.settings.allowTags)
.onChange(async (value) => {
this.plugin.settings.allowTags = value;
await this.plugin.saveSettings();
})
);
}
}