From 478ba3b4b5370da82fd99df371d4d771dd0eb38e Mon Sep 17 00:00:00 2001 From: jie <1028361767@qq.com> Date: Fri, 26 Jul 2024 14:46:03 +0800 Subject: [PATCH 1/3] support easyimage --- src/config.ts | 9 ++++-- src/fragment/fragment-easyimage.ts | 38 +++++++++++++++++++++++++ src/main.ts | 4 ++- src/parms/parms-easyimage.ts | 17 +++++++++++ src/uploader/uploader-chevereto.ts | 10 +++---- src/uploader/uploader-easyimage.ts | 45 ++++++++++++++++++++++++++++++ 6 files changed, 115 insertions(+), 8 deletions(-) create mode 100644 src/fragment/fragment-easyimage.ts create mode 100644 src/parms/parms-easyimage.ts create mode 100644 src/uploader/uploader-easyimage.ts 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/uploader/uploader-chevereto.ts b/src/uploader/uploader-chevereto.ts index fabb841..889d6fd 100644 --- a/src/uploader/uploader-chevereto.ts +++ b/src/uploader/uploader-chevereto.ts @@ -26,13 +26,13 @@ export class CheveretoUploader extends EmoUploader { async upload (file: File): Promise { const domain = this.formatUrl(this.parms.required.domain) const formData = new EmoFormData() - await formData.add('source', file) - await formData.add('key', this.parms.required.token) + 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, + // 'X-API-Key': this.parms.required.token, 'Content-Type': CONTENT_TYPE_FORMDATA }, body: formData.getBody() @@ -41,8 +41,8 @@ export class CheveretoUploader extends EmoUploader { request(req).then((res) => { const json = JSON.parse(res) let url = '' - url = json.image.url - const markdownText = `![Chevereto](${url})` + url = json.url + const markdownText = `![EasyImage](${url})` resolve(markdownText) }).catch(err => { reject(err) diff --git a/src/uploader/uploader-easyimage.ts b/src/uploader/uploader-easyimage.ts new file mode 100644 index 0000000..72801d2 --- /dev/null +++ b/src/uploader/uploader-easyimage.ts @@ -0,0 +1,45 @@ +import type { RequestUrlParam } from 'obsidian' +import { request } from 'obsidian' +import type { SmmsParms } from '../parms/parms-smms' +import { EmoFormData } from '../utils/emo-formdata' +import { EmoUploader } from '../base/emo-uploader' +import { CONTENT_TYPE_FORMDATA } from '../base/constants' + +export class SmmsUploader extends EmoUploader { + parms!: SmmsParms + constructor (smmsParms: SmmsParms) { + super() + this.parms = smmsParms + } + + async upload (file: File): Promise { + const formData = new EmoFormData() + await formData.add('format', 'json') + await formData.add('smfile', file) + const req: RequestUrlParam = { + url: 'https://sm.ms/api/v2/upload', + method: 'POST', + headers: { + 'Content-Type': CONTENT_TYPE_FORMDATA, + Authorization: this.parms.required.token + }, + body: formData.getBody() + } + + return await new Promise((resolve, reject) => { + request(req).then((res) => { + const json = JSON.parse(res) + let url = '' + try { + url = json.data.url + } catch (error) { + url = json.images // Image upload repeated limit, this image exists at here + } + const markdownText = `![SMMS](${url})` + resolve(markdownText) + }).catch(err => { + reject(err) + }) + }) + } +} From b0354bf23a726f824d75edef9ea3018446c6ea83 Mon Sep 17 00:00:00 2001 From: jie <1028361767@qq.com> Date: Fri, 26 Jul 2024 14:51:04 +0800 Subject: [PATCH 2/3] Update uploader-easyimage.ts --- src/uploader/uploader-easyimage.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/uploader/uploader-easyimage.ts b/src/uploader/uploader-easyimage.ts index 72801d2..3bef4d4 100644 --- a/src/uploader/uploader-easyimage.ts +++ b/src/uploader/uploader-easyimage.ts @@ -1,15 +1,15 @@ import type { RequestUrlParam } from 'obsidian' import { request } from 'obsidian' -import type { SmmsParms } from '../parms/parms-smms' +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 SmmsUploader extends EmoUploader { - parms!: SmmsParms - constructor (smmsParms: SmmsParms) { +export class EasyImageUploader extends EmoUploader { + parms!: EasyImageParms + constructor (easyimageParms: EasyImageParms) { super() - this.parms = smmsParms + this.parms = easyimageParms } async upload (file: File): Promise { From 8fb1dcd0d454197cea51da86b8dfdc1d3884fcc2 Mon Sep 17 00:00:00 2001 From: jie <1028361767@qq.com> Date: Fri, 26 Jul 2024 15:56:15 +0800 Subject: [PATCH 3/3] fixed --- src/settings-tab.ts | 2 ++ src/uploader/uploader-chevereto.ts | 10 +++++----- src/uploader/uploader-easyimage.ts | 20 ++++++++------------ 3 files changed, 15 insertions(+), 17 deletions(-) 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-chevereto.ts b/src/uploader/uploader-chevereto.ts index 889d6fd..fabb841 100644 --- a/src/uploader/uploader-chevereto.ts +++ b/src/uploader/uploader-chevereto.ts @@ -26,13 +26,13 @@ export class CheveretoUploader extends EmoUploader { async upload (file: File): Promise { const domain = this.formatUrl(this.parms.required.domain) const formData = new EmoFormData() - await formData.add('image', file) - await formData.add('token', this.parms.required.token) + await formData.add('source', file) + await formData.add('key', this.parms.required.token) const req: RequestUrlParam = { url: domain, method: 'POST', headers: { - // 'X-API-Key': this.parms.required.token, + 'X-API-Key': this.parms.required.token, 'Content-Type': CONTENT_TYPE_FORMDATA }, body: formData.getBody() @@ -41,8 +41,8 @@ export class CheveretoUploader extends EmoUploader { request(req).then((res) => { const json = JSON.parse(res) let url = '' - url = json.url - const markdownText = `![EasyImage](${url})` + url = json.image.url + const markdownText = `![Chevereto](${url})` resolve(markdownText) }).catch(err => { reject(err) diff --git a/src/uploader/uploader-easyimage.ts b/src/uploader/uploader-easyimage.ts index 3bef4d4..f65b351 100644 --- a/src/uploader/uploader-easyimage.ts +++ b/src/uploader/uploader-easyimage.ts @@ -13,29 +13,25 @@ export class EasyImageUploader extends EmoUploader { } async upload (file: File): Promise { + const domain = this.parms.required.domain const formData = new EmoFormData() - await formData.add('format', 'json') - await formData.add('smfile', file) + await formData.add('image', file) + await formData.add('token', this.parms.required.token) const req: RequestUrlParam = { - url: 'https://sm.ms/api/v2/upload', + url: domain, method: 'POST', headers: { - 'Content-Type': CONTENT_TYPE_FORMDATA, - Authorization: this.parms.required.token + // '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 = '' - try { - url = json.data.url - } catch (error) { - url = json.images // Image upload repeated limit, this image exists at here - } - const markdownText = `![SMMS](${url})` + url = json.url + const markdownText = `![EasyImage](${url})` resolve(markdownText) }).catch(err => { reject(err)