diff --git a/src/config.ts b/src/config.ts index f78b57e..03c8dcb 100644 --- a/src/config.ts +++ b/src/config.ts @@ -16,6 +16,8 @@ import type { SmmsParms } from './parms/parms-smms' import { SMMS_DEFAULT_PARMS } from './parms/parms-smms' import type { AlistParms } from './parms/parms-alist' import { ALIST_DEFAULT_PARMS } from './parms/parms-alist' +import { EasyImageParms } from './parms/parms-easyimage' +import { EASYIMAGE_DEFAULT_PARMS } from './parms/parms-easyimage' export interface Config { // data from data.json choice: HostingProvider @@ -28,6 +30,7 @@ export interface Config { // data from data.json catbox_parms: CatboxParms chevereto_parms: CheveretoParms alist_parms: AlistParms + easyimage_parms: EasyImageParms } export enum HostingProvider { // target hosting @@ -39,7 +42,8 @@ export enum HostingProvider { // target hosting ImgURL = 'ImgURL', Imgbb = 'imgbb', Chevereto = 'chevereto', - Alist = 'AList' + Alist = 'AList', + EasgyImage = 'EasyImage' } export const DEFAULT_SETTINGS: Config = { @@ -52,5 +56,6 @@ export const DEFAULT_SETTINGS: Config = { imgbb_parms: IMGBB_DEFAULT_PARMS, catbox_parms: CATBOX_DEFAULT_PARMS, chevereto_parms: CHEVERETO_DEFAULT_PARMS, - alist_parms: ALIST_DEFAULT_PARMS + alist_parms: ALIST_DEFAULT_PARMS, + easyimage_parms: EASYIMAGE_DEFAULT_PARMS } diff --git a/src/fragment/fragment-easyimage.ts b/src/fragment/fragment-easyimage.ts new file mode 100644 index 0000000..ebd14ea --- /dev/null +++ b/src/fragment/fragment-easyimage.ts @@ -0,0 +1,38 @@ +import { Setting } from 'obsidian' +import type Emo from '../main' +import { EmoFragment } from '../base/emo-fragment' +import { HostingProvider } from '../config' +import { t } from '../lang/helpers' + +export class EasyImageFragment extends EmoFragment { + constructor (el: HTMLElement, plugin: Emo) { + super(HostingProvider.EasgyImage, el, plugin) + } + + display (el: HTMLElement, plugin: Emo): void { + const parms = plugin.config.easyimage_parms + el.createEl('h3', { text: t('EasyImage Settings') }) + + new Setting(el) + .setName(t('domain')) + .addText((text) => { + text + .setValue(parms.required.domain) + .onChange(async (value) => { + parms.required.domain = value + await plugin.saveSettings() + }) + }) + + new Setting(el) + .setName('token') + .addText((text) => { + text + .setValue(parms.required.token) + .onChange(async (value) => { + parms.required.token = value + await plugin.saveSettings() + }) + }) + } +} diff --git a/src/main.ts b/src/main.ts index 247a114..36a9425 100644 --- a/src/main.ts +++ b/src/main.ts @@ -17,6 +17,7 @@ import { ImgurUploader } from './uploader/uploader-imgur' import { CatboxUploader } from './uploader/uploader-catbox' import { CheveretoUploader } from './uploader/uploader-chevereto' import { AlistUploader } from './uploader/uploader-alist' +import { EasyImageUploader } from './uploader/uploader-easyimage' export default class Emo extends Plugin { config!: Config @@ -69,7 +70,8 @@ export default class Emo extends Plugin { [HostingProvider.Imgur]: () => new ImgurUploader(this.config.imgur_parms), [HostingProvider.Catbox]: () => new CatboxUploader(this.config.catbox_parms), [HostingProvider.Chevereto]: () => new CheveretoUploader(this.config.chevereto_parms), - [HostingProvider.Alist]: () => new AlistUploader(this.config.alist_parms) + [HostingProvider.Alist]: () => new AlistUploader(this.config.alist_parms), + [HostingProvider.EasgyImage]: () => new EasyImageUploader(this.config.easyimage_parms) } uploader = UploaderMap[this.config.choice]() if (uploader.isValid()) { // check the necessary parameters diff --git a/src/parms/parms-easyimage.ts b/src/parms/parms-easyimage.ts new file mode 100644 index 0000000..d4f6d5a --- /dev/null +++ b/src/parms/parms-easyimage.ts @@ -0,0 +1,17 @@ +import type { EmoParms } from '../base/emo-parms' + +export interface EasyImageParms extends EmoParms { + required: Required +} + +interface Required { + domain: string + token: string +} + +export const EASYIMAGE_DEFAULT_PARMS: EasyImageParms = { + required: { + domain: '', + token: '' + } +} diff --git a/src/settings-tab.ts b/src/settings-tab.ts index d86c49d..96c9bcd 100644 --- a/src/settings-tab.ts +++ b/src/settings-tab.ts @@ -18,6 +18,7 @@ import { CatboxFragment } from './fragment/fragment-catbox' import { IMGUR_ACCESS_TOKEN_LOCALSTORAGE_KEY } from './base/constants' import { CheveretoFragment } from './fragment/fragment-chevereto' import { AlistFragment } from './fragment/fragment-alist' +import { EasyImageFragment } from './fragment/fragment-easyimage' export class EmoUploaderSettingTab extends PluginSettingTab { private readonly plugin: Emo @@ -56,6 +57,7 @@ export class EmoUploaderSettingTab extends PluginSettingTab { fragmentList.push(new CatboxFragment(containerEl, this.plugin)) fragmentList.push(new CheveretoFragment(containerEl, this.plugin)) fragmentList.push(new AlistFragment(containerEl, this.plugin)) + fragmentList.push(new EasyImageFragment(containerEl, this.plugin)) // which one will show at the first time fragmentList.forEach(element => { diff --git a/src/uploader/uploader-easyimage.ts b/src/uploader/uploader-easyimage.ts new file mode 100644 index 0000000..f65b351 --- /dev/null +++ b/src/uploader/uploader-easyimage.ts @@ -0,0 +1,41 @@ +import type { RequestUrlParam } from 'obsidian' +import { request } from 'obsidian' +import type { EasyImageParms } from '../parms/parms-easyimage' +import { EmoFormData } from '../utils/emo-formdata' +import { EmoUploader } from '../base/emo-uploader' +import { CONTENT_TYPE_FORMDATA } from '../base/constants' + +export class EasyImageUploader extends EmoUploader { + parms!: EasyImageParms + constructor (easyimageParms: EasyImageParms) { + super() + this.parms = easyimageParms + } + + async upload (file: File): Promise { + const domain = this.parms.required.domain + const formData = new EmoFormData() + await formData.add('image', file) + await formData.add('token', this.parms.required.token) + const req: RequestUrlParam = { + url: domain, + method: 'POST', + headers: { + // 'X-API-Key': this.parms.required.token, + 'Content-Type': CONTENT_TYPE_FORMDATA + }, + body: formData.getBody() + } + return await new Promise((resolve, reject) => { + request(req).then((res) => { + const json = JSON.parse(res) + let url = '' + url = json.url + const markdownText = `![EasyImage](${url})` + resolve(markdownText) + }).catch(err => { + reject(err) + }) + }) + } +}