78 lines
3.0 KiB
C#
78 lines
3.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Disco.Services.Tasks;
|
|
|
|
namespace Disco.Services.Plugins
|
|
{
|
|
public class UpdatePluginsAfterDiscoUpdateTask : ScheduledTask
|
|
{
|
|
private static object _startLock = new object();
|
|
|
|
public override string TaskName { get { return "Updating Disco Plugins"; } }
|
|
|
|
protected override void ExecuteTask()
|
|
{
|
|
this.Status.UpdateStatus(0, "Updating plugins after Disco update", "Starting, please wait...");
|
|
|
|
// Wait for App to Load (10 Seconds)
|
|
for (int i = 0; i < 10; i++)
|
|
{
|
|
this.Status.UpdateStatus(10 * i);
|
|
System.Threading.Thread.Sleep(1000);
|
|
}
|
|
|
|
// Update Catalogue
|
|
CommunityInterop.PluginLibraryUpdateTask.ExecuteTaskInternal(this.Status);
|
|
|
|
// Update all Plugins
|
|
UpdatePluginTask.UpdateOffline(this.Status);
|
|
|
|
// Restart
|
|
this.Status.Finished("Restarting Disco, please wait...", "/");
|
|
Plugins.RestartApp(1500);
|
|
}
|
|
|
|
public static ScheduledTaskStatus UpdateDiscoPlugins(bool ReturnExistingStatusIfRunning)
|
|
{
|
|
if (ScheduledTasks.GetTaskStatuses(typeof(UpdatePluginTask)).Where(s => s.IsRunning).Count() > 0)
|
|
throw new InvalidOperationException("A plugin is already being Updated");
|
|
if (ScheduledTasks.GetTaskStatuses(typeof(UninstallPluginTask)).Where(s => s.IsRunning).Count() > 0)
|
|
throw new InvalidOperationException("A plugin is being Uninstalled");
|
|
if (ScheduledTasks.GetTaskStatuses(typeof(InstallPluginTask)).Where(s => s.IsRunning).Count() > 0)
|
|
throw new InvalidOperationException("A plugin is being Installed");
|
|
|
|
var existingTask = ScheduledTasks.GetTaskStatuses(typeof(UpdatePluginsAfterDiscoUpdateTask)).Where(s => s.IsRunning).FirstOrDefault();
|
|
if (existingTask != null)
|
|
{
|
|
if (ReturnExistingStatusIfRunning)
|
|
return existingTask;
|
|
else
|
|
throw new InvalidOperationException("Plugins are already being updated");
|
|
}
|
|
|
|
lock (_startLock)
|
|
{
|
|
existingTask = ScheduledTasks.GetTaskStatuses(typeof(UpdatePluginsAfterDiscoUpdateTask)).Where(s => s.IsRunning).FirstOrDefault();
|
|
if (existingTask != null)
|
|
{
|
|
if (ReturnExistingStatusIfRunning)
|
|
return existingTask;
|
|
else
|
|
throw new InvalidOperationException("Plugins are already being updated");
|
|
}
|
|
|
|
var instance = new UpdatePluginsAfterDiscoUpdateTask();
|
|
var status = instance.ScheduleTask();
|
|
|
|
// Give the scheduler a chance to start the task
|
|
System.Threading.Thread.Sleep(150);
|
|
|
|
return status;
|
|
}
|
|
}
|
|
}
|
|
}
|