perf: 优化代码

This commit is contained in:
uye
2023-10-09 15:44:24 +08:00
parent db3bd91117
commit fc30bc2bc1
14 changed files with 255 additions and 259 deletions

View File

@@ -131,7 +131,8 @@ namespace MaaWpfGui.Configuration
};
}
private static Root Root => _rootConfig.Value;
// ReSharper disable once MemberCanBePrivate.Global
public static Root Root => _rootConfig.Value;
public static readonly SpecificConfig CurrentConfig = Root.CurrentConfig;

View File

@@ -206,6 +206,10 @@ namespace MaaWpfGui.Helper
config.mainIcon = iconInfo.hIcon.DangerousGetHandle();
config.dwFlags |= ComCtl32.TASKDIALOG_FLAGS.TDF_USE_HICON_MAIN;
break;
case MessageBoxImage.None:
break;
default:
throw new ArgumentOutOfRangeException(nameof(icon), icon, null);
}
bool hasOk = false, hasCancel = false, hasYes = false, hasNo = false;

View File

@@ -98,12 +98,9 @@ namespace MaaWpfGui.Helper
public static string Color2HexString(Color color, bool keepAlpha = false)
{
if (keepAlpha)
{
return $"#{color.A:X2}{color.R:X2}{color.G:X2}{color.B:X2}";
}
return $"#FF{color.R:X2}{color.G:X2}{color.B:X2}";
return keepAlpha
? $"#{color.A:X2}{color.R:X2}{color.G:X2}{color.B:X2}"
: $"#FF{color.R:X2}{color.G:X2}{color.B:X2}";
}
// ReSharper disable once UnusedMember.Global

View File

@@ -64,27 +64,29 @@ namespace MaaWpfGui.Helper
/// <returns>The toast system is initialized.</returns>
public bool CheckToastSystem()
{
if (!_systemToastCheckInited)
if (_systemToastCheckInited)
{
_systemToastCheckInited = true;
// like "Microsoft Windows 10.0.10240 "
var osDesc = RuntimeInformation.OSDescription;
Regex versionRegex = new Regex(@"\d+\.\d+\.\d+");
var matched = versionRegex.Match(osDesc);
if (!matched.Success)
{
_systemToastChecked = false;
return _systemToastChecked;
}
var osVersion = matched.Groups[0].Value;
bool verParsed = SemVersion.TryParse(osVersion, SemVersionStyles.Strict, out var curVersionObj);
var minimumVersionObj = new SemVersion(10, 0, 10240);
_systemToastChecked = verParsed && curVersionObj.CompareSortOrderTo(minimumVersionObj) >= 0;
return _systemToastChecked;
}
_systemToastCheckInited = true;
// like "Microsoft Windows 10.0.10240 "
var osDesc = RuntimeInformation.OSDescription;
Regex versionRegex = new Regex(@"\d+\.\d+\.\d+");
var matched = versionRegex.Match(osDesc);
if (!matched.Success)
{
_systemToastChecked = false;
return _systemToastChecked;
}
var osVersion = matched.Groups[0].Value;
bool verParsed = SemVersion.TryParse(osVersion, SemVersionStyles.Strict, out var curVersionObj);
var minimumVersionObj = new SemVersion(10, 0, 10240);
_systemToastChecked = verParsed && curVersionObj.CompareSortOrderTo(minimumVersionObj) >= 0;
return _systemToastChecked;
}
@@ -543,7 +545,6 @@ namespace MaaWpfGui.Helper
/// <summary>
/// 闪烁信息
/// </summary>
// ReSharper disable once InconsistentNaming
[SuppressMessage("ReSharper", "InconsistentNaming")]
[SuppressMessage("ReSharper", "NotAccessedField.Local")]
private struct FLASHWINFO

View File

