Преглед на файлове

convert app to windows forms

Luke Pulverenti преди 11 години
родител
ревизия
46f668fbd8

+ 0 - 7
MediaBrowser.ServerApplication/App.xaml

@@ -1,7 +0,0 @@
-<Application x:Class="MediaBrowser.ServerApplication.App"
-             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
-    <Application.Resources>
-
-    </Application.Resources>
-</Application>

+ 0 - 150
MediaBrowser.ServerApplication/App.xaml.cs

@@ -1,150 +0,0 @@
-using MediaBrowser.Common.Events;
-using MediaBrowser.Controller;
-using MediaBrowser.Controller.Configuration;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Model.Logging;
-using MediaBrowser.ServerApplication.Splash;
-using System;
-using System.Diagnostics;
-using System.Windows;
-
-namespace MediaBrowser.ServerApplication
-{
-    /// <summary>
-    /// Interaction logic for App.xaml
-    /// </summary>
-    public partial class App : Application
-    {
-        /// <summary>
-        /// Gets or sets the logger.
-        /// </summary>
-        /// <value>The logger.</value>
-        private readonly ILogger _logger;
-
-        /// <summary>
-        /// Gets or sets the composition root.
-        /// </summary>
-        /// <value>The composition root.</value>
-        private readonly ApplicationHost _appHost;
-
-        public event EventHandler AppStarted;
-
-        public bool IsRunningAsService { get; private set; }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="App" /> class.
-        /// </summary>
-        /// <param name="logger">The logger.</param>
-        public App(ApplicationHost appHost, ILogger logger, bool isRunningAsService)
-        {
-            _appHost = appHost;
-            _logger = logger;
-            IsRunningAsService = isRunningAsService;
-
-            InitializeComponent();
-        }
-
-        /// <summary>
-        /// Gets the name of the uninstaller file.
-        /// </summary>
-        /// <value>The name of the uninstaller file.</value>
-        protected string UninstallerFileName
-        {
-            get { return "MediaBrowser.Server.Uninstall.exe"; }
-        }
-
-        public void OnUnhandledException(Exception ex)
-        {
-            MessageBox.Show("Unhandled exception: " + ex.Message);
-        }
-
-        protected override void OnStartup(StartupEventArgs e)
-        {
-            base.OnStartup(e);
-
-            LoadApplication();
-        }
-
-        /// <summary>
-        /// Loads the kernel.
-        /// </summary>
-        protected async void LoadApplication()
-        {
-            try
-            {
-                var initProgress = new Progress<double>();
-
-                if (!IsRunningAsService)
-                {
-                    ShowSplashWindow(initProgress);
-                }
-
-                await _appHost.Init(initProgress);
-
-                var task = _appHost.RunStartupTasks();
-
-                if (!IsRunningAsService)
-                {
-                    HideSplashWindow();
-                }
-
-                if (!IsRunningAsService)
-                {
-                    ShowMainWindow();
-                }
-
-                EventHelper.FireEventIfNotNull(AppStarted, this, EventArgs.Empty, _logger);
-
-                await task;
-            }
-            catch (Exception ex)
-            {
-                _logger.ErrorException("Error launching application", ex);
-
-                MessageBox.Show("There was an error launching Media Browser: " + ex.Message);
-
-                // Shutdown the app with an error code
-                Shutdown(1);
-            }
-        }
-
-        private MainWindow _mainWindow;
-        private void ShowMainWindow()
-        {
-            var host = _appHost;
-
-            var win = new MainWindow(host.LogManager, host,
-                                     host.ServerConfigurationManager, host.UserManager,
-                                     host.LibraryManager, host.JsonSerializer,
-                                     host.DisplayPreferencesRepository,
-                                     host.ItemRepository);
-
-            win.Show();
-
-            _mainWindow = win;
-        }
-
-        private SplashForm _splashWindow;
-        private void ShowSplashWindow(Progress<double> progress)
-        {
-            var win = new SplashForm(_appHost.ApplicationVersion, progress);
-            win.Show();
-
-            _splashWindow = win;
-        }
-
-        private void HideSplashWindow()
-        {
-            if (_splashWindow != null)
-            {
-                _splashWindow.Hide();
-                _splashWindow = null;
-            }
-        }
-
-        public void ShutdownApplication()
-        {
-            Dispatcher.Invoke(Shutdown);
-        }
-    }
-}

+ 58 - 14
MediaBrowser.ServerApplication/MainStartup.cs

@@ -1,10 +1,13 @@
-using MediaBrowser.Common.Configuration;
+using System.Threading;
+using System.Threading.Tasks;
+using MediaBrowser.Common.Configuration;
 using MediaBrowser.Common.Constants;
 using MediaBrowser.Common.Implementations.Logging;
 using MediaBrowser.Common.Implementations.Updates;
 using MediaBrowser.Model.Logging;
 using MediaBrowser.Server.Implementations;
 using MediaBrowser.ServerApplication.Native;
+using MediaBrowser.ServerApplication.Splash;
 using Microsoft.Win32;
 using System;
 using System.Configuration.Install;
@@ -14,6 +17,7 @@ using System.Linq;
 using System.Runtime.InteropServices;
 using System.ServiceProcess;
 using System.Windows;
