feat: Migrate more PowerShell calls to Rust implementation

This commit is contained in:
xkeyC
2025-12-05 11:06:54 +08:00
parent f6676ed3d8
commit 62b8718dbd
16 changed files with 1377 additions and 357 deletions

View File

@@ -65,6 +65,55 @@ 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,
}) => RustLib.instance.api.crateApiWin32ApiCreateDesktopShortcut(
targetPath: targetPath,
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,
}) => RustLib.instance.api.crateApiWin32ApiStartProcess(
program: program,
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();
class ProcessInfo {
final int pid;
final String name;

View File

@@ -71,7 +71,7 @@ class RustLib extends BaseEntrypoint<RustLibApi, RustLibApiImpl, RustLibWire> {
String get codegenVersion => '2.11.1';
@override
int get rustContentHash => 1317751362;
int get rustContentHash => 1161621087;
static const kDefaultExternalLibraryLoaderConfig =
ExternalLibraryLoaderConfig(
@@ -82,8 +82,17 @@ class RustLib extends BaseEntrypoint<RustLibApi, RustLibApiImpl, RustLibWire> {
}
abstract class RustLibApi extends BaseApi {
Future<void> crateApiWin32ApiAddNvmePatch();
Future<bool> crateApiWin32ApiCheckNvmePatchStatus();
Future<void> crateApiOrtApiClearAllModels();
Future<void> crateApiWin32ApiCreateDesktopShortcut({
required String targetPath,
required String shortcutName,
});
Future<List<String>> crateApiHttpApiDnsLookupIps({required String host});
Future<List<String>> crateApiHttpApiDnsLookupTxt({required String host});
@@ -97,6 +106,10 @@ abstract class RustLibApi extends BaseApi {
bool? withCustomDns,
});
Future<int> crateApiWin32ApiGetDiskPhysicalSectorSize({
required String driveLetter,
});
Future<String?> crateApiHttpApiGetFasterUrl({
required List<String> urls,
String? pathSuffix,
@@ -122,6 +135,8 @@ abstract class RustLibApi extends BaseApi {
Future<BigInt> crateApiWin32ApiGetSystemMemorySizeGb();
Future<int> crateApiWin32ApiKillProcessByName({required String processName});
Future<void> crateApiOrtApiLoadTranslationModel({
required String modelPath,
required String modelKey,
@@ -151,6 +166,8 @@ abstract class RustLibApi extends BaseApi {
Future<void> crateApiUnp4KApiP4KOpen({required String p4KPath});
Future<void> crateApiWin32ApiRemoveNvmePatch();
Future<String> crateApiWin32ApiResolveShortcut({required String lnkPath});
Future<void> crateApiAsarApiRsiLauncherAsarDataWriteMainJs({
@@ -158,6 +175,11 @@ abstract class RustLibApi extends BaseApi {
required List<int> content,
});
Future<void> crateApiWin32ApiRunAsAdmin({
required String program,
required String args,
});
Future<void> crateApiWin32ApiSendNotify({
String? summary,
String? body,
@@ -179,6 +201,11 @@ abstract class RustLibApi extends BaseApi {
required String workingDirectory,
});
Future<void> crateApiWin32ApiStartProcess({
required String program,
required List<String> args,
});
Future<String> crateApiOrtApiTranslateText({
required String modelKey,
required String text,
@@ -261,6 +288,50 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
required super.portManager,
});
@override
Future<void> crateApiWin32ApiAddNvmePatch() {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
return wire.wire__crate__api__win32_api__add_nvme_patch(port_);
},
codec: DcoCodec(
decodeSuccessData: dco_decode_unit,
decodeErrorData: dco_decode_AnyhowException,
),
constMeta: kCrateApiWin32ApiAddNvmePatchConstMeta,
argValues: [],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiWin32ApiAddNvmePatchConstMeta =>
const TaskConstMeta(debugName: "add_nvme_patch", argNames: []);
@override
Future<bool> crateApiWin32ApiCheckNvmePatchStatus() {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
return wire.wire__crate__api__win32_api__check_nvme_patch_status(
port_,
);
},
codec: DcoCodec(
decodeSuccessData: dco_decode_bool,
decodeErrorData: dco_decode_AnyhowException,
),
constMeta: kCrateApiWin32ApiCheckNvmePatchStatusConstMeta,
argValues: [],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiWin32ApiCheckNvmePatchStatusConstMeta =>
const TaskConstMeta(debugName: "check_nvme_patch_status", argNames: []);
@override
Future<void> crateApiOrtApiClearAllModels() {
return handler.executeNormal(
@@ -282,6 +353,39 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
TaskConstMeta get kCrateApiOrtApiClearAllModelsConstMeta =>
const TaskConstMeta(debugName: "clear_all_models", argNames: []);
@override
Future<void> crateApiWin32ApiCreateDesktopShortcut({
required String targetPath,
required String shortcutName,
}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
var arg0 = cst_encode_String(targetPath);
var arg1 = cst_encode_String(shortcutName);
return wire.wire__crate__api__win32_api__create_desktop_shortcut(
port_,
arg0,
arg1,
);
},
codec: DcoCodec(
decodeSuccessData: dco_decode_unit,
decodeErrorData: dco_decode_AnyhowException,
),
constMeta: kCrateApiWin32ApiCreateDesktopShortcutConstMeta,
argValues: [targetPath, shortcutName],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiWin32ApiCreateDesktopShortcutConstMeta =>
const TaskConstMeta(
debugName: "create_desktop_shortcut",
argNames: ["targetPath", "shortcutName"],
);
@override
Future<List<String>> crateApiHttpApiDnsLookupIps({required String host}) {
return handler.executeNormal(
@@ -384,6 +488,37 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
],
);
@override
Future<int> crateApiWin32ApiGetDiskPhysicalSectorSize({
required String driveLetter,
}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
var arg0 = cst_encode_String(driveLetter);
return wire
.wire__crate__api__win32_api__get_disk_physical_sector_size(
port_,
arg0,
);
},
codec: DcoCodec(
decodeSuccessData: dco_decode_u_32,
decodeErrorData: dco_decode_AnyhowException,
),
constMeta: kCrateApiWin32ApiGetDiskPhysicalSectorSizeConstMeta,
argValues: [driveLetter],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiWin32ApiGetDiskPhysicalSectorSizeConstMeta =>
const TaskConstMeta(
debugName: "get_disk_physical_sector_size",
argNames: ["driveLetter"],
);
@override
Future<String?> crateApiHttpApiGetFasterUrl({
required List<String> urls,
@@ -604,6 +739,34 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
TaskConstMeta get kCrateApiWin32ApiGetSystemMemorySizeGbConstMeta =>
const TaskConstMeta(debugName: "get_system_memory_size_gb", argNames: []);
@override
Future<int> crateApiWin32ApiKillProcessByName({required String processName}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
var arg0 = cst_encode_String(processName);
return wire.wire__crate__api__win32_api__kill_process_by_name(
port_,
arg0,
);
},
codec: DcoCodec(
decodeSuccessData: dco_decode_u_32,
decodeErrorData: dco_decode_AnyhowException,
),
constMeta: kCrateApiWin32ApiKillProcessByNameConstMeta,
argValues: [processName],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiWin32ApiKillProcessByNameConstMeta =>
const TaskConstMeta(
debugName: "kill_process_by_name",
argNames: ["processName"],
);
@override
Future<void> crateApiOrtApiLoadTranslationModel({
required String modelPath,
@@ -824,6 +987,27 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
TaskConstMeta get kCrateApiUnp4KApiP4KOpenConstMeta =>
const TaskConstMeta(debugName: "p4k_open", argNames: ["p4KPath"]);
@override
Future<void> crateApiWin32ApiRemoveNvmePatch() {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
return wire.wire__crate__api__win32_api__remove_nvme_patch(port_);
},
codec: DcoCodec(
decodeSuccessData: dco_decode_unit,
decodeErrorData: dco_decode_AnyhowException,
),
constMeta: kCrateApiWin32ApiRemoveNvmePatchConstMeta,
argValues: [],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiWin32ApiRemoveNvmePatchConstMeta =>
const TaskConstMeta(debugName: "remove_nvme_patch", argNames: []);
@override
Future<String> crateApiWin32ApiResolveShortcut({required String lnkPath}) {
return handler.executeNormal(
@@ -883,6 +1067,38 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
argNames: ["that", "content"],
);
@override
Future<void> crateApiWin32ApiRunAsAdmin({
required String program,
required String args,
}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
var arg0 = cst_encode_String(program);
var arg1 = cst_encode_String(args);
return wire.wire__crate__api__win32_api__run_as_admin(
port_,
arg0,
arg1,
);
},
codec: DcoCodec(
decodeSuccessData: dco_decode_unit,
decodeErrorData: dco_decode_AnyhowException,
),
constMeta: kCrateApiWin32ApiRunAsAdminConstMeta,
argValues: [program, args],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiWin32ApiRunAsAdminConstMeta => const TaskConstMeta(
debugName: "run_as_admin",
argNames: ["program", "args"],
);
@override
Future<void> crateApiWin32ApiSendNotify({
String? summary,
@@ -1024,6 +1240,39 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
argNames: ["executable", "arguments", "workingDirectory", "streamSink"],
);
@override
Future<void> crateApiWin32ApiStartProcess({
required String program,
required List<String> args,
}) {
return handler.executeNormal(
NormalTask(
callFfi: (port_) {
var arg0 = cst_encode_String(program);
var arg1 = cst_encode_list_String(args);
return wire.wire__crate__api__win32_api__start_process(
port_,
arg0,
arg1,
);
},
codec: DcoCodec(
decodeSuccessData: dco_decode_unit,
decodeErrorData: dco_decode_AnyhowException,
),
constMeta: kCrateApiWin32ApiStartProcessConstMeta,
argValues: [program, args],
apiImpl: this,
),
);
}
TaskConstMeta get kCrateApiWin32ApiStartProcessConstMeta =>
const TaskConstMeta(
debugName: "start_process",
argNames: ["program", "args"],
);
@override
Future<String> crateApiOrtApiTranslateText({
required String modelKey,

View File

@@ -920,6 +920,30 @@ class RustLibWire implements BaseWire {
late final _store_dart_post_cobject = _store_dart_post_cobjectPtr
.asFunction<void Function(DartPostCObjectFnType)>();
void wire__crate__api__win32_api__add_nvme_patch(int port_) {
return _wire__crate__api__win32_api__add_nvme_patch(port_);
}
late final _wire__crate__api__win32_api__add_nvme_patchPtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Int64)>>(
'frbgen_starcitizen_doctor_wire__crate__api__win32_api__add_nvme_patch',
);
late final _wire__crate__api__win32_api__add_nvme_patch =
_wire__crate__api__win32_api__add_nvme_patchPtr
.asFunction<void Function(int)>();
void wire__crate__api__win32_api__check_nvme_patch_status(int port_) {
return _wire__crate__api__win32_api__check_nvme_patch_status(port_);
}
late final _wire__crate__api__win32_api__check_nvme_patch_statusPtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Int64)>>(
'frbgen_starcitizen_doctor_wire__crate__api__win32_api__check_nvme_patch_status',
);
late final _wire__crate__api__win32_api__check_nvme_patch_status =
_wire__crate__api__win32_api__check_nvme_patch_statusPtr
.asFunction<void Function(int)>();
void wire__crate__api__ort_api__clear_all_models(int port_) {
return _wire__crate__api__ort_api__clear_all_models(port_);
}
@@ -932,6 +956,40 @@ class RustLibWire implements BaseWire {
_wire__crate__api__ort_api__clear_all_modelsPtr
.asFunction<void Function(int)>();
void wire__crate__api__win32_api__create_desktop_shortcut(
int port_,
ffi.Pointer<wire_cst_list_prim_u_8_strict> target_path,
ffi.Pointer<wire_cst_list_prim_u_8_strict> shortcut_name,
) {
return _wire__crate__api__win32_api__create_desktop_shortcut(
port_,
target_path,
shortcut_name,
);
}
late final _wire__crate__api__win32_api__create_desktop_shortcutPtr =
_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__win32_api__create_desktop_shortcut',
);
late final _wire__crate__api__win32_api__create_desktop_shortcut =
_wire__crate__api__win32_api__create_desktop_shortcutPtr
.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__http_api__dns_lookup_ips(
int port_,
ffi.Pointer<wire_cst_list_prim_u_8_strict> host,
@@ -1024,6 +1082,33 @@ class RustLibWire implements BaseWire {
)
>();
void wire__crate__api__win32_api__get_disk_physical_sector_size(
int port_,
ffi.Pointer<wire_cst_list_prim_u_8_strict> drive_letter,
) {
return _wire__crate__api__win32_api__get_disk_physical_sector_size(
port_,
drive_letter,
);
}
late final _wire__crate__api__win32_api__get_disk_physical_sector_sizePtr =
_lookup<
ffi.NativeFunction<
ffi.Void Function(
ffi.Int64,
ffi.Pointer<wire_cst_list_prim_u_8_strict>,
)
>
>(
'frbgen_starcitizen_doctor_wire__crate__api__win32_api__get_disk_physical_sector_size',
);
late final _wire__crate__api__win32_api__get_disk_physical_sector_size =
_wire__crate__api__win32_api__get_disk_physical_sector_sizePtr
.asFunction<
void Function(int, ffi.Pointer<wire_cst_list_prim_u_8_strict>)
>();
void wire__crate__api__http_api__get_faster_url(
int port_,
ffi.Pointer<wire_cst_list_String> urls,
@@ -1189,6 +1274,33 @@ class RustLibWire implements BaseWire {
_wire__crate__api__win32_api__get_system_memory_size_gbPtr
.asFunction<void Function(int)>();
void wire__crate__api__win32_api__kill_process_by_name(
int port_,
ffi.Pointer<wire_cst_list_prim_u_8_strict> process_name,
) {
return _wire__crate__api__win32_api__kill_process_by_name(
port_,
process_name,
);
}
late final _wire__crate__api__win32_api__kill_process_by_namePtr =
_lookup<
ffi.NativeFunction<
ffi.Void Function(
ffi.Int64,
ffi.Pointer<wire_cst_list_prim_u_8_strict>,
)
>
>(
'frbgen_starcitizen_doctor_wire__crate__api__win32_api__kill_process_by_name',
);
late final _wire__crate__api__win32_api__kill_process_by_name =
_wire__crate__api__win32_api__kill_process_by_namePtr
.asFunction<
void Function(int, ffi.Pointer<wire_cst_list_prim_u_8_strict>)
>();
void wire__crate__api__ort_api__load_translation_model(
int port_,
ffi.Pointer<wire_cst_list_prim_u_8_strict> model_path,
@@ -1380,6 +1492,18 @@ class RustLibWire implements BaseWire {
void Function(int, 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_);
}
late final _wire__crate__api__win32_api__remove_nvme_patchPtr =
_lookup<ffi.NativeFunction<ffi.Void Function(ffi.Int64)>>(
'frbgen_starcitizen_doctor_wire__crate__api__win32_api__remove_nvme_patch',
);
late final _wire__crate__api__win32_api__remove_nvme_patch =
_wire__crate__api__win32_api__remove_nvme_patchPtr
.asFunction<void Function(int)>();
void wire__crate__api__win32_api__resolve_shortcut(
int port_,
ffi.Pointer<wire_cst_list_prim_u_8_strict> lnk_path,
@@ -1438,6 +1562,34 @@ class RustLibWire implements BaseWire {
)
>();
void wire__crate__api__win32_api__run_as_admin(
int port_,
ffi.Pointer<wire_cst_list_prim_u_8_strict> program,
ffi.Pointer<wire_cst_list_prim_u_8_strict> args,
) {
return _wire__crate__api__win32_api__run_as_admin(port_, program, args);
}
late final _wire__crate__api__win32_api__run_as_adminPtr =
_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__win32_api__run_as_admin');
late final _wire__crate__api__win32_api__run_as_admin =
_wire__crate__api__win32_api__run_as_adminPtr
.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__send_notify(
int port_,
ffi.Pointer<wire_cst_list_prim_u_8_strict> summary,
@@ -1569,6 +1721,34 @@ class RustLibWire implements BaseWire {
)
>();
void wire__crate__api__win32_api__start_process(
int port_,
ffi.Pointer<wire_cst_list_prim_u_8_strict> program,
ffi.Pointer<wire_cst_list_String> args,
) {
return _wire__crate__api__win32_api__start_process(port_, program, args);
}
late final _wire__crate__api__win32_api__start_processPtr =
_lookup<
ffi.NativeFunction<
ffi.Void Function(
ffi.Int64,
ffi.Pointer<wire_cst_list_prim_u_8_strict>,
ffi.Pointer<wire_cst_list_String>,
)
>
>('frbgen_starcitizen_doctor_wire__crate__api__win32_api__start_process');
late final _wire__crate__api__win32_api__start_process =
_wire__crate__api__win32_api__start_processPtr
.asFunction<
void Function(
int,
ffi.Pointer<wire_cst_list_prim_u_8_strict>,
ffi.Pointer<wire_cst_list_String>,
)
>();
void wire__crate__api__ort_api__translate_text(
int port_,
ffi.Pointer<wire_cst_list_prim_u_8_strict> model_key,