65 lines
2.6 KiB
C#
65 lines
2.6 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Input;
|
|
using JD.Guinness.WPF.Module.View;
|
|
using JD.Guinness.WPF.Module.ViewModel;
|
|
using Plume.Icons;
|
|
using Plume.Perforce.Service.Api;
|
|
|
|
namespace JD.Guinness.WPF.Module.PlumeAction
|
|
{
|
|
public sealed class SubmitAction : Plume.Interfaces.WPF.Actions.Action
|
|
{
|
|
private readonly GameViewModel _gameViewModel;
|
|
private readonly IPerforceService _perforceService;
|
|
|
|
public SubmitAction(GameViewModel gameViewModel, IPerforceService perforceService)
|
|
: base("Submit", "Submit", StandardIcon.Perforce, new KeyGesture(Key.P, ModifierKeys.Control))
|
|
{
|
|
_gameViewModel = gameViewModel;
|
|
_perforceService = perforceService;
|
|
}
|
|
|
|
public override bool CanExecute() => _gameViewModel.IsAvailable && _gameViewModel.HasWorkspace;
|
|
|
|
public override async void TryExecute()
|
|
{
|
|
if (!SubmitDescriptionBox.Show(out string description))
|
|
{
|
|
return;
|
|
}
|
|
|
|
_gameViewModel.SaveCommand.Execute(false);
|
|
|
|
FileInfo gameSave = new FileInfo(Path.Combine(_gameViewModel.Settings.WorkspacePath, _gameViewModel.Settings.GameSaveFilePath));
|
|
|
|
await _gameViewModel.StartProcess(
|
|
Task.Run(async () =>
|
|
{
|
|
if (_perforceService.Connect(_gameViewModel.Settings.PerforceServer, Environment.UserName, _gameViewModel.Settings.WorkspaceName))
|
|
{
|
|
try
|
|
{
|
|
string changeList = _perforceService.Connection.CreatePendingChangelist(description);
|
|
_perforceService.Connection.MoveFileToChangelist(gameSave.FullName, changeList);
|
|
_perforceService.Connection.Submit(changeList);
|
|
}
|
|
finally
|
|
{
|
|
_perforceService.Disconnect();
|
|
}
|
|
|
|
await _gameViewModel.SetWorkspaceCommand.ExecuteAsync(false).ConfigureAwait(true);
|
|
}
|
|
else
|
|
{
|
|
throw new Exception($"Unable to connect on the server '{_gameViewModel.Settings.PerforceServer}' with user '{Environment.UserName}' on client '{_gameViewModel.Settings.WorkspaceName}'.");
|
|
}
|
|
}),
|
|
$"Submiting file \"{gameSave.FullName}\"",
|
|
$"Submited file \"{gameSave.FullName}\"",
|
|
$"Failed to submit file \"{gameSave.FullName}\"").ConfigureAwait(true);
|
|
}
|
|
}
|
|
}
|