Fix: On Startup, only Update Plugins if installed

This commit is contained in:
Gary Sharp
2013-06-20 12:33:52 +10:00
parent b7dc05dd65
commit 6f7f3336b3
9 changed files with 153 additions and 140 deletions
+2 -2
View File
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.2.0618.1707")]
[assembly: AssemblyFileVersion("1.2.0618.1707")]
[assembly: AssemblyVersion("1.2.0620.1229")]
[assembly: AssemblyFileVersion("1.2.0620.1229")]
+2 -2
View File
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.2.0618.1707")]
[assembly: AssemblyFileVersion("1.2.0618.1707")]
[assembly: AssemblyVersion("1.2.0620.1229")]
[assembly: AssemblyFileVersion("1.2.0620.1229")]
+2 -2
View File
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.2.0618.1707")]
[assembly: AssemblyFileVersion("1.2.0618.1707")]
[assembly: AssemblyVersion("1.2.0620.1229")]
[assembly: AssemblyFileVersion("1.2.0620.1229")]
+41 -24
View File
@@ -82,21 +82,12 @@ namespace Disco.Services.Plugins
Plugins.RestartApp(1500);
}
internal static void UpdateOffline(ScheduledTaskStatus Status)
public static List<PluginManifest> OfflineInstalledPlugins(DiscoDataContext dbContext)
{
string pluginsLocation;
string pluginPackagesLocation;
string pluginsStorageLocation;
PluginLibraryUpdateResponse pluginCatalogue;
List<Tuple<PluginManifest, string, PluginLibraryItem>> UpdatePlugins = new List<Tuple<PluginManifest, string, PluginLibraryItem>>();
string pluginsLocation = dbContext.DiscoConfiguration.PluginsLocation;
string pluginsStorageLocation = dbContext.DiscoConfiguration.PluginStorageLocation;
using (DiscoDataContext dbContext = new DiscoDataContext())
{
pluginCatalogue = Plugins.LoadCatalogue(dbContext);
pluginsLocation = dbContext.DiscoConfiguration.PluginsLocation;
pluginPackagesLocation = dbContext.DiscoConfiguration.PluginPackagesLocation;
pluginsStorageLocation = dbContext.DiscoConfiguration.PluginStorageLocation;
}
List<PluginManifest> installedPluginManifests = new List<PluginManifest>();
DirectoryInfo pluginDirectoryRoot = new DirectoryInfo(pluginsLocation);
if (pluginDirectoryRoot.Exists)
@@ -114,22 +105,48 @@ namespace Disco.Services.Plugins
catch (Exception) { }
if (pluginManifest != null)
{
// Check for Update
var catalogueItem = pluginCatalogue.Plugins.FirstOrDefault(i => i.Id == pluginManifest.Id && Version.Parse(i.LatestVersion) > pluginManifest.Version);
if (catalogueItem != null)
{ // Update Available
UpdatePlugins.Add(new Tuple<PluginManifest, string, PluginLibraryItem>(pluginManifest, null, catalogueItem));
}
}
installedPluginManifests.Add(pluginManifest);
}
}
}
if (UpdatePlugins.Count > 0)
return installedPluginManifests;
}
internal static void UpdateOffline(ScheduledTaskStatus Status)
{
PluginLibraryUpdateResponse pluginCatalogue = null;
List<PluginManifest> installedPluginManifests;
string pluginPackagesLocation;
List<Tuple<PluginManifest, string, PluginLibraryItem>> updatePlugins = new List<Tuple<PluginManifest, string, PluginLibraryItem>>();
using (DiscoDataContext dbContext = new DiscoDataContext())
{
ExecuteTaskInternal(Status, pluginPackagesLocation, UpdatePlugins);
pluginPackagesLocation = dbContext.DiscoConfiguration.PluginPackagesLocation;
installedPluginManifests = OfflineInstalledPlugins(dbContext);
if (installedPluginManifests.Count > 0)
pluginCatalogue = Plugins.LoadCatalogue(dbContext);
}
if (pluginCatalogue != null && installedPluginManifests.Count > 0)
{
foreach (var pluginManifest in installedPluginManifests)
{
// Check for Update
var catalogueItem = pluginCatalogue.Plugins.FirstOrDefault(i => i.Id == pluginManifest.Id && Version.Parse(i.LatestVersion) > pluginManifest.Version);
if (catalogueItem != null)
{ // Update Available
updatePlugins.Add(new Tuple<PluginManifest, string, PluginLibraryItem>(pluginManifest, null, catalogueItem));
}
}
}
if (updatePlugins.Count > 0)
{
ExecuteTaskInternal(Status, pluginPackagesLocation, updatePlugins);
}
}
+2 -2
View File
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.2.0618.1707")]
[assembly: AssemblyFileVersion("1.2.0618.1707")]
[assembly: AssemblyVersion("1.2.0620.1229")]
[assembly: AssemblyFileVersion("1.2.0620.1229")]
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.2.0618.1707")]
[assembly: AssemblyFileVersion("1.2.0618.1707")]
[assembly: AssemblyVersion("1.2.0620.1229")]
[assembly: AssemblyFileVersion("1.2.0620.1229")]
+44 -49
View File
@@ -25,42 +25,40 @@ namespace Disco.Web
return true;
}
public static void InitalizeEnvironment()
public static void InitalizeEnvironment(DiscoDataContext dbContext)
{
using (var dbContext = new DiscoDataContext())
// Initialize Logging
Disco.Services.Logging.LogContext.Initalize(dbContext, DiscoApplication.SchedulerFactory);
// Load Organisation Name
DiscoApplication.OrganisationName = dbContext.DiscoConfiguration.OrganisationName;
DiscoApplication.MultiSiteMode = dbContext.DiscoConfiguration.MultiSiteMode;
// Setup Global Proxy
DiscoApplication.SetGlobalProxy(dbContext.DiscoConfiguration.ProxyAddress,
dbContext.DiscoConfiguration.ProxyPort,
dbContext.DiscoConfiguration.ProxyUsername,
dbContext.DiscoConfiguration.ProxyPassword);
// Initialize Expressions
BI.Expressions.Expression.InitializeExpressions();
// Initialize Warranty Providers Plugins
Disco.Services.Plugins.Plugins.InitalizePlugins(dbContext);
// Initialize Scheduled Tasks
Disco.Services.Tasks.ScheduledTasks.InitalizeScheduledTasks(dbContext, DiscoApplication.SchedulerFactory, true);
// Schedule Immediate Check for Update (if never updated, or last updated over 2 days ago)
if (dbContext.DiscoConfiguration.UpdateLastCheck == null ||
dbContext.DiscoConfiguration.UpdateLastCheck.ResponseTimestamp < DateTime.Now.AddDays(-2))
{
// Initialize Logging
Disco.Services.Logging.LogContext.Initalize(dbContext, DiscoApplication.SchedulerFactory);
// Load Organisation Name
DiscoApplication.OrganisationName = dbContext.DiscoConfiguration.OrganisationName;
DiscoApplication.MultiSiteMode = dbContext.DiscoConfiguration.MultiSiteMode;
// Setup Global Proxy
DiscoApplication.SetGlobalProxy(dbContext.DiscoConfiguration.ProxyAddress,
dbContext.DiscoConfiguration.ProxyPort,
dbContext.DiscoConfiguration.ProxyUsername,
dbContext.DiscoConfiguration.ProxyPassword);
// Initialize Expressions
BI.Expressions.Expression.InitializeExpressions();
// Initialize Warranty Providers Plugins
Disco.Services.Plugins.Plugins.InitalizePlugins(dbContext);
// Initialize Scheduled Tasks
Disco.Services.Tasks.ScheduledTasks.InitalizeScheduledTasks(dbContext, DiscoApplication.SchedulerFactory, true);
// Schedule Immediate Check for Update (if never updated, or last updated over 2 days ago)
if (dbContext.DiscoConfiguration.UpdateLastCheck == null ||
dbContext.DiscoConfiguration.UpdateLastCheck.ResponseTimestamp < DateTime.Now.AddDays(-2))
{
Disco.BI.Interop.Community.UpdateCheckTask.ScheduleNow();
}
// Setup Attachment Monitor
DiscoApplication.DocumentDropBoxMonitor = new BI.DocumentTemplateBI.Importer.DocumentDropBoxMonitor(dbContext, DiscoApplication.SchedulerFactory, HttpContext.Current.Cache);
Disco.BI.Interop.Community.UpdateCheckTask.ScheduleNow();
}
// Setup Attachment Monitor
DiscoApplication.DocumentDropBoxMonitor = new BI.DocumentTemplateBI.Importer.DocumentDropBoxMonitor(dbContext, DiscoApplication.SchedulerFactory, HttpContext.Current.Cache);
DiscoApplication.DocumentDropBoxMonitor.StartWatching();
DiscoApplication.DocumentDropBoxMonitor.ScheduleCurrentFiles(10);
@@ -68,26 +66,23 @@ namespace Disco.Web
Disco.BI.Interop.SignalRHandlers.RepositoryMonitorNotifications.Initialize();
}
public static void InitializeUpdateEnvironment()
public static void InitializeUpdateEnvironment(DiscoDataContext dbContext)
{
using (var dbContext = new DiscoDataContext())
{
// Initialize Logging
Disco.Services.Logging.LogContext.Initalize(dbContext, DiscoApplication.SchedulerFactory);
// Initialize Logging
Disco.Services.Logging.LogContext.Initalize(dbContext, DiscoApplication.SchedulerFactory);
// Load Organisation Name
DiscoApplication.OrganisationName = dbContext.DiscoConfiguration.OrganisationName;
DiscoApplication.MultiSiteMode = dbContext.DiscoConfiguration.MultiSiteMode;
// Load Organisation Name
DiscoApplication.OrganisationName = dbContext.DiscoConfiguration.OrganisationName;
DiscoApplication.MultiSiteMode = dbContext.DiscoConfiguration.MultiSiteMode;
// Setup Global Proxy
DiscoApplication.SetGlobalProxy(dbContext.DiscoConfiguration.ProxyAddress,
dbContext.DiscoConfiguration.ProxyPort,
dbContext.DiscoConfiguration.ProxyUsername,
dbContext.DiscoConfiguration.ProxyPassword);
// Setup Global Proxy
DiscoApplication.SetGlobalProxy(dbContext.DiscoConfiguration.ProxyAddress,
dbContext.DiscoConfiguration.ProxyPort,
dbContext.DiscoConfiguration.ProxyUsername,
dbContext.DiscoConfiguration.ProxyPassword);
// Initialize Scheduled Tasks
Disco.Services.Tasks.ScheduledTasks.InitalizeScheduledTasks(dbContext, DiscoApplication.SchedulerFactory, true);
}
// Initialize Scheduled Tasks
Disco.Services.Tasks.ScheduledTasks.InitalizeScheduledTasks(dbContext, DiscoApplication.SchedulerFactory, true);
}
public static void DisposeEnvironment()
+56 -55
View File
@@ -38,68 +38,69 @@ namespace Disco.Web
if (AppConfig.InitializeDatabase())
{
// Database Initialized
Debug.WriteLine("Initialized Database: +{0}ms", timer.ElapsedMilliseconds - timer_last);
timer_last = timer.ElapsedMilliseconds;
// Check for Post-Update
bool ignoreVersionUpdate = false;
bool.TryParse(ConfigurationManager.AppSettings["DiscoIgnoreVersionUpdate"], out ignoreVersionUpdate);
Version previousVersion = null;
if (!ignoreVersionUpdate)
using (DiscoDataContext dbContext = new DiscoDataContext())
{
using (DiscoDataContext dbContext = new DiscoDataContext())
{
previousVersion = dbContext.DiscoConfiguration.InstalledDatabaseVersion;
}
}
if (ignoreVersionUpdate || Disco.BI.Interop.Community.UpdateCheck.CurrentDiscoVersion() == previousVersion)
{
// Normal Startup
AreaRegistration.RegisterAllAreas();
Debug.WriteLine("Registered Areas: +{0}ms", timer.ElapsedMilliseconds - timer_last);
timer_last = timer.ElapsedMilliseconds;
WebApiConfig.Register(GlobalConfiguration.Configuration);
Debug.WriteLine("Registered API: +{0}ms", timer.ElapsedMilliseconds - timer_last);
timer_last = timer.ElapsedMilliseconds;
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
Debug.WriteLine("Registered Global Filters: +{0}ms", timer.ElapsedMilliseconds - timer_last);
timer_last = timer.ElapsedMilliseconds;
RouteConfig.RegisterRoutes(RouteTable.Routes);
Debug.WriteLine("Registered Routes: +{0}ms", timer.ElapsedMilliseconds - timer_last);
timer_last = timer.ElapsedMilliseconds;
BundleConfig.RegisterBundles();
Debug.WriteLine("Registered Bundles: +{0}ms", timer.ElapsedMilliseconds - timer_last);
timer_last = timer.ElapsedMilliseconds;
AppConfig.InitalizeEnvironment();
Debug.WriteLine("Initialized Environment: +{0}ms", timer.ElapsedMilliseconds - timer_last);
timer_last = timer.ElapsedMilliseconds;
}
else
{
// Post-Update Startup
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterUpdateRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles();
AppConfig.InitializeUpdateEnvironment();
using (DiscoDataContext dbContext = new DiscoDataContext())
// Check for Post-Update
bool isVersionUpdate = dbContext.DiscoConfiguration.InstalledDatabaseVersion != Disco.BI.Interop.Community.UpdateCheck.CurrentDiscoVersion();
bool ignoreVersionUpdate = false;
if (isVersionUpdate)
{
// Update Database with New Version
dbContext.DiscoConfiguration.InstalledDatabaseVersion = Disco.BI.Interop.Community.UpdateCheck.CurrentDiscoVersion();
dbContext.SaveChanges();
// Check if configured to Ignore Plugin Updates (Mainly for Dev environment)
bool.TryParse(ConfigurationManager.AppSettings["DiscoIgnoreVersionUpdate"], out ignoreVersionUpdate);
// Only Update if Plugins are installed
if (!ignoreVersionUpdate)
ignoreVersionUpdate = (Disco.Services.Plugins.UpdatePluginTask.OfflineInstalledPlugins(dbContext).Count == 0);
}
if (!isVersionUpdate || ignoreVersionUpdate)
{
// Normal Startup
AreaRegistration.RegisterAllAreas();
Debug.WriteLine("Registered Areas: +{0}ms", timer.ElapsedMilliseconds - timer_last);
timer_last = timer.ElapsedMilliseconds;
WebApiConfig.Register(GlobalConfiguration.Configuration);
Debug.WriteLine("Registered API: +{0}ms", timer.ElapsedMilliseconds - timer_last);
timer_last = timer.ElapsedMilliseconds;
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
Debug.WriteLine("Registered Global Filters: +{0}ms", timer.ElapsedMilliseconds - timer_last);
timer_last = timer.ElapsedMilliseconds;
RouteConfig.RegisterRoutes(RouteTable.Routes);
Debug.WriteLine("Registered Routes: +{0}ms", timer.ElapsedMilliseconds - timer_last);
timer_last = timer.ElapsedMilliseconds;
BundleConfig.RegisterBundles();
Debug.WriteLine("Registered Bundles: +{0}ms", timer.ElapsedMilliseconds - timer_last);
timer_last = timer.ElapsedMilliseconds;
AppConfig.InitalizeEnvironment(dbContext);
Debug.WriteLine("Initialized Environment: +{0}ms", timer.ElapsedMilliseconds - timer_last);
timer_last = timer.ElapsedMilliseconds;
}
else
{
// Post-Update Startup
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterUpdateRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles();
AppConfig.InitializeUpdateEnvironment(dbContext);
}
}
}
+2 -2
View File
@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.2.0618.1707")]
[assembly: AssemblyFileVersion("1.2.0618.1707")]
[assembly: AssemblyVersion("1.2.0620.1229")]
[assembly: AssemblyFileVersion("1.2.0620.1229")]