2024-04-18 01:44:37 +02:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
using Serilog;
|
|
|
|
|
|
using Windows.ApplicationModel.Background;
|
|
|
|
|
|
using Wino.Core.Domain.Interfaces;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Wino.Core.UWP.Services
|
|
|
|
|
|
{
|
|
|
|
|
|
public class BackgroundTaskService : IBackgroundTaskService
|
|
|
|
|
|
{
|
2024-08-05 00:36:26 +02:00
|
|
|
|
private const string Is180BackgroundTasksRegisteredKey = nameof(Is180BackgroundTasksRegisteredKey);
|
2024-04-18 01:44:37 +02:00
|
|
|
|
|
|
|
|
|
|
public const string ToastActivationTaskEx = nameof(ToastActivationTaskEx);
|
|
|
|
|
|
|
|
|
|
|
|
private const string SessionConnectedTaskEntryPoint = "Wino.BackgroundTasks.SessionConnectedTask";
|
|
|
|
|
|
private const string SessionConnectedTaskName = "SessionConnectedTask";
|
|
|
|
|
|
|
|
|
|
|
|
private readonly IConfigurationService _configurationService;
|
|
|
|
|
|
|
|
|
|
|
|
public BackgroundTaskService(IConfigurationService configurationService)
|
|
|
|
|
|
{
|
|
|
|
|
|
_configurationService = configurationService;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-08-05 00:36:26 +02:00
|
|
|
|
public async Task HandleBackgroundTaskRegistrations()
|
2024-04-18 01:44:37 +02:00
|
|
|
|
{
|
2024-08-05 00:36:26 +02:00
|
|
|
|
bool is180BackgroundTaskRegistered = _configurationService.Get<bool>(Is180BackgroundTasksRegisteredKey);
|
2024-04-18 01:44:37 +02:00
|
|
|
|
|
2024-08-05 00:36:26 +02:00
|
|
|
|
// Don't re-register tasks.
|
|
|
|
|
|
if (is180BackgroundTaskRegistered) return;
|
2024-04-18 01:44:37 +02:00
|
|
|
|
|
|
|
|
|
|
var response = await BackgroundExecutionManager.RequestAccessAsync();
|
|
|
|
|
|
|
2024-08-05 00:36:26 +02:00
|
|
|
|
if (response != BackgroundAccessStatus.DeniedBySystemPolicy ||
|
|
|
|
|
|
response != BackgroundAccessStatus.DeniedByUser)
|
2024-04-18 01:44:37 +02:00
|
|
|
|
{
|
2024-08-05 00:36:26 +02:00
|
|
|
|
// Unregister all tasks and register new ones.
|
2024-04-18 01:44:37 +02:00
|
|
|
|
|
2024-08-05 00:36:26 +02:00
|
|
|
|
UnregisterAllBackgroundTask();
|
2024-04-18 01:44:37 +02:00
|
|
|
|
RegisterSessionConnectedTask();
|
2024-08-05 00:36:26 +02:00
|
|
|
|
|
|
|
|
|
|
_configurationService.Set(Is180BackgroundTasksRegisteredKey, true);
|
2024-04-18 01:44:37 +02:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void UnregisterAllBackgroundTask()
|
|
|
|
|
|
{
|
|
|
|
|
|
foreach (var task in BackgroundTaskRegistration.AllTasks)
|
|
|
|
|
|
{
|
|
|
|
|
|
task.Value.Unregister(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-08-05 00:36:26 +02:00
|
|
|
|
Log.Information("Unregistered all background tasks.");
|
2024-04-18 01:44:37 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private BackgroundTaskRegistration RegisterSessionConnectedTask()
|
|
|
|
|
|
{
|
|
|
|
|
|
var builder = new BackgroundTaskBuilder
|
|
|
|
|
|
{
|
|
|
|
|
|
Name = SessionConnectedTaskName,
|
|
|
|
|
|
TaskEntryPoint = SessionConnectedTaskEntryPoint
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
builder.SetTrigger(new SystemTrigger(SystemTriggerType.SessionConnected, false));
|
|
|
|
|
|
|
|
|
|
|
|
return builder.Register();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|