convert app to windows forms

pull/702/head
Luke Pulverenti 11 years ago
parent bf1c36ba61
commit 46f668fbd8

@ -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>

@ -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);
}
}
}

@ -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()

@ -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>

@ -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
}
}

@ -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>

@ -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:
//

@ -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));
}
}
}
}

@ -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>

@ -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;
}
}
}
}

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

@ -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();

@ -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
}
}

@ -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

@ -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>

@ -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

Loading…
Cancel
Save