refactor(all-in-one): clean up
This commit is contained in:
parent
01adee763f
commit
bdcf825de7
@ -1,27 +0,0 @@
|
||||
import classNames from 'classnames'
|
||||
|
||||
interface ButtonProps extends React.ComponentPropsWithoutRef<'button'> {
|
||||
icon: JSX.Element
|
||||
value: string
|
||||
className?: string
|
||||
handler?: () => void
|
||||
}
|
||||
|
||||
export const Button: React.FC<ButtonProps> = ({
|
||||
icon,
|
||||
value,
|
||||
className,
|
||||
handler
|
||||
}) => {
|
||||
return (
|
||||
<button
|
||||
onClick={handler}
|
||||
className={classNames(
|
||||
className,
|
||||
'flex items-center justify-center gap-x-5'
|
||||
)}>
|
||||
{icon}
|
||||
<span className='uppercase'>{value}</span>
|
||||
</button>
|
||||
)
|
||||
}
|
@ -1 +0,0 @@
|
||||
export * from './Button'
|
@ -1,68 +0,0 @@
|
||||
import classNames from 'classnames'
|
||||
import { AnimatePresence, motion } from 'framer-motion'
|
||||
import { useState } from 'react'
|
||||
|
||||
export interface IDownloaderContent {
|
||||
title: string
|
||||
features: string[]
|
||||
}
|
||||
|
||||
interface DownloaderProps {
|
||||
className?: string
|
||||
children: React.ReactNode
|
||||
content: IDownloaderContent
|
||||
}
|
||||
|
||||
export const Downloader: React.FC<DownloaderProps> = ({
|
||||
className,
|
||||
children,
|
||||
content
|
||||
}) => {
|
||||
const [activeContent, setActiveContent] = useState(false)
|
||||
|
||||
const handleActiveContent = (): void => {
|
||||
return setActiveContent(!activeContent)
|
||||
}
|
||||
|
||||
return (
|
||||
<li
|
||||
className={classNames(
|
||||
className,
|
||||
'relative rounded-xl shadow-red-500 hover:shadow-2xl'
|
||||
)}
|
||||
onMouseEnter={handleActiveContent}
|
||||
onMouseLeave={handleActiveContent}>
|
||||
{children}
|
||||
|
||||
<AnimatePresence>
|
||||
{activeContent && (
|
||||
<motion.ul
|
||||
initial={{ opacity: 0 }}
|
||||
animate={{ opacity: 1, transition: { staggerChildren: 0.5 } }}
|
||||
exit={{ opacity: 0 }}
|
||||
className='pointer-events-none text-center absolute left-0 top-0 flex h-full w-full flex-col items-center justify-center rounded-xl bg-black/70 pb-5 text-[12px] text-white'>
|
||||
<motion.h1
|
||||
initial={{ opacity: 0, y: -20 }}
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
exit={{ opacity: 0, y: -20 }}
|
||||
className='mb-3 text-[16px]'>
|
||||
{content.title}
|
||||
</motion.h1>
|
||||
|
||||
{content.features.map((feature) => {
|
||||
return (
|
||||
<motion.span
|
||||
initial={{ opacity: 0, y: 50, scale: 0.75 }}
|
||||
animate={{ opacity: 1, y: 0, scale: 1 }}
|
||||
exit={{ opacity: 0, y: 50, scale: 0.75 }}
|
||||
key={feature}>
|
||||
{feature}
|
||||
</motion.span>
|
||||
)
|
||||
})}
|
||||
</motion.ul>
|
||||
)}
|
||||
</AnimatePresence>
|
||||
</li>
|
||||
)
|
||||
}
|
@ -1 +0,0 @@
|
||||
export * from './Downloader'
|
@ -1,19 +0,0 @@
|
||||
import classNames from 'classnames'
|
||||
|
||||
interface ImageProps extends React.ComponentPropsWithoutRef<'img'> {
|
||||
size?: number
|
||||
icon?: boolean
|
||||
}
|
||||
|
||||
export const Image: React.FC<ImageProps> = ({ size, icon, ...rest }) => {
|
||||
return (
|
||||
<img
|
||||
{...rest}
|
||||
draggable={false}
|
||||
style={{ imageRendering: Boolean(icon) ? 'pixelated' : 'unset' }}
|
||||
className={classNames(rest.className, 'select-none')}
|
||||
height={size ?? rest.height}
|
||||
width={size ?? rest.width}
|
||||
/>
|
||||
)
|
||||
}
|
@ -1 +0,0 @@
|
||||
export * from './Image'
|
@ -1,40 +0,0 @@
|
||||
import { Maximize, Minus, X } from 'react-feather'
|
||||
import { appWindow } from '@tauri-apps/api/window'
|
||||
|
||||
import { Image } from '../Image'
|
||||
|
||||
export const TitleBar: React.FC = () => {
|
||||
return (
|
||||
<nav className='flex w-full h-[40px] items-center justify-between bg-[#1f1f1f] text-white'>
|
||||
<div
|
||||
className='w-full select-none'
|
||||
onMouseDown={async () => {
|
||||
return await appWindow.startDragging()
|
||||
}}>
|
||||
<Image src='/Logo.svg' size={60} className='ml-3 p-1' />
|
||||
</div>
|
||||
|
||||
<ul className='flex h-full'>
|
||||
<li
|
||||
className='grid h-full w-14 cursor-pointer place-items-center transition-colors duration-[10ms] hover:bg-[#2a2a2a]'
|
||||
onClick={async () => {
|
||||
return await appWindow.minimize()
|
||||
}}>
|
||||
<Minus />
|
||||
</li>
|
||||
|
||||
<li className='grid h-full w-14 place-items-center cursor-not-allowed opacity-40'>
|
||||
<Maximize size={20} />
|
||||
</li>
|
||||
|
||||
<li
|
||||
className='grid h-full w-14 cursor-pointer place-items-center transition-colors duration-[10ms] hover:bg-red-500'
|
||||
onClick={async () => {
|
||||
return await appWindow.close()
|
||||
}}>
|
||||
<X />
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
)
|
||||
}
|
@ -1 +0,0 @@
|
||||
export * from './TitleBar'
|
@ -1,19 +0,0 @@
|
||||
import { Fragment } from 'react'
|
||||
|
||||
import { TitleBar } from '../TitleBar/TitleBar'
|
||||
|
||||
interface WindowProps {
|
||||
children: React.ReactNode
|
||||
}
|
||||
|
||||
export const Window: React.FC<WindowProps> = ({ children }) => {
|
||||
return (
|
||||
<Fragment>
|
||||
<TitleBar />
|
||||
|
||||
<main className='flex items-center justify-center py-20 h-full w-screen flex-col bg-[#242424]'>
|
||||
{children}
|
||||
</main>
|
||||
</Fragment>
|
||||
)
|
||||
}
|
@ -1 +0,0 @@
|
||||
export * from './Window'
|
@ -1,4 +0,0 @@
|
||||
export * from './Window'
|
||||
export * from './Image'
|
||||
export * from './Button'
|
||||
export * from './Downloader'
|
@ -1,62 +0,0 @@
|
||||
import { getClient, ResponseType } from '@tauri-apps/api/http'
|
||||
|
||||
import type { DomainTypes, GameEndPointsTypes } from '../types'
|
||||
|
||||
const PROD_VERSION_REGEX = /(production-[^/]+)/im
|
||||
const STABLE_PROD_VERSION = 'PRODUCTION-202303282207-162719871'
|
||||
|
||||
export let PROD_VERSION: string | undefined
|
||||
|
||||
const HABBO_URL = (domain: DomainTypes): string => {
|
||||
return `https://www.habbo.${domain}`
|
||||
}
|
||||
|
||||
const HABBO_IMAGES = `https://images.habbo.com/gordon/${
|
||||
PROD_VERSION ?? STABLE_PROD_VERSION
|
||||
}`
|
||||
|
||||
export const client = await getClient()
|
||||
await client
|
||||
.get(`${HABBO_URL('com')}/gamedata/external_variables/0`, {
|
||||
responseType: ResponseType.Text
|
||||
})
|
||||
.then(({ data }) => {
|
||||
return (PROD_VERSION = (data as string).match(PROD_VERSION_REGEX)?.[0])
|
||||
})
|
||||
|
||||
export const GAME_ENDPOINTS = (domain: DomainTypes): GameEndPointsTypes => {
|
||||
return [
|
||||
{
|
||||
src: `${HABBO_URL(domain)}/gamedata/figuredata/0`,
|
||||
convert: 'XML',
|
||||
fileName: 'FigureData'
|
||||
},
|
||||
{
|
||||
src: `${HABBO_IMAGES}/figuremap.xml`,
|
||||
convert: 'XML',
|
||||
fileName: 'FigureMap'
|
||||
},
|
||||
{
|
||||
src: `${HABBO_URL(domain)}/gamedata/furnidata_json/0`,
|
||||
fileName: 'FurniData'
|
||||
},
|
||||
{
|
||||
src: `${HABBO_URL(domain)}/gamedata/productdata_json/0`,
|
||||
fileName: 'ProductData'
|
||||
},
|
||||
{
|
||||
src: `${HABBO_IMAGES}/effectmap.xml`,
|
||||
convert: 'XML',
|
||||
fileName: 'EffectMap'
|
||||
},
|
||||
{
|
||||
src: `${HABBO_URL(domain)}/gamedata/external_flash_texts/0`,
|
||||
convert: 'TXT',
|
||||
fileName: 'ExternalTexts'
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
export const ASSETS_ENDPOINTS = (domain: DomainTypes): string[] => {
|
||||
return [`${HABBO_URL(domain)}/`]
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
import { parseData } from '../utils/parseData'
|
||||
|
||||
interface IBadge {
|
||||
code: string
|
||||
name?: string
|
||||
description?: string
|
||||
}
|
||||
|
||||
const badgePattern = /^badge_(?:name|desc)_([^=]+)/gim
|
||||
const descriptionPattern = /^badge_desc_(\s*\w+)/
|
||||
const namePattern = /^badge_name_(\s*\w+)/
|
||||
|
||||
export const convertTXT = async (data: string): Promise<void> => {
|
||||
const badges: IBadge[] = []
|
||||
|
||||
const lines = data.split(/\r?\n/)
|
||||
|
||||
for (const line of lines) {
|
||||
const [key, value] = line.split('=')
|
||||
const badge = key.match(badgePattern)
|
||||
|
||||
if (badge != null) {
|
||||
if (key.match(namePattern) != null) {
|
||||
const badgeCode = key.match(namePattern)?.[1] as string
|
||||
const existingBadge = badges.filter((badge) => {
|
||||
return badge.code === badgeCode
|
||||
})[0]
|
||||
|
||||
if (Boolean(existingBadge)) {
|
||||
const index = badges.indexOf(existingBadge)
|
||||
badges[index].name = value
|
||||
} else {
|
||||
badges.push({ code: badgeCode, name: value })
|
||||
}
|
||||
} else if (key.match(descriptionPattern) != null) {
|
||||
const badgeCode = key.match(descriptionPattern)?.[1] as string
|
||||
const existingBadge = badges.filter((badge) => {
|
||||
return badge.code === badgeCode
|
||||
})[0]
|
||||
|
||||
if (Boolean(existingBadge)) {
|
||||
const index = badges.indexOf(existingBadge)
|
||||
badges[index].description = value
|
||||
} else {
|
||||
badges.push({ code: badgeCode, description: value })
|
||||
}
|
||||
}
|
||||
|
||||
lines.splice(lines.indexOf(line), 1)
|
||||
}
|
||||
}
|
||||
|
||||
return await parseData('Badges', badges)
|
||||
}
|
@ -1,194 +0,0 @@
|
||||
import type {
|
||||
IEffectMap,
|
||||
IEffectMapLibrary,
|
||||
IFigureData,
|
||||
IFigureDataColor,
|
||||
IFigureDataHiddenLayer,
|
||||
IFigureDataPalette,
|
||||
IFigureDataPart,
|
||||
IFigureDataSet,
|
||||
IFigureDataSetType,
|
||||
IFigureMap,
|
||||
IFigureMapLibrary,
|
||||
IFigureMapLibraryPart
|
||||
} from '../types'
|
||||
|
||||
export const convertXML = (
|
||||
XML: any,
|
||||
url: string
|
||||
): IFigureData | IFigureMap | IEffectMap => {
|
||||
if (url.includes('figuredata')) {
|
||||
const output: IFigureData = { palettes: [], setTypes: [] }
|
||||
|
||||
for (const paletteXML of XML.figuredata.colors.palette) {
|
||||
const palette: IFigureDataPalette = { id: 0, color: [] }
|
||||
|
||||
if (paletteXML.id !== undefined) palette.id = paletteXML.id
|
||||
|
||||
if (paletteXML.color !== undefined) {
|
||||
for (const colorXML of paletteXML.color) {
|
||||
const color: IFigureDataColor = {
|
||||
id: 0,
|
||||
index: 0,
|
||||
club: 0,
|
||||
selectable: false,
|
||||
hexCode: ''
|
||||
}
|
||||
|
||||
const hexColor = String(colorXML['#text' as keyof IFigureDataColor])
|
||||
|
||||
if (colorXML.id !== undefined) color.id = colorXML.id
|
||||
if (colorXML.index !== undefined) color.index = colorXML.index
|
||||
if (colorXML.club !== undefined) color.club = colorXML.club
|
||||
if (colorXML.selectable !== undefined)
|
||||
color.selectable = colorXML.selectable === 0 ? true : false
|
||||
if (hexColor !== undefined) color.hexCode = hexColor
|
||||
|
||||
palette.color.push(color)
|
||||
}
|
||||
}
|
||||
|
||||
output.palettes.push(palette)
|
||||
}
|
||||
|
||||
for (const setTypeXML of XML.figuredata.sets.settype) {
|
||||
const settype: IFigureDataSetType = {
|
||||
type: '',
|
||||
paletteId: 0,
|
||||
mandatoryF0: false,
|
||||
mandatoryF1: false,
|
||||
mandatoryM0: false,
|
||||
mandatoryM1: false,
|
||||
sets: []
|
||||
}
|
||||
|
||||
if (setTypeXML.type !== undefined) settype.type = setTypeXML.type
|
||||
if (setTypeXML.paletteId !== undefined)
|
||||
settype.paletteId = setTypeXML.paletteId
|
||||
if (setTypeXML.mandatoryF0 !== undefined)
|
||||
settype.mandatoryF0 = setTypeXML.mandatoryF0
|
||||
if (setTypeXML.mandatoryF1 !== undefined)
|
||||
settype.mandatoryF1 = setTypeXML.mandatoryF1
|
||||
if (setTypeXML.mandatoryM0 !== undefined)
|
||||
settype.mandatoryM0 = setTypeXML.mandatoryM0
|
||||
if (setTypeXML.mandatoryM1 !== undefined)
|
||||
settype.mandatoryM1 = setTypeXML.mandatoryM1
|
||||
|
||||
if (setTypeXML.sets !== undefined) {
|
||||
for (const setXML of setTypeXML.sets) {
|
||||
const setType: IFigureDataSet = {
|
||||
id: 0,
|
||||
gender: 'U',
|
||||
club: 0,
|
||||
colorable: false,
|
||||
selectable: false,
|
||||
preselectable: false,
|
||||
sellable: false,
|
||||
parts: [],
|
||||
hiddenLayers: []
|
||||
}
|
||||
|
||||
if (setXML.id !== undefined) setType.id = setXML.id
|
||||
if (setXML.gender !== undefined) setType.gender = setXML.gender
|
||||
if (setXML.club !== undefined) setType.club = setXML.club
|
||||
if (setXML.colorable !== undefined)
|
||||
setType.colorable = setXML.colorable === 0 ? true : false
|
||||
if (setXML.selectable !== undefined)
|
||||
setType.selectable = setXML.selectable
|
||||
if (setXML.preselectable !== undefined)
|
||||
setType.preselectable = setXML.preselectable
|
||||
if (setXML.sellable !== undefined) setType.sellable = setXML.sellable
|
||||
|
||||
if (setXML.parts !== undefined) {
|
||||
for (const partXML of setXML.parts) {
|
||||
const part: IFigureDataPart = {
|
||||
id: 0,
|
||||
type: '',
|
||||
colorable: false,
|
||||
index: 0,
|
||||
colorindex: 0
|
||||
}
|
||||
|
||||
if (partXML.id !== undefined) part.id = partXML.id
|
||||
if (partXML.type !== undefined) part.type = partXML.type
|
||||
if (partXML.colorable !== undefined)
|
||||
part.colorable = partXML.colorable
|
||||
if (partXML.index !== undefined) part.index = partXML.index
|
||||
if (partXML.colorindex !== undefined)
|
||||
part.colorindex = partXML.colorindex
|
||||
|
||||
setType.parts.push(part)
|
||||
}
|
||||
}
|
||||
|
||||
if (setXML.hiddenLayers !== undefined) {
|
||||
for (const hiddenLayerXML of setXML.hiddenLayers) {
|
||||
const hiddenLayer: IFigureDataHiddenLayer = { partType: '' }
|
||||
|
||||
if (hiddenLayerXML.partType !== undefined)
|
||||
hiddenLayer.partType = hiddenLayerXML.partType
|
||||
|
||||
setType.hiddenLayers?.push(hiddenLayer)
|
||||
}
|
||||
}
|
||||
|
||||
settype.sets.push(setType)
|
||||
}
|
||||
}
|
||||
|
||||
output.setTypes.push(setTypeXML)
|
||||
}
|
||||
|
||||
return output
|
||||
} else if (url.includes('figuremap')) {
|
||||
const output: IFigureMap = { libraries: [] }
|
||||
|
||||
for (const libraryXML of XML.map.lib as IFigureMapLibrary[]) {
|
||||
const library: IFigureMapLibrary = { id: '', revision: 0, part: [] }
|
||||
|
||||
if (libraryXML.id !== undefined) library.id = libraryXML.id
|
||||
if (libraryXML.revision !== undefined)
|
||||
library.revision = libraryXML.revision
|
||||
|
||||
if (Array.isArray(libraryXML.part)) {
|
||||
for (const libraryPart of libraryXML.part) {
|
||||
const libraryPartXML: IFigureMapLibraryPart = { id: 0, type: '' }
|
||||
|
||||
if (libraryPart.id !== undefined) libraryPartXML.id = libraryPart.id
|
||||
if (libraryPart.type !== undefined)
|
||||
libraryPartXML.type = libraryPart.type
|
||||
|
||||
library.part.push(libraryPartXML)
|
||||
}
|
||||
} else {
|
||||
const libraryPart = libraryXML.part as unknown as IFigureMapLibraryPart
|
||||
library.part.push({ id: libraryPart.id, type: libraryPart.type })
|
||||
}
|
||||
|
||||
output.libraries.push(library)
|
||||
}
|
||||
|
||||
return output
|
||||
} else {
|
||||
const output: IEffectMap = { effects: [] }
|
||||
|
||||
for (const libraryXML of XML.map.effect as IEffectMapLibrary[]) {
|
||||
const library: IEffectMapLibrary = {
|
||||
id: 0,
|
||||
lib: '',
|
||||
type: '',
|
||||
revision: 0
|
||||
}
|
||||
|
||||
if (libraryXML.id !== undefined) library.id = libraryXML.id
|
||||
if (libraryXML.lib !== undefined) library.lib = libraryXML.lib
|
||||
if (libraryXML.type !== undefined) library.type = libraryXML.type
|
||||
if (libraryXML.revision !== undefined)
|
||||
library.revision = libraryXML.revision
|
||||
|
||||
output.effects.push(library)
|
||||
}
|
||||
|
||||
return output
|
||||
}
|
||||
}
|
@ -1,2 +0,0 @@
|
||||
export * from './convertXML'
|
||||
export * from './convertTXT'
|
56
src/types/SubConverters.d.ts
vendored
56
src/types/SubConverters.d.ts
vendored
@ -2,35 +2,35 @@ export interface IFurni {
|
||||
id: number
|
||||
classname: string
|
||||
revision: number
|
||||
category: string
|
||||
category?: string
|
||||
defaultdir: number
|
||||
xdim: number
|
||||
ydim: number
|
||||
partcolors: { color: string[] }
|
||||
name: string
|
||||
description: string
|
||||
adurl: string
|
||||
offerid: number
|
||||
partcolors?: { color: string[] }
|
||||
name?: string
|
||||
description?: string
|
||||
adurl?: string
|
||||
offerid?: number
|
||||
buyout: boolean
|
||||
rentofferid: number
|
||||
rentbuyout: boolean
|
||||
bc: boolean
|
||||
excludeddynamic: boolean
|
||||
customparams: string
|
||||
customparams?: string
|
||||
specialtype: number
|
||||
canstandon: boolean
|
||||
cansiton: boolean
|
||||
canlayon: boolean
|
||||
furniline: string
|
||||
environment: string
|
||||
furniline?: string
|
||||
environment?: string
|
||||
rare: boolean
|
||||
}
|
||||
|
||||
export interface IFigureDataColor {
|
||||
id: number
|
||||
index: number
|
||||
club: number // must be changed, either 0, 1, 2
|
||||
selectable: boolean
|
||||
club: number // must be changed to something, either 0, 1, 2
|
||||
selectable: boolean // has been changed to boolean, can be either 1, 0
|
||||
hexCode: string
|
||||
}
|
||||
|
||||
@ -41,35 +41,31 @@ export interface IFigureDataPalette {
|
||||
|
||||
export interface IFigureDataPart {
|
||||
id: number
|
||||
type: string // must be changed
|
||||
colorable: boolean // must be changed
|
||||
type: string // must be changed (i guess)
|
||||
colorable: boolean // has been changed to boolean, can be either 1, 0
|
||||
index: number
|
||||
colorindex: number
|
||||
}
|
||||
|
||||
export interface IFigureDataHiddenLayer {
|
||||
partType: string // must be changed
|
||||
}
|
||||
|
||||
export interface IFigureDataSet {
|
||||
id: number
|
||||
gender: 'M' | 'F' | 'U'
|
||||
club: number // 0, 1, 2
|
||||
colorable: boolean // must be changed
|
||||
selectable: boolean // must be changed
|
||||
preselectable: boolean // must be changed
|
||||
sellable?: boolean // must be changed
|
||||
gender: 'M' | 'F' | 'U' // has been changed
|
||||
club: number // must be changed to something, either 0, 1, 2
|
||||
colorable: boolean // has been changed to boolean, can be either 1, 0
|
||||
selectable: boolean // has been changed to boolean, can be either 1, 0
|
||||
preselectable: boolean // has been changed to boolean, can be either 1, 0
|
||||
sellable?: boolean // has been changed to boolean, can be either 1, 0, null
|
||||
parts: IFigureDataPart[]
|
||||
hiddenLayers?: IFigureDataHiddenLayer[]
|
||||
hiddenLayers: Array<{ partType: string }> // !! can be empty
|
||||
}
|
||||
|
||||
export interface IFigureDataSetType {
|
||||
type: string // must be changed
|
||||
type: string // must be changed (i guess)
|
||||
paletteId: number
|
||||
mandatoryF0: boolean // 0, 1
|
||||
mandatoryF1: boolean // 0, 1
|
||||
mandatoryM0: boolean // 0, 1
|
||||
mandatoryM1: boolean // 0, 1
|
||||
mandatoryF0: boolean // has been changed to boolean, can be either 1, 0
|
||||
mandatoryF1: boolean // has been changed to boolean, can be either 1, 0
|
||||
mandatoryM0: boolean // has been changed to boolean, can be either 1, 0
|
||||
mandatoryM1: boolean // has been changed to boolean, can be either 1, 0
|
||||
sets: IFigureDataSet[]
|
||||
}
|
||||
|
||||
@ -87,7 +83,7 @@ export interface IFigureMapLibrary {
|
||||
export interface IEffectMapLibrary {
|
||||
id: number
|
||||
lib: string
|
||||
type: string
|
||||
type: string // dance || fx
|
||||
revision: number
|
||||
}
|
||||
|
||||
|
@ -1,50 +0,0 @@
|
||||
import { ResponseType } from '@tauri-apps/api/http'
|
||||
import { XMLParser } from 'fast-xml-parser'
|
||||
|
||||
import { GAME_ENDPOINTS, client } from '../config/ENDPOINTS'
|
||||
import type { DomainTypes } from '../types/Domain'
|
||||
import { convertTXT, convertXML } from '../mapping'
|
||||
import { parseData } from './parseData'
|
||||
|
||||
export const fetchGameData = async (
|
||||
domain: DomainTypes,
|
||||
callback: (message: string, error: boolean) => void,
|
||||
assetsOption = false
|
||||
): Promise<void> => {
|
||||
if (!assetsOption) {
|
||||
await Promise.all(
|
||||
GAME_ENDPOINTS(domain).map(async (endpoint) => {
|
||||
await client
|
||||
.get(endpoint.src, { responseType: ResponseType.Text })
|
||||
.then(async ({ data }) => {
|
||||
const currentData = data as string
|
||||
|
||||
switch (endpoint.convert) {
|
||||
case 'XML':
|
||||
const convertedData = new XMLParser({
|
||||
ignoreAttributes: false,
|
||||
attributeNamePrefix: ''
|
||||
}).parse(currentData)
|
||||
|
||||
const XML2JSON = convertXML(convertedData, endpoint.src)
|
||||
|
||||
return await parseData(endpoint.fileName, XML2JSON)
|
||||
case 'TXT':
|
||||
return await convertTXT(currentData)
|
||||
|
||||
default:
|
||||
return await parseData(endpoint.fileName, currentData)
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error(error)
|
||||
return callback(error, true)
|
||||
})
|
||||
})
|
||||
)
|
||||
} else {
|
||||
/* ASSETS_ENDPOINTS(domain).map((endpoint) => {
|
||||
client.get()
|
||||
}) */
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
import { downloadDir } from '@tauri-apps/api/path'
|
||||
import { createDir, exists, writeTextFile } from '@tauri-apps/api/fs'
|
||||
|
||||
import { PROD_VERSION } from '../config/ENDPOINTS'
|
||||
|
||||
export const parseData = async (
|
||||
fileName: string,
|
||||
fileContent: string | object
|
||||
): Promise<void> => {
|
||||
const outputDir = (await downloadDir()).concat(String(PROD_VERSION))
|
||||
const fileDir = outputDir.concat(`/${fileName}.json`)
|
||||
|
||||
if (!(await exists(outputDir))) await createDir(outputDir)
|
||||
|
||||
await writeTextFile(
|
||||
fileDir,
|
||||
typeof fileContent === 'object' ? JSON.stringify(fileContent) : fileContent
|
||||
)
|
||||
}
|
Loading…
Reference in New Issue
Block a user