You've already forked AstralRinth
forked from didirus/AstralRinth
added settings API + fixed bug (#62)
* added settings API + fixed bug * removed redundant API funcs * comment clarifications --------- Co-authored-by: Wyatt <wyatt@modrinth.com>
This commit is contained in:
@@ -6,6 +6,7 @@ pub mod auth;
|
||||
|
||||
pub mod profile;
|
||||
pub mod profile_create;
|
||||
pub mod settings;
|
||||
|
||||
pub type Result<T> = std::result::Result<T, TheseusGuiError>;
|
||||
|
||||
|
||||
17
theseus_gui/src-tauri/src/api/settings.rs
Normal file
17
theseus_gui/src-tauri/src/api/settings.rs
Normal file
@@ -0,0 +1,17 @@
|
||||
use crate::api::Result;
|
||||
use theseus::prelude::*;
|
||||
|
||||
// Get full settings
|
||||
// invoke('settings_get')
|
||||
#[tauri::command]
|
||||
pub async fn settings_get() -> Result<Settings> {
|
||||
Ok(settings::get().await?)
|
||||
}
|
||||
|
||||
// Set full settings
|
||||
// invoke('settings_set', settings)
|
||||
#[tauri::command]
|
||||
pub async fn settings_set(settings: Settings) -> Result<()> {
|
||||
settings::set(settings).await?;
|
||||
Ok(())
|
||||
}
|
||||
@@ -38,6 +38,8 @@ fn main() {
|
||||
api::auth::auth_has_user,
|
||||
api::auth::auth_users,
|
||||
api::auth::auth_get_user,
|
||||
api::settings::settings_get,
|
||||
api::settings::settings_set,
|
||||
])
|
||||
.run(tauri::generate_context!())
|
||||
.expect("error while running tauri application");
|
||||
|
||||
@@ -14,7 +14,8 @@ import { invoke } from '@tauri-apps/api/tauri'
|
||||
// }
|
||||
|
||||
/// Authenticate a user with Hydra - part 1
|
||||
/// This begins the authentication flow quasi-synchronously, returning a URL to visit (that the user will sign in at)
|
||||
/// This begins the authentication flow quasi-synchronously
|
||||
/// This returns a URL to be opened in a browser
|
||||
export async function authenticate_begin_flow() {
|
||||
return await invoke('auth_authenticate_begin_flow')
|
||||
}
|
||||
@@ -22,30 +23,34 @@ export async function authenticate_begin_flow() {
|
||||
/// Authenticate a user with Hydra - part 2
|
||||
/// This completes the authentication flow quasi-synchronously, returning the sign-in credentials
|
||||
/// (and also adding the credentials to the state)
|
||||
/// This returns a Credentials object
|
||||
export async function authenticate_await_completion() {
|
||||
return await invoke('auth_authenticate_await_completion')
|
||||
}
|
||||
|
||||
/// Refresh some credentials using Hydra, if needed
|
||||
// user is UUID
|
||||
// update_name is bool
|
||||
/// user is UUID
|
||||
/// update_name is bool
|
||||
/// Returns a Credentials object
|
||||
export async function refresh(user, update_name) {
|
||||
return await invoke('auth_refresh', user, update_name)
|
||||
return await invoke('auth_refresh', { user, update_name })
|
||||
}
|
||||
|
||||
/// Remove a user account from the database
|
||||
// user is UUID
|
||||
/// user is UUID
|
||||
export async function remove_user(user) {
|
||||
return await invoke('auth_remove_user', user)
|
||||
return await invoke('auth_remove_user', { user })
|
||||
}
|
||||
|
||||
// Add a path as a profile in-memory
|
||||
// user is UUID
|
||||
/// Returns a bool
|
||||
export async function has_user(user) {
|
||||
return await invoke('auth_has_user', user)
|
||||
return await invoke('auth_has_user', { user })
|
||||
}
|
||||
|
||||
// Remove a profile
|
||||
/// Returns a list of users
|
||||
/// Returns an Array of Credentials
|
||||
export async function users() {
|
||||
return await invoke('auth_users')
|
||||
}
|
||||
@@ -53,6 +58,7 @@ export async function users() {
|
||||
// Get a user by UUID
|
||||
// Prefer to use refresh() instead of this because it will refresh the credentials
|
||||
// user is UUID
|
||||
// Returns Credentials (of user)
|
||||
export async function get_user(user) {
|
||||
return await invoke('auth_get_user', user)
|
||||
return await invoke('auth_get_user', { user })
|
||||
}
|
||||
|
||||
@@ -10,42 +10,47 @@ export async function addDefaultInstance() {
|
||||
return await invoke('profile_create_empty')
|
||||
}
|
||||
|
||||
// Add empty default instance
|
||||
/// Add empty default instance
|
||||
/// Returns a path to the profile created
|
||||
export async function create() {
|
||||
return await invoke('profile_create')
|
||||
}
|
||||
|
||||
// Add a profile to the in-memory state
|
||||
export async function add(profile) {
|
||||
return await invoke('profile_add', profile)
|
||||
return await invoke('profile_add', { profile })
|
||||
}
|
||||
|
||||
// Add a path as a profile in-memory
|
||||
export async function add_path(path) {
|
||||
return await invoke('profile_add_path', path)
|
||||
return await invoke('profile_add_path', { path })
|
||||
}
|
||||
|
||||
// Remove a profile
|
||||
export async function remove(path) {
|
||||
return await invoke('profile_remove', path)
|
||||
return await invoke('profile_remove', { path })
|
||||
}
|
||||
|
||||
// Get a profile by path
|
||||
// Returns a Profile
|
||||
export async function get(path) {
|
||||
return await invoke('profile_get', path)
|
||||
return await invoke('profile_get', { path })
|
||||
}
|
||||
|
||||
// Check if a pathed profile is already managed by Theseus
|
||||
// Returns bool
|
||||
export async function is_managed(path) {
|
||||
return await invoke('profile_is_managed', path)
|
||||
return await invoke('profile_is_managed', { path })
|
||||
}
|
||||
|
||||
// Check if a pathed profile is loaded
|
||||
// Returns bool
|
||||
export async function is_loaded(path) {
|
||||
return await invoke('profile_is_loaded', path)
|
||||
return await invoke('profile_is_loaded', { path })
|
||||
}
|
||||
|
||||
// Get a copy of the profile set
|
||||
// Returns hashmap of path -> Profile
|
||||
export async function list() {
|
||||
return await invoke('profile_list')
|
||||
}
|
||||
@@ -53,21 +58,21 @@ export async function list() {
|
||||
// Run Minecraft using a pathed profile
|
||||
// Returns PID of child
|
||||
export async function run(path, credentials) {
|
||||
return await invoke('profile_run', path, credentials)
|
||||
return await invoke('profile_run', { path, credentials })
|
||||
}
|
||||
|
||||
// Run Minecraft using a pathed profile
|
||||
// Waits for end
|
||||
export async function run_wait(path, credentials) {
|
||||
return await invoke('run_wait', path, credentials)
|
||||
return await invoke('profile_run_wait', { path, credentials })
|
||||
}
|
||||
|
||||
// Tries to kill a running minecraft process (if PID is still stored)
|
||||
export async function kill(child_pid) {
|
||||
return await invoke('profile_kill', child_pid)
|
||||
return await invoke('profile_kill', { child_pid })
|
||||
}
|
||||
|
||||
// Wait for a running minecraft process (a Child)
|
||||
export async function wait_for(child_pid) {
|
||||
return await invoke('profile_wait_for', child_pid)
|
||||
return await invoke('profile_wait_for', { child_pid })
|
||||
}
|
||||
|
||||
53
theseus_gui/src/helpers/settings.js
Normal file
53
theseus_gui/src/helpers/settings.js
Normal file
@@ -0,0 +1,53 @@
|
||||
/**
|
||||
* All theseus API calls return serialized values (both return values and errors);
|
||||
* So, for example, addDefaultInstance creates a blank Profile object, where the Rust struct is serialized,
|
||||
* and deserialized into a usable JS object.
|
||||
*/
|
||||
import { invoke } from '@tauri-apps/api/tauri'
|
||||
|
||||
// Settings object
|
||||
/*
|
||||
|
||||
Settings {
|
||||
"memory": MemorySettings,
|
||||
"game_resolution": [int int],
|
||||
"custom_java_args": [String ...],
|
||||
"custom_env_args" : [(string, string) ... ]>,
|
||||
"java_8_path": Path (can be null),
|
||||
"java_17_path": Path (can be null),
|
||||
"default_user": Uuid string (can be null),
|
||||
"hooks": Hooks,
|
||||
"max_concurrent_downloads": uint,
|
||||
"version": u32,
|
||||
}
|
||||
|
||||
Memorysettings {
|
||||
"min": u32, can be null,
|
||||
"max": u32,
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
// An example test function for getting/setting settings
|
||||
export async function test() {
|
||||
// First, print settings and store them to an object
|
||||
let settings = await get()
|
||||
console.log(JSON.stringify(settings))
|
||||
|
||||
// Then set some random settings in that object
|
||||
settings.java_8_path = '/example/path'
|
||||
|
||||
// Set the new settings object
|
||||
await set(settings)
|
||||
console.log(JSON.stringify(await get()))
|
||||
}
|
||||
|
||||
// Get full settings object
|
||||
export async function get() {
|
||||
return await invoke('settings_get')
|
||||
}
|
||||
|
||||
// Set full settings object
|
||||
export async function set(settings) {
|
||||
return await invoke('settings_set', { settings })
|
||||
}
|
||||
Reference in New Issue
Block a user