import {Photo} from "../../../../common/entities/Photo"; import {Config} from "../../config/Config"; import {Utils} from "../../../../common/Utils"; export class GridPhoto { private replacementSizeCache:boolean|number = false; constructor(public photo:Photo, public renderWidth:number, public renderHeight:number, public rowId:number) { } thumbnailLoaded() { if (!this.isThumbnailAvailable()) { this.photo.readyThumbnails.push(this.getThumbnailSize()); } } getThumbnailSize() { let renderSize = Math.sqrt(this.renderWidth * this.renderHeight); return Utils.findClosest(renderSize, Config.Client.thumbnailSizes); } getReplacementThumbnailSize() { if (this.replacementSizeCache === false) { this.replacementSizeCache = null; let size = this.getThumbnailSize(); for (let i = 0; i < this.photo.readyThumbnails.length; i++) { if (this.photo.readyThumbnails[i] < size) { this.replacementSizeCache = this.photo.readyThumbnails[i]; break; } } } return this.replacementSizeCache; } isReplacementThumbnailAvailable() { return this.getReplacementThumbnailSize() !== null; } isThumbnailAvailable() { return this.photo.readyThumbnails.indexOf(this.getThumbnailSize()) != -1; } getReplacementThumbnailPath() { let size = this.getReplacementThumbnailSize(); return Utils.concatUrls("/api/gallery/content/", this.photo.directory.path, this.photo.directory.name, this.photo.name, "thumbnail", size.toString()); } getThumbnailPath() { let size = this.getThumbnailSize(); return Utils.concatUrls("/api/gallery/content/", this.photo.directory.path, this.photo.directory.name, this.photo.name, "thumbnail", size.toString()); } getPhotoPath() { return Utils.concatUrls("/api/gallery/content/", this.photo.directory.path, this.photo.directory.name, this.photo.name); } equals(other:any) { //is gridphoto if (other.photo) { return this.photo.directory.path === other.photo.directory.path && this.photo.directory.name === other.photo.directory.name && this.photo.name === other.photo.name } //is photo if (other.directory) { return this.photo.directory.path === other.directory.path && this.photo.directory.name === other.directory.name && this.photo.name === other.name } return false; } }