- {downloadedVersionsConfig &&
- Object.keys(downloadedVersionsConfig.list).length ? (
- getListOfGames()
- .sort((a, b) => {
- return a.id - b.id
- })
- .map(i => (
-
diff --git a/src/app/settings/page.tsx b/src/app/settings/page.tsx
index a6545b0..b40a0f7 100644
--- a/src/app/settings/page.tsx
+++ b/src/app/settings/page.tsx
@@ -1,8 +1,8 @@
'use client'
import { Setting } from '@/components/Setting'
-import { useGlobal } from '@/app/GlobalProvider'
-import { copyToClipboard } from '@/lib/Clipboard'
+import { useGlobal } from '@/providers/GlobalProvider'
+import { copyToClipboard } from '@/lib/clipboard'
import { platform } from '@tauri-apps/plugin-os'
export default function Settings () {
diff --git a/src/components/Setting.tsx b/src/components/Setting.tsx
index b889348..864afc3 100644
--- a/src/components/Setting.tsx
+++ b/src/components/Setting.tsx
@@ -1,4 +1,4 @@
-import './Setting.css'
+import '@/styles/setting.css'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faCheck } from '@fortawesome/free-solid-svg-icons'
import { SettingProps } from '@/types/SettingProps'
diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx
index 817eaa5..9bc9fef 100644
--- a/src/components/Sidebar.tsx
+++ b/src/components/Sidebar.tsx
@@ -1,6 +1,6 @@
'use client'
-import './Sidebar.css'
+import '@/styles/sidebar.css'
import Icon from '@/assets/Icon.png'
import { openUrl } from '@tauri-apps/plugin-opener'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
@@ -13,7 +13,7 @@ import {
} from '@fortawesome/free-solid-svg-icons'
import { faDiscord } from '@fortawesome/free-brands-svg-icons'
import { platform } from '@tauri-apps/plugin-os'
-import { useGlobal } from '@/app/GlobalProvider'
+import { useGlobal } from '@/providers/GlobalProvider'
import Image from 'next/image'
import Link from 'next/link'
import { usePathname, useRouter, useSearchParams } from 'next/navigation'
@@ -27,13 +27,12 @@ const lexend = Lexend({
export default function Sidebar () {
const {
- getListOfGames,
+ serverVersionList,
+ versionsList,
setShowPopup,
setPopupMode,
setFadeOut,
downloadProgress,
- downloadedVersionsConfig,
- getVersionInfo,
category,
setCategory,
sidebarAlwaysShowGames,
@@ -90,10 +89,12 @@ export default function Sidebar () {
>
Games
- {getListOfGames()
- .sort((a, b) => {
- return a.id - b.id
- })
+ {serverVersionList?.games
+ .filter(g =>
+ serverVersionList.versions
+ .filter(v => v.game === g.id)
+ .some(v => Object.keys(versionsList).includes(v.id))
+ )
.map(i => (
Number(b) - Number(a))
.filter(([key]) => {
- const count = Object.keys(
- downloadedVersionsConfig?.list ?? {}
- ).filter(v => {
- const info = getVersionInfo(v)
+ const count = Object.keys(versionsList).filter(v => {
+ const info = serverVersionList.versions.find(
+ vf => vf.id == v
+ )
if (!info) return false
if (platform() == 'linux' && info.wine && !linuxUseWine)
diff --git a/src/lib/BazookaManager.ts b/src/lib/BazookaManager.ts
deleted file mode 100644
index 39e2934..0000000
--- a/src/lib/BazookaManager.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-import { app } from '@tauri-apps/api'
-import {
- BaseDirectory,
- create,
- exists,
- mkdir,
- readTextFile,
- writeFile
-} from '@tauri-apps/plugin-fs'
-import { VersionsConfig } from '@/types/VersionsConfig'
-
-export async function readVersionsConfig (): Promise {
- const version = await app.getVersion()
- try {
- const options = {
- baseDir: BaseDirectory.AppLocalData
- }
- const doesFolderExist = await exists('', options)
- const doesConfigExist = await exists('versions.json', options)
- if (!doesFolderExist || !doesConfigExist) {
- if (!doesFolderExist) {
- await mkdir('', options)
- }
- const file = await create('versions.json', options)
- await file.write(
- new TextEncoder().encode(
- JSON.stringify(new VersionsConfig(version), null, 2)
- )
- )
- await file.close()
- return new VersionsConfig(version)
- }
- const config = await readTextFile('versions.json', options)
- const raw = JSON.parse(config)
- if (raw.list && raw.timestamps) {
- raw.list = raw.timestamps
- delete raw.timestamps
-
- await writeFile(
- 'versions.json',
- new TextEncoder().encode(JSON.stringify(raw, null, 2)),
- options
- )
- }
- raw.version = version
- writeVersionsConfig(raw)
- return VersionsConfig.import(raw)
- } catch {
- return new VersionsConfig(version)
- }
-}
-
-export async function writeVersionsConfig (data: VersionsConfig) {
- const options = {
- baseDir: BaseDirectory.AppLocalData
- }
- const doesFolderExist = await exists('', options)
- const doesConfigExist = await exists('versions.json', options)
- if (!doesFolderExist || !doesConfigExist) {
- if (!doesFolderExist) {
- await mkdir('', options)
- }
- const file = await create('versions.json', options)
- await file.write(new TextEncoder().encode(JSON.stringify(data, null, 2)))
- await file.close()
- } else {
- await writeFile(
- 'versions.json',
- new TextEncoder().encode(JSON.stringify(data, null, 2)),
- options
- )
- }
-}
diff --git a/src/lib/Clipboard.ts b/src/lib/Clipboard.ts
index ee93c9a..3a8d4af 100644
--- a/src/lib/Clipboard.ts
+++ b/src/lib/Clipboard.ts
@@ -1,5 +1,5 @@
import { writeText } from '@tauri-apps/plugin-clipboard-manager'
-import { notifyUser } from './Notifications'
+import { notifyUser } from './notifications'
export async function copyToClipboard (
text: string,
diff --git a/src/lib/BerryDash.ts b/src/lib/berrydashutil.ts
similarity index 100%
rename from src/lib/BerryDash.ts
rename to src/lib/berrydashutil.ts
diff --git a/src/components/popups/Downloads.tsx b/src/popups/Downloads.tsx
similarity index 85%
rename from src/components/popups/Downloads.tsx
rename to src/popups/Downloads.tsx
index 09423ff..c9020d0 100644
--- a/src/components/popups/Downloads.tsx
+++ b/src/popups/Downloads.tsx
@@ -1,7 +1,7 @@
-import { useGlobal } from '@/app/GlobalProvider'
+import { useGlobal } from '@/providers/GlobalProvider'
import prettyBytes from 'pretty-bytes'
-import ProgressBar from '../ProgressBar'
-import { formatEtaSmart } from '@/lib/Util'
+import ProgressBar from '@/components/ProgressBar'
+import { formatEtaSmart } from '@/lib/util'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import {
faCancel,
@@ -10,19 +10,20 @@ import {
faTrash
} from '@fortawesome/free-solid-svg-icons'
import { invoke } from '@tauri-apps/api/core'
-import { writeVersionsConfig } from '@/lib/BazookaManager'
-import { notifyUser } from '@/lib/Notifications'
+import { notifyUser } from '@/lib/notifications'
import { getCurrentWindow, UserAttentionType } from '@tauri-apps/api/window'
export default function DownloadsPopup () {
const {
downloadProgress,
- getVersionInfo,
setDownloadProgress,
downloadQueue,
setDownloadQueue,
- setDownloadedVersionsConfig,
- notificationsAllowed
+ notificationsAllowed,
+ versionsList,
+ modsList,
+ versions,
+ serverVersionList
} = useGlobal()
return (
@@ -68,31 +69,19 @@ export default function DownloadsPopup () {
prev.filter(d => d.version !== v.version)
)
if (v.type != 1) {
- setDownloadedVersionsConfig(prev => {
- if (!prev) return prev
-
- const updated =
- v.type == 2
- ? {
- ...prev,
- mods: {
- ...prev.mods,
- [v.modGame! + '-' + v.modId!]: {
- [v.modVersion!]: Date.now()
- }
- }
- }
- : {
- ...prev,
- list: {
- ...prev.list,
- [v.version]: Date.now()
- }
- }
-
- writeVersionsConfig(updated)
- return updated
- })
+ if (v.type == 2) {
+ versions?.set('mods', {
+ ...modsList,
+ [v.modGame! + '-' + v.modId!]: {
+ [v.modVersion!]: Date.now()
+ }
+ })
+ } else {
+ versions?.set('list', {
+ ...versionsList,
+ [v.version]: Date.now()
+ })
+ }
}
} else if (res == '0') {
setDownloadProgress(prev => {
@@ -127,7 +116,9 @@ export default function DownloadsPopup () {
await notifyUser(
'Download Failed',
`The download for version ${
- getVersionInfo(v.version)?.displayName
+ serverVersionList?.versions.find(
+ vf => vf.id == v.version
+ )?.displayName
} has failed.`
)
await getCurrentWindow().requestUserAttention(
@@ -186,11 +177,14 @@ export default function DownloadsPopup () {
{v.type == 1
- ? 'Mod Manager for '
+ ? 'Mod loader for '
: v.type == 2
? 'Mod for '
: null}{' '}
- {getVersionInfo(v.version)?.displayName}
+ {
+ serverVersionList?.versions.find(vf => vf.id == v.version)
+ ?.displayName
+ }
{v.failed || v.queued ? (
diff --git a/src/components/popups/GamesDownload.tsx b/src/popups/GamesDownload.tsx
similarity index 75%
rename from src/components/popups/GamesDownload.tsx
rename to src/popups/GamesDownload.tsx
index 64dcbca..095dc15 100644
--- a/src/components/popups/GamesDownload.tsx
+++ b/src/popups/GamesDownload.tsx
@@ -1,4 +1,4 @@
-import { useGlobal } from '@/app/GlobalProvider'
+import { useGlobal } from '@/providers/GlobalProvider'
import {
faCheck,
faCode,
@@ -9,18 +9,18 @@ import {
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
export default function GamesDownloadPopup () {
- const { serverVersionList, getVersionsAmountData, setSelectedGame } =
- useGlobal()
+ const { serverVersionList, setSelectedGame, versionsList } = useGlobal()
return (
<>
Select a game to download
{serverVersionList?.games
- .filter(v => {
- const data = getVersionsAmountData(v.id)
- if (!data) return false
- if (data.total > 0) return true
+ .filter(i => {
+ const gameVersions = serverVersionList.versions.filter(
+ vf => vf.game === i.id
+ )
+ if (gameVersions.length > 0) return true
})
.map((v, i) => (
@@ -32,9 +32,15 @@ export default function GamesDownloadPopup () {
>
{(() => {
- const data = getVersionsAmountData(v.id)
- if (!data) return 'N/A'
- return `${data.installed}/${data.total}`
+ const gameVersions = serverVersionList.versions.filter(
+ vf => vf.game === v.id
+ )
+ const installed = gameVersions.filter(v =>
+ Object.keys(versionsList).includes(v.id)
+ ).length
+ return gameVersions.length
+ ? `${installed}/${gameVersions.length}`
+ : 'N/A'
})()}{' '}
versions installed
@@ -74,11 +80,7 @@ export default function GamesDownloadPopup () {
@@ -135,18 +137,14 @@ export default function ManageVersionPopup () {
onClick={async () => {
closePopup()
- setDownloadedVersionsConfig(prev => {
- if (!prev) return prev
- const updatedList = Object.fromEntries(
- Object.entries(prev.list).filter(([k]) => k !== managingVersion)
+ versions?.set(
+ 'list',
+ Object.fromEntries(
+ Object.entries(versionsList).filter(
+ ([k]) => k !== managingVersion
+ )
)
- const updatedConfig = {
- ...prev,
- list: updatedList
- }
- writeVersionsConfig(updatedConfig)
- return updatedConfig
- })
+ )
if (
await exists('game/' + managingVersion, {
@@ -171,18 +169,14 @@ export default function ManageVersionPopup () {
setPopupMode(1)
//uninstall
- setDownloadedVersionsConfig(prev => {
- if (!prev) return prev
- const updatedList = Object.fromEntries(
- Object.entries(prev.list).filter(([k]) => k !== managingVersion)
+ versions?.set(
+ 'list',
+ Object.fromEntries(
+ Object.entries(versionsList).filter(
+ ([k]) => k !== managingVersion
+ )
)
- const updatedConfig = {
- ...prev,
- list: updatedList
- }
- writeVersionsConfig(updatedConfig)
- return updatedConfig
- })
+ )
if (
await exists('game/' + managingVersion, {
diff --git a/src/components/popups/ModDownloads.tsx b/src/popups/ModDownloads.tsx
similarity index 86%
rename from src/components/popups/ModDownloads.tsx
rename to src/popups/ModDownloads.tsx
index 7862dbb..266e2fe 100644
--- a/src/components/popups/ModDownloads.tsx
+++ b/src/popups/ModDownloads.tsx
@@ -1,8 +1,7 @@
'use client'
-import { useGlobal } from '@/app/GlobalProvider'
-import { writeVersionsConfig } from '@/lib/BazookaManager'
-import { verifySignature } from '@/lib/Util'
+import { useGlobal } from '@/providers/GlobalProvider'
+import { verifySignature } from '@/lib/util'
import { Mod } from '@/types/Mod'
import {
faArrowUpRightFromSquare,
@@ -23,14 +22,14 @@ import { useEffect, useState } from 'react'
export default function ModDownloadsPopup () {
const {
- getVersionInfo,
+ modsList,
+ serverVersionList,
managingVersion,
- downloadedVersionsConfig,
showModInfo,
setShowModInfo,
downloadVersions,
downloadProgress,
- setDownloadedVersionsConfig
+ versions
} = useGlobal()
const [mods, setMods] = useState
(0)
@@ -52,9 +51,11 @@ export default function ModDownloadsPopup () {
})()
}, [managingVersion])
- if (!managingVersion) return <>>
+ if (!managingVersion || !serverVersionList) return <>>
- const versionInfo = getVersionInfo(managingVersion)
+ const versionInfo = serverVersionList.versions.find(
+ v => v.id == managingVersion
+ )
return (
<>
@@ -110,10 +111,10 @@ export default function ModDownloadsPopup () {
(!showModInfo &&
mods.filter(v =>
tab == 0
- ? Object.keys(downloadedVersionsConfig?.mods ?? []).includes(
+ ? Object.keys(modsList).includes(
String(versionInfo?.game + '-' + v.id)
)
- : !Object.keys(downloadedVersionsConfig?.mods ?? []).includes(
+ : !Object.keys(modsList).includes(
String(versionInfo?.game + '-' + v.id)
)
).length == 0) ? (
@@ -131,10 +132,10 @@ export default function ModDownloadsPopup () {
{mods
.filter(v =>
tab == 0
- ? Object.keys(downloadedVersionsConfig?.mods ?? []).includes(
+ ? Object.keys(modsList).includes(
String(versionInfo?.game + '-' + v.id)
)
- : !Object.keys(downloadedVersionsConfig?.mods ?? []).includes(
+ : !Object.keys(modsList).includes(
String(versionInfo?.game + '-' + v.id)
)
)
@@ -142,9 +143,7 @@ export default function ModDownloadsPopup () {
const localVersion =
tab == 0
? Object.keys(
- downloadedVersionsConfig?.mods?.[
- versionInfo?.game + '-' + v.id
- ] ?? {}
+ modsList[versionInfo?.game + '-' + v.id] ?? {}
)[0]
: null
return (
@@ -201,20 +200,14 @@ export default function ModDownloadsPopup () {
baseDir: BaseDirectory.AppLocalData,
recursive: true
})
- setDownloadedVersionsConfig(prev => {
- if (!prev) return prev
- const updatedMods = Object.fromEntries(
- Object.entries(prev.mods).filter(
+ versions?.set(
+ 'mods',
+ Object.fromEntries(
+ Object.entries(modsList).filter(
([k]) => k !== versionInfo?.game + '-' + v.id
)
)
- const updatedConfig = {
- ...prev,
- mods: updatedMods
- }
- writeVersionsConfig(updatedConfig)
- return updatedConfig
- })
+ )
downloadVersions([
{
@@ -273,7 +266,7 @@ export default function ModDownloadsPopup () {
: '(No description added)'}
- {Object.keys(downloadedVersionsConfig?.mods ?? []).includes(
+ {Object.keys(modsList).includes(
String(versionInfo?.game + '-' + showModInfo.id)
) ? (