A game about forced loneliness, made by TACStudios
1using System;
2using System.Collections.Generic;
3using System.Collections.ObjectModel;
4
5using UnityEditor.VersionControl;
6
7using Codice.Client.Common.Threading;
8using Codice.CM.Common;
9using Codice.LogWrapper;
10using PlasticGui;
11using Unity.PlasticSCM.Editor.AssetUtils;
12using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
13using Unity.PlasticSCM.Editor.AssetMenu;
14using Unity.PlasticSCM.Editor.AssetUtils.Processor;
15
16using PlasticAssetModificationProcessor = Unity.PlasticSCM.Editor.AssetUtils.Processor.AssetModificationProcessor;
17
18namespace Unity.PlasticSCM.Editor.SceneView
19{
20 static class DrawSceneOperations
21 {
22 internal static void Enable(
23 WorkspaceInfo wkInfo,
24 IPlasticAPI plasticApi,
25 IWorkspaceOperationsMonitor workspaceOperationsMonitor,
26 IAssetStatusCache assetStatusCache)
27 {
28 if (mIsEnabled)
29 return;
30
31 mLog.Debug("Enable");
32
33 mWkInfo = wkInfo;
34 mPlasticAPI = plasticApi;
35 mWorkspaceOperationsMonitor = workspaceOperationsMonitor;
36 mAssetStatusCache = assetStatusCache;
37
38 mIsEnabled = true;
39
40 Provider.preCheckoutCallback += Provider_preCheckoutCallback;
41 }
42
43 internal static void Disable()
44 {
45 mLog.Debug("Disable");
46
47 mIsEnabled = false;
48
49 Provider.preCheckoutCallback -= Provider_preCheckoutCallback;
50
51 mWkInfo = null;
52 mPlasticAPI = null;
53 mWorkspaceOperationsMonitor = null;
54 mAssetStatusCache = null;
55 }
56
57 static bool Provider_preCheckoutCallback(
58 AssetList list,
59 ref string changesetID,
60 ref string changesetDescription)
61 {
62 try
63 {
64 if (!mIsEnabled)
65 return true;
66
67 List<Asset> assets = GetUnmodifiedAssets(
68 list, PlasticAssetModificationProcessor.GetModifiedAssetsToProcess());
69
70 if (assets.Count == 0)
71 return true;
72
73 List<string> selectedPaths = GetSelectedPaths.ForOperation(
74 mWkInfo, assets, mPlasticAPI, mAssetStatusCache,
75 AssetMenuOperations.Checkout);
76
77 if (selectedPaths.Count == 0)
78 return true;
79
80 mWorkspaceOperationsMonitor.AddPathsToCheckout(selectedPaths);
81 }
82 catch (Exception ex)
83 {
84 ExceptionsHandler.LogException(typeof(DrawSceneOperations).Name, ex);
85 }
86
87 return true;
88 }
89
90 static List<Asset> GetUnmodifiedAssets(
91 AssetList assetList,
92 ReadOnlyCollection<string> modifiedAssetsToProcess)
93 {
94 List<Asset> result = new List<Asset>(assetList.Count);
95
96 foreach (Asset asset in assetList)
97 {
98 if (modifiedAssetsToProcess.Contains(asset.path))
99 continue;
100
101 result.Add(asset);
102 }
103
104 return result;
105 }
106
107 static bool mIsEnabled;
108 static IAssetStatusCache mAssetStatusCache;
109 static IWorkspaceOperationsMonitor mWorkspaceOperationsMonitor;
110 static IPlasticAPI mPlasticAPI;
111 static WorkspaceInfo mWkInfo;
112
113 static readonly ILog mLog = PlasticApp.GetLogger("DrawSceneOperations");
114 }
115}