Skip to content

Commit 39df7e4

Browse files
committed
feat(oneclient): Kill mc
Closes #423
1 parent 6bf64d1 commit 39df7e4

File tree

4 files changed

+35
-15
lines changed

4 files changed

+35
-15
lines changed

apps/oneclient/frontend/src/bindings.gen.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -301,8 +301,13 @@ export type VersionType =
301301
*/
302302
"old_beta"
303303

304-
const ARGS_MAP = { 'folders':'{"openCluster":["folder_name"],"fromCluster":["folder_name"]}', 'debug':'{"getType":[],"isInDev":[],"getFamily":[],"getArch":[],"getBuildTimestamp":[],"getPlatform":[],"openDevTools":[],"getLocale":[],"getVersion":[],"getCommitHash":[]}', 'oneclient':'{"getBundlesFor":["cluster_id"],"getVersions":[],"getClustersGroupedByMajor":[]}', 'core':'{"getScreenshots":["id"],"getClusterById":["id"],"launchCluster":["id","uuid"],"getGameVersions":[],"convertUsernameUUID":["username_uuid"],"changeSkin":["access_token","skin_url","skin_variant"],"createCluster":["options"],"getMultiplePackages":["provider","slugs"],"getLogByName":["id","name"],"fetchMinecraftProfile":["uuid"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"getClusters":[],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"getLoadersForVersion":["mc_version"],"getWorlds":["id"],"killProcess":["pid"],"searchPackages":["provider","query"],"getDefaultUser":["fallback"],"getRunningProcessesByClusterId":["cluster_id"],"updateClusterProfile":["name","profile"],"getPackageBody":["provider","body"],"getUsersFromAuthor":["provider","author"],"open":["input"],"updateClusterById":["id","request"],"removeCluster":["id"],"downloadExternalPackage":["package","cluster_id","force","skip_compatibility"],"readSettings":[],"getGlobalProfile":[],"getUsers":[],"changeCape":["access_token","cape_uuid"],"removeCape":["access_token"],"getProfileOrDefault":["name"],"getUser":["uuid"],"writeSettings":["setting"],"getRunningProcesses":[],"createSettingsProfile":["name"],"setDefaultUser":["uuid"],"openMsaLogin":[],"getLogs":["id"],"getPackage":["provider","slug"],"installModpack":["modpack","cluster_id"],"fetchLoggedInProfile":["access_token"],"isClusterRunning":["cluster_id"],"removeUser":["uuid"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"]}', 'events':'{"message":["event"],"process":["event"],"ingress":["event"]}' }
305-
export type Router = { 'debug': { openDevTools: () => Promise<void>,
304+
const ARGS_MAP = { 'oneclient':'{"getBundlesFor":["cluster_id"],"getVersions":[],"getClustersGroupedByMajor":[]}', 'events':'{"message":["event"],"process":["event"],"ingress":["event"]}', 'folders':'{"openCluster":["folder_name"],"fromCluster":["folder_name"]}', 'debug':'{"getType":[],"isInDev":[],"getFamily":[],"getArch":[],"getBuildTimestamp":[],"getPlatform":[],"openDevTools":[],"getLocale":[],"getVersion":[],"getCommitHash":[]}', 'core':'{"getScreenshots":["id"],"getClusterById":["id"],"launchCluster":["id","uuid"],"getGameVersions":[],"convertUsernameUUID":["username_uuid"],"changeSkin":["access_token","skin_url","skin_variant"],"createCluster":["options"],"getMultiplePackages":["provider","slugs"],"getLogByName":["id","name"],"fetchMinecraftProfile":["uuid"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"getClusters":[],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"getLoadersForVersion":["mc_version"],"getWorlds":["id"],"killProcess":["pid"],"searchPackages":["provider","query"],"getDefaultUser":["fallback"],"getRunningProcessesByClusterId":["cluster_id"],"updateClusterProfile":["name","profile"],"getPackageBody":["provider","body"],"getUsersFromAuthor":["provider","author"],"open":["input"],"updateClusterById":["id","request"],"removeCluster":["id"],"downloadExternalPackage":["package","cluster_id","force","skip_compatibility"],"readSettings":[],"getGlobalProfile":[],"getUsers":[],"changeCape":["access_token","cape_uuid"],"removeCape":["access_token"],"getProfileOrDefault":["name"],"getUser":["uuid"],"writeSettings":["setting"],"getRunningProcesses":[],"createSettingsProfile":["name"],"setDefaultUser":["uuid"],"openMsaLogin":[],"getLogs":["id"],"getPackage":["provider","slug"],"installModpack":["modpack","cluster_id"],"fetchLoggedInProfile":["access_token"],"isClusterRunning":["cluster_id"],"removeUser":["uuid"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"]}' }
305+
export type Router = { 'events': { ingress: (event: IngressPayload) => Promise<void>,
306+
message: (event: MessagePayload) => Promise<void>,
307+
process: (event: ProcessPayload) => Promise<void> },
308+
'folders': { fromCluster: (folderName: string) => Promise<string>,
309+
openCluster: (folderName: string) => Promise<null> },
310+
'debug': { openDevTools: () => Promise<void>,
306311
isInDev: () => Promise<boolean>,
307312
getPlatform: () => Promise<string>,
308313
getArch: () => Promise<string>,
@@ -312,9 +317,9 @@ getType: () => Promise<string>,
312317
getVersion: () => Promise<string>,
313318
getCommitHash: () => Promise<string>,
314319
getBuildTimestamp: () => Promise<string> },
315-
'events': { ingress: (event: IngressPayload) => Promise<void>,
316-
message: (event: MessagePayload) => Promise<void>,
317-
process: (event: ProcessPayload) => Promise<void> },
320+
'oneclient': { getClustersGroupedByMajor: () => Promise<Partial<{ [key in number]: ClusterModel[] }>>,
321+
getBundlesFor: (clusterId: number) => Promise<ModpackArchive[]>,
322+
getVersions: () => Promise<OnlineClusterManifest> },
318323
'core': { getClusters: () => Promise<ClusterModel[]>,
319324
getClusterById: (id: number) => Promise<ClusterModel | null>,
320325
removeCluster: (id: number) => Promise<null>,
@@ -359,12 +364,7 @@ changeSkin: (accessToken: string, skinUrl: string, skinVariant: SkinVariant) =>
359364
changeCape: (accessToken: string, capeUuid: string) => Promise<MojangFullPlayerProfile>,
360365
removeCape: (accessToken: string) => Promise<MojangFullPlayerProfile>,
361366
convertUsernameUUID: (usernameUuid: string) => Promise<MowojangProfile>,
362-
open: (input: string) => Promise<null> },
363-
'oneclient': { getClustersGroupedByMajor: () => Promise<Partial<{ [key in number]: ClusterModel[] }>>,
364-
getBundlesFor: (clusterId: number) => Promise<ModpackArchive[]>,
365-
getVersions: () => Promise<OnlineClusterManifest> },
366-
'folders': { fromCluster: (folderName: string) => Promise<string>,
367-
openCluster: (folderName: string) => Promise<null> } };
367+
open: (input: string) => Promise<null> } };
368368

