优化
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;
|
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) =>
|
RepositoryDataFetcher.FetchRepositoryData((datas) =>
|
||||||
{
|
{
|
||||||
|
@ -27,7 +27,7 @@ namespace AlicizaX.PackageManager.Editor
|
|||||||
stateLabel.style.flexGrow = 1; // 让 Label 占据剩余空间
|
stateLabel.style.flexGrow = 1; // 让 Label 占据剩余空间
|
||||||
Add(stateLabel);
|
Add(stateLabel);
|
||||||
|
|
||||||
btnRefresh = new Button();
|
btnRefresh = new Button(OnBtnRefreshClick);
|
||||||
btnRefresh.name = "btnRefresh";
|
btnRefresh.name = "btnRefresh";
|
||||||
btnRefresh.style.maxHeight = 30;
|
btnRefresh.style.maxHeight = 30;
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ namespace AlicizaX.PackageManager.Editor
|
|||||||
|
|
||||||
private void OnBtnRefreshClick()
|
private void OnBtnRefreshClick()
|
||||||
{
|
{
|
||||||
// RepositoryDataFetcher.RefreshPackageData(null);
|
UpdateAllPackageHelper.UpdatePackages();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -192,7 +192,7 @@ namespace AlicizaX.PackageManager.Editor
|
|||||||
|
|
||||||
private void OnBtnUpdate()
|
private void OnBtnUpdate()
|
||||||
{
|
{
|
||||||
PackageManagerCheckTool.UpdatePackage(_selectRepositoryPackageData.name);
|
PackageManagerCheckTool.InstallPackage(_selectRepositoryPackageData.cloneUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnBtnInstall()
|
private void OnBtnInstall()
|
||||||
|
Loading…
Reference in New Issue
Block a user