@@ -11,6 +11,7 @@
// but WITHOUT ANY WARRANTY
// </copyright>
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
@@ -41,29 +42,29 @@ namespace MaaWpfGui.Helper
{
"BlueStacks", new List<string>
{
".\\HD-Adb.exe",
".\\Engine\\ProgramFiles\\HD-Adb.exe",
@".\HD-Adb.exe",
@".\Engine\ProgramFiles\HD-Adb.exe",
}
},
{ "LDPlayer", new List<string> { ".\\adb.exe" } },
{ "Nox", new List<string> { ".\\nox_adb.exe" } },
{ "LDPlayer", new List<string> {@".\adb.exe"} },
{ "Nox", new List<string> {@".\nox_adb.exe"} },
{
"MuMuEmulator", new List<string>
{
"..\\vmonitor\\bin\\adb_server.exe",
"..\\..\\MuMu\\emulator\\nemu\\vmonitor\\bin\\adb_server.exe",
".\\adb.exe",
@"..\vmonitor\bin\adb_server.exe",
@"..\..\MuMu\emulator\nemu\vmonitor\bin\adb_server.exe",
@".\adb.exe",
}
},
{
"MuMuEmulator12", new List<string>
{
"..\\vmonitor\\bin\\adb_server.exe",
"..\\..\\MuMu\\emulator\\nemu\\vmonitor\\bin\\adb_server.exe",
".\\adb.exe",
@"..\vmonitor\bin\adb_server.exe",
@"..\..\MuMu\emulator\nemu\vmonitor\bin\adb_server.exe",
@".\adb.exe",
}
},
{ "XYAZ", new List<string> { ".\\adb.exe" } },
{ "XYAZ", new List<string> { @".\adb.exe" } },
};
private readonly Dictionary<string, string> _adbAbsolutePathDict = new Dictionary<string, string>();
@@ -104,12 +105,9 @@ namespace MaaWpfGui.Helper
/// <returns>The ADB path of the emulator.</returns>
public string GetAdbPathByEmulatorName(string emulatorName)
{
if (_adbAbsolutePathDict.Keys.Contains(emulatorName))
{
return _adbAbsolutePathDict[emulatorName];
}
return null;
return _adbAbsolutePathDict.Keys.Contains(emulatorName)
? _adbAbsolutePathDict[emulatorName]
: null;
}
/// <summary>
@@ -119,26 +117,27 @@ namespace MaaWpfGui.Helper
/// <returns>The list of ADB addresses.</returns>
public List<string> GetAdbAddresses(string adbPath)
{
using Process process = new Process();
process.StartInfo.FileName = adbPath;
process.StartInfo.Arguments = "devices";
try {
using Process process = new Process();
process.StartInfo.FileName = adbPath;
process.StartInfo.Arguments = "devices";
// 禁用操作系统外壳程序
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
var output = process.StandardOutput.ReadToEnd();
_logger.Information(adbPath + " devices | output:\n" + output);
var outLines = output.Split('\r', '\n');
// 禁用操作系统外壳程序
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
var output = process.StandardOutput.ReadToEnd();
_logger.Information(adbPath + " devices | output:\n" + output);
var outLines = output.Split('\r', '\n');
return
(from line in outLines
where !line.StartsWith("List of devices attached")
&& line.Length != 0
&& line.Contains("device")
select line.Split('\t')[0])
.ToList();
return (from line in outLines where !line.StartsWith("List of devices attached") && line.Length != 0 && line.Contains("device") select line.Split('\t')[0]).ToList();
}
catch(Exception e)
{
_logger.Error(e.Message);
return new List<string>();
}
}
}
}

View File

@@ -19,13 +19,11 @@ namespace MaaWpfGui.Helper
{
public struct WindowHandle
{
private IntPtr _handle;
public IntPtr Handle { get; private set; }
public IntPtr Handle => _handle;
public static WindowHandle None => new WindowHandle() { Handle = IntPtr.Zero };
public static WindowHandle None => new WindowHandle() { _handle = IntPtr.Zero };
public static implicit operator WindowHandle(IntPtr h) => new WindowHandle() { _handle = h };
public static implicit operator WindowHandle(IntPtr h) => new WindowHandle() { Handle = h };
public static implicit operator WindowHandle(Window w)
{
@@ -35,7 +33,7 @@ namespace MaaWpfGui.Helper
}
var interop = new WindowInteropHelper(w);
return new WindowHandle { _handle = interop.Handle };
return new WindowHandle { Handle = interop.Handle };
}
}
}

View File

