A game about forced loneliness, made by TACStudios
1using System.Collections.Generic;
2
3using Codice;
4using Codice.Client.BaseCommands;
5using Codice.Client.Commands.WkTree;
6using PlasticGui.WorkspaceWindow;
7
8namespace Unity.PlasticSCM.Editor.AssetsOverlays.Cache
9{
10 internal class LocalStatusCache
11 {
12 internal AssetStatus GetStatus(string fullPath)
13 {
14 AssetStatus result;
15
16 if (mStatusByPathCache.TryGetValue(fullPath, out result))
17 return result;
18
19 result = CalculateStatus(
20 fullPath,
21 FilterManager.Get().GetIgnoredFilter(),
22 FilterManager.Get().GetHiddenChangesFilter());
23
24 mStatusByPathCache.Add(fullPath, result);
25
26 return result;
27 }
28
29 internal void Clear()
30 {
31 mStatusByPathCache.Clear();
32 }
33
34 static AssetStatus CalculateStatus(
35 string fullPath,
36 IgnoredFilesFilter ignoredFilter,
37 HiddenChangesFilesFilter hiddenChangesFilter)
38 {
39 WorkspaceTreeNode treeNode = PlasticGui.Plastic.API.GetWorkspaceTreeNode(fullPath);
40
41 if (CheckWorkspaceTreeNodeStatus.IsPrivate(treeNode))
42 {
43 return ignoredFilter.IsIgnored(fullPath) ?
44 AssetStatus.Ignored : AssetStatus.Private;
45 }
46
47 if (CheckWorkspaceTreeNodeStatus.IsAdded(treeNode))
48 return AssetStatus.Added;
49
50 AssetStatus result = AssetStatus.Controlled;
51
52 if (CheckWorkspaceTreeNodeStatus.IsCheckedOut(treeNode) &&
53 !CheckWorkspaceTreeNodeStatus.IsDirectory(treeNode))
54 result |= AssetStatus.Checkout;
55
56 if (hiddenChangesFilter.IsHiddenChanged(fullPath))
57 result |= AssetStatus.HiddenChanged;
58
59 return result;
60 }
61
62 Dictionary<string, AssetStatus> mStatusByPathCache =
63 BuildPathDictionary.ForPlatform<AssetStatus>();
64 }
65}