1
0
mirror of https://github.com/xuthus83/pigallery2.git synced 2025-01-14 14:43:17 +08:00

75 lines
2.2 KiB
TypeScript
Raw Normal View History

import {Utils} from '../../../../common/Utils';
2018-11-04 19:28:32 +01:00
import {MediaIcon} from './MediaIcon';
import {Config} from '../../../../common/config/public/Config';
2021-04-01 21:48:38 +02:00
import {MediaBaseDTO, MediaDTO} from '../../../../common/entities/MediaDTO';
2018-03-30 15:30:30 -04:00
2018-11-04 19:28:32 +01:00
export class Media extends MediaIcon {
2017-03-18 00:11:53 +01:00
static readonly sortedThumbnailSizes = Config.Client.Media.Thumbnail.thumbnailSizes
.sort((a, b) => a - b);
2017-03-18 00:11:53 +01:00
2021-04-01 21:48:38 +02:00
constructor(media: MediaBaseDTO, public renderWidth: number, public renderHeight: number) {
2018-11-04 19:28:32 +01:00
super(media);
}
2017-03-18 00:11:53 +01:00
thumbnailLoaded() {
if (!this.isThumbnailAvailable()) {
2018-11-04 19:28:32 +01:00
this.media.readyThumbnails = this.media.readyThumbnails || [];
this.media.readyThumbnails.push(this.getThumbnailSize());
2017-03-18 00:11:53 +01:00
}
}
2017-03-18 00:11:53 +01:00
getThumbnailSize() {
const longerEdge = Math.max(this.renderWidth, this.renderHeight);
return Utils.findClosestinSorted(longerEdge, Media.sortedThumbnailSizes);
}
2017-03-18 00:11:53 +01:00
getReplacementThumbnailSize(): number {
2017-03-18 00:11:53 +01:00
if (this.replacementSizeCache === false) {
this.replacementSizeCache = null;
2017-03-18 00:11:53 +01:00
const size = this.getThumbnailSize();
2018-11-04 19:28:32 +01:00
if (!!this.media.readyThumbnails) {
for (let i = 0; i < this.media.readyThumbnails.length; i++) {
if (this.media.readyThumbnails[i] < size) {
this.replacementSizeCache = this.media.readyThumbnails[i];
break;
}
2017-03-18 00:11:53 +01:00
}
}
2017-03-18 00:11:53 +01:00
}
return <number>this.replacementSizeCache;
}
2017-03-18 00:11:53 +01:00
isReplacementThumbnailAvailable() {
return this.getReplacementThumbnailSize() !== null;
}
2017-03-18 00:11:53 +01:00
isThumbnailAvailable() {
2018-11-04 19:28:32 +01:00
return this.media.readyThumbnails && this.media.readyThumbnails.indexOf(this.getThumbnailSize()) !== -1;
}
2017-03-18 00:11:53 +01:00
getReplacementThumbnailPath() {
const size = this.getReplacementThumbnailSize();
return Utils.concatUrls(Config.Client.urlBase,
'/api/gallery/content/',
2018-11-04 19:28:32 +01:00
this.media.directory.path, this.media.directory.name, this.media.name, 'thumbnail', size.toString());
2017-03-18 00:11:53 +01:00
}
2017-03-18 00:11:53 +01:00
2018-05-13 16:59:57 -04:00
hasPositionData(): boolean {
2018-11-04 19:28:32 +01:00
return MediaDTO.hasPositionData(this.media);
2018-05-13 16:59:57 -04:00
}
getThumbnailPath() {
const size = this.getThumbnailSize();
return Utils.concatUrls(Config.Client.urlBase,
'/api/gallery/content/',
2018-11-04 19:28:32 +01:00
this.media.directory.path, this.media.directory.name, this.media.name, 'thumbnail', size.toString());
}
2017-03-18 00:11:53 +01:00
}