Added Reload Beginning/Completed events
This commit is contained in:
parent
fe427bc7f4
commit
9f1005d679
12
MediaBrowser.Common/Events/GenericEventArgs.cs
Normal file
12
MediaBrowser.Common/Events/GenericEventArgs.cs
Normal file
|
@ -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; }
|
||||
}
|
||||
}
|
|
@ -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>
|
||||
|
@ -90,21 +119,33 @@ namespace MediaBrowser.Common.Kernel
|
|||
|
||||
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);
|
||||
|
@ -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; }
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue
Block a user