diff --git a/src/back/importGame.ts b/src/back/importGame.ts index 44254c901..3a19165a0 100644 --- a/src/back/importGame.ts +++ b/src/back/importGame.ts @@ -4,7 +4,7 @@ import { Tag } from '@database/entity/Tag'; import { TagCategory } from '@database/entity/TagCategory'; import { validateSemiUUID } from '@renderer/util/uuid'; import { htdocsPath, LOGOS, SCREENSHOTS } from '@shared/constants'; -import { convertEditToCurationMeta } from '@shared/curate/metaToMeta'; +import { convertEditToCurationMetaFile } from '@shared/curate/metaToMeta'; import { CurationIndexImage, EditAddAppCuration, EditAddAppCurationMeta, EditCuration, EditCurationMeta } from '@shared/curate/types'; import { getContentFolderByKey, getCurationFolder, indexContentFolder } from '@shared/curate/util'; import { sizeToString } from '@shared/Util'; @@ -129,7 +129,7 @@ export async function importCuration(opts: ImportCurationOpts): Promise { if (saveCuration) { // Save working meta const metaPath = path.join(getCurationFolder(curation, fpPath), 'meta.yaml'); - const meta = YAML.stringify(convertEditToCurationMeta(curation.meta, opts.tagCategories, curation.addApps)); + const meta = YAML.stringify(convertEditToCurationMetaFile(curation.meta, opts.tagCategories, curation.addApps)); await fs.writeFile(metaPath, meta); // Date in form 'YYYY-MM-DD' for folder sorting const date = new Date(); @@ -219,7 +219,7 @@ async function createGameFromCurationMeta(gameId: string, gameMeta: EditCuration dateAdded: date.toISOString(), dateModified: date.toISOString(), broken: false, - extreme: !!strToBool(gameMeta.extreme || ''), + extreme: gameMeta.extreme || false, library: gameMeta.library || '', orderTitle: '', // This will be set when saved addApps: [], diff --git a/src/back/responses.ts b/src/back/responses.ts index 55595f8ff..f718027b1 100644 --- a/src/back/responses.ts +++ b/src/back/responses.ts @@ -5,7 +5,7 @@ import { AddLogData, BackIn, BackInit, BackOut, BrowseChangeData, BrowseViewInde import { overwriteConfigData } from '@shared/config/util'; import { LOGOS, SCREENSHOTS } from '@shared/constants'; import { stringifyCurationFormat } from '@shared/curate/format/stringifier'; -import { convertToCurationMeta } from '@shared/curate/metaToMeta'; +import { convertGameToCurationMetaFile } from '@shared/curate/metaToMeta'; import { getContentFolderByKey } from '@shared/curate/util'; import { DeepPartial, GamePropSuggestions, INamedBackProcessInfo, IService, ProcessAction } from '@shared/interfaces'; import { MetaEditFile, MetaEditMeta } from '@shared/MetaEdit'; @@ -432,7 +432,7 @@ export function registerRequestCallbacks(state: BackState): void { try { await writeFile( reqData.metaOnly ? reqData.location : path.join(reqData.location, 'meta.txt'), - stringifyCurationFormat(convertToCurationMeta(game, await TagManager.findTagCategories()))); + stringifyCurationFormat(convertGameToCurationMetaFile(game, await TagManager.findTagCategories()))); } catch (e) { console.error(e); } // Copy images diff --git a/src/renderer/components/CurateBox.tsx b/src/renderer/components/CurateBox.tsx index 5d7cb92b6..2b9cf1dc5 100644 --- a/src/renderer/components/CurateBox.tsx +++ b/src/renderer/components/CurateBox.tsx @@ -2,7 +2,7 @@ import { Tag } from '@database/entity/Tag'; import { TagCategory } from '@database/entity/TagCategory'; import { BackIn, LaunchCurationData, TagByIdData, TagByIdResponse, TagGetOrCreateData, TagGetOrCreateResponse, TagSuggestion, TagSuggestionsData, TagSuggestionsResponse } from '@shared/back/types'; import { htdocsPath } from '@shared/constants'; -import { convertEditToCurationMeta } from '@shared/curate/metaToMeta'; +import { convertEditToCurationMetaFile } from '@shared/curate/metaToMeta'; import { CurationIndex, EditCuration, EditCurationMeta, IndexedContent } from '@shared/curate/types'; import { getContentFolderByKey, getCurationFolder, indexContentFolder } from '@shared/curate/util'; import { GamePropSuggestions } from '@shared/interfaces'; @@ -425,7 +425,7 @@ export function CurateBox(props: CurateBoxProps) { .catch((error) => { /* No file is okay, ignore error */ }); // Save working meta const metaPath = path.join(getCurationFolder2(curation), 'meta.yaml'); - const meta = YAML.stringify(convertEditToCurationMeta(curation.meta, props.tagCategories, curation.addApps)); + const meta = YAML.stringify(convertEditToCurationMetaFile(curation.meta, props.tagCategories, curation.addApps)); const statusProgress = newProgress(props.curation.key, progressDispatch); ProgressDispatch.setText(statusProgress, 'Exporting Curation...'); ProgressDispatch.setUsePercentDone(statusProgress, false); @@ -798,7 +798,7 @@ export function CurateBox(props: CurateBoxProps) { @@ -964,7 +964,7 @@ function useOnCheckboxToggle(property: keyof EditCurationMeta, key: string | und payload: { key: key, property: property, - value: checked ? 'Yes' : 'No', // Note: This is hard-coded in english because it is written to the meta file + value: checked } }); } diff --git a/src/renderer/components/pages/CuratePage.tsx b/src/renderer/components/pages/CuratePage.tsx index 1f613ac22..9c991c3fe 100644 --- a/src/renderer/components/pages/CuratePage.tsx +++ b/src/renderer/components/pages/CuratePage.tsx @@ -2,7 +2,7 @@ import { WithTagCategoriesProps } from '@renderer/containers/withTagCategories'; import { BackIn, ImportCurationData, ImportCurationResponseData } from '@shared/back/types'; import { ARCADE } from '@shared/constants'; import { GameMetaDefaults } from '@shared/curate/defaultValues'; -import { convertEditToCurationMeta, convertParsedToCurationMeta } from '@shared/curate/metaToMeta'; +import { convertEditToCurationMetaFile, convertParsedToCurationMeta } from '@shared/curate/metaToMeta'; import { CurationIndex, EditCuration, EditCurationMeta } from '@shared/curate/types'; import { getContentFolderByKey, getCurationFolder, indexContentFolder } from '@shared/curate/util'; import { GamePropSuggestions } from '@shared/interfaces'; @@ -313,7 +313,7 @@ export function CuratePage(props: CuratePageProps) { // Save if not marked } else { const metaPath = path.join(getCurationFolder2(curation), 'meta.yaml'); - const meta = YAML.stringify(convertEditToCurationMeta(curation.meta, props.tagCategories, curation.addApps)); + const meta = YAML.stringify(convertEditToCurationMetaFile(curation.meta, props.tagCategories, curation.addApps)); try { fs.writeFileSync(metaPath, meta); } catch (error) { diff --git a/src/shared/curate/metaToMeta.ts b/src/shared/curate/metaToMeta.ts index b61c7fb45..2b317af95 100644 --- a/src/shared/curate/metaToMeta.ts +++ b/src/shared/curate/metaToMeta.ts @@ -8,8 +8,8 @@ import { EditAddAppCuration, EditCurationMeta } from './types'; * @param game Game to convert. * @param addApps Additional applications of the game. */ -export function convertToCurationMeta(game: Game, categories: TagCategory[]): CurationFormatMeta { - const parsed: CurationFormatMeta = {}; +export function convertGameToCurationMetaFile(game: Game, categories: TagCategory[]): CurationMetaFile { + const parsed: CurationMetaFile = {}; const tagCategories = game.tags.map(t => { const cat = categories.find(c => c.id === t.categoryId); return cat ? cat.name : 'default'; @@ -74,8 +74,8 @@ export function convertToCurationMeta(game: Game, categories: TagCategory[]): Cu * @param curation Curation to convert. * @param addApps Additional applications of the curation. */ -export function convertEditToCurationMeta(curation: EditCurationMeta, categories: TagCategory[], addApps?: EditAddAppCuration[]): CurationFormatMeta { - const parsed: CurationFormatMeta = {}; +export function convertEditToCurationMetaFile(curation: EditCurationMeta, categories: TagCategory[], addApps?: EditAddAppCuration[]): CurationMetaFile { + const parsed: CurationMetaFile = {}; const tagCategories = curation.tags ? curation.tags.map(t => { const cat = categories.find(c => c.id === t.categoryId); return cat ? cat.name : 'default'; @@ -91,7 +91,7 @@ export function convertEditToCurationMeta(curation: EditCurationMeta, categories parsed['Release Date'] = curation.releaseDate; parsed['Version'] = curation.version; parsed['Languages'] = curation.language; - parsed['Extreme'] = curation.extreme; + parsed['Extreme'] = curation.extreme ? 'Yes' : 'No'; parsed['Tags'] = curation.tags ? curation.tags.map(t => t.primaryAlias.name).join('; ') : ''; parsed['Tag Categories'] = tagCategories.join('; '); parsed['Source'] = curation.source; @@ -147,8 +147,8 @@ export function convertEditToCurationMeta(curation: EditCurationMeta, categories * @param curation Parsed meta to convert. * @param addApps Additional applications of the curation. */ -export function convertParsedToCurationMeta(curation: ParsedCurationMeta, categories: TagCategory[]): CurationFormatMeta { - const parsed: CurationFormatMeta = {}; +export function convertParsedToCurationMeta(curation: ParsedCurationMeta, categories: TagCategory[]): CurationMetaFile { + const parsed: CurationMetaFile = {}; const tagCategories = curation.game.tags ? curation.game.tags.map(t => { const cat = categories.find(c => c.id === t.categoryId); return cat ? cat.name : 'default'; @@ -164,7 +164,7 @@ export function convertParsedToCurationMeta(curation: ParsedCurationMeta, catego parsed['Release Date'] = curation.game.releaseDate; parsed['Version'] = curation.game.version; parsed['Languages'] = curation.game.language; - parsed['Extreme'] = curation.game.extreme; + parsed['Extreme'] = curation.game.extreme ? 'Yes' : 'No'; parsed['Tags'] = curation.game.tags ? curation.game.tags.map(t => t.primaryAlias.name).join('; ') : ''; parsed['Tag Categories'] = tagCategories.join('; '); parsed['Source'] = curation.game.source; @@ -215,7 +215,7 @@ export function convertParsedToCurationMeta(curation: ParsedCurationMeta, catego return parsed; } -type CurationFormatMeta = { +type CurationMetaFile = { 'Application Path'?: string; 'Developer'?: string; 'Extreme'?: string; diff --git a/src/shared/curate/parse.ts b/src/shared/curate/parse.ts index 9082eef68..ed03d94e8 100644 --- a/src/shared/curate/parse.ts +++ b/src/shared/curate/parse.ts @@ -26,7 +26,7 @@ export async function parseCurationMetaOld(text: string): Promise { // Try parsing yaml file // Convert raw meta into a ParsedCurationMeta object - return await convertMeta(rawMeta); + return await parseCurationMetaFile(rawMeta); } /** @@ -44,7 +44,7 @@ export async function parseCurationMetaNew(rawMeta: any): Promise void): Promise { +export async function parseCurationMetaFile(data: any, onError?: (error: string) => void): Promise { // Default parsed data const parsed: ParsedCurationMeta = { game: {}, @@ -75,7 +75,7 @@ export async function convertMeta(data: any, onError?: (error: string) => void): parser.prop('application path', v => parsed.game.applicationPath = str(v)); parser.prop('curation notes', v => parsed.game.curationNotes = str(v)); parser.prop('developer', v => parsed.game.developer = arrayStr(v)); - parser.prop('extreme', v => parsed.game.extreme = str(v)); + parser.prop('extreme', v => parsed.game.extreme = str(v).toLowerCase() === 'yes' ? true : false); parser.prop('game notes', v => parsed.game.notes = str(v)); parser.prop('languages', v => parsed.game.language = str(v)); parser.prop('launch command', v => parsed.game.launchCommand = str(v)); diff --git a/src/shared/curate/types.ts b/src/shared/curate/types.ts index f07a3432c..b65fdfe8c 100644 --- a/src/shared/curate/types.ts +++ b/src/shared/curate/types.ts @@ -40,7 +40,7 @@ export type EditCurationMeta = Partial<{ developer: string; publisher: string; status: string; - extreme: string; + extreme: boolean; tags: Tag[]; source: string; launchCommand: string;