LocalStatusCache.cs 2.2 KB

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