add upload tasks, fix options not setting target client correctly
This commit is contained in:
parent
a879f686ff
commit
4141385ea7
@ -12,6 +12,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FubarCoder.RestSharp.Portable.Core" Version="4.0.8" />
|
||||
<PackageReference Include="FubarCoder.RestSharp.Portable.HttpClient" Version="4.0.8" />
|
||||
<PackageReference Include="MegaApiClient" Version="1.10.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.0" />
|
||||
@ -23,6 +24,9 @@
|
||||
<Reference Include="Gitea">
|
||||
<HintPath>Resources\Gitea.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="GoFileSharp">
|
||||
<HintPath>Resources\GoFileSharp.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
15
EftPatchHelper/EftPatchHelper/Interfaces/IFileUpload.cs
Normal file
15
EftPatchHelper/EftPatchHelper/Interfaces/IFileUpload.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace EftPatchHelper.Interfaces
|
||||
{
|
||||
public interface IFileUpload
|
||||
{
|
||||
public string DisplayName { get; set; }
|
||||
public string GetLink();
|
||||
public Task<bool> UploadAsync(IProgress<double>? progress = null);
|
||||
}
|
||||
}
|
6
EftPatchHelper/EftPatchHelper/Interfaces/IUploadTasks.cs
Normal file
6
EftPatchHelper/EftPatchHelper/Interfaces/IUploadTasks.cs
Normal file
@ -0,0 +1,6 @@
|
||||
namespace EftPatchHelper.Interfaces
|
||||
{
|
||||
public interface IUploadTasks : ITaskable
|
||||
{
|
||||
}
|
||||
}
|
37
EftPatchHelper/EftPatchHelper/Model/GoFileUpload.cs
Normal file
37
EftPatchHelper/EftPatchHelper/Model/GoFileUpload.cs
Normal file
@ -0,0 +1,37 @@
|
||||
using EftPatchHelper.Interfaces;
|
||||
using GoFileSharp;
|
||||
using GoFileSharp.Model.GoFileData.Wrappers;
|
||||
|
||||
namespace EftPatchHelper.Model
|
||||
{
|
||||
public class GoFileUpload : IFileUpload
|
||||
{
|
||||
private FileInfo _file;
|
||||
private GoFileFile _uploadedFile;
|
||||
|
||||
public string DisplayName { get; set; }
|
||||
|
||||
public GoFileUpload(FileInfo file, string apiToken)
|
||||
{
|
||||
GoFile.ApiToken = apiToken;
|
||||
_file = file;
|
||||
DisplayName = $"GoFile Upload: {_file.Name}";
|
||||
}
|
||||
|
||||
public string GetLink()
|
||||
{
|
||||
return _uploadedFile.Link;
|
||||
}
|
||||
|
||||
public async Task<bool> UploadAsync(IProgress<double>? progress = null)
|
||||
{
|
||||
var uploadedFile = await GoFile.UploadFileAsync(_file, progress);
|
||||
|
||||
if(uploadedFile == null) return false;
|
||||
|
||||
_uploadedFile = uploadedFile;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
96
EftPatchHelper/EftPatchHelper/Model/MegaUpload.cs
Normal file
96
EftPatchHelper/EftPatchHelper/Model/MegaUpload.cs
Normal file
@ -0,0 +1,96 @@
|
||||
using EftPatchHelper.Interfaces;
|
||||
using CG.Web.MegaApiClient;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace EftPatchHelper.Model
|
||||
{
|
||||
public class MegaUpload : IFileUpload, IDisposable
|
||||
{
|
||||
private FileInfo _file;
|
||||
private MegaApiClient _client;
|
||||
private string _email;
|
||||
private string _password;
|
||||
private string _mfaKey;
|
||||
private INode _uploadFolder;
|
||||
private INode _uploadedFile;
|
||||
|
||||
public string DisplayName { get; set; }
|
||||
|
||||
public MegaUpload(FileInfo file, string email, string password, string mfaKey = null)
|
||||
{
|
||||
_client = new MegaApiClient();
|
||||
_file = file;
|
||||
_email = email;
|
||||
_password = password;
|
||||
DisplayName = $"Mega Upload: {_file.Name}";
|
||||
}
|
||||
|
||||
private async Task<bool> CheckLoginStatus()
|
||||
{
|
||||
if (!_client.IsLoggedIn)
|
||||
{
|
||||
AnsiConsole.Markup("[blue]Logging into mega ... [/]");
|
||||
|
||||
await _client.LoginAsync(_email, _password, _mfaKey);
|
||||
|
||||
if (!_client.IsLoggedIn)
|
||||
{
|
||||
AnsiConsole.MarkupLine("[red]failed[/]");
|
||||
return false;
|
||||
}
|
||||
AnsiConsole.MarkupLine("[green]ok[/]");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public async Task<bool> SetUploadFolder(string folderName)
|
||||
{
|
||||
if (!await CheckLoginStatus())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
AnsiConsole.Markup("[blue]Getting node ... [/]");
|
||||
var nodes = await _client.GetNodesAsync();
|
||||
|
||||
var trashNode = nodes.SingleOrDefault(x => x.Type == NodeType.Trash);
|
||||
|
||||
_uploadFolder = nodes.SingleOrDefault(x => x.Name == folderName && x.ParentId != trashNode.Id);
|
||||
|
||||
bool nodeSet = _uploadFolder != null;
|
||||
|
||||
AnsiConsole.MarkupLine(nodeSet != false ? "[green]node set[/]" : "[red]failed to set node[/]");
|
||||
|
||||
return nodeSet;
|
||||
}
|
||||
|
||||
public string GetLink()
|
||||
{
|
||||
return _client.GetDownloadLink(_uploadedFile).ToString();
|
||||
}
|
||||
|
||||
public async Task<bool> UploadAsync(IProgress<double>? progress = null)
|
||||
{
|
||||
_file.Refresh();
|
||||
|
||||
if (!_file.Exists) return false;
|
||||
|
||||
if(!await CheckLoginStatus())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
using var fileStream = _file.OpenRead();
|
||||
|
||||
_uploadedFile = await _client.UploadAsync(fileStream, _file.Name, _uploadFolder, progress);
|
||||
|
||||
return _uploadedFile != null;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_client.Logout();
|
||||
}
|
||||
}
|
||||
}
|
@ -28,5 +28,15 @@ namespace EftPatchHelper.Model
|
||||
/// Whether or not the user opted to create a release on gitea
|
||||
/// </summary>
|
||||
public bool CreateRelease = false;
|
||||
|
||||
/// <summary>
|
||||
/// Whether or not to upload the patcher to gofile.io
|
||||
/// </summary>
|
||||
public bool UploadToGoFile = false;
|
||||
|
||||
/// <summary>
|
||||
/// Whether or not to upload the pather to mega.io
|
||||
/// </summary>
|
||||
public bool UploadToMega = false;
|
||||
}
|
||||
}
|
||||
|
@ -42,6 +42,18 @@ namespace EftPatchHelper.Model
|
||||
[JsonPropertyName("giteaReleaseRepoName")]
|
||||
public string GiteaReleaseRepoName { get; set; } = "";
|
||||
|
||||
[JsonPropertyName("meagEmail")]
|
||||
public string MegaEmail { get; set; } = "";
|
||||
|
||||
[JsonPropertyName("megaPassword")]
|
||||
public string MegaPassword { get; set; } = "";
|
||||
|
||||
[JsonPropertyName("megaUploadFolder")]
|
||||
public string MegaUploadFolder { get; set; } = "";
|
||||
|
||||
[JsonPropertyName("goFileApiKey")]
|
||||
public string GoFileApiKey { get; set; } = "";
|
||||
|
||||
public bool Save()
|
||||
{
|
||||
try
|
||||
@ -78,6 +90,22 @@ namespace EftPatchHelper.Model
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool UsingMega()
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(MegaEmail)) return false;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(MegaPassword)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool UsingGoFile()
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(GoFileApiKey)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Validate()
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(TargetEftVersion)) return false;
|
||||
|
@ -18,6 +18,7 @@ namespace EftPatchHelper
|
||||
ITaskable _patchGenTasks;
|
||||
ITaskable _patchTestingTasks;
|
||||
ITaskable _createReleaseTasks;
|
||||
ITaskable _uploadTasks;
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
@ -38,7 +39,8 @@ namespace EftPatchHelper
|
||||
IFileProcessingTasks fileProcessingTasks,
|
||||
IPatchGenTasks patchGenTasks,
|
||||
IPatchTestingTasks patchTestingTasks,
|
||||
IReleaseCreator createReleaseTasks
|
||||
IReleaseCreator createReleaseTasks,
|
||||
IUploadTasks uploadTasks
|
||||
)
|
||||
{
|
||||
_settingsTasks = settingsTasks;
|
||||
@ -47,6 +49,7 @@ namespace EftPatchHelper
|
||||
_patchGenTasks = patchGenTasks;
|
||||
_patchTestingTasks = patchTestingTasks;
|
||||
_createReleaseTasks = createReleaseTasks;
|
||||
_uploadTasks = uploadTasks;
|
||||
}
|
||||
|
||||
public void Run()
|
||||
@ -57,6 +60,7 @@ namespace EftPatchHelper
|
||||
_patchGenTasks.Run();
|
||||
_patchTestingTasks.Run();
|
||||
_createReleaseTasks.Run();
|
||||
_uploadTasks.Run();
|
||||
}
|
||||
|
||||
private static IHost ConfigureHost(string[] args)
|
||||
@ -80,6 +84,7 @@ namespace EftPatchHelper
|
||||
services.AddTransient<IPatchGenTasks, PatchGenTasks>();
|
||||
services.AddTransient<IPatchTestingTasks, PatchTestingTasks>();
|
||||
services.AddTransient<IReleaseCreator, CreateReleaseTasks>();
|
||||
services.AddTransient<IUploadTasks, UploadTasks>();
|
||||
services.AddTransient<Program>();
|
||||
})
|
||||
.ConfigureAppConfiguration((_, config) =>
|
||||
|
BIN
EftPatchHelper/EftPatchHelper/Resources/GoFileSharp.dll
Normal file
BIN
EftPatchHelper/EftPatchHelper/Resources/GoFileSharp.dll
Normal file
Binary file not shown.
@ -21,14 +21,14 @@ namespace EftPatchHelper.Tasks
|
||||
|
||||
private bool ChangeSettingsTargetVersion()
|
||||
{
|
||||
var targetClient = _clientSelector.GetClientSelection("Select [yellow]Target[/] Version");
|
||||
_options.TargetClient = _clientSelector.GetClientSelection("Select [yellow]Target[/] Version");
|
||||
|
||||
AnsiConsole.WriteLine();
|
||||
ConfirmationPrompt changeVersion = new ConfirmationPrompt($"Update settings target version to use [purple]{targetClient.Version}[/]?");
|
||||
ConfirmationPrompt changeVersion = new ConfirmationPrompt($"Update settings target version to use [purple]{_options.TargetClient.Version}[/]?");
|
||||
|
||||
if (changeVersion.Show(AnsiConsole.Console))
|
||||
{
|
||||
_settings.TargetEftVersion = targetClient.Version;
|
||||
_settings.TargetEftVersion = _options.TargetClient.Version;
|
||||
|
||||
return _settings.Save();
|
||||
}
|
||||
|
@ -65,6 +65,22 @@ namespace EftPatchHelper.Tasks
|
||||
if (!_settings.UsingGitea()) return;
|
||||
|
||||
_options.CreateRelease = new ConfirmationPrompt("Create a release on gitea?").Show(AnsiConsole.Console);
|
||||
|
||||
if(_options.CreateRelease)
|
||||
{
|
||||
// only allow upload options if the release is not being made
|
||||
return;
|
||||
}
|
||||
|
||||
if (_settings.UsingMega())
|
||||
{
|
||||
_options.UploadToMega = new ConfirmationPrompt("Upload to Mega?").Show(AnsiConsole.Console);
|
||||
}
|
||||
|
||||
if (_settings.UsingGoFile())
|
||||
{
|
||||
_options.UploadToGoFile = new ConfirmationPrompt("Upload to GoFile?").Show(AnsiConsole.Console);
|
||||
}
|
||||
}
|
||||
|
||||
public void Run()
|
||||
|
145
EftPatchHelper/EftPatchHelper/Tasks/UploadTasks.cs
Normal file
145
EftPatchHelper/EftPatchHelper/Tasks/UploadTasks.cs
Normal file
@ -0,0 +1,145 @@
|
||||
using EftPatchHelper.Extensions;
|
||||
using EftPatchHelper.Interfaces;
|
||||
using EftPatchHelper.Model;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace EftPatchHelper.Tasks
|
||||
{
|
||||
public class UploadTasks : IUploadTasks
|
||||
{
|
||||
private Options _options;
|
||||
private Settings _settings;
|
||||
private List<IFileUpload> _fileUploads = new List<IFileUpload>();
|
||||
private Dictionary<IFileUpload, ProgressTask> uploadTasks = new Dictionary<IFileUpload, ProgressTask>();
|
||||
|
||||
public UploadTasks(Options options, Settings settings)
|
||||
{
|
||||
_options = options;
|
||||
_settings = settings;
|
||||
}
|
||||
|
||||
private async Task<bool> BuildUploadList()
|
||||
{
|
||||
var patcherFile = new FileInfo(_options.OutputPatchPath + ".zip");
|
||||
|
||||
if (!patcherFile.Exists) return false;
|
||||
|
||||
if (_settings.UsingMega() && _options.UploadToMega)
|
||||
{
|
||||
var mega = new MegaUpload(patcherFile, _settings.MegaEmail, _settings.MegaPassword);
|
||||
await mega.SetUploadFolder(_settings.MegaUploadFolder);
|
||||
_fileUploads.Add(mega);
|
||||
}
|
||||
|
||||
if(_settings.UsingGoFile() && _options.UploadToGoFile)
|
||||
{
|
||||
var gofile = new GoFileUpload(patcherFile, _settings.GoFileApiKey);
|
||||
_fileUploads.Add(gofile);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void CreateHubEntrySource()
|
||||
{
|
||||
var goFile = _fileUploads.SingleOrDefault(x => x.GetType() == typeof(GoFileUpload));
|
||||
var mega = _fileUploads.SingleOrDefault(x => x.GetType() == typeof(MegaUpload));
|
||||
|
||||
if(goFile == null || mega == null)
|
||||
{
|
||||
AnsiConsole.WriteLine("Failed to get required info to create hub entry source");
|
||||
return;
|
||||
}
|
||||
|
||||
var goFileLink = goFile.GetLink();
|
||||
var megaLink = mega.GetLink();
|
||||
|
||||
if(goFileLink == null || megaLink == null)
|
||||
{
|
||||
AnsiConsole.WriteLine("Failed to get link for uploaded files");
|
||||
return;
|
||||
}
|
||||
|
||||
string output = $"<p>Downgrade EFT Client files from version {_options.SourceClient.Version} to {_options.TargetClient.Version}</p>\n<p><br></p>";
|
||||
|
||||
if(_options.UploadToGoFile)
|
||||
{
|
||||
output += $"\n<p><a href=\"{goFileLink}\">Download From GoFile</a></p>";
|
||||
}
|
||||
|
||||
if(_options.UploadToMega)
|
||||
{
|
||||
output += $"\n<p><a href=\"{megaLink}\">Download From Mega</a></p>";
|
||||
}
|
||||
|
||||
AnsiConsole.WriteLine(output);
|
||||
|
||||
var unixTimestamp = (int)DateTime.UtcNow.Subtract(DateTime.UnixEpoch).TotalSeconds;
|
||||
|
||||
string outputPath = $"{Environment.CurrentDirectory}\\hubEntry_{unixTimestamp}.txt";
|
||||
File.WriteAllText(outputPath, output);
|
||||
|
||||
if(File.Exists(outputPath))
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Hub Entry Source saved: {outputPath.EscapeMarkup()}[/]");
|
||||
}
|
||||
else
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[red]Hub Entry Source saved failed[/]");
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<bool> UploadAllFiles()
|
||||
{
|
||||
if(!await BuildUploadList())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var succeeded = await AnsiConsole.Progress().Columns(
|
||||
new TaskDescriptionColumn() { Alignment = Justify.Left},
|
||||
new ProgressBarColumn(),
|
||||
new PercentageColumn(),
|
||||
new RemainingTimeColumn(),
|
||||
new SpinnerColumn(Spinner.Known.Dots2)
|
||||
).StartAsync<bool>(async context =>
|
||||
{
|
||||
foreach(var file in _fileUploads)
|
||||
{
|
||||
var task = context.AddTask($"[purple][[Pending]][/] {file.DisplayName}");
|
||||
task.IsIndeterminate = true;
|
||||
uploadTasks.Add(file, task);
|
||||
}
|
||||
|
||||
foreach(var pair in uploadTasks)
|
||||
{
|
||||
// set the value of the progress task object
|
||||
var progress = new System.Progress<double>((d) => pair.Value.Value = d);
|
||||
|
||||
pair.Value.IsIndeterminate = false;
|
||||
pair.Value.Description = pair.Key.DisplayName;
|
||||
|
||||
if(!await pair.Key.UploadAsync(progress))
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[red]{pair.Key.DisplayName.EscapeMarkup()} failed[/]");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
return succeeded;
|
||||
}
|
||||
|
||||
public void Run()
|
||||
{
|
||||
if (!_options.CreateRelease)
|
||||
{
|
||||
UploadAllFiles().GetAwaiter().GetResult().ValidateOrExit();
|
||||
}
|
||||
|
||||
CreateHubEntrySource();
|
||||
}
|
||||
}
|
||||
}
|
@ -9,5 +9,9 @@
|
||||
"giteaApiBasePath": "", //You can leave the gitea settings blank if you don't need to create releases on gitea
|
||||
"giteaApiKey": "",
|
||||
"giteaReleaseRepoOwner": "",
|
||||
"giteaReleaseRepoName": ""
|
||||
"giteaReleaseRepoName": "",
|
||||
"megaEmail": "",
|
||||
"megaPassword": "",
|
||||
"megaUploadFolder": "",
|
||||
"goFileApiKey": ""
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user