Skip to content

Commit b85d5f6

Browse files
committed
refresh accounts function
1 parent 0418a78 commit b85d5f6

File tree

6 files changed

+64
-10
lines changed

6 files changed

+64
-10
lines changed

apps/oneclient/desktop/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ async fn initialize_state(handle: &tauri::AppHandle) -> LauncherResult<()> {
9696

9797
State::get().await?;
9898

99+
onelauncher_core::api::credentials::refresh_accounts().await?;
100+
99101
tracing::info!("initialized launcher successfully");
100102
Ok(())
101103
}

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

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -303,12 +303,10 @@ export type VersionType =
303303
*/
304304
"old_beta"
305305

306-
const ARGS_MAP = { 'core':'{"searchPackages":["provider","query"],"getPackage":["provider","slug"],"getRunningProcessesByClusterId":["cluster_id"],"getWorlds":["id"],"getGameVersions":[],"getLogs":["id"],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"downloadExternalPackage":["package","cluster_id","force","skip_compatibility"],"installModpack":["modpack","cluster_id"],"getLinkedPackages":["cluster_id"],"createCluster":["options"],"setDefaultUser":["uuid"],"changeSkin":["access_token","skin_url","skin_variant"],"convertUsernameUUID":["username_uuid"],"readSettings":[],"getLogByName":["id","name"],"updateClusterProfile":["name","profile"],"getLoadersForVersion":["mc_version"],"getDefaultUser":["fallback"],"fetchMinecraftProfile":["uuid"],"getScreenshots":["id"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"getProfileOrDefault":["name"],"launchCluster":["id","uuid","search_for_java"],"isClusterRunning":["cluster_id"],"removePackage":["cluster_id","package_hash"],"getClusters":[],"getUsers":[],"setClusterStage":["id","stage"],"getClusterById":["id"],"createSettingsProfile":["name"],"getUser":["uuid"],"changeCape":["access_token","cape_uuid"],"fetchLoggedInProfile":["access_token"],"removeCape":["access_token"],"getUsersFromAuthor":["provider","author"],"removeCluster":["id"],"setDiscordRPCMessage":["message"],"getMultiplePackages":["provider","slugs"],"removeUser":["uuid"],"writeSettings":["setting"],"updateClusterById":["id","request"],"getPackageBody":["provider","body"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"open":["input"],"getRunningProcesses":[],"openMsaLogin":[],"killProcess":["pid"],"getGlobalProfile":[]}', 'oneclient':'{"getBundlesFor":["cluster_id"],"installUpdate":[],"getVersions":[],"getClustersGroupedByMajor":[],"checkForUpdate":[]}', 'folders':'{"openCluster":["folder_name"],"fromCluster":["folder_name"]}', 'events':'{"message":["event"],"ingress":["event"],"process":["event"]}', 'debug':'{"openDevTools":[],"getGitCommitHash":[],"getPackageVersion":[],"getType":[],"getPlatform":[],"getLocale":[],"isInDev":[],"getArch":[],"getOsVersion":[],"getBuildTimestamp":[],"getFamily":[]}' }
306+
const ARGS_MAP = { 'events':'{"process":["event"],"ingress":["event"],"message":["event"]}', 'core':'{"updateClusterProfile":["name","profile"],"getUsers":[],"fetchLoggedInProfile":["access_token"],"killProcess":["pid"],"getUsersFromAuthor":["provider","author"],"convertUsernameUUID":["username_uuid"],"changeSkin":["access_token","skin_url","skin_variant"],"getDefaultUser":["fallback"],"getScreenshots":["id"],"getGlobalProfile":[],"fetchMinecraftProfile":["uuid"],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"getClusterById":["id"],"getLogs":["id"],"refreshAccounts":[],"getClusters":[],"createCluster":["options"],"removeCluster":["id"],"isClusterRunning":["cluster_id"],"updateClusterById":["id","request"],"getGameVersions":[],"launchCluster":["id","uuid","search_for_java"],"openMsaLogin":[],"refreshAccount":["uuid"],"searchPackages":["provider","query"],"getLinkedPackages":["cluster_id"],"getLoadersForVersion":["mc_version"],"getRunningProcesses":[],"getLogByName":["id","name"],"readSettings":[],"installModpack":["modpack","cluster_id"],"getMultiplePackages":["provider","slugs"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"removePackage":["cluster_id","package_hash"],"getWorlds":["id"],"setClusterStage":["id","stage"],"setDefaultUser":["uuid"],"writeSettings":["setting"],"getPackageBody":["provider","body"],"downloadExternalPackage":["package","cluster_id","force","skip_compatibility"],"removeUser":["uuid"],"changeCape":["access_token","cape_uuid"],"getPackage":["provider","slug"],"open":["input"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"createSettingsProfile":["name"],"setDiscordRPCMessage":["message"],"removeCape":["access_token"],"getUser":["uuid"],"getRunningProcessesByClusterId":["cluster_id"],"getProfileOrDefault":["name"]}', 'oneclient':'{"getBundlesFor":["cluster_id"],"checkForUpdate":[],"installUpdate":[],"getVersions":[],"getClustersGroupedByMajor":[]}', 'folders':'{"openCluster":["folder_name"],"fromCluster":["folder_name"]}', 'debug':'{"getOsVersion":[],"openDevTools":[],"isInDev":[],"getBuildTimestamp":[],"getPackageVersion":[],"getLocale":[],"getType":[],"getPlatform":[],"getGitCommitHash":[],"getFamily":[],"getArch":[]}' }
307307
export type Router = { 'events': { ingress: (event: IngressPayload) => Promise<void>,
308308
message: (event: MessagePayload) => Promise<void>,
309309
process: (event: ProcessPayload) => Promise<void> },
310-
'folders': { fromCluster: (folderName: string) => Promise<string>,
311-
openCluster: (folderName: string) => Promise<null> },
312310
'core': { getClusters: () => Promise<ClusterModel[]>,
313311
getClusterById: (id: number) => Promise<ClusterModel | null>,
314312
removeCluster: (id: number) => Promise<null>,
@@ -336,6 +334,8 @@ removeUser: (uuid: string) => Promise<null>,
336334
getDefaultUser: (fallback: boolean | null) => Promise<MinecraftCredentials | null>,
337335
setDefaultUser: (uuid: string | null) => Promise<null>,
338336
openMsaLogin: () => Promise<MinecraftCredentials | null>,
337+
refreshAccounts: () => Promise<MinecraftCredentials[]>,
338+
refreshAccount: (uuid: string) => Promise<MinecraftCredentials | null>,
339339
readSettings: () => Promise<Settings>,
340340
writeSettings: (setting: Settings) => Promise<null>,
341341
searchPackages: (provider: Provider, query: SearchQuery) => Promise<Paginated<SearchResult>>,
@@ -358,6 +358,13 @@ removeCape: (accessToken: string) => Promise<MojangFullPlayerProfile>,
358358
convertUsernameUUID: (usernameUuid: string) => Promise<MowojangProfile>,
359359
setDiscordRPCMessage: (message: string) => Promise<null>,
360360
open: (input: string) => Promise<null> },
361+
'folders': { fromCluster: (folderName: string) => Promise<string>,
362+
openCluster: (folderName: string) => Promise<null> },
363+
'oneclient': { getClustersGroupedByMajor: () => Promise<Partial<{ [key in number]: ClusterModel[] }>>,
364+
getBundlesFor: (clusterId: number) => Promise<ModpackArchive[]>,
365+
getVersions: () => Promise<OnlineClusterManifest>,
366+
checkForUpdate: () => Promise<Update | null>,
367+
installUpdate: () => Promise<null> },
361368
'debug': { openDevTools: () => Promise<void>,
362369
isInDev: () => Promise<boolean>,
363370
getArch: () => Promise<string>,
@@ -368,12 +375,7 @@ getPlatform: () => Promise<string>,
368375
getOsVersion: () => Promise<string>,
369376
getGitCommitHash: () => Promise<string>,
370377
getBuildTimestamp: () => Promise<string>,
371-
getPackageVersion: () => Promise<string> },
372-
'oneclient': { getClustersGroupedByMajor: () => Promise<Partial<{ [key in number]: ClusterModel[] }>>,
373-
getBundlesFor: (clusterId: number) => Promise<ModpackArchive[]>,
374-
getVersions: () => Promise<OnlineClusterManifest>,
375-
checkForUpdate: () => Promise<Update | null>,
376-
installUpdate: () => Promise<null> } };
378+
getPackageVersion: () => Promise<string> } };
377379

