No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AssetsSelection.cs 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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. using Unity.PlasticSCM.Editor.AssetUtils;
  8. namespace Unity.PlasticSCM.Editor.AssetMenu
  9. {
  10. internal static class AssetsSelection
  11. {
  12. internal static Asset GetSelectedAsset(
  13. string wkPath,
  14. AssetList assetList)
  15. {
  16. if (assetList.Count == 0)
  17. return null;
  18. foreach (Asset asset in assetList)
  19. {
  20. if (AssetsPath.GetFullPathUnderWorkspace.
  21. ForAsset(wkPath, asset.path) == null)
  22. continue;
  23. return asset;
  24. }
  25. return null;
  26. }
  27. internal static string GetSelectedPath(
  28. string wkPath,
  29. AssetList assetList)
  30. {
  31. Asset result = GetSelectedAsset(wkPath, assetList);
  32. if (result == null)
  33. return null;
  34. return Path.GetFullPath(result.path);
  35. }
  36. internal static List<string> GetSelectedPaths(
  37. string wkPath,
  38. AssetList assetList)
  39. {
  40. List<string> result = new List<string>();
  41. foreach (Asset asset in assetList)
  42. {
  43. string fullPath = AssetsPath.GetFullPathUnderWorkspace.
  44. ForAsset(wkPath, asset.path);
  45. if (fullPath == null)
  46. continue;
  47. result.Add(fullPath);
  48. }
  49. return result;
  50. }
  51. internal static SelectedPathsGroupInfo GetSelectedPathsGroupInfo(
  52. string wkPath,
  53. AssetList assetList,
  54. IAssetStatusCache statusCache)
  55. {
  56. SelectedPathsGroupInfo result = new SelectedPathsGroupInfo();
  57. if (assetList.Count == 0)
  58. return result;
  59. result.IsRootSelected = false;
  60. result.IsCheckedoutEverySelected = true;
  61. result.IsDirectoryEverySelected = true;
  62. result.IsCheckedinEverySelected = true;
  63. result.IsChangedEverySelected = true;
  64. foreach (Asset asset in assetList)
  65. {
  66. string fullPath = AssetsPath.GetFullPathUnderWorkspace.
  67. ForAsset(wkPath, asset.path);
  68. if (fullPath == null)
  69. continue;
  70. if (MetaPath.IsMetaPath(fullPath))
  71. fullPath = MetaPath.GetPathFromMetaPath(fullPath);
  72. AssetStatus status = statusCache.GetStatus(fullPath);
  73. string assetName = GetAssetName(asset);
  74. result.IsCheckedoutEverySelected &= ClassifyAssetStatus.IsCheckedOut(status);
  75. result.IsDirectoryEverySelected &= asset.isFolder;
  76. result.IsCheckedinEverySelected &= false; // TODO: not implemented yet
  77. result.IsChangedEverySelected &= false; // TODO: not implemented yet
  78. result.IsAnyDirectorySelected |= asset.isFolder;
  79. result.IsAnyPrivateSelected |= ClassifyAssetStatus.IsPrivate(status) || ClassifyAssetStatus.IsIgnored(status);
  80. result.FilterInfo.IsAnyIgnoredSelected |= ClassifyAssetStatus.IsIgnored(status);
  81. result.FilterInfo.IsAnyHiddenChangedSelected |= ClassifyAssetStatus.IsHiddenChanged(status);
  82. result.SelectedCount++;
  83. if (result.SelectedCount == 1)
  84. {
  85. result.FirstIsControlled = ClassifyAssetStatus.IsControlled(status);
  86. result.FirstIsDirectory = asset.isFolder;
  87. result.FilterInfo.CommonName = assetName;
  88. result.FilterInfo.CommonExtension = Path.GetExtension(assetName);
  89. result.FilterInfo.CommonFullPath = asset.assetPath;
  90. continue;
  91. }
  92. if (result.FilterInfo.CommonName != assetName)
  93. result.FilterInfo.CommonName = null;
  94. if (result.FilterInfo.CommonExtension != Path.GetExtension(assetName))
  95. result.FilterInfo.CommonExtension = null;
  96. if (result.FilterInfo.CommonFullPath != asset.assetPath)
  97. result.FilterInfo.CommonFullPath = null;
  98. }
  99. return result;
  100. }
  101. static string GetAssetName(Asset asset)
  102. {
  103. if (asset.isFolder)
  104. return Path.GetFileName(Path.GetDirectoryName(asset.path));
  105. return asset.fullName;
  106. }
  107. }
  108. }