Files
Cultivation/src/utils/gamebanana.ts
2022-07-23 23:23:48 -07:00

100 lines
2.0 KiB
TypeScript

import { invoke } from '@tauri-apps/api'
// Generated with https://transform.tools/json-to-typescript I'm lazy cry about it
export interface GamebananaResponse {
_idRow: number
_sModelName: string
_sSingularTitle: string
_sIconClasses: string
_sName: string
_sProfileUrl: string
_aPreviewMedia: PreviewMedia
_tsDateAdded: number
_bHasFiles: boolean
_aSubmitter: Submitter
_aRootCategory: RootCategory
_bIsNsfw: boolean
_sInitialVisibility: string
_nLikeCount?: number
_bIsOwnedByAccessor: boolean
_nViewCount?: number
_nPostCount?: number
_tsDateUpdated?: number
}
export interface PreviewMedia {
_aImages?: Image[]
_aMetadata?: Metadata
}
export interface Image {
_sType: string
_sBaseUrl: string
_sFile: string
_sFile530?: string
_sFile100: string
_sFile220?: string
_sCaption?: string
}
export interface Metadata {
_sState?: string
_sSnippet: string
_nPostCount?: number
_nBounty?: number
}
export interface Submitter {
_idRow: number
_sName: string
_bIsOnline: boolean
_bHasRipe: boolean
_sProfileUrl: string
_sAvatarUrl: string
_sUpicUrl?: string
_aClearanceLevels?: string[]
_sHdAvatarUrl?: string
}
export interface RootCategory {
_sName: string
_sProfileUrl: string
_sIconUrl: string
}
export async function getMods(mode: string) {
const resp = JSON.parse(
await invoke('list_submissions', {
mode,
})
)
return formatGamebananaData(resp)
}
export async function formatGamebananaData(obj: GamebananaResponse[]) {
if (!obj) return []
return obj.map((itm) => {
const img = itm?._aPreviewMedia?._aImages
return {
id: itm._idRow,
name: itm._sName,
images: img
? img.map((i) => {
return i._sBaseUrl + i._sFile
})
: [],
dateadded: itm._tsDateAdded,
submitter: {
name: itm._aSubmitter._sName,
url: itm._aSubmitter._sProfileUrl,
},
nsfw: itm._bIsNsfw,
likes: itm?._nLikeCount || 0,
views: itm?._nViewCount || 0,
}
})
}