A game about forced loneliness, made by TACStudios
1using System.Collections.Generic; 2using System.IO; 3 4using UnityEditor.VersionControl; 5 6using PlasticGui.WorkspaceWindow.Items; 7using Unity.PlasticSCM.Editor.AssetsOverlays; 8using Unity.PlasticSCM.Editor.AssetsOverlays.Cache; 9using Unity.PlasticSCM.Editor.AssetUtils; 10 11namespace Unity.PlasticSCM.Editor.AssetMenu 12{ 13 internal static class AssetsSelection 14 { 15 internal static Asset GetSelectedAsset( 16 string wkPath, 17 AssetList assetList) 18 { 19 if (assetList.Count == 0) 20 return null; 21 22 foreach (Asset asset in assetList) 23 { 24 if (AssetsPath.GetFullPathUnderWorkspace. 25 ForAsset(wkPath, asset.path) == null) 26 continue; 27 28 return asset; 29 } 30 31 return null; 32 } 33 34 internal static string GetSelectedPath( 35 string wkPath, 36 AssetList assetList) 37 { 38 Asset result = GetSelectedAsset(wkPath, assetList); 39 40 if (result == null) 41 return null; 42 43 return Path.GetFullPath(result.path); 44 } 45 46 internal static List<string> GetSelectedPaths( 47 string wkPath, 48 IEnumerable<Asset> assetList) 49 { 50 List<string> result = new List<string>(); 51 52 foreach (Asset asset in assetList) 53 { 54 string fullPath = AssetsPath.GetFullPathUnderWorkspace. 55 ForAsset(wkPath, asset.path); 56 57 if (fullPath == null) 58 continue; 59 60 result.Add(fullPath); 61 } 62 63 return result; 64 } 65 66 internal static SelectedPathsGroupInfo GetSelectedPathsGroupInfo( 67 string wkPath, 68 AssetList assetList, 69 IAssetStatusCache statusCache) 70 { 71 SelectedPathsGroupInfo result = new SelectedPathsGroupInfo(); 72 73 if (assetList.Count == 0) 74 return result; 75 76 result.IsRootSelected = false; 77 result.IsCheckedoutEverySelected = true; 78 result.IsDirectoryEverySelected = true; 79 result.IsCheckedinEverySelected = true; 80 result.IsChangedEverySelected = true; 81 82 foreach (Asset asset in assetList) 83 { 84 string fullPath = AssetsPath.GetFullPathUnderWorkspace. 85 ForAsset(wkPath, asset.path); 86 87 if (fullPath == null) 88 continue; 89 90 if (MetaPath.IsMetaPath(fullPath)) 91 fullPath = MetaPath.GetPathFromMetaPath(fullPath); 92 93 AssetStatus status = statusCache.GetStatus(fullPath); 94 string assetName = GetAssetName(asset); 95 96 result.IsCheckedoutEverySelected &= ClassifyAssetStatus.IsCheckedOut(status); 97 result.IsDirectoryEverySelected &= asset.isFolder; 98 result.IsCheckedinEverySelected &= false; // TODO: not implemented yet 99 result.IsChangedEverySelected &= false; // TODO: not implemented yet 100 101 result.IsAnyDirectorySelected |= asset.isFolder; 102 result.IsAnyPrivateSelected |= ClassifyAssetStatus.IsPrivate(status) || ClassifyAssetStatus.IsIgnored(status); 103 104 result.FilterInfo.IsAnyIgnoredSelected |= ClassifyAssetStatus.IsIgnored(status); 105 result.FilterInfo.IsAnyHiddenChangedSelected |= ClassifyAssetStatus.IsHiddenChanged(status); 106 107 result.SelectedCount++; 108 109 if (result.SelectedCount == 1) 110 { 111 result.FirstIsControlled = ClassifyAssetStatus.IsControlled(status); 112 result.FirstIsDirectory = asset.isFolder; 113 114 result.FilterInfo.CommonName = assetName; 115 result.FilterInfo.CommonExtension = Path.GetExtension(assetName); 116 result.FilterInfo.CommonFullPath = asset.assetPath; 117 continue; 118 } 119 120 if (result.FilterInfo.CommonName != assetName) 121 result.FilterInfo.CommonName = null; 122 123 if (result.FilterInfo.CommonExtension != Path.GetExtension(assetName)) 124 result.FilterInfo.CommonExtension = null; 125 126 if (result.FilterInfo.CommonFullPath != asset.assetPath) 127 result.FilterInfo.CommonFullPath = null; 128 } 129 130 return result; 131 } 132 133 static string GetAssetName(Asset asset) 134 { 135 if (asset.isFolder) 136 return Path.GetFileName(Path.GetDirectoryName(asset.path)); 137 138 return asset.fullName; 139 } 140 } 141}