Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions apps/oneclient/desktop/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -84,5 +84,10 @@ custom-protocol = [ "tauri/custom-protocol" ]

[target.'cfg(target_os = "macos")'.dependencies]
objc2 = "0.6.3"
objc2-app-kit = { version = "0.3.2", features = ["NSWindow", "NSButton", "NSControl", "NSView"] }
objc2-foundation = { version = "0.3.2", features = ["NSObject"] }
objc2-app-kit = { version = "0.3.2", features = [
"NSWindow",
"NSButton",
"NSControl",
"NSView"
] }
objc2-foundation = { version = "0.3.2", features = [ "NSObject" ] }
12 changes: 6 additions & 6 deletions apps/oneclient/frontend/src/bindings.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -303,10 +303,9 @@ export type VersionType =
*/
"old_beta"

const ARGS_MAP = { 'folders':'{"fromCluster":["folder_name"],"openCluster":["folder_name"]}', 'core':'{"getLogByName":["id","name"],"getClusterById":["id"],"getLogs":["id"],"setDiscordRPCMessage":["message"],"getClusters":[],"getWorlds":["id"],"createSettingsProfile":["name"],"getUsers":[],"isClusterRunning":["cluster_id"],"fetchMinecraftProfile":["uuid"],"getPackage":["provider","slug"],"getScreenshots":["id"],"getRunningProcessesByClusterId":["cluster_id"],"getUsersFromAuthor":["provider","author"],"getLinkedPackages":["cluster_id"],"openMsaLogin":[],"getDefaultUser":["fallback"],"downloadExternalPackage":["package","cluster_id","force","skip_compatibility"],"writeSettings":["setting"],"getUser":["uuid"],"readSettings":[],"fetchLoggedInProfile":["access_token"],"getLoadersForVersion":["mc_version"],"open":["input"],"killProcess":["pid"],"installModpack":["modpack","cluster_id"],"setClusterStage":["id","stage"],"getRunningProcesses":[],"getProfileOrDefault":["name"],"updateClusterProfile":["name","profile"],"removeCluster":["id"],"getGameVersions":[],"getPackageBody":["provider","body"],"getMultiplePackages":["provider","slugs"],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"changeSkin":["access_token","skin_url","skin_variant"],"changeCape":["access_token","cape_uuid"],"removeUser":["uuid"],"setDefaultUser":["uuid"],"launchCluster":["id","uuid","search_for_java"],"updateClusterById":["id","request"],"createCluster":["options"],"getGlobalProfile":[],"searchPackages":["provider","query"],"removePackage":["cluster_id","package_hash"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"removeCape":["access_token"],"convertUsernameUUID":["username_uuid"]}', 'debug':'{"getArch":[],"getBuildTimestamp":[],"getPlatform":[],"getType":[],"getLocale":[],"getOsVersion":[],"openDevTools":[],"getGitCommitHash":[],"isInDev":[],"getPackageVersion":[],"getFamily":[]}', 'oneclient':'{"installUpdate":[],"getClustersGroupedByMajor":[],"checkForUpdate":[],"getBundlesFor":["cluster_id"],"getVersions":[]}', 'events':'{"process":["event"],"ingress":["event"],"message":["event"]}' }
export type Router = { 'events': { ingress: (event: IngressPayload) => Promise<void>,
message: (event: MessagePayload) => Promise<void>,
process: (event: ProcessPayload) => Promise<void> },
const ARGS_MAP = { 'debug':'{"getArch":[],"getBuildTimestamp":[],"getPlatform":[],"getType":[],"getLocale":[],"getOsVersion":[],"openDevTools":[],"getGitCommitHash":[],"isInDev":[],"getPackageVersion":[],"getFamily":[]}', 'folders':'{"fromCluster":["folder_name"],"openCluster":["folder_name"]}', 'events':'{"process":["event"],"ingress":["event"],"message":["event"]}', 'core':'{"getLogByName":["id","name"],"getClusterById":["id"],"getLogs":["id"],"setDiscordRPCMessage":["message"],"getClusters":[],"getWorlds":["id"],"createSettingsProfile":["name"],"getUsers":[],"isClusterRunning":["cluster_id"],"fetchMinecraftProfile":["uuid"],"getPackage":["provider","slug"],"getScreenshots":["id"],"getRunningProcessesByClusterId":["cluster_id"],"getUsersFromAuthor":["provider","author"],"getLinkedPackages":["cluster_id"],"openMsaLogin":[],"getDefaultUser":["fallback"],"downloadExternalPackage":["package","cluster_id","force","skip_compatibility"],"writeSettings":["setting"],"getUser":["uuid"],"readSettings":[],"fetchLoggedInProfile":["access_token"],"getLoadersForVersion":["mc_version"],"open":["input"],"killProcess":["pid"],"installModpack":["modpack","cluster_id"],"setClusterStage":["id","stage"],"getRunningProcesses":[],"getProfileOrDefault":["name"],"updateClusterProfile":["name","profile"],"removeCluster":["id"],"getGameVersions":[],"getPackageBody":["provider","body"],"getMultiplePackages":["provider","slugs"],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"changeSkin":["access_token","skin_url","skin_variant"],"changeCape":["access_token","cape_uuid"],"removeUser":["uuid"],"setDefaultUser":["uuid"],"launchCluster":["id","uuid","search_for_java"],"updateClusterById":["id","request"],"createCluster":["options"],"getGlobalProfile":[],"searchPackages":["provider","query"],"removePackage":["cluster_id","package_hash"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"removeCape":["access_token"],"convertUsernameUUID":["username_uuid"]}', 'oneclient':'{"installUpdate":[],"getClustersGroupedByMajor":[],"checkForUpdate":[],"getBundlesFor":["cluster_id"],"getVersions":[]}' }
export type Router = { 'folders': { fromCluster: (folderName: string) => Promise<string>,
openCluster: (folderName: string) => Promise<null> },
'debug': { openDevTools: () => Promise<void>,
isInDev: () => Promise<boolean>,
getArch: () => Promise<string>,
Expand Down Expand Up @@ -372,8 +371,9 @@ removeCape: (accessToken: string) => Promise<MojangFullPlayerProfile>,
convertUsernameUUID: (usernameUuid: string) => Promise<MowojangProfile>,
setDiscordRPCMessage: (message: string) => Promise<null>,
open: (input: string) => Promise<null> },
'folders': { fromCluster: (folderName: string) => Promise<string>,
openCluster: (folderName: string) => Promise<null> } };
'events': { ingress: (event: IngressPayload) => Promise<void>,
message: (event: MessagePayload) => Promise<void>,
process: (event: ProcessPayload) => Promise<void> } };