378380

379381
export type { InferCommandOutput }

apps/onelauncher/desktop/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ async fn initialize_state(handle: &tauri::AppHandle) -> LauncherResult<()> {
9999

100100
State::get().await?;
101101

102+
onelauncher_core::api::credentials::refresh_accounts().await?;
103+
102104
tracing::info!("initialized launcher successfully");
103105
Ok(())
104106
}

packages/core/src/api/credentials.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,34 @@ pub fn get_fake_user() -> MinecraftCredentials {
9595
expires: chrono::Utc::now() + chrono::Duration::days(1),
9696
}
9797
}
98+
99+
/// Refresh a specific user account by [`uuid::Uuid`].
100+
#[tracing::instrument]
101+
pub async fn refresh_account(user_id: uuid::Uuid) -> LauncherResult<Option<MinecraftCredentials>> {
102+
let state = State::get().await?;
103+
let mut store = state.credentials.write().await;
104+
105+
if let Some(user) = store.users.get(&user_id).cloned() {
106+
store.refresh_token(&user).await
107+
} else {
108+
Ok(None)
109+
}
110+
}
111+
112+
/// Refresh all user accounts.
113+
#[tracing::instrument]
114+
pub async fn refresh_accounts() -> LauncherResult<Vec<MinecraftCredentials>> {
115+
let state = State::get().await?;
116+
let mut store = state.credentials.write().await;
117+
118+
let users: Vec<MinecraftCredentials> = store.users.values().cloned().collect();
119+
let mut refreshed_users = Vec::new();
120+
121+
for user in users {
122+
if let Some(refreshed) = store.refresh_token(&user).await? {
123+
refreshed_users.push(refreshed);
124+
}
125+
}
126+
127+
Ok(refreshed_users)
128+
}

