Savefile is proper now

This commit is contained in:
2026-01-27 18:43:15 -07:00
parent 482708038e
commit 1d7f888563
5 changed files with 51 additions and 29 deletions

View File

@@ -50,7 +50,7 @@ export default function VersionInfo () {
<p>
Installed{' '}
{new Intl.DateTimeFormat(undefined).format(
downloadedVersionsConfig.timestamps[managingVersion] ?? 0
downloadedVersionsConfig.list[managingVersion] ?? 0
)}
</p>
</div>

View File

@@ -106,7 +106,9 @@ export default function Installs () {
<p>
{(() => {
const count =
downloadedVersionsConfig?.list.filter(v => {
Object.keys(
downloadedVersionsConfig?.list ?? []
).filter(v => {
const info = getVersionInfo(v)
if (!info) return false
if (
@@ -136,12 +138,12 @@ export default function Installs () {
</div>
)
})}
{downloadedVersionsConfig?.list.filter(v => {
{Object.keys(downloadedVersionsConfig?.list ?? []).filter(v => {
const info = getVersionInfo(v)
if (!info) return false
return info.game === id
}).length != 0 ? (
downloadedVersionsConfig?.list
Object.keys(downloadedVersionsConfig?.list ?? [])
.sort((a, b) => {
const infoA = getVersionInfo(a)
const infoB = getVersionInfo(b)
@@ -219,7 +221,7 @@ export default function Installs () {
<p>
Installed{' '}
{new Intl.DateTimeFormat(undefined).format(
downloadedVersionsConfig.timestamps[entry]
downloadedVersionsConfig?.list[entry]
)}
</p>
</div>

View File

@@ -87,7 +87,9 @@ export default function RootLayout ({
if (!normalConfig || !serverVersionList) return []
return serverVersionList.versions
.filter(v => !downloadedVersionsConfig?.list.includes(v.id))
.filter(
v => !Object.keys(downloadedVersionsConfig?.list ?? []).includes(v.id)
)
.filter(v => {
if (
platform() === 'linux' &&
@@ -123,7 +125,7 @@ export default function RootLayout ({
const gamesMap = new Map<number, Game>()
downloadedVersionsConfig.list.forEach(i => {
Object.keys(downloadedVersionsConfig.list).forEach(i => {
const version = getVersionInfo(i)
if (!version) return
const game = getGameInfo(version.game)
@@ -143,7 +145,7 @@ export default function RootLayout ({
const allowWine =
platform() !== 'linux' || normalConfig?.settings.useWineOnUnixWhenNeeded
const installed = downloadedVersionsConfig.list.filter(v => {
const installed = Object.keys(downloadedVersionsConfig.list).filter(v => {
const info = getVersionInfo(v)
if (!info) return false
if (info.wine && !allowWine) return false
@@ -274,6 +276,7 @@ export default function RootLayout ({
const versionsConfig = await readVersionsConfig()
setDownloadedVersionsConfig(versionsConfig)
setNormalConfig(normalConfig)
setLoadingText('Finishing...')
setLoading(false)
if (!(await isPermissionGranted())) {
@@ -338,8 +341,7 @@ export default function RootLayout ({
return
}
const date = Date.now()
data.list = [...data.list, download.version]
data.timestamps = { ...data.timestamps, [download.version]: date }
data.list = { ...data.list, [download.version]: date }
setDownloadedVersionsConfig(data)
writeVersionsConfig(data)
} else {
@@ -725,19 +727,14 @@ export default function RootLayout ({
setDownloadedVersionsConfig(prev => {
if (!prev) return prev
const updatedList = prev.list.filter(
v => v !== managingVersion
)
const updatedTimestamps =
Object.fromEntries(
Object.entries(prev.timestamps).filter(
([k]) => k !== managingVersion
)
const updatedList = Object.fromEntries(
Object.entries(prev.list).filter(
([k]) => k !== managingVersion
)
)
const updatedConfig = {
...prev,
list: updatedList,
timestamps: updatedTimestamps
list: updatedList
}
writeVersionsConfig(updatedConfig)
setManagingVersion(null)

View File

@@ -1,20 +1,17 @@
type VersionsConfigData = {
export type VersionsConfigData = {
version: string
list: string[]
timestamps: Record<string, number>
list: Record<string, number>
}
export class VersionsConfig {
constructor (
public version: string,
public list: string[] = [],
public timestamps: Record<string, number> = {}
public list: Record<string, number> = {}
) {}
static import (data: VersionsConfigData) {
const cfg = new VersionsConfig(data.version)
cfg.list = [...data.list]
cfg.timestamps = { ...data.timestamps }
cfg.list = { ...data.list }
return cfg
}
}

View File

@@ -8,7 +8,7 @@ import {
readTextFile,
writeFile
} from '@tauri-apps/plugin-fs'
import { VersionsConfig } from '../types/VersionsConfig'
import { VersionsConfig, VersionsConfigData } from '../types/VersionsConfig'
export async function readNormalConfig (): Promise<NormalConfig> {
const version = await app.getVersion()
@@ -82,7 +82,33 @@ export async function readVersionsConfig (): Promise<VersionsConfig> {
return new VersionsConfig(version)
}
const config = await readTextFile('versions.json', options)
return VersionsConfig.import(JSON.parse(config))
const raw = JSON.parse(config)
if (
raw.version &&
raw.list &&
raw.timestamps &&
(raw.version == '1.0.0' ||
raw.version == '1.1.0' ||
raw.version == '1.1.1' ||
raw.version == '1.1.2' ||
raw.version == '1.2.0' ||
raw.version == '1.3.0' ||
raw.version == '1.3.1' ||
raw.version == '1.4.0' ||
raw.version == '1.5.0')
) {
raw.version = version
delete raw.list
raw.list = raw.timestamps
delete raw.timestamps
await writeFile(
'versions.json',
new TextEncoder().encode(JSON.stringify(raw, null, 2)),
options
)
}
return VersionsConfig.import(raw)
} catch {
return new VersionsConfig(version)
}