webamp/packages/skin-database/api/graphql/resolvers/ClassicSkinResolver.ts
Jordan Eldredge 50a7c2df49
Fix lints (#1335)
* Fix lints

* Fix typechecking
2025-12-15 22:12:14 -08:00

76 lines
2.1 KiB
TypeScript

import { ISkin } from "./CommonSkinResolver";
import { NodeResolver, toId } from "./NodeResolver";
import ReviewResolver from "./ReviewResolver";
import { ID, Int } from "grats";
import SkinModel from "../../../data/SkinModel";
/**
* A classic Winamp skin
* @gqlType ClassicSkin */
export default class ClassicSkinResolver implements NodeResolver, ISkin {
_model: SkinModel;
__typename = "ClassicSkin" as const;
constructor(model: SkinModel) {
this._model = model;
}
md5(): string {
return this._model.getMd5();
}
id(): ID {
return toId(this.__typename, this.md5());
}
async filename(normalize_extension?: boolean): Promise<string> {
return await this._model.getFileName(normalize_extension);
}
museum_url(): string {
return this._model.getMuseumUrl();
}
webamp_url(): string {
return this._model.getWebampUrl();
}
async screenshot_url(): Promise<string> {
return this._model.getScreenshotUrl();
}
readme_text(): Promise<string | null> {
return this._model.getReadme();
}
nsfw(): Promise<boolean> {
return this._model.getIsNsfw();
}
average_color(): string {
return this._model.getAverageColor();
}
/**
* Does the skin include sprite sheets for the media library?
* @gqlField */
has_media_library(): Promise<boolean> {
return this._model.hasMediaLibrary();
}
async reviews(): Promise<Array<ReviewResolver | null>> {
const reviews = await this._model.getReviews();
return reviews.map((row) => new ReviewResolver(row));
}
/**
* The date on which this skin was last updated in the Algolia search index.
* Given in simplified extended ISO format (ISO 8601).
* @gqlField */
async last_algolia_index_update_date(): Promise<string | null> {
const updates = await this._model.getAlgoliaIndexUpdates(1);
if (updates.length < 1) {
return null;
}
const update = updates[0];
return new Date(update.update_timestamp * 1000).toISOString();
}
/**
* The number of transparent pixels rendered by the skin.
* @gqlField */
transparent_pixels(): Promise<Int> {
return this._model.transparentPixels();
}
}