packages/core/src/api/tauri/commands.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,12 @@ pub trait TauriLauncherApi {
135135
async fn open_msa_login<R: Runtime>(
136136
app_handle: AppHandle<R>,
137137
) -> LauncherResult<Option<MinecraftCredentials>>;
138+
139+
#[taurpc(alias = "refreshAccounts")]
140+
async fn refresh_accounts() -> LauncherResult<Vec<MinecraftCredentials>>;
141+
142+
#[taurpc(alias = "refreshAccount")]
143+
async fn refresh_account(uuid: uuid::Uuid) -> LauncherResult<Option<MinecraftCredentials>>;
138144
// endregion: users
139145

140146
// MARK: API: settings
@@ -642,6 +648,17 @@ impl TauriLauncherApi for TauriLauncherApiImpl {
642648
Ok(None)
643649
}
644650

651+
async fn refresh_accounts(self) -> LauncherResult<Vec<MinecraftCredentials>> {
652+
api::credentials::refresh_accounts().await
653+
}
654+
655+
async fn refresh_account(
656+
self,
657+
uuid: uuid::Uuid,
658+
) -> LauncherResult<Option<MinecraftCredentials>> {
659+
api::credentials::refresh_account(uuid).await
660+
}
661+
645662
async fn get_users_from_author(
646663
self,
647664
provider: Provider,

packages/core/src/store/credentials.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ impl CredentialsStore {
215215
}
216216

217217
/// Refresh the current stored [`MinecraftCredentials`].
218-
async fn refresh_token(
218+
pub async fn refresh_token(
219219
&mut self,
220220
creds: &MinecraftCredentials,
221221
) -> LauncherResult<Option<MinecraftCredentials>> {

0 commit comments

Comments
 (0)