43 lines
1.5 KiB
C#
43 lines
1.5 KiB
C#
using Disco.Data.Repository;
|
|
using Disco.Models.Services.Devices.Importing;
|
|
using Disco.Services.Tasks;
|
|
using Quartz;
|
|
using System;
|
|
|
|
namespace Disco.Services.Devices.Importing
|
|
{
|
|
public class DeviceImportApplyTask : ScheduledTask
|
|
{
|
|
private const string JobDataMapContext = "Context";
|
|
|
|
public override string TaskName { get { return "Import Devices - Applying Changes"; } }
|
|
public override bool SingleInstanceTask { get { return false; } }
|
|
public override bool CancelInitiallySupported { get { return false; } }
|
|
|
|
public static ScheduledTaskStatus ScheduleNow(IDeviceImportContext Context)
|
|
{
|
|
if (Context == null)
|
|
throw new ArgumentNullException(nameof(Context));
|
|
|
|
// Build Data Map
|
|
var task = new DeviceImportApplyTask();
|
|
JobDataMap taskData = new JobDataMap() { { JobDataMapContext, Context } };
|
|
|
|
// Schedule Task
|
|
return task.ScheduleTask(taskData);
|
|
}
|
|
|
|
protected override void ExecuteTask()
|
|
{
|
|
var context = (IDeviceImportContext)ExecutionContext.JobDetail.JobDataMap[JobDataMapContext];
|
|
|
|
using (DiscoDataContext Database = new DiscoDataContext())
|
|
{
|
|
context.AffectedRecords = context.ApplyRecords(Database, Status);
|
|
}
|
|
|
|
Status.SetFinishedMessage($"Successfully imported/updated {context.AffectedRecords} device{(context.AffectedRecords == 1 ? null : "s")}");
|
|
}
|
|
}
|
|
}
|