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) {
|
||||
try {
|
||||
|
||||
if (!extract) {
|
||||
log.warn(i18nHelper.getMessage('140101'));
|
||||
return;
|
||||
}
|
||||
this.showStatus('140204', extract.title);
|
||||
const content = await this.doubanExtractHandler.parseText(extract, context)
|
||||
if (content) {
|
||||
this.putContentToObsidian(context, content);
|
||||
const result = await this.doubanExtractHandler.parseText(extract, context)
|
||||
if (result) {
|
||||
this.putContentToObsidian(context, result);
|
||||
}
|
||||
this.showStatus('140205', extract.title);
|
||||
} catch (e) {
|
||||
this.showStatus('140206', e.message);
|
||||
} 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;
|
||||
switch (mode) {
|
||||
case SearchHandleMode.FOR_CREATE:
|
||||
this.createFile(context, content);
|
||||
this.createFile(context, result);
|
||||
break;
|
||||
case SearchHandleMode.FOR_REPLACE:
|
||||
this.putToEditor(context.editor, content.content);
|
||||
this.putToEditor(context.editor, result.content);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -58,8 +59,11 @@ export default class DoubanPlugin extends Plugin {
|
||||
editor.replaceSelection(content);
|
||||
}
|
||||
|
||||
async createFile(context: HandleContext, content: HandleResult) {
|
||||
this.fileHandler.createNewNoteWithData(content.fileName,content.content);
|
||||
async createFile(context: HandleContext, result: HandleResult) {
|
||||
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) {
|
||||
@ -71,7 +75,7 @@ export default class DoubanPlugin extends Plugin {
|
||||
} catch (e) {
|
||||
this.showStatus('140206', e.message);
|
||||
} finally {
|
||||
setTimeout(() => this.doubanStatusBar.empty(), BasicConst.CLEAN_STATUS_BAR_DELAY)
|
||||
this.clearStatusBarDelay();
|
||||
}
|
||||
}
|
||||
|
||||
@ -95,8 +99,9 @@ export default class DoubanPlugin extends Plugin {
|
||||
|
||||
async onload() {
|
||||
await this.loadSettings();
|
||||
|
||||
this.doubanStatusBar = this.addStatusBarItem();
|
||||
if (this.settings.statusBar) {
|
||||
this.doubanStatusBar = this.addStatusBarItem();
|
||||
}
|
||||
|
||||
this.addCommand({
|
||||
id: "search-douban-import-and-create-file",
|
||||
@ -138,10 +143,19 @@ export default class DoubanPlugin extends Plugin {
|
||||
|
||||
|
||||
showStatus(origin: string, message: string) {
|
||||
|
||||
if (!this.settings.statusBar || !this.doubanStatusBar) {
|
||||
return;
|
||||
}
|
||||
this.doubanStatusBar.empty();
|
||||
// @ts-ignore
|
||||
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 = {
|
||||
//以后会被移除
|
||||
bookTemplate: "", gameTemplate: "", movieTemplate: "", musicTemplate: "", noteTemplate: "", teleplayTemplate: "",
|
||||
|
||||
movieTemplateFile: ``,
|
||||
bookTemplateFile: ``,
|
||||
musicTemplateFile: ``,
|
||||
@ -19,5 +17,6 @@ export const DEFAULT_SETTINGS: DoubanPluginSetting = {
|
||||
arraySpilt: ", ",
|
||||
personNameMode: PersonNameMode.CH_NAME,
|
||||
dataFilePath: "",
|
||||
dataFileNamePath: "/{{type}}/{{title}}"
|
||||
dataFileNamePath: "/{{type}}/{{title}}",
|
||||
statusBar: true,
|
||||
}
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
import {TemplateKey} from "./Constsant";
|
||||
|
||||
export const DEFAULT_TEMPLATE_CONTENT = {
|
||||
movieTemplateFileContent: `---
|
||||
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 HandleContext from "@App/data/model/HandleContext";
|
||||
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 StringUtil from "../../../utils/StringUtil";
|
||||
import {DEFAULT_SETTINGS} from "../../../constant/DefaultSettings";
|
||||
|
||||
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 = '';
|
||||
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};
|
||||
}
|
||||
|
||||
private getFileName(context:HandleContext): string {
|
||||
const {dataFileNamePath} = context.settings;
|
||||
return dataFileNamePath ? dataFileNamePath : DEFAULT_SETTINGS.dataFileNamePath;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理特殊字符
|
||||
* @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 {
|
||||
let result;
|
||||
if (!value) {
|
||||
return i18nHelper.getMessage('410101');
|
||||
}
|
||||
if (value instanceof Array) {
|
||||
result = this.handleContentArray(value, context, textMode);
|
||||
} else if (value instanceof Number) {
|
||||
result = value ? value.toString() : '';
|
||||
result = value.toString();
|
||||
} else {
|
||||
result = this.handleSpecialText(value, textMode);
|
||||
}
|
||||
@ -146,11 +155,11 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
|
||||
let regValue: RegExpExecArray;
|
||||
switch (settings.personNameMode) {
|
||||
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;
|
||||
break;
|
||||
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;
|
||||
break;
|
||||
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 {
|
||||
const resultContent = template
|
||||
.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.SCORE, this.handleSpecialContent(extract.score))
|
||||
.replaceAll(DoubanParameter.IMAGE, extract.image)
|
||||
@ -206,25 +215,17 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
|
||||
|
||||
private async getTemplate(context: HandleContext):Promise<string> {
|
||||
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];
|
||||
|
||||
// @ts-ignore
|
||||
const defaultContent = DEFAULT_TEMPLATE_CONTENT[tempKey + 'Content'];
|
||||
|
||||
if (!templatePath || StringUtil.isBlank(templatePath)) {
|
||||
return defaultContent;
|
||||
return getDefaultTemplateContent(tempKey);
|
||||
}
|
||||
const defaultContent = getDefaultTemplateContent(tempKey);
|
||||
let firstLinkpathDest:TFile = this.doubanPlugin.app.metadataCache.getFirstLinkpathDest(templatePath, '');
|
||||
if (!firstLinkpathDest) {
|
||||
return defaultContent;
|
||||
}else {
|
||||
// return firstLinkpathDest.
|
||||
const val = await this.doubanPlugin.fileHandler.getFileContent(firstLinkpathDest.path);
|
||||
return val?val:defaultContent;
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ import DoubanSubject from "../model/DoubanSubject";
|
||||
import {TemplateKey, TemplateTextMode} from "../../../constant/Constsant";
|
||||
import StringUtil from "../../../utils/StringUtil";
|
||||
import HandleContext from "@App/data/model/HandleContext";
|
||||
import {i18nHelper} from "../../../lang/helper";
|
||||
|
||||
export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<DoubanBookSubject> {
|
||||
|
||||
|
||||
@ -22,165 +22,14 @@ export class DoubanSettingTab extends PluginSettingTab {
|
||||
|
||||
display(): void {
|
||||
const {containerEl} = this;
|
||||
|
||||
|
||||
containerEl.empty();
|
||||
|
||||
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'))
|
||||
.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();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
this.settingsManager.constructTemplateVariablesUI(containerEl);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,34 +3,41 @@ import {CreateTemplateSelectParams} from "@App/setting/model/CreateTemplateSelec
|
||||
import { FileSuggest } from "./model/FileSuggest";
|
||||
import {SearchComponent, Setting} from "obsidian";
|
||||
import { log } from "src/utils/Logutil";
|
||||
import {getDefaultTemplateContent} from "../../constant/DefaultTemplateContent";
|
||||
import {FolderSuggest} from "@App/setting/model/FolderSuggest";
|
||||
|
||||
|
||||
export function createFileSelectionSetting({
|
||||
name, desc, placeholder, key, manager,
|
||||
export function createFileSelectionSetting({name, desc, placeholder, key, manager
|
||||
}: CreateTemplateSelectParams) {
|
||||
return (setting: Setting) => {
|
||||
// @ts-ignore
|
||||
setting.setName( i18nHelper.getMessage(name));
|
||||
|
||||
const templateDesc = new DocumentFragment();
|
||||
setting.setName(i18nHelper.getMessage(name));
|
||||
// @ts-ignore
|
||||
templateDesc.createDiv().innerHTML = i18nHelper.getMessage(desc) + `<br> <text class="obsidian_douban_settings_desc has_error" >不存在文件夹</> `;
|
||||
setting.setDesc(templateDesc);
|
||||
setting.setDesc(i18nHelper.getMessage(desc));
|
||||
setting.addSearch(async (search: SearchComponent) => {
|
||||
const [oldValue, defaultVal] = manager.getSetting(key);
|
||||
let v = defaultVal;
|
||||
if (oldValue) {
|
||||
v = oldValue;
|
||||
}
|
||||
const fs = new FileSuggest(manager.app, search.inputEl);
|
||||
new FileSuggest(manager.app, search.inputEl);
|
||||
// @ts-ignore
|
||||
search.setValue(v);
|
||||
// @ts-ignore
|
||||
search.setPlaceholder(i18nHelper.getMessage(placeholder));
|
||||
search.onChange(async (value: string) => {
|
||||
log.trace(`hange to : ${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) {
|
||||
v = oldValue;
|
||||
}
|
||||
new FileSuggest(manager.app, search.inputEl);
|
||||
search
|
||||
.setValue(v)
|
||||
new FolderSuggest(manager.app, search.inputEl);
|
||||
// @ts-ignore
|
||||
search.setValue(v)
|
||||
// @ts-ignore
|
||||
.setPlaceholder(i18nHelper.getMessage(placeholder))
|
||||
.onChange(async (value: string) => {
|
||||
|
||||
@ -3,6 +3,8 @@ import { DEFAULT_SETTINGS } from "src/constant/DefaultSettings";
|
||||
import DoubanPlugin from "../../../main";
|
||||
import { DoubanPluginSetting } from "./model/DoubanPluginSetting";
|
||||
import {createFileSelectionSetting, createFolderSelectionSetting} from "@App/setting/SettingHelper";
|
||||
import {i18nHelper} from "../../lang/helper";
|
||||
import {PersonNameMode, PersonNameModeRecords} from "../../constant/Constsant";
|
||||
|
||||
export default class SettingsManager {
|
||||
app: App;
|
||||
@ -17,24 +19,446 @@ export default class SettingsManager {
|
||||
}
|
||||
|
||||
getSetting(key: keyof DoubanPluginSetting) {
|
||||
|
||||
return [this.settings[key], DEFAULT_SETTINGS[key]];
|
||||
}
|
||||
|
||||
|
||||
|
||||
async updateSetting(key: keyof DoubanPluginSetting, value:any) {
|
||||
// @ts-ignore
|
||||
this.settings[key] = value;
|
||||
await this.plugin.saveSettings();
|
||||
}
|
||||
|
||||
constructUI(contenterEl: HTMLElement) {
|
||||
new Setting(contenterEl).then(createFileSelectionSetting({name: '120101', desc: '120102', placeholder: '121701', key: 'movieTemplateFile', manager: this}));
|
||||
new Setting(contenterEl).then(createFileSelectionSetting({name: '120201', desc: '120202', placeholder: '121701', key: 'bookTemplateFile', manager: this}));
|
||||
new Setting(contenterEl).then(createFileSelectionSetting({name: '120301', desc: '120302', placeholder: '121701', key: 'musicTemplateFile', manager: this}));
|
||||
new Setting(contenterEl).then(createFileSelectionSetting({name: '120401', desc: '120402', placeholder: '121701', key: 'noteTemplateFile', manager: this}));
|
||||
new Setting(contenterEl).then(createFileSelectionSetting({name: '121301', desc: '121302', placeholder: '121701', key: 'gameTemplateFile', manager: this}));
|
||||
new Setting(contenterEl).then(createFileSelectionSetting({name: '121301', desc: '121302', placeholder: '121701', key: 'teleplayTemplateFile', manager: this}));
|
||||
new Setting(contenterEl).then(createFolderSelectionSetting({name: '121301', desc: '121302', placeholder: '121701', key: 'dataFilePath', manager: this}));
|
||||
constructBasicUI(containerEl: HTMLElement){
|
||||
containerEl.createEl('h3', { text: i18nHelper.getMessage('1210') });
|
||||
new Setting(containerEl).setName(i18nHelper.getMessage('120001'))
|
||||
.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('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 {
|
||||
//==兼容之前的配置
|
||||
movieTemplate: string,
|
||||
bookTemplate: string,
|
||||
musicTemplate: string,
|
||||
noteTemplate: string,
|
||||
gameTemplate: string,
|
||||
teleplayTemplate: string,
|
||||
//一段时间后会被删除,以上
|
||||
movieTemplateFile: string,
|
||||
bookTemplateFile: string,
|
||||
musicTemplateFile: string,
|
||||
@ -22,5 +14,6 @@ export interface DoubanPluginSetting {
|
||||
personNameMode: string,
|
||||
dataFilePath: string,
|
||||
dataFileNamePath: string,
|
||||
statusBar: boolean,
|
||||
|
||||
}
|
||||
|
||||
@ -3,6 +3,7 @@ import {App, normalizePath, Platform} from "obsidian";
|
||||
import { log } from "src/utils/Logutil";
|
||||
import DoubanPlugin from "../../main";
|
||||
import {FileUtil} from "../utils/FileUtil";
|
||||
import {i18nHelper} from "../lang/helper";
|
||||
|
||||
/**
|
||||
* 文件处理
|
||||
@ -92,7 +93,7 @@ export default class FileHandler {
|
||||
const fileExists = await adapter.exists(filePath);
|
||||
if (fileExists) {
|
||||
// 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 `input` includes a directory part, create it
|
||||
@ -123,7 +124,7 @@ export default class FileHandler {
|
||||
err
|
||||
);
|
||||
//TODO i18n
|
||||
log.error('Failed to read the template')
|
||||
log.error(i18nHelper.getMessage('110202').replace('{0}', normalizedTemplatePath ?? ''));
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,6 +8,8 @@ export default {
|
||||
'110005': `Cancel`,
|
||||
'110006': `sync douban broadcast ot Obsidian`,
|
||||
'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,`,
|
||||
'120006': `Just copy the web address to the current input box.`,
|
||||
|
||||
'120101': `Movie Content Template`,
|
||||
'120102': `Set markdown Movie template for extract to be inserted.`,
|
||||
'1210': `Basic Setting`,
|
||||
'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 :`,
|
||||
'120104': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
||||
'120105': `{{url}}, {{desc}}, {{datePublished}}, {{genre}}, `,
|
||||
'120106': `{{originalTitle}},{{director}}, {{author}},`,
|
||||
'120107': ` {{actor}}`,
|
||||
'120110': `Movie Template File`,
|
||||
|
||||
'120130': `Create New File Path`,
|
||||
'120131': `Create New File Name`,
|
||||
|
||||
|
||||
'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 :`,
|
||||
'120204': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
||||
'120205': `{{url}}, {{desc}}, {{datePublished}}, {{publisher}}`,
|
||||
@ -42,7 +51,7 @@ export default {
|
||||
'120208': `{{series}}, {{binding}}, {{menu}}`,
|
||||
|
||||
'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 :`,
|
||||
'120304': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
||||
'120305': `{{url}}, {{desc}}, {{datePublished}}, {{genre}},`,
|
||||
@ -50,7 +59,7 @@ export default {
|
||||
'120307': `{{barcode}}, {{records}}`,
|
||||
|
||||
'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 :`,
|
||||
'120404': `{{id}}, {{title}}, {{type}}, {{image}},`,
|
||||
'120405': `{{url}}, {{desc}}, {{datePublished}}`,
|
||||
@ -58,12 +67,15 @@ export default {
|
||||
'120407': `{{timePublished}}`,
|
||||
|
||||
'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 :`,
|
||||
'121304': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
||||
'121305': `{{url}}, {{desc}}, {{publisher}}, {{datePublished}}`,
|
||||
'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`,
|
||||
'120502': `Time Format`,
|
||||
'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. `,
|
||||
'121503': `Default Folder`,
|
||||
|
||||
|
||||
'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`,
|
||||
'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. `,
|
||||
'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. `,
|
||||
'121703': `Default`,
|
||||
|
||||
'121901': `Copy default template content to clipboard`,
|
||||
'121902': `Reset to default value`,
|
||||
|
||||
|
||||
//error
|
||||
'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`,
|
||||
|
||||
'140201': `[Obsidian Douban]: searching '{0}'...`,
|
||||
@ -123,7 +136,170 @@ export default {
|
||||
'200101': `. `,
|
||||
|
||||
'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`,
|
||||
'110101': '搜索豆瓣并创建文档',
|
||||
|
||||
'110201': `{0} 文件已经存在.`,
|
||||
'110202': `{0} 模板文件无法读取`,
|
||||
|
||||
|
||||
//DoubanSettingTab
|
||||
'1201': `Obsidian-豆瓣`,
|
||||
@ -20,16 +23,25 @@ export default {
|
||||
'120005': `所跳转的网页地址即是搜索地址,`,
|
||||
'120006': `将网页地址复制到当前输入框即可,`,
|
||||
|
||||
'120101': `电影文本模板`,
|
||||
'120102': `设置选择电影后导入的文本内容模板,`,
|
||||
'1210': `基础配置`,
|
||||
'1203': `模板配置`,
|
||||
'1220': `输出配置`,
|
||||
'1230': `可用参数`,
|
||||
|
||||
'1204': `配置对应类型的模板文件, 如果为空则使用默认的文件模板. 模板可使用的参数列举在最下面.👇 `,
|
||||
'1205': `🧡提示: 建议点击右侧'复制'默认模板按钮, 然后在新建的文件中粘贴修改模板, 最后回到此处选择对应模板. `,
|
||||
|
||||
|
||||
'120101': `电影模板文件`,
|
||||
'120102': `设置选择电影后导入的文本内容模板文件. `,
|
||||
'120103': `支持以下参数名称 :`,
|
||||
'120104': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
||||
'120105': `{{url}}, {{desc}}, {{datePublished}}, {{genre}}, `,
|
||||
'120106': `{{originalTitle}},{{director}}, {{author}},`,
|
||||
'120107': ` {{actor}}`,
|
||||
|
||||
'120201': `书籍文本模板`,
|
||||
'120202': `设置选择书籍后导入的文本内容模板,`,
|
||||
'120201': `书籍模板文件`,
|
||||
'120202': `选择书籍后导入内容的模板文件. `,
|
||||
'120203': `支持以下参数名称 :`,
|
||||
'120204': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
||||
'120205': `{{url}}, {{desc}}, {{datePublished}}, {{publisher}}`,
|
||||
@ -37,35 +49,38 @@ export default {
|
||||
'120207': `{{translator}}, {{isbn}}, {{price}}, {{totalPage}}`,
|
||||
'120208': `{{series}}, {{binding}}, {{menu}}`,
|
||||
|
||||
|
||||
'120301': `音乐文本模板`,
|
||||
'120302': `设置选择音乐后导入的文本内容模板,`,
|
||||
'120301': `音乐模板文件`,
|
||||
'120302': `选择音乐后导入内容的模板文件. `,
|
||||
'120303': `支持以下参数名称 :`,
|
||||
'120304': `{{id}}, {{title}}, {{type}}, {{image}},`,
|
||||
'120305': `{{url}}, {{desc}}, {{datePublished}}`,
|
||||
'120306': `{{genre}}, {{actor}}, {{medium}}, {{albumType}},`,
|
||||
'120307': `{{barcode}}, {{records}}`,
|
||||
|
||||
'120401': `日记文本模板`,
|
||||
'120402': `设置选择日记后导入的文本内容模板,`,
|
||||
'120401': `日记模板文件`,
|
||||
'120402': `设置选择电影后导入内容的模板文件. `,
|
||||
'120403': `支持以下参数名称 :`,
|
||||
'120404': `{{id}}, {{title}}, {{type}}, {{image}},`,
|
||||
'120405': `{{url}}, {{desc}}, {{datePublished}}`,
|
||||
'120406': `{{author}}, {{authorUrl}}, {{content}}`,
|
||||
'120407': `{{timePublished}}`,
|
||||
|
||||
'121301': `游戏文本模板`,
|
||||
'121302': `设置选择游戏后导入的文本内容模板,`,
|
||||
'121301': `游戏模板文件`,
|
||||
'121302': `选择电影后导入内容的模板文件. `,
|
||||
'121303': `支持以下参数名称 :`,
|
||||
'121304': `{{id}}, {{title}}, {{type}}, {{score}}, {{image}},`,
|
||||
'121305': `{{url}}, {{desc}}, {{publisher}}, {{datePublished}}`,
|
||||
'121306': `{{genre}}, {{aliases}}, {{developer}}, {{platform}}`,
|
||||
|
||||
|
||||
'121801': `电视剧模板文件`,
|
||||
'121802': `选择电视剧后导入内容的模板文件. `,
|
||||
|
||||
|
||||
'120501': `日期格式`,
|
||||
'120503': `这个格式是给上面获取到的参数进行格式化日期时显示的内容 .`,
|
||||
'120503': `这个格式是给下面获取到的参数进行格式化日期时显示的内容 .`,
|
||||
'120502': `时间格式`,
|
||||
'120504': `这个格式是给上面获取到的参数进行格式化时间时显示的内容 .`,
|
||||
'120504': `这个格式是给下面获取到的参数进行格式化时间时显示的内容 .`,
|
||||
'120506': `详细介绍请参考`,
|
||||
'120507': `时间参数时间格式预览`,
|
||||
'120508': `格式参考`,
|
||||
@ -94,10 +109,12 @@ export default {
|
||||
'121402': `当在导入数据时, 是否需要在状态栏显示处理状态? `,
|
||||
|
||||
'121501': `笔记存放位置`,
|
||||
'121502': `从Obsidian-Douban创建的笔记将会存放导该文件夹中. 如果为空,笔记将会存放到Obsidian的默认文件存放位置`,
|
||||
'121502': `创建的笔记将会存放导该文件夹中. 如果为空, 笔记将会存放到Obsidian的默认位置`,
|
||||
|
||||
'121601': `笔记名称`,
|
||||
'121602': `从Obsidian-Douban创建的笔记将会使用次名称,支持所有通用的参数作为名称(如:{{type}},{{title}}等等). 如果为空, 笔记将会使用默认名称`,
|
||||
'121602': `创建的笔记将会使用此名称作为模板, 支持所有'通用'的参数作为名称(如:{{type}}/{{title}}), 且支持路径, 比如: 'MyData/{{title}}'. 如果为空, 笔记将会使用默认名称. `,
|
||||
|
||||
'121901': `复制'默认'模板内容`,
|
||||
|
||||
'130101': `获取数据失败,您如有需要请至Github提交Issues`,
|
||||
'130102': `Obsidian Douban插件错误提示:`,
|
||||
@ -139,5 +156,182 @@ export default {
|
||||
subTitle: {desc: `副标题`, example: `社会心理学`},
|
||||
binding: {desc: `装帧`, example: `精装`},
|
||||
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 match = String(pathString).match(regex);
|
||||
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);
|
||||
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 {
|
||||
|
||||
public error(e: any): any {
|
||||
new Notice(i18nHelper.getMessage('130201') + e);
|
||||
new Notice(e);
|
||||
return e;
|
||||
}
|
||||
|
||||
public warn(e: any): any {
|
||||
new Notice(i18nHelper.getMessage('130301') + e);
|
||||
new Notice(e);
|
||||
return e;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user