feat: update app_links

This commit is contained in:
xkeyC
2025-12-26 23:03:41 +08:00
parent 1d59acff2d
commit a673f70862
19 changed files with 996 additions and 26 deletions

View File

@@ -0,0 +1,68 @@
// This file is automatically generated, so please do not edit it.
// @generated by `flutter_rust_bridge`@ 2.11.1.
// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import
import '../frb_generated.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
// These function are ignored because they are on traits that is not defined in current crate (put an empty `#[frb]` on it to unignore): `clone`, `fmt`
/// Check if the URL scheme is already registered with the correct executable path
Future<ApplinksRegistrationResult> checkApplinksRegistration({
required String scheme,
}) => RustLib.instance.api.crateApiApplinksApiCheckApplinksRegistration(
scheme: scheme,
);
/// Register URL scheme in Windows registry
/// This will create or update the registry keys for the custom URL scheme
///
/// # Arguments
/// * `scheme` - The URL scheme to register (e.g., "sctoolbox")
/// * `app_name` - Optional application display name (e.g., "SCToolBox"). If provided,
/// the registry will show "URL:{app_name} Protocol" as the scheme description.
Future<ApplinksRegistrationResult> registerApplinks({
required String scheme,
String? appName,
}) => RustLib.instance.api.crateApiApplinksApiRegisterApplinks(
scheme: scheme,
appName: appName,
);
/// Unregister URL scheme from Windows registry
Future<ApplinksRegistrationResult> unregisterApplinks({
required String scheme,
}) =>
RustLib.instance.api.crateApiApplinksApiUnregisterApplinks(scheme: scheme);
/// Applinks URL scheme registration result
class ApplinksRegistrationResult {
/// Whether registration was successful
final bool success;
/// Detailed message about the operation
final String message;
/// Whether the registry was modified (false if already configured correctly)
final bool wasModified;
const ApplinksRegistrationResult({
required this.success,
required this.message,
required this.wasModified,
});
@override
int get hashCode =>
success.hashCode ^ message.hashCode ^ wasModified.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is ApplinksRegistrationResult &&
runtimeType == other.runtimeType &&
success == other.success &&
message == other.message &&
wasModified == other.wasModified;
}

View File

