AssetsSelection.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. using System.Collections.Generic;
  2. using System.IO;
  3. using UnityEditor.VersionControl;
  4. using PlasticGui.WorkspaceWindow.Items;
  5. using Unity.PlasticSCM.Editor.AssetsOverlays;
  6. using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
  7. namespace Unity.PlasticSCM.Editor.AssetMenu
  8. {
  9. internal static class AssetsSelection
  10. {
  11. internal static Asset GetSelectedAsset(AssetList assetList)
  12. {
  13. if (assetList.Count == 0)
  14. return null;
  15. return assetList[0];
  16. }
  17. internal static string GetSelectedPath(AssetList assetList)
  18. {
  19. if (assetList.Count == 0)
  20. return null;
  21. return Path.GetFullPath(assetList[0].path);
  22. }
  23. internal static List<string> GetSelectedPaths(AssetList selectedAssets)
  24. {
  25. List<string> result = new List<string>();
  26. foreach (Asset asset in selectedAssets)
  27. {
  28. string fullPath = Path.GetFullPath(asset.path);
  29. result.Add(fullPath);
  30. }
  31. return result;
  32. }
  33. internal static SelectedPathsGroupInfo GetSelectedPathsGroupInfo(
  34. AssetList selectedAssets,
  35. IAssetStatusCache assetStatusCache)
  36. {
  37. SelectedPathsGroupInfo result = new SelectedPathsGroupInfo();
  38. if (selectedAssets.Count == 0)
  39. return result;
  40. result.SelectedCount = selectedAssets.Count;
  41. result.IsRootSelected = false;
  42. result.IsCheckedoutEverySelected = true;
  43. result.IsDirectoryEverySelected = true;
  44. result.IsCheckedinEverySelected = true;
  45. result.IsChangedEverySelected = true;
  46. Asset firstAsset = selectedAssets[0];
  47. string firstAssetName = GetAssetName(firstAsset);
  48. AssetStatus firstStatus = GetAssetStatus(
  49. firstAsset,
  50. assetStatusCache);
  51. result.FirstIsControlled = ClassifyAssetStatus.IsControlled(firstStatus);
  52. result.FirstIsDirectory = firstAsset.isFolder;
  53. result.FilterInfo.CommonName = firstAssetName;
  54. result.FilterInfo.CommonExtension = Path.GetExtension(firstAssetName);
  55. result.FilterInfo.CommonFullPath = firstAsset.assetPath;
  56. foreach (Asset asset in selectedAssets)
  57. {
  58. string assetName = GetAssetName(asset);
  59. AssetStatus status = GetAssetStatus(
  60. asset,
  61. assetStatusCache);
  62. result.IsCheckedoutEverySelected &= ClassifyAssetStatus.IsCheckedOut(status);
  63. result.IsDirectoryEverySelected &= asset.isFolder;
  64. result.IsCheckedinEverySelected &= false; // TODO: not implemented yet
  65. result.IsChangedEverySelected &= false; // TODO: not implemented yet
  66. result.IsAnyDirectorySelected |= asset.isFolder;
  67. result.IsAnyPrivateSelected |= ClassifyAssetStatus.IsPrivate(status);
  68. result.FilterInfo.IsAnyIgnoredSelected |= ClassifyAssetStatus.IsIgnored(status);
  69. result.FilterInfo.IsAnyHiddenChangedSelected |= ClassifyAssetStatus.IsHiddenChanged(status);
  70. if (result.SelectedCount == 1)
  71. continue;
  72. if (result.FilterInfo.CommonName != assetName)
  73. result.FilterInfo.CommonName = null;
  74. if (result.FilterInfo.CommonExtension != Path.GetExtension(assetName))
  75. result.FilterInfo.CommonExtension = null;
  76. if (result.FilterInfo.CommonFullPath != asset.assetPath)
  77. result.FilterInfo.CommonFullPath = null;
  78. }
  79. return result;
  80. }
  81. static AssetStatus GetAssetStatus(Asset asset, IAssetStatusCache assetStatusCache)
  82. {
  83. string assetPath = Path.GetFullPath(asset.assetPath);
  84. if (MetaPath.IsMetaPath(assetPath))
  85. assetPath = MetaPath.GetPathFromMetaPath(assetPath);
  86. return assetStatusCache.GetStatusForPath(assetPath);
  87. }
  88. static string GetAssetName(Asset asset)
  89. {
  90. if (asset.isFolder)
  91. return Path.GetFileName(Path.GetDirectoryName(asset.path));
  92. return asset.fullName;
  93. }
  94. }
  95. }