From 441a578483ff52f8a99932bad06a06b41a73d7a8 Mon Sep 17 00:00:00 2001 From: jgaribsin Date: Sun, 14 Jul 2024 17:02:36 -0600 Subject: [PATCH] installer now references manifest file for sources, updated ci ubuntu to 24.04 - installer version bump to v1.1.0 - included WIP (commented) code for user-selected version from manifest file --- .github/workflows/build.yml | 2 +- package.json | 2 +- src-electron/ipcListeners.ts | 5 + src/pages/InstallationType.vue | 159 ++++++++++++------- src/pages/WelcomePage.vue | 44 ++++-- src/providers/DownloadFile.ts | 2 +- src/stores/SourcesStore.ts | 273 ++++++++++++++++++++++++++++++++- yarn.lock | 6 +- 8 files changed, 405 insertions(+), 88 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bec5d70..9224ccd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,7 @@ jobs: matrix: include: - kind: linux - os: ubuntu-latest + os: ubuntu-24.04 platform: linux - kind: windows os: windows-latest diff --git a/package.json b/package.json index 0d6d3fc..d982162 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "drehmal-installer", - "version": "1.0.3", + "version": "1.1.0", "description": "Drehmal, Minecraft map installer", "productName": "Drehmal Installer", "author": "Primordial Team", diff --git a/src-electron/ipcListeners.ts b/src-electron/ipcListeners.ts index d284a29..77095c1 100644 --- a/src-electron/ipcListeners.ts +++ b/src-electron/ipcListeners.ts @@ -107,6 +107,11 @@ ipcMain.handle('getDrehmalPath', () => { } }); +ipcMain.handle('getManifestData', async (_event, url) => { + const response = await fetch(url); + return await response.json(); +}); + ipcMain.handle( 'openFileDialog', async () => diff --git a/src/pages/InstallationType.vue b/src/pages/InstallationType.vue index 347e4fd..965df95 100644 --- a/src/pages/InstallationType.vue +++ b/src/pages/InstallationType.vue @@ -3,66 +3,85 @@
- - - - Singleplayer Installation - For playing in singleplayer - Includes: Drehmal Map, Resource Pack, Fabric Client, and - Client-Side Mods. - - - - - Multiplayer Installation - For playing on multiplayer servers - Includes: Resource Pack, Fabric Client, and Client-Side - Mods. - - + - Server Installation - For hosting a multiplayer server. - Includes: Drehmal Map, Minecraft Server Jar. - - - + > +
--> + +
+ + + + Singleplayer Installation + + For playing in singleplayer + + Includes: Drehmal Map, Resource Pack, Fabric Client, and + Client-Side Mods. + + + + + + Multiplayer Installation + + For playing on multiplayer servers + + Includes: Resource Pack, Fabric Client, and Client-Side Mods. + + + + + + + + Server Installation + + For hosting a multiplayer server. + + Includes: Drehmal Map, Minecraft Server Jar. + + + + +
@@ -72,12 +91,32 @@ import { storeToRefs } from 'pinia'; import { useInstallerStore } from 'src/stores/InstallerStore'; import { useStateStore } from 'src/stores/StateStore'; +import { useSourcesStore } from 'stores/SourcesStore'; + const path = require('path'); const { ipcRenderer } = require('electron'); +const { versions, selectedVersion, map, resourcePack, server, launcher } = + storeToRefs(useSourcesStore()); const { installType } = storeToRefs(useStateStore()); const { drehmalDir } = storeToRefs(useInstallerStore()); +// NOTE: UNFINISHED. WIP for allowing user-selected version +const sources = Object.keys(versions.value); +const sourceSelect = async (value: string) => { + console.log('changed source to:', value); + const mapVersion = versions.value[selectedVersion.value].map.version; + console.log(`Using source: ${selectedVersion.value} (v${mapVersion})`); + + map.value = versions.value[selectedVersion.value].map; + resourcePack.value = versions.value[selectedVersion.value].resourcepack; + server.value = versions.value[selectedVersion.value].server; + launcher.value = versions.value[selectedVersion.value].launcher; + console.log( + `Updated map, resource pack, server, and launcher source data with ${selectedVersion.value} sources (v${mapVersion})` + ); +}; + const typeSelect = async (type: 'singleplayer' | 'multiplayer' | 'server') => { console.log(`Selected installation type: ${type}`); installType.value = type; @@ -100,10 +139,12 @@ const typeSelect = async (type: 'singleplayer' | 'multiplayer' | 'server') => { font-size: 48px; padding: 10px; } + .header img { height: 2em; vertical-align: middle; } + .selector { width: 100%; } diff --git a/src/pages/WelcomePage.vue b/src/pages/WelcomePage.vue index 0bf436c..153643a 100644 --- a/src/pages/WelcomePage.vue +++ b/src/pages/WelcomePage.vue @@ -23,9 +23,9 @@ import { useInstallerStore } from 'src/stores/InstallerStore'; import { useSourcesStore } from 'src/stores/SourcesStore'; import { useStateStore } from 'src/stores/StateStore'; import SponsorPartner from 'src/components/SponsorPartner.vue'; + const path = require('path'); const { ipcRenderer } = require('electron'); -const fs = require('fs'); // Ensure these are initialised; Be careful if removing useSourcesStore(); @@ -34,7 +34,15 @@ useInstallerStore(); const { homeDir, appDir, minecraftDir, memory } = storeToRefs( useInstallerStore() ); -const { map, resourcePack } = storeToRefs(useSourcesStore()); +const { + manifest, + selectedVersion, + versions, + map, + resourcePack, + server, + launcher, +} = storeToRefs(useSourcesStore()); const { customConfig } = storeToRefs(useStateStore()); ipcRenderer.invoke('getMinecraftPath').then((minecraft) => { @@ -47,23 +55,25 @@ ipcRenderer.invoke('getAppDataPath').then((appData) => { homeDir.value = appData; appDir.value = path.join(appData, 'Drehmal Installer'); memory.value = 4; - // check if config file exists at path - const configPath = path.join(appDir.value, 'config.json'); - if (fs.existsSync(configPath)) { - console.log(`Installer config found at "${configPath}", loading`); - customConfig.value = true; - const rawData = fs.readFileSync(configPath, 'utf-8'); - const configData = JSON.parse(rawData); - map.value = configData.map; - console.log( - `${map.value.versionName} has ${map.value.shards.length} shards` - ); - resourcePack.value = configData.resourcePack; - } }); -// Drehmal path not set here, will be set after user selects an installation type -// src/pages/InstallPage.vue +ipcRenderer.invoke('getManifestData', manifest.value).then((data) => { + console.log(`Fetched manifest data from "${manifest.value}"`); + versions.value = data; + const sources = Object.keys(data); + console.log(`Got manifest data for the following sources: ${sources}`); + // If "latest" exists in version list, use it; otherwise use the first version + selectedVersion.value = sources.includes('latest') ? 'latest' : sources[0]; + const mapVersion = data[selectedVersion.value].map.version; + console.log(`Using source: "${selectedVersion.value}" (v${mapVersion})`); + map.value = data[selectedVersion.value].map; + resourcePack.value = data[selectedVersion.value].resourcepack; + server.value = data[selectedVersion.value].server; + launcher.value = data[selectedVersion.value].launcher; + console.log( + `Updated map, resource pack, server, and launcher source data with "${selectedVersion.value}" sources (v${mapVersion})` + ); +});