@@ -6,6 +6,7 @@
import '../frb_generated.dart';
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
// These functions are ignored because they are not marked as `pub`: `get_process_path`
// These function are ignored because they are on traits that is not defined in current crate (put an empty `#[frb]` on it to unignore): `clone`, `clone`, `fmt`, `fmt`
Future<void> sendNotify({
@@ -20,21 +21,27 @@ Future<void> sendNotify({
appId: appId,
);
/// Get system memory size in GB
Future<BigInt> getSystemMemorySizeGb() =>
RustLib.instance.api.crateApiWin32ApiGetSystemMemorySizeGb();
/// Get number of logical processors
Future<int> getNumberOfLogicalProcessors() =>
RustLib.instance.api.crateApiWin32ApiGetNumberOfLogicalProcessors();
/// Get all system information at once
Future<SystemInfo> getSystemInfo() =>
RustLib.instance.api.crateApiWin32ApiGetSystemInfo();
/// Get GPU info from registry (more accurate VRAM)
Future<String> getGpuInfoFromRegistry() =>
RustLib.instance.api.crateApiWin32ApiGetGpuInfoFromRegistry();
/// Resolve shortcut (.lnk) file to get target path
Future<String> resolveShortcut({required String lnkPath}) =>
RustLib.instance.api.crateApiWin32ApiResolveShortcut(lnkPath: lnkPath);
/// Open file explorer and select file/folder
Future<void> openDirWithExplorer({
required String path,
required bool isFile,
@@ -58,16 +65,19 @@ Future<List<ProcessInfo>> getProcessListByName({required String processName}) =>
processName: processName,
);
/// Kill processes by name
Future<int> killProcessByName({required String processName}) => RustLib
.instance
.api
.crateApiWin32ApiKillProcessByName(processName: processName);
/// Get disk physical sector size for performance
Future<int> getDiskPhysicalSectorSize({required String driveLetter}) => RustLib
.instance
.api
.crateApiWin32ApiGetDiskPhysicalSectorSize(driveLetter: driveLetter);
/// Create a desktop shortcut
Future<void> createDesktopShortcut({
required String targetPath,
required String shortcutName,
@@ -76,12 +86,14 @@ Future<void> createDesktopShortcut({
shortcutName: shortcutName,
);
/// Run a program with admin privileges (UAC)
Future<void> runAsAdmin({required String program, required String args}) =>
RustLib.instance.api.crateApiWin32ApiRunAsAdmin(
program: program,
args: args,
);
/// Start a program (without waiting)
Future<void> startProcess({
required String program,
required List<String> args,
@@ -90,12 +102,15 @@ Future<void> startProcess({
args: args,
);
/// Check if NVME patch is applied
Future<bool> checkNvmePatchStatus() =>
RustLib.instance.api.crateApiWin32ApiCheckNvmePatchStatus();
/// Add NVME patch to registry
Future<void> addNvmePatch() =>
RustLib.instance.api.crateApiWin32ApiAddNvmePatch();
/// Remove NVME patch from registry
Future<void> removeNvmePatch() =>
RustLib.instance.api.crateApiWin32ApiRemoveNvmePatch();

View File

@@ -3,6 +3,7 @@
// ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field
import 'api/applinks_api.dart';
import 'api/asar_api.dart';
import 'api/downloader_api.dart';
import 'api/http_api.dart';
@@ -72,7 +73,7 @@ class RustLib extends BaseEntrypoint<RustLibApi, RustLibApiImpl, RustLibWire> {
String get codegenVersion => '2.11.1';
@override
int get rustContentHash => -1903117367;
int get rustContentHash => -351025706;
static const kDefaultExternalLibraryLoaderConfig =
ExternalLibraryLoaderConfig(
@@ -85,6 +86,9 @@ class RustLib extends BaseEntrypoint<RustLibApi, RustLibApiImpl, RustLibWire> {
abstract class RustLibApi extends BaseApi {
Future<void> crateApiWin32ApiAddNvmePatch();
Future<ApplinksRegistrationResult>
crateApiApplinksApiCheckApplinksRegistration({required String scheme});
Future<bool> crateApiWin32ApiCheckNvmePatchStatus();
Future<void> crateApiOrtApiClearAllModels();
@@ -268,6 +272,11 @@ abstract class RustLibApi extends BaseApi {
Future<void> crateApiUnp4KApiP4KOpen({required String p4KPath});
Future<ApplinksRegistrationResult> crateApiApplinksApiRegisterApplinks({
required String scheme,
String? appName,
});
Future<void> crateApiWin32ApiRemoveNvmePatch();
Future<String> crateApiWin32ApiResolveShortcut({required String lnkPath});
@@ -320,6 +329,10 @@ abstract class RustLibApi extends BaseApi {
Future<void> crateApiOrtApiUnloadTranslationModel({required String modelKey});
Future<ApplinksRegistrationResult> crateApiApplinksApiUnregisterApplinks({
required String scheme,
});
Future<WebViewConfiguration> crateApiWebviewApiWebViewConfigurationDefault();
Future<WebViewNavigationState>
@@ -411,6 +424,36 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
TaskConstMeta get kCrateApiWin32ApiAddNvmePatchConstMeta =>
const TaskConstMeta(debugName: "add_nvme_patch", argNames: []);
@override
Future<ApplinksRegistrationResult>
crateApiApplinksApiCheckApplinksRegistration({required String scheme}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
var arg0 = cst_encode_String(scheme);
return wire
.wire__crate__api__applinks_api__check_applinks_registration(
port_,
arg0,
);
},
codec: DcoCodec(
decodeSuccessData: dco_decode_applinks_registration_result,
decodeErrorData: dco_decode_AnyhowException,
),
constMeta: kCrateApiApplinksApiCheckApplinksRegistrationConstMeta,
argValues: [scheme],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiApplinksApiCheckApplinksRegistrationConstMeta =>
const TaskConstMeta(
debugName: "check_applinks_registration",
argNames: ["scheme"],
);
@override
Future<bool> crateApiWin32ApiCheckNvmePatchStatus() {
return handler.executeNormal(
@@ -1987,6 +2030,39 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
TaskConstMeta get kCrateApiUnp4KApiP4KOpenConstMeta =>
const TaskConstMeta(debugName: "p4k_open", argNames: ["p4KPath"]);
@override
Future<ApplinksRegistrationResult> crateApiApplinksApiRegisterApplinks({
required String scheme,
String? appName,
}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
var arg0 = cst_encode_String(scheme);
var arg1 = cst_encode_opt_String(appName);
return wire.wire__crate__api__applinks_api__register_applinks(
port_,
arg0,
arg1,
);
},
codec: DcoCodec(
decodeSuccessData: dco_decode_applinks_registration_result,
decodeErrorData: dco_decode_AnyhowException,
),
constMeta: kCrateApiApplinksApiRegisterApplinksConstMeta,
argValues: [scheme, appName],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiApplinksApiRegisterApplinksConstMeta =>
const TaskConstMeta(
debugName: "register_applinks",
argNames: ["scheme", "appName"],
);
@override
Future<void> crateApiWin32ApiRemoveNvmePatch() {
return handler.executeNormal(
@@ -2369,6 +2445,36 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
argNames: ["modelKey"],
);
@override
Future<ApplinksRegistrationResult> crateApiApplinksApiUnregisterApplinks({
required String scheme,
}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
var arg0 = cst_encode_String(scheme);
return wire.wire__crate__api__applinks_api__unregister_applinks(
port_,
arg0,
);
},
codec: DcoCodec(
decodeSuccessData: dco_decode_applinks_registration_result,
decodeErrorData: dco_decode_AnyhowException,
),
constMeta: kCrateApiApplinksApiUnregisterApplinksConstMeta,
argValues: [scheme],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiApplinksApiUnregisterApplinksConstMeta =>
const TaskConstMeta(
debugName: "unregister_applinks",
argNames: ["scheme"],
);
@override
Future<WebViewConfiguration> crateApiWebviewApiWebViewConfigurationDefault() {
return handler.executeNormal(
@@ -2869,6 +2975,21 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return raw as String;
}
@protected
ApplinksRegistrationResult dco_decode_applinks_registration_result(
dynamic raw,
) {
// Codec=Dco (DartCObject based), see doc to use other codecs
final arr = raw as List<dynamic>;
if (arr.length != 3)
throw Exception('unexpected arr length: expect 3 but see ${arr.length}');
return ApplinksRegistrationResult(
success: dco_decode_bool(arr[0]),
message: dco_decode_String(arr[1]),
wasModified: dco_decode_bool(arr[2]),
);
}
@protected
bool dco_decode_bool(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
@@ -3347,6 +3468,21 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return utf8.decoder.convert(inner);
}
@protected
ApplinksRegistrationResult sse_decode_applinks_registration_result(
SseDeserializer deserializer,
) {
// Codec=Sse (Serialization based), see doc to use other codecs
var var_success = sse_decode_bool(deserializer);
var var_message = sse_decode_String(deserializer);
var var_wasModified = sse_decode_bool(deserializer);
return ApplinksRegistrationResult(
success: var_success,
message: var_message,
wasModified: var_wasModified,
);
}
@protected
bool sse_decode_bool(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
@@ -4047,6 +4183,17 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
sse_encode_list_prim_u_8_strict(utf8.encoder.convert(self), serializer);
}
@protected
void sse_encode_applinks_registration_result(
ApplinksRegistrationResult self,
SseSerializer serializer,
) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_bool(self.success, serializer);
sse_encode_String(self.message, serializer);
sse_encode_bool(self.wasModified, serializer);
}
@protected
void sse_encode_bool(bool self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs

View File

@@ -3,6 +3,7 @@
// ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field
import 'api/applinks_api.dart';
import 'api/asar_api.dart';
import 'api/downloader_api.dart';
import 'api/http_api.dart';
@@ -39,6 +40,11 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
String dco_decode_String(dynamic raw);
@protected
ApplinksRegistrationResult dco_decode_applinks_registration_result(
dynamic raw,
);
@protected
bool dco_decode_bool(dynamic raw);
@@ -216,6 +222,11 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
String sse_decode_String(SseDeserializer deserializer);
@protected
ApplinksRegistrationResult sse_decode_applinks_registration_result(
SseDeserializer deserializer,
);
@protected
bool sse_decode_bool(SseDeserializer deserializer);
@@ -672,6 +683,16 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
return raw.toSigned(64).toInt();
}
@protected
void cst_api_fill_to_wire_applinks_registration_result(
ApplinksRegistrationResult apiObj,
wire_cst_applinks_registration_result wireObj,
) {
wireObj.success = cst_encode_bool(apiObj.success);
wireObj.message = cst_encode_String(apiObj.message);
wireObj.was_modified = cst_encode_bool(apiObj.wasModified);
}
@protected
void cst_api_fill_to_wire_box_autoadd_rsi_launcher_asar_data(
RsiLauncherAsarData apiObj,
@@ -946,6 +967,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void sse_encode_String(String self, SseSerializer serializer);
@protected
void sse_encode_applinks_registration_result(
ApplinksRegistrationResult self,
SseSerializer serializer,
);
@protected
void sse_encode_bool(bool self, SseSerializer serializer);
@@ -1227,6 +1254,33 @@ class RustLibWire implements BaseWire {
_wire__crate__api__win32_api__add_nvme_patchPtr
.asFunction<void Function(int)>();
void wire__crate__api__applinks_api__check_applinks_registration(
int port_,
ffi.Pointer<wire_cst_list_prim_u_8_strict> scheme,
) {
return _wire__crate__api__applinks_api__check_applinks_registration(
port_,
scheme,
);
}
late final _wire__crate__api__applinks_api__check_applinks_registrationPtr =
_lookup<
ffi.NativeFunction<
ffi.Void Function(
ffi.Int64,
ffi.Pointer<wire_cst_list_prim_u_8_strict>,
)
>
>(
'frbgen_starcitizen_doctor_wire__crate__api__applinks_api__check_applinks_registration',
);
late final _wire__crate__api__applinks_api__check_applinks_registration =
_wire__crate__api__applinks_api__check_applinks_registrationPtr
.asFunction<
void Function(int, ffi.Pointer<wire_cst_list_prim_u_8_strict>)
>();
void wire__crate__api__win32_api__check_nvme_patch_status(int port_) {
return _wire__crate__api__win32_api__check_nvme_patch_status(port_);
}
@@ -2453,6 +2507,40 @@ class RustLibWire implements BaseWire {
void Function(int, ffi.Pointer<wire_cst_list_prim_u_8_strict>)
>();
void wire__crate__api__applinks_api__register_applinks(
int port_,
ffi.Pointer<wire_cst_list_prim_u_8_strict> scheme,
ffi.Pointer<wire_cst_list_prim_u_8_strict> app_name,
) {
return _wire__crate__api__applinks_api__register_applinks(
port_,
scheme,
app_name,
);
}
late final _wire__crate__api__applinks_api__register_applinksPtr =
_lookup<
ffi.NativeFunction<
ffi.Void Function(
ffi.Int64,
ffi.Pointer<wire_cst_list_prim_u_8_strict>,
ffi.Pointer<wire_cst_list_prim_u_8_strict>,
)
>
>(
'frbgen_starcitizen_doctor_wire__crate__api__applinks_api__register_applinks',
);
late final _wire__crate__api__applinks_api__register_applinks =
_wire__crate__api__applinks_api__register_applinksPtr
.asFunction<
void Function(
int,
ffi.Pointer<wire_cst_list_prim_u_8_strict>,
ffi.Pointer<wire_cst_list_prim_u_8_strict>,
)
>();
void wire__crate__api__win32_api__remove_nvme_patch(int port_) {
return _wire__crate__api__win32_api__remove_nvme_patch(port_);
}
@@ -2467,9 +2555,9 @@ class RustLibWire implements BaseWire {
void wire__crate__api__win32_api__resolve_shortcut(
int port_,
ffi.Pointer<wire_cst_list_prim_u_8_strict> _lnk_path,
ffi.Pointer<wire_cst_list_prim_u_8_strict> lnk_path,
) {
return _wire__crate__api__win32_api__resolve_shortcut(port_, _lnk_path);
return _wire__crate__api__win32_api__resolve_shortcut(port_, lnk_path);
}
late final _wire__crate__api__win32_api__resolve_shortcutPtr =
@@ -2799,6 +2887,30 @@ class RustLibWire implements BaseWire {
void Function(int, ffi.Pointer<wire_cst_list_prim_u_8_strict>)
>();
void wire__crate__api__applinks_api__unregister_applinks(
int port_,
ffi.Pointer<wire_cst_list_prim_u_8_strict> scheme,
) {
return _wire__crate__api__applinks_api__unregister_applinks(port_, scheme);
}
late final _wire__crate__api__applinks_api__unregister_applinksPtr =
_lookup<
ffi.NativeFunction<
ffi.Void Function(
ffi.Int64,
ffi.Pointer<wire_cst_list_prim_u_8_strict>,
)
>
>(
'frbgen_starcitizen_doctor_wire__crate__api__applinks_api__unregister_applinks',
);
late final _wire__crate__api__applinks_api__unregister_applinks =
_wire__crate__api__applinks_api__unregister_applinksPtr
.asFunction<
void Function(int, ffi.Pointer<wire_cst_list_prim_u_8_strict>)
>();
void wire__crate__api__webview_api__web_view_configuration_default(
int port_,
) {
@@ -3721,6 +3833,16 @@ final class wire_cst_list_web_view_event extends ffi.Struct {
external int len;
}
final class wire_cst_applinks_registration_result extends ffi.Struct {
@ffi.Bool()
external bool success;
external ffi.Pointer<wire_cst_list_prim_u_8_strict> message;
@ffi.Bool()
external bool was_modified;
}
final class wire_cst_download_global_stat extends ffi.Struct {
@ffi.Uint64()
external int download_speed;