369369

370370
export type { InferCommandOutput }

apps/oneclient/frontend/src/components/LaunchButton.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { ButtonProps } from '@onelauncher/common/components';
2-
import { NoAccountPopup, Overlay } from '@/components';
2+
import { KillMinecraft, NoAccountPopup, Overlay } from '@/components';
33
import { useIsRunning } from '@/hooks/useClusters';
44
import { useLaunchCluster } from '@/hooks/useLaunchCluster';
55
import { bindings } from '@/main';
@@ -32,7 +32,7 @@ export function LaunchButton({
3232
const [open, setOpen] = useState<boolean>(false);
3333

3434
const launch = () => {
35-
if (currentAccount === null) {
35+
if (currentAccount === null || isRunning) {
3636
setOpen(true);
3737
}
3838
else {
@@ -45,15 +45,15 @@ export function LaunchButton({
4545
<Overlay.Trigger isOpen={open} onOpenChange={setOpen}>
4646
<Button
4747
className={launchButtonVariants({ isRunning, className })}
48-
isDisabled={isDisabled || isRunning}
48+
isDisabled={isDisabled}
4949
onPress={launch}
5050
{...rest}
5151
>
5252
{isRunning ? 'Running' : 'Launch'}
5353
</Button>
5454

5555
<Overlay>
56-
<NoAccountPopup />
56+
{isRunning ? <KillMinecraft setOpen={setOpen} /> : <NoAccountPopup />}
5757
</Overlay>
5858
</Overlay.Trigger>
5959
);
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { Overlay } from '@/components';
2+
import { bindings } from '@/main';
3+
import { useCommandSuspense } from '@onelauncher/common';
4+
5+
export function KillMinecraft({ setOpen }: { setOpen: React.Dispatch<React.SetStateAction<boolean>> }) {
6+
const { data: foundAllProcess } = useCommandSuspense(['getRunningProcesses'], () => bindings.core.getRunningProcesses());
7+
const kill = () => {
8+
foundAllProcess.forEach(process => bindings.core.killProcess(process.pid));
9+
setOpen(false);
10+
};
11+
12+
return (
13+
<Overlay.Dialog>
14+
<Overlay.Title>Minecraft is running</Overlay.Title>
15+
<p className="max-w-sm text-fg-secondary">Do you want to kill minecraft?</p>
16+
<Overlay.Buttons buttons={[{ color: 'danger', key: 'Yes', children: 'Yes', size: 'normal', onClick: kill }, { color: 'secondary', key: 'No', children: 'No', size: 'normal', slot: 'close' }]} />
17+
</Overlay.Dialog>
18+
);
19+
}

apps/oneclient/frontend/src/components/overlay/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ export * from './AddAccountModal';
33
export * from './BundleModListModal';
44
export * from './DebugInfo';
55
export * from './ImportSkinModal';
6+
export * from './KillMinecraft';
67
export * from './NoAccountPopup';
78
export * from './Overlay';
89
export * from './Popup';

0 commit comments

Comments
 (0)