|
@@ -10,27 +10,18 @@ using Terra.Arbitrator.Settings;
|
|
|
using Terra.Arbitrator.Services;
|
|
|
using Terra.Arbitrator.Promises;
|
|
|
using System.Collections.Generic;
|
|
|
-using UnityEngine;
|
|
|
|
|
|
namespace Terra.Arbitrator.GUI
|
|
|
{
|
|
|
public class ArbitratorController
|
|
|
{
|
|
|
- // --- Private State ---
|
|
|
private List<GitChange> _changes = new();
|
|
|
- private string _infoMessage;
|
|
|
- private string _errorMessage;
|
|
|
- private bool _isLoading;
|
|
|
- private string _loadingMessage = "";
|
|
|
-
|
|
|
- // --- Public Properties for the View ---
|
|
|
public IReadOnlyList<GitChange> Changes => _changes;
|
|
|
- public string InfoMessage => _infoMessage;
|
|
|
- public string ErrorMessage => _errorMessage;
|
|
|
- public bool IsLoading => _isLoading;
|
|
|
- public string LoadingMessage => _loadingMessage;
|
|
|
+ public string InfoMessage { get; private set; }
|
|
|
+ public string ErrorMessage { get; private set; }
|
|
|
+ public bool IsLoading { get; private set; }
|
|
|
+ public string LoadingMessage { get; private set; } = "";
|
|
|
|
|
|
- // --- Communication with the View ---
|
|
|
private readonly Action _requestRepaint;
|
|
|
private readonly Func<string, string, bool> _displayDialog;
|
|
|
|
|
@@ -44,16 +35,13 @@ namespace Terra.Arbitrator.GUI
|
|
|
_requestRepaint = requestRepaint;
|
|
|
_displayDialog = displayDialog;
|
|
|
}
|
|
|
-
|
|
|
- // --- Public Methods (called by the View) ---
|
|
|
-
|
|
|
+
|
|
|
public void OnEnable()
|
|
|
{
|
|
|
- // This logic is moved from ArbitratorWindow.OnEnable
|
|
|
if (SessionState.GetBool(BetterGitStatePersistence.ResetQueueKey, false))
|
|
|
{
|
|
|
SessionState.EraseString(BetterGitStatePersistence.ResetQueueKey);
|
|
|
- _infoMessage = "Multi-file reset complete. Pulling again to confirm...";
|
|
|
+ InfoMessage = "Multi-file reset complete. Pulling again to confirm...";
|
|
|
Pull();
|
|
|
}
|
|
|
else
|
|
@@ -75,7 +63,7 @@ namespace Terra.Arbitrator.GUI
|
|
|
|
|
|
public void Pull()
|
|
|
{
|
|
|
- if (_isLoading) return;
|
|
|
+ if (IsLoading) return;
|
|
|
StartOperation("Analyzing for conflicts...");
|
|
|
|
|
|
GitService.AnalyzePullConflicts()
|
|
@@ -83,8 +71,7 @@ namespace Terra.Arbitrator.GUI
|
|
|
{
|
|
|
if (analysisResult.HasConflicts)
|
|
|
{
|
|
|
- // This part is synchronous UI, so it stays.
|
|
|
- FinishOperation(); // Stop loading while modal is open
|
|
|
+ FinishOperation();
|
|
|
ConflictResolutionWindow.ShowWindow(analysisResult.ConflictingFiles, filesToActOn =>
|
|
|
{
|
|
|
if (filesToActOn == null) return;
|
|
@@ -98,7 +85,7 @@ namespace Terra.Arbitrator.GUI
|
|
|
GitService.PerformSafePull()
|
|
|
.Then(successMessage =>
|
|
|
{
|
|
|
- _infoMessage = successMessage;
|
|
|
+ InfoMessage = successMessage;
|
|
|
// Refresh will handle its own start/finish states
|
|
|
Refresh();
|
|
|
})
|
|
@@ -126,7 +113,7 @@ namespace Terra.Arbitrator.GUI
|
|
|
|
|
|
GitService.CommitAndPush(selectedFiles, commitMessage, username, email)
|
|
|
.Then(successMessage => {
|
|
|
- _infoMessage = successMessage;
|
|
|
+ InfoMessage = successMessage;
|
|
|
Refresh();
|
|
|
})
|
|
|
.Catch(ex => {
|
|
@@ -137,7 +124,7 @@ namespace Terra.Arbitrator.GUI
|
|
|
|
|
|
public void ResetFile(GitChange change)
|
|
|
{
|
|
|
- if (_isLoading) return;
|
|
|
+ if (IsLoading) return;
|
|
|
var userConfirmed = _displayDialog("Confirm Reset", $"Are you sure you want to revert all local changes to '{change.FilePath}'? This action cannot be undone.");
|
|
|
if (!userConfirmed) return;
|
|
|
|
|
@@ -145,7 +132,7 @@ namespace Terra.Arbitrator.GUI
|
|
|
|
|
|
GitService.ResetFileChanges(change)
|
|
|
.Then(successMessage => {
|
|
|
- _infoMessage = successMessage;
|
|
|
+ InfoMessage = successMessage;
|
|
|
Refresh();
|
|
|
})
|
|
|
.Catch(ex => {
|
|
@@ -156,7 +143,7 @@ namespace Terra.Arbitrator.GUI
|
|
|
|
|
|
public void DiffFile(GitChange change)
|
|
|
{
|
|
|
- if (_isLoading) return;
|
|
|
+ if (IsLoading) return;
|
|
|
StartOperation($"Launching diff for {change.FilePath}...");
|
|
|
|
|
|
GitService.LaunchExternalDiff(change)
|
|
@@ -166,11 +153,11 @@ namespace Terra.Arbitrator.GUI
|
|
|
|
|
|
public void ResolveConflict(GitChange change)
|
|
|
{
|
|
|
- if (_isLoading) return;
|
|
|
+ if (IsLoading) return;
|
|
|
StartOperation($"Opening merge tool for {change.FilePath}...");
|
|
|
|
|
|
GitService.LaunchMergeTool(change)
|
|
|
- .Then(successMessage => { _infoMessage = successMessage; })
|
|
|
+ .Then(successMessage => { InfoMessage = successMessage; })
|
|
|
.Catch(HandleOperationError)
|
|
|
.Finally(Refresh);
|
|
|
}
|
|
@@ -188,7 +175,7 @@ namespace Terra.Arbitrator.GUI
|
|
|
GitService.ResetAllChanges()
|
|
|
.Then(successMessage =>
|
|
|
{
|
|
|
- _infoMessage = successMessage;
|
|
|
+ InfoMessage = successMessage;
|
|
|
})
|
|
|
.Catch(HandleOperationError)
|
|
|
.Finally(Refresh);
|
|
@@ -217,7 +204,7 @@ namespace Terra.Arbitrator.GUI
|
|
|
{
|
|
|
if (wasUnstaged)
|
|
|
{
|
|
|
- _infoMessage = "Found and unstaged files for review.";
|
|
|
+ InfoMessage = "Found and unstaged files for review.";
|
|
|
}
|
|
|
return GitService.CompareLocalToRemote();
|
|
|
}
|
|
@@ -226,8 +213,8 @@ namespace Terra.Arbitrator.GUI
|
|
|
|
|
|
private void StartOperation(string loadingMessage)
|
|
|
{
|
|
|
- _isLoading = true;
|
|
|
- _loadingMessage = loadingMessage;
|
|
|
+ IsLoading = true;
|
|
|
+ LoadingMessage = loadingMessage;
|
|
|
ClearMessages();
|
|
|
_changes = null;
|
|
|
_requestRepaint?.Invoke();
|
|
@@ -235,24 +222,24 @@ namespace Terra.Arbitrator.GUI
|
|
|
|
|
|
private void HandleOperationError(Exception ex)
|
|
|
{
|
|
|
- _errorMessage = $"Operation Failed: {ex.Message}";
|
|
|
+ ErrorMessage = $"Operation Failed: {ex.Message}";
|
|
|
}
|
|
|
|
|
|
private void FinishOperation()
|
|
|
{
|
|
|
- _isLoading = false;
|
|
|
+ IsLoading = false;
|
|
|
_requestRepaint?.Invoke();
|
|
|
}
|
|
|
|
|
|
private void ClearMessages()
|
|
|
{
|
|
|
- _errorMessage = null;
|
|
|
- _infoMessage = null;
|
|
|
+ ErrorMessage = null;
|
|
|
+ InfoMessage = null;
|
|
|
}
|
|
|
|
|
|
private void ResetMultipleFiles(List<string> filePaths)
|
|
|
{
|
|
|
- _infoMessage = $"Starting reset for {filePaths.Count} file(s)... This may trigger script compilation.";
|
|
|
+ InfoMessage = $"Starting reset for {filePaths.Count} file(s)... This may trigger script compilation.";
|
|
|
_requestRepaint?.Invoke();
|
|
|
SessionState.SetString("BetterGit.ResetQueue", string.Join(";", filePaths));
|
|
|
EditorApplication.delayCall += BetterGitStatePersistence.ContinueInterruptedReset;
|
|
@@ -266,7 +253,7 @@ namespace Terra.Arbitrator.GUI
|
|
|
GitService.ForcePull()
|
|
|
.Then(_ =>
|
|
|
{
|
|
|
- _infoMessage = "Pull resulted in conflicts. Please resolve them below.";
|
|
|
+ InfoMessage = "Pull resulted in conflicts. Please resolve them below.";
|
|
|
})
|
|
|
.Catch(HandleOperationError)
|
|
|
.Finally(() =>
|