mirror of
https://github.com/StarCitizenToolBox/app.git
synced 2026-01-13 19:50:28 +00:00
feat: GraphicsRendererDialog
This commit is contained in:
parent
bf246e469f
commit
19488507b0
@ -2,6 +2,7 @@ import 'dart:io';
|
||||
|
||||
import 'package:hive_ce/hive.dart';
|
||||
import 'package:starcitizen_doctor/common/utils/log.dart';
|
||||
import 'package:starcitizen_doctor/common/rust/api/win32_api.dart' as win32;
|
||||
|
||||
class SystemHelper {
|
||||
static String powershellPath = "powershell.exe";
|
||||
@ -30,7 +31,7 @@ class SystemHelper {
|
||||
"-Path",
|
||||
"\"HKLM:\\SYSTEM\\CurrentControlSet\\Services\\stornvme\\Parameters\\Device\"",
|
||||
"-Name",
|
||||
"\"ForcedPhysicalSectorSizeInBytes\""
|
||||
"\"ForcedPhysicalSectorSizeInBytes\"",
|
||||
]);
|
||||
dPrint("checkNvmePatchStatus result ==== ${result.stdout}");
|
||||
if (result.stderr == "" && result.stdout.toString().contains("{* 4095}")) {
|
||||
@ -52,7 +53,7 @@ class SystemHelper {
|
||||
"ForcedPhysicalSectorSizeInBytes",
|
||||
"-PropertyType MultiString",
|
||||
"-Force -Value",
|
||||
"\"* 4095\""
|
||||
"\"* 4095\"",
|
||||
]);
|
||||
dPrint("nvme_PhysicalBytes result == ${result.stdout}");
|
||||
return result.stderr;
|
||||
@ -65,7 +66,7 @@ class SystemHelper {
|
||||
"-Path",
|
||||
"\"HKLM:\\SYSTEM\\CurrentControlSet\\Services\\stornvme\\Parameters\\Device\"",
|
||||
"-Name",
|
||||
"\"ForcedPhysicalSectorSizeInBytes\""
|
||||
"\"ForcedPhysicalSectorSizeInBytes\"",
|
||||
]);
|
||||
dPrint("doRemoveNvmePath result ==== ${result.stdout}");
|
||||
if (result.stderr == "") {
|
||||
@ -97,8 +98,9 @@ class SystemHelper {
|
||||
"$programDataPath\\Microsoft\\Windows\\Start Menu\\Programs\\Roberts Space Industries\\RSI Launcher.lnk";
|
||||
final rsiLinkFile = File(rsiFilePath);
|
||||
if (await rsiLinkFile.exists()) {
|
||||
final r = await Process.run(SystemHelper.powershellPath,
|
||||
["(New-Object -ComObject WScript.Shell).CreateShortcut(\"$rsiFilePath\").targetpath"]);
|
||||
final r = await Process.run(SystemHelper.powershellPath, [
|
||||
"(New-Object -ComObject WScript.Shell).CreateShortcut(\"$rsiFilePath\").targetpath",
|
||||
]);
|
||||
if (r.stdout.toString().contains("RSI Launcher.exe")) {
|
||||
final start = r.stdout.toString().split("RSI Launcher.exe");
|
||||
if (skipEXE) {
|
||||
@ -111,28 +113,20 @@ class SystemHelper {
|
||||
}
|
||||
|
||||
static Future<void> killRSILauncher() async {
|
||||
var psr = await Process.run(powershellPath, ["ps", "\"RSI Launcher\"", "|select -expand id"]);
|
||||
if (psr.stderr == "") {
|
||||
for (var value in (psr.stdout ?? "").toString().split("\n")) {
|
||||
dPrint(value);
|
||||
if (value != "") {
|
||||
Process.killPid(int.parse(value));
|
||||
}
|
||||
var pList = await getPID("RSI Launcher");
|
||||
for (var pid in pList) {
|
||||
try {
|
||||
Process.killPid(pid);
|
||||
} catch (e) {
|
||||
dPrint("killRSILauncher Error: $e");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Future<List<String>> getPID(String name) async {
|
||||
static Future<List<int>> getPID(String name) async {
|
||||
try {
|
||||
final r = await Process.run(powershellPath, ["(ps $name).Id"]);
|
||||
if (r.stderr.toString().trim().isNotEmpty) {
|
||||
dPrint("getPID Error: ${r.stderr}");
|
||||
return [];
|
||||
}
|
||||
final str = r.stdout.toString().trim();
|
||||
dPrint("getPID result: $str");
|
||||
if (str.isEmpty) return [];
|
||||
return str.split("\n");
|
||||
final pList = await win32.getProcessListByName(processName: name);
|
||||
return pList.map((e) => e.pid).toList();
|
||||
} catch (e) {
|
||||
dPrint("getPID Error: $e");
|
||||
return [];
|
||||
@ -147,22 +141,15 @@ class SystemHelper {
|
||||
if (processorAffinity == null) {
|
||||
Process.run(path, []);
|
||||
} else {
|
||||
Process.run("cmd.exe", [
|
||||
'/C',
|
||||
'Start',
|
||||
'""',
|
||||
'/High',
|
||||
'/Affinity',
|
||||
processorAffinity,
|
||||
path,
|
||||
]);
|
||||
Process.run("cmd.exe", ['/C', 'Start', '""', '/High', '/Affinity', processorAffinity, path]);
|
||||
}
|
||||
dPrint(path);
|
||||
}
|
||||
|
||||
static Future<int> getSystemMemorySizeGB() async {
|
||||
final r = await Process.run(
|
||||
powershellPath, ["(Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb"]);
|
||||
final r = await Process.run(powershellPath, [
|
||||
"(Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb",
|
||||
]);
|
||||
return int.tryParse(r.stdout.toString().trim()) ?? 0;
|
||||
}
|
||||
|
||||
@ -196,10 +183,9 @@ foreach ($adapter in $adapterMemory) {
|
||||
}
|
||||
|
||||
static Future<String> getDiskInfo() async {
|
||||
return (await Process.run(powershellPath, ["Get-PhysicalDisk | format-table BusType,FriendlyName,Size"]))
|
||||
.stdout
|
||||
.toString()
|
||||
.trim();
|
||||
return (await Process.run(powershellPath, [
|
||||
"Get-PhysicalDisk | format-table BusType,FriendlyName,Size",
|
||||
])).stdout.toString().trim();
|
||||
}
|
||||
|
||||
static Future<int> getDirLen(String path, {List<String>? skipPath}) async {
|
||||
@ -226,8 +212,9 @@ foreach ($adapter in $adapterMemory) {
|
||||
}
|
||||
|
||||
static Future<int> getNumberOfLogicalProcessors() async {
|
||||
final cpuNumberResult =
|
||||
await Process.run(powershellPath, ["(Get-WmiObject -Class Win32_Processor).NumberOfLogicalProcessors"]);
|
||||
final cpuNumberResult = await Process.run(powershellPath, [
|
||||
"(Get-WmiObject -Class Win32_Processor).NumberOfLogicalProcessors",
|
||||
]);
|
||||
if (cpuNumberResult.exitCode != 0) return 0;
|
||||
return int.tryParse(cpuNumberResult.stdout.toString().trim()) ?? 0;
|
||||
}
|
||||
@ -257,8 +244,10 @@ foreach ($adapter in $adapterMemory) {
|
||||
static Future openDir(dynamic path, {bool isFile = false}) async {
|
||||
dPrint("SystemHelper.openDir path === $path");
|
||||
if (Platform.isWindows) {
|
||||
await Process.run(
|
||||
SystemHelper.powershellPath, ["explorer.exe", isFile ? "/select,$path" : "\"/select,\"$path\"\""]);
|
||||
await Process.run(SystemHelper.powershellPath, [
|
||||
"explorer.exe",
|
||||
isFile ? "/select,$path" : "\"/select,\"$path\"\"",
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -253,40 +253,44 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
static String m99(v0, v1, v2, v3, v4) =>
|
||||
"System: ${v0}\n\nProcessor: ${v1}\n\nMemory size: ${v2}GB\n\nGPU information:\n${v3}\n\nStorage information:\n${v4}\n\n";
|
||||
|
||||
static String m100(v0) => "Processing failed!: ${v0}";
|
||||
static String m100(v0) => "Current Renderer: ${v0}";
|
||||
|
||||
static String m101(v0) => "Failed to read launcher information: ${v0}";
|
||||
static String m101(v0) => "Save failed: ${v0}";
|
||||
|
||||
static String m102(v0) => "Patch status: ${v0}";
|
||||
static String m102(v0) => "Processing failed!: ${v0}";
|
||||
|
||||
static String m103(v0) => "Launcher internal version information: ${v0}";
|
||||
static String m103(v0) => "Failed to read launcher information: ${v0}";
|
||||
|
||||
static String m104(v0) => "Export Selected (${v0})";
|
||||
static String m104(v0) => "Patch status: ${v0}";
|
||||
|
||||
static String m105(v0) => "Extraction failed: ${v0}";
|
||||
static String m105(v0) => "Launcher internal version information: ${v0}";
|
||||
|
||||
static String m106(v0) => "Extraction complete: ${v0}";
|
||||
static String m106(v0) => "Export Selected (${v0})";
|
||||
|
||||
static String m107(v0) => "Extracting: ${v0}";
|
||||
static String m107(v0) => "Extraction failed: ${v0}";
|
||||
|
||||
static String m108(v0) => "Extraction completed, ${v0} files total";
|
||||
static String m108(v0) => "Extraction complete: ${v0}";
|
||||
|
||||
static String m109(v0) => "Current file: ${v0}";
|
||||
static String m109(v0) => "Extracting: ${v0}";
|
||||
|
||||
static String m110(v0, v1) => "Extracting (${v0}/${v1})";
|
||||
static String m110(v0) => "Extraction completed, ${v0} files total";
|
||||
|
||||
static String m111(v0) => "Opening file: ${v0}";
|
||||
static String m111(v0) => "Current file: ${v0}";
|
||||
|
||||
static String m112(v0, v1) =>
|
||||
static String m112(v0, v1) => "Extracting (${v0}/${v1})";
|
||||
|
||||
static String m113(v0) => "Opening file: ${v0}";
|
||||
|
||||
static String m114(v0, v1) =>
|
||||
"Loading complete: ${v0} files, time taken: ${v1} ms";
|
||||
|
||||
static String m113(v0) => "Reading file: ${v0}...";
|
||||
static String m115(v0) => "Reading file: ${v0}...";
|
||||
|
||||
static String m114(v0, v1) => "Processing files (${v0}/${v1})...";
|
||||
static String m116(v0, v1) => "Processing files (${v0}/${v1})...";
|
||||
|
||||
static String m115(v0) => "Unknown file type\n${v0}";
|
||||
static String m117(v0) => "Unknown file type\n${v0}";
|
||||
|
||||
static String m116(v0) => "P4K Viewer -> ${v0}";
|
||||
static String m118(v0) => "P4K Viewer -> ${v0}";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
||||
@ -2099,6 +2103,9 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tools_action_rsi_launcher_log_fix": MessageLookupByLibrary.simpleMessage(
|
||||
"RSI Launcher Log Fix",
|
||||
),
|
||||
"tools_action_switch_graphics_renderer":
|
||||
MessageLookupByLibrary.simpleMessage("Switch DirectX/Vulkan Renderer"),
|
||||
"tools_action_switch_graphics_renderer_info": m100,
|
||||
"tools_action_unp4k": MessageLookupByLibrary.simpleMessage("P4K Viewer"),
|
||||
"tools_action_unp4k_info": MessageLookupByLibrary.simpleMessage(
|
||||
"Unpack Star Citizen p4k files",
|
||||
@ -2108,6 +2115,33 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
),
|
||||
"tools_action_write_nvme_registry_patch":
|
||||
MessageLookupByLibrary.simpleMessage("Write NVME Registry Patch"),
|
||||
"tools_graphics_renderer_dialog_no_version":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Version code not found. Please enter it manually. (If you are unfamiliar with this, please ask other players for help.)",
|
||||
),
|
||||
"tools_graphics_renderer_dialog_renderer":
|
||||
MessageLookupByLibrary.simpleMessage("Renderer"),
|
||||
"tools_graphics_renderer_dialog_save": MessageLookupByLibrary.simpleMessage(
|
||||
"Save",
|
||||
),
|
||||
"tools_graphics_renderer_dialog_save_failed": m101,
|
||||
"tools_graphics_renderer_dialog_save_success":
|
||||
MessageLookupByLibrary.simpleMessage("Renderer settings saved"),
|
||||
"tools_graphics_renderer_dialog_title":
|
||||
MessageLookupByLibrary.simpleMessage("Switch Graphics Renderer"),
|
||||
"tools_graphics_renderer_dialog_version":
|
||||
MessageLookupByLibrary.simpleMessage("Version Code"),
|
||||
"tools_graphics_renderer_dialog_version_hint":
|
||||
MessageLookupByLibrary.simpleMessage("Select or enter version code"),
|
||||
"tools_graphics_renderer_dx11": MessageLookupByLibrary.simpleMessage(
|
||||
"DirectX 11",
|
||||
),
|
||||
"tools_graphics_renderer_unknown": MessageLookupByLibrary.simpleMessage(
|
||||
"Unknown",
|
||||
),
|
||||
"tools_graphics_renderer_vulkan": MessageLookupByLibrary.simpleMessage(
|
||||
"Vulkan",
|
||||
),
|
||||
"tools_hosts_action_one_click_acceleration":
|
||||
MessageLookupByLibrary.simpleMessage("One-Click Acceleration"),
|
||||
"tools_hosts_info_dns_query_and_test": MessageLookupByLibrary.simpleMessage(
|
||||
@ -2135,7 +2169,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tools_info_game_install_location": MessageLookupByLibrary.simpleMessage(
|
||||
"Game installation location: ",
|
||||
),
|
||||
"tools_info_processing_failed": m100,
|
||||
"tools_info_processing_failed": m102,
|
||||
"tools_info_rsi_launcher_location": MessageLookupByLibrary.simpleMessage(
|
||||
"RSI Launcher location:",
|
||||
),
|
||||
@ -2160,15 +2194,15 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Failed to read launcher information!",
|
||||
),
|
||||
"tools_rsi_launcher_enhance_msg_error_get_launcher_info_error_with_args":
|
||||
m101,
|
||||
m103,
|
||||
"tools_rsi_launcher_enhance_msg_error_launcher_notfound":
|
||||
MessageLookupByLibrary.simpleMessage("RSI launcher not found"),
|
||||
"tools_rsi_launcher_enhance_msg_patch_status": m102,
|
||||
"tools_rsi_launcher_enhance_msg_patch_status": m104,
|
||||
"tools_rsi_launcher_enhance_msg_uninstall":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"* To uninstall the enhancement patch, please reinstall the RSI launcher.",
|
||||
),
|
||||
"tools_rsi_launcher_enhance_msg_version": m103,
|
||||
"tools_rsi_launcher_enhance_msg_version": m105,
|
||||
"tools_rsi_launcher_enhance_note_msg": MessageLookupByLibrary.simpleMessage(
|
||||
"RSI Launcher Enhancement is a community feature that unpacks the \"RSI Launcher\" on your computer and adds additional enhancement features. Which features to use is up to you.\n\nCurrently, only multi-language operations are officially permitted by CIG. Launcher download enhancement is an extra feature we consider useful, but violating the CIG user agreement (https://robertsspaceindustries.com/eula) may result in serious consequences such as account banning. Whether to enable it is your decision, and we are not responsible for any consequences (game damage, account banning, etc.) that may arise.\n\nThe modifications to the launcher are open-sourced at: https://github.com/StarCitizenToolBox/RSILauncherEnhance, which you can check if needed.\n\nIf for any reason you need to cancel this enhancement patch, please directly reinstall the official launcher.",
|
||||
),
|
||||
@ -2203,10 +2237,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tools_unp4k_action_deselect_all": MessageLookupByLibrary.simpleMessage(
|
||||
"Deselect All",
|
||||
),
|
||||
"tools_unp4k_action_export_selected": m104,
|
||||
"tools_unp4k_action_extract_failed": m105,
|
||||
"tools_unp4k_action_extract_success": m106,
|
||||
"tools_unp4k_action_extracting": m107,
|
||||
"tools_unp4k_action_export_selected": m106,
|
||||
"tools_unp4k_action_extract_failed": m107,
|
||||
"tools_unp4k_action_extract_success": m108,
|
||||
"tools_unp4k_action_extracting": m109,
|
||||
"tools_unp4k_action_multi_select": MessageLookupByLibrary.simpleMessage(
|
||||
"Multi-Select",
|
||||
),
|
||||
@ -2219,12 +2253,12 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tools_unp4k_extract_cancelled": MessageLookupByLibrary.simpleMessage(
|
||||
"Extraction cancelled",
|
||||
),
|
||||
"tools_unp4k_extract_completed": m108,
|
||||
"tools_unp4k_extract_current_file": m109,
|
||||
"tools_unp4k_extract_completed": m110,
|
||||
"tools_unp4k_extract_current_file": m111,
|
||||
"tools_unp4k_extract_dialog_title": MessageLookupByLibrary.simpleMessage(
|
||||
"Extract Files",
|
||||
),
|
||||
"tools_unp4k_extract_progress": m110,
|
||||
"tools_unp4k_extract_progress": m112,
|
||||
"tools_unp4k_missing_runtime": MessageLookupByLibrary.simpleMessage(
|
||||
"Missing Runtime",
|
||||
),
|
||||
@ -2236,17 +2270,17 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tools_unp4k_msg_init": MessageLookupByLibrary.simpleMessage(
|
||||
"Initializing...",
|
||||
),
|
||||
"tools_unp4k_msg_open_file": m111,
|
||||
"tools_unp4k_msg_read_completed": m112,
|
||||
"tools_unp4k_msg_read_file": m113,
|
||||
"tools_unp4k_msg_open_file": m113,
|
||||
"tools_unp4k_msg_read_completed": m114,
|
||||
"tools_unp4k_msg_read_file": m115,
|
||||
"tools_unp4k_msg_reading": MessageLookupByLibrary.simpleMessage(
|
||||
"Reading P4K file...",
|
||||
),
|
||||
"tools_unp4k_msg_reading2": MessageLookupByLibrary.simpleMessage(
|
||||
"Processing files...",
|
||||
),
|
||||
"tools_unp4k_msg_reading3": m114,
|
||||
"tools_unp4k_msg_unknown_file_type": m115,
|
||||
"tools_unp4k_msg_reading3": m116,
|
||||
"tools_unp4k_msg_unknown_file_type": m117,
|
||||
"tools_unp4k_search_no_result": MessageLookupByLibrary.simpleMessage(
|
||||
"No matching files found",
|
||||
),
|
||||
@ -2271,7 +2305,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tools_unp4k_sort_size_desc": MessageLookupByLibrary.simpleMessage(
|
||||
"Larger First",
|
||||
),
|
||||
"tools_unp4k_title": m116,
|
||||
"tools_unp4k_title": m118,
|
||||
"tools_unp4k_view_file": MessageLookupByLibrary.simpleMessage(
|
||||
"Click file to preview",
|
||||
),
|
||||
|
||||
@ -234,25 +234,25 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
static String m99(v0, v1, v2, v3, v4) =>
|
||||
"システム:${v0}\n\nプロセッサ:${v1}\n\nメモリサイズ:${v2}GB\n\nグラフィックカード情報:\n${v3}\n\nハードドライブ情報:\n${v4}\n\n";
|
||||
|
||||
static String m100(v0) => "処理に失敗しました!:${v0}";
|
||||
static String m102(v0) => "処理に失敗しました!:${v0}";
|
||||
|
||||
static String m101(v0) => "ランチャー情報の読み込みに失敗:${v0}";
|
||||
static String m103(v0) => "ランチャー情報の読み込みに失敗:${v0}";
|
||||
|
||||
static String m102(v0) => "パッチ状態:${v0}";
|
||||
static String m104(v0) => "パッチ状態:${v0}";
|
||||
|
||||
static String m103(v0) => "ランチャー内部バージョン情報:${v0}";
|
||||
static String m105(v0) => "ランチャー内部バージョン情報:${v0}";
|
||||
|
||||
static String m111(v0) => "ファイルを開く:${v0}";
|
||||
static String m113(v0) => "ファイルを開く:${v0}";
|
||||
|
||||
static String m112(v0, v1) => "読み込み完了:${v0}ファイル、所要時間:${v1} ms";
|
||||
static String m114(v0, v1) => "読み込み完了:${v0}ファイル、所要時間:${v1} ms";
|
||||
|
||||
static String m113(v0) => "ファイルを読み込み中:${v0}...";
|
||||
static String m115(v0) => "ファイルを読み込み中:${v0}...";
|
||||
|
||||
static String m114(v0, v1) => "ファイルを処理中(${v0}/${v1})...";
|
||||
static String m116(v0, v1) => "ファイルを処理中(${v0}/${v1})...";
|
||||
|
||||
static String m115(v0) => "不明なファイルタイプ\n${v0}";
|
||||
static String m117(v0) => "不明なファイルタイプ\n${v0}";
|
||||
|
||||
static String m116(v0) => "P4Kビューア -> ${v0}";
|
||||
static String m118(v0) => "P4Kビューア -> ${v0}";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
||||
@ -1907,7 +1907,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tools_info_game_install_location": MessageLookupByLibrary.simpleMessage(
|
||||
"ゲームインストール場所: ",
|
||||
),
|
||||
"tools_info_processing_failed": m100,
|
||||
"tools_info_processing_failed": m102,
|
||||
"tools_info_rsi_launcher_location": MessageLookupByLibrary.simpleMessage(
|
||||
"RSIランチャー場所:",
|
||||
),
|
||||
@ -1929,15 +1929,15 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tools_rsi_launcher_enhance_msg_error_get_launcher_info_error":
|
||||
MessageLookupByLibrary.simpleMessage("ランチャー情報の読み込みに失敗しました!"),
|
||||
"tools_rsi_launcher_enhance_msg_error_get_launcher_info_error_with_args":
|
||||
m101,
|
||||
m103,
|
||||
"tools_rsi_launcher_enhance_msg_error_launcher_notfound":
|
||||
MessageLookupByLibrary.simpleMessage("RSIランチャーが見つかりません"),
|
||||
"tools_rsi_launcher_enhance_msg_patch_status": m102,
|
||||
"tools_rsi_launcher_enhance_msg_patch_status": m104,
|
||||
"tools_rsi_launcher_enhance_msg_uninstall":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"* 機能強化パッチをアンインストールするには、RSIランチャーを上書きインストールしてください。",
|
||||
),
|
||||
"tools_rsi_launcher_enhance_msg_version": m103,
|
||||
"tools_rsi_launcher_enhance_msg_version": m105,
|
||||
"tools_rsi_launcher_enhance_note_msg": MessageLookupByLibrary.simpleMessage(
|
||||
"RSIランチャー機能強化はコミュニティ機能で、お使いのコンピューターで「RSI Launcher」を解凍し、追加の機能強化を加えます。どの機能を使用するかはあなた次第です。\n\n現在、公式(CIG)は多言語操作のみを許可していますが、ランチャーダウンロード機能強化は私たちが有用だと考える追加機能です。cigユーザー契約(https://robertsspaceindustries.com/eula)に違反すると、アカウント禁止などの深刻な結果を招く可能性があり、使用するかどうかはあなた自身の判断によります。私たちは発生する可能性のある結果(ゲームの損傷、アカウント禁止など)に対して責任を負いません。\n\nランチャーの変更内容については、https://github.com/StarCitizenToolBox/RSILauncherEnhanceでオープンソースとして公開しています。必要に応じて確認できます。\n\n何らかの理由でこの機能強化パッチをキャンセルする必要がある場合は、公式ランチャーを直接上書きインストールしてください。",
|
||||
),
|
||||
@ -1971,18 +1971,18 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"この機能を使用するには.NET8ランタイムをインストールする必要があります。下のボタンをクリックしてダウンロードしてインストールし、インストールが成功したらこのページを再度開いて使用を続行してください。",
|
||||
),
|
||||
"tools_unp4k_msg_init": MessageLookupByLibrary.simpleMessage("初期化中..."),
|
||||
"tools_unp4k_msg_open_file": m111,
|
||||
"tools_unp4k_msg_read_completed": m112,
|
||||
"tools_unp4k_msg_read_file": m113,
|
||||
"tools_unp4k_msg_open_file": m113,
|
||||
"tools_unp4k_msg_read_completed": m114,
|
||||
"tools_unp4k_msg_read_file": m115,
|
||||
"tools_unp4k_msg_reading": MessageLookupByLibrary.simpleMessage(
|
||||
"P4Kファイルを読み込み中...",
|
||||
),
|
||||
"tools_unp4k_msg_reading2": MessageLookupByLibrary.simpleMessage(
|
||||
"ファイルを処理中...",
|
||||
),
|
||||
"tools_unp4k_msg_reading3": m114,
|
||||
"tools_unp4k_msg_unknown_file_type": m115,
|
||||
"tools_unp4k_title": m116,
|
||||
"tools_unp4k_msg_reading3": m116,
|
||||
"tools_unp4k_msg_unknown_file_type": m117,
|
||||
"tools_unp4k_title": m118,
|
||||
"tools_unp4k_view_file": MessageLookupByLibrary.simpleMessage(
|
||||
"プレビューするファイルをクリック",
|
||||
),
|
||||
|
||||
@ -248,26 +248,26 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
static String m99(v0, v1, v2, v3, v4) =>
|
||||
"Система: ${v0}\n\nПроцессор: ${v1}\n\nОбъем памяти: ${v2}GB\n\nИнформация о видеокарте:\n${v3}\n\nИнформация о жестком диске:\n${v4}\n\n";
|
||||
|
||||
static String m100(v0) => "Ошибка обработки: ${v0}";
|
||||
static String m102(v0) => "Ошибка обработки: ${v0}";
|
||||
|
||||
static String m101(v0) => "Не удалось прочитать информацию о лаунчере: ${v0}";
|
||||
static String m103(v0) => "Не удалось прочитать информацию о лаунчере: ${v0}";
|
||||
|
||||
static String m102(v0) => "Статус патча: ${v0}";
|
||||
static String m104(v0) => "Статус патча: ${v0}";
|
||||
|
||||
static String m103(v0) => "Внутренняя версия лаунчера: ${v0}";
|
||||
static String m105(v0) => "Внутренняя версия лаунчера: ${v0}";
|
||||
|
||||
static String m111(v0) => "Открытие файла: ${v0}";
|
||||
static String m113(v0) => "Открытие файла: ${v0}";
|
||||
|
||||
static String m112(v0, v1) =>
|
||||
static String m114(v0, v1) =>
|
||||
"Загрузка завершена: ${v0} файлов, время: ${v1} мс";
|
||||
|
||||
static String m113(v0) => "Чтение файла: ${v0}...";
|
||||
static String m115(v0) => "Чтение файла: ${v0}...";
|
||||
|
||||
static String m114(v0, v1) => "Обработка файлов (${v0}/${v1})...";
|
||||
static String m116(v0, v1) => "Обработка файлов (${v0}/${v1})...";
|
||||
|
||||
static String m115(v0) => "Неизвестный тип файла\n${v0}";
|
||||
static String m117(v0) => "Неизвестный тип файла\n${v0}";
|
||||
|
||||
static String m116(v0) => "Просмотрщик P4K -> ${v0}";
|
||||
static String m118(v0) => "Просмотрщик P4K -> ${v0}";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
||||
@ -2148,7 +2148,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tools_info_game_install_location": MessageLookupByLibrary.simpleMessage(
|
||||
"Место установки игры: ",
|
||||
),
|
||||
"tools_info_processing_failed": m100,
|
||||
"tools_info_processing_failed": m102,
|
||||
"tools_info_rsi_launcher_location": MessageLookupByLibrary.simpleMessage(
|
||||
"Местоположение RSI Launcher:",
|
||||
),
|
||||
@ -2177,15 +2177,15 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Не удалось прочитать информацию о лаунчере!",
|
||||
),
|
||||
"tools_rsi_launcher_enhance_msg_error_get_launcher_info_error_with_args":
|
||||
m101,
|
||||
m103,
|
||||
"tools_rsi_launcher_enhance_msg_error_launcher_notfound":
|
||||
MessageLookupByLibrary.simpleMessage("RSI Launcher не найден"),
|
||||
"tools_rsi_launcher_enhance_msg_patch_status": m102,
|
||||
"tools_rsi_launcher_enhance_msg_patch_status": m104,
|
||||
"tools_rsi_launcher_enhance_msg_uninstall":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"* Чтобы удалить патч улучшений, переустановите RSI Launcher.",
|
||||
),
|
||||
"tools_rsi_launcher_enhance_msg_version": m103,
|
||||
"tools_rsi_launcher_enhance_msg_version": m105,
|
||||
"tools_rsi_launcher_enhance_note_msg": MessageLookupByLibrary.simpleMessage(
|
||||
"Улучшения RSI Launcher - это функция сообщества, которая распаковывает \"RSI Launcher\" на вашем компьютере и добавляет дополнительные функции улучшений. Какие функции использовать - решать вам.\n\nВ настоящее время CIG разрешает нам только операции с мультиязычностью. Ускорение загрузки лаунчера - это дополнительная функция, которую мы считаем полезной. Нарушение пользовательского соглашения CIG (https://robertsspaceindustries.com/eula) может привести к серьезным последствиям, включая блокировку аккаунта. Решение об использовании остается за вами, мы не несем ответственности за возможные последствия (повреждение игры, блокировка аккаунта и т.д.).\n\nДля модификаций лаунчера мы открыли исходный код на: https://github.com/StarCitizenToolBox/RSILauncherEnhance, при необходимости вы можете его изучить.\n\nЕсли по какой-либо причине вам нужно отменить этот патч улучшений, просто переустановите официальный лаунчер поверх текущего.",
|
||||
),
|
||||
@ -2224,18 +2224,18 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tools_unp4k_msg_init": MessageLookupByLibrary.simpleMessage(
|
||||
"Инициализация...",
|
||||
),
|
||||
"tools_unp4k_msg_open_file": m111,
|
||||
"tools_unp4k_msg_read_completed": m112,
|
||||
"tools_unp4k_msg_read_file": m113,
|
||||
"tools_unp4k_msg_open_file": m113,
|
||||
"tools_unp4k_msg_read_completed": m114,
|
||||
"tools_unp4k_msg_read_file": m115,
|
||||
"tools_unp4k_msg_reading": MessageLookupByLibrary.simpleMessage(
|
||||
"Чтение файла P4K...",
|
||||
),
|
||||
"tools_unp4k_msg_reading2": MessageLookupByLibrary.simpleMessage(
|
||||
"Обработка файлов...",
|
||||
),
|
||||
"tools_unp4k_msg_reading3": m114,
|
||||
"tools_unp4k_msg_unknown_file_type": m115,
|
||||
"tools_unp4k_title": m116,
|
||||
"tools_unp4k_msg_reading3": m116,
|
||||
"tools_unp4k_msg_unknown_file_type": m117,
|
||||
"tools_unp4k_title": m118,
|
||||
"tools_unp4k_view_file": MessageLookupByLibrary.simpleMessage(
|
||||
"Нажмите на файл для предварительного просмотра",
|
||||
),
|
||||
|
||||
@ -232,39 +232,43 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
static String m99(v0, v1, v2, v3, v4) =>
|
||||
"系统:${v0}\n\n处理器:${v1}\n\n内存大小:${v2}GB\n\n显卡信息:\n${v3}\n\n硬盘信息:\n${v4}\n\n";
|
||||
|
||||
static String m100(v0) => "处理失败!:${v0}";
|
||||
static String m100(v0) => "当前渲染器:${v0}";
|
||||
|
||||
static String m101(v0) => "读取启动器信息失败:${v0}";
|
||||
static String m101(v0) => "保存失败:${v0}";
|
||||
|
||||
static String m102(v0) => "补丁状态:${v0}";
|
||||
static String m102(v0) => "处理失败!:${v0}";
|
||||
|
||||
static String m103(v0) => "启动器内部版本信息:${v0}";
|
||||
static String m103(v0) => "读取启动器信息失败:${v0}";
|
||||
|
||||
static String m104(v0) => "导出选中项 (${v0})";
|
||||
static String m104(v0) => "补丁状态:${v0}";
|
||||
|
||||
static String m105(v0) => "提取失败:${v0}";
|
||||
static String m105(v0) => "启动器内部版本信息:${v0}";
|
||||
|
||||
static String m106(v0) => "提取完成:${v0}";
|
||||
static String m106(v0) => "导出选中项 (${v0})";
|
||||
|
||||
static String m107(v0) => "正在提取:${v0}";
|
||||
static String m107(v0) => "提取失败:${v0}";
|
||||
|
||||
static String m108(v0) => "提取完成,共 ${v0} 个文件";
|
||||
static String m108(v0) => "提取完成:${v0}";
|
||||
|
||||
static String m109(v0) => "当前文件:${v0}";
|
||||
static String m109(v0) => "正在提取:${v0}";
|
||||
|
||||
static String m110(v0, v1) => "正在提取 (${v0}/${v1})";
|
||||
static String m110(v0) => "提取完成,共 ${v0} 个文件";
|
||||
|
||||
static String m111(v0) => "打开文件:${v0}";
|
||||
static String m111(v0) => "当前文件:${v0}";
|
||||
|
||||
static String m112(v0, v1) => "加载完毕:${v0} 个文件,用时:${v1} ms";
|
||||
static String m112(v0, v1) => "正在提取 (${v0}/${v1})";
|
||||
|
||||
static String m113(v0) => "读取文件:${v0} ...";
|
||||
static String m113(v0) => "打开文件:${v0}";
|
||||
|
||||
static String m114(v0, v1) => "正在处理文件 (${v0}/${v1}) ...";
|
||||
static String m114(v0, v1) => "加载完毕:${v0} 个文件,用时:${v1} ms";
|
||||
|
||||
static String m115(v0) => "未知文件类型\n${v0}";
|
||||
static String m115(v0) => "读取文件:${v0} ...";
|
||||
|
||||
static String m116(v0) => "P4K 查看器 -> ${v0}";
|
||||
static String m116(v0, v1) => "正在处理文件 (${v0}/${v1}) ...";
|
||||
|
||||
static String m117(v0) => "未知文件类型\n${v0}";
|
||||
|
||||
static String m118(v0) => "P4K 查看器 -> ${v0}";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
||||
@ -1778,6 +1782,9 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tools_action_rsi_launcher_log_fix": MessageLookupByLibrary.simpleMessage(
|
||||
"RSI Launcher Log 修复",
|
||||
),
|
||||
"tools_action_switch_graphics_renderer":
|
||||
MessageLookupByLibrary.simpleMessage("切换 DirectX/Vulkan 渲染器"),
|
||||
"tools_action_switch_graphics_renderer_info": m100,
|
||||
"tools_action_unp4k": MessageLookupByLibrary.simpleMessage("P4K 查看器"),
|
||||
"tools_action_unp4k_info": MessageLookupByLibrary.simpleMessage(
|
||||
"解包星际公民 p4k 文件",
|
||||
@ -1787,6 +1794,33 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
),
|
||||
"tools_action_write_nvme_registry_patch":
|
||||
MessageLookupByLibrary.simpleMessage("写入 nvme 注册表补丁"),
|
||||
"tools_graphics_renderer_dialog_no_version":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"未找到版本代码,请手动输入(若您不了解此项,请群求其他玩家帮助)",
|
||||
),
|
||||
"tools_graphics_renderer_dialog_renderer":
|
||||
MessageLookupByLibrary.simpleMessage("渲染器"),
|
||||
"tools_graphics_renderer_dialog_save": MessageLookupByLibrary.simpleMessage(
|
||||
"保存",
|
||||
),
|
||||
"tools_graphics_renderer_dialog_save_failed": m101,
|
||||
"tools_graphics_renderer_dialog_save_success":
|
||||
MessageLookupByLibrary.simpleMessage("渲染器设置已保存"),
|
||||
"tools_graphics_renderer_dialog_title":
|
||||
MessageLookupByLibrary.simpleMessage("切换图形渲染器"),
|
||||
"tools_graphics_renderer_dialog_version":
|
||||
MessageLookupByLibrary.simpleMessage("版本代码"),
|
||||
"tools_graphics_renderer_dialog_version_hint":
|
||||
MessageLookupByLibrary.simpleMessage("请选择或输入版本代码"),
|
||||
"tools_graphics_renderer_dx11": MessageLookupByLibrary.simpleMessage(
|
||||
"DirectX 11",
|
||||
),
|
||||
"tools_graphics_renderer_unknown": MessageLookupByLibrary.simpleMessage(
|
||||
"未知",
|
||||
),
|
||||
"tools_graphics_renderer_vulkan": MessageLookupByLibrary.simpleMessage(
|
||||
"Vulkan",
|
||||
),
|
||||
"tools_hosts_action_one_click_acceleration":
|
||||
MessageLookupByLibrary.simpleMessage("一键加速"),
|
||||
"tools_hosts_info_dns_query_and_test": MessageLookupByLibrary.simpleMessage(
|
||||
@ -1814,7 +1848,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tools_info_game_install_location": MessageLookupByLibrary.simpleMessage(
|
||||
"游戏安装位置: ",
|
||||
),
|
||||
"tools_info_processing_failed": m100,
|
||||
"tools_info_processing_failed": m102,
|
||||
"tools_info_rsi_launcher_location": MessageLookupByLibrary.simpleMessage(
|
||||
"RSI启动器位置:",
|
||||
),
|
||||
@ -1834,13 +1868,13 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tools_rsi_launcher_enhance_msg_error_get_launcher_info_error":
|
||||
MessageLookupByLibrary.simpleMessage("读取启动器信息失败!"),
|
||||
"tools_rsi_launcher_enhance_msg_error_get_launcher_info_error_with_args":
|
||||
m101,
|
||||
m103,
|
||||
"tools_rsi_launcher_enhance_msg_error_launcher_notfound":
|
||||
MessageLookupByLibrary.simpleMessage("未找到 RSI 启动器"),
|
||||
"tools_rsi_launcher_enhance_msg_patch_status": m102,
|
||||
"tools_rsi_launcher_enhance_msg_patch_status": m104,
|
||||
"tools_rsi_launcher_enhance_msg_uninstall":
|
||||
MessageLookupByLibrary.simpleMessage("* 如需卸载增强补丁,请覆盖安装 RSI 启动器。"),
|
||||
"tools_rsi_launcher_enhance_msg_version": m103,
|
||||
"tools_rsi_launcher_enhance_msg_version": m105,
|
||||
"tools_rsi_launcher_enhance_note_msg": MessageLookupByLibrary.simpleMessage(
|
||||
"RSI 启动器增强是一项社区功能,它会在您的电脑上解包 \"RSI Launcher\" 并加入额外的增强功能,具体使用哪些功能由您决定。\n\n目前,官方(CIG)仅许可我们进行多语言操作,启动器下载增强是我们认为有用的额外功能,违反cig用户协议(https://robertsspaceindustries.com/eula)可能导致账号被封禁等严重后果,是否启用由您自己决定,我们不对可能产生的后果(游戏损坏,账号封禁等)承担任何责任。\n\n对于启动器的修改内容,我们开源于:https://github.com/StarCitizenToolBox/RSILauncherEnhance,如有需要,您可自行查阅。\n\n如果您因为任何原因需要取消此增强补丁,请直接覆盖安装官方启动器。",
|
||||
),
|
||||
@ -1868,10 +1902,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tools_unp4k_action_deselect_all": MessageLookupByLibrary.simpleMessage(
|
||||
"取消全选",
|
||||
),
|
||||
"tools_unp4k_action_export_selected": m104,
|
||||
"tools_unp4k_action_extract_failed": m105,
|
||||
"tools_unp4k_action_extract_success": m106,
|
||||
"tools_unp4k_action_extracting": m107,
|
||||
"tools_unp4k_action_export_selected": m106,
|
||||
"tools_unp4k_action_extract_failed": m107,
|
||||
"tools_unp4k_action_extract_success": m108,
|
||||
"tools_unp4k_action_extracting": m109,
|
||||
"tools_unp4k_action_multi_select": MessageLookupByLibrary.simpleMessage(
|
||||
"多选",
|
||||
),
|
||||
@ -1882,12 +1916,12 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tools_unp4k_extract_cancelled": MessageLookupByLibrary.simpleMessage(
|
||||
"提取已取消",
|
||||
),
|
||||
"tools_unp4k_extract_completed": m108,
|
||||
"tools_unp4k_extract_current_file": m109,
|
||||
"tools_unp4k_extract_completed": m110,
|
||||
"tools_unp4k_extract_current_file": m111,
|
||||
"tools_unp4k_extract_dialog_title": MessageLookupByLibrary.simpleMessage(
|
||||
"提取文件",
|
||||
),
|
||||
"tools_unp4k_extract_progress": m110,
|
||||
"tools_unp4k_extract_progress": m112,
|
||||
"tools_unp4k_missing_runtime": MessageLookupByLibrary.simpleMessage(
|
||||
"缺少运行库",
|
||||
),
|
||||
@ -1897,17 +1931,17 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"使用此功能需安装 .NET8 运行库,请点击下方按钮下载安装,安装成功后重新打开此页面即可继续使用。",
|
||||
),
|
||||
"tools_unp4k_msg_init": MessageLookupByLibrary.simpleMessage("初始化中..."),
|
||||
"tools_unp4k_msg_open_file": m111,
|
||||
"tools_unp4k_msg_read_completed": m112,
|
||||
"tools_unp4k_msg_read_file": m113,
|
||||
"tools_unp4k_msg_open_file": m113,
|
||||
"tools_unp4k_msg_read_completed": m114,
|
||||
"tools_unp4k_msg_read_file": m115,
|
||||
"tools_unp4k_msg_reading": MessageLookupByLibrary.simpleMessage(
|
||||
"正在读取P4K 文件 ...",
|
||||
),
|
||||
"tools_unp4k_msg_reading2": MessageLookupByLibrary.simpleMessage(
|
||||
"正在处理文件 ...",
|
||||
),
|
||||
"tools_unp4k_msg_reading3": m114,
|
||||
"tools_unp4k_msg_unknown_file_type": m115,
|
||||
"tools_unp4k_msg_reading3": m116,
|
||||
"tools_unp4k_msg_unknown_file_type": m117,
|
||||
"tools_unp4k_search_no_result": MessageLookupByLibrary.simpleMessage(
|
||||
"未找到匹配文件",
|
||||
),
|
||||
@ -1920,7 +1954,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tools_unp4k_sort_default": MessageLookupByLibrary.simpleMessage("默认排序"),
|
||||
"tools_unp4k_sort_size_asc": MessageLookupByLibrary.simpleMessage("小文件优先"),
|
||||
"tools_unp4k_sort_size_desc": MessageLookupByLibrary.simpleMessage("大文件优先"),
|
||||
"tools_unp4k_title": m116,
|
||||
"tools_unp4k_title": m118,
|
||||
"tools_unp4k_view_file": MessageLookupByLibrary.simpleMessage("单击文件以预览"),
|
||||
"tools_vehicle_sorting_info": MessageLookupByLibrary.simpleMessage(
|
||||
"将左侧载具拖动到右侧列表中,这将会为载具名称增加 001、002 .. 等前缀,方便您在游戏内 UI 快速定位载具。在右侧列表上下拖动可以调整载具的顺序。",
|
||||
|
||||
@ -228,25 +228,25 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
static String m99(v0, v1, v2, v3, v4) =>
|
||||
"系統:${v0}\n\n處理器:${v1}\n\n記憶體:${v2}GB\n\n顯示卡:\n${v3}\n\n硬碟:\n${v4}\n\n";
|
||||
|
||||
static String m100(v0) => "處理失敗!:${v0}";
|
||||
static String m102(v0) => "處理失敗!:${v0}";
|
||||
|
||||
static String m101(v0) => "讀取啟動器資訊失敗:${v0}";
|
||||
static String m103(v0) => "讀取啟動器資訊失敗:${v0}";
|
||||
|
||||
static String m102(v0) => "補丁狀態:${v0}";
|
||||
static String m104(v0) => "補丁狀態:${v0}";
|
||||
|
||||
static String m103(v0) => "啟動器內部版本資訊:${v0}";
|
||||
static String m105(v0) => "啟動器內部版本資訊:${v0}";
|
||||
|
||||
static String m111(v0) => "打開文件:${v0}";
|
||||
static String m113(v0) => "打開文件:${v0}";
|
||||
|
||||
static String m112(v0, v1) => "載入完畢:${v0} 個文件,用時:${v1} ms";
|
||||
static String m114(v0, v1) => "載入完畢:${v0} 個文件,用時:${v1} ms";
|
||||
|
||||
static String m113(v0) => "讀取文件:${v0} ...";
|
||||
static String m115(v0) => "讀取文件:${v0} ...";
|
||||
|
||||
static String m114(v0, v1) => "正在處理文件 (${v0}/${v1}) ...";
|
||||
static String m116(v0, v1) => "正在處理文件 (${v0}/${v1}) ...";
|
||||
|
||||
static String m115(v0) => "未知文件類型\n${v0}";
|
||||
static String m117(v0) => "未知文件類型\n${v0}";
|
||||
|
||||
static String m116(v0) => "P4K 查看器 -> ${v0}";
|
||||
static String m118(v0) => "P4K 查看器 -> ${v0}";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
||||
@ -1791,7 +1791,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tools_info_game_install_location": MessageLookupByLibrary.simpleMessage(
|
||||
"遊戲安裝位置: ",
|
||||
),
|
||||
"tools_info_processing_failed": m100,
|
||||
"tools_info_processing_failed": m102,
|
||||
"tools_info_rsi_launcher_location": MessageLookupByLibrary.simpleMessage(
|
||||
"RSI啟動器位置:",
|
||||
),
|
||||
@ -1811,13 +1811,13 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tools_rsi_launcher_enhance_msg_error_get_launcher_info_error":
|
||||
MessageLookupByLibrary.simpleMessage("讀取啟動器資訊失敗!"),
|
||||
"tools_rsi_launcher_enhance_msg_error_get_launcher_info_error_with_args":
|
||||
m101,
|
||||
m103,
|
||||
"tools_rsi_launcher_enhance_msg_error_launcher_notfound":
|
||||
MessageLookupByLibrary.simpleMessage("未找到 RSI 啟動器"),
|
||||
"tools_rsi_launcher_enhance_msg_patch_status": m102,
|
||||
"tools_rsi_launcher_enhance_msg_patch_status": m104,
|
||||
"tools_rsi_launcher_enhance_msg_uninstall":
|
||||
MessageLookupByLibrary.simpleMessage("* 如需移除增強補丁,請覆蓋安裝 RSI 啟動器。"),
|
||||
"tools_rsi_launcher_enhance_msg_version": m103,
|
||||
"tools_rsi_launcher_enhance_msg_version": m105,
|
||||
"tools_rsi_launcher_enhance_note_msg": MessageLookupByLibrary.simpleMessage(
|
||||
"RSI 啟動器增強是一項社群功能,它會在您的電腦上解包 \"RSI Launcher\" 並加入額外的增強功能,具體使用哪些功能由您決定。\n\n目前,官方(CIG)僅許可我們進行多語言操作,啟動器下載增強是我們認為有用的額外功能,違反cig使用者協議(https://robertsspaceindustries.com/eula)可能導致帳號被封禁等嚴重後果,是否啟用由您自己決定,我們不對可能產生的後果(遊戲損壞,帳號封禁等)承擔任何責任。\n\n對於啟動器的修改內容,我們開源於:https://github.com/StarCitizenToolBox/RSILauncherEnhance,如有需要,您可自行查閱。\n\n如果您因為任何原因需要取消此增強補丁,請直接覆蓋安裝官方啟動器。",
|
||||
),
|
||||
@ -1849,18 +1849,18 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"使用此功能需安裝 .NET8 運行庫,請點擊下方按鈕下載安裝,安裝成功後重新打開此頁面即可繼續使用。",
|
||||
),
|
||||
"tools_unp4k_msg_init": MessageLookupByLibrary.simpleMessage("初始化中..."),
|
||||
"tools_unp4k_msg_open_file": m111,
|
||||
"tools_unp4k_msg_read_completed": m112,
|
||||
"tools_unp4k_msg_read_file": m113,
|
||||
"tools_unp4k_msg_open_file": m113,
|
||||
"tools_unp4k_msg_read_completed": m114,
|
||||
"tools_unp4k_msg_read_file": m115,
|
||||
"tools_unp4k_msg_reading": MessageLookupByLibrary.simpleMessage(
|
||||
"正在讀取P4K 文件 ...",
|
||||
),
|
||||
"tools_unp4k_msg_reading2": MessageLookupByLibrary.simpleMessage(
|
||||
"正在處理文件 ...",
|
||||
),
|
||||
"tools_unp4k_msg_reading3": m114,
|
||||
"tools_unp4k_msg_unknown_file_type": m115,
|
||||
"tools_unp4k_title": m116,
|
||||
"tools_unp4k_msg_reading3": m116,
|
||||
"tools_unp4k_msg_unknown_file_type": m117,
|
||||
"tools_unp4k_title": m118,
|
||||
"tools_unp4k_view_file": MessageLookupByLibrary.simpleMessage("單擊文件以預覽"),
|
||||
"tools_vehicle_sorting_info": MessageLookupByLibrary.simpleMessage(
|
||||
"將左側載具拖動到右側列表中,這將會為載具名稱增加 001、002 .. 等前綴,方便您在遊戲內 UI 快速定位載具。在右側列表上下拖動可以調整載具的順序。",
|
||||
|
||||
@ -8122,6 +8122,136 @@ class S {
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Switch DirectX/Vulkan Renderer`
|
||||
String get tools_action_switch_graphics_renderer {
|
||||
return Intl.message(
|
||||
'Switch DirectX/Vulkan Renderer',
|
||||
name: 'tools_action_switch_graphics_renderer',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Current Renderer: {v0}`
|
||||
String tools_action_switch_graphics_renderer_info(Object v0) {
|
||||
return Intl.message(
|
||||
'Current Renderer: $v0',
|
||||
name: 'tools_action_switch_graphics_renderer_info',
|
||||
desc: '',
|
||||
args: [v0],
|
||||
);
|
||||
}
|
||||
|
||||
/// `DirectX 11`
|
||||
String get tools_graphics_renderer_dx11 {
|
||||
return Intl.message(
|
||||
'DirectX 11',
|
||||
name: 'tools_graphics_renderer_dx11',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Vulkan`
|
||||
String get tools_graphics_renderer_vulkan {
|
||||
return Intl.message(
|
||||
'Vulkan',
|
||||
name: 'tools_graphics_renderer_vulkan',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Unknown`
|
||||
String get tools_graphics_renderer_unknown {
|
||||
return Intl.message(
|
||||
'Unknown',
|
||||
name: 'tools_graphics_renderer_unknown',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Switch Graphics Renderer`
|
||||
String get tools_graphics_renderer_dialog_title {
|
||||
return Intl.message(
|
||||
'Switch Graphics Renderer',
|
||||
name: 'tools_graphics_renderer_dialog_title',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Version Code`
|
||||
String get tools_graphics_renderer_dialog_version {
|
||||
return Intl.message(
|
||||
'Version Code',
|
||||
name: 'tools_graphics_renderer_dialog_version',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Select or enter version code`
|
||||
String get tools_graphics_renderer_dialog_version_hint {
|
||||
return Intl.message(
|
||||
'Select or enter version code',
|
||||
name: 'tools_graphics_renderer_dialog_version_hint',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Renderer`
|
||||
String get tools_graphics_renderer_dialog_renderer {
|
||||
return Intl.message(
|
||||
'Renderer',
|
||||
name: 'tools_graphics_renderer_dialog_renderer',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Save`
|
||||
String get tools_graphics_renderer_dialog_save {
|
||||
return Intl.message(
|
||||
'Save',
|
||||
name: 'tools_graphics_renderer_dialog_save',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Renderer settings saved`
|
||||
String get tools_graphics_renderer_dialog_save_success {
|
||||
return Intl.message(
|
||||
'Renderer settings saved',
|
||||
name: 'tools_graphics_renderer_dialog_save_success',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Save failed: {v0}`
|
||||
String tools_graphics_renderer_dialog_save_failed(Object v0) {
|
||||
return Intl.message(
|
||||
'Save failed: $v0',
|
||||
name: 'tools_graphics_renderer_dialog_save_failed',
|
||||
desc: '',
|
||||
args: [v0],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Version code not found. Please enter it manually. (If you are unfamiliar with this, please ask other players for help.)`
|
||||
String get tools_graphics_renderer_dialog_no_version {
|
||||
return Intl.message(
|
||||
'Version code not found. Please enter it manually. (If you are unfamiliar with this, please ask other players for help.)',
|
||||
name: 'tools_graphics_renderer_dialog_no_version',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class AppLocalizationDelegate extends LocalizationsDelegate<S> {
|
||||
|
||||
@ -1446,5 +1446,18 @@
|
||||
"tools_unp4k_action_export_selected": "Export Selected ({v0})",
|
||||
"tools_unp4k_action_cancel_multi_select": "Cancel Multi-Select",
|
||||
"tools_unp4k_action_select_all": "Select All",
|
||||
"tools_unp4k_action_deselect_all": "Deselect All"
|
||||
"tools_unp4k_action_deselect_all": "Deselect All",
|
||||
"tools_action_switch_graphics_renderer": "Switch DirectX/Vulkan Renderer",
|
||||
"tools_action_switch_graphics_renderer_info": "Current Renderer: {v0}",
|
||||
"tools_graphics_renderer_dx11": "DirectX 11",
|
||||
"tools_graphics_renderer_vulkan": "Vulkan",
|
||||
"tools_graphics_renderer_unknown": "Unknown",
|
||||
"tools_graphics_renderer_dialog_title": "Switch Graphics Renderer",
|
||||
"tools_graphics_renderer_dialog_version": "Version Code",
|
||||
"tools_graphics_renderer_dialog_version_hint": "Select or enter version code",
|
||||
"tools_graphics_renderer_dialog_renderer": "Renderer",
|
||||
"tools_graphics_renderer_dialog_save": "Save",
|
||||
"tools_graphics_renderer_dialog_save_success": "Renderer settings saved",
|
||||
"tools_graphics_renderer_dialog_save_failed": "Save failed: {v0}",
|
||||
"tools_graphics_renderer_dialog_no_version": "Version code not found. Please enter it manually. (If you are unfamiliar with this, please ask other players for help.)"
|
||||
}
|
||||
@ -1161,5 +1161,18 @@
|
||||
"tools_unp4k_action_export_selected": "导出选中项 ({v0})",
|
||||
"tools_unp4k_action_cancel_multi_select": "取消多选",
|
||||
"tools_unp4k_action_select_all": "全选",
|
||||
"tools_unp4k_action_deselect_all": "取消全选"
|
||||
"tools_unp4k_action_deselect_all": "取消全选",
|
||||
"tools_action_switch_graphics_renderer": "切换 DirectX/Vulkan 渲染器",
|
||||
"tools_action_switch_graphics_renderer_info": "当前渲染器:{v0}",
|
||||
"tools_graphics_renderer_dx11": "DirectX 11",
|
||||
"tools_graphics_renderer_vulkan": "Vulkan",
|
||||
"tools_graphics_renderer_unknown": "未知",
|
||||
"tools_graphics_renderer_dialog_title": "切换图形渲染器",
|
||||
"tools_graphics_renderer_dialog_version": "版本代码",
|
||||
"tools_graphics_renderer_dialog_version_hint": "请选择或输入版本代码",
|
||||
"tools_graphics_renderer_dialog_renderer": "渲染器",
|
||||
"tools_graphics_renderer_dialog_save": "保存",
|
||||
"tools_graphics_renderer_dialog_save_success": "渲染器设置已保存",
|
||||
"tools_graphics_renderer_dialog_save_failed": "保存失败:{v0}",
|
||||
"tools_graphics_renderer_dialog_no_version": "未找到版本代码,请手动输入(若您不了解此项,请群求其他玩家帮助)"
|
||||
}
|
||||
@ -68,7 +68,7 @@ class RsiLauncherEnhanceDialogUI extends HookConsumerWidget {
|
||||
void doInstall() async {
|
||||
if (!context.mounted) return;
|
||||
workingText.value = S.current.tools_rsi_launcher_enhance_working_msg1;
|
||||
if ((await SystemHelper.getPID("\"RSI Launcher\"")).isNotEmpty) {
|
||||
if ((await SystemHelper.getPID("RSI Launcher")).isNotEmpty) {
|
||||
if (!context.mounted) return;
|
||||
showToast(context, S.current.tools_action_info_rsi_launcher_running_warning,
|
||||
constraints: BoxConstraints(maxWidth: MediaQuery.of(context).size.width * .35));
|
||||
|
||||
@ -127,6 +127,9 @@ class ToolsUIModel extends _$ToolsUIModel {
|
||||
),
|
||||
]);
|
||||
|
||||
state = state.copyWith(items: items);
|
||||
if (!context.mounted) return;
|
||||
items.add(await _addGraphicsRendererCard(context));
|
||||
state = state.copyWith(items: items);
|
||||
if (!context.mounted) return;
|
||||
items.add(await _addShaderCard(context));
|
||||
@ -228,6 +231,131 @@ class ToolsUIModel extends _$ToolsUIModel {
|
||||
);
|
||||
}
|
||||
|
||||
/// 获取所有可用的版本号
|
||||
Future<List<String>> _getAvailableGraphicsVersions() async {
|
||||
final gameShaderCachePath = await SCLoggerHelper.getShaderCachePath();
|
||||
if (gameShaderCachePath == null) return [];
|
||||
|
||||
final dir = Directory(gameShaderCachePath);
|
||||
if (!await dir.exists()) return [];
|
||||
|
||||
final versions = <String>[];
|
||||
await for (var entity in dir.list()) {
|
||||
if (entity is Directory) {
|
||||
final name = entity.path.split(Platform.pathSeparator).last;
|
||||
if (name.startsWith("starcitizen_")) {
|
||||
// 提取版本号,例如 starcitizen_1234567 -> 1234567
|
||||
final version = name.replaceFirst("starcitizen_", "");
|
||||
if (version.isNotEmpty) {
|
||||
versions.add(version);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 按版本号降序排序(最新的在前面)
|
||||
versions.sort((a, b) => b.compareTo(a));
|
||||
return versions;
|
||||
}
|
||||
|
||||
/// 获取当前渲染器设置
|
||||
Future<(int, String?)> _getCurrentGraphicsRenderer() async {
|
||||
final gameShaderCachePath = await SCLoggerHelper.getShaderCachePath();
|
||||
if (gameShaderCachePath == null) return (-1, null);
|
||||
|
||||
final versions = await _getAvailableGraphicsVersions();
|
||||
if (versions.isEmpty) return (-1, null);
|
||||
|
||||
// 使用最新版本
|
||||
final latestVersion = versions.first;
|
||||
final settingsPath = "$gameShaderCachePath\\starcitizen_$latestVersion\\GraphicsSettings\\GraphicsSettings.json";
|
||||
|
||||
final file = File(settingsPath);
|
||||
if (!await file.exists()) return (-1, latestVersion);
|
||||
|
||||
try {
|
||||
final content = await file.readAsString();
|
||||
final json = jsonDecode(content) as Map<String, dynamic>;
|
||||
final graphicsSettings = json["GraphicsSettings"] as Map<String, dynamic>?;
|
||||
final renderer = graphicsSettings?["GraphicsRenderer"] as int? ?? 0;
|
||||
return (renderer, latestVersion);
|
||||
} catch (e) {
|
||||
dPrint("_getCurrentGraphicsRenderer error: $e");
|
||||
return (-1, latestVersion);
|
||||
}
|
||||
}
|
||||
|
||||
/// 保存渲染器设置
|
||||
Future<void> _saveGraphicsRenderer(String version, int renderer) async {
|
||||
final gameShaderCachePath = await SCLoggerHelper.getShaderCachePath();
|
||||
if (gameShaderCachePath == null) throw "Shader cache path not found";
|
||||
|
||||
final settingsDir = "$gameShaderCachePath\\starcitizen_$version\\GraphicsSettings";
|
||||
final settingsPath = "$settingsDir\\GraphicsSettings.json";
|
||||
|
||||
// 确保目录存在
|
||||
await Directory(settingsDir).create(recursive: true);
|
||||
|
||||
final json = {
|
||||
"GraphicsSettings": {"SettingsVersion": 1, "GraphicsRenderer": renderer},
|
||||
};
|
||||
|
||||
await File(settingsPath).writeAsString(const JsonEncoder.withIndent(' ').convert(json));
|
||||
}
|
||||
|
||||
/// 获取渲染器名称
|
||||
String _getRendererName(int renderer) {
|
||||
switch (renderer) {
|
||||
case 0:
|
||||
return S.current.tools_graphics_renderer_dx11;
|
||||
case 1:
|
||||
return S.current.tools_graphics_renderer_vulkan;
|
||||
default:
|
||||
return S.current.tools_graphics_renderer_unknown;
|
||||
}
|
||||
}
|
||||
|
||||
Future<ToolsItemData> _addGraphicsRendererCard(BuildContext context) async {
|
||||
final (renderer, _) = await _getCurrentGraphicsRenderer();
|
||||
final rendererName = _getRendererName(renderer);
|
||||
|
||||
return ToolsItemData(
|
||||
"graphics_renderer",
|
||||
S.current.tools_action_switch_graphics_renderer,
|
||||
S.current.tools_action_switch_graphics_renderer_info(rendererName),
|
||||
const Icon(FluentIcons.video, size: 24),
|
||||
onTap: () => _showGraphicsRendererDialog(context),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _showGraphicsRendererDialog(BuildContext context) async {
|
||||
final versions = await _getAvailableGraphicsVersions();
|
||||
final (currentRenderer, latestVersion) = await _getCurrentGraphicsRenderer();
|
||||
|
||||
if (!context.mounted) return;
|
||||
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (dialogContext) => _GraphicsRendererDialog(
|
||||
versions: versions,
|
||||
initialVersion: latestVersion ?? "",
|
||||
initialRenderer: currentRenderer >= 0 ? currentRenderer : 0,
|
||||
onSave: (version, renderer) async {
|
||||
try {
|
||||
await _saveGraphicsRenderer(version, renderer);
|
||||
if (!context.mounted) return;
|
||||
showToast(context, S.current.tools_graphics_renderer_dialog_save_success);
|
||||
loadToolsCard(context, skipPathScan: true);
|
||||
Navigator.of(dialogContext).pop();
|
||||
} catch (e) {
|
||||
if (!context.mounted) return;
|
||||
showToast(context, S.current.tools_graphics_renderer_dialog_save_failed(e));
|
||||
}
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Future<ToolsItemData> _addPhotographyCard(BuildContext context) async {
|
||||
// 获取配置文件状态
|
||||
final isEnable = await _checkPhotographyStatus(context);
|
||||
@ -390,7 +518,13 @@ class ToolsUIModel extends _$ToolsUIModel {
|
||||
final l = await Directory(gameShaderCachePath!).list(recursive: false).toList();
|
||||
for (var value in l) {
|
||||
if (value is Directory) {
|
||||
if (!value.absolute.path.contains("Crashes")) {
|
||||
final dirName = value.path.split(Platform.pathSeparator).last;
|
||||
if (dirName == "Crashes") continue;
|
||||
|
||||
// 对于 starcitizen_* 目录,手动遍历删除,保留 GraphicsSettings 文件夹
|
||||
if (dirName.startsWith("starcitizen_")) {
|
||||
await _cleanShaderCacheDirectory(value);
|
||||
} else {
|
||||
await value.delete(recursive: true);
|
||||
}
|
||||
}
|
||||
@ -400,11 +534,31 @@ class ToolsUIModel extends _$ToolsUIModel {
|
||||
state = state.copyWith(working: false);
|
||||
}
|
||||
|
||||
/// 清理着色器缓存目录,保留 GraphicsSettings 文件夹
|
||||
Future<void> _cleanShaderCacheDirectory(Directory dir) async {
|
||||
try {
|
||||
final contents = await dir.list(recursive: false).toList();
|
||||
for (var entity in contents) {
|
||||
final name = entity.path.split(Platform.pathSeparator).last;
|
||||
// 保留 GraphicsSettings 文件夹
|
||||
if (name == "GraphicsSettings") continue;
|
||||
|
||||
if (entity is Directory) {
|
||||
await entity.delete(recursive: true);
|
||||
} else if (entity is File) {
|
||||
await entity.delete();
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
dPrint("_cleanShaderCacheDirectory error: $e");
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _downloadP4k(BuildContext context, String torrentUrl) async {
|
||||
String savePath = state.scInstalledPath;
|
||||
String fileName = "Data.p4k";
|
||||
|
||||
if ((await SystemHelper.getPID("\"RSI Launcher\"")).isNotEmpty) {
|
||||
if ((await SystemHelper.getPID("RSI Launcher")).isNotEmpty) {
|
||||
if (!context.mounted) return;
|
||||
showToast(
|
||||
context,
|
||||
@ -553,7 +707,7 @@ class ToolsUIModel extends _$ToolsUIModel {
|
||||
}
|
||||
|
||||
static Future<void> rsiEnhance(BuildContext context, {bool showNotGameInstallMsg = false}) async {
|
||||
if ((await SystemHelper.getPID("\"RSI Launcher\"")).isNotEmpty) {
|
||||
if ((await SystemHelper.getPID("RSI Launcher")).isNotEmpty) {
|
||||
if (!context.mounted) return;
|
||||
showToast(
|
||||
context,
|
||||
@ -582,3 +736,120 @@ class ToolsUIModel extends _$ToolsUIModel {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// 图形渲染器切换对话框
|
||||
class _GraphicsRendererDialog extends StatefulWidget {
|
||||
final List<String> versions;
|
||||
final String initialVersion;
|
||||
final int initialRenderer;
|
||||
final Future<void> Function(String version, int renderer) onSave;
|
||||
|
||||
const _GraphicsRendererDialog({
|
||||
required this.versions,
|
||||
required this.initialVersion,
|
||||
required this.initialRenderer,
|
||||
required this.onSave,
|
||||
});
|
||||
|
||||
@override
|
||||
State<_GraphicsRendererDialog> createState() => _GraphicsRendererDialogState();
|
||||
}
|
||||
|
||||
class _GraphicsRendererDialogState extends State<_GraphicsRendererDialog> {
|
||||
late TextEditingController _versionController;
|
||||
late int _selectedRenderer;
|
||||
bool _isSaving = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_versionController = TextEditingController(text: widget.initialVersion);
|
||||
_selectedRenderer = widget.initialRenderer;
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_versionController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ContentDialog(
|
||||
title: Text(S.current.tools_graphics_renderer_dialog_title),
|
||||
constraints: const BoxConstraints(maxWidth: 460),
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
if (widget.versions.isEmpty)
|
||||
Padding(
|
||||
padding: EdgeInsets.only(bottom: 12),
|
||||
child: InfoBar(
|
||||
title: Text(S.current.tools_graphics_renderer_dialog_no_version),
|
||||
severity: InfoBarSeverity.warning,
|
||||
),
|
||||
),
|
||||
// 版本选择
|
||||
Text(S.current.tools_graphics_renderer_dialog_version),
|
||||
const SizedBox(height: 8),
|
||||
AutoSuggestBox<String>(
|
||||
controller: _versionController,
|
||||
placeholder: S.current.tools_graphics_renderer_dialog_version_hint,
|
||||
items: widget.versions.map((v) => AutoSuggestBoxItem<String>(value: v, label: v)).toList(),
|
||||
onSelected: (item) {
|
||||
setState(() {
|
||||
_versionController.text = item.value ?? "";
|
||||
});
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
// 渲染器选择
|
||||
Text(S.current.tools_graphics_renderer_dialog_renderer),
|
||||
const SizedBox(height: 8),
|
||||
ComboBox<int>(
|
||||
value: _selectedRenderer,
|
||||
items: [
|
||||
ComboBoxItem(value: 0, child: Text(S.current.tools_graphics_renderer_dx11)),
|
||||
ComboBoxItem(value: 1, child: Text(S.current.tools_graphics_renderer_vulkan)),
|
||||
],
|
||||
onChanged: (value) {
|
||||
if (value != null) {
|
||||
setState(() {
|
||||
_selectedRenderer = value;
|
||||
});
|
||||
}
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
actions: [
|
||||
Button(onPressed: _isSaving ? null : () => Navigator.of(context).pop(), child: Text(S.current.action_close)),
|
||||
FilledButton(
|
||||
onPressed: _isSaving || _versionController.text.isEmpty
|
||||
? null
|
||||
: () async {
|
||||
setState(() {
|
||||
_isSaving = true;
|
||||
});
|
||||
try {
|
||||
await widget.onSave(_versionController.text, _selectedRenderer);
|
||||
if (context.mounted) {
|
||||
Navigator.of(context).pop();
|
||||
}
|
||||
} finally {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_isSaving = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
child: _isSaving
|
||||
? const SizedBox(width: 16, height: 16, child: ProgressRing(strokeWidth: 2))
|
||||
: Text(S.current.tools_graphics_renderer_dialog_save),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user