+using System.Windows.Forms;
 
 namespace MediaBrowser.ServerApplication
 {
@@ -21,8 +25,6 @@ namespace MediaBrowser.ServerApplication
     {
         private static ApplicationHost _appHost;
 
-        private static App _app;
-
         private static ILogger _logger;
 
         private static bool _isRunningAsService = false;
@@ -201,6 +203,8 @@ namespace MediaBrowser.ServerApplication
             logger.Info("Application Path: {0}", appPaths.ApplicationPath);
         }
 
+        private static readonly TaskCompletionSource<bool> ApplicationTaskCompletionSource = new TaskCompletionSource<bool>();
+
         /// <summary>
         /// Runs the application.
         /// </summary>
@@ -209,25 +213,66 @@ namespace MediaBrowser.ServerApplication
         /// <param name="runService">if set to <c>true</c> [run service].</param>
         private static void RunApplication(ServerApplicationPaths appPaths, ILogManager logManager, bool runService)
         {
-            SystemEvents.SessionEnding += SystemEvents_SessionEnding;
-            SystemEvents.SessionSwitch += SystemEvents_SessionSwitch;
-
             _appHost = new ApplicationHost(appPaths, logManager, runService);
 
-            _app = new App(_appHost, _appHost.LogManager.GetLogger("App"), runService);
+            var initProgress = new Progress<double>();
 
             if (runService)
             {
-                _app.AppStarted += (sender, args) => StartService(logManager);
+                StartService(logManager);
             }
             else
             {
+                ShowSplashScreen(_appHost.ApplicationVersion, initProgress, logManager.GetLogger("Splash"));
+                
                 // Not crazy about this but it's the only way to suppress ffmpeg crash dialog boxes
                 SetErrorMode(ErrorModes.SEM_FAILCRITICALERRORS | ErrorModes.SEM_NOALIGNMENTFAULTEXCEPT |
                              ErrorModes.SEM_NOGPFAULTERRORBOX | ErrorModes.SEM_NOOPENFILEERRORBOX);
             }
 
-            _app.Run();
+            var task = _appHost.Init(initProgress);
+            Task.WaitAll(task);
+
+            task = _appHost.RunStartupTasks();
+            Task.WaitAll(task);
+
+            if (!runService)
+            {
+                HideSplashScreen();
+            }
+
+            SystemEvents.SessionEnding += SystemEvents_SessionEnding;
+            SystemEvents.SessionSwitch += SystemEvents_SessionSwitch;
+            
+            task = ApplicationTaskCompletionSource.Task;
+            Task.WaitAll(task);
+        }
+
+        private static SplashForm _splash;
+        private static Thread _splashThread;
+        private static void ShowSplashScreen(Version appVersion, Progress<double> progress, ILogger logger)
+        {
+            var thread = new Thread(() =>
+            {
+                _splash = new SplashForm(appVersion, progress);
+
+                _splash.ShowDialog();
+            });
+           
+            thread.SetApartmentState(ApartmentState.STA);
+            thread.IsBackground = true;
+            thread.Start();
+
+            _splashThread = thread;
+        }
+
+        private static void HideSplashScreen()
+        {
+            if (_splash != null)
+            {
+                _splash.Close();
+                _splashThread = null;
+            }
         }
 
         static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
@@ -257,6 +302,7 @@ namespace MediaBrowser.ServerApplication
         /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
         static void service_Disposed(object sender, EventArgs e)
         {
+            ApplicationTaskCompletionSource.SetResult(true);
             OnServiceShutdown();
         }
 
@@ -270,8 +316,6 @@ namespace MediaBrowser.ServerApplication
             {
                 SetErrorMode(ErrorModes.SYSTEM_DEFAULT);
             }
-
-            _app.Dispatcher.Invoke(_app.Shutdown);
         }
 
         /// <summary>
@@ -392,7 +436,7 @@ namespace MediaBrowser.ServerApplication
 
             if (!_isRunningAsService)
             {
-                _app.OnUnhandledException(exception);
+                MessageBox.Show("Unhandled exception: " + exception.Message);
             }
 
             if (!Debugger.IsAttached)
@@ -467,7 +511,7 @@ namespace MediaBrowser.ServerApplication
             if (!_isRunningAsService)
             {
                 _logger.Info("Executing windows forms restart");
-                System.Windows.Forms.Application.Restart();
+                Application.Restart();
 
                 ShutdownWindowsApplication();
             }
@@ -475,7 +519,7 @@ namespace MediaBrowser.ServerApplication
 
         private static void ShutdownWindowsApplication()
         {
-            _app.Dispatcher.Invoke(_app.Shutdown);
+            ApplicationTaskCompletionSource.SetResult(true);
         }
 
         private static void ShutdownWindowsService()

+ 0 - 40
MediaBrowser.ServerApplication/MainWindow.xaml

@@ -1,40 +0,0 @@
-<Window x:Class="MediaBrowser.ServerApplication.MainWindow"
-        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-        xmlns:tb="http://www.hardcodet.net/taskbar"
-        Title="Media Browser Server" 
-        Height="350" 
-        Width="525" 
-        AllowsTransparency="True" 
-        Background="Transparent" 
-        WindowStyle="None" 
-        ShowInTaskbar="False">
-    <Grid>
-        <tb:TaskbarIcon Name="MbTaskbarIcon" ToolTipText="Media Browser Server" IconSource="/Resources/Images/icon.ico">
-
-            <tb:TaskbarIcon.ContextMenu>
-                <ContextMenu Background="White">
-                    <MenuItem x:Name="cmdBrowseLibrary" Header="Browse Library" Click="cmdBrowseLibrary_click"/>
-                    <MenuItem x:Name="cmOpenDashboard" Header="Configure Media Browser" Click="cmOpenDashboard_click"/>
-                    <Separator x:Name="separatorDeveloperTools"/>
-                    <MenuItem x:Name="cmOpenExplorer" Header="Open Library Explorer" Click="cmOpenExplorer_click" />
-                    <MenuItem x:Name="cmdReloadServer" Header="Restart Server" Click="cmdReloadServer_click" />
-                    <MenuItem x:Name="cmdApiDocs" Header="View Api Documentation">
-                        <MenuItem x:Name="cmdStandardApiDocs" Header="Standard" Click="cmdApiDocs_Click" Background="White">
-                        </MenuItem>
-                        <MenuItem x:Name="cmdSwaggerApiDocs" Header="Swagger" Click="cmdSwaggerApiDocs_Click" Background="White">
-                        </MenuItem>
-                        <MenuItem x:Name="cmdGithubWiki" Header="GitHub Wiki" Click="cmdGithubWiki_Click" Background="White">
-                        </MenuItem>
-                    </MenuItem>
-                    <Separator/>
-                    <MenuItem x:Name="cmShowLogWindow" Header="Show Log Window" IsCheckable="True" Click="CmShowLogWindow_click"/>
-                    <MenuItem x:Name="cmVisitCT" Header="Visit Community" Click="cmVisitCT_click"/>
-                    <Separator/>
-                    <MenuItem x:Name="cmExit" Header="Exit" Click="cmExit_click"/>
-                </ContextMenu>
-            </tb:TaskbarIcon.ContextMenu>
-
-        </tb:TaskbarIcon>
-    </Grid>
-</Window>

+ 0 - 301
MediaBrowser.ServerApplication/MainWindow.xaml.cs

