123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- using System.IO;
- using System.Collections.Generic;
-
- using UnityEditor;
- using UnityEditor.VersionControl;
-
- using Codice.Client.BaseCommands;
- using Codice.Client.Commands;
- using Codice.Client.Commands.WkTree;
- using Codice.Client.Common;
- using Codice.Client.Common.EventTracking;
- using Codice.Client.Common.Threading;
- using Codice.CM.Common;
- using GluonGui;
- using PlasticGui;
- using PlasticGui.Gluon;
- using PlasticGui.WorkspaceWindow;
- using PlasticGui.WorkspaceWindow.Diff;
- using PlasticGui.WorkspaceWindow.Items;
- using Unity.PlasticSCM.Editor.AssetMenu.Dialogs;
- using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
- using Unity.PlasticSCM.Editor.AssetUtils;
- using Unity.PlasticSCM.Editor.AssetUtils.Processor;
- using Unity.PlasticSCM.Editor.Tool;
- using Unity.PlasticSCM.Editor.UI;
- using Unity.PlasticSCM.Editor.Views.PendingChanges.Dialogs;
-
- using GluonCheckoutOperation = GluonGui.WorkspaceWindow.Views.WorkspaceExplorer.Explorer.Operations.CheckoutOperation;
- using GluonUndoCheckoutOperation = GluonGui.WorkspaceWindow.Views.WorkspaceExplorer.Explorer.Operations.UndoCheckoutOperation;
- using GluonAddoperation = GluonGui.WorkspaceWindow.Views.WorkspaceExplorer.Explorer.Operations.AddOperation;
-
- namespace Unity.PlasticSCM.Editor.AssetMenu
- {
- internal class AssetOperations :
- IAssetMenuOperations,
- IAssetFilesFilterPatternsMenuOperations
- {
- internal interface IAssetSelection
- {
- AssetList GetSelectedAssets();
- }
-
- internal AssetOperations(
- WorkspaceInfo wkInfo,
- IWorkspaceWindow workspaceWindow,
- IViewSwitcher viewSwitcher,
- IHistoryViewLauncher historyViewLauncher,
- ViewHost viewHost,
- WorkspaceOperationsMonitor workspaceOperationsMonitor,
- NewIncomingChangesUpdater newIncomingChangesUpdater,
- IAssetStatusCache assetStatusCache,
- IMergeViewLauncher mergeViewLauncher,
- IGluonViewSwitcher gluonViewSwitcher,
- IAssetSelection assetSelection,
- LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
- bool isGluonMode)
- {
- mWkInfo = wkInfo;
- mWorkspaceWindow = workspaceWindow;
- mViewSwitcher = viewSwitcher;
- mHistoryViewLauncher = historyViewLauncher;
- mViewHost = viewHost;
- mWorkspaceOperationsMonitor = workspaceOperationsMonitor;
- mNewIncomingChangesUpdater = newIncomingChangesUpdater;
- mAssetStatusCache = assetStatusCache;
- mMergeViewLauncher = mergeViewLauncher;
- mGluonViewSwitcher = gluonViewSwitcher;
- mAssetSelection = assetSelection;
- mShowDownloadPlasticExeWindow = showDownloadPlasticExeWindow;
- mIsGluonMode = isGluonMode;
-
- mGuiMessage = new UnityPlasticGuiMessage();
- mProgressControls = new EditorProgressControls(mGuiMessage);
- }
-
- void IAssetMenuOperations.ShowPendingChanges()
- {
- mViewSwitcher.ShowPendingChanges();
- }
-
- void IAssetMenuOperations.Add()
- {
- List<string> selectedPaths = GetSelectedPaths.ForOperation(
- mWkInfo.ClientPath,
- mAssetSelection.GetSelectedAssets(),
- mAssetStatusCache,
- AssetMenuOperations.Add);
-
- if (mIsGluonMode)
- {
- GluonAddoperation.Add(
- mViewHost,
- mProgressControls,
- mGuiMessage,
- selectedPaths.ToArray(),
- false,
- RefreshAsset.VersionControlCache);
- return;
- }
-
- AddOperation.Run(
- mWorkspaceWindow,
- mProgressControls,
- null,
- null,
- selectedPaths,
- false,
- mNewIncomingChangesUpdater,
- RefreshAsset.VersionControlCache);
- }
-
- void IAssetMenuOperations.Checkout()
- {
- List<string> selectedPaths = GetSelectedPaths.ForOperation(
- mWkInfo.ClientPath,
- mAssetSelection.GetSelectedAssets(),
- mAssetStatusCache,
- AssetMenuOperations.Checkout);
-
- if (mIsGluonMode)
- {
- GluonCheckoutOperation.Checkout(
- mViewHost,
- mProgressControls,
- mGuiMessage,
- selectedPaths.ToArray(),
- false,
- RefreshAsset.VersionControlCache,
- mWkInfo);
- return;
- }
-
- CheckoutOperation.Checkout(
- mWorkspaceWindow,
- null,
- mProgressControls,
- selectedPaths,
- mNewIncomingChangesUpdater,
- RefreshAsset.VersionControlCache,
- mWkInfo);
- }
-
- void IAssetMenuOperations.Checkin()
- {
- List<string> selectedPaths = GetSelectedPaths.ForOperation(
- mWkInfo.ClientPath,
- mAssetSelection.GetSelectedAssets(),
- mAssetStatusCache,
- AssetMenuOperations.Checkin);
-
- if (!CheckinDialog.CheckinPaths(
- mWkInfo,
- selectedPaths,
- mAssetStatusCache,
- mIsGluonMode,
- mWorkspaceWindow,
- mViewHost,
- mWorkspaceOperationsMonitor,
- mGuiMessage,
- mMergeViewLauncher,
- mGluonViewSwitcher))
- return;
-
- RefreshAsset.UnityAssetDatabase();
- }
-
- void IAssetMenuOperations.Undo()
- {
- List<string> selectedPaths = GetSelectedPaths.ForOperation(
- mWkInfo.ClientPath,
- mAssetSelection.GetSelectedAssets(),
- mAssetStatusCache,
- AssetMenuOperations.Undo);
-
- SaveAssets.ForPathsWithoutConfirmation(
- selectedPaths, mWorkspaceOperationsMonitor);
-
- if (mIsGluonMode)
- {
- GluonUndoCheckoutOperation.UndoCheckout(
- mWkInfo,
- mViewHost,
- mProgressControls,
- selectedPaths.ToArray(),
- false,
- RefreshAsset.UnityAssetDatabase);
- return;
- }
-
- UndoCheckoutOperation.Run(
- mWorkspaceWindow,
- null,
- mProgressControls,
- selectedPaths,
- mNewIncomingChangesUpdater,
- RefreshAsset.UnityAssetDatabase);
- }
-
- void IAssetMenuOperations.ShowDiff()
- {
- if (mShowDownloadPlasticExeWindow.Show(
- mWkInfo,
- mIsGluonMode,
- TrackFeatureUseEvent.Features.InstallPlasticCloudFromShowDiff,
- TrackFeatureUseEvent.Features.InstallPlasticEnterpriseFromFromShowDiff,
- TrackFeatureUseEvent.Features.CancelPlasticInstallationFromFromShowDiff))
- return;
-
- string selectedPath = AssetsSelection.GetSelectedPath(
- mWkInfo.ClientPath,
- mAssetSelection.GetSelectedAssets());
-
- DiffInfo diffInfo = null;
-
- IThreadWaiter waiter = ThreadWaiter.GetWaiter(10);
- waiter.Execute(
- /*threadOperationDelegate*/ delegate
- {
- string symbolicName = GetSymbolicName(selectedPath);
- string extension = Path.GetExtension(selectedPath);
-
- diffInfo = PlasticGui.Plastic.API.BuildDiffInfoForDiffWithPrevious(
- selectedPath, symbolicName, selectedPath, extension, mWkInfo);
- },
- /*afterOperationDelegate*/ delegate
- {
- if (waiter.Exception != null)
- {
- ExceptionsHandler.DisplayException(waiter.Exception);
- return;
- }
-
- DiffOperation.DiffWithPrevious(
- diffInfo,
- null,
- null);
- });
- }
-
- void IAssetMenuOperations.ShowHistory()
- {
- if (mShowDownloadPlasticExeWindow.Show(
- mWkInfo,
- mIsGluonMode,
- TrackFeatureUseEvent.Features.InstallPlasticCloudFromShowHistory,
- TrackFeatureUseEvent.Features.InstallPlasticEnterpriseFromShowHistory,
- TrackFeatureUseEvent.Features.CancelPlasticInstallationFromShowHistory))
- return;
-
- Asset selectedAsset = AssetsSelection.GetSelectedAsset(
- mWkInfo.ClientPath,
- mAssetSelection.GetSelectedAssets());
-
- string selectedPath = Path.GetFullPath(selectedAsset.path);
-
- WorkspaceTreeNode node = PlasticGui.Plastic.API.
- GetWorkspaceTreeNode(selectedPath);
-
- mHistoryViewLauncher.ShowHistoryView(
- node.RepSpec,
- node.RevInfo.ItemId,
- selectedPath,
- selectedAsset.isFolder);
- }
-
- void IAssetFilesFilterPatternsMenuOperations.AddFilesFilterPatterns(
- FilterTypes type,
- FilterActions action,
- FilterOperationType operation)
- {
- List<string> selectedPaths = AssetsSelection.GetSelectedPaths(
- mWkInfo.ClientPath,
- mAssetSelection.GetSelectedAssets());
-
- string[] rules = FilterRulesGenerator.GenerateRules(
- selectedPaths, mWkInfo.ClientPath, action, operation);
-
- bool isApplicableToAllWorkspaces = !mIsGluonMode;
- bool isAddOperation = operation == FilterOperationType.Add;
-
- FilterRulesConfirmationData filterRulesConfirmationData =
- FilterRulesConfirmationDialog.AskForConfirmation(
- rules, isAddOperation, isApplicableToAllWorkspaces, null);
-
- AddFilesFilterPatternsOperation.Run(
- mWkInfo, mWorkspaceWindow, type, operation, filterRulesConfirmationData);
- }
-
- static string GetSymbolicName(string selectedPath)
- {
- WorkspaceTreeNode node = PlasticGui.Plastic.API.
- GetWorkspaceTreeNode(selectedPath);
-
- string branchName = string.Empty;
- BranchInfoCache.TryGetBranchName(
- node.RepSpec, node.RevInfo.BranchId, out branchName);
-
- string userName = PlasticGui.Plastic.API.GetUserName(
- node.RepSpec.Server, node.RevInfo.Owner);
-
- string symbolicName = string.Format(
- "cs:{0}@{1} {2} {3}",
- node.RevInfo.Changeset,
- string.Format("br:{0}", branchName),
- userName,
- "Workspace Revision");
-
- return symbolicName;
- }
-
- readonly WorkspaceInfo mWkInfo;
- readonly IViewSwitcher mViewSwitcher;
- readonly IHistoryViewLauncher mHistoryViewLauncher;
- readonly IWorkspaceWindow mWorkspaceWindow;
- readonly ViewHost mViewHost;
- readonly WorkspaceOperationsMonitor mWorkspaceOperationsMonitor;
- readonly NewIncomingChangesUpdater mNewIncomingChangesUpdater;
- readonly IAssetStatusCache mAssetStatusCache;
- readonly IMergeViewLauncher mMergeViewLauncher;
- readonly IGluonViewSwitcher mGluonViewSwitcher;
- readonly bool mIsGluonMode;
- readonly GuiMessage.IGuiMessage mGuiMessage;
- readonly EditorProgressControls mProgressControls;
- readonly IAssetSelection mAssetSelection;
- readonly LaunchTool.IShowDownloadPlasticExeWindow mShowDownloadPlasticExeWindow;
- }
- }
|