mirror of
https://github.com/Wanxp/obsidian-douban.git
synced 2026-04-04 16:48:44 +08:00
add function: support search and create file
This commit is contained in:
parent
cd9c300cb7
commit
9e633823e4
40
main.ts
40
main.ts
@ -25,31 +25,32 @@ export default class DoubanPlugin extends Plugin {
|
|||||||
|
|
||||||
async putToObsidian(context: HandleContext, extract: DoubanSubject) {
|
async putToObsidian(context: HandleContext, extract: DoubanSubject) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
if (!extract) {
|
if (!extract) {
|
||||||
log.warn(i18nHelper.getMessage('140101'));
|
log.warn(i18nHelper.getMessage('140101'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.showStatus('140204', extract.title);
|
this.showStatus('140204', extract.title);
|
||||||
const content = await this.doubanExtractHandler.parseText(extract, context)
|
const result = await this.doubanExtractHandler.parseText(extract, context)
|
||||||
if (content) {
|
if (result) {
|
||||||
this.putContentToObsidian(context, content);
|
this.putContentToObsidian(context, result);
|
||||||
}
|
}
|
||||||
this.showStatus('140205', extract.title);
|
this.showStatus('140205', extract.title);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.showStatus('140206', e.message);
|
this.showStatus('140206', e.message);
|
||||||
} finally {
|
} finally {
|
||||||
setTimeout(() => this.doubanStatusBar.empty(), BasicConst.CLEAN_STATUS_BAR_DELAY)
|
this.clearStatusBarDelay();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async putContentToObsidian(context: HandleContext, content: HandleResult) {
|
async putContentToObsidian(context: HandleContext, result: HandleResult) {
|
||||||
const {mode} = context;
|
const {mode} = context;
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case SearchHandleMode.FOR_CREATE:
|
case SearchHandleMode.FOR_CREATE:
|
||||||
this.createFile(context, content);
|
this.createFile(context, result);
|
||||||
break;
|
break;
|
||||||
case SearchHandleMode.FOR_REPLACE:
|
case SearchHandleMode.FOR_REPLACE:
|
||||||
this.putToEditor(context.editor, content.content);
|
this.putToEditor(context.editor, result.content);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -58,8 +59,11 @@ export default class DoubanPlugin extends Plugin {
|
|||||||
editor.replaceSelection(content);
|
editor.replaceSelection(content);
|
||||||
}
|
}
|
||||||
|
|
||||||
async createFile(context: HandleContext, content: HandleResult) {
|
async createFile(context: HandleContext, result: HandleResult) {
|
||||||
this.fileHandler.createNewNoteWithData(content.fileName,content.content);
|
let filePath = this.settings.dataFilePath;
|
||||||
|
filePath = filePath?filePath:DEFAULT_SETTINGS.dataFilePath;
|
||||||
|
filePath = FileUtil.join(filePath, result.fileName);
|
||||||
|
this.fileHandler.createNewNoteWithData(filePath, result.content);
|
||||||
}
|
}
|
||||||
|
|
||||||
async search(searchTerm: string, context: HandleContext) {
|
async search(searchTerm: string, context: HandleContext) {
|
||||||
@ -71,7 +75,7 @@ export default class DoubanPlugin extends Plugin {
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.showStatus('140206', e.message);
|
this.showStatus('140206', e.message);
|
||||||
} finally {
|
} finally {
|
||||||
setTimeout(() => this.doubanStatusBar.empty(), BasicConst.CLEAN_STATUS_BAR_DELAY)
|
this.clearStatusBarDelay();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,8 +99,9 @@ export default class DoubanPlugin extends Plugin {
|
|||||||
|
|
||||||
async onload() {
|
async onload() {
|
||||||
await this.loadSettings();
|
await this.loadSettings();
|
||||||
|
if (this.settings.statusBar) {
|
||||||
this.doubanStatusBar = this.addStatusBarItem();
|
this.doubanStatusBar = this.addStatusBarItem();
|
||||||
|
}
|
||||||
|
|
||||||
this.addCommand({
|
this.addCommand({
|
||||||
id: "search-douban-import-and-create-file",
|
id: "search-douban-import-and-create-file",
|
||||||
@ -138,10 +143,19 @@ export default class DoubanPlugin extends Plugin {
|
|||||||
|
|
||||||
|
|
||||||
showStatus(origin: string, message: string) {
|
showStatus(origin: string, message: string) {
|
||||||
|
if (!this.settings.statusBar || !this.doubanStatusBar) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.doubanStatusBar.empty();
|
this.doubanStatusBar.empty();
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
this.doubanStatusBar.setText(i18nHelper.getMessage(origin).replace('{0}', message));
|
this.doubanStatusBar.setText(i18nHelper.getMessage(origin).replace('{0}', message));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clearStatusBarDelay() {
|
||||||
|
if (!this.settings.statusBar || !this.doubanStatusBar) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setTimeout(() => this.doubanStatusBar.empty(), BasicConst.CLEAN_STATUS_BAR_DELAY)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,8 +4,6 @@ import {doubanHeaders} from "./Douban";
|
|||||||
|
|
||||||
export const DEFAULT_SETTINGS: DoubanPluginSetting = {
|
export const DEFAULT_SETTINGS: DoubanPluginSetting = {
|
||||||
//以后会被移除
|
//以后会被移除
|
||||||
bookTemplate: "", gameTemplate: "", movieTemplate: "", musicTemplate: "", noteTemplate: "", teleplayTemplate: "",
|
|
||||||
|
|
||||||
movieTemplateFile: ``,
|
movieTemplateFile: ``,
|
||||||
bookTemplateFile: ``,
|
bookTemplateFile: ``,
|
||||||
musicTemplateFile: ``,
|
musicTemplateFile: ``,
|
||||||
@ -19,5 +17,6 @@ export const DEFAULT_SETTINGS: DoubanPluginSetting = {
|
|||||||
arraySpilt: ", ",
|
arraySpilt: ", ",
|
||||||
personNameMode: PersonNameMode.CH_NAME,
|
personNameMode: PersonNameMode.CH_NAME,
|
||||||
dataFilePath: "",
|
dataFilePath: "",
|
||||||
dataFileNamePath: "/{{type}}/{{title}}"
|
dataFileNamePath: "/{{type}}/{{title}}",
|
||||||
|
statusBar: true,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
import {TemplateKey} from "./Constsant";
|
||||||
|
|
||||||
export const DEFAULT_TEMPLATE_CONTENT = {
|
export const DEFAULT_TEMPLATE_CONTENT = {
|
||||||
movieTemplateFileContent: `---
|
movieTemplateFileContent: `---
|
||||||
doubanId: {{id}}
|
doubanId: {{id}}
|
||||||
@ -118,3 +120,12 @@ desc: {{desc}}
|
|||||||

|

|
||||||
`,
|
`,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取默认的文档内容
|
||||||
|
* @param key
|
||||||
|
*/
|
||||||
|
export function getDefaultTemplateContent(key: TemplateKey): string {
|
||||||
|
// @ts-ignore
|
||||||
|
return DEFAULT_TEMPLATE_CONTENT[key + "Content"];
|
||||||
|
}
|
||||||
|
|||||||
@ -10,9 +10,10 @@ import YamlUtil from "../../../utils/YamlUtil";
|
|||||||
import {BasicConst, PersonNameMode, SearchHandleMode, TemplateKey, TemplateTextMode} from "../../../constant/Constsant";
|
import {BasicConst, PersonNameMode, SearchHandleMode, TemplateKey, TemplateTextMode} from "../../../constant/Constsant";
|
||||||
import HandleContext from "@App/data/model/HandleContext";
|
import HandleContext from "@App/data/model/HandleContext";
|
||||||
import HandleResult from "@App/data/model/HandleResult";
|
import HandleResult from "@App/data/model/HandleResult";
|
||||||
import {DEFAULT_TEMPLATE_CONTENT} from "../../../constant/DefaultTemplateContent";
|
import {DEFAULT_TEMPLATE_CONTENT, getDefaultTemplateContent} from "../../../constant/DefaultTemplateContent";
|
||||||
import FileHandler from "../../../file/FileHandler";
|
import FileHandler from "../../../file/FileHandler";
|
||||||
import StringUtil from "../../../utils/StringUtil";
|
import StringUtil from "../../../utils/StringUtil";
|
||||||
|
import {DEFAULT_SETTINGS} from "../../../constant/DefaultSettings";
|
||||||
|
|
||||||
export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject> implements DoubanSubjectLoadHandler<T> {
|
export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject> implements DoubanSubjectLoadHandler<T> {
|
||||||
|
|
||||||
@ -50,12 +51,17 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
|
|||||||
}
|
}
|
||||||
let fileName:string = '';
|
let fileName:string = '';
|
||||||
if (SearchHandleMode.FOR_CREATE == context.mode) {
|
if (SearchHandleMode.FOR_CREATE == context.mode) {
|
||||||
fileName = this.parsePartText(template, extract, context);
|
fileName = this.parsePartText(this.getFileName(context), extract, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
return {content: result, fileName: fileName};
|
return {content: result, fileName: fileName};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private getFileName(context:HandleContext): string {
|
||||||
|
const {dataFileNamePath} = context.settings;
|
||||||
|
return dataFileNamePath ? dataFileNamePath : DEFAULT_SETTINGS.dataFileNamePath;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理特殊字符
|
* 处理特殊字符
|
||||||
* @param text
|
* @param text
|
||||||
@ -97,10 +103,13 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
|
|||||||
*/
|
*/
|
||||||
handleSpecialContent(value: any, textMode: TemplateTextMode = TemplateTextMode.NORMAL, context: HandleContext = null): string {
|
handleSpecialContent(value: any, textMode: TemplateTextMode = TemplateTextMode.NORMAL, context: HandleContext = null): string {
|
||||||
let result;
|
let result;
|
||||||
|
if (!value) {
|
||||||
|
return i18nHelper.getMessage('410101');
|
||||||
|
}
|
||||||
if (value instanceof Array) {
|
if (value instanceof Array) {
|
||||||
result = this.handleContentArray(value, context, textMode);
|
result = this.handleContentArray(value, context, textMode);
|
||||||
} else if (value instanceof Number) {
|
} else if (value instanceof Number) {
|
||||||
result = value ? value.toString() : '';
|
result = value.toString();
|
||||||
} else {
|
} else {
|
||||||
result = this.handleSpecialText(value, textMode);
|
result = this.handleSpecialText(value, textMode);
|
||||||
}
|
}
|
||||||
@ -146,11 +155,11 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
|
|||||||
let regValue: RegExpExecArray;
|
let regValue: RegExpExecArray;
|
||||||
switch (settings.personNameMode) {
|
switch (settings.personNameMode) {
|
||||||
case PersonNameMode.CH_NAME:
|
case PersonNameMode.CH_NAME:
|
||||||
regValue = /[\u4e00-\u9fa5]{2,20}/g.exec(name);
|
regValue = /[\u4e00-\u9fa50-9.]{2,20}/g.exec(name);
|
||||||
resultName = regValue ? regValue[0] : name;
|
resultName = regValue ? regValue[0] : name;
|
||||||
break;
|
break;
|
||||||
case PersonNameMode.EN_NAME:
|
case PersonNameMode.EN_NAME:
|
||||||
regValue = /[a-zA-Z.\s-]{2,50}/g.exec(name);
|
regValue = /[0-9a-zA-Z.\s-]{2,50}/g.exec(name);
|
||||||
resultName = regValue ? regValue[0] : name;
|
resultName = regValue ? regValue[0] : name;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -188,7 +197,7 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
|
|||||||
private parsePartText(template: string, extract: T, context: HandleContext, textMode: TemplateTextMode = TemplateTextMode.NORMAL): string {
|
private parsePartText(template: string, extract: T, context: HandleContext, textMode: TemplateTextMode = TemplateTextMode.NORMAL): string {
|
||||||
const resultContent = template
|
const resultContent = template
|
||||||
.replaceAll(DoubanParameter.ID, extract.id)
|
.replaceAll(DoubanParameter.ID, extract.id)
|
||||||
.replaceAll(DoubanParameter.TITLE, this.handleSpecialContent(extract.title, textMode))
|
.replaceAll(DoubanParameter.TITLE, this.handleSpecialContent(this.getPersonName(extract.title, context), textMode))
|
||||||
.replaceAll(DoubanParameter.TYPE, extract.type)
|
.replaceAll(DoubanParameter.TYPE, extract.type)
|
||||||
.replaceAll(DoubanParameter.SCORE, this.handleSpecialContent(extract.score))
|
.replaceAll(DoubanParameter.SCORE, this.handleSpecialContent(extract.score))
|
||||||
.replaceAll(DoubanParameter.IMAGE, extract.image)
|
.replaceAll(DoubanParameter.IMAGE, extract.image)
|
||||||
@ -206,25 +215,17 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
|
|||||||
|
|
||||||
private async getTemplate(context: HandleContext):Promise<string> {
|
private async getTemplate(context: HandleContext):Promise<string> {
|
||||||
const tempKey:TemplateKey = this.getTemplateKey(context);
|
const tempKey:TemplateKey = this.getTemplateKey(context);
|
||||||
|
|
||||||
// @ts-ignore
|
|
||||||
const oldTemplate:string = context.settings[tempKey.replace('File', '')]
|
|
||||||
if (oldTemplate && oldTemplate.length > 0) {
|
|
||||||
return oldTemplate;
|
|
||||||
}
|
|
||||||
const templatePath:string = context.settings[tempKey];
|
const templatePath:string = context.settings[tempKey];
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
const defaultContent = DEFAULT_TEMPLATE_CONTENT[tempKey + 'Content'];
|
|
||||||
|
|
||||||
if (!templatePath || StringUtil.isBlank(templatePath)) {
|
if (!templatePath || StringUtil.isBlank(templatePath)) {
|
||||||
return defaultContent;
|
return getDefaultTemplateContent(tempKey);
|
||||||
}
|
}
|
||||||
|
const defaultContent = getDefaultTemplateContent(tempKey);
|
||||||
let firstLinkpathDest:TFile = this.doubanPlugin.app.metadataCache.getFirstLinkpathDest(templatePath, '');
|
let firstLinkpathDest:TFile = this.doubanPlugin.app.metadataCache.getFirstLinkpathDest(templatePath, '');
|
||||||
if (!firstLinkpathDest) {
|
if (!firstLinkpathDest) {
|
||||||
return defaultContent;
|
return defaultContent;
|
||||||
}else {
|
}else {
|
||||||
// return firstLinkpathDest.
|
|
||||||
const val = await this.doubanPlugin.fileHandler.getFileContent(firstLinkpathDest.path);
|
const val = await this.doubanPlugin.fileHandler.getFileContent(firstLinkpathDest.path);
|
||||||
return val?val:defaultContent;
|
return val?val:defaultContent;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import DoubanSubject from "../model/DoubanSubject";
|
|||||||
import {TemplateKey, TemplateTextMode} from "../../../constant/Constsant";
|
import {TemplateKey, TemplateTextMode} from "../../../constant/Constsant";
|
||||||
import StringUtil from "../../../utils/StringUtil";
|
import StringUtil from "../../../utils/StringUtil";
|
||||||
import HandleContext from "@App/data/model/HandleContext";
|
import HandleContext from "@App/data/model/HandleContext";
|
||||||
|
import {i18nHelper} from "../../../lang/helper";
|
||||||
|
|
||||||
export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<DoubanBookSubject> {
|
export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<DoubanBookSubject> {
|
||||||
|
|
||||||
|
|||||||
@ -22,165 +22,14 @@ export class DoubanSettingTab extends PluginSettingTab {
|
|||||||
|
|
||||||
display(): void {
|
display(): void {
|
||||||
const {containerEl} = this;
|
const {containerEl} = this;
|
||||||
|
|
||||||
|
|
||||||
containerEl.empty();
|
containerEl.empty();
|
||||||
|
|
||||||
containerEl.createEl("h2", {text: 'Obsidian Douban'});
|
containerEl.createEl("h2", {text: 'Obsidian Douban'});
|
||||||
|
new Setting(containerEl);
|
||||||
|
this.settingsManager.constructBasicUI(containerEl);
|
||||||
|
this.settingsManager.constructTemplateUI(containerEl);
|
||||||
|
this.settingsManager.constructOutUI(containerEl);
|
||||||
|
|
||||||
new Setting(containerEl).setName(i18nHelper.getMessage('120001'))
|
this.settingsManager.constructTemplateVariablesUI(containerEl);
|
||||||
.then((setting) => {
|
|
||||||
setting.addText((textField) => {
|
|
||||||
setting.descEl.appendChild(
|
|
||||||
createFragment((frag) => {
|
|
||||||
frag.appendText(i18nHelper.getMessage('120002'));
|
|
||||||
frag.createEl('br');
|
|
||||||
frag.appendText(i18nHelper.getMessage('120003'));
|
|
||||||
frag.createEl(
|
|
||||||
'a',
|
|
||||||
{
|
|
||||||
text: i18nHelper.getMessage('120901'),
|
|
||||||
href: 'https://www.douban.com',
|
|
||||||
},
|
|
||||||
(a) => {
|
|
||||||
a.setAttr('target', '_blank');
|
|
||||||
}
|
|
||||||
);
|
|
||||||
frag.createEl('br');
|
|
||||||
frag.appendText(i18nHelper.getMessage('120004'));
|
|
||||||
frag.createEl('br');
|
|
||||||
frag.appendText(i18nHelper.getMessage('120005'));
|
|
||||||
frag.createEl('br');
|
|
||||||
frag.appendText(i18nHelper.getMessage('120006'));
|
|
||||||
frag.createEl('br');
|
|
||||||
})
|
|
||||||
);
|
|
||||||
textField.inputEl.addClass("obsidian_douban_settings_textField");
|
|
||||||
textField
|
|
||||||
.setPlaceholder(DEFAULT_SETTINGS.searchUrl)
|
|
||||||
.setValue(this.plugin.settings.searchUrl)
|
|
||||||
.onChange(async (value) => {
|
|
||||||
this.plugin.settings.searchUrl = value;
|
|
||||||
await this.plugin.saveSettings();
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
new Setting(containerEl).setName(i18nHelper.getMessage('120501')).then((setting) => {
|
|
||||||
setting.addMomentFormat((mf) => {
|
|
||||||
setting.descEl.appendChild(
|
|
||||||
createFragment((frag) => {
|
|
||||||
frag.appendText(
|
|
||||||
i18nHelper.getMessage('120503')
|
|
||||||
);
|
|
||||||
frag.createEl('br');
|
|
||||||
frag.appendText(i18nHelper.getMessage('120506') + ' ');
|
|
||||||
frag.createEl(
|
|
||||||
'a',
|
|
||||||
{
|
|
||||||
text: i18nHelper.getMessage('120508'),
|
|
||||||
href: 'https://momentjs.com/docs/#/displaying/format/',
|
|
||||||
},
|
|
||||||
(a) => {
|
|
||||||
a.setAttr('target', '_blank');
|
|
||||||
}
|
|
||||||
);
|
|
||||||
frag.createEl('br');
|
|
||||||
frag.appendText(i18nHelper.getMessage('120507') + ': ');
|
|
||||||
mf.setSampleEl(frag.createEl('b', {cls: 'u-pop'}));
|
|
||||||
frag.createEl('br');
|
|
||||||
})
|
|
||||||
);
|
|
||||||
mf.setPlaceholder(DEFAULT_SETTINGS.dateFormat);
|
|
||||||
mf.setValue(this.plugin.settings.dateFormat)
|
|
||||||
mf.onChange(async (value) => {
|
|
||||||
this.plugin.settings.dateFormat = value;
|
|
||||||
await this.plugin.saveSettings();
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
new Setting(containerEl).setName(i18nHelper.getMessage('120502')).then((setting) => {
|
|
||||||
setting.addMomentFormat((mf) => {
|
|
||||||
setting.descEl.appendChild(
|
|
||||||
createFragment((frag) => {
|
|
||||||
frag.appendText(
|
|
||||||
i18nHelper.getMessage('120504')
|
|
||||||
);
|
|
||||||
frag.createEl('br');
|
|
||||||
frag.appendText(i18nHelper.getMessage('120506') + ' ');
|
|
||||||
frag.createEl(
|
|
||||||
'a',
|
|
||||||
{
|
|
||||||
text: i18nHelper.getMessage('120508'),
|
|
||||||
href: 'https://momentjs.com/docs/#/displaying/format/',
|
|
||||||
},
|
|
||||||
(a) => {
|
|
||||||
a.setAttr('target', '_blank');
|
|
||||||
}
|
|
||||||
);
|
|
||||||
frag.createEl('br');
|
|
||||||
frag.appendText(i18nHelper.getMessage('120507') + ': ');
|
|
||||||
mf.setSampleEl(frag.createEl('b', {cls: 'u-pop'}));
|
|
||||||
frag.createEl('br');
|
|
||||||
})
|
|
||||||
);
|
|
||||||
mf.setPlaceholder(DEFAULT_SETTINGS.timeFormat);
|
|
||||||
mf.setValue(this.plugin.settings.timeFormat)
|
|
||||||
mf.onChange(async (value) => {
|
|
||||||
this.plugin.settings.timeFormat = value;
|
|
||||||
await this.plugin.saveSettings();
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
new Setting(containerEl)
|
|
||||||
.setName(i18nHelper.getMessage('120601'))
|
|
||||||
.setDesc(i18nHelper.getMessage('120602'))
|
|
||||||
.addText((textField) => {
|
|
||||||
textField.setPlaceholder(DEFAULT_SETTINGS.arraySpilt)
|
|
||||||
.setValue(this.plugin.settings.arraySpilt)
|
|
||||||
.onChange(async (value) => {
|
|
||||||
this.plugin.settings.arraySpilt = value;
|
|
||||||
await this.plugin.saveSettings();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
this.settingsManager.constructUI(containerEl);
|
|
||||||
|
|
||||||
new Setting(containerEl).setName(i18nHelper.getMessage('121201')).then((setting) => {
|
|
||||||
setting.addDropdown((dropdwon) => {
|
|
||||||
setting.descEl.appendChild(
|
|
||||||
createFragment((frag) => {
|
|
||||||
frag.appendText(i18nHelper.getMessage('121202'));
|
|
||||||
frag.createEl('br');
|
|
||||||
frag.appendText(i18nHelper.getMessage('121203'));
|
|
||||||
frag.createEl('br');
|
|
||||||
frag.appendText(i18nHelper.getMessage('121204'));
|
|
||||||
frag.createEl('br');
|
|
||||||
frag.appendText(i18nHelper.getMessage('121205'));
|
|
||||||
frag.createEl('br');
|
|
||||||
})
|
|
||||||
);
|
|
||||||
// dropdwon.inputEl.addClass("settings_area");
|
|
||||||
// dropdwon.inputEl.setAttr("rows", 10);
|
|
||||||
dropdwon.addOption(PersonNameMode.CH_NAME, PersonNameModeRecords.CH)
|
|
||||||
dropdwon.addOption(PersonNameMode.EN_NAME, PersonNameModeRecords.EN)
|
|
||||||
dropdwon.addOption(PersonNameMode.CH_EN_NAME, PersonNameModeRecords.CH_EN)
|
|
||||||
dropdwon.setValue(this.plugin.settings.personNameMode)
|
|
||||||
.onChange(async (value: string) => {
|
|
||||||
this.plugin.settings.personNameMode = value as PersonNameMode;
|
|
||||||
await this.plugin.saveSettings();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,34 +3,41 @@ import {CreateTemplateSelectParams} from "@App/setting/model/CreateTemplateSelec
|
|||||||
import { FileSuggest } from "./model/FileSuggest";
|
import { FileSuggest } from "./model/FileSuggest";
|
||||||
import {SearchComponent, Setting} from "obsidian";
|
import {SearchComponent, Setting} from "obsidian";
|
||||||
import { log } from "src/utils/Logutil";
|
import { log } from "src/utils/Logutil";
|
||||||
|
import {getDefaultTemplateContent} from "../../constant/DefaultTemplateContent";
|
||||||
|
import {FolderSuggest} from "@App/setting/model/FolderSuggest";
|
||||||
|
|
||||||
|
|
||||||
export function createFileSelectionSetting({
|
export function createFileSelectionSetting({name, desc, placeholder, key, manager
|
||||||
name, desc, placeholder, key, manager,
|
|
||||||
}: CreateTemplateSelectParams) {
|
}: CreateTemplateSelectParams) {
|
||||||
return (setting: Setting) => {
|
return (setting: Setting) => {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
setting.setName( i18nHelper.getMessage(name));
|
setting.setName(i18nHelper.getMessage(name));
|
||||||
|
|
||||||
const templateDesc = new DocumentFragment();
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
templateDesc.createDiv().innerHTML = i18nHelper.getMessage(desc) + `<br> <text class="obsidian_douban_settings_desc has_error" >不存在文件夹</> `;
|
setting.setDesc(i18nHelper.getMessage(desc));
|
||||||
setting.setDesc(templateDesc);
|
|
||||||
setting.addSearch(async (search: SearchComponent) => {
|
setting.addSearch(async (search: SearchComponent) => {
|
||||||
const [oldValue, defaultVal] = manager.getSetting(key);
|
const [oldValue, defaultVal] = manager.getSetting(key);
|
||||||
let v = defaultVal;
|
let v = defaultVal;
|
||||||
if (oldValue) {
|
if (oldValue) {
|
||||||
v = oldValue;
|
v = oldValue;
|
||||||
}
|
}
|
||||||
const fs = new FileSuggest(manager.app, search.inputEl);
|
new FileSuggest(manager.app, search.inputEl);
|
||||||
|
// @ts-ignore
|
||||||
search.setValue(v);
|
search.setValue(v);
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
search.setPlaceholder(i18nHelper.getMessage(placeholder));
|
search.setPlaceholder(i18nHelper.getMessage(placeholder));
|
||||||
search.onChange(async (value: string) => {
|
search.onChange(async (value: string) => {
|
||||||
log.trace(`hange to : ${value} `)
|
|
||||||
manager.updateSetting(key, value);
|
manager.updateSetting(key, value);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
setting.addExtraButton((button) => {
|
||||||
|
button
|
||||||
|
.setIcon('copy')
|
||||||
|
.setTooltip(i18nHelper.getMessage('121901'))
|
||||||
|
.onClick(async () => {
|
||||||
|
// @ts-ignore
|
||||||
|
navigator.clipboard.writeText(getDefaultTemplateContent(key))
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -49,9 +56,9 @@ export function createFolderSelectionSetting({
|
|||||||
if (oldValue) {
|
if (oldValue) {
|
||||||
v = oldValue;
|
v = oldValue;
|
||||||
}
|
}
|
||||||
new FileSuggest(manager.app, search.inputEl);
|
new FolderSuggest(manager.app, search.inputEl);
|
||||||
search
|
// @ts-ignore
|
||||||
.setValue(v)
|
search.setValue(v)
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
.setPlaceholder(i18nHelper.getMessage(placeholder))
|
.setPlaceholder(i18nHelper.getMessage(placeholder))
|
||||||
.onChange(async (value: string) => {
|
.onChange(async (value: string) => {
|
||||||
|
|||||||
@ -3,6 +3,8 @@ import { DEFAULT_SETTINGS } from "src/constant/DefaultSettings";
|
|||||||
import DoubanPlugin from "../../../main";
|
import DoubanPlugin from "../../../main";
|
||||||
import { DoubanPluginSetting } from "./model/DoubanPluginSetting";
|
import { DoubanPluginSetting } from "./model/DoubanPluginSetting";
|
||||||
import {createFileSelectionSetting, createFolderSelectionSetting} from "@App/setting/SettingHelper";
|
import {createFileSelectionSetting, createFolderSelectionSetting} from "@App/setting/SettingHelper";
|
||||||
|
import {i18nHelper} from "../../lang/helper";
|
||||||
|
import {PersonNameMode, PersonNameModeRecords} from "../../constant/Constsant";
|
||||||
|
|
||||||
export default class SettingsManager {
|
export default class SettingsManager {
|
||||||
app: App;
|
app: App;
|
||||||
@ -17,24 +19,446 @@ export default class SettingsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getSetting(key: keyof DoubanPluginSetting) {
|
getSetting(key: keyof DoubanPluginSetting) {
|
||||||
|
|
||||||
return [this.settings[key], DEFAULT_SETTINGS[key]];
|
return [this.settings[key], DEFAULT_SETTINGS[key]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async updateSetting(key: keyof DoubanPluginSetting, value:any) {
|
async updateSetting(key: keyof DoubanPluginSetting, value:any) {
|
||||||
|
// @ts-ignore
|
||||||
this.settings[key] = value;
|
this.settings[key] = value;
|
||||||
await this.plugin.saveSettings();
|
await this.plugin.saveSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
constructUI(contenterEl: HTMLElement) {
|
constructBasicUI(containerEl: HTMLElement){
|
||||||
new Setting(contenterEl).then(createFileSelectionSetting({name: '120101', desc: '120102', placeholder: '121701', key: 'movieTemplateFile', manager: this}));
|
containerEl.createEl('h3', { text: i18nHelper.getMessage('1210') });
|
||||||
new Setting(contenterEl).then(createFileSelectionSetting({name: '120201', desc: '120202', placeholder: '121701', key: 'bookTemplateFile', manager: this}));
|
new Setting(containerEl).setName(i18nHelper.getMessage('120001'))
|
||||||
new Setting(contenterEl).then(createFileSelectionSetting({name: '120301', desc: '120302', placeholder: '121701', key: 'musicTemplateFile', manager: this}));
|
.then((setting) => {
|
||||||
new Setting(contenterEl).then(createFileSelectionSetting({name: '120401', desc: '120402', placeholder: '121701', key: 'noteTemplateFile', manager: this}));
|
setting.addText((textField) => {
|
||||||
new Setting(contenterEl).then(createFileSelectionSetting({name: '121301', desc: '121302', placeholder: '121701', key: 'gameTemplateFile', manager: this}));
|
setting.descEl.appendChild(
|
||||||
new Setting(contenterEl).then(createFileSelectionSetting({name: '121301', desc: '121302', placeholder: '121701', key: 'teleplayTemplateFile', manager: this}));
|
createFragment((frag) => {
|
||||||
new Setting(contenterEl).then(createFolderSelectionSetting({name: '121301', desc: '121302', placeholder: '121701', key: 'dataFilePath', manager: this}));
|
frag.appendText(i18nHelper.getMessage('120002'));
|
||||||
|
frag.createEl('br');
|
||||||
|
frag.appendText(i18nHelper.getMessage('120003'));
|
||||||
|
frag.createEl(
|
||||||
|
'a',
|
||||||
|
{
|
||||||
|
text: i18nHelper.getMessage('120901'),
|
||||||
|
href: 'https://www.douban.com',
|
||||||
|
},
|
||||||
|
(a) => {
|
||||||
|
a.setAttr('target', '_blank');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
frag.createEl('br');
|
||||||
|
frag.appendText(i18nHelper.getMessage('120004'));
|
||||||
|
frag.createEl('br');
|
||||||
|
frag.appendText(i18nHelper.getMessage('120005'));
|
||||||
|
frag.createEl('br');
|
||||||
|
frag.appendText(i18nHelper.getMessage('120006'));
|
||||||
|
frag.createEl('br');
|
||||||
|
})
|
||||||
|
);
|
||||||
|
textField.inputEl.addClass("obsidian_douban_settings_textField");
|
||||||
|
textField
|
||||||
|
.setPlaceholder(DEFAULT_SETTINGS.searchUrl)
|
||||||
|
.setValue(this.plugin.settings.searchUrl)
|
||||||
|
.onChange(async (value) => {
|
||||||
|
this.plugin.settings.searchUrl = value;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
new Setting(containerEl).setName(i18nHelper.getMessage('120501')).then((setting) => {
|
||||||
|
setting.addMomentFormat((mf) => {
|
||||||
|
setting.descEl.appendChild(
|
||||||
|
createFragment((frag) => {
|
||||||
|
frag.appendText(
|
||||||
|
i18nHelper.getMessage('120503')
|
||||||
|
);
|
||||||
|
frag.createEl('br');
|
||||||
|
frag.appendText(i18nHelper.getMessage('120506') + ' ');
|
||||||
|
frag.createEl(
|
||||||
|
'a',
|
||||||
|
{
|
||||||
|
text: i18nHelper.getMessage('120508'),
|
||||||
|
href: 'https://momentjs.com/docs/#/displaying/format/',
|
||||||
|
},
|
||||||
|
(a) => {
|
||||||
|
a.setAttr('target', '_blank');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
frag.createEl('br');
|
||||||
|
frag.appendText(i18nHelper.getMessage('120507') + ': ');
|
||||||
|
mf.setSampleEl(frag.createEl('b', {cls: 'u-pop'}));
|
||||||
|
frag.createEl('br');
|
||||||
|
})
|
||||||
|
);
|
||||||
|
mf.setPlaceholder(DEFAULT_SETTINGS.dateFormat);
|
||||||
|
mf.setValue(this.plugin.settings.dateFormat)
|
||||||
|
mf.onChange(async (value) => {
|
||||||
|
this.plugin.settings.dateFormat = value;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
new Setting(containerEl).setName(i18nHelper.getMessage('120502')).then((setting) => {
|
||||||
|
setting.addMomentFormat((mf) => {
|
||||||
|
setting.descEl.appendChild(
|
||||||
|
createFragment((frag) => {
|
||||||
|
frag.appendText(
|
||||||
|
i18nHelper.getMessage('120504')
|
||||||
|
);
|
||||||
|
frag.createEl('br');
|
||||||
|
frag.appendText(i18nHelper.getMessage('120506') + ' ');
|
||||||
|
frag.createEl(
|
||||||
|
'a',
|
||||||
|
{
|
||||||
|
text: i18nHelper.getMessage('120508'),
|
||||||
|
href: 'https://momentjs.com/docs/#/displaying/format/',
|
||||||
|
},
|
||||||
|
(a) => {
|
||||||
|
a.setAttr('target', '_blank');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
frag.createEl('br');
|
||||||
|
frag.appendText(i18nHelper.getMessage('120507') + ': ');
|
||||||
|
mf.setSampleEl(frag.createEl('b', {cls: 'u-pop'}));
|
||||||
|
frag.createEl('br');
|
||||||
|
})
|
||||||
|
);
|
||||||
|
mf.setPlaceholder(DEFAULT_SETTINGS.timeFormat);
|
||||||
|
mf.setValue(this.plugin.settings.timeFormat)
|
||||||
|
mf.onChange(async (value) => {
|
||||||
|
this.plugin.settings.timeFormat = value;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
new Setting(containerEl)
|
||||||
|
.setName(i18nHelper.getMessage('121401'))
|
||||||
|
.setDesc(i18nHelper.getMessage('121402'))
|
||||||
|
.addToggle((toggleComponent) => {
|
||||||
|
toggleComponent
|
||||||
|
// .setTooltip(i18nHelper.getMessage('121403'))
|
||||||
|
.setValue(this.plugin.settings.statusBar)
|
||||||
|
.onChange(async (value) => {
|
||||||
|
this.plugin.settings.statusBar = value;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
constructTemplateUI(containerEl: HTMLElement) {
|
||||||
|
containerEl.createEl('h3', { text: i18nHelper.getMessage('1203') });
|
||||||
|
containerEl.createEl('p', { text: i18nHelper.getMessage('1204') });
|
||||||
|
new Setting(containerEl).setDesc(i18nHelper.getMessage('1205'))
|
||||||
|
|
||||||
|
new Setting(containerEl).then(createFileSelectionSetting({name: '120101', desc: '120102', placeholder: '121701', key: 'movieTemplateFile', manager: this}));
|
||||||
|
new Setting(containerEl).then(createFileSelectionSetting({name: '120201', desc: '120202', placeholder: '121701', key: 'bookTemplateFile', manager: this}));
|
||||||
|
new Setting(containerEl).then(createFileSelectionSetting({name: '120301', desc: '120302', placeholder: '121701', key: 'musicTemplateFile', manager: this}));
|
||||||
|
new Setting(containerEl).then(createFileSelectionSetting({name: '120401', desc: '120402', placeholder: '121701', key: 'noteTemplateFile', manager: this}));
|
||||||
|
new Setting(containerEl).then(createFileSelectionSetting({name: '121301', desc: '121302', placeholder: '121701', key: 'gameTemplateFile', manager: this}));
|
||||||
|
new Setting(containerEl).then(createFileSelectionSetting({name: '121801', desc: '121802', placeholder: '121701', key: 'teleplayTemplateFile', manager: this}));
|
||||||
|
}
|
||||||
|
|
||||||
|
constructOutUI(containerEl: HTMLElement) {
|
||||||
|
containerEl.createEl('h3', { text: i18nHelper.getMessage('1220') });
|
||||||
|
new Setting(containerEl).then(createFolderSelectionSetting({name: '121501', desc: '121502', placeholder: '121503', key: 'dataFilePath', manager: this}));
|
||||||
|
let outfolder = containerEl.createDiv({ cls: 'settings-item' });
|
||||||
|
this.constructOutFolderUI(outfolder);
|
||||||
|
|
||||||
|
new Setting(containerEl)
|
||||||
|
.setName(i18nHelper.getMessage('120601'))
|
||||||
|
.setDesc(i18nHelper.getMessage('120602'))
|
||||||
|
.addText((textField) => {
|
||||||
|
textField.setPlaceholder(DEFAULT_SETTINGS.arraySpilt)
|
||||||
|
.setValue(this.plugin.settings.arraySpilt)
|
||||||
|
.onChange(async (value) => {
|
||||||
|
this.plugin.settings.arraySpilt = value;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
new Setting(containerEl).setName(i18nHelper.getMessage('121201')).then((setting) => {
|
||||||
|
setting.addDropdown((dropdwon) => {
|
||||||
|
setting.descEl.appendChild(
|
||||||
|
createFragment((frag) => {
|
||||||
|
frag.appendText(i18nHelper.getMessage('121202'));
|
||||||
|
frag.createEl('br');
|
||||||
|
frag.appendText(i18nHelper.getMessage('121203'));
|
||||||
|
frag.createEl('br');
|
||||||
|
frag.appendText(i18nHelper.getMessage('121204'));
|
||||||
|
frag.createEl('br');
|
||||||
|
frag.appendText(i18nHelper.getMessage('121205'));
|
||||||
|
frag.createEl('br');
|
||||||
|
})
|
||||||
|
);
|
||||||
|
// dropdwon.inputEl.addClass("settings_area");
|
||||||
|
// dropdwon.inputEl.setAttr("rows", 10);
|
||||||
|
dropdwon.addOption(PersonNameMode.CH_NAME, PersonNameModeRecords.CH)
|
||||||
|
dropdwon.addOption(PersonNameMode.EN_NAME, PersonNameModeRecords.EN)
|
||||||
|
dropdwon.addOption(PersonNameMode.CH_EN_NAME, PersonNameModeRecords.CH_EN)
|
||||||
|
dropdwon.setValue(this.plugin.settings.personNameMode)
|
||||||
|
.onChange(async (value: string) => {
|
||||||
|
this.plugin.settings.personNameMode = value as PersonNameMode;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
constructTemplateVariablesUI(containerEl: HTMLElement) {
|
||||||
|
containerEl.createEl('h3', { text: i18nHelper.getMessage('1230') });
|
||||||
|
containerEl.createEl('p', { text: i18nHelper.getMessage('122003') });
|
||||||
|
|
||||||
|
const basicVariablesTable = new DocumentFragment();
|
||||||
|
basicVariablesTable.createDiv().innerHTML = `
|
||||||
|
${i18nHelper.getMessage('122004')}
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<table border="1">
|
||||||
|
<tr>
|
||||||
|
<th>${i18nHelper.getMessage('300101')}</th>
|
||||||
|
<th>${i18nHelper.getMessage('300102')}</th>
|
||||||
|
<th>${i18nHelper.getMessage('300103')}</th>
|
||||||
|
<th>${i18nHelper.getMessage('300104')}</th>
|
||||||
|
<th>${i18nHelper.getMessage('300105')}</th>
|
||||||
|
<th>${i18nHelper.getMessage('300106')}</th>
|
||||||
|
<th>${i18nHelper.getMessage('300107')}</th>
|
||||||
|
<th>${i18nHelper.getMessage('300108')}</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>id</td>
|
||||||
|
<td>${i18nHelper.getMessage('310101')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310201')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310301')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310401')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310501')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310601')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310701')}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>title</td>
|
||||||
|
<td>${i18nHelper.getMessage('310102')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310202')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310302')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310402')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310502')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310602')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310702')}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>type</td>
|
||||||
|
<td>${i18nHelper.getMessage('310103')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310203')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310303')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310403')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310503')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310603')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310703')}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>score</td>
|
||||||
|
<td>${i18nHelper.getMessage('310104')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310204')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310304')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310404')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310504')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310604')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310704')}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>image</td>
|
||||||
|
<td>${i18nHelper.getMessage('310105')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310205')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310305')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310405')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310505')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310605')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310705')}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>url</td>
|
||||||
|
<td>${i18nHelper.getMessage('310106')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310206')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310306')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310406')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310506')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310606')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310706')}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>desc</td>
|
||||||
|
<td>${i18nHelper.getMessage('310107')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310207')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310307')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310407')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310507')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310607')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310707')}</td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>publisher</td>
|
||||||
|
<td>${i18nHelper.getMessage('310108')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310208')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310308')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310408')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310508')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310608')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310708')}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>datePublished</td>
|
||||||
|
<td>${i18nHelper.getMessage('310109')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310209')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310309')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310409')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310509')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310609')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310709')}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>genre</td>
|
||||||
|
<td>${i18nHelper.getMessage('310110')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310210')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310310')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310410')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310510')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310610')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310710')}</td>
|
||||||
|
</tr>
|
||||||
|
</table>`;
|
||||||
|
|
||||||
|
new Setting(containerEl)
|
||||||
|
.setName(i18nHelper.getMessage('122001'))
|
||||||
|
.setDesc(basicVariablesTable)
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
const extraVariablesTable = new DocumentFragment();
|
||||||
|
extraVariablesTable.createDiv().innerHTML = `
|
||||||
|
${i18nHelper.getMessage('122004')}
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<table border="1">
|
||||||
|
<tr>
|
||||||
|
<th>${i18nHelper.getMessage('300101')}</th>
|
||||||
|
<th>${i18nHelper.getMessage('300102')}</th>
|
||||||
|
<th>${i18nHelper.getMessage('300103')}</th>
|
||||||
|
<th>${i18nHelper.getMessage('300104')}</th>
|
||||||
|
<th>${i18nHelper.getMessage('300105')}</th>
|
||||||
|
<th>${i18nHelper.getMessage('300106')}</th>
|
||||||
|
<th>${i18nHelper.getMessage('300107')}</th>
|
||||||
|
<th>${i18nHelper.getMessage('300108')}</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>${i18nHelper.getMessage('320101')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310111')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310211')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310311')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310411')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310511')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310611')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310711')}</th>
|
||||||
|
</tr>
|
||||||
|
<td>${i18nHelper.getMessage('320102')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310112')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310212')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310312')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310412')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310512')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310612')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310712')}</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>${i18nHelper.getMessage('320103')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310113')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310213')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310313')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310413')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310513')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310613')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310713')}</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>${i18nHelper.getMessage('320104')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310114')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310214')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310314')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310414')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310514')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310614')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310714')}</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>${i18nHelper.getMessage('320105')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310115')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310215')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310315')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310415')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310515')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310615')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310715')}</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>${i18nHelper.getMessage('320106')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310116')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310216')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310316')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310416')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310516')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310616')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310716')}</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>${i18nHelper.getMessage('320107')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310117')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310217')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310317')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310417')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310517')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310617')}</th>
|
||||||
|
<td>${i18nHelper.getMessage('310717')}</th>
|
||||||
|
</tr>
|
||||||
|
</table>`;
|
||||||
|
|
||||||
|
|
||||||
|
new Setting(containerEl)
|
||||||
|
.setName(i18nHelper.getMessage('122002'))
|
||||||
|
.setDesc(extraVariablesTable);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructOutFolderUI(containerEl: HTMLElement) {
|
||||||
|
containerEl.empty();
|
||||||
|
const dataFilePathSetting = new Setting(containerEl)
|
||||||
|
.setName(i18nHelper.getMessage('121601'))
|
||||||
|
.setDesc(i18nHelper.getMessage('121602'))
|
||||||
|
.addText((textField) => {
|
||||||
|
textField.setPlaceholder(DEFAULT_SETTINGS.dataFileNamePath)
|
||||||
|
.setValue(this.plugin.settings.dataFileNamePath)
|
||||||
|
.onChange(async (value) => {
|
||||||
|
this.plugin.settings.dataFileNamePath = value;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
dataFilePathSetting.addExtraButton((button) => {
|
||||||
|
button
|
||||||
|
.setIcon('reset')
|
||||||
|
.setTooltip(i18nHelper.getMessage('121902'))
|
||||||
|
.onClick(async () => {
|
||||||
|
this.plugin.settings.dataFileNamePath = DEFAULT_SETTINGS.dataFileNamePath;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
this.constructOutFolderUI(containerEl)
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,13 +1,5 @@
|
|||||||
|
|
||||||
export interface DoubanPluginSetting {
|
export interface DoubanPluginSetting {
|
||||||
//==兼容之前的配置
|
|
||||||
movieTemplate: string,
|
|
||||||
bookTemplate: string,
|
|
||||||
musicTemplate: string,
|
|
||||||
noteTemplate: string,
|
|
||||||
gameTemplate: string,
|
|
||||||
teleplayTemplate: string,
|
|
||||||
//一段时间后会被删除,以上
|
|
||||||
movieTemplateFile: string,
|
movieTemplateFile: string,
|
||||||
bookTemplateFile: string,
|
bookTemplateFile: string,
|
||||||
musicTemplateFile: string,
|
musicTemplateFile: string,
|
||||||
@ -22,5 +14,6 @@ export interface DoubanPluginSetting {
|
|||||||
personNameMode: string,
|
personNameMode: string,
|
||||||
dataFilePath: string,
|
dataFilePath: string,
|
||||||
dataFileNamePath: string,
|
dataFileNamePath: string,
|
||||||
|
statusBar: boolean,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import {App, normalizePath, Platform} from "obsidian";
|
|||||||
import { log } from "src/utils/Logutil";
|
import { log } from "src/utils/Logutil";
|
||||||
import DoubanPlugin from "../../main";
|
import DoubanPlugin from "../../main";
|
||||||
import {FileUtil} from "../utils/FileUtil";
|
import {FileUtil} from "../utils/FileUtil";
|
||||||
|
import {i18nHelper} from "../lang/helper";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文件处理
|
* 文件处理
|
||||||
@ -92,7 +93,7 @@ export default class FileHandler {
|
|||||||
const fileExists = await adapter.exists(filePath);
|
const fileExists = await adapter.exists(filePath);
|
||||||
if (fileExists) {
|
if (fileExists) {
|
||||||
// If the file already exists, respond with error
|
// If the file already exists, respond with error
|
||||||
throw new Error(`${filePath} already exists`);
|
throw new Error(i18nHelper.getMessage('110201').replace('{0}', filePath??''));
|
||||||
}
|
}
|
||||||
if (dir !== '') {
|
if (dir !== '') {
|
||||||
// If `input` includes a directory part, create it
|
// If `input` includes a directory part, create it
|
||||||
@ -123,7 +124,7 @@ export default class FileHandler {
|
|||||||
err
|
err
|
||||||
);
|
);
|
||||||
//TODO i18n
|
//TODO i18n
|
||||||
log.error('Failed to read the template')
|
log.error(i18nHelper.getMessage('110202').replace('{0}', normalizedTemplatePath ?? ''));
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,8 @@ export default {
|
|||||||
'110005': `Cancel`,
|
'110005': `Cancel`,
|
||||||
'110006': `sync douban broadcast ot Obsidian`,
|
'110006': `sync douban broadcast ot Obsidian`,
|
||||||
'110101': 'search douban and create file',
|
'110101': 'search douban and create file',
|
||||||
|
'110201': `{0} already exists`,
|
||||||
|
'110202': `{0} template can not read`,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -20,20 +22,27 @@ export default {
|
|||||||
'120005': `The redirected web page address is the search address,`,
|
'120005': `The redirected web page address is the search address,`,
|
||||||
'120006': `Just copy the web address to the current input box.`,
|
'120006': `Just copy the web address to the current input box.`,
|
||||||
|
|
||||||
'120101': `Movie Content Template`,
|
'1210': `Basic Setting`,
|
||||||
'120102': `Set markdown Movie template for extract to be inserted.`,
|
'1203': `Template Setting`,
|
||||||
|
'1220': `Output Setting`,
|
||||||
|
'1230': `Usable Variables`,
|
||||||
|
'1204': `Set template file path. If keep empty, it will use the default template file to create file. All the usable variables at the end.👇`,
|
||||||
|
'1205': `🧡Tip: You can click the 'Copy' button to copy default template content, then create and paste to your own template file. After that, back to select the file. `,
|
||||||
|
|
||||||
|
|
||||||
|
'120101': `Movie Template File`,
|
||||||
|
'120102': `This template will be used when creating new notes for Movie from Obsidian-Douban.`,
|
||||||
'120103': `Available template variables are :`,
|
'120103': `Available template variables are :`,
|
||||||
'120104': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
'120104': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
||||||
'120105': `{{url}}, {{desc}}, {{datePublished}}, {{genre}}, `,
|
'120105': `{{url}}, {{desc}}, {{datePublished}}, {{genre}}, `,
|
||||||
'120106': `{{originalTitle}},{{director}}, {{author}},`,
|
'120106': `{{originalTitle}},{{director}}, {{author}},`,
|
||||||
'120107': ` {{actor}}`,
|
'120107': ` {{actor}}`,
|
||||||
|
'120110': `Movie Template File`,
|
||||||
|
|
||||||
'120130': `Create New File Path`,
|
|
||||||
'120131': `Create New File Name`,
|
|
||||||
|
|
||||||
|
|
||||||
'120201': `Book Template File`,
|
'120201': `Book Template File`,
|
||||||
'120202': `Set markdown Book template for extract to be inserted.`,
|
'120202': `This template will be used when creating new notes for Movie from Obsidian-Douban. `,
|
||||||
'120203': `Available Book template variables are :`,
|
'120203': `Available Book template variables are :`,
|
||||||
'120204': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
'120204': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
||||||
'120205': `{{url}}, {{desc}}, {{datePublished}}, {{publisher}}`,
|
'120205': `{{url}}, {{desc}}, {{datePublished}}, {{publisher}}`,
|
||||||
@ -42,7 +51,7 @@ export default {
|
|||||||
'120208': `{{series}}, {{binding}}, {{menu}}`,
|
'120208': `{{series}}, {{binding}}, {{menu}}`,
|
||||||
|
|
||||||
'120301': `Music Template File`,
|
'120301': `Music Template File`,
|
||||||
'120302': `Set markdown Music template for extract to be inserted.`,
|
'120302': `This template will be used when creating new notes for Music from Obsidian-Douban.`,
|
||||||
'120303': `Available Music template variables are :`,
|
'120303': `Available Music template variables are :`,
|
||||||
'120304': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
'120304': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
||||||
'120305': `{{url}}, {{desc}}, {{datePublished}}, {{genre}},`,
|
'120305': `{{url}}, {{desc}}, {{datePublished}}, {{genre}},`,
|
||||||
@ -50,7 +59,7 @@ export default {
|
|||||||
'120307': `{{barcode}}, {{records}}`,
|
'120307': `{{barcode}}, {{records}}`,
|
||||||
|
|
||||||
'120401': `Article Template File`,
|
'120401': `Article Template File`,
|
||||||
'120402': `Set markdown Article template for extract to be inserted.`,
|
'120402': `This template will be used when creating new notes for Article from Obsidian-Douban.`,
|
||||||
'120403': `Available Article template variables are :`,
|
'120403': `Available Article template variables are :`,
|
||||||
'120404': `{{id}}, {{title}}, {{type}}, {{image}},`,
|
'120404': `{{id}}, {{title}}, {{type}}, {{image}},`,
|
||||||
'120405': `{{url}}, {{desc}}, {{datePublished}}`,
|
'120405': `{{url}}, {{desc}}, {{datePublished}}`,
|
||||||
@ -58,12 +67,15 @@ export default {
|
|||||||
'120407': `{{timePublished}}`,
|
'120407': `{{timePublished}}`,
|
||||||
|
|
||||||
'121301': `Game Template File`,
|
'121301': `Game Template File`,
|
||||||
'121302': `Set markdown Game template for extract to be inserted.`,
|
'121302': `This template will be used when creating new notes for Game from Obsidian-Douban.`,
|
||||||
'121303': `Available Game template variables are :`,
|
'121303': `Available Game template variables are :`,
|
||||||
'121304': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
'121304': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
||||||
'121305': `{{url}}, {{desc}}, {{publisher}}, {{datePublished}}`,
|
'121305': `{{url}}, {{desc}}, {{publisher}}, {{datePublished}}`,
|
||||||
'121306': `{{genre}}, {{aliases}}, {{developer}}, {{platform}}`,
|
'121306': `{{genre}}, {{aliases}}, {{developer}}, {{platform}}`,
|
||||||
|
|
||||||
|
'121801': `Teleplay Template File`,
|
||||||
|
'121802': `This template will be used when creating new notes for Teleplay from Obsidian-Douban.`,
|
||||||
|
|
||||||
'120501': `Date Format`,
|
'120501': `Date Format`,
|
||||||
'120502': `Time Format`,
|
'120502': `Time Format`,
|
||||||
'120503': `This format will be used when available template variables contain date.`,
|
'120503': `This format will be used when available template variables contain date.`,
|
||||||
@ -95,19 +107,20 @@ export default {
|
|||||||
'121502': `Nodes created from Obsidian-Douban will be placed in this folder, If blank, they will be placed in the default location for this vault. `,
|
'121502': `Nodes created from Obsidian-Douban will be placed in this folder, If blank, they will be placed in the default location for this vault. `,
|
||||||
'121503': `Default Folder`,
|
'121503': `Default Folder`,
|
||||||
|
|
||||||
|
|
||||||
'121601': `Note Name`,
|
'121601': `Note Name`,
|
||||||
'121602': `Nodes created from Obsidian-Douban will use this fileName(also support filePath), If blank, they will be created by default name. `,
|
'121602': `Nodes created from Obsidian-Douban will use this fileName as template(also support filePath),
|
||||||
|
If blank, they will be created by default name. support all basic template variables. example: {{type}}/{{title}}`,
|
||||||
|
|
||||||
'121701': `Input And Search Template`,
|
'121701': `Search Template File`,
|
||||||
'121702': `Movie created from Obsidian-Douban will be placed in this folder, If blank, they will be placed in the default location for this vault. `,
|
// '121702': `Movie created from Obsidian-Douban will be placed in this folder, If blank, they will be placed in the default location for this vault. `,
|
||||||
'121703': `Default`,
|
'121703': `Default`,
|
||||||
|
|
||||||
|
'121901': `Copy default template content to clipboard`,
|
||||||
|
'121902': `Reset to default value`,
|
||||||
|
|
||||||
|
|
||||||
//error
|
//error
|
||||||
'130101': `Fetch Data Error, You can go to Github add Issues`,
|
'130101': `Fetch Data Error, You can go to Github add Issues`,
|
||||||
'130201': `Obsidian Douban Plugin Error: `,
|
|
||||||
'130301': `Obsidian Douban Plugin Warn: `,
|
|
||||||
'140101': `Not support for current type. You can add Issues at Github:Wanxp/obsidian-douban`,
|
'140101': `Not support for current type. You can add Issues at Github:Wanxp/obsidian-douban`,
|
||||||
|
|
||||||
'140201': `[Obsidian Douban]: searching '{0}'...`,
|
'140201': `[Obsidian Douban]: searching '{0}'...`,
|
||||||
@ -123,7 +136,170 @@ export default {
|
|||||||
'200101': `. `,
|
'200101': `. `,
|
||||||
|
|
||||||
'210101': `Default`,
|
'210101': `Default`,
|
||||||
'210201': `Search...`
|
'210201': `Search...`,
|
||||||
|
|
||||||
|
'122001': `Basic Variables`,
|
||||||
|
'122002': `Extra Variables`,
|
||||||
|
'122003': `Basic Variables must has value, Extra Variables can be empty`,
|
||||||
|
'122004': `To use the template variables, you need to wrap them in double curly brackets. For example, {{title}} will be replaced with the title of the note.`,
|
||||||
|
|
||||||
|
'410101': `Unknown`,
|
||||||
|
|
||||||
|
//参数
|
||||||
|
'300101': `参数`,
|
||||||
|
'300102': `书籍`,
|
||||||
|
'300103': `电影`,
|
||||||
|
'300104': `电视剧`,
|
||||||
|
'300105': `音乐`,
|
||||||
|
'300106': `日记`,
|
||||||
|
'300107': `游戏`,
|
||||||
|
'300108': `广播`,
|
||||||
|
|
||||||
|
//书籍
|
||||||
|
'310101': `豆瓣ID`,
|
||||||
|
'310102': `书名`,
|
||||||
|
'310103': `类型`,
|
||||||
|
'310104': `评分`,
|
||||||
|
'310105': `封面URL`,
|
||||||
|
'310106': `豆瓣网址`,
|
||||||
|
'310107': `内容简介`,
|
||||||
|
'310108': `出版社`,
|
||||||
|
'310109': `出版时间`,
|
||||||
|
'310110': `其他`,
|
||||||
|
'310111': `author:原作者`,
|
||||||
|
'310112': `translator:译者`,
|
||||||
|
'310113': `isbn:isbn`,
|
||||||
|
'310114': `originalTitle:原作名`,
|
||||||
|
'310115': `subTitle:副标题`,
|
||||||
|
'310116': `totalPage:页数`,
|
||||||
|
'310117': `binding:装帧`,
|
||||||
|
|
||||||
|
//电影
|
||||||
|
'310201': `豆瓣ID`,
|
||||||
|
'310202': `电影名称`,
|
||||||
|
'310203': `类型`,
|
||||||
|
'310204': `评分`,
|
||||||
|
'310205': `封面`,
|
||||||
|
'310206': `豆瓣网址`,
|
||||||
|
'310207': `简介`,
|
||||||
|
'310208': `(未知)`,
|
||||||
|
'310209': `上映日期`,
|
||||||
|
'310210': `类型`,
|
||||||
|
'310211': `director:导演`,
|
||||||
|
'310212': `author:编剧`,
|
||||||
|
'310213': `actor:主演`,
|
||||||
|
'310214': `originalTitle:原作名`,
|
||||||
|
'310215': `-`,
|
||||||
|
'310216': `-`,
|
||||||
|
'310217': `-`,
|
||||||
|
|
||||||
|
|
||||||
|
//电视剧
|
||||||
|
'310301': `豆瓣ID`,
|
||||||
|
'310302': `电视剧名称`,
|
||||||
|
'310303': `类型`,
|
||||||
|
'310304': `评分`,
|
||||||
|
'310305': `封面`,
|
||||||
|
'310306': `豆瓣网址`,
|
||||||
|
'310307': `简介`,
|
||||||
|
'310308': `(未知)`,
|
||||||
|
'310309': `上映日期`,
|
||||||
|
'310310': `类型`,
|
||||||
|
'310311': `director:导演`,
|
||||||
|
'310312': `author:编剧`,
|
||||||
|
'310313': `actor:主演`,
|
||||||
|
'310314': `originalTitle:原作名`,
|
||||||
|
'310315': `-`,
|
||||||
|
'310316': `-`,
|
||||||
|
'310317': `-`,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//音乐
|
||||||
|
'310401': `豆瓣ID`,
|
||||||
|
'310402': `音乐名`,
|
||||||
|
'310403': `类型`,
|
||||||
|
'310404': `评分`,
|
||||||
|
'310405': `封面`,
|
||||||
|
'310406': `豆瓣网址`,
|
||||||
|
'310407': `简介`,
|
||||||
|
'310408': `出版者`,
|
||||||
|
'310409': `发行时间`,
|
||||||
|
'310410': `流派`,
|
||||||
|
'310411': `actor: 表演者`,
|
||||||
|
'310412': `albumType:专辑类型`,
|
||||||
|
'310413': `medium:介质`,
|
||||||
|
'310414': `records:唱片数`,
|
||||||
|
'310415': `barcode:条形码`,
|
||||||
|
'310416': `-`,
|
||||||
|
'310417': `-`,
|
||||||
|
|
||||||
|
//日记
|
||||||
|
'310501': `豆瓣ID`,
|
||||||
|
'310502': `日记标题`,
|
||||||
|
'310503': `类型`,
|
||||||
|
'310504': `评分`,
|
||||||
|
'310505': `图片`,
|
||||||
|
'310506': `豆瓣网址`,
|
||||||
|
'310507': `简介`,
|
||||||
|
'310508': `发布者`,
|
||||||
|
'310509': `发布时间`,
|
||||||
|
'310510': `(其它)`,
|
||||||
|
'310511': `author:作者`,
|
||||||
|
'310512': `(其它)`,
|
||||||
|
'310513': `authorUrl:作者网址`,
|
||||||
|
'310514': `content:日记内容`,
|
||||||
|
'310515': `-`,
|
||||||
|
'310516': `-`,
|
||||||
|
'310517': `-`,
|
||||||
|
|
||||||
|
//游戏
|
||||||
|
'310601': `豆瓣ID`,
|
||||||
|
'310602': `游戏名称`,
|
||||||
|
'310603': `类型`,
|
||||||
|
'310604': `评分`,
|
||||||
|
'310605': `封面`,
|
||||||
|
'310606': `豆瓣网址`,
|
||||||
|
'310607': `简介`,
|
||||||
|
'310608': `发行商`,
|
||||||
|
'310609': `发行日期`,
|
||||||
|
'310610': `类型`,
|
||||||
|
'310611': `aliases:别名`,
|
||||||
|
'310612': `developer:开发商`,
|
||||||
|
'310613': `platform:平台`,
|
||||||
|
'310614': `-`,
|
||||||
|
'310615': `-`,
|
||||||
|
'310616': `-`,
|
||||||
|
'310617': `-`,
|
||||||
|
|
||||||
|
//广播
|
||||||
|
'310701': `待开发`,
|
||||||
|
'310702': `待开发`,
|
||||||
|
'310703': `待开发`,
|
||||||
|
'310704': `待开发`,
|
||||||
|
'310705': `待开发`,
|
||||||
|
'310706': `待开发`,
|
||||||
|
'310707': `待开发`,
|
||||||
|
'310708': `待开发`,
|
||||||
|
'310709': `待开发`,
|
||||||
|
'310710': `待开发`,
|
||||||
|
'310711': `-`,
|
||||||
|
'310712': `-`,
|
||||||
|
'310713': `-`,
|
||||||
|
'310714': `-`,
|
||||||
|
'310715': `-`,
|
||||||
|
'310716': `-`,
|
||||||
|
'310717': `-`,
|
||||||
|
|
||||||
|
'320101': `扩展1`,
|
||||||
|
'320102': `扩展2`,
|
||||||
|
'320103': `扩展3`,
|
||||||
|
'320104': `扩展4`,
|
||||||
|
'320105': `扩展5`,
|
||||||
|
'320106': `扩展6`,
|
||||||
|
'320107': `扩展7`,
|
||||||
|
'320108': `扩展8`,
|
||||||
|
'320109': `扩展9`,
|
||||||
|
'320110': `扩展10`,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,6 +10,9 @@ export default {
|
|||||||
'110006': `同步豆瓣广播至Obsidian`,
|
'110006': `同步豆瓣广播至Obsidian`,
|
||||||
'110101': '搜索豆瓣并创建文档',
|
'110101': '搜索豆瓣并创建文档',
|
||||||
|
|
||||||
|
'110201': `{0} 文件已经存在.`,
|
||||||
|
'110202': `{0} 模板文件无法读取`,
|
||||||
|
|
||||||
|
|
||||||
//DoubanSettingTab
|
//DoubanSettingTab
|
||||||
'1201': `Obsidian-豆瓣`,
|
'1201': `Obsidian-豆瓣`,
|
||||||
@ -20,16 +23,25 @@ export default {
|
|||||||
'120005': `所跳转的网页地址即是搜索地址,`,
|
'120005': `所跳转的网页地址即是搜索地址,`,
|
||||||
'120006': `将网页地址复制到当前输入框即可,`,
|
'120006': `将网页地址复制到当前输入框即可,`,
|
||||||
|
|
||||||
'120101': `电影文本模板`,
|
'1210': `基础配置`,
|
||||||
'120102': `设置选择电影后导入的文本内容模板,`,
|
'1203': `模板配置`,
|
||||||
|
'1220': `输出配置`,
|
||||||
|
'1230': `可用参数`,
|
||||||
|
|
||||||
|
'1204': `配置对应类型的模板文件, 如果为空则使用默认的文件模板. 模板可使用的参数列举在最下面.👇 `,
|
||||||
|
'1205': `🧡提示: 建议点击右侧'复制'默认模板按钮, 然后在新建的文件中粘贴修改模板, 最后回到此处选择对应模板. `,
|
||||||
|
|
||||||
|
|
||||||
|
'120101': `电影模板文件`,
|
||||||
|
'120102': `设置选择电影后导入的文本内容模板文件. `,
|
||||||
'120103': `支持以下参数名称 :`,
|
'120103': `支持以下参数名称 :`,
|
||||||
'120104': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
'120104': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
||||||
'120105': `{{url}}, {{desc}}, {{datePublished}}, {{genre}}, `,
|
'120105': `{{url}}, {{desc}}, {{datePublished}}, {{genre}}, `,
|
||||||
'120106': `{{originalTitle}},{{director}}, {{author}},`,
|
'120106': `{{originalTitle}},{{director}}, {{author}},`,
|
||||||
'120107': ` {{actor}}`,
|
'120107': ` {{actor}}`,
|
||||||
|
|
||||||
'120201': `书籍文本模板`,
|
'120201': `书籍模板文件`,
|
||||||
'120202': `设置选择书籍后导入的文本内容模板,`,
|
'120202': `选择书籍后导入内容的模板文件. `,
|
||||||
'120203': `支持以下参数名称 :`,
|
'120203': `支持以下参数名称 :`,
|
||||||
'120204': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
'120204': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
||||||
'120205': `{{url}}, {{desc}}, {{datePublished}}, {{publisher}}`,
|
'120205': `{{url}}, {{desc}}, {{datePublished}}, {{publisher}}`,
|
||||||
@ -37,35 +49,38 @@ export default {
|
|||||||
'120207': `{{translator}}, {{isbn}}, {{price}}, {{totalPage}}`,
|
'120207': `{{translator}}, {{isbn}}, {{price}}, {{totalPage}}`,
|
||||||
'120208': `{{series}}, {{binding}}, {{menu}}`,
|
'120208': `{{series}}, {{binding}}, {{menu}}`,
|
||||||
|
|
||||||
|
'120301': `音乐模板文件`,
|
||||||
'120301': `音乐文本模板`,
|
'120302': `选择音乐后导入内容的模板文件. `,
|
||||||
'120302': `设置选择音乐后导入的文本内容模板,`,
|
|
||||||
'120303': `支持以下参数名称 :`,
|
'120303': `支持以下参数名称 :`,
|
||||||
'120304': `{{id}}, {{title}}, {{type}}, {{image}},`,
|
'120304': `{{id}}, {{title}}, {{type}}, {{image}},`,
|
||||||
'120305': `{{url}}, {{desc}}, {{datePublished}}`,
|
'120305': `{{url}}, {{desc}}, {{datePublished}}`,
|
||||||
'120306': `{{genre}}, {{actor}}, {{medium}}, {{albumType}},`,
|
'120306': `{{genre}}, {{actor}}, {{medium}}, {{albumType}},`,
|
||||||
'120307': `{{barcode}}, {{records}}`,
|
'120307': `{{barcode}}, {{records}}`,
|
||||||
|
|
||||||
'120401': `日记文本模板`,
|
'120401': `日记模板文件`,
|
||||||
'120402': `设置选择日记后导入的文本内容模板,`,
|
'120402': `设置选择电影后导入内容的模板文件. `,
|
||||||
'120403': `支持以下参数名称 :`,
|
'120403': `支持以下参数名称 :`,
|
||||||
'120404': `{{id}}, {{title}}, {{type}}, {{image}},`,
|
'120404': `{{id}}, {{title}}, {{type}}, {{image}},`,
|
||||||
'120405': `{{url}}, {{desc}}, {{datePublished}}`,
|
'120405': `{{url}}, {{desc}}, {{datePublished}}`,
|
||||||
'120406': `{{author}}, {{authorUrl}}, {{content}}`,
|
'120406': `{{author}}, {{authorUrl}}, {{content}}`,
|
||||||
'120407': `{{timePublished}}`,
|
'120407': `{{timePublished}}`,
|
||||||
|
|
||||||
'121301': `游戏文本模板`,
|
'121301': `游戏模板文件`,
|
||||||
'121302': `设置选择游戏后导入的文本内容模板,`,
|
'121302': `选择电影后导入内容的模板文件. `,
|
||||||
'121303': `支持以下参数名称 :`,
|
'121303': `支持以下参数名称 :`,
|
||||||
'121304': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
'121304': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
||||||
'121305': `{{url}}, {{desc}}, {{publisher}}, {{datePublished}}`,
|
'121305': `{{url}}, {{desc}}, {{publisher}}, {{datePublished}}`,
|
||||||
'121306': `{{genre}}, {{aliases}}, {{developer}}, {{platform}}`,
|
'121306': `{{genre}}, {{aliases}}, {{developer}}, {{platform}}`,
|
||||||
|
|
||||||
|
|
||||||
|
'121801': `电视剧模板文件`,
|
||||||
|
'121802': `选择电视剧后导入内容的模板文件. `,
|
||||||
|
|
||||||
|
|
||||||
'120501': `日期格式`,
|
'120501': `日期格式`,
|
||||||
'120503': `这个格式是给上面获取到的参数进行格式化日期时显示的内容 .`,
|
'120503': `这个格式是给下面获取到的参数进行格式化日期时显示的内容 .`,
|
||||||
'120502': `时间格式`,
|
'120502': `时间格式`,
|
||||||
'120504': `这个格式是给上面获取到的参数进行格式化时间时显示的内容 .`,
|
'120504': `这个格式是给下面获取到的参数进行格式化时间时显示的内容 .`,
|
||||||
'120506': `详细介绍请参考`,
|
'120506': `详细介绍请参考`,
|
||||||
'120507': `时间参数时间格式预览`,
|
'120507': `时间参数时间格式预览`,
|
||||||
'120508': `格式参考`,
|
'120508': `格式参考`,
|
||||||
@ -94,10 +109,12 @@ export default {
|
|||||||
'121402': `当在导入数据时, 是否需要在状态栏显示处理状态? `,
|
'121402': `当在导入数据时, 是否需要在状态栏显示处理状态? `,
|
||||||
|
|
||||||
'121501': `笔记存放位置`,
|
'121501': `笔记存放位置`,
|
||||||
'121502': `从Obsidian-Douban创建的笔记将会存放导该文件夹中. 如果为空,笔记将会存放到Obsidian的默认文件存放位置`,
|
'121502': `创建的笔记将会存放导该文件夹中. 如果为空, 笔记将会存放到Obsidian的默认位置`,
|
||||||
|
|
||||||
'121601': `笔记名称`,
|
'121601': `笔记名称`,
|
||||||
'121602': `从Obsidian-Douban创建的笔记将会使用次名称,支持所有通用的参数作为名称(如:{{type}},{{title}}等等). 如果为空, 笔记将会使用默认名称`,
|
'121602': `创建的笔记将会使用此名称作为模板, 支持所有'通用'的参数作为名称(如:{{type}}/{{title}}), 且支持路径, 比如: 'MyData/{{title}}'. 如果为空, 笔记将会使用默认名称. `,
|
||||||
|
|
||||||
|
'121901': `复制'默认'模板内容`,
|
||||||
|
|
||||||
'130101': `获取数据失败,您如有需要请至Github提交Issues`,
|
'130101': `获取数据失败,您如有需要请至Github提交Issues`,
|
||||||
'130102': `Obsidian Douban插件错误提示:`,
|
'130102': `Obsidian Douban插件错误提示:`,
|
||||||
@ -139,5 +156,182 @@ export default {
|
|||||||
subTitle: {desc: `副标题`, example: `社会心理学`},
|
subTitle: {desc: `副标题`, example: `社会心理学`},
|
||||||
binding: {desc: `装帧`, example: `精装`},
|
binding: {desc: `装帧`, example: `精装`},
|
||||||
totalPages: {desc: `页数`, example: `707`},
|
totalPages: {desc: `页数`, example: `707`},
|
||||||
}
|
},
|
||||||
|
|
||||||
|
'122001': `通用参数`,
|
||||||
|
'122002': `扩展参数`,
|
||||||
|
'122003': `通用参数一定有值不为空, 扩展参数可能为空`,
|
||||||
|
'122004': `以下参数使用时请用'{{}}'包裹, 举例: 参数title, 则使用时为{{title}}. `,
|
||||||
|
|
||||||
|
|
||||||
|
'410101': `其他`,
|
||||||
|
'410102': `未知`,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//参数
|
||||||
|
'300101': `参数`,
|
||||||
|
'300102': `书籍`,
|
||||||
|
'300103': `电影`,
|
||||||
|
'300104': `电视剧`,
|
||||||
|
'300105': `音乐`,
|
||||||
|
'300106': `日记`,
|
||||||
|
'300107': `游戏`,
|
||||||
|
'300108': `广播`,
|
||||||
|
|
||||||
|
//书籍
|
||||||
|
'310101': `豆瓣ID`,
|
||||||
|
'310102': `书名`,
|
||||||
|
'310103': `类型`,
|
||||||
|
'310104': `评分`,
|
||||||
|
'310105': `封面URL`,
|
||||||
|
'310106': `豆瓣网址`,
|
||||||
|
'310107': `内容简介`,
|
||||||
|
'310108': `出版社`,
|
||||||
|
'310109': `出版时间`,
|
||||||
|
'310110': `(固定值:其他)`,
|
||||||
|
'310111': `author:原作者`,
|
||||||
|
'310112': `translator:译者`,
|
||||||
|
'310113': `isbn:isbn`,
|
||||||
|
'310114': `originalTitle:原作名`,
|
||||||
|
'310115': `subTitle:副标题`,
|
||||||
|
'310116': `totalPage:页数`,
|
||||||
|
'310117': `binding:装帧`,
|
||||||
|
|
||||||
|
//电影
|
||||||
|
'310201': `豆瓣ID`,
|
||||||
|
'310202': `电影名称`,
|
||||||
|
'310203': `类型`,
|
||||||
|
'310204': `评分`,
|
||||||
|
'310205': `封面`,
|
||||||
|
'310206': `豆瓣网址`,
|
||||||
|
'310207': `简介`,
|
||||||
|
'310208': `(固定值:未知)`,
|
||||||
|
'310209': `上映日期`,
|
||||||
|
'310210': `类型`,
|
||||||
|
'310211': `director:导演`,
|
||||||
|
'310212': `author:编剧`,
|
||||||
|
'310213': `actor:主演`,
|
||||||
|
'310214': `originalTitle:原作名`,
|
||||||
|
'310215': `-`,
|
||||||
|
'310216': `-`,
|
||||||
|
'310217': `-`,
|
||||||
|
|
||||||
|
|
||||||
|
//电视剧
|
||||||
|
'310301': `豆瓣ID`,
|
||||||
|
'310302': `电视剧名称`,
|
||||||
|
'310303': `类型`,
|
||||||
|
'310304': `评分`,
|
||||||
|
'310305': `封面`,
|
||||||
|
'310306': `豆瓣网址`,
|
||||||
|
'310307': `简介`,
|
||||||
|
'310308': `(固定值:未知)`,
|
||||||
|
'310309': `上映日期`,
|
||||||
|
'310310': `类型`,
|
||||||
|
'310311': `director:导演`,
|
||||||
|
'310312': `author:编剧`,
|
||||||
|
'310313': `actor:主演`,
|
||||||
|
'310314': `originalTitle:原作名`,
|
||||||
|
'310315': `-`,
|
||||||
|
'310316': `-`,
|
||||||
|
'310317': `-`,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//音乐
|
||||||
|
'310401': `豆瓣ID`,
|
||||||
|
'310402': `音乐名`,
|
||||||
|
'310403': `类型`,
|
||||||
|
'310404': `评分`,
|
||||||
|
'310405': `封面`,
|
||||||
|
'310406': `豆瓣网址`,
|
||||||
|
'310407': `简介`,
|
||||||
|
'310408': `出版者`,
|
||||||
|
'310409': `发行时间`,
|
||||||
|
'310410': `流派`,
|
||||||
|
'310411': `actor: 表演者`,
|
||||||
|
'310412': `albumType:专辑类型`,
|
||||||
|
'310413': `medium:介质`,
|
||||||
|
'310414': `records:唱片数`,
|
||||||
|
'310415': `barcode:条形码`,
|
||||||
|
'310416': `-`,
|
||||||
|
'310417': `-`,
|
||||||
|
|
||||||
|
//日记
|
||||||
|
'310501': `豆瓣ID`,
|
||||||
|
'310502': `日记标题`,
|
||||||
|
'310503': `类型`,
|
||||||
|
'310504': `评分`,
|
||||||
|
'310505': `图片`,
|
||||||
|
'310506': `豆瓣网址`,
|
||||||
|
'310507': `简介`,
|
||||||
|
'310508': `发布者`,
|
||||||
|
'310509': `发布时间`,
|
||||||
|
'310510': `(固定值:其它)`,
|
||||||
|
'310511': `author:作者`,
|
||||||
|
'310512': `authorUrl:作者网址`,
|
||||||
|
'310513': `content:日记内容`,
|
||||||
|
'310514': `-`,
|
||||||
|
'310515': `-`,
|
||||||
|
'310516': `-`,
|
||||||
|
'310517': `-`,
|
||||||
|
|
||||||
|
//游戏
|
||||||
|
'310601': `豆瓣ID`,
|
||||||
|
'310602': `游戏名称`,
|
||||||
|
'310603': `类型`,
|
||||||
|
'310604': `评分`,
|
||||||
|
'310605': `封面`,
|
||||||
|
'310606': `豆瓣网址`,
|
||||||
|
'310607': `简介`,
|
||||||
|
'310608': `发行商`,
|
||||||
|
'310609': `发行日期`,
|
||||||
|
'310610': `类型`,
|
||||||
|
'310611': `aliases:别名`,
|
||||||
|
'310612': `developer:开发商`,
|
||||||
|
'310613': `platform:平台`,
|
||||||
|
'310614': `-`,
|
||||||
|
'310615': `-`,
|
||||||
|
'310616': `-`,
|
||||||
|
'310617': `-`,
|
||||||
|
|
||||||
|
//广播
|
||||||
|
'310701': `待开发`,
|
||||||
|
'310702': `待开发`,
|
||||||
|
'310703': `待开发`,
|
||||||
|
'310704': `待开发`,
|
||||||
|
'310705': `待开发`,
|
||||||
|
'310706': `待开发`,
|
||||||
|
'310707': `待开发`,
|
||||||
|
'310708': `待开发`,
|
||||||
|
'310709': `待开发`,
|
||||||
|
'310710': `待开发`,
|
||||||
|
'310711': `-`,
|
||||||
|
'310712': `-`,
|
||||||
|
'310713': `-`,
|
||||||
|
'310714': `-`,
|
||||||
|
'310715': `-`,
|
||||||
|
'310716': `-`,
|
||||||
|
'310717': `-`,
|
||||||
|
|
||||||
|
'320101': `扩展1`,
|
||||||
|
'320102': `扩展2`,
|
||||||
|
'320103': `扩展3`,
|
||||||
|
'320104': `扩展4`,
|
||||||
|
'320105': `扩展5`,
|
||||||
|
'320106': `扩展6`,
|
||||||
|
'320107': `扩展7`,
|
||||||
|
'320108': `扩展8`,
|
||||||
|
'320109': `扩展9`,
|
||||||
|
'320110': `扩展10`,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -38,7 +38,8 @@ export const FileUtil = {
|
|||||||
const regex = /(?<dir>([^/\\]+[/\\])*)(?<name>[^/\\]*$)/;
|
const regex = /(?<dir>([^/\\]+[/\\])*)(?<name>[^/\\]*$)/;
|
||||||
const match = String(pathString).match(regex);
|
const match = String(pathString).match(regex);
|
||||||
const { dir, name } = match && match.groups;
|
const { dir, name } = match && match.groups;
|
||||||
return { dir, name: name || 'Untitled', extension: 'md'};
|
const nameWithoutSpChar = this.replaceSpecialCharactersForFileName(name);
|
||||||
|
return { dir, name: nameWithoutSpChar || 'Untitled_' + new Date().getTime(), extension: 'md'};
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -52,4 +53,12 @@ export const FileUtil = {
|
|||||||
const parts = strings.map((s) => String(s).trim()).filter((s) => s != null);
|
const parts = strings.map((s) => String(s).trim()).filter((s) => s != null);
|
||||||
return normalizePath(parts.join('/'));
|
return normalizePath(parts.join('/'));
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* replace special characters for filename
|
||||||
|
*/
|
||||||
|
replaceSpecialCharactersForFileName(fileName: string): string {
|
||||||
|
return fileName.replaceAll(/[\\/:*?"<>|]/g, '_');
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -4,12 +4,12 @@ import {i18nHelper} from "src/lang/helper";
|
|||||||
class Logger {
|
class Logger {
|
||||||
|
|
||||||
public error(e: any): any {
|
public error(e: any): any {
|
||||||
new Notice(i18nHelper.getMessage('130201') + e);
|
new Notice(e);
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
public warn(e: any): any {
|
public warn(e: any): any {
|
||||||
new Notice(i18nHelper.getMessage('130301') + e);
|
new Notice(e);
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user