@@ -1,301 +0,0 @@
-using MediaBrowser.Controller;
-using MediaBrowser.Controller.Configuration;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Persistence;
-using MediaBrowser.Model.Logging;
-using MediaBrowser.Model.Serialization;
-using MediaBrowser.ServerApplication.Logging;
-using MediaBrowser.ServerApplication.Native;
-using System;
-using System.ComponentModel;
-using System.Diagnostics;
-using System.Windows;
-using System.Windows.Threading;
-
-namespace MediaBrowser.ServerApplication
-{
-    /// <summary>
-    /// Interaction logic for MainWindow.xaml
-    /// </summary>
-    public partial class MainWindow : Window, INotifyPropertyChanged
-    {
-        /// <summary>
-        /// The _logger
-        /// </summary>
-        private readonly ILogger _logger;
-
-        /// <summary>
-        /// The _app host
-        /// </summary>
-        private readonly IServerApplicationHost _appHost;
-
-        /// <summary>
-        /// The _log manager
-        /// </summary>
-        private readonly ILogManager _logManager;
-
-        /// <summary>
-        /// The _configuration manager
-        /// </summary>
-        private readonly IServerConfigurationManager _configurationManager;
-
-        private readonly IUserManager _userManager;
-        private readonly ILibraryManager _libraryManager;
-        private readonly IJsonSerializer _jsonSerializer;
-        private readonly IDisplayPreferencesRepository _displayPreferencesManager;
-        private readonly IItemRepository _itemRepository;
-
-        private LogForm _logForm;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="MainWindow" /> class.
-        /// </summary>
-        /// <param name="logManager">The log manager.</param>
-        /// <param name="appHost">The app host.</param>
-        /// <param name="configurationManager">The configuration manager.</param>
-        /// <param name="userManager">The user manager.</param>
-        /// <param name="libraryManager">The library manager.</param>
-        /// <param name="jsonSerializer">The json serializer.</param>
-        /// <param name="displayPreferencesManager">The display preferences manager.</param>
-        /// <exception cref="System.ArgumentNullException">logger</exception>
-        public MainWindow(ILogManager logManager, IServerApplicationHost appHost, IServerConfigurationManager configurationManager, IUserManager userManager, ILibraryManager libraryManager, IJsonSerializer jsonSerializer, IDisplayPreferencesRepository displayPreferencesManager, IItemRepository itemRepo)
-        {
-            if (logManager == null)
-            {
-                throw new ArgumentNullException("logManager");
-            }
-            if (appHost == null)
-            {
-                throw new ArgumentNullException("appHost");
-            }
-            if (configurationManager == null)
-            {
-                throw new ArgumentNullException("configurationManager");
-            }
-
-            _logger = logManager.GetLogger("MainWindow");
-            _itemRepository = itemRepo;
-            _appHost = appHost;
-            _logManager = logManager;
-            _configurationManager = configurationManager;
-            _userManager = userManager;
-            _libraryManager = libraryManager;
-            _jsonSerializer = jsonSerializer;
-            _displayPreferencesManager = displayPreferencesManager;
-
-            InitializeComponent();
-
-            Loaded += MainWindowLoaded;
-        }
-
-        /// <summary>
-        /// Mains the window loaded.
-        /// </summary>
-        /// <param name="sender">The sender.</param>
-        /// <param name="e">The <see cref="RoutedEventArgs" /> instance containing the event data.</param>
-        void MainWindowLoaded(object sender, RoutedEventArgs e)
-        {
-            DataContext = this;
-
-            UpdateButtons();
-
-            LoadLogWindow(null, EventArgs.Empty);
-            _logManager.LoggerLoaded += LoadLogWindow;
-            _configurationManager.ConfigurationUpdated += Instance_ConfigurationUpdated;
-
-            if (_appHost.IsFirstRun)
-            {
-                Dispatcher.InvokeAsync(() => MbTaskbarIcon.ShowBalloonTip("Media Browser", "Welcome to Media Browser Server!", Hardcodet.Wpf.TaskbarNotification.BalloonIcon.None));
-            }
-        }
-
-        /// <summary>
-        /// Handles the ConfigurationUpdated event of the Instance control.
-        /// </summary>
-        /// <param name="sender">The source of the event.</param>
-        /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
-        void Instance_ConfigurationUpdated(object sender, EventArgs e)
-        {
-            UpdateButtons();
-
-            Dispatcher.InvokeAsync(() =>
-            {
-                var isLogWindowOpen = _logForm != null;
-
-                if ((!isLogWindowOpen && _configurationManager.Configuration.ShowLogWindow) || (isLogWindowOpen && !_configurationManager.Configuration.ShowLogWindow))
-                {
-                    _logManager.ReloadLogger(_configurationManager.Configuration.EnableDebugLevelLogging ? LogSeverity.Debug : LogSeverity.Info);
-                }
-            });
-        }
-
-        private void UpdateButtons()
-        {
-            Dispatcher.InvokeAsync(() =>
-            {
-                separatorDeveloperTools.Visibility = Visibility.Visible;
-                cmdReloadServer.Visibility = Visibility.Visible;
-                cmOpenExplorer.Visibility = Visibility.Visible;
-                cmShowLogWindow.Visibility = Visibility.Visible;
-            });
-        }
-
-        /// <summary>
-        /// Loads the log window.
-        /// </summary>
-        /// <param name="sender">The sender.</param>
-        /// <param name="args">The <see cref="EventArgs" /> instance containing the event data.</param>
-        void LoadLogWindow(object sender, EventArgs args)
-        {
-            CloseLogWindow();
-
-            Dispatcher.InvokeAsync(() =>
-            {
-                // Add our log window if specified
-                if (_configurationManager.Configuration.ShowLogWindow)
-                {
-                    _logForm = new LogForm(_logManager);
-
-                    Trace.Listeners.Add(new WindowTraceListener(_logForm));
-                }
-                else
-                {
-                    Trace.Listeners.Remove("MBLogWindow");
-                }
-                // Set menu option indicator
-                cmShowLogWindow.IsChecked = _configurationManager.Configuration.ShowLogWindow;
-
-            }, DispatcherPriority.Normal);
-        }
-
-        /// <summary>
-        /// Closes the log window.
-        /// </summary>
-        void CloseLogWindow()
-        {
-            if (_logForm != null)
-            {
-                _logForm.ShutDown();
-            }
-        }
-
-        /// <summary>
-        /// Handles the Click event of the cmdApiDocs control.
-        /// </summary>
-        /// <param name="sender">The source of the event.</param>
-        /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
-        void cmdApiDocs_Click(object sender, EventArgs e)
-        {
-            BrowserLauncher.OpenStandardApiDocumentation(_configurationManager, _appHost, _logger);
-        }
-
-        void cmdSwaggerApiDocs_Click(object sender, EventArgs e)
-        {
-            BrowserLauncher.OpenSwagger(_configurationManager, _appHost, _logger);
-        }
-
-        void cmdGithubWiki_Click(object sender, EventArgs e)
-        {
-            BrowserLauncher.OpenGithub(_logger);
-        }
-
-        /// <summary>
-        /// Occurs when [property changed].
-        /// </summary>
-        public event PropertyChangedEventHandler PropertyChanged;
-
-        /// <summary>
-        /// Called when [property changed].
-        /// </summary>
-        /// <param name="info">The info.</param>
-        public void OnPropertyChanged(String info)
-        {
-            if (PropertyChanged != null)
-            {
-                try
-                {
-                    PropertyChanged(this, new PropertyChangedEventArgs(info));
-                }
-                catch (Exception ex)
-                {
-                    _logger.ErrorException("Error in event handler", ex);
-                }
-            }
-        }
-
-        #region Context Menu events
-        /// <summary>
-        /// Handles the click event of the cmOpenExplorer control.
-        /// </summary>
-        /// <param name="sender">The source of the event.</param>
-        /// <param name="e">The <see cref="RoutedEventArgs" /> instance containing the event data.</param>
-        private void cmOpenExplorer_click(object sender, RoutedEventArgs e)
-        {
-            new LibraryViewer(_jsonSerializer, _userManager, _libraryManager, _displayPreferencesManager, _itemRepository).Show();
-        }
-
-        /// <summary>
-        /// Handles the click event of the cmOpenDashboard control.
-        /// </summary>
-        /// <param name="sender">The source of the event.</param>
-        /// <param name="e">The <see cref="RoutedEventArgs" /> instance containing the event data.</param>
-        private void cmOpenDashboard_click(object sender, RoutedEventArgs e)
-        {
-            BrowserLauncher.OpenDashboard(_userManager, _configurationManager, _appHost, _logger);
-        }
-
-        /// <summary>
-        /// Handles the click event of the cmVisitCT control.
-        /// </summary>
-        /// <param name="sender">The source of the event.</param>
-        /// <param name="e">The <see cref="RoutedEventArgs" /> instance containing the event data.</param>
-        private void cmVisitCT_click(object sender, RoutedEventArgs e)
-        {
-            BrowserLauncher.OpenCommunity(_logger);
-        }
-
-        /// <summary>
-        /// Handles the click event of the cmdBrowseLibrary control.
-        /// </summary>
-        /// <param name="sender">The source of the event.</param>
-        /// <param name="e">The <see cref="RoutedEventArgs" /> instance containing the event data.</param>
-        private void cmdBrowseLibrary_click(object sender, RoutedEventArgs e)
-        {
-            BrowserLauncher.OpenWebClient(_userManager, _configurationManager, _appHost, _logger);
-        }
-
-        /// <summary>
-        /// Handles the click event of the cmExit control.
-        /// </summary>
-        /// <param name="sender">The source of the event.</param>
-        /// <param name="e">The <see cref="RoutedEventArgs" /> instance containing the event data.</param>
-        private async void cmExit_click(object sender, RoutedEventArgs e)
-        {
-            await _appHost.Shutdown().ConfigureAwait(false);
-        }
-
-        /// <summary>
-        /// Handles the click event of the cmdReloadServer control.
-        /// </summary>
-        /// <param name="sender">The source of the event.</param>
-        /// <param name="e">The <see cref="RoutedEventArgs" /> instance containing the event data.</param>
-        private async void cmdReloadServer_click(object sender, RoutedEventArgs e)
-        {
-            await _appHost.Restart().ConfigureAwait(false);
-        }
-
-        /// <summary>
-        /// Handles the click event of the CmShowLogWindow control.
-        /// </summary>
-        /// <param name="sender">The source of the event.</param>
-        /// <param name="e">The <see cref="RoutedEventArgs" /> instance containing the event data.</param>
-        private void CmShowLogWindow_click(object sender, RoutedEventArgs e)
-        {
-            _configurationManager.Configuration.ShowLogWindow = !_configurationManager.Configuration.ShowLogWindow;
-            _configurationManager.SaveConfiguration();
-            LoadLogWindow(sender, e);
-        }
-
-        #endregion
-    }
-}

