142 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			142 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System.Collections.Generic; | ||
|  | using System.IO; | ||
|  | 
 | ||
|  | using UnityEditor.VersionControl; | ||
|  | 
 | ||
|  | using PlasticGui.WorkspaceWindow.Items; | ||
|  | using Unity.PlasticSCM.Editor.AssetsOverlays; | ||
|  | using Unity.PlasticSCM.Editor.AssetsOverlays.Cache; | ||
|  | using Unity.PlasticSCM.Editor.AssetUtils; | ||
|  | 
 | ||
|  | namespace Unity.PlasticSCM.Editor.AssetMenu | ||
|  | { | ||
|  |     internal static class AssetsSelection | ||
|  |     { | ||
|  |         internal static Asset GetSelectedAsset( | ||
|  |             string wkPath, | ||
|  |             AssetList assetList) | ||
|  |         { | ||
|  |             if (assetList.Count == 0) | ||
|  |                 return null; | ||
|  | 
 | ||
|  |             foreach (Asset asset in assetList) | ||
|  |             { | ||
|  |                 if (AssetsPath.GetFullPathUnderWorkspace. | ||
|  |                         ForAsset(wkPath, asset.path) == null) | ||
|  |                     continue; | ||
|  | 
 | ||
|  |                 return asset; | ||
|  |             } | ||
|  | 
 | ||
|  |             return null; | ||
|  |         } | ||
|  | 
 | ||
|  |         internal static string GetSelectedPath( | ||
|  |             string wkPath, | ||
|  |             AssetList assetList) | ||
|  |         { | ||
|  |             Asset result = GetSelectedAsset(wkPath, assetList); | ||
|  | 
 | ||
|  |             if (result == null) | ||
|  |                 return null; | ||
|  | 
 | ||
|  |             return Path.GetFullPath(result.path); | ||
|  |         } | ||
|  | 
 | ||
|  |         internal static List<string> GetSelectedPaths( | ||
|  |             string wkPath, | ||
|  |             IEnumerable<Asset> assetList) | ||
|  |         { | ||
|  |             List<string> result = new List<string>(); | ||
|  | 
 | ||
|  |             foreach (Asset asset in assetList) | ||
|  |             { | ||
|  |                 string fullPath = AssetsPath.GetFullPathUnderWorkspace. | ||
|  |                     ForAsset(wkPath, asset.path); | ||
|  | 
 | ||
|  |                 if (fullPath == null) | ||
|  |                     continue; | ||
|  | 
 | ||
|  |                 result.Add(fullPath); | ||
|  |             } | ||
|  | 
 | ||
|  |             return result; | ||
|  |         } | ||
|  | 
 | ||
|  |         internal static SelectedPathsGroupInfo GetSelectedPathsGroupInfo( | ||
|  |             string wkPath, | ||
|  |             AssetList assetList, | ||
|  |             IAssetStatusCache statusCache) | ||
|  |         { | ||
|  |             SelectedPathsGroupInfo result = new SelectedPathsGroupInfo(); | ||
|  | 
 | ||
|  |             if (assetList.Count == 0) | ||
|  |                 return result; | ||
|  | 
 | ||
|  |             result.IsRootSelected = false; | ||
|  |             result.IsCheckedoutEverySelected = true; | ||
|  |             result.IsDirectoryEverySelected = true; | ||
|  |             result.IsCheckedinEverySelected = true; | ||
|  |             result.IsChangedEverySelected = true; | ||
|  | 
 | ||
|  |             foreach (Asset asset in assetList) | ||
|  |             { | ||
|  |                 string fullPath = AssetsPath.GetFullPathUnderWorkspace. | ||
|  |                     ForAsset(wkPath, asset.path); | ||
|  | 
 | ||
|  |                 if (fullPath == null) | ||
|  |                     continue; | ||
|  | 
 | ||
|  |                 if (MetaPath.IsMetaPath(fullPath)) | ||
|  |                     fullPath = MetaPath.GetPathFromMetaPath(fullPath); | ||
|  | 
 | ||
|  |                 AssetStatus status = statusCache.GetStatus(fullPath); | ||
|  |                 string assetName = GetAssetName(asset); | ||
|  | 
 | ||
|  |                 result.IsCheckedoutEverySelected &= ClassifyAssetStatus.IsCheckedOut(status); | ||
|  |                 result.IsDirectoryEverySelected &= asset.isFolder; | ||
|  |                 result.IsCheckedinEverySelected &= false; // TODO: not implemented yet | ||
|  |                 result.IsChangedEverySelected &= false; // TODO: not implemented yet | ||
|  | 
 | ||
|  |                 result.IsAnyDirectorySelected |= asset.isFolder; | ||
|  |                 result.IsAnyPrivateSelected |= ClassifyAssetStatus.IsPrivate(status) || ClassifyAssetStatus.IsIgnored(status); | ||
|  | 
 | ||
|  |                 result.FilterInfo.IsAnyIgnoredSelected |= ClassifyAssetStatus.IsIgnored(status); | ||
|  |                 result.FilterInfo.IsAnyHiddenChangedSelected |= ClassifyAssetStatus.IsHiddenChanged(status); | ||
|  | 
 | ||
|  |                 result.SelectedCount++; | ||
|  | 
 | ||
|  |                 if (result.SelectedCount == 1) | ||
|  |                 { | ||
|  |                     result.FirstIsControlled = ClassifyAssetStatus.IsControlled(status); | ||
|  |                     result.FirstIsDirectory = asset.isFolder; | ||
|  | 
 | ||
|  |                     result.FilterInfo.CommonName = assetName; | ||
|  |                     result.FilterInfo.CommonExtension = Path.GetExtension(assetName); | ||
|  |                     result.FilterInfo.CommonFullPath = asset.assetPath; | ||
|  |                     continue; | ||
|  |                 } | ||
|  | 
 | ||
|  |                 if (result.FilterInfo.CommonName != assetName) | ||
|  |                     result.FilterInfo.CommonName = null; | ||
|  | 
 | ||
|  |                 if (result.FilterInfo.CommonExtension != Path.GetExtension(assetName)) | ||
|  |                     result.FilterInfo.CommonExtension = null; | ||
|  | 
 | ||
|  |                 if (result.FilterInfo.CommonFullPath != asset.assetPath) | ||
|  |                     result.FilterInfo.CommonFullPath = null; | ||
|  |             } | ||
|  | 
 | ||
|  |             return result; | ||
|  |         } | ||
|  | 
 | ||
|  |         static string GetAssetName(Asset asset) | ||
|  |         { | ||
|  |             if (asset.isFolder) | ||
|  |                 return Path.GetFileName(Path.GetDirectoryName(asset.path)); | ||
|  | 
 | ||
|  |             return asset.fullName; | ||
|  |         } | ||
|  |     } | ||
|  | } |