-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Created functionality for OverviewSubPage and it's page items.
Created PopUp component for pre-styled dialog modals
- Loading branch information
Showing
7 changed files
with
329 additions
and
91 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,41 +1,85 @@ | ||
<script lang="ts"> | ||
import type {MinecraftProcess} from "../../../../scripts/types"; | ||
import {type MinecraftInfo, type MinecraftProcess} from "../../../../scripts/types"; | ||
import VerticalScroll from "../../../util/VerticalScroll.svelte"; | ||
import {createLaunchProfile, showProcessInfo} from "../../../../scripts/shared"; | ||
import ButtonBar from "../../../util/ButtonBar.svelte"; | ||
import {invoke} from "@tauri-apps/api/tauri"; | ||
import {createEventDispatcher, onDestroy, onMount} from "svelte"; | ||
import PopUp from "../../../util/PopUp.svelte"; | ||
import CreateLaunchProfilePopUp from "../../../popups/CreateLaunchProfilePopUp.svelte"; | ||
// <pid, MinecraftProcess> | ||
let processMap = new Map<number, MinecraftProcess>([ | ||
[5728, {pid: 5728, info: {client: 'Lunar', cwd: 'dummy', cmd: 'dummy', version: '1.8.9'}}], | ||
[93415, {pid: 93415, info: {client: 'Forge', cwd: 'dummy', cmd: 'dummy', version: '1.7.10'}}], | ||
[689, {pid: 689, info: {client: 'Feather', cwd: 'dummy', cmd: 'dummy', version: '1.12.2'}}], | ||
[52746, {pid: 52746, info: {client: 'Vanilla', cwd: 'dummy', cmd: 'dummy', version: '1.20.1'}}], | ||
[8179, {pid: 8179, info: {client: 'Badlion', cwd: 'dummy', cmd: 'dummy', version: '1.16.5'}}], | ||
[64302, {pid: 64302, info: {client: 'Other', cwd: 'dummy', cmd: 'dummy', version: '1.11'}}] | ||
]) | ||
let popup: CreateLaunchProfilePopUp | ||
let processMap = new Map<number, MinecraftProcess>() | ||
export let instances: number = 0 | ||
const dispatch = createEventDispatcher() | ||
async function getMinecraftProcesses() { | ||
try { | ||
const processList = await invoke<MinecraftProcess[]>("fetch_minecraft_processes") | ||
const newMap = new Map() | ||
for (const process of processList) { | ||
let version = process.info.version.trim() | ||
if (version.includes("-")) | ||
process.info.version = version.substring(0, version.indexOf("-")) | ||
newMap.set(process.pid, process) | ||
} | ||
processMap = newMap | ||
instances = processMap.size | ||
} catch (err) { | ||
console.error(err) | ||
} | ||
} | ||
async function killProcess(pid: number) { | ||
try { | ||
await invoke("kill_pid", {pid: pid}) | ||
} catch (err) { | ||
console.error("Error killing process", err) | ||
} | ||
} | ||
async function swapConsole(process: MinecraftProcess) { | ||
try { | ||
dispatch("switch_console", process) | ||
await invoke("switch_console_output", {pid: process.pid}) | ||
} catch (err) { | ||
console.error("Error swapping console", err) | ||
} | ||
} | ||
let processInterval: NodeJS.Timer | ||
onMount(async () => { | ||
await getMinecraftProcesses() | ||
processInterval = setInterval(async () => { | ||
await getMinecraftProcesses() | ||
}, 1000) | ||
}) | ||
onDestroy(() => { | ||
clearInterval(processInterval) | ||
}) | ||
</script> | ||
|
||
<div id="minecraft-processes" class="relative w-full h-full bg-surface rounded-xl p-2"> | ||
<div class="relative w-full text-center"> | ||
<h1>Minecraft Processes</h1> | ||
</div> | ||
<VerticalScroll columns={1} items={[...processMap.values()]} let:prop={mcProcess}> | ||
<!-- bg-surface w-full h-[3rem] rounded-lg text-lg text-center flex justify-between overflow-clip py-2--> | ||
<div class="w-full h-[3rem] rounded-lg flex gap-5 items-center justify-between p-2 bg-surface"> | ||
<button class="w-full h-[3rem] rounded-lg flex gap-5 items-center justify-between p-2 bg-surface"> | ||
<div class="h-full w-full flex flex-row justify-between items-center"> | ||
<h1 class="w-[33%] text-start">{mcProcess.pid}</h1> | ||
<h1 class="w-[33%] text-center">{mcProcess.info.client}</h1> | ||
<h1 class="w-[33%] text-end">{mcProcess.info.version}</h1> | ||
</div> | ||
<ButtonBar class="gap-2" buttons={[ | ||
{label: "Kill Process", action: () => killProcess(mcProcess.pid), icon: "fa-solid fa-skull"}, | ||
{label: "Create Launch Profile", action: () => createLaunchProfile(mcProcess), icon: "fa-solid fa-plus"}, | ||
{label: "Create Launch Profile", action: () => popup.startCreateLaunchProfile(mcProcess.info), icon: "fa-solid fa-plus"}, | ||
{label: "Process Info", action: () => showProcessInfo(mcProcess), icon: "fa-solid fa-info"} | ||
]}/> | ||
</div> | ||
</button> | ||
</VerticalScroll> | ||
<CreateLaunchProfilePopUp bind:this={popup}/> | ||
</div> |
Oops, something went wrong.