export type { InferCommandOutput }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export function DownloadModButton({ cluster, file }: { cluster: ClusterModel; fi
const [pkg, version] = file.kind.Managed;
if (version.dependencies.length > 0)
for (const dependency of version.dependencies)
if (dependency.dependency_type === "required") {
if (dependency.dependency_type === 'required') {
const slug = dependency.project_id ?? '';
const versions = await bindings.core.getPackageVersions(pkg.provider, slug, cluster.mc_version, cluster.mc_loader, 0, 1);
await bindings.core.downloadPackage(pkg.provider, slug, versions.items[0].version_id, cluster.id, null);
Expand Down
6 changes: 3 additions & 3 deletions apps/oneclient/frontend/src/components/Bundle/ModCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ export function ModCard({ file, cluster }: ModCardProps) {
}

return mods?.includes(file) ?? false;
}, [installedPackages, mods, file]);
}, [installedPackages, kind, mods, file]);

const [isSelected, setSelected] = useState(isInstalled);
useEffect(() => {
Expand All @@ -137,7 +137,7 @@ export function ModCard({ file, cluster }: ModCardProps) {
const [pkg, version] = kind.Managed;
if (version.dependencies.length > 0)
for (const dependency of version.dependencies)
if (dependency.dependency_type === "required") {
if (dependency.dependency_type === 'required') {
const slug = dependency.project_id ?? '';
const versions = await bindings.core.getPackageVersions(pkg.provider, slug, cluster.mc_version, cluster.mc_loader, 0, 1);
await bindings.core.downloadPackage(pkg.provider, slug, versions.items[0].version_id, cluster.id, null);
Expand All @@ -155,7 +155,7 @@ export function ModCard({ file, cluster }: ModCardProps) {
if ('Managed' in kind) {
const [_, version] = kind.Managed;
const primary = version.files.find(f => f.primary) ?? version.files[0];
hash = primary?.sha1;
hash = primary.sha1;
}
else {
hash = kind.External.sha1;
Expand Down
2 changes: 1 addition & 1 deletion apps/oneclient/frontend/src/components/DownloadMods.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@
const cluster = await bindings.core.getClusterById(mod.clusterId);
if (!cluster)
continue;
if (dependency.dependency_type === "required") {
if (dependency.dependency_type === 'required') {
const slug = dependency.project_id ?? '';
const versions = await bindings.core.getPackageVersions(mod.provider, slug, cluster.mc_version, cluster.mc_loader, 0, 1);
if (versions.items.length !== 0)
Expand Down Expand Up @@ -156,7 +156,7 @@
};

downloadAll();
}, [mods]);

Check warning on line 159 in apps/oneclient/frontend/src/components/DownloadMods.tsx

View workflow job for this annotation

GitHub Actions / ES Checks

React Hook useEffect has missing dependencies: 'download' and 'useParallelModDownloading'. Either include them or remove the dependency array

useEffect(() => {
if (downloadedMods >= mods.length) {
Expand Down
2 changes: 1 addition & 1 deletion apps/oneclient/frontend/src/components/Stepper.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export function Stepper({ steps, currentStepIndex }: VerticalStepperProps) {
className={twMerge('after:transition-all after:duration-300 after:text-brand transition-all duration-300 relative flex items-center cursor-pointer py-2 pl-4 font-medium text-gray-400 text-base partial-leftline-0% data-active:text-white data-active:text-lg data-active:partial-leftline-100% data-complete:partial-leftline-100%')}
data-active={index === currentStepIndex || null}
data-complete={index < currentStepIndex || null}
key={index}
key={step.path}
>
<span>{step.title}</span>
</div>
Expand Down
3 changes: 3 additions & 0 deletions apps/oneclient/frontend/src/routes/__root.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@
const provider = location.search.provider ?? null;
const packageId = location.search.packageId ?? null;
const { data: cluster } = useCommand(['getClusterById', clusterId], () => bindings.core.getClusterById(clusterId));
const { data: managedPackage } = useCommand(['getPackage', provider, packageId], () => bindings.core.getPackage(provider!, packageId!), { enabled: provider != null && packageId != null });

Check failure on line 71 in apps/oneclient/frontend/src/routes/__root.tsx

View workflow job for this annotation

GitHub Actions / ES Checks

This assertion is unnecessary since the receiver accepts the original type of the expression

Check failure on line 71 in apps/oneclient/frontend/src/routes/__root.tsx

View workflow job for this annotation

GitHub Actions / ES Checks

This assertion is unnecessary since the receiver accepts the original type of the expression
useEffect(() => {
bindings.core.setDiscordRPCMessage(ReplaceVariables(ResolvedPathNames[location.pathname as URLPath], { clusterName: cluster?.name ?? 'UNKNOWN', packageName: managedPackage?.name ?? 'UNKNOWN' }));
}, [location.pathname, location.search.clusterId, cluster?.name, managedPackage?.name]);
Expand All @@ -77,8 +77,10 @@
function useAutoUpdate() {
useEffect(() => {
const unlistenPromise = listenForUpdateEvents(async (event) => {
// eslint-disable-next-line no-console -- Used for debugging - aka important
console.log('Updater event:', event);
if (event.status === 'updateAvailable') {
// eslint-disable-next-line no-console -- Used for debugging - aka important
console.log('Update available, installing...');
try {
await installUpdate();
Expand All @@ -91,6 +93,7 @@

checkForUpdate().then((update) => {
if (update)
// eslint-disable-next-line no-console -- Used for debugging - aka important
console.log('Update found on initial check:', update.version);
}).catch(e => console.error('Failed to check for update:', e));

Expand Down
5 changes: 2 additions & 3 deletions apps/oneclient/frontend/src/routes/app/account/route.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
async beforeLoad({ context, search }) {
// TODO instead replace this with a refresh access_token function. Waiting on binding from @LynithDev
const { profile, search: validSearch } = search;
if (!profile)

Check failure on line 23 in apps/oneclient/frontend/src/routes/app/account/route.tsx

View workflow job for this annotation

GitHub Actions / ES Checks

Unnecessary conditional, value is `never`
return { profileData: null, profile: null, validSearch, playerData: null };

const query = context.queryClient.ensureQueryData({
Expand All @@ -28,21 +28,20 @@
queryFn: () => bindings.core.fetchLoggedInProfile(profile.access_token),
});


const profileData = await query;

const playerDataQuery = context.queryClient.ensureQueryData({
queryKey: ['fetchMinecraftProfile', profileData.id],
queryFn: () => bindings.core.fetchMinecraftProfile(profileData.id),
});

const playerData = await playerDataQuery
const playerData = await playerDataQuery;

return {
profileData,
profile,
validSearch,
playerData
playerData,
};
},
});
Expand Down
22 changes: 11 additions & 11 deletions apps/oneclient/frontend/src/routes/app/account/skins.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@
if (!profileData)
return;
setCapes([{ url: '', id: '' }, ...profileData.capes.map(cape => ({ url: cape.url, id: cape.id }))]);
}, []);

Check warning on line 123 in apps/oneclient/frontend/src/routes/app/account/skins.tsx

View workflow job for this annotation

GitHub Actions / ES Checks

React Hook useEffect has a missing dependency: 'profileData'. Either include it or remove the dependency array

const [skins, setSkins, loaded] = useSkinHistory();
const [selectedSkin, setSelectedSkin] = useState<Skin>({ skin_url: getSkinUrl(null), is_slim: false });
Expand All @@ -132,8 +132,8 @@

setSkins(prev => [...prev, skinData]);
setSelectedSkin(skinData);
setSelectedCape(skinData.cape_url ?? '')
setSelectedCape(skinData.cape_url ?? '');
}, [loaded]);

Check warning on line 136 in apps/oneclient/frontend/src/routes/app/account/skins.tsx

View workflow job for this annotation

GitHub Actions / ES Checks

React Hook useEffect has missing dependencies: 'setSkins' and 'skinData'. Either include them or remove the dependency array

const importFromURL = (url: string) => {
setSkins(prev => [...prev, { is_slim: false, skin_url: url }]);
Expand Down Expand Up @@ -362,16 +362,16 @@
{selected.skin_url === skin.skin_url
? <></>
: (
<Overlay.Trigger>
<Button className="group w-8 h-8 absolute top-0 right-0" color="ghost" size="icon">
<Trash01Icon className="group-hover:stroke-danger" />
</Button>

<Overlay>
<RemoveSkinCapeModal onPress={() => setSkins(prev => prev.filter(skinData => skinData.skin_url !== skin.skin_url))} />
</Overlay>
</Overlay.Trigger>
)}
<Overlay.Trigger>
<Button className="group w-8 h-8 absolute top-0 right-0" color="ghost" size="icon">
<Trash01Icon className="group-hover:stroke-danger" />
</Button>

<Overlay>
<RemoveSkinCapeModal onPress={() => setSkins(prev => prev.filter(skinData => skinData.skin_url !== skin.skin_url))} />
</Overlay>
</Overlay.Trigger>
)}
<Button
className="group w-8 h-8 absolute bottom-0 right-0"
color="ghost"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,9 @@
const isSelected = files.filter(file => file.enabled).every(file => mods.includes(file));
const handleDownload = () => {
setMods((prevMods) => {
if (isSelected) { return prevMods.filter(mod => !files.includes(mod)); }
if (isSelected) {
return prevMods.filter(mod => !files.includes(mod));
}
else {
const filesToAdd = files.filter(file => file.enabled && !prevMods.includes(file));
return [...filesToAdd, ...prevMods];
Expand All @@ -140,7 +142,7 @@
onClickOnMod,
useVerticalGridLayout: true,
mods,
}), [mods]);

Check warning on line 145 in apps/oneclient/frontend/src/routes/onboarding/preferences/versionCategory.tsx

View workflow job for this annotation

GitHub Actions / ES Checks

React Hook useMemo has a missing dependency: 'onClickOnMod'. Either include it or remove the dependency array

return (
<AriaButton className={twMerge('group cursor-pointer w-full rounded-xl transition-[outline] outline-2 hover:outline-brand', isSelected ? 'outline-brand' : 'outline-ghost-overlay')} onPress={handleDownload}>
Expand Down
9 changes: 7 additions & 2 deletions apps/onelauncher/desktop/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -83,5 +83,10 @@ custom-protocol = [ "tauri/custom-protocol" ]

[target.'cfg(target_os = "macos")'.dependencies]
objc2 = "0.6.3"
objc2-app-kit = { version = "0.3.2", features = ["NSWindow", "NSButton", "NSControl", "NSView"] }
objc2-foundation = { version = "0.3.2", features = ["NSObject"] }
objc2-app-kit = { version = "0.3.2", features = [
"NSWindow",
"NSButton",
"NSControl",
"NSView"
] }
objc2-foundation = { version = "0.3.2", features = [ "NSObject" ] }
Loading