优化
This commit is contained in:
parent
85aa78bf12
commit
6c4f535b58
116
Editor/PackageManager/UpdateAllPackageHelper.cs
Normal file
116
Editor/PackageManager/UpdateAllPackageHelper.cs
Normal file
@ -0,0 +1,116 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor.PackageManager;
|
||||
using UnityEditor.PackageManager.Requests;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace AlicizaX.PackageManager.Editor
|
||||
{
|
||||
/// <summary>
|
||||
/// 更新包帮助类
|
||||
/// </summary>
|
||||
internal static class UpdateAllPackageHelper
|
||||
{
|
||||
private static AddRequest _addRequest;
|
||||
private static readonly Queue<RepositoryPackageData> PackagesToUpdate = new Queue<RepositoryPackageData>();
|
||||
private static int _allPackagesCount = 0;
|
||||
private static int _updatingPackagesIndex = 0;
|
||||
|
||||
public static void UpdatePackages()
|
||||
{
|
||||
var result = EditorUtility.DisplayDialog("更新包提示", "是否更新所有包?\n 更新完成之后可能需要重启Unity", "是", "否");
|
||||
if (result)
|
||||
{
|
||||
UpdatePackagesFromManifest(FrameworkPackageManagerWindow.Instance.RepositoryPackageDatas);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新指定包
|
||||
/// </summary>
|
||||
/// <param name="packageName">包名</param>
|
||||
/// <param name="packageUrl">包地址</param>
|
||||
public static void UpdatePackages(RepositoryPackageData repositoryPackageData)
|
||||
{
|
||||
PackagesToUpdate.Enqueue(repositoryPackageData);
|
||||
}
|
||||
|
||||
private static void UpdatePackagesFromManifest(List<RepositoryPackageData> RepositoryPackageDatas)
|
||||
{
|
||||
foreach (var package in RepositoryPackageDatas)
|
||||
{
|
||||
string packageUrl = package.cloneUrl;
|
||||
if (packageUrl.EndsWith(".git") && package.PackageState == PackageState.Update)
|
||||
{
|
||||
UpdatePackages(package);
|
||||
}
|
||||
}
|
||||
|
||||
StartUpdate();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 开始更新
|
||||
/// </summary>
|
||||
public static void StartUpdate()
|
||||
{
|
||||
_allPackagesCount = PackagesToUpdate.Count;
|
||||
_updatingPackagesIndex = 0;
|
||||
if (PackagesToUpdate.Count > 0)
|
||||
{
|
||||
UpdateNextPackage();
|
||||
}
|
||||
else
|
||||
{
|
||||
UnityEngine.Debug.Log("No packages to update.");
|
||||
}
|
||||
}
|
||||
|
||||
private static void UpdateNextPackage()
|
||||
{
|
||||
if (PackagesToUpdate.Count > 0)
|
||||
{
|
||||
_updatingPackagesIndex++;
|
||||
var repositoryPackageData = PackagesToUpdate.Dequeue();
|
||||
_addRequest = Client.Add(repositoryPackageData.cloneUrl);
|
||||
EditorApplication.update += UpdatingProgressHandler;
|
||||
var isCancelableProgressBar = EditorUtility.DisplayCancelableProgressBar("正在更新包", $"{_updatingPackagesIndex}/{_allPackagesCount} ({repositoryPackageData.name})", (float)_updatingPackagesIndex / _allPackagesCount);
|
||||
if (isCancelableProgressBar)
|
||||
{
|
||||
EditorUtility.DisplayProgressBar("正在取消更新", "请等待...", 0.5f);
|
||||
PackagesToUpdate.Clear();
|
||||
EditorUtility.ClearProgressBar();
|
||||
EditorApplication.update -= UpdatingProgressHandler;
|
||||
AssetDatabase.Refresh();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EditorUtility.ClearProgressBar();
|
||||
UnityEngine.Debug.Log("All packages updated.");
|
||||
AssetDatabase.Refresh();
|
||||
}
|
||||
}
|
||||
|
||||
private static void UpdatingProgressHandler()
|
||||
{
|
||||
if (_addRequest.IsCompleted)
|
||||
{
|
||||
if (_addRequest.Status == StatusCode.Success)
|
||||
{
|
||||
FrameworkPackageManagerWindow.Instance.RefreshPackage(_addRequest.Result.name);
|
||||
UnityEngine.Debug.Log($"Updated package: {_addRequest.Result.name}");
|
||||
}
|
||||
else if (_addRequest.Status >= StatusCode.Failure)
|
||||
{
|
||||
UnityEngine.Debug.LogError($"Failed to update package: {_addRequest.Error.message}");
|
||||
}
|
||||
|
||||
EditorApplication.update -= UpdatingProgressHandler;
|
||||
UpdateNextPackage();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
3
Editor/PackageManager/UpdateAllPackageHelper.cs.meta
Normal file
3
Editor/PackageManager/UpdateAllPackageHelper.cs.meta
Normal file
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f5dac61f7c2046f1a7dcd221b36c67cb
|
||||
timeCreated: 1740027829
|
@ -20,7 +20,17 @@ namespace AlicizaX.PackageManager.Editor
|
||||
Instance = this;
|
||||
}
|
||||
|
||||
public void RefreshPackageData(Action callBack)
|
||||
public void RefreshPackage(string packageName)
|
||||
{
|
||||
var package = RepositoryPackageDatas.Find(t => t.name.Equals(packageName));
|
||||
if (package != null)
|
||||
{
|
||||
packageListView.itemsSource = RepositoryPackageDatas;
|
||||
packageListView.Rebuild();
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshPackageData(Action callBack)
|
||||
{
|
||||
RepositoryDataFetcher.FetchRepositoryData((datas) =>
|
||||
{
|
||||
|
@ -27,7 +27,7 @@ namespace AlicizaX.PackageManager.Editor
|
||||
stateLabel.style.flexGrow = 1; // 让 Label 占据剩余空间
|
||||
Add(stateLabel);
|
||||
|
||||
btnRefresh = new Button();
|
||||
btnRefresh = new Button(OnBtnRefreshClick);
|
||||
btnRefresh.name = "btnRefresh";
|
||||
btnRefresh.style.maxHeight = 30;
|
||||
|
||||
@ -39,7 +39,7 @@ namespace AlicizaX.PackageManager.Editor
|
||||
|
||||
private void OnBtnRefreshClick()
|
||||
{
|
||||
// RepositoryDataFetcher.RefreshPackageData(null);
|
||||
UpdateAllPackageHelper.UpdatePackages();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -192,7 +192,7 @@ namespace AlicizaX.PackageManager.Editor
|
||||
|
||||
private void OnBtnUpdate()
|
||||
{
|
||||
PackageManagerCheckTool.UpdatePackage(_selectRepositoryPackageData.name);
|
||||
PackageManagerCheckTool.InstallPackage(_selectRepositoryPackageData.cloneUrl);
|
||||
}
|
||||
|
||||
private void OnBtnInstall()
|
||||
|
Loading…
Reference in New Issue
Block a user