Skip to content

Commit

Permalink
Merge pull request #4 from anxinJ/main
Browse files Browse the repository at this point in the history
新增简单图床EasyImage支持
  • Loading branch information
yaleiyale authored Aug 10, 2024
2 parents dc730d0 + 8fb1dcd commit a2719ca
Show file tree
Hide file tree
Showing 6 changed files with 108 additions and 3 deletions.
9 changes: 7 additions & 2 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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 = {
Expand All @@ -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
}
38 changes: 38 additions & 0 deletions src/fragment/fragment-easyimage.ts
Original file line number Diff line number Diff line change
@@ -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()
})
})
}
}
4 changes: 3 additions & 1 deletion src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
17 changes: 17 additions & 0 deletions src/parms/parms-easyimage.ts
Original file line number Diff line number Diff line change
@@ -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: ''
}
}
2 changes: 2 additions & 0 deletions src/settings-tab.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 => {
Expand Down
41 changes: 41 additions & 0 deletions src/uploader/uploader-easyimage.ts
Original file line number Diff line number Diff line change
@@ -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<string> {
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)
})
})
}
}

0 comments on commit a2719ca

Please sign in to comment.