+ 40 - 205
MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj

@@ -4,38 +4,15 @@
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}</ProjectGuid>
+    <ProjectGuid>{94ADE4D3-B7EC-45CD-A200-CC469433072B}</ProjectGuid>
     <OutputType>WinExe</OutputType>
     <AppDesignerFolder>Properties</AppDesignerFolder>
     <RootNamespace>MediaBrowser.ServerApplication</RootNamespace>
     <AssemblyName>MediaBrowser.ServerApplication</AssemblyName>
     <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <WarningLevel>4</WarningLevel>
-    <IsWebBootstrapper>true</IsWebBootstrapper>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
     <RestorePackages>true</RestorePackages>
-    <PublishUrl>http://www.mb3admin.com/downloads/server/</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Web</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Background</UpdateMode>
-    <UpdateInterval>1</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <SupportUrl>http://forum.mediabrowser3.com</SupportUrl>
-    <ProductName>Media Browser Server</ProductName>
-    <PublisherName>Media Browser Team</PublisherName>
-    <SuiteName>Media Browser 3</SuiteName>
-    <ApplicationRevision>3033</ApplicationRevision>
-    <ApplicationVersion>2.9.4795.3033</ApplicationVersion>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <CreateDesktopShortcut>true</CreateDesktopShortcut>
-    <PublishWizardCompleted>true</PublishWizardCompleted>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <PlatformTarget>AnyCPU</PlatformTarget>
@@ -45,7 +22,7 @@
     <OutputPath>bin\Debug\</OutputPath>
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>1</WarningLevel>
+    <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <PlatformTarget>AnyCPU</PlatformTarget>
@@ -60,42 +37,12 @@
     <StartupObject>MediaBrowser.ServerApplication.MainStartup</StartupObject>
   </PropertyGroup>
   <PropertyGroup>
