Update campaign progress UI
This commit is contained in:
@ -37,6 +37,8 @@ namespace Hcs.WebApp.BackgroundServices
|
||||
if (manager != null)
|
||||
{
|
||||
managers.Add(manager);
|
||||
|
||||
manager.OnCampaignProgressStep += OnCampaignProgressStep;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -62,6 +64,8 @@ namespace Hcs.WebApp.BackgroundServices
|
||||
if (manager.State == IManager.ManagerState.Ended)
|
||||
{
|
||||
campaignManagementState.InvokeOnCampaignEnded(manager.Campaign);
|
||||
|
||||
manager.OnCampaignProgressStep -= OnCampaignProgressStep;
|
||||
}
|
||||
}
|
||||
|
||||
@ -97,5 +101,10 @@ namespace Hcs.WebApp.BackgroundServices
|
||||
campaignManagementState.EnqueueCampaign(campaign);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnCampaignProgressStep(Campaign campaign)
|
||||
{
|
||||
campaignManagementState.InvokeOnCampaignProgressStep(campaign);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,6 +8,7 @@ namespace Hcs.WebApp.BackgroundServices
|
||||
private readonly ConcurrentQueue<Campaign> campaigns = new();
|
||||
|
||||
public event Action<Campaign> OnCampaignCreated;
|
||||
public event Action<Campaign> OnCampaignProgressStep;
|
||||
public event Action<Campaign> OnCampaignEnded;
|
||||
|
||||
public void EnqueueCampaign(Campaign campaign)
|
||||
@ -30,5 +31,14 @@ namespace Hcs.WebApp.BackgroundServices
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
public void InvokeOnCampaignProgressStep(Campaign campaign)
|
||||
{
|
||||
try
|
||||
{
|
||||
OnCampaignProgressStep?.Invoke(campaign);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -15,6 +15,8 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers
|
||||
|
||||
public ManagerState State { get; }
|
||||
|
||||
event Action<Campaign> OnCampaignProgressStep;
|
||||
|
||||
Task ProcessAsync();
|
||||
|
||||
Task EndWithFailAsync(Exception e);
|
||||
|
||||
@ -25,6 +25,8 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers
|
||||
|
||||
public IManager.ManagerState State { get; protected set; } = IManager.ManagerState.Created;
|
||||
|
||||
public event Action<Campaign>? OnCampaignProgressStep;
|
||||
|
||||
public abstract Task ProcessAsync();
|
||||
|
||||
public async Task EndWithFailAsync(Exception e)
|
||||
@ -45,6 +47,8 @@ namespace Hcs.WebApp.BackgroundServices.CampaignManagers
|
||||
campaign.Step = step;
|
||||
campaign.Progress = (step + 1) / StepCount;
|
||||
await HeadquartersService.UpdateCampaignStepAndProgressAsync(context, campaign);
|
||||
|
||||
OnCampaignProgressStep?.Invoke(campaign);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -81,6 +81,7 @@
|
||||
if (state.User.IsInRole(AppRole.ADMINISTRATOR_TYPE) || state.User.IsInRole(AppRole.OPERATOR_TYPE))
|
||||
{
|
||||
CampaignManagementState.OnCampaignCreated += OnCampaignCreated;
|
||||
CampaignManagementState.OnCampaignProgressStep += OnCampaignProgressStep;
|
||||
CampaignManagementState.OnCampaignEnded += OnCampaignEnded;
|
||||
|
||||
campaigns = await HeadquartersService.GetCampaignsAsync();
|
||||
@ -109,6 +110,19 @@
|
||||
Task.Run(RefreshCampaigns);
|
||||
}
|
||||
|
||||
void OnCampaignProgressStep(Campaign campaign)
|
||||
{
|
||||
InvokeAsync(() =>
|
||||
{
|
||||
var targetCampaign = campaigns.FirstOrDefault(x => x.Id == campaign.Id);
|
||||
if (targetCampaign != null)
|
||||
{
|
||||
targetCampaign.Step = campaign.Step;
|
||||
targetCampaign.Progress = campaign.Progress;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void OnCampaignEnded(Campaign campaign)
|
||||
{
|
||||
Task.Run(RefreshCampaigns);
|
||||
@ -131,6 +145,7 @@
|
||||
public void Dispose()
|
||||
{
|
||||
CampaignManagementState.OnCampaignCreated -= OnCampaignCreated;
|
||||
CampaignManagementState.OnCampaignProgressStep -= OnCampaignProgressStep;
|
||||
CampaignManagementState.OnCampaignEnded -= OnCampaignEnded;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user