CI / Go Backend (push) Canceled after 0s
初始化 monorepo: Go后端(7微服务) + Unity客户端(9模块) + 启动器 HTML5原型: Three.js 3D体素世界, Perlin噪声地形, 原版材质, 22种方块 Minecraft创造模式背包: 双栏布局, 拖拽移动物品, 方向性元件引脚 AI助搭策划文档 + 客户端/服务端骨架 + Docker Compose + CI
200 lines
7.4 KiB
C#
200 lines
7.4 KiB
C#
using System.Collections.ObjectModel;
|
|
using System.IO;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Controls.Primitives;
|
|
using System.Windows.Input;
|
|
using PCL.Core.App;
|
|
using PCL.Core.App.Localization;
|
|
using PCL.Core.UI;
|
|
|
|
namespace PCL;
|
|
|
|
public partial class PageLoginProfile
|
|
{
|
|
public PageLoginProfile()
|
|
{
|
|
InitializeComponent();
|
|
Loaded += (_, _) => Reload();
|
|
}
|
|
|
|
public ObservableCollection<ProfileItem> ProfileCollection { get; set; } = new();
|
|
|
|
/// <summary>
|
|
/// 刷新页面显示的所有信息。
|
|
/// </summary>
|
|
public void Reload()
|
|
{
|
|
RefreshProfileList();
|
|
ModMain.frmLoginProfileSkin = null;
|
|
// RunInNewThread(Sub()
|
|
// Thread.Sleep(800)
|
|
// RunInUi(Sub() FrmLaunchLeft.RefreshPage(True))
|
|
// End Sub)
|
|
}
|
|
|
|
/// <summary>
|
|
/// 刷新档案列表
|
|
/// </summary>
|
|
public void RefreshProfileList()
|
|
{
|
|
ModBase.Log("[Profile] 刷新档案列表");
|
|
ProfileCollection.Clear();
|
|
ModProfile.GetProfile();
|
|
try
|
|
{
|
|
foreach (var p in ModProfile.profileList)
|
|
ProfileCollection.Add(new ProfileItem(p));
|
|
HintMicrosoft.Visibility = ModProfile.profileList.Count == 0 ? Visibility.Visible : Visibility.Collapsed;
|
|
ModBase.Log("[Profile] 档案列表刷新完成");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ModBase.Log(
|
|
ex,
|
|
Lang.Text("Launch.Account.Profile.Error.Read"),
|
|
ModBase.LogLevel.Feedback,
|
|
userSummary: Lang.Text("Launch.Account.Profile.Error.Read"));
|
|
}
|
|
|
|
if (!ModProfile.profileList.Any())
|
|
{
|
|
States.Hint.LaunchWithProfile = true;
|
|
HintCreate.Visibility = Visibility.Visible;
|
|
}
|
|
else
|
|
{
|
|
HintCreate.Visibility = Visibility.Collapsed;
|
|
}
|
|
}
|
|
|
|
public class ProfileItem
|
|
{
|
|
public ProfileItem(ModProfile.McProfile profile)
|
|
{
|
|
Profile = profile;
|
|
Info = (string)ModProfile.GetProfileInfo(profile);
|
|
var logoPath = ModBase.pathTemp + $@"Cache\Skin\Head\{profile.SkinHeadId}.png";
|
|
if (File.Exists(logoPath) && new FileInfo(logoPath).Length != 0L)
|
|
{
|
|
Logo = logoPath;
|
|
SvgIcon = string.Empty;
|
|
}
|
|
else
|
|
{
|
|
Logo = string.Empty;
|
|
SvgIcon = "lucide/user";
|
|
}
|
|
}
|
|
|
|
public string Info { get; private set; }
|
|
public string Logo { get; private set; } = string.Empty;
|
|
public string SvgIcon { get; private set; } = string.Empty;
|
|
public ModProfile.McProfile Profile { get; }
|
|
public string Username => Profile.Username;
|
|
}
|
|
|
|
#region 控件
|
|
|
|
private void SelectProfile(object sender, MouseButtonEventArgs e)
|
|
{
|
|
var item = (MyListItem)sender;
|
|
var tag = (ModProfile.McProfile)item.Tag;
|
|
ModProfile.selectedProfile = (ModProfile.McProfile)((MyListItem)sender).Tag;
|
|
ModBase.Log($"[Profile] 选定档案: {tag.Username}, 以 {tag.Type} 方式验证");
|
|
ModProfile.lastUsedProfile =
|
|
ModProfile.profileList.IndexOf((ModProfile.McProfile)((MyListItem)sender).Tag); // 获取当前档案的序号
|
|
ModProfile.SaveProfile(); // 保存档案配置,确保切换后的档案被正确保存
|
|
|
|
// 清除登录验证缓存,确保使用新档案的验证信息
|
|
ModLaunch.mcLoginMsLoader.State = ModBase.LoadState.Waiting;
|
|
ModLaunch.mcLoginAuthLoader.State = ModBase.LoadState.Waiting;
|
|
ModLaunch.mcLoginLegacyLoader.State = ModBase.LoadState.Waiting;
|
|
|
|
ModBase.RunInUi(() =>
|
|
{
|
|
ModMain.frmLaunchLeft.RefreshPage(true);
|
|
ModMain.frmLaunchLeft.BtnLaunch.IsEnabled = true;
|
|
});
|
|
}
|
|
|
|
private void ProfileContMenuBuild(MyListItem sender, EventArgs e)
|
|
{
|
|
// 更改 UUID
|
|
var btnEditUuid = new MyIconButton
|
|
{ SvgIcon = "lucide/pencil", ToolTip = Lang.Text("Launch.Account.Profile.ChangeUuid"), Tag = sender.Tag };
|
|
ToolTipService.SetPlacement(btnEditUuid, PlacementMode.Center);
|
|
ToolTipService.SetVerticalOffset(btnEditUuid, 30d);
|
|
ToolTipService.SetHorizontalOffset(btnEditUuid, 2d);
|
|
btnEditUuid.Click += EditProfileUuid;
|
|
// 复制 UUID
|
|
var btnCopyUuid = new MyIconButton
|
|
{ SvgIcon = "lucide/copy", ToolTip = Lang.Text("Launch.Account.Profile.CopyUuid"), Tag = sender.Tag };
|
|
ToolTipService.SetPlacement(btnCopyUuid, PlacementMode.Center);
|
|
ToolTipService.SetVerticalOffset(btnCopyUuid, 30d);
|
|
ToolTipService.SetHorizontalOffset(btnCopyUuid, 2d);
|
|
btnCopyUuid.Click += CopyProfileUuid;
|
|
// 更改验证服务器名称
|
|
var btnEditServerName = new MyIconButton
|
|
{ SvgIcon = "lucide/info", ToolTip = Lang.Text("Launch.Account.Profile.ChangeAuthServerName"), Tag = sender.Tag };
|
|
ToolTipService.SetPlacement(btnEditServerName, PlacementMode.Center);
|
|
ToolTipService.SetVerticalOffset(btnEditServerName, 30d);
|
|
ToolTipService.SetHorizontalOffset(btnEditServerName, 2d);
|
|
btnEditServerName.Click += EditProfileServer;
|
|
// 删除档案
|
|
var btnDelete = new MyIconButton { SvgIcon = "lucide/trash-2", ToolTip = Lang.Text("Launch.Account.Profile.Delete"), Tag = sender.Tag };
|
|
ToolTipService.SetPlacement(btnDelete, PlacementMode.Center);
|
|
ToolTipService.SetVerticalOffset(btnDelete, 30d);
|
|
ToolTipService.SetHorizontalOffset(btnDelete, 2d);
|
|
btnDelete.Click += DeleteProfile;
|
|
// 根据档案类型显示不同的菜单项
|
|
if (((ModProfile.McProfile)sender.Tag).Type == ModLaunch.McLoginType.Legacy)
|
|
sender.Buttons = new[] { btnEditUuid, btnDelete };
|
|
else
|
|
sender.Buttons = new[] { btnCopyUuid, btnDelete };
|
|
}
|
|
|
|
// 创建档案
|
|
private void BtnNew_Click(object sender, EventArgs e)
|
|
{
|
|
ModBase.RunInNewThread(() =>
|
|
{
|
|
ModProfile.CreateProfile();
|
|
ModBase.RunInUi(() => RefreshProfileList());
|
|
});
|
|
}
|
|
|
|
// 编辑 UUID
|
|
private void EditProfileUuid(object sender, EventArgs e)
|
|
{
|
|
ModProfile.EditOfflineUuid((ModProfile.McProfile)((MyIconButton)sender).Tag);
|
|
}
|
|
|
|
private void CopyProfileUuid(object sender, EventArgs e)
|
|
{
|
|
if (sender is MyIconButton { Tag: ModProfile.McProfile profile }) ModBase.ClipboardSet(profile.Uuid);
|
|
}
|
|
|
|
// 编辑验证服务器名称
|
|
private void EditProfileServer(object sender, EventArgs e)
|
|
{
|
|
var profile = (ModProfile.McProfile)((MyIconButton)sender).Tag;
|
|
string name = ModMain.MyMsgBoxInput(Lang.Text("Launch.Account.Profile.EditServerName.Title"), Lang.Text("Launch.Account.Profile.EditServerName.Message"), profile.ServerName);
|
|
if (name is not null) ModProfile.EditAuthServerName(profile, name);
|
|
}
|
|
|
|
// 删除档案
|
|
private void DeleteProfile(object sender, EventArgs e)
|
|
{
|
|
if (ModMain.MyMsgBox(Lang.Text("Launch.Account.Profile.DeleteConfirm.Message"), Lang.Text("Launch.Account.Profile.DeleteConfirm.Title"), Lang.Text("Common.Action.Continue"), Lang.Text("Common.Action.Cancel"), isWarn: true,
|
|
forceWait: true) == 2)
|
|
return;
|
|
ModProfile.RemoveProfile((ModProfile.McProfile)((MyIconButton)sender).Tag);
|
|
ModBase.RunInUi(() => RefreshProfileList());
|
|
}
|
|
|
|
|
|
|
|
#endregion
|
|
}
|