-    <ApplicationIcon>Resources\Images\icon.ico</ApplicationIcon>
-  </PropertyGroup>
-  <PropertyGroup>
-    <ApplicationManifest>app.manifest</ApplicationManifest>
-  </PropertyGroup>
-  <PropertyGroup>
-    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
-  </PropertyGroup>
-  <PropertyGroup>
-    <ManifestCertificateThumbprint>9633DCDB4A07D3328EFB99299C6DFB1823EBC4BE</ManifestCertificateThumbprint>
-  </PropertyGroup>
-  <PropertyGroup>
-    <ManifestKeyFile>
-    </ManifestKeyFile>
-  </PropertyGroup>
-  <PropertyGroup>
-    <GenerateManifests>false</GenerateManifests>
-  </PropertyGroup>
-  <PropertyGroup>
-    <SignManifests>false</SignManifests>
-  </PropertyGroup>
-  <PropertyGroup>
-    <ManifestTimestampUrl>http://timestamp.verisign.com/scripts/timstamp.dll</ManifestTimestampUrl>
-  </PropertyGroup>
-  <PropertyGroup>
-    <SignAssembly>false</SignAssembly>
-  </PropertyGroup>
-  <PropertyGroup>
-    <AssemblyOriginatorKeyFile>
-    </AssemblyOriginatorKeyFile>
+    <ApplicationIcon>Resources\Images\Icon.ico</ApplicationIcon>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
     <DebugSymbols>true</DebugSymbols>
     <OutputPath>bin\x86\Debug\</OutputPath>
     <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <WarningLevel>1</WarningLevel>
     <DebugType>full</DebugType>
     <PlatformTarget>x86</PlatformTarget>
     <ErrorReport>prompt</ErrorReport>
@@ -112,64 +59,51 @@
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
     <Prefer32Bit>true</Prefer32Bit>
   </PropertyGroup>
-  <PropertyGroup>
-    <TargetZone>LocalIntranet</TargetZone>
-  </PropertyGroup>
   <ItemGroup>
-    <Reference Include="Hardcodet.Wpf.TaskbarNotification">
-      <HintPath>..\packages\Hardcodet.Wpf.TaskbarNotification.1.0.4.0\lib\net40\Hardcodet.Wpf.TaskbarNotification.dll</HintPath>
-    </Reference>
-    <Reference Include="MediaBrowser.IsoMounter, Version=1.0.5079.1480, Culture=neutral, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
+    <Reference Include="MediaBrowser.IsoMounter">
       <HintPath>..\packages\MediaBrowser.IsoMounting.3.0.65\lib\net45\MediaBrowser.IsoMounter.dll</HintPath>
     </Reference>
-    <Reference Include="NLog, Version=2.1.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
+    <Reference Include="NLog">
       <HintPath>..\packages\NLog.2.1.0\lib\net45\NLog.dll</HintPath>
     </Reference>
-    <Reference Include="pfmclrapi, Version=0.0.0.0, Culture=neutral, processorArchitecture=x86">
-      <SpecificVersion>False</SpecificVersion>
+    <Reference Include="pfmclrapi">
       <HintPath>..\packages\MediaBrowser.IsoMounting.3.0.65\lib\net45\pfmclrapi.dll</HintPath>
     </Reference>
     <Reference Include="ServiceStack.Interfaces">
       <HintPath>..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll</HintPath>
     </Reference>
-    <Reference Include="SimpleInjector, Version=2.4.1.0, Culture=neutral, PublicKeyToken=984cb50dea722e99, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\packages\SimpleInjector.2.4.1\lib\net45\SimpleInjector.dll</HintPath>
-    </Reference>
-    <Reference Include="SimpleInjector.Diagnostics, Version=2.4.1.0, Culture=neutral, PublicKeyToken=984cb50dea722e99, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\packages\SimpleInjector.2.4.1\lib\net45\SimpleInjector.Diagnostics.dll</HintPath>
-    </Reference>
     <Reference Include="System" />
+    <Reference Include="System.Configuration" />
     <Reference Include="System.Configuration.Install" />
-    <Reference Include="System.Data" />
+    <Reference Include="System.Core" />
     <Reference Include="System.Drawing" />
-    <Reference Include="System.Net" />
     <Reference Include="System.ServiceProcess" />
     <Reference Include="System.Windows.Forms" />
-    <Reference Include="System.Xml" />
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
-    <Reference Include="System.Xaml">
-      <RequiredTargetFramework>4.0</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="WindowsBase" />
-    <Reference Include="PresentationCore" />
-    <Reference Include="PresentationFramework" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="..\SharedVersion.cs">
+      <Link>Properties\SharedVersion.cs</Link>
+    </Compile>
+    <Compile Include="ApplicationHost.cs" />
     <Compile Include="BackgroundService.cs">
       <SubType>Component</SubType>
     </Compile>
+    <Compile Include="BackgroundServiceInstaller.cs">
+      <SubType>Component</SubType>
+    </Compile>
     <Compile Include="EntryPoints\ResourceEntryPoint.cs" />
     <Compile Include="EntryPoints\StartupWizard.cs" />
     <Compile Include="EntryPoints\WanAddressEntryPoint.cs" />
+    <Compile Include="FFMpeg\FFMpegDownloader.cs" />
     <Compile Include="FFMpeg\FFMpegDownloadInfo.cs" />
     <Compile Include="FFMpeg\FFMpegInfo.cs" />
     <Compile Include="IO\FileSystemFactory.cs" />
+    <Compile Include="IO\NativeFileSystem.cs" />
     <Compile Include="LibraryViewer.cs">
       <SubType>Form</SubType>
     </Compile>
@@ -182,65 +116,36 @@
     <Compile Include="Logging\LogForm.Designer.cs">
       <DependentUpon>LogForm.cs</DependentUpon>
     </Compile>
+    <Compile Include="Logging\WindowTraceListener.cs" />
+    <Compile Include="MainStartup.cs" />
     <Compile Include="Native\Assemblies.cs" />
-    <Compile Include="Native\NativeApp.cs" />
-    <Compile Include="IO\NativeFileSystem.cs" />
-    <Compile Include="Native\ServerAuthorization.cs" />
     <Compile Include="Native\Autorun.cs" />
     <Compile Include="Native\BrowserLauncher.cs" />