@@ -38,17 +38,10 @@ using static MaaWpfGui.Helper.Instances.Data;
namespace MaaWpfGui.Main
{
#pragma warning disable SA1135 // Using directives should be qualified
using AsstHandle = IntPtr;
using AsstInstanceOptionKey = Int32;
using AsstTaskId = Int32;
#pragma warning restore SA1135 // Using directives should be qualified
#pragma warning disable SA1121 // Use built-in type alias
/// <summary>
/// MaaCore 代理类。
/// </summary>
@@ -232,7 +225,7 @@ namespace MaaWpfGui.Main
/// </summary>
~AsstProxy()
{
if (_handle != IntPtr.Zero)
if (_handle != AsstHandle.Zero)
{
AsstDestroy();
}
@@ -273,7 +266,7 @@ namespace MaaWpfGui.Main
static bool LoadResIfExists(string path)
{
const string Resource = "\\resource";
const string Resource = @"\resource";
if (!Directory.Exists(path + Resource))
{
_logger.Warning($"Resource not found: {path + Resource}");
@@ -292,9 +285,9 @@ namespace MaaWpfGui.Main
{
bool loaded = LoadResource();
_handle = AsstCreateEx(_callback, IntPtr.Zero);
_handle = AsstCreateEx(_callback, AsstHandle.Zero);
if (loaded == false || _handle == IntPtr.Zero)
if (loaded == false || _handle == AsstHandle.Zero)
{
Execute.OnUIThreadAsync(() =>
{
@@ -305,9 +298,9 @@ namespace MaaWpfGui.Main
Instances.TaskQueueViewModel.SetInited();
_runningState.SetIdle(true);
this.AsstSetInstanceOption(InstanceOptionKey.TouchMode, Instances.SettingsViewModel.TouchMode);
this.AsstSetInstanceOption(InstanceOptionKey.DeploymentWithPause, Instances.SettingsViewModel.DeploymentWithPause ? "1" : "0");
this.AsstSetInstanceOption(InstanceOptionKey.AdbLiteEnabled, Instances.SettingsViewModel.AdbLiteEnabled ? "1" : "0");
AsstSetInstanceOption(InstanceOptionKey.TouchMode, Instances.SettingsViewModel.TouchMode);
AsstSetInstanceOption(InstanceOptionKey.DeploymentWithPause, Instances.SettingsViewModel.DeploymentWithPause ? "1" : "0");
AsstSetInstanceOption(InstanceOptionKey.AdbLiteEnabled, Instances.SettingsViewModel.AdbLiteEnabled ? "1" : "0");
// TODO: 之后把这个 OnUIThread 拆出来
// ReSharper disable once AsyncVoidLambda
Execute.OnUIThread(async () =>
@@ -343,14 +336,14 @@ namespace MaaWpfGui.Main
/// <param name="ptr">The null-terminated string to be checked.</param>
/// <returns>
/// The function returns the length of the string, in characters.
/// If <paramref name="ptr"/> is <see cref="IntPtr.Zero"/>, the function returns <c>0</c>.
/// If <paramref name="ptr"/> is <see cref="AsstHandle.Zero"/>, the function returns <c>0</c>.
/// </returns>
[DllImport("ucrtbase.dll", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
internal static extern int strlen(IntPtr ptr);
internal static extern int strlen(AsstHandle ptr);
private static string PtrToStringCustom(IntPtr ptr, Encoding enc)
private static string PtrToStringCustom(AsstHandle ptr, Encoding enc)
{
if (ptr == IntPtr.Zero)
if (ptr == AsstHandle.Zero)
{
return null;
}
@@ -367,7 +360,7 @@ namespace MaaWpfGui.Main
return enc.GetString(bytes);
}
private void CallbackFunction(int msg, IntPtr jsonBuffer, IntPtr customArg)
private void CallbackFunction(int msg, AsstHandle jsonBuffer, AsstHandle customArg)
{
string jsonStr = PtrToStringCustom(jsonBuffer, Encoding.UTF8);
@@ -417,6 +410,10 @@ namespace MaaWpfGui.Main
case AsstMsg.SubTaskExtraInfo:
ProcSubTaskMsg(msg, details);
break;
case AsstMsg.SubTaskStopped:
break;
default:
throw new ArgumentOutOfRangeException(nameof(msg), msg, null);
}
}
@@ -501,18 +498,20 @@ namespace MaaWpfGui.Main
{
string taskChain = details["taskchain"].ToString();
if (taskChain == "CloseDown")
switch (taskChain)
{
return;
}
if (taskChain == "Recruit")
{
if (msg == AsstMsg.TaskChainError)
case "CloseDown":
return;
case "Recruit":
{
Instances.RecognizerViewModel.RecruitInfo = LocalizationHelper.GetString("IdentifyTheMistakes");
using var toast = new ToastNotification(LocalizationHelper.GetString("IdentifyTheMistakes"));
toast.Show();
if (msg == AsstMsg.TaskChainError)
{
Instances.RecognizerViewModel.RecruitInfo = LocalizationHelper.GetString("IdentifyTheMistakes");
using var toast = new ToastNotification(LocalizationHelper.GetString("IdentifyTheMistakes"));
toast.Show();
}
break;
}
}
@@ -558,29 +557,34 @@ namespace MaaWpfGui.Main
}
case AsstMsg.TaskChainStart:
if (taskChain == "Fight")
switch (taskChain)
{
Instances.TaskQueueViewModel.FightTaskRunning = true;
}
else if (taskChain == "Infrast")
{
Instances.TaskQueueViewModel.InfrastTaskRunning = true;
case "Fight":
Instances.TaskQueueViewModel.FightTaskRunning = true;
break;
case "Infrast":
Instances.TaskQueueViewModel.InfrastTaskRunning = true;
break;
}
Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("StartTask") + taskChain);
break;
case AsstMsg.TaskChainCompleted:
if (taskChain == "Infrast")
switch (taskChain)
{
Instances.TaskQueueViewModel.IncreaseCustomInfrastPlanIndex();
}
else if (taskChain == "Mall")
{
if (Instances.TaskQueueViewModel.Stage != string.Empty && Instances.SettingsViewModel.CreditFightTaskEnabled)
case "Infrast":
Instances.TaskQueueViewModel.IncreaseCustomInfrastPlanIndex();
break;
case "Mall":
{
Instances.SettingsViewModel.LastCreditFightTaskTime = DateTime.UtcNow.ToYjDate().ToFormattedString();
Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("CompleteTask") + LocalizationHelper.GetString("CreditFight"));
if (Instances.TaskQueueViewModel.Stage != string.Empty && Instances.SettingsViewModel.CreditFightTaskEnabled)
{
Instances.SettingsViewModel.LastCreditFightTaskTime = DateTime.UtcNow.ToYjDate().ToFormattedString();
Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("CompleteTask") + LocalizationHelper.GetString("CreditFight"));
}
break;
}
}
@@ -734,10 +738,32 @@ namespace MaaWpfGui.Main
case AsstMsg.SubTaskExtraInfo:
ProcSubTaskExtraInfo(details);
break;
case AsstMsg.InternalError:
break;
case AsstMsg.InitFailed:
break;
case AsstMsg.ConnectionInfo:
break;
case AsstMsg.AllTasksCompleted:
break;
case AsstMsg.TaskChainError:
break;
case AsstMsg.TaskChainStart:
break;
case AsstMsg.TaskChainCompleted:
break;
case AsstMsg.TaskChainExtraInfo:
break;
case AsstMsg.TaskChainStopped:
break;
case AsstMsg.SubTaskStopped:
break;
default:
throw new ArgumentOutOfRangeException(nameof(msg), msg, null);
}
}
private void ProcSubTaskError(JObject details)
private static void ProcSubTaskError(JObject details)
{
string subTask = details["subtask"].ToString();
@@ -1272,7 +1298,7 @@ namespace MaaWpfGui.Main
}
}
private void ProcRecruitCalcMsg(JObject details)
private static void ProcRecruitCalcMsg(JObject details)
{
Instances.RecognizerViewModel.ProcRecruitMsg(details);
}
@@ -1429,19 +1455,17 @@ namespace MaaWpfGui.Main
// 尝试默认的备选端口
if (!ret && Instances.SettingsViewModel.AutoDetectConnection)
{
foreach (var address in Instances.SettingsViewModel.DefaultAddress[Instances.SettingsViewModel.ConnectConfig])
foreach (var address in Instances.SettingsViewModel.DefaultAddress[Instances.SettingsViewModel.ConnectConfig]
.TakeWhile(address => !_runningState.GetIdle()))
{
if (_runningState.GetIdle())
ret = AsstConnect(_handle, Instances.SettingsViewModel.AdbPath, address, Instances.SettingsViewModel.ConnectConfig);
if (!ret)
{
break;
continue;
}
ret = AsstConnect(_handle, Instances.SettingsViewModel.AdbPath, address, Instances.SettingsViewModel.ConnectConfig);
if (ret)
{
Instances.SettingsViewModel.ConnectAddress = address;
break;
}
Instances.SettingsViewModel.ConnectAddress = address;
break;
}
}
@@ -1499,7 +1523,8 @@ namespace MaaWpfGui.Main
private readonly Dictionary<TaskType, AsstTaskId> _latestTaskId = new Dictionary<TaskType, AsstTaskId>();
private JObject SerializeFightTaskParams(string stage, int maxMedicine, int maxStone, int maxTimes, string dropsItemId, int dropsItemQuantity)
private static JObject SerializeFightTaskParams(string stage, int maxMedicine, int maxStone, int maxTimes,
string dropsItemId, int dropsItemQuantity, bool reportToPenguin = true)
{
var taskParams = new JObject
{
@@ -1507,7 +1532,7 @@ namespace MaaWpfGui.Main
["medicine"] = maxMedicine,
["stone"] = maxStone,
["times"] = maxTimes,
["report_to_penguin"] = true,
["report_to_penguin"] = reportToPenguin,
};
if (dropsItemQuantity != 0 && !string.IsNullOrWhiteSpace(dropsItemId))
{

View File

@@ -76,16 +76,16 @@ namespace MaaWpfGui.Main
Directory.CreateDirectory("debug");
}
string logFilename = "debug/gui.log";
string logBakFilename = "debug/gui.bak.log";
if (File.Exists(logFilename) && new FileInfo(logFilename).Length > 4 * 1024 * 1024)
const string LogFilename = "debug/gui.log";
const string LogBakFilename = "debug/gui.bak.log";
if (File.Exists(LogFilename) && new FileInfo(LogFilename).Length > 4 * 1024 * 1024)
{
if (File.Exists(logBakFilename))
if (File.Exists(LogBakFilename))
{
File.Delete(logBakFilename);
File.Delete(LogBakFilename);
}
File.Move(logFilename, logBakFilename);
File.Move(LogFilename, LogBakFilename);
}
// Bootstrap serilog
@@ -93,7 +93,7 @@ namespace MaaWpfGui.Main
.WriteTo.Debug(
outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] <{ThreadId}><{ThreadName}> {Message:lj}{NewLine}{Exception}")
.WriteTo.File(
logFilename,
LogFilename,
outputTemplate: "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff}] <{ThreadId}><{ThreadName}> {Message:lj}{NewLine}{Exception}")
.Enrich.FromLogContext()
.Enrich.WithThreadId()

View File

@@ -124,30 +124,14 @@ namespace MaaWpfGui.Models
/// <returns>Whether stage is open</returns>
public bool IsStageOpenOrWillOpen()
{
if (Activity != null)
{
if (!Activity.IsExpired)
{
return true;
}
// expired activity
if (!Activity.IsResourceCollection)
{
return false;
}
// expired resource activity, check open days
}
// resource stage
if (OpenDays != null && OpenDays.Any())
// 只有活动会过期且不开放
if (Activity == null)
{
return true;
}
// regular stage, always open
return true;
return !Activity.IsExpired ||
Activity.IsResourceCollection;
}
}
}

View File

@@ -106,7 +106,7 @@ namespace MaaWpfGui.Services.HotKeys
Instances.MaaHotKeyActionHandler.HandleKeyPressed(action);
}
private Dictionary<MaaHotKeyAction, MaaHotKey> GetPersistentHotKeys()
private static Dictionary<MaaHotKeyAction, MaaHotKey> GetPersistentHotKeys()
{
var hotKeysString = ConfigurationHelper.GetValue(HotKeyConfigName, null);
@@ -115,7 +115,7 @@ namespace MaaWpfGui.Services.HotKeys
: JsonConvert.DeserializeObject<Dictionary<MaaHotKeyAction, MaaHotKey>>(hotKeysString);
}
private Dictionary<MaaHotKeyAction, MaaHotKey> CreateInitialHotKeys()
private static Dictionary<MaaHotKeyAction, MaaHotKey> CreateInitialHotKeys()
{
var hotKeys = new Dictionary<MaaHotKeyAction, MaaHotKey>
{

View File

@@ -103,7 +103,7 @@ namespace MaaWpfGui.Services
}
}
private string GetClientType()
private static string GetClientType()
{
var clientType = ConfigurationHelper.GetValue(ConfigurationKeys.ClientType, string.Empty);
@@ -116,7 +116,7 @@ namespace MaaWpfGui.Services
return clientType;
}
private JObject LoadLocalStages()
private static JObject LoadLocalStages()
{
JObject activity = Instances.MaaApiService.LoadApiCache(StageApi);
return activity;
@@ -142,7 +142,7 @@ namespace MaaWpfGui.Services
return webTimestamp > localTimestamp || !allFileDownloadComplete;
}
private async Task<JObject> LoadWebStages()
private static async Task<JObject> LoadWebStages()
{
var clientType = GetClientType();
@@ -355,31 +355,28 @@ namespace MaaWpfGui.Services
{
var builder = new StringBuilder();
var sideStoryFlags = new Dictionary<string, bool>();
foreach (var item in _stages)
foreach (var item in _stages.Where(item => item.Value.IsStageOpen(dayOfWeek)))
{
if (item.Value.IsStageOpen(dayOfWeek))
if (!string.IsNullOrEmpty(item.Value.Activity?.StageName)
&& !sideStoryFlags.ContainsKey(item.Value.Activity.StageName))
{
if (!string.IsNullOrEmpty(item.Value.Activity?.StageName)
&& !sideStoryFlags.ContainsKey(item.Value.Activity.StageName))
{
DateTime dateTime = DateTime.UtcNow;
var daysLeftOpen = (item.Value.Activity.UtcExpireTime - dateTime).Days;
builder.AppendLine(item.Value.Activity.StageName
+ " "
+ LocalizationHelper.GetString("DaysLeftOpen")
+ (daysLeftOpen > 0 ? daysLeftOpen.ToString() : LocalizationHelper.GetString("LessThanOneDay")));
sideStoryFlags[item.Value.Activity.StageName] = true;
}
DateTime dateTime = DateTime.UtcNow;
var daysLeftOpen = (item.Value.Activity.UtcExpireTime - dateTime).Days;
builder.AppendLine(item.Value.Activity.StageName
+ " "
+ LocalizationHelper.GetString("DaysLeftOpen")
+ (daysLeftOpen > 0 ? daysLeftOpen.ToString() : LocalizationHelper.GetString("LessThanOneDay")));
sideStoryFlags[item.Value.Activity.StageName] = true;
}
if (!string.IsNullOrEmpty(item.Value.Tip))
{
builder.AppendLine(item.Value.Tip);
}
if (!string.IsNullOrEmpty(item.Value.Tip))
{
builder.AppendLine(item.Value.Tip);
}
if (!string.IsNullOrEmpty(item.Value.Drop))
{
builder.AppendLine(item.Value.Display + ": " + ItemListHelper.GetItemName(item.Value.Drop));
}
if (!string.IsNullOrEmpty(item.Value.Drop))
{
builder.AppendLine(item.Value.Display + ": " + ItemListHelper.GetItemName(item.Value.Drop));
}
}

View File

@@ -385,11 +385,13 @@ namespace MaaWpfGui.ViewModels.UI
_taskType = "Copilot";
}
if (IsDataFromWeb)
if (!IsDataFromWeb)
{
File.Delete(TempCopilotFile);
File.WriteAllText(TempCopilotFile, json.ToString());
return;
}
File.Delete(TempCopilotFile);
File.WriteAllText(TempCopilotFile, json.ToString());
}
catch (Exception)
{
@@ -797,11 +799,13 @@ namespace MaaWpfGui.ViewModels.UI
bool startAny = false;
foreach (var model in CopilotItemViewModels)
{
if (model.IsChecked)
if (!model.IsChecked)
{
ret &= Instances.AsstProxy.AsstStartCopilot(model.FilePath, Form, AddTrust, AddUserAdditional, mUserAdditional, UseCopilotList, model.Name.Replace("-Adverse", string.Empty), model.Name.Contains("-Adverse"), _taskType, Loop ? LoopTimes : 1, false);
startAny = true;
continue;
}
ret &= Instances.AsstProxy.AsstStartCopilot(model.FilePath, Form, AddTrust, AddUserAdditional, mUserAdditional, UseCopilotList, model.Name.Replace("-Adverse", string.Empty), model.Name.Contains("-Adverse"), _taskType, Loop ? LoopTimes : 1, false);
startAny = true;
}
ret &= Instances.AsstProxy.AsstStart();

View File

@@ -412,7 +412,7 @@ namespace MaaWpfGui.ViewModels.UI
DefaultInfrastList = new List<CombinedData>
{
new CombinedData { Display = LocalizationHelper.GetString("UserDefined"), Value = _userDefined },
new CombinedData { Display = LocalizationHelper.GetString("UserDefined"), Value = UserDefined },
new CombinedData { Display = LocalizationHelper.GetString("153Time3"), Value = "153_layout_3_times_a_day.json" },
new CombinedData { Display = LocalizationHelper.GetString("243Time3"), Value = "243_layout_3_times_a_day.json" },
new CombinedData { Display = LocalizationHelper.GetString("243Time4"), Value = "243_layout_4_times_a_day.json" },
@@ -525,16 +525,10 @@ namespace MaaWpfGui.ViewModels.UI
new GenericCombinedData<UpdateVersionType> { Display = LocalizationHelper.GetString("UpdateCheckStable"), Value = UpdateVersionType.Stable },
};
var languageList = new List<CombinedData>();
foreach (var pair in LocalizationHelper.SupportedLanguages)
{
if (pair.Key == PallasLangKey && !Cheers)
{
continue;
}
languageList.Add(new CombinedData { Display = pair.Value, Value = pair.Key });
}
var languageList = (from pair in LocalizationHelper.SupportedLanguages
where pair.Key != PallasLangKey || Cheers
select new CombinedData { Display = pair.Value, Value = pair.Key })
.ToList();
LanguageList = languageList;
}
@@ -727,28 +721,30 @@ namespace MaaWpfGui.ViewModels.UI
_ => false,
};
if (enable)
if (!enable)
{
Func<bool> func = str switch
{
"StartsWithScript" => RunStartCommand,
"EndsWithScript" => RunEndCommand,
_ => () => false,
};
return;
}
Func<bool> func = str switch
{
"StartsWithScript" => RunStartCommand,
"EndsWithScript" => RunEndCommand,
_ => () => false,
};
Execute.OnUIThread(() => Instances.TaskQueueViewModel.AddLog(
LocalizationHelper.GetString("StartTask") + LocalizationHelper.GetString(str)));
if (func())
{
Execute.OnUIThread(() => Instances.TaskQueueViewModel.AddLog(
LocalizationHelper.GetString("StartTask") + LocalizationHelper.GetString(str)));
if (func())
{
Execute.OnUIThread(() => Instances.TaskQueueViewModel.AddLog(
LocalizationHelper.GetString("CompleteTask") + LocalizationHelper.GetString(str)));
}
else
{
Execute.OnUIThread(() => Instances.TaskQueueViewModel.AddLog(
LocalizationHelper.GetString("TaskError") + LocalizationHelper.GetString(str),
UiLogColor.Warning));
}
LocalizationHelper.GetString("CompleteTask") + LocalizationHelper.GetString(str)));
}
else
{
Execute.OnUIThread(() => Instances.TaskQueueViewModel.AddLog(
LocalizationHelper.GetString("TaskError") + LocalizationHelper.GetString(str),
UiLogColor.Warning));
}
}
@@ -1109,12 +1105,9 @@ namespace MaaWpfGui.ViewModels.UI
{
get
{
foreach (var item in ClientTypeList)
foreach (var item in ClientTypeList.Where(item => item.Value == ClientType))
{
if (item.Value == ClientType)
{
return item.Display;
}
return item.Display;
}
return "Unknown Client";
@@ -1375,9 +1368,9 @@ namespace MaaWpfGui.ViewModels.UI
}
}
private string _defaultInfrast = ConfigurationHelper.GetValue(ConfigurationKeys.DefaultInfrast, _userDefined);
private string _defaultInfrast = ConfigurationHelper.GetValue(ConfigurationKeys.DefaultInfrast, UserDefined);
private static readonly string _userDefined = "user_defined";
private const string UserDefined = "user_defined";
/// <summary>
/// Gets or sets the uses of drones.
@@ -1388,9 +1381,9 @@ namespace MaaWpfGui.ViewModels.UI
set
{
SetAndNotify(ref _defaultInfrast, value);
if (_defaultInfrast != _userDefined)
if (_defaultInfrast != UserDefined)
{
CustomInfrastFile = "resource\\custom_infrast\\" + value;
CustomInfrastFile = @"resource\custom_infrast\" + value;
IsCustomInfrastFileReadOnly = true;
}
else
@@ -1492,7 +1485,7 @@ namespace MaaWpfGui.ViewModels.UI
CustomInfrastFile = dialog.FileName;
}
DefaultInfrast = _userDefined;
DefaultInfrast = UserDefined;
}
private string _customInfrastFile = ConfigurationHelper.GetValue(ConfigurationKeys.CustomInfrastFile, string.Empty);
@@ -2564,6 +2557,8 @@ namespace MaaWpfGui.ViewModels.UI
case VersionUpdateViewModel.CheckUpdateRetT.OnlyGameResourceUpdated:
toastMessage = LocalizationHelper.GetString("GameResourceUpdated");
break;
default:
throw new ArgumentOutOfRangeException();
}
if (toastMessage != null)
@@ -2854,13 +2849,8 @@ namespace MaaWpfGui.ViewModels.UI
}
else if (addresses.Count > 1)
{
foreach (var address in addresses)
foreach (var address in addresses.Where(address => address != "emulator-5554"))
{
if (address == "emulator-5554")
{
continue;
}
ConnectAddress = address;
break;
}
@@ -2890,7 +2880,7 @@ namespace MaaWpfGui.ViewModels.UI
object value = key?.GetValue(BluestacksNxtValueName);
if (value != null)
{
return (string)value + "\\bluestacks.conf";
return (string)value + @"\bluestacks.conf";
}
return null;
@@ -2921,12 +2911,9 @@ namespace MaaWpfGui.ViewModels.UI
{
var rvm = (RootViewModel)this.Parent;
var connectConfigName = string.Empty;
foreach (var data in ConnectConfigList)
foreach (var data in ConnectConfigList.Where(data => data.Value == ConnectConfig))
{
if (data.Value == ConnectConfig)
{
connectConfigName = data.Display;
}
connectConfigName = data.Display;
}
string prefix = ConfigurationHelper.GetValue(ConfigurationKeys.WindowTitlePrefix, string.Empty);
@@ -2935,10 +2922,10 @@ namespace MaaWpfGui.ViewModels.UI
prefix += " - ";
}
string officialClientType = "Official";
string bilibiliClientType = "Bilibili";
const string OfficialClientType = "Official";
const string BilibiliClientType = "Bilibili";
string jsonPath = "resource/version.json";
if (!(ClientType == string.Empty || ClientType == officialClientType || ClientType == bilibiliClientType))
if (!(ClientType == string.Empty || ClientType == OfficialClientType || ClientType == BilibiliClientType))
{
jsonPath = $"resource/global/{ClientType}/resource/version.json";
}
@@ -2999,29 +2986,27 @@ namespace MaaWpfGui.ViewModels.UI
var allLines = File.ReadAllLines(_bluestacksConfig);
// ReSharper disable once InvertIf
if (string.IsNullOrEmpty(_bluestacksKeyWord))
{
foreach (var line in allLines)
{
if (line.StartsWith("bst.installed_images"))
if (!line.StartsWith("bst.installed_images"))
{
var images = line.Split('"')[1].Split(',');
_bluestacksKeyWord = "bst.instance." + images[0] + ".status.adb_port";
break;
continue;
}
var images = line.Split('"')[1].Split(',');
_bluestacksKeyWord = "bst.instance." + images[0] + ".status.adb_port";
break;
}
}
foreach (var line in allLines)
{
if (line.StartsWith(_bluestacksKeyWord))
{
var sp = line.Split('"');
return "127.0.0.1:" + sp[1];
}
}
return null;
return (from line in allLines
where line.StartsWith(_bluestacksKeyWord)
select line.Split('"') into sp
select "127.0.0.1:" + sp[1])
.FirstOrDefault();
}
public bool IsAdbTouchMode()
@@ -3439,17 +3424,17 @@ namespace MaaWpfGui.ViewModels.UI
Instances.TaskQueueViewModel.ShowInverse = false;
Instances.TaskQueueViewModel.SelectedAllWidth = 90;
break;
case InverseClearType.Inverse:
Instances.TaskQueueViewModel.InverseMode = true;
Instances.TaskQueueViewModel.ShowInverse = false;
Instances.TaskQueueViewModel.SelectedAllWidth = 90;
break;
case InverseClearType.ClearInverse:
Instances.TaskQueueViewModel.ShowInverse = true;
Instances.TaskQueueViewModel.SelectedAllWidth = TaskQueueViewModel.SelectedAllWidthWhenBoth;
break;
default:
throw new ArgumentOutOfRangeException();
}
}
}

View File

@@ -791,15 +791,16 @@ namespace MaaWpfGui.ViewModels.UI
connected = await Task.Run(() => Instances.AsstProxy.AsstConnect(ref errMsg));
}
if (!connected)
if (connected)
{
AddLog(errMsg, UiLogColor.Error);
_runningState.SetIdle(true);
SetStopped();
return false;
return true;
}
return true;
AddLog(errMsg, UiLogColor.Error);
_runningState.SetIdle(true);
SetStopped();
return false;
}
/// <summary>