123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- using System;
- using JetBrains.Annotations;
- using Unity.Cloud.Collaborate.Models.Api;
- using Unity.Cloud.Collaborate.Models.Structures;
- using Unity.Cloud.Collaborate.UserInterface;
- using UnityEngine.Assertions;
- namespace Unity.Cloud.Collaborate.Models
- {
- internal class MainModel : IMainModel
- {
- [NotNull]
- readonly ISourceControlProvider m_Provider;
- /// <inheritdoc />
- public event Action<bool> ConflictStatusChange;
- /// <inheritdoc />
- public event Action<bool> OperationStatusChange;
- /// <inheritdoc />
- public event Action<IProgressInfo> OperationProgressChange;
- /// <inheritdoc />
- public event Action<IErrorInfo> ErrorOccurred;
- /// <inheritdoc />
- public event Action ErrorCleared;
- /// <inheritdoc />
- public event Action<bool> RemoteRevisionsAvailabilityChange;
- /// <inheritdoc />
- public event Action<string> BackButtonStateUpdated;
- /// <inheritdoc />
- public event Action StateChanged;
- [NotNull]
- readonly IHistoryModel m_HistoryModel;
- [NotNull]
- readonly IChangesModel m_ChangesModel;
- (string id, string text, Action backEvent)? m_BackNavigation;
- public MainModel([NotNull] ISourceControlProvider provider)
- {
- m_Provider = provider;
- m_HistoryModel = new HistoryModel(m_Provider);
- m_ChangesModel = new ChangesModel(m_Provider);
- }
- /// <inheritdoc />
- public void OnStart()
- {
- // Setup events
- m_Provider.UpdatedOperationStatus += OnUpdatedOperationStatus;
- m_Provider.UpdatedOperationProgress += OnUpdatedOperationProgress;
- m_Provider.ErrorOccurred += OnErrorOccurred;
- m_Provider.ErrorCleared += OnErrorCleared;
- m_Provider.UpdatedConflictState += OnUpdatedConflictState;
- m_Provider.UpdatedRemoteRevisionsAvailability += OnUpdatedRemoteRevisionsAvailability;
- // Propagate event to "child" models.
- m_HistoryModel.OnStart();
- m_ChangesModel.OnStart();
- }
- /// <inheritdoc />
- public void OnStop()
- {
- // Clean up.
- m_Provider.UpdatedOperationStatus -= OnUpdatedOperationStatus;
- m_Provider.UpdatedOperationProgress -= OnUpdatedOperationProgress;
- m_Provider.ErrorOccurred -= OnErrorOccurred;
- m_Provider.ErrorCleared -= OnErrorCleared;
- m_Provider.UpdatedConflictState -= OnUpdatedConflictState;
- m_Provider.UpdatedRemoteRevisionsAvailability -= OnUpdatedRemoteRevisionsAvailability;
- // Propagate event to "child" models.
- m_HistoryModel.OnStop();
- m_ChangesModel.OnStop();
- }
- /// <inheritdoc />
- public void RestoreState(IWindowCache cache)
- {
- // Read in cached data.
- CurrentTabIndex = cache.TabIndex;
- StateChanged?.Invoke();
- // Propagate restore call to "child" models.
- m_HistoryModel.RestoreState(cache);
- m_ChangesModel.RestoreState(cache);
- }
- /// <inheritdoc />
- public void SaveState(IWindowCache cache)
- {
- // Cache data.
- cache.TabIndex = CurrentTabIndex;
- // Propagate save call to "child" models.
- m_HistoryModel.SaveState(cache);
- m_ChangesModel.SaveState(cache);
- }
- /// <inheritdoc />
- public bool RemoteRevisionsAvailable => m_Provider.GetRemoteRevisionAvailability();
- /// <inheritdoc />
- public bool Conflicted => m_Provider.GetConflictedState();
- /// <inheritdoc />
- public IProgressInfo ProgressInfo => m_Provider.GetProgressState();
- /// <inheritdoc />
- public IErrorInfo ErrorInfo => m_Provider.GetErrorState();
- /// <inheritdoc />
- public int CurrentTabIndex { get; set; }
- /// <inheritdoc />
- public IHistoryModel ConstructHistoryModel()
- {
- return m_HistoryModel;
- }
- /// <inheritdoc />
- public IChangesModel ConstructChangesModel()
- {
- return m_ChangesModel;
- }
- /// <inheritdoc />
- public void ClearError()
- {
- m_Provider.ClearError();
- }
- /// <inheritdoc />
- public void RequestSync()
- {
- m_Provider.RequestSync();
- }
- /// <inheritdoc />
- public void RequestCancelJob()
- {
- m_Provider.RequestCancelJob();
- }
- /// <inheritdoc />
- public (string id, string text, Action backAction)? GetBackNavigation()
- {
- return m_BackNavigation;
- }
- /// <inheritdoc />
- public void RegisterBackNavigation(string id, string text, Action backAction)
- {
- Assert.IsTrue(m_BackNavigation == null, "There should only be one back navigation registered at a time.");
- m_BackNavigation = (id, text, backAction);
- BackButtonStateUpdated?.Invoke(text);
- }
- /// <inheritdoc />
- public bool UnregisterBackNavigation(string id)
- {
- if (m_BackNavigation?.id != id) return false;
- m_BackNavigation = null;
- BackButtonStateUpdated?.Invoke(null);
- return true;
- }
- /// <summary>
- /// Event handler for when the availability of remote revisions changes.
- /// </summary>
- /// <param name="available">New availability status.</param>
- void OnUpdatedRemoteRevisionsAvailability(bool available)
- {
- RemoteRevisionsAvailabilityChange?.Invoke(available);
- }
- /// <summary>
- /// Event handler for when the conflicted status changes.
- /// </summary>
- /// <param name="conflicted">New conflicted status.</param>
- void OnUpdatedConflictState(bool conflicted)
- {
- ConflictStatusChange?.Invoke(conflicted);
- }
- void OnUpdatedOperationStatus(bool inProgress)
- {
- OperationStatusChange?.Invoke(inProgress);
- }
- void OnUpdatedOperationProgress(IProgressInfo progressInfo)
- {
- OperationProgressChange?.Invoke(progressInfo);
- }
- void OnErrorOccurred(IErrorInfo errorInfo)
- {
- ErrorOccurred?.Invoke(errorInfo);
- }
- void OnErrorCleared()
- {
- ErrorCleared?.Invoke();
- }
- }
- }
|