-    <Compile Include="FFMpeg\FFMpegDownloader.cs" />
-    <Compile Include="MainStartup.cs" />
-    <Compile Include="BackgroundServiceInstaller.cs">
-      <SubType>Component</SubType>
-    </Compile>
+    <Compile Include="Native\NativeApp.cs" />
+    <Compile Include="Native\ServerAuthorization.cs" />
     <Compile Include="Networking\NativeMethods.cs" />
     <Compile Include="Networking\NetworkManager.cs" />
     <Compile Include="Networking\NetworkShares.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
     <Compile Include="Splash\SplashForm.cs">
       <SubType>Form</SubType>
     </Compile>
     <Compile Include="Splash\SplashForm.Designer.cs">
       <DependentUpon>SplashForm.cs</DependentUpon>
     </Compile>
-    <Page Include="App.xaml">
-      <Generator>MSBuild:Compile</Generator>
-      <SubType>Designer</SubType>
-    </Page>
-    <Page Include="MainWindow.xaml">
-      <Generator>MSBuild:Compile</Generator>
-      <SubType>Designer</SubType>
-    </Page>
-    <Compile Include="..\SharedVersion.cs">
-      <Link>Properties\SharedVersion.cs</Link>
-    </Compile>
-    <Compile Include="App.xaml.cs">
-      <DependentUpon>App.xaml</DependentUpon>
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="ApplicationHost.cs" />
-    <Compile Include="Logging\WindowTraceListener.cs" />
-    <Compile Include="MainWindow.xaml.cs">
-      <DependentUpon>MainWindow.xaml</DependentUpon>
-      <SubType>Code</SubType>
-    </Compile>
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="Properties\AssemblyInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="Properties\Resources.Designer.cs">
-      <AutoGen>True</AutoGen>
-      <DesignTime>True</DesignTime>
-      <DependentUpon>Resources.resx</DependentUpon>
-    </Compile>
-    <Compile Include="Properties\Settings.Designer.cs">
-      <AutoGen>True</AutoGen>
-      <DependentUpon>Settings.settings</DependentUpon>
-      <DesignTimeSharedInput>True</DesignTimeSharedInput>
-    </Compile>
-    <EmbeddedResource Include="LibraryViewer.resx">
-      <DependentUpon>LibraryViewer.cs</DependentUpon>
-    </EmbeddedResource>
+    <None Include="App.config" />
+    <None Include="app.manifest" />
+    <None Include="Native\RegisterServer.bat" />
+    <None Include="packages.config" />
+  </ItemGroup>
+  <ItemGroup>
     <EmbeddedResource Include="Logging\LogForm.resx">
       <DependentUpon>LogForm.cs</DependentUpon>
     </EmbeddedResource>
@@ -251,21 +156,10 @@
     <EmbeddedResource Include="Splash\SplashForm.resx">
       <DependentUpon>SplashForm.cs</DependentUpon>
     </EmbeddedResource>
-    <None Include="app.manifest" />
-    <None Include="FFMpeg\ARIALUNI.7z" />
-    <None Include="FFMpeg\ffmpeg-20130904-git-f974289-win32-static.7z" />
-    <None Include="packages.config" />
-    <None Include="Properties\Settings.settings">
-      <Generator>SettingsSingleFileGenerator</Generator>
-      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
-    </None>
-    <AppDesigner Include="Properties\" />
-    <EmbeddedResource Include="Native\RegisterServer.bat" />
   </ItemGroup>
   <ItemGroup>
-    <None Include="App.config">
-      <SubType>Designer</SubType>
-    </None>
+    <Content Include="Resources\Images\Icon.ico" />
+    <Content Include="Resources\Images\mb3logo800.png" />
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\MediaBrowser.Api\MediaBrowser.Api.csproj">
@@ -301,61 +195,8 @@
       <Name>MediaBrowser.WebDashboard</Name>
     </ProjectReference>
   </ItemGroup>
-  <ItemGroup>
-    <Resource Include="Resources\Images\icon.ico" />
-  </ItemGroup>
-  <ItemGroup>
-    <BootstrapperPackage Include=".NETFramework,Version=v4.5">
-      <Visible>False</Visible>
-      <ProductName>Microsoft .NET Framework 4.5 %28x86 and x64%29</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Visual.C++.10.0.x86">
-      <Visible>False</Visible>
-      <ProductName>Visual C++ 2010 Runtime Libraries %28x86%29</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-  </ItemGroup>
-  <ItemGroup>
-    <Resource Include="Resources\Images\mb3logo800.png" />
-  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup>
-    <PostBuildEvent>if $(ConfigurationName) == Release (
-rmdir "$(SolutionDir)..\Deploy\Server\System" /s /q
-mkdir "$(SolutionDir)..\Deploy\Server\System"
-rmdir "$(SolutionDir)..\Deploy\Server\Pismo" /s /q
-xcopy "$(TargetDir)$(TargetFileName)" "$(SolutionDir)..\Deploy\Server\System\" /y
-xcopy "$(SolutionDir)Installation\MediaBrowser.Uninstaller.exe.config" "$(SolutionDir)..\Deploy\Server\System\" /y
-xcopy "$(SolutionDir)Installation\MediaBrowser.Uninstaller.exe" "$(SolutionDir)..\Deploy\Server\System\" /y
-xcopy "$(SolutionDir)Installation\MediaBrowser.InstallUtil.dll" "$(SolutionDir)..\Deploy\Server\System\" /y
-xcopy "$(SolutionDir)Installation\MediaBrowser.Updater.exe" "$(SolutionDir)..\Deploy\Server\System\" /y
-
-mkdir "$(SolutionDir)..\Deploy\Server\System\swagger-ui"
-xcopy "$(TargetDir)swagger-ui" "$(SolutionDir)..\Deploy\Server\System\swagger-ui" /y /s
-
-xcopy "$(TargetDir)$(TargetFileName).config" "$(SolutionDir)..\Deploy\Server\System\" /y
-
-xcopy "$(TargetDir)*.dll" "$(SolutionDir)..\Deploy\Server\System" /y
-
-mkdir "$(SolutionDir)..\Deploy\Server\System\dashboard-ui"
-xcopy "$(TargetDir)dashboard-ui" "$(SolutionDir)..\Deploy\Server\System\dashboard-ui" /y /s
-
-del "$(SolutionDir)..\Deploy\MBServer.zip"
-"$(SolutionDir)ThirdParty\7zip\7za" a -mx9 "$(SolutionDir)..\Deploy\MBServer.zip" "$(SolutionDir)..\Deploy\Server\*"
-)</PostBuildEvent>
-  </PropertyGroup>
-  <Import Project="$(SolutionDir)\.nuget\nuget.targets" />
+  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.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.
   <Target Name="BeforeBuild">
