PackageRequestRemove.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #if ODIN_INSPECTOR
  2. using System;
  3. using UnityEditor;
  4. using UnityEditor.PackageManager;
  5. using UnityEditor.PackageManager.Requests;
  6. using UnityEngine;
  7. namespace ET.PackageManager.Editor
  8. {
  9. public class PackageRequestRemove
  10. {
  11. private string m_Name;
  12. private RemoveRequest m_Request;
  13. private Action<bool> m_RequestCallback;
  14. public PackageRequestRemove(string name, Action<bool> callback)
  15. {
  16. if (string.IsNullOrEmpty(name))
  17. {
  18. Debug.LogError($"null包 请传入名称");
  19. callback?.Invoke(false);
  20. return;
  21. }
  22. m_Name = name;
  23. if (!CheckRemove())
  24. {
  25. callback?.Invoke(false);
  26. return;
  27. }
  28. m_RequestCallback = callback;
  29. m_Request = Client.Remove(name);
  30. EditorApplication.update += UpdateRequest;
  31. }
  32. private bool CheckRemove()
  33. {
  34. if (!PackageHubHelper.CheckRemove(m_Name, true))
  35. {
  36. return false;
  37. }
  38. var packagePath = Application.dataPath.Replace("Assets", "Packages") + "/" + m_Name;
  39. try
  40. {
  41. System.IO.Directory.Delete(packagePath, true);
  42. if (System.IO.Directory.Exists(packagePath))
  43. {
  44. Debug.LogError("删除失败 文件还存在");
  45. return false;
  46. }
  47. return true;
  48. }
  49. catch (Exception e)
  50. {
  51. Debug.LogError(e);
  52. return false;
  53. }
  54. }
  55. private void UpdateRequest()
  56. {
  57. if (!m_Request.IsCompleted) return;
  58. if (m_Request.Status == StatusCode.Success)
  59. {
  60. m_RequestCallback?.Invoke(true);
  61. }
  62. else
  63. {
  64. Debug.LogError($"移除 请求失败:{m_Name} 请刷新后重试!\n{m_Request.Error.message}");
  65. m_RequestCallback?.Invoke(false);
  66. }
  67. EditorApplication.update -= UpdateRequest;
  68. m_RequestCallback = null;
  69. }
  70. }
  71. }
  72. #endif