add intro UI for first time registration, add FileCacheManager to scan and rescan for file changes, fix namings, polish UI for normal usage

This commit is contained in:
Stanley Dimant
2022-06-21 01:07:57 +02:00
parent b7b2005dcb
commit 4a12d667f1
11 changed files with 1074 additions and 534 deletions

View File

@@ -27,32 +27,39 @@ namespace MareSynchronos.WebAPI
{
public class CharacterReceivedEventArgs : EventArgs
{
public CharacterReceivedEventArgs(string characterNameHash, CharacterCacheDto characterData)
{
CharacterData = characterData;
CharacterNameHash = characterNameHash;
}
public CharacterCacheDto CharacterData { get; set; }
public string CharacterNameHash { get; set; }
}
public class ApiController : IDisposable
{
private readonly Configuration pluginConfiguration;
private const string MainService = "https://darkarchon.internet-box.ch:5001";
public const string MainServer = "Lunae Crescere Incipientis (Central Server EU)";
private readonly Configuration _pluginConfiguration;
public const string MainServiceUri = "https://darkarchon.internet-box.ch:5001";
public string UID { get; private set; } = string.Empty;
public string SecretKey => pluginConfiguration.ClientSecret.ContainsKey(ApiUri) ? pluginConfiguration.ClientSecret[ApiUri] : "-";
private string CacheFolder => pluginConfiguration.CacheFolder;
public ConcurrentDictionary<string, (long, long)> CurrentUploads { get; private set; } = new();
public ConcurrentDictionary<string, (long, long)> CurrentDownloads { get; private set; } = new();
public string SecretKey => _pluginConfiguration.ClientSecret.ContainsKey(ApiUri) ? _pluginConfiguration.ClientSecret[ApiUri] : "-";
private string CacheFolder => _pluginConfiguration.CacheFolder;
public ConcurrentDictionary<string, (long, long)> CurrentUploads { get; } = new();
public ConcurrentDictionary<string, (long, long)> CurrentDownloads { get; } = new();
public bool IsDownloading { get; private set; } = false;
public bool IsUploading { get; private set; } = false;
public int TotalTransfersPending { get; set; } = 0;
public bool UseCustomService
{
get => pluginConfiguration.UseCustomService;
get => _pluginConfiguration.UseCustomService;
set
{
pluginConfiguration.UseCustomService = value;
pluginConfiguration.Save();
_pluginConfiguration.UseCustomService = value;
_pluginConfiguration.Save();
}
}
private string ApiUri => UseCustomService ? pluginConfiguration.ApiUri : MainService;
private string ApiUri => UseCustomService ? _pluginConfiguration.ApiUri : MainServiceUri;
public bool ServerAlive =>
(_heartbeatHub?.State ?? HubConnectionState.Disconnected) == HubConnectionState.Connected;
@@ -76,7 +83,7 @@ namespace MareSynchronos.WebAPI
public ApiController(Configuration pluginConfiguration)
{
this.pluginConfiguration = pluginConfiguration;
this._pluginConfiguration = pluginConfiguration;
cts = new CancellationTokenSource();
_ = Heartbeat();
@@ -294,8 +301,8 @@ namespace MareSynchronos.WebAPI
if (!ServerAlive) return;
PluginLog.Debug("Registering at service " + ApiUri);
var response = await _userHub!.InvokeAsync<string>("Register");
pluginConfiguration.ClientSecret[ApiUri] = response;
pluginConfiguration.Save();
_pluginConfiguration.ClientSecret[ApiUri] = response;
_pluginConfiguration.Save();
RestartHeartbeat();
}
@@ -317,7 +324,7 @@ namespace MareSynchronos.WebAPI
CancelUpload();
uploadCancellationTokenSource = new CancellationTokenSource();
var uploadToken = uploadCancellationTokenSource.Token;
PluginLog.Warning("New Token Created");
PluginLog.Debug("New Token Created");
var filesToUpload = await _fileHub!.InvokeAsync<List<string>>("SendFiles", character.FileReplacements, uploadToken);
@@ -344,7 +351,7 @@ namespace MareSynchronos.WebAPI
}
PluginLog.Debug("Upload tasks complete, waiting for server to confirm");
var anyUploadsOpen = await _fileHub!.InvokeAsync<bool>("IsUploadFinished", uploadToken);
PluginLog.Warning("Uploads open: " + anyUploadsOpen);
PluginLog.Debug("Uploads open: " + anyUploadsOpen);
while (anyUploadsOpen && !uploadToken.IsCancellationRequested)
{
anyUploadsOpen = await _fileHub!.InvokeAsync<bool>("IsUploadFinished", uploadToken);
@@ -357,7 +364,7 @@ namespace MareSynchronos.WebAPI
if (!uploadToken.IsCancellationRequested)
{
PluginLog.Warning("=== Pushing character data ===");
PluginLog.Debug("=== Pushing character data ===");
await _userHub!.InvokeAsync("PushCharacterData", character, visibleCharacterIds, uploadToken);
}
else
@@ -372,11 +379,7 @@ namespace MareSynchronos.WebAPI
public Task ReceiveCharacterData(CharacterCacheDto character, string characterHash)
{
PluginLog.Debug("Received DTO for " + characterHash);
CharacterReceived?.Invoke(null, new CharacterReceivedEventArgs()
{
CharacterData = character,
CharacterNameHash = characterHash
});
CharacterReceived?.Invoke(null, new CharacterReceivedEventArgs(characterHash, character));
return Task.CompletedTask;
}