diff options
| author | LukePulverenti Luke Pulverenti luke pulverenti <LukePulverenti Luke Pulverenti luke.pulverenti@gmail.com> | 2012-09-17 16:21:46 -0400 |
|---|---|---|
| committer | LukePulverenti Luke Pulverenti luke pulverenti <LukePulverenti Luke Pulverenti luke.pulverenti@gmail.com> | 2012-09-17 16:21:46 -0400 |
| commit | 9f1005d679cb9afe0c98c3f1ee73573a5e64c58d (patch) | |
| tree | 7ca084f5d5ff5f6e38594c10aa0781f954e2dfb9 | |
| parent | fe427bc7f4f1a709c43c8ecb035b07325ed710b9 (diff) | |
Added Reload Beginning/Completed events
| -rw-r--r-- | MediaBrowser.Common/Events/GenericEventArgs.cs | 12 | ||||
| -rw-r--r-- | MediaBrowser.Common/Kernel/BaseKernel.cs | 75 | ||||
| -rw-r--r-- | MediaBrowser.Common/MediaBrowser.Common.csproj | 2 | ||||
| -rw-r--r-- | MediaBrowser.Common/UI/BaseApplication.cs | 43 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Kernel.cs | 8 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/MainWindow.xaml.cs | 40 |
6 files changed, 108 insertions, 72 deletions
diff --git a/MediaBrowser.Common/Events/GenericEventArgs.cs b/MediaBrowser.Common/Events/GenericEventArgs.cs new file mode 100644 index 000000000..98e072816 --- /dev/null +++ b/MediaBrowser.Common/Events/GenericEventArgs.cs @@ -0,0 +1,12 @@ +using System;
+
+namespace MediaBrowser.Common.Events
+{
+ /// <summary>
+ /// Provides a generic EventArgs subclass that can hold any kind of object
+ /// </summary>
+ public class GenericEventArgs<T> : EventArgs
+ {
+ public T Argument { get; set; }
+ }
+}
diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs index 1fdc597ea..0eebc863c 100644 --- a/MediaBrowser.Common/Kernel/BaseKernel.cs +++ b/MediaBrowser.Common/Kernel/BaseKernel.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Common.Logging;
+using MediaBrowser.Common.Events;
+using MediaBrowser.Common.Logging;
using MediaBrowser.Common.Net;
using MediaBrowser.Common.Net.Handlers;
using MediaBrowser.Common.Plugins;
@@ -24,6 +25,34 @@ namespace MediaBrowser.Common.Kernel where TConfigurationType : BaseApplicationConfiguration, new()
where TApplicationPathsType : BaseApplicationPaths, new()
{
+ #region ReloadBeginning Event
+ /// <summary>
+ /// Fires whenever the kernel begins reloading
+ /// </summary>
+ public event EventHandler<GenericEventArgs<IProgress<TaskProgress>>> ReloadBeginning;
+ private void OnReloadBeginning(IProgress<TaskProgress> progress)
+ {
+ if (ReloadBeginning != null)
+ {
+ ReloadBeginning(this, new GenericEventArgs<IProgress<TaskProgress>> { Argument = progress });
+ }
+ }
+ #endregion
+
+ #region ReloadCompleted Event
+ /// <summary>
+ /// Fires whenever the kernel completes reloading
+ /// </summary>
+ public event EventHandler<GenericEventArgs<IProgress<TaskProgress>>> ReloadCompleted;
+ private void OnReloadCompleted(IProgress<TaskProgress> progress)
+ {
+ if (ReloadCompleted != null)
+ {
+ ReloadCompleted(this, new GenericEventArgs<IProgress<TaskProgress>> { Argument = progress });
+ }
+ }
+ #endregion
+
/// <summary>
/// Gets the current configuration
/// </summary>
@@ -78,7 +107,7 @@ namespace MediaBrowser.Common.Kernel // Performs initializations that can be reloaded at anytime
await Reload(progress).ConfigureAwait(false);
- progress.Report(new TaskProgress { Description = "Loading Complete" });
+ ReportProgress(progress, "Loading Complete");
}
/// <summary>
@@ -87,29 +116,41 @@ namespace MediaBrowser.Common.Kernel protected virtual void InitializeInternal(IProgress<TaskProgress> progress)
{
ApplicationPaths = new TApplicationPathsType();
-
+
ReloadLogger();
- progress.Report(new TaskProgress { Description = "Loading configuration" });
+ ReportProgress(progress, "Loading Configuration");
ReloadConfiguration();
- progress.Report(new TaskProgress { Description = "Starting Http server" });
+ ReportProgress(progress, "Loading Http Server");
ReloadHttpServer();
}
/// <summary>
/// Performs initializations that can be reloaded at anytime
/// </summary>
- public virtual async Task Reload(IProgress<TaskProgress> progress)
+ public async Task Reload(IProgress<TaskProgress> progress)
+ {
+ OnReloadBeginning(progress);
+
+ await ReloadInternal(progress).ConfigureAwait(false);
+
+ OnReloadCompleted(progress);
+ }
+
+ /// <summary>
+ /// Performs initializations that can be reloaded at anytime
+ /// </summary>
+ protected virtual async Task ReloadInternal(IProgress<TaskProgress> progress)
{
await Task.Run(() =>
{
- progress.Report(new TaskProgress { Description = "Loading Plugins" });
+ ReportProgress(progress, "Loading Plugins");
ReloadComposableParts();
}).ConfigureAwait(false);
}
-
+
/// <summary>
/// Disposes the current logger and creates a new one
/// </summary>
@@ -233,7 +274,7 @@ namespace MediaBrowser.Common.Kernel public virtual void Dispose()
{
Logger.LogInfo("Beginning Kernel.Dispose");
-
+
DisposeComposableParts();
DisposeHttpServer();
@@ -257,7 +298,7 @@ namespace MediaBrowser.Common.Kernel if (Plugins != null)
{
Logger.LogInfo("Disposing Plugins");
-
+
foreach (BasePlugin plugin in Plugins)
{
plugin.Dispose();
@@ -273,7 +314,7 @@ namespace MediaBrowser.Common.Kernel if (HttpServer != null)
{
Logger.LogInfo("Disposing Http Server");
-
+
HttpServer.Dispose();
}
@@ -293,7 +334,7 @@ namespace MediaBrowser.Common.Kernel if (Logger.LoggerInstance != null)
{
Logger.LogInfo("Disposing Logger");
-
+
Logger.LoggerInstance.Dispose();
}
}
@@ -309,6 +350,16 @@ namespace MediaBrowser.Common.Kernel }
}
+ protected void ReportProgress(IProgress<TaskProgress> progress, string message)
+ {
+ progress.Report(new TaskProgress { Description = message });
+
+ if (Logger.LoggerInstance != null)
+ {
+ Logger.LogInfo(message);
+ }
+ }
+
BaseApplicationPaths IKernel.ApplicationPaths
{
get { return ApplicationPaths; }
diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index fb192ec1a..16b4f236c 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -81,6 +81,7 @@ <Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
+ <Compile Include="Events\GenericEventArgs.cs" />
<Compile Include="Kernel\BaseApplicationPaths.cs" />
<Compile Include="Drawing\DrawingUtils.cs" />
<Compile Include="Logging\TraceLogger.cs" />
@@ -151,6 +152,7 @@ <ItemGroup>
<Resource Include="Resources\Images\spinner.gif" />
</ItemGroup>
+ <ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
diff --git a/MediaBrowser.Common/UI/BaseApplication.cs b/MediaBrowser.Common/UI/BaseApplication.cs index e22eed158..90583da4d 100644 --- a/MediaBrowser.Common/UI/BaseApplication.cs +++ b/MediaBrowser.Common/UI/BaseApplication.cs @@ -5,7 +5,6 @@ using Microsoft.Shell; using System;
using System.Collections.Generic;
using System.ComponentModel;
-using System.Threading.Tasks;
using System.Windows;
namespace MediaBrowser.Common.UI
@@ -44,8 +43,6 @@ namespace MediaBrowser.Common.UI var progress = new Progress<TaskProgress>();
- progress.ProgressChanged += progress_ProgressChanged;
-
var splash = new Splash(progress);
splash.Show();
@@ -56,8 +53,6 @@ namespace MediaBrowser.Common.UI await Kernel.Init(progress);
- progress.ProgressChanged -= progress_ProgressChanged;
-
Logger.LogInfo("Kernel.Init completed in {0} seconds.", (DateTime.UtcNow - now).TotalSeconds);
splash.Close();
@@ -69,8 +64,6 @@ namespace MediaBrowser.Common.UI }
catch (Exception ex)
{
- progress.ProgressChanged -= progress_ProgressChanged;
-
if (Logger.LoggerInstance != null)
{
Logger.LogException(ex);
@@ -84,44 +77,8 @@ namespace MediaBrowser.Common.UI }
}
- public async Task ReloadKernel()
- {
- var progress = new Progress<TaskProgress>();
-
- progress.ProgressChanged += progress_ProgressChanged;
-
- try
- {
- DateTime now = DateTime.UtcNow;
-
- await Kernel.Reload(progress);
-
- progress.ProgressChanged -= progress_ProgressChanged;
-
- Logger.LogInfo("Kernel.Reload completed in {0} seconds.", (DateTime.UtcNow - now).TotalSeconds);
- }
- catch (Exception ex)
- {
- progress.ProgressChanged -= progress_ProgressChanged;
-
- Logger.LogException(ex);
-
- // Shutdown the app with an error code
- Shutdown(1);
- }
- }
-
- void progress_ProgressChanged(object sender, TaskProgress e)
- {
- if (Logger.LoggerInstance != null)
- {
- Logger.LogInfo(e.Description);
- }
- }
-
protected virtual void OnKernelLoaded()
{
-
}
protected override void OnExit(ExitEventArgs e)
diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs index 2a2916a74..682abb632 100644 --- a/MediaBrowser.Controller/Kernel.cs +++ b/MediaBrowser.Controller/Kernel.cs @@ -97,18 +97,18 @@ namespace MediaBrowser.Controller /// <summary>
/// Performs initializations that can be reloaded at anytime
/// </summary>
- public override async Task Reload(IProgress<TaskProgress> progress)
+ protected override async Task ReloadInternal(IProgress<TaskProgress> progress)
{
- await base.Reload(progress).ConfigureAwait(false);
+ await base.ReloadInternal(progress).ConfigureAwait(false);
ReloadWeatherClient();
ExtractFFMpeg();
- progress.Report(new TaskProgress { Description = "Loading Users" });
+ ReportProgress(progress, "Loading Users");
ReloadUsers();
- progress.Report(new TaskProgress { Description = "Loading Media Library" });
+ ReportProgress(progress, "Loading Media Library");
await ReloadRoot(allowInternetProviders: false).ConfigureAwait(false);
}
diff --git a/MediaBrowser.ServerApplication/MainWindow.xaml.cs b/MediaBrowser.ServerApplication/MainWindow.xaml.cs index 3839dc52e..6180482d7 100644 --- a/MediaBrowser.ServerApplication/MainWindow.xaml.cs +++ b/MediaBrowser.ServerApplication/MainWindow.xaml.cs @@ -1,4 +1,7 @@ using Hardcodet.Wpf.TaskbarNotification;
+using MediaBrowser.Common.Events;
+using MediaBrowser.Controller;
+using MediaBrowser.Model.Progress;
using System;
using System.ComponentModel;
using System.Threading;
@@ -11,15 +14,36 @@ namespace MediaBrowser.ServerApplication /// </summary>
public partial class MainWindow : Window, INotifyPropertyChanged
{
+ private Timer LoadingIconTimer { get; set; }
+
public MainWindow()
{
InitializeComponent();
- Loaded += MainWindow_Loaded;
+ Loaded += MainWindowLoaded;
}
- void MainWindow_Loaded(object sender, RoutedEventArgs e)
+ void MainWindowLoaded(object sender, RoutedEventArgs e)
{
DataContext = this;
+
+ Kernel.Instance.ReloadBeginning += KernelReloadBeginning;
+ Kernel.Instance.ReloadCompleted += KernelReloadCompleted;
+ }
+
+ void KernelReloadBeginning(object sender, GenericEventArgs<IProgress<TaskProgress>> e)
+ {
+ MbTaskbarIcon.ShowBalloonTip("Media Browser is reloading", "Please wait...", BalloonIcon.Info);
+
+ LoadingImageIndex = 0;
+
+ LoadingIconTimer = new Timer(LoadingIconTimerCallback, null, 0, 250);
+ }
+
+ void KernelReloadCompleted(object sender, GenericEventArgs<IProgress<TaskProgress>> e)
+ {
+ LoadingIconTimer.Dispose();
+
+ LoadingImageIndex = 0;
}
public event PropertyChangedEventHandler PropertyChanged;
@@ -62,17 +86,7 @@ namespace MediaBrowser.ServerApplication private async void cmdReloadServer_click(object sender, RoutedEventArgs e)
{
- MbTaskbarIcon.ShowBalloonTip("Media Browser is reloading", "Please wait...", BalloonIcon.Info);
-
- LoadingImageIndex = 0;
-
- Timer timer = new Timer(LoadingIconTimerCallback, null, 0, 250);
-
- await (Application.Current as App).ReloadKernel().ConfigureAwait(false);
-
- timer.Dispose();
-
- LoadingImageIndex = 0;
+ await Kernel.Instance.Reload(new Progress<TaskProgress>()).ConfigureAwait(false);
}
private void LoadingIconTimerCallback(object stateInfo)
|
