76 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			76 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System.Collections.Generic; | ||
|  | 
 | ||
|  | using Codice; | ||
|  | using Codice.CM.Common; | ||
|  | using Codice.Client.BaseCommands; | ||
|  | using Codice.Client.Commands.WkTree; | ||
|  | using PlasticGui.WorkspaceWindow; | ||
|  | 
 | ||
|  | namespace Unity.PlasticSCM.Editor.AssetsOverlays.Cache | ||
|  | { | ||
|  |     internal class LocalStatusCache | ||
|  |     { | ||
|  |         internal LocalStatusCache(WorkspaceInfo wkInfo) | ||
|  |         { | ||
|  |             mWkInfo = wkInfo; | ||
|  |         } | ||
|  | 
 | ||
|  |         internal AssetStatus GetStatus(string fullPath) | ||
|  |         { | ||
|  |             AssetStatus result; | ||
|  | 
 | ||
|  |             if (mStatusByPathCache.TryGetValue(fullPath, out result)) | ||
|  |                 return result; | ||
|  | 
 | ||
|  |             result = CalculateStatus( | ||
|  |                 mWkInfo, | ||
|  |                 fullPath, | ||
|  |                 FilterManager.Get().GetIgnoredFilter(), | ||
|  |                 FilterManager.Get().GetHiddenChangesFilter()); | ||
|  | 
 | ||
|  |             mStatusByPathCache.Add(fullPath, result); | ||
|  | 
 | ||
|  |             return result; | ||
|  |         } | ||
|  | 
 | ||
|  |         internal void Clear() | ||
|  |         { | ||
|  |             mStatusByPathCache.Clear(); | ||
|  |         } | ||
|  | 
 | ||
|  |         static AssetStatus CalculateStatus( | ||
|  |             WorkspaceInfo wkInfo, | ||
|  |             string fullPath, | ||
|  |             IgnoredFilesFilter ignoredFilter, | ||
|  |             HiddenChangesFilesFilter hiddenChangesFilter) | ||
|  |         { | ||
|  |             WorkspaceTreeNode treeNode = PlasticGui.Plastic.API.GetWorkspaceTreeNode( | ||
|  |                 wkInfo, fullPath); | ||
|  | 
 | ||
|  |             if (CheckWorkspaceTreeNodeStatus.IsPrivate(treeNode)) | ||
|  |             { | ||
|  |                 return ignoredFilter.IsIgnored(fullPath) ? | ||
|  |                     AssetStatus.Ignored : AssetStatus.Private; | ||
|  |             } | ||
|  | 
 | ||
|  |             if (CheckWorkspaceTreeNodeStatus.IsAdded(treeNode)) | ||
|  |                 return AssetStatus.Added; | ||
|  | 
 | ||
|  |             AssetStatus result = AssetStatus.Controlled; | ||
|  | 
 | ||
|  |             if (CheckWorkspaceTreeNodeStatus.IsCheckedOut(treeNode) && | ||
|  |                 !CheckWorkspaceTreeNodeStatus.IsDirectory(treeNode)) | ||
|  |                 result |= AssetStatus.Checkout; | ||
|  | 
 | ||
|  |             if (hiddenChangesFilter.IsHiddenChanged(fullPath)) | ||
|  |                 result |= AssetStatus.HiddenChanged; | ||
|  | 
 | ||
|  |             return result; | ||
|  |         } | ||
|  | 
 | ||
|  |         readonly WorkspaceInfo mWkInfo; | ||
|  |         readonly Dictionary<string, AssetStatus> mStatusByPathCache = | ||
|  |             BuildPathDictionary.ForPlatform<AssetStatus>(); | ||
|  |     } | ||
|  | } |