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> <p>
Installed{' '} Installed{' '}
{new Intl.DateTimeFormat(undefined).format( {new Intl.DateTimeFormat(undefined).format(
downloadedVersionsConfig.timestamps[managingVersion] ?? 0 downloadedVersionsConfig.list[managingVersion] ?? 0
)} )}
</p> </p>
</div> </div>

View File

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

View File

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

View File

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

View File

@@ -8,7 +8,7 @@ import {
readTextFile, readTextFile,
writeFile writeFile
} from '@tauri-apps/plugin-fs' } from '@tauri-apps/plugin-fs'
import { VersionsConfig } from '../types/VersionsConfig' import { VersionsConfig, VersionsConfigData } from '../types/VersionsConfig'
export async function readNormalConfig (): Promise<NormalConfig> { export async function readNormalConfig (): Promise<NormalConfig> {
const version = await app.getVersion() const version = await app.getVersion()
@@ -82,7 +82,33 @@ export async function readVersionsConfig (): Promise<VersionsConfig> {
return new VersionsConfig(version) return new VersionsConfig(version)
} }
const config = await readTextFile('versions.json', options) 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 { } catch {
return new VersionsConfig(version) return new VersionsConfig(version)
} }