Files
Picsur/frontend/src/app/api/image.service.ts

46 lines
1.3 KiB
TypeScript
Raw Normal View History

2022-02-28 23:18:07 +01:00
import { Injectable } from '@angular/core';
2022-03-12 20:15:48 +01:00
import { ImageMetaResponse } from 'picsur-shared/dist/dto/api/image.dto';
2022-02-28 23:18:07 +01:00
import { EImage } from 'picsur-shared/dist/entities/image.entity';
import { AsyncFailable, HasFailed } from 'picsur-shared/dist/types';
import { ImageUploadRequest } from '../models/image-upload-request';
2022-03-06 12:34:33 +01:00
import { ApiService } from './api.service';
2022-02-28 23:18:07 +01:00
@Injectable({
providedIn: 'root',
})
export class ImageService {
constructor(private api: ApiService) {}
public async UploadImage(image: File): AsyncFailable<string> {
const result = await this.api.postForm(
2022-03-12 20:15:48 +01:00
ImageMetaResponse,
2022-02-28 23:18:07 +01:00
'/i',
new ImageUploadRequest(image)
);
if (HasFailed(result)) return result;
return result.hash;
}
public async GetImageMeta(image: string): AsyncFailable<EImage> {
2022-03-12 20:15:48 +01:00
return await this.api.get(ImageMetaResponse, `/i/meta/${image}`);
2022-02-28 23:18:07 +01:00
}
public GetImageURL(image: string): string {
const baseURL = window.location.protocol + '//' + window.location.host;
return `${baseURL}/i/${image}`;
}
public CreateImageLinks(imageURL: string) {
return {
source: imageURL,
markdown: `![image](${imageURL})`,
html: `<img src="${imageURL}" alt="image">`,
rst: `.. image:: ${imageURL}`,
bbcode: `[img]${imageURL}[/img]`,
};
}
}