@@ -363,10 +204,4 @@ del "$(SolutionDir)..\Deploy\MBServer.zip"
   <Target Name="AfterBuild">
   </Target>
   -->
-  <Target Name="AfterBuild">
-    <GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
-      <Output TaskParameter="Assemblies" ItemName="CurrentAssembly" />
-    </GetAssemblyIdentity>
-    <Exec Command="copy &quot;$(SolutionDir)..\Deploy\MBServer.zip&quot;  &quot;$(SolutionDir)..\Deploy\MBServer_%(CurrentAssembly.Version).zip&quot; /y" Condition="'$(ConfigurationName)' == 'Release'" />
-  </Target>
 </Project>

+ 3 - 20
MediaBrowser.ServerApplication/Properties/AssemblyInfo.cs

@@ -1,6 +1,6 @@
 using System.Reflection;
+using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
-using System.Windows;
 
 // General Information about an assembly is controlled through the following 
 // set of attributes. Change these attribute values to modify the information
@@ -19,25 +19,8 @@ using System.Windows;
 // COM, set the ComVisible attribute to true on that type.
 [assembly: ComVisible(false)]
 
-//In order to begin building localizable applications, set 
-//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
-//inside a <PropertyGroup>.  For example, if you are using US english
-//in your source files, set the <UICulture> to en-US.  Then uncomment
-//the NeutralResourceLanguage attribute below.  Update the "en-US" in
-//the line below to match the UICulture setting in the project file.
-
-//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
-
-
-[assembly: ThemeInfo(
-    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
-    //(used if a resource is not found in the page, 
-    // or application resource dictionaries)
-    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
-    //(used if a resource is not found in the page, 
-    // app, or any theme specific resource dictionaries)
-)]
-
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("a5a1e61f-da85-4fd6-9d6d-bcf2bf09c1f8")]
 
 // Version information for an assembly consists of the following four values:
 //

+ 0 - 10
MediaBrowser.ServerApplication/Properties/Resources.Designer.cs

@@ -59,15 +59,5 @@ namespace MediaBrowser.ServerApplication.Properties {
                 resourceCulture = value;
             }
         }
-        
-        /// <summary>
-        ///   Looks up a localized resource of type System.Drawing.Bitmap.
-        /// </summary>
-        internal static System.Drawing.Bitmap mb3logo800 {
-            get {
-                object obj = ResourceManager.GetObject("mb3logo800", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
     }
 }

+ 0 - 4
MediaBrowser.ServerApplication/Properties/Resources.resx

@@ -117,8 +117,4 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-  <data name="mb3logo800" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\Images\mb3logo800.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
 </root>

+ 0 - 30
MediaBrowser.ServerApplication/Properties/Settings.Designer.cs

@@ -1,30 +0,0 @@
-//------------------------------------------------------------------------------
-// <auto-generated>
-//     This code was generated by a tool.
-//     Runtime Version:4.0.30319.17626
-//
-//     Changes to this file may cause incorrect behavior and will be lost if
-//     the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace MediaBrowser.ServerApplication.Properties
-{
-
-
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
-    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
-    {
-
-        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
-        public static Settings Default
-        {
-            get
-            {
-                return defaultInstance;
-            }
-        }
-    }
-}

+ 0 - 7
MediaBrowser.ServerApplication/Properties/Settings.settings

@@ -1,7 +0,0 @@
-<?xml version='1.0' encoding='utf-8'?>
-<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
-  <Profiles>
-    <Profile Name="(Default)" />
-  </Profiles>
-  <Settings />
-</SettingsFile>

+ 11 - 1
MediaBrowser.ServerApplication/Splash/SplashForm.Designer.cs

@@ -56,6 +56,7 @@
             this.panelMainContainer.Padding = new System.Windows.Forms.Padding(1);
             this.panelMainContainer.Size = new System.Drawing.Size(648, 347);
             this.panelMainContainer.TabIndex = 0;
+            this.panelMainContainer.UseWaitCursor = true;
             // 
             // panel3
             // 
@@ -65,6 +66,7 @@
             this.panel3.Name = "panel3";
             this.panel3.Size = new System.Drawing.Size(646, 69);
             this.panel3.TabIndex = 2;
+            this.panel3.UseWaitCursor = true;
             // 
             // panel2
             // 
@@ -78,6 +80,7 @@
             this.panel2.Name = "panel2";
             this.panel2.Size = new System.Drawing.Size(646, 205);
             this.panel2.TabIndex = 1;
+            this.panel2.UseWaitCursor = true;
             // 
             // panelProgress
             // 
@@ -86,6 +89,7 @@
             this.panelProgress.Name = "panelProgress";
             this.panelProgress.Size = new System.Drawing.Size(0, 13);
             this.panelProgress.TabIndex = 3;
+            this.panelProgress.UseWaitCursor = true;
             // 
             // panel4
             // 
@@ -94,6 +98,7 @@
             this.panel4.Name = "panel4";
             this.panel4.Size = new System.Drawing.Size(648, 13);
             this.panel4.TabIndex = 2;
+            this.panel4.UseWaitCursor = true;
             // 
             // lblVersion
             // 
@@ -106,6 +111,7 @@
             this.lblVersion.Size = new System.Drawing.Size(270, 59);
             this.lblVersion.TabIndex = 1;
             this.lblVersion.Text = "Version 1234";
+            this.lblVersion.UseWaitCursor = true;
             // 
             // lblStatus
             // 
@@ -118,6 +124,7 @@
             this.lblStatus.Size = new System.Drawing.Size(599, 59);
             this.lblStatus.TabIndex = 0;
             this.lblStatus.Text = "Loading Media Browser Server";
+            this.lblStatus.UseWaitCursor = true;
             // 
             // panel1
             // 
@@ -128,17 +135,19 @@
             this.panel1.Name = "panel1";
             this.panel1.Size = new System.Drawing.Size(646, 140);
             this.panel1.TabIndex = 0;
+            this.panel1.UseWaitCursor = true;
             // 
             // pictureBox1
             // 
             this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.pictureBox1.Image = global::MediaBrowser.ServerApplication.Properties.Resources.mb3logo800;
+            this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
             this.pictureBox1.Location = new System.Drawing.Point(0, 0);
             this.pictureBox1.Name = "pictureBox1";
             this.pictureBox1.Size = new System.Drawing.Size(646, 140);
             this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
             this.pictureBox1.TabIndex = 0;
             this.pictureBox1.TabStop = false;
+            this.pictureBox1.UseWaitCursor = true;
             // 
             // SplashForm
             // 
@@ -154,6 +163,7 @@
             this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
             this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
             this.Text = "Media Browser";
+            this.UseWaitCursor = true;
             this.panelMainContainer.ResumeLayout(false);
             this.panel2.ResumeLayout(false);
             this.panel2.PerformLayout();

+ 26 - 0
MediaBrowser.ServerApplication/Splash/SplashForm.cs

@@ -1,5 +1,6 @@
 using System;
 using System.ComponentModel;
+using System.Runtime.InteropServices;
 using System.Threading;
 using System.Threading.Tasks;
 using System.Windows.Forms;
@@ -42,4 +43,29 @@ namespace MediaBrowser.ServerApplication.Splash
             base.OnClosing(e);
         }
     }
+
+    public static class ControlHelper
+    {
+        #region Redraw Suspend/Resume
+        [DllImport("user32.dll", EntryPoint = "SendMessageA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
+        private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
+        private const int WM_SETREDRAW = 0xB;
+
+        public static void SuspendDrawing(this Control target)
+        {
+            SendMessage(target.Handle, WM_SETREDRAW, 0, 0);
+        }
+
+        public static void ResumeDrawing(this Control target) { ResumeDrawing(target, true); }
+        public static void ResumeDrawing(this Control target, bool redraw)
+        {
+            SendMessage(target.Handle, WM_SETREDRAW, 1, 0);
+
+            if (redraw)
+            {
+                target.Refresh();
+            }
+        }
+        #endregion
+    }
 }

+ 615 - 0
MediaBrowser.ServerApplication/Splash/SplashForm.resx

@@ -118,6 +118,621 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
   <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        rkJggg==
+</value>
+  </data>
   <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         AAABAAsAICAQAAEABADoAgAAtgAAABAQEAABAAQAKAEAAJ4DAAAwMAAAAQAIAKgOAADGBAAAICAAAAEA

+ 0 - 2
MediaBrowser.ServerApplication/packages.config

@@ -1,7 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
-  <package id="Hardcodet.Wpf.TaskbarNotification" version="1.0.4.0" targetFramework="net45" />
   <package id="MediaBrowser.IsoMounting" version="3.0.65" targetFramework="net45" />
   <package id="NLog" version="2.1.0" targetFramework="net45" />
-  <package id="SimpleInjector" version="2.4.1" targetFramework="net45" />
 </packages>

+ 16 - 18
MediaBrowser.sln

@@ -9,8 +9,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Common", "Medi
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Model", "MediaBrowser.Model\MediaBrowser.Model.csproj", "{7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.ServerApplication", "MediaBrowser.ServerApplication\MediaBrowser.ServerApplication.csproj", "{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}"
-EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.WebDashboard", "MediaBrowser.WebDashboard\MediaBrowser.WebDashboard.csproj", "{5624B7B5-B5A7-41D8-9F10-CC5611109619}"
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{F0E0E64C-2A6F-4E35-9533-D53AC07C2CD1}"
@@ -39,6 +37,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Providers", "M
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Model.Portable", "MediaBrowser.Model.Portable\MediaBrowser.Model.Portable.csproj", "{D729ADB1-1C01-428D-B680-8EFACD687B2A}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.ServerApplication", "MediaBrowser.ServerApplication\MediaBrowser.ServerApplication.csproj", "{94ADE4D3-B7EC-45CD-A200-CC469433072B}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -117,22 +117,6 @@ Global
 		{7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release|x64.ActiveCfg = Release|Any CPU
 		{7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release|x86.ActiveCfg = Release|Any CPU
 		{7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release|x86.Build.0 = Release|Any CPU
-		{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}.Debug|Any CPU.ActiveCfg = Debug|x86
-		{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}.Debug|Any CPU.Build.0 = Debug|x86
-		{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
-		{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}.Debug|Mixed Platforms.Build.0 = Debug|x86
-		{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}.Debug|Win32.ActiveCfg = Debug|Any CPU
-		{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}.Debug|x86.Build.0 = Debug|Any CPU
-		{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}.Release|Any CPU.ActiveCfg = Release|x86
-		{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}.Release|Any CPU.Build.0 = Release|x86
-		{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}.Release|Win32.ActiveCfg = Release|Any CPU
-		{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}.Release|x64.ActiveCfg = Release|Any CPU
-		{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}.Release|x86.ActiveCfg = Release|Any CPU
-		{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}.Release|x86.Build.0 = Release|Any CPU
 		{5624B7B5-B5A7-41D8-9F10-CC5611109619}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{5624B7B5-B5A7-41D8-9F10-CC5611109619}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{5624B7B5-B5A7-41D8-9F10-CC5611109619}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@@ -233,6 +217,20 @@ Global
 		{D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release|Win32.ActiveCfg = Release|Any CPU
 		{D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release|x64.ActiveCfg = Release|Any CPU
 		{D729ADB1-1C01-428D-B680-8EFACD687B2A}.Release|x86.ActiveCfg = Release|Any CPU
+		{94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|Any CPU.Build.0 = Debug|x86
+		{94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|Win32.ActiveCfg = Debug|Any CPU
+		{94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{94ADE4D3-B7EC-45CD-A200-CC469433072B}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Any CPU.ActiveCfg = Release|x86
+		{94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Any CPU.Build.0 = Release|x86
+		{94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|Win32.ActiveCfg = Release|Any CPU
+		{94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|x64.ActiveCfg = Release|Any CPU
+		{94ADE4D3-B7EC-45CD-A200-CC469433072B}.Release|x86.ActiveCfg = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE