diff options
| author | LukePulverenti <luke.pulverenti@gmail.com> | 2013-02-22 19:26:38 -0500 |
|---|---|---|
| committer | LukePulverenti <luke.pulverenti@gmail.com> | 2013-02-22 19:26:38 -0500 |
| commit | 84507736a0f8f60c849bfae54b1695b0cb2c091a (patch) | |
| tree | 6d923baae2dfc21769c27aef2f3b6c44d31d7567 | |
| parent | a2d215b6ae9d594d71a679a464c9c6a559efe862 (diff) | |
| parent | 4a46612c3f7660f58bef695027c1c0492c4ef5f5 (diff) | |
Merge branch 'master' of https://github.com/MediaBrowser/MediaBrowser
Conflicts:
MediaBrowser.ServerApplication/CorePlugins/MediaBrowser.Api.dll
MediaBrowser.ServerApplication/CorePlugins/MediaBrowser.ApiInteraction.Javascript.dll
MediaBrowser.ServerApplication/CorePlugins/MediaBrowser.Server.Sqlite.dll
MediaBrowser.ServerApplication/CorePlugins/MediaBrowser.Server.WorldWeatherOnline.dll
MediaBrowser.ServerApplication/CorePlugins/MediaBrowser.WebDashboard.dll
24 files changed, 2542 insertions, 2420 deletions
diff --git a/.gitignore b/.gitignore index 3fbadb705..d673b0d96 100644 --- a/.gitignore +++ b/.gitignore @@ -145,6 +145,7 @@ publish/ # NuGet Packages Directory ## TODO: If you have NuGet Package Restore enabled, uncomment the next line packages/ +dlls/ # Windows Azure Build Output csx diff --git a/MediaBrowser.ApiInteraction.Portable/MediaBrowser.ApiInteraction.Portable.csproj b/MediaBrowser.ApiInteraction.Portable/MediaBrowser.ApiInteraction.Portable.csproj index 2b6b0b123..973066307 100644 --- a/MediaBrowser.ApiInteraction.Portable/MediaBrowser.ApiInteraction.Portable.csproj +++ b/MediaBrowser.ApiInteraction.Portable/MediaBrowser.ApiInteraction.Portable.csproj @@ -98,6 +98,9 @@ <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" /> <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> <Import Project="..\packages\Microsoft.Bcl.Build.1.0.0-rc\tools\Microsoft.Bcl.Build.targets" /> + <PropertyGroup> + <PostBuildEvent>xcopy "$(TargetPath)" "$(SolutionDir)\Nuget\dlls\" /y /d /r /i</PostBuildEvent> + </PropertyGroup> <!-- 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"> diff --git a/MediaBrowser.ApiInteraction/ApiClient.cs b/MediaBrowser.ApiInteraction/ApiClient.cs index ef8197e16..4f701532b 100644 --- a/MediaBrowser.ApiInteraction/ApiClient.cs +++ b/MediaBrowser.ApiInteraction/ApiClient.cs @@ -656,7 +656,7 @@ namespace MediaBrowser.ApiInteraction /// </summary> /// <param name="itemId">The item id.</param> /// <param name="userId">The user id.</param> - /// <returns>Task{DtoUserItemData}.</returns> + /// <returns>Task{UserItemDataDto}.</returns> /// <exception cref="System.ArgumentNullException">itemId</exception> public Task<UserItemDataDto> ReportPlaybackStartAsync(string itemId, Guid userId) { @@ -686,7 +686,7 @@ namespace MediaBrowser.ApiInteraction /// <param name="itemId">The item id.</param> /// <param name="userId">The user id.</param> /// <param name="positionTicks">The position ticks.</param> - /// <returns>Task{DtoUserItemData}.</returns> + /// <returns>Task{UserItemDataDto}.</returns> /// <exception cref="System.ArgumentNullException">itemId</exception> public Task<UserItemDataDto> ReportPlaybackProgressAsync(string itemId, Guid userId, long? positionTicks) { @@ -718,7 +718,7 @@ namespace MediaBrowser.ApiInteraction /// <param name="itemId">The item id.</param> /// <param name="userId">The user id.</param> /// <param name="positionTicks">The position ticks.</param> - /// <returns>Task{DtoUserItemData}.</returns> + /// <returns>Task{UserItemDataDto}.</returns> /// <exception cref="System.ArgumentNullException">itemId</exception> public Task<UserItemDataDto> ReportPlaybackStoppedAsync(string itemId, Guid userId, long? positionTicks) { @@ -749,7 +749,7 @@ namespace MediaBrowser.ApiInteraction /// </summary> /// <param name="itemId">The item id.</param> /// <param name="userId">The user id.</param> - /// <returns>Task{DtoUserItemData}.</returns> + /// <returns>Task{UserItemDataDto}.</returns> /// <exception cref="System.ArgumentNullException">itemId</exception> public Task ClearUserItemRatingAsync(string itemId, Guid userId) { @@ -774,7 +774,7 @@ namespace MediaBrowser.ApiInteraction /// <param name="itemId">The item id.</param> /// <param name="userId">The user id.</param> /// <param name="likes">if set to <c>true</c> [likes].</param> - /// <returns>Task{DtoUserItemData}.</returns> + /// <returns>Task{UserItemDataDto}.</returns> /// <exception cref="System.ArgumentNullException">itemId</exception> public Task<UserItemDataDto> UpdateUserItemRatingAsync(string itemId, Guid userId, bool likes) { diff --git a/MediaBrowser.ApiInteraction/MediaBrowser.ApiInteraction.csproj b/MediaBrowser.ApiInteraction/MediaBrowser.ApiInteraction.csproj index f3a25e897..0d9938891 100644 --- a/MediaBrowser.ApiInteraction/MediaBrowser.ApiInteraction.csproj +++ b/MediaBrowser.ApiInteraction/MediaBrowser.ApiInteraction.csproj @@ -75,6 +75,9 @@ </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> + <PropertyGroup> + <PostBuildEvent>xcopy "$(TargetPath)" "$(SolutionDir)\Nuget\dlls\" /y /d /r /i</PostBuildEvent> + </PropertyGroup> <!-- 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"> diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index 12c76cff6..ea388e33b 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -228,6 +228,9 @@ <ItemGroup /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> + <PropertyGroup> + <PostBuildEvent>xcopy "$(TargetPath)" "$(SolutionDir)\Nuget\dlls\" /y /d /r /i</PostBuildEvent> + </PropertyGroup> <!-- 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"> diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index f962427cd..b1a1dc567 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -227,8 +227,7 @@ <ItemGroup /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <PropertyGroup> - <PostBuildEvent> - </PostBuildEvent> + <PostBuildEvent>xcopy "$(TargetPath)" "$(SolutionDir)\Nuget\dlls\" /y /d /r /i</PostBuildEvent> </PropertyGroup> <PropertyGroup> <PreBuildEvent> diff --git a/MediaBrowser.Model/DTO/UserItemDataDto.cs b/MediaBrowser.Model/DTO/UserItemDataDto.cs index bcfbce49e..0a362e796 100644 --- a/MediaBrowser.Model/DTO/UserItemDataDto.cs +++ b/MediaBrowser.Model/DTO/UserItemDataDto.cs @@ -4,7 +4,7 @@ using ProtoBuf; namespace MediaBrowser.Model.Dto { /// <summary> - /// Class DtoUserItemData + /// Class UserItemDataDto /// </summary> [ProtoContract] public class UserItemDataDto : INotifyPropertyChanged diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index f445567f1..c4010e1d9 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -125,8 +125,7 @@ </ItemGroup> <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" /> <PropertyGroup> - <PostBuildEvent> - </PostBuildEvent> + <PostBuildEvent>xcopy "$(TargetPath)" "$(SolutionDir)\Nuget\dlls\" /y /d /r /i</PostBuildEvent> </PropertyGroup> <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. diff --git a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj index 79ced29a7..5923abc27 100644 --- a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj +++ b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj @@ -66,7 +66,7 @@ <ApplicationManifest>app.manifest</ApplicationManifest> </PropertyGroup> <PropertyGroup> - <RunPostBuildEvent>Always</RunPostBuildEvent> + <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent> </PropertyGroup> <PropertyGroup> <ManifestCertificateThumbprint>9633DCDB4A07D3328EFB99299C6DFB1823EBC4BE</ManifestCertificateThumbprint> @@ -373,7 +373,22 @@ <ItemGroup /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <PropertyGroup> - <PostBuildEvent>xcopy "$(SolutionDir)\packages\System.Data.SQLite.1.0.84.0\content\net40\x86\SQLite.Interop.dll" "$(TargetDir)" /y</PostBuildEvent> + <PostBuildEvent>xcopy "$(SolutionDir)\packages\System.Data.SQLite.1.0.84.0\content\net40\x86\SQLite.Interop.dll" "$(TargetDir)" /y + +if $(ConfigurationName) == Release ( +xcopy "$(TargetDir)*.dll" "$(SolutionDir)..\Deploy\Server\System" /y +mkdir "$(SolutionDir)..\Deploy\Server\System\x64" +xcopy "$(TargetDir)x64" "$(SolutionDir)..\Deploy\Server\System\x64" /y + +mkdir "$(SolutionDir)..\Deploy\Server\System\x86" +xcopy "$(TargetDir)x86" "$(SolutionDir)..\Deploy\Server\System\x86" /y + +mkdir "$(SolutionDir)..\Deploy\Server\System\CorePlugins" +xcopy "$(TargetDir)CorePlugins" "$(SolutionDir)..\Deploy\Server\System\CorePlugins" /y + +del +"$(SolutionDir)7za" a -tzip "$(SolutionDir)..\Deploy\MBServer.zip" "$(SolutionDir)..\Deploy\Server\*" +)</PostBuildEvent> </PropertyGroup> <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. diff --git a/MediaBrowser.UI.Controls/MediaBrowser.UI.Controls.csproj b/MediaBrowser.UI.Controls/MediaBrowser.UI.Controls.csproj index c6eb064f3..ee8d2dca7 100644 --- a/MediaBrowser.UI.Controls/MediaBrowser.UI.Controls.csproj +++ b/MediaBrowser.UI.Controls/MediaBrowser.UI.Controls.csproj @@ -97,6 +97,9 @@ </Page> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <PropertyGroup> + <PostBuildEvent>xcopy "$(TargetPath)" "$(SolutionDir)\Nuget\dlls\" /y /d /r /i</PostBuildEvent> + </PropertyGroup> <!-- 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"> diff --git a/MediaBrowser.UI/MediaBrowser.UI.csproj b/MediaBrowser.UI/MediaBrowser.UI.csproj index 798bf461a..5601d7c48 100644 --- a/MediaBrowser.UI/MediaBrowser.UI.csproj +++ b/MediaBrowser.UI/MediaBrowser.UI.csproj @@ -1311,6 +1311,9 @@ </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> + <PropertyGroup> + <PostBuildEvent>xcopy "$(TargetPath)" "$(SolutionDir)\Nuget\dlls\" /y /d /r /i</PostBuildEvent> + </PropertyGroup> <!-- 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"> diff --git a/MediaBrowser.WebDashboard/Html/css/images/mblogoblackfull.png b/MediaBrowser.WebDashboard/Html/css/images/mblogoblackfull.png Binary files differdeleted file mode 100644 index 340f12d9d..000000000 --- a/MediaBrowser.WebDashboard/Html/css/images/mblogoblackfull.png +++ /dev/null diff --git a/MediaBrowser.WebDashboard/Html/css/images/mblogoicon.png b/MediaBrowser.WebDashboard/Html/css/images/mblogoicon.png Binary files differnew file mode 100644 index 000000000..be2de69d1 --- /dev/null +++ b/MediaBrowser.WebDashboard/Html/css/images/mblogoicon.png diff --git a/MediaBrowser.WebDashboard/Html/css/images/mblogotextblack.png b/MediaBrowser.WebDashboard/Html/css/images/mblogotextblack.png Binary files differnew file mode 100644 index 000000000..cd22f437f --- /dev/null +++ b/MediaBrowser.WebDashboard/Html/css/images/mblogotextblack.png diff --git a/MediaBrowser.WebDashboard/Html/css/images/mblogotextwhite.png b/MediaBrowser.WebDashboard/Html/css/images/mblogotextwhite.png Binary files differnew file mode 100644 index 000000000..b1a7c8fc7 --- /dev/null +++ b/MediaBrowser.WebDashboard/Html/css/images/mblogotextwhite.png diff --git a/MediaBrowser.WebDashboard/Html/css/images/mblogowhitefull.png b/MediaBrowser.WebDashboard/Html/css/images/mblogowhitefull.png Binary files differdeleted file mode 100644 index 48c8f72d3..000000000 --- a/MediaBrowser.WebDashboard/Html/css/images/mblogowhitefull.png +++ /dev/null diff --git a/MediaBrowser.WebDashboard/Html/css/site.css b/MediaBrowser.WebDashboard/Html/css/site.css index 186266c4d..32818e3cc 100644 --- a/MediaBrowser.WebDashboard/Html/css/site.css +++ b/MediaBrowser.WebDashboard/Html/css/site.css @@ -1,806 +1,816 @@ -@font-face { - font-family: "Open Sans"; - font-style: normal; - font-weight: 700; - src: local("Open Sans Bold"), local("OpenSans-Bold"), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/k3k702ZOKiLJc3WVjuplzJ1r3JsPcQLi8jytr04NNhU.woff) format('woff'); -} - -@font-face { - font-family: "Open Sans"; - font-style: normal; - font-weight: 300; - src: local("Open Sans Light"), local("OpenSans-Light"), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/DXI1ORHCpsQm3Vp6mXoaTZ1r3JsPcQLi8jytr04NNhU.woff) format('woff'); -} - -@font-face { - font-family: "Open Sans"; - font-style: normal; - font-weight: 800; - src: local("Open Sans Extrabold"), local("OpenSans-Extrabold"), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/EInbV5DfGHOiMmvb1Xr-hp1r3JsPcQLi8jytr04NNhU.woff) format('woff'); -} - -@font-face { - font-family: "Open Sans"; - font-style: normal; - font-weight: 400; - src: local("Open Sans"), local("OpenSans"), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/K88pR3goAWT7BTt32Z01mz8E0i7KZn-EPnyo3HZu7kw.woff) format('woff'); -} - -body { - overflow-y: scroll!important; -} - -h1 { - font-family: 'Segoe UI Light', 'Open Sans', Arial, Helvetica, sans-serif; - font-weight: 200; - font-size: 32pt; -} - -.toolsSidebar h1 { - font-size: 42pt; -} - -.ui-loader h1 { - font-weight: bold; - font-family: Arial; -} - -h2 { - font-family: 'Segoe UI Semiight', 'Open Sans', Arial, Helvetica, sans-serif; - font-weight: 400; - font-size: 22pt; -} - -pre, textarea.pre { - display: block; - padding: 8.5px; - font-size: 12.025px; - line-height: 18px; - word-break: break-all; - word-wrap: break-word; - white-space: pre; - white-space: pre-wrap; - background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - color: #000; -} - -.type-interior h2 { - color: #1B58B8; -} - -/* - Page / Base styles - */ -.page { - background: #f2f2f2; - background-attachment: fixed; -} - -.libraryPage { - background: #1d1d1d url(images/bg.png) top left repeat-x; - background: #262626!important; - background-attachment: fixed!important; -} - - .libraryPage .interiorLink { - color: #2489ce; - font-weight: bold; - } - -/* - Header - */ -.header { - padding: 10px 0 10px 10px; -} - -.imgLogo { - height: 45px; -} - - -.ui-popup-container { - z-index: 99999; -} - -.headerButtons { - float: right; - position: absolute; - top: 10px; - right: 10px; -} - -.header .imageLink { - display: inline-block; -} - -.imageLink + .imageLink { - margin-left: 30px; -} - -.header .imageLink img { - height: 32px; - vertical-align: middle; -} - -.btnCurrentUser { - text-decoration: none; -} - -.currentUsername { - margin-right: 7px; - font-size: 20px; - color: #000; - position: relative; - top: 4px; -} - -.libraryPage .currentUsername { - color: #fff; -} - -h1 .imageLink { - margin-left: 15px; -} - - h1 .imageLink img { - height: 32px; - } - -.imageLink:hover { - opacity: .5; -} - -.type-home h1 { - margin-top: 1.25em; - margin-bottom: 10px; - padding-bottom: 5px; - font-weight: normal; - border-bottom: 1px solid #777; -} - -.libraryPage .ui-content > h1:first-child { - margin-top: 0; -} - -.pageTitle { - margin-top: 0; -} - -.imageButton { - background: transparent; - border: 0; - padding: 0; - cursor: pointer; - cursor: hand; -} - - .imageButton:hover { - opacity: .5; - } - - .imageButton[disabled], .imageButton[disabled]:hover { - opacity: .3!important; - cursor: default; - } - -/* - Forms - */ -form, .readOnlyContent { - max-width: 600px; -} - -.fieldDescription { - font-size: 11px; - padding-left: 5px; -} - -.ulForm { - margin-bottom: 20px!important; -} - - .ulForm li:not(.ui-li-divider) { - background: none; - border-top: none; - border-bottom: none; - } - -.popup .ulForm { - margin-bottom: 0!important; -} - -.popup .ui-content { - padding: 20px; -} - -.content-secondary { - z-index: 99996; - background: #262626; - border: 0; - margin-top: 40px; -} - - .content-secondary h1 { - margin: 0; - padding: 20px 0 20px 30px; - color: #fff; - } - -.sidebarLinks a { - display: block; - padding: 12px 15px 12px 30px; - text-decoration: none; - color: #fff!important; - text-shadow: none!important; - font-weight: normal!important; - font-size: 17px; -} - - .sidebarLinks a:hover { - background: #f2f2f2; - color: #000!important; - } - - .sidebarLinks a.selectedSidebarLink { - background: #2572EB!important; - color: #fff!important; - } - -/* Tabs (e.g. advanced metadata page) */ -.localnav { - margin-bottom: 40px!important; -} - - .localnav + form { - margin-top: -10px; - } - -.page > .ui-content { - padding-bottom: 100px; -} - -@media all and (min-width: 650px) { - - .imgLogo { - height: 60px; - } - - .header { - padding-left: 30px; - padding-top: 20px; - padding-bottom: 15px; - } - - .headerButtons { - top: 20px; - right: 30px; - } - - .localnav .ui-btn-inner { - font-size: 16px; - } - - .libraryPage .ui-content { - padding-right: 50px; - padding-left: 50px; - } - - .type-interior > .ui-content { - padding-right: 0; - padding-left: 0; - padding-top: 0; - overflow: hidden; - } - - .content-secondary { - text-align: left; - width: 45%; - position: fixed; - top: 0; - left: 0; - bottom: 0; - margin: 0; - } - - .content-primary { - width: 45%; - float: right; - padding: 0 6% 3em 0; - margin: 0; - } - - .content-primary ul:first-child { - margin-top: 0; - } -} - -@media all and (min-width: 750px) { - - .content-secondary { - width: 34%; - } - - .content-primary { - width: 56%; - } -} - -@media all and (min-width: 1200px) { - - - .content-secondary { - width: 30%; - } - - .content-primary { - width: 60%; - } -} - -@media all and (min-width: 1440px) { - - - .content-secondary { - width: 25%; - } - - .content-primary { - width: 65%; - } -} - -@media all and (min-width: 1920px) { - - - .content-secondary { - width: 20%; - } - - .content-primary { - width: 70%; - } -} - -/* - Media Library Page - */ -.mediaFolderButtons { - margin-top: 10px; -} - -.mediaFolderLocations { - margin: 1em .25em!important; -} - -.mediaLocationsHeader { - padding-top: .75em!important; - padding-bottom: .75em!important; -} - - .mediaLocationsHeader .ui-btn { - position: absolute; - right: 3px; - margin-top: 0!important; - margin-bottom: 0!important; - top: 6px; - } - -#divVirtualFolders .ui-btn-inner, .mediaLocationsHeader, #divVirtualFolders .ui-btn-text { - font-size: 14px; -} - -#ulDirectoryPickerList a { - padding-top: .4em; - padding-bottom: .4em; - font-size: 15px; -} - -/* - Plugin updates Page - */ -#pluginUpdatesForm table { - width: 100%; -} - -#pluginUpdatesForm td + td { - text-align: center; -} - - -/* - List Vew Items - */ - -.posterViewItem { - display: inline-block; - margin: 5px; - text-align: center; - font-size: 15px; - padding: 0; - position: relative; -} - - .posterViewItem a { - color: white!important; - font-weight: normal!important; - text-decoration: none; - } - - .posterViewItem img { - max-width: 155px; - max-height: 155px; - vertical-align: bottom; - } - -.premiumBanner img { - position: absolute; - text-align: right; - top: 0; - right: 0; - width: 75px!important; - height: 75px!important; - max-width: 75px!important; - max-height: 75px!important; -} - -.posterViewItemText { - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - margin: 0; - padding: 4px 0px 0; - bottom: 0; - left: 0; - right: 0; - background: #181818; - text-shadow: none; - max-width: 155px; -} - - .posterViewItemText div{ - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - margin: 0px 4px; - height: 24px; - } - -.posterViewItem:hover, .userItem:hover { - -moz-box-shadow: 0 0 20px 3px #2572EB; - -webkit-box-shadow: 0 0 20px 3px #2572EB; - box-shadow: 0 0 20px 3px #2572EB; -} - -@media all and (min-width: 750px) { - - .posterViewItem { - font-size: 16px; - } - - .posterViewItemText { - padding-top: 5px; - max-width: 190px; - } - - .posterViewItem img { - max-width: 190px; - max-height: 190px; - } -} - -@media all and (min-width: 1200px) { - - .posterViewItem { - font-size: 17px; - } - - .posterViewItem img { - max-width: 280px; - max-height: 280px; - } - - .posterViewItemText { - max-width: 280px; - } -} - -@media all and (min-width: 1920px) { - - .posterViewItem { - font-size: 19px; - } - - .posterViewItemText div{ - height: 28px; - } - - .posterViewItem img { - max-width: 352px; - max-height: 352px; - } - - .posterViewItemText { - max-width: 352px; - } -} - -/* Startup wizard */ -.wizardPage { - background: #e2e2e2; -} - -.wizardContent { - max-width: 800px; - padding: .5em 2em 1em; - margin: 0 auto; - background: #f2f2f2; -} - -.wizardNavigation { - text-align: right; -} - -.wizardContent form { - max-width: 100%; -} - -.wizardContent p { - margin: 2em 0; -} - -.wizardContent h2 img { - height: 35px; - vertical-align: middle; - margin-right: .5em; - position: relative; - top: -3px; -} - -/* User Image */ -.imageDropZone { - border: 2px dashed #bbb; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - border-radius: 5px; - padding: 25px; - text-align: center; - color: #bbb; -} - -/* Dashboard home */ -.tblConnections td { - padding: .5em 0 .5em 1.25em; -} - - .tblConnections td:first-child { - padding-left: 0; - } - -.tblConnections img { - height: 50px; -} - -.clientNowPlayingImage { - border-radius: 5px; - border: 2px solid #ccc; -} - -/* Footer */ -#footer { - background: #5a5a5a; - position: fixed; - bottom: -2px; - left: -2px; - right: -2px; - z-index: 99997; -} - -.footerNotification { - text-shadow: none; - padding: .5em 1em; - margin: 0; - font-weight: normal; - border-top: 1px solid #999; -} - -.notificationIcon { - height: 24px; - margin-right: 1em; - vertical-align: middle; -} - -/* - * Gradient Shadow - */ - -/* All HTML5 progress enabled browsers */ -progress { - /* Turns off styling - not usually needed, but good to know. */ - appearance: none; - -moz-appearance: none; - -webkit-appearance: none; - /* gets rid of default border in Firefox and Opera. */ - border: solid #cccccc 2px; - border-radius: 4px; - margin: 0; -} - - /* Polyfill */ - progress[role]:after { - background-image: none; /* removes default background from polyfill */ - } - -/* - * Background of the progress bar background - */ - -/* Firefox and Polyfill */ -progress { - background: #cccccc !important; /* !important only needed in polyfill */ -} - - /* Chrome */ - progress::-webkit-progress-bar { - background: #cccccc; - } - - /* - * Background of the progress bar value - */ - - /* Firefox */ - progress::-moz-progress-bar { - border-radius: 5px; - background-image: -moz-linear-gradient( center bottom, rgb(43,194,83) 37%, rgb(84,240,84) 69% ); - } - - /* Chrome */ - progress::-webkit-progress-value { - border-radius: 5px; - background-image: -webkit-gradient( linear, left bottom, left top, color-stop(0, rgb(43,194,83)), color-stop(1, rgb(84,240,84)) ); - background-image: -webkit-linear-gradient( center bottom, rgb(43,194,83) 37%, rgb(84,240,84) 69% ); - } - - /* Polyfill */ - progress[aria-valuenow]:before { - border-radius: 5px; - background-image: -moz-linear-gradient( center bottom, rgb(43,194,83) 37%, rgb(84,240,84) 69% ); - background-image: -ms-linear-gradient( center bottom, rgb(43,194,83) 37%, rgb(84,240,84) 69% ); - background-image: -o-linear-gradient( center bottom, rgb(43,194,83) 37%, rgb(84,240,84) 69% ); - } - -/* Detail Page*/ - -.itemDetailImage { - max-width: 100%; - max-height: 400px; -} - -.itemImageBlock { - vertical-align: top; -} - -.itemDetailBlock { - vertical-align: top; - padding-top: 1em; -} - - .itemDetailBlock p { - margin-top: 0; - } - -.starRating { - background-image: url(data:image/png;base64,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); - background-position: left center; - background-repeat: no-repeat; - width: 24px; - height: 20px; - display: inline-block; - background-size: cover; -} - -.galleryImage { - width: 120px; - display: inline-block; - margin: 5px; -} - -.halfStarRating { - background-position: center center; -} - -.emptyStarRating { - background-position: right center; -} - -@media all and (min-width: 650px) { - .itemImageBlock { - display: inline-block; - } - - .itemDetailImage, .itemImageBlock { - max-width: 220px; - } - - .itemDetailBlock { - padding-top: 0; - display: inline-block; - width: 45%; - padding-left: 20px; - max-width: 800px; - } - - .galleryImage { - width: 150px; - } -} - -@media all and (min-width: 750px) { - - .itemDetailImage, .itemImageBlock { - max-width: 300px; - } - - .itemDetailBlock { - padding-left: 30px; - } -} - - -@media all and (min-width: 1200px) { - - .itemDetailImage, .itemImageBlock { - max-width: 400px; - } - - .itemDetailBlock { - width: 55%; - } - - .galleryImage { - width: 200px; - } -} - -/* Now playing bar */ -#nowPlayingBar { - padding: 10px 20px 8px; - border-top: 1px solid #5490CC; -} - -.mediaButton { - margin: 0 20px 0 0; - display: inline-block; -} - -#mediaElement { - margin-right: 20px; - display: inline-block; - position: relative; -} - -.mediaButton img { - height: 28px; -} - -.itemVideo { - position: absolute; - z-index: 99998; - height: auto; - width: 180px; - bottom: -5px; -} - -@media all and (min-width: 650px) { - - .itemVideo { - width: 270px; - } -} +@font-face {
+ font-family: "Open Sans";
+ font-style: normal;
+ font-weight: 700;
+ src: local("Open Sans Bold"), local("OpenSans-Bold"), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/k3k702ZOKiLJc3WVjuplzJ1r3JsPcQLi8jytr04NNhU.woff) format('woff');
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-style: normal;
+ font-weight: 300;
+ src: local("Open Sans Light"), local("OpenSans-Light"), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/DXI1ORHCpsQm3Vp6mXoaTZ1r3JsPcQLi8jytr04NNhU.woff) format('woff');
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-style: normal;
+ font-weight: 800;
+ src: local("Open Sans Extrabold"), local("OpenSans-Extrabold"), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/EInbV5DfGHOiMmvb1Xr-hp1r3JsPcQLi8jytr04NNhU.woff) format('woff');
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-style: normal;
+ font-weight: 400;
+ src: local("Open Sans"), local("OpenSans"), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/K88pR3goAWT7BTt32Z01mz8E0i7KZn-EPnyo3HZu7kw.woff) format('woff');
+}
+
+body {
+ overflow-y: scroll!important;
+}
+
+h1 {
+ font-family: 'Segoe UI Light', 'Open Sans', Arial, Helvetica, sans-serif;
+ font-weight: 200;
+ font-size: 32pt;
+}
+
+.toolsSidebar h1 {
+ font-size: 42pt;
+}
+
+.ui-loader h1 {
+ font-weight: bold;
+ font-family: Arial;
+}
+
+h2 {
+ font-family: 'Segoe UI Semiight', 'Open Sans', Arial, Helvetica, sans-serif;
+ font-weight: 400;
+ font-size: 22pt;
+}
+
+pre, textarea.pre {
+ display: block;
+ padding: 8.5px;
+ font-size: 12.025px;
+ line-height: 18px;
+ word-break: break-all;
+ word-wrap: break-word;
+ white-space: pre;
+ white-space: pre-wrap;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+ color: #000;
+}
+
+.type-interior h2 {
+ color: #1B58B8;
+}
+
+/*
+ Page / Base styles
+ */
+.page {
+ background: #f2f2f2;
+ background-attachment: fixed;
+}
+
+.libraryPage {
+ background: #1d1d1d url(images/bg.png) top left repeat-x;
+ background: #262626!important;
+ background-attachment: fixed!important;
+}
+
+ .libraryPage .interiorLink {
+ color: #2489ce;
+ font-weight: bold;
+ }
+
+/*
+ Header
+ */
+.header {
+ padding: 10px 0 10px 10px;
+}
+
+.imgLogoIcon {
+ height: 45px;
+}
+
+.imgLogoText {
+ height: 45px;
+ display: none;
+}
+
+
+.ui-popup-container {
+ z-index: 99999;
+}
+
+.headerButtons {
+ float: right;
+ position: absolute;
+ top: 10px;
+ right: 10px;
+}
+
+.header .imageLink {
+ display: inline-block;
+}
+
+.imageLink + .imageLink {
+ margin-left: 30px;
+}
+
+.header .imageLink img {
+ height: 32px;
+ vertical-align: middle;
+}
+
+.btnCurrentUser {
+ text-decoration: none;
+}
+
+.currentUsername {
+ margin-right: 7px;
+ font-size: 20px;
+ color: #000;
+ position: relative;
+ top: 4px;
+}
+
+.libraryPage .currentUsername {
+ color: #fff;
+}
+
+h1 .imageLink {
+ margin-left: 15px;
+}
+
+ h1 .imageLink img {
+ height: 32px;
+ }
+
+.imageLink:hover {
+ opacity: .5;
+}
+
+.type-home h1 {
+ margin-top: 1.25em;
+ margin-bottom: 10px;
+ padding-bottom: 5px;
+ font-weight: normal;
+ border-bottom: 1px solid #777;
+}
+
+.libraryPage .ui-content > h1:first-child {
+ margin-top: 0;
+}
+
+.pageTitle {
+ margin-top: 0;
+}
+
+.imageButton {
+ background: transparent;
+ border: 0;
+ padding: 0;
+ cursor: pointer;
+ cursor: hand;
+}
+
+ .imageButton:hover {
+ opacity: .5;
+ }
+
+ .imageButton[disabled], .imageButton[disabled]:hover {
+ opacity: .3!important;
+ cursor: default;
+ }
+
+/*
+ Forms
+ */
+form, .readOnlyContent {
+ max-width: 600px;
+}
+
+.fieldDescription {
+ font-size: 11px;
+ padding-left: 5px;
+}
+
+.ulForm {
+ margin-bottom: 20px!important;
+}
+
+ .ulForm li:not(.ui-li-divider) {
+ background: none;
+ border-top: none;
+ border-bottom: none;
+ }
+
+.popup .ulForm {
+ margin-bottom: 0!important;
+}
+
+.popup .ui-content {
+ padding: 20px;
+}
+
+.content-secondary {
+ z-index: 99996;
+ background: #262626;
+ border: 0;
+ margin-top: 40px;
+}
+
+ .content-secondary h1 {
+ margin: 0;
+ padding: 20px 0 20px 30px;
+ color: #fff;
+ }
+
+.sidebarLinks a {
+ display: block;
+ padding: 12px 15px 12px 30px;
+ text-decoration: none;
+ color: #fff!important;
+ text-shadow: none!important;
+ font-weight: normal!important;
+ font-size: 17px;
+}
+
+ .sidebarLinks a:hover {
+ background: #f2f2f2;
+ color: #000!important;
+ }
+
+ .sidebarLinks a.selectedSidebarLink {
+ background: #2572EB!important;
+ color: #fff!important;
+ }
+
+/* Tabs (e.g. advanced metadata page) */
+.localnav {
+ margin-bottom: 40px!important;
+}
+
+ .localnav + form {
+ margin-top: -10px;
+ }
+
+.page > .ui-content {
+ padding-bottom: 100px;
+}
+
+@media all and (min-width: 650px) {
+
+ .imgLogoIcon {
+ height: 60px;
+ }
+
+ .imgLogoText {
+ height: 60px;
+ display: inline;
+ }
+
+ .header {
+ padding-left: 30px;
+ padding-top: 20px;
+ padding-bottom: 15px;
+ }
+
+ .headerButtons {
+ top: 20px;
+ right: 30px;
+ }
+
+ .localnav .ui-btn-inner {
+ font-size: 16px;
+ }
+
+ .libraryPage .ui-content {
+ padding-right: 50px;
+ padding-left: 50px;
+ }
+
+ .type-interior > .ui-content {
+ padding-right: 0;
+ padding-left: 0;
+ padding-top: 0;
+ overflow: hidden;
+ }
+
+ .content-secondary {
+ text-align: left;
+ width: 45%;
+ position: fixed;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ margin: 0;
+ }
+
+ .content-primary {
+ width: 45%;
+ float: right;
+ padding: 0 6% 3em 0;
+ margin: 0;
+ }
+
+ .content-primary ul:first-child {
+ margin-top: 0;
+ }
+}
+
+@media all and (min-width: 750px) {
+
+ .content-secondary {
+ width: 34%;
+ }
+
+ .content-primary {
+ width: 56%;
+ }
+}
+
+@media all and (min-width: 1200px) {
+
+
+ .content-secondary {
+ width: 30%;
+ }
+
+ .content-primary {
+ width: 60%;
+ }
+}
+
+@media all and (min-width: 1440px) {
+
+
+ .content-secondary {
+ width: 25%;
+ }
+
+ .content-primary {
+ width: 65%;
+ }
+}
+
+@media all and (min-width: 1920px) {
+
+
+ .content-secondary {
+ width: 20%;
+ }
+
+ .content-primary {
+ width: 70%;
+ }
+}
+
+/*
+ Media Library Page
+ */
+.mediaFolderButtons {
+ margin-top: 10px;
+}
+
+.mediaFolderLocations {
+ margin: 1em .25em!important;
+}
+
+.mediaLocationsHeader {
+ padding-top: .75em!important;
+ padding-bottom: .75em!important;
+}
+
+ .mediaLocationsHeader .ui-btn {
+ position: absolute;
+ right: 3px;
+ margin-top: 0!important;
+ margin-bottom: 0!important;
+ top: 6px;
+ }
+
+#divVirtualFolders .ui-btn-inner, .mediaLocationsHeader, #divVirtualFolders .ui-btn-text {
+ font-size: 14px;
+}
+
+#ulDirectoryPickerList a {
+ padding-top: .4em;
+ padding-bottom: .4em;
+ font-size: 15px;
+}
+
+/*
+ Plugin updates Page
+ */
+#pluginUpdatesForm table {
+ width: 100%;
+}
+
+#pluginUpdatesForm td + td {
+ text-align: center;
+}
+
+
+/*
+ List Vew Items
+ */
+
+.posterViewItem {
+ display: inline-block;
+ margin: 5px;
+ text-align: center;
+ font-size: 15px;
+ padding: 0;
+ position: relative;
+}
+
+ .posterViewItem a {
+ color: white!important;
+ font-weight: normal!important;
+ text-decoration: none;
+ }
+
+ .posterViewItem img {
+ max-width: 155px;
+ max-height: 155px;
+ vertical-align: bottom;
+ }
+
+.premiumBanner img {
+ position: absolute;
+ text-align: right;
+ top: 0;
+ right: 0;
+ width: 75px!important;
+ height: 75px!important;
+ max-width: 75px!important;
+ max-height: 75px!important;
+}
+
+.posterViewItemText {
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+ margin: 0;
+ padding: 4px 0px 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ background: #181818;
+ text-shadow: none;
+ max-width: 155px;
+}
+
+ .posterViewItemText div{
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+ margin: 0px 4px;
+ height: 24px;
+ }
+
+.posterViewItem:hover, .userItem:hover {
+ -moz-box-shadow: 0 0 20px 3px #2572EB;
+ -webkit-box-shadow: 0 0 20px 3px #2572EB;
+ box-shadow: 0 0 20px 3px #2572EB;
+}
+
+@media all and (min-width: 750px) {
+
+ .posterViewItem {
+ font-size: 16px;
+ }
+
+ .posterViewItemText {
+ padding-top: 5px;
+ max-width: 190px;
+ }
+
+ .posterViewItem img {
+ max-width: 190px;
+ max-height: 190px;
+ }
+}
+
+@media all and (min-width: 1200px) {
+
+ .posterViewItem {
+ font-size: 17px;
+ }
+
+ .posterViewItem img {
+ max-width: 280px;
+ max-height: 280px;
+ }
+
+ .posterViewItemText {
+ max-width: 280px;
+ }
+}
+
+@media all and (min-width: 1920px) {
+
+ .posterViewItem {
+ font-size: 19px;
+ }
+
+ .posterViewItemText div{
+ height: 28px;
+ }
+
+ .posterViewItem img {
+ max-width: 352px;
+ max-height: 352px;
+ }
+
+ .posterViewItemText {
+ max-width: 352px;
+ }
+}
+
+/* Startup wizard */
+.wizardPage {
+ background: #e2e2e2;
+}
+
+.wizardContent {
+ max-width: 800px;
+ padding: .5em 2em 1em;
+ margin: 0 auto;
+ background: #f2f2f2;
+}
+
+.wizardNavigation {
+ text-align: right;
+}
+
+.wizardContent form {
+ max-width: 100%;
+}
+
+.wizardContent p {
+ margin: 2em 0;
+}
+
+.wizardContent h2 img {
+ height: 35px;
+ vertical-align: middle;
+ margin-right: .5em;
+ position: relative;
+ top: -3px;
+}
+
+/* User Image */
+.imageDropZone {
+ border: 2px dashed #bbb;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
+ padding: 25px;
+ text-align: center;
+ color: #bbb;
+}
+
+/* Dashboard home */
+.tblConnections td {
+ padding: .5em 0 .5em 1.25em;
+}
+
+ .tblConnections td:first-child {
+ padding-left: 0;
+ }
+
+.tblConnections img {
+ height: 50px;
+}
+
+.clientNowPlayingImage {
+ border-radius: 5px;
+ border: 2px solid #ccc;
+}
+
+/* Footer */
+#footer {
+ background: #5a5a5a;
+ position: fixed;
+ bottom: -2px;
+ left: -2px;
+ right: -2px;
+ z-index: 99997;
+}
+
+.footerNotification {
+ text-shadow: none;
+ padding: .5em 1em;
+ margin: 0;
+ font-weight: normal;
+ border-top: 1px solid #999;
+}
+
+.notificationIcon {
+ height: 24px;
+ margin-right: 1em;
+ vertical-align: middle;
+}
+
+/*
+ * Gradient Shadow
+ */
+
+/* All HTML5 progress enabled browsers */
+progress {
+ /* Turns off styling - not usually needed, but good to know. */
+ appearance: none;
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ /* gets rid of default border in Firefox and Opera. */
+ border: solid #cccccc 2px;
+ border-radius: 4px;
+ margin: 0;
+}
+
+ /* Polyfill */
+ progress[role]:after {
+ background-image: none; /* removes default background from polyfill */
+ }
+
+/*
+ * Background of the progress bar background
+ */
+
+/* Firefox and Polyfill */
+progress {
+ background: #cccccc !important; /* !important only needed in polyfill */
+}
+
+ /* Chrome */
+ progress::-webkit-progress-bar {
+ background: #cccccc;
+ }
+
+ /*
+ * Background of the progress bar value
+ */
+
+ /* Firefox */
+ progress::-moz-progress-bar {
+ border-radius: 5px;
+ background-image: -moz-linear-gradient( center bottom, rgb(43,194,83) 37%, rgb(84,240,84) 69% );
+ }
+
+ /* Chrome */
+ progress::-webkit-progress-value {
+ border-radius: 5px;
+ background-image: -webkit-gradient( linear, left bottom, left top, color-stop(0, rgb(43,194,83)), color-stop(1, rgb(84,240,84)) );
+ background-image: -webkit-linear-gradient( center bottom, rgb(43,194,83) 37%, rgb(84,240,84) 69% );
+ }
+
+ /* Polyfill */
+ progress[aria-valuenow]:before {
+ border-radius: 5px;
+ background-image: -moz-linear-gradient( center bottom, rgb(43,194,83) 37%, rgb(84,240,84) 69% );
+ background-image: -ms-linear-gradient( center bottom, rgb(43,194,83) 37%, rgb(84,240,84) 69% );
+ background-image: -o-linear-gradient( center bottom, rgb(43,194,83) 37%, rgb(84,240,84) 69% );
+ }
+
+/* Detail Page*/
+
+.itemDetailImage {
+ max-width: 100%;
+ max-height: 400px;
+}
+
+.itemImageBlock {
+ vertical-align: top;
+}
+
+.itemDetailBlock {
+ vertical-align: top;
+ padding-top: 1em;
+}
+
+ .itemDetailBlock p {
+ margin-top: 0;
+ }
+
+.starRating {
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMYAAAA6CAYAAADryyY/AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAAS+klEQVR4Xu1de1gUV54dMJmdyWRcZzWZPNZMRLIRgxhFRhOdRCRKwMQkoGZ0hCCiGOOqSdSwrpmMiE58JDOT6LpmvnE0Jk40RoOPaHjKU1QQEBB5qPgCROhmdP377vnRVVDdXe/qruqgfN/5qrpuFV333HN+t+6jbv+IMfaju7jLwV0NOGugyxRW/rVdSe2H7/fn4GfVvdzlwcG81TzU19f7hB6sJsLP1pK2qvXSqjSUyU+BewBLzGGxILp4OHfu3B3Pw/nz532CB0uNcbl+ZUBnaxqzt6zunB0XNgSm+DnQx4paw0pj8DxAFJ0zZsy4Y3morKwMuHDhAvMFHqw0hp+tedWOztZURqgue/dzGOLfuZrD9FrDQmN080CiKCwsvGN5aGxs3EEc+AIPlhnj8rmU0M6WVawLzX/owptJY6JgjAeAe81+pLLKGEIeECkpWrKEhIQ7joeKiopQ3hS+wINVxvC3Xf19XmfzBzAEh2sfsOqTSw7DEIHA/Vxj3LSnKouM4cQDCQJRk+Xn599xPDQ0NOTxhvAFHqwwht+1+vciOq/9nnXh6vtO2PrJq0lww0PAj01zhTW9MW48QByMx8aNG+8YHs6cORNBAYEg5ID2reLBCmP426+sbOq8uhKGcMfF6nfLoNMnuYY4deOa8mdBjeHGg1AUpaWldwwP6KJtcjUE/9kqHsw2hl9Lw/I5nVf+mzljBT73YOdnMcvghoFcrWFKQ9xkY4jyAIEwITZt2tTreaiqqprjagpf4MFUYxRnJvW3X0pp6rz8X0wcKTiewlrrl7bAFMFAX7O6b800hhQProLAI0av5uHQoUP96+rqmlzz7Qs8mGkMvxuNy1I7L0H8l96TwXKkLWfpu15fBVM8AvyLGT1UJhpDkgeIhLli+/btvZaH6urqVLE8+wIPphnjVM6c/vamZZ2dTRB+N5Zh3wGk9eDiMtbe+O7NyIjBYTBFPzNqDbOMIccDRr6ZELW1tQziuTl+/Phex8ORI0f6I6+drnkW+2wFD2YZw6+98Z2/2C8uZe54F8c4XMBWgJKMhK3coN9PvF1rmGQMWR5IAISzZ8864eDBg72OBxj+L3x+pbZW8mCKMS6ULwhwCP4dcZzH8S687YQb9YtvvfD842Ngil8ANI/Ka39mGEOJB1ch8J/R1rg1bty4XsPD8ePHA6TyKnfcTB7MMIZ/R8Pi9B7RL4H4lbAY5zhQXZh4CG4YDHh10M8EYyjyUFNTw6SQnZ3da3hAbZHOG0Auz2JpZvHgbWP4XateEMGL3H27iNkbpfCfSHNgXnzIZBjjl97svvWyMVTxoCSSmTNn/uB5wLhEhFI+ldLN4MHbxvDvqF+YxwvcadsA0XdjIfalcbE0iQa7/sObg35eNoYqHhBJqbEtiaKioh88Dxi3yBMTvlLehelm8OANY9CAHMH/amVyrLPg32L2eiksQJoE6haw//lwwjyu+5Ya4jQizn+PR9odXjCGZh4gGiYHPGOztLS0HywPJ0+ejHU1gFKexdLN4EGvMboLnRMpvUNxT/Wx+MBLpUkvNFfOS2qtSk7rOPfmpW6xQ9z2bryJfSXMxzk9uFKWWF+eOePTs/mz3qrNj4ssTJ9K00ZojINm4lLDnO5B+CagphFzncbwKA9U4EpAw7X+8OHDn2ZlZb0FRO7du9dnecjIyAgsLi5+4dSpU0l4hErD+xaXeKEr5VMp3ds8yBlDWOgkuj7Ze2MHXDmdFHG1PCm2rTo5Ffi0o3Z+nu3c/CZxoTuL234On7uRjH0VqJ3H7DJor046c6NqTn5L+ezNzeWz0y4Ux01vLJo1EfdLNQtNRCTjdN2/S03jZBwZY5jGA4TD9OL06dNnysrK8k+cOLEZSMvLy5uem5vrVR527do1oKSkJALfF4vvTwU+xfTxPOShSUnYrul68+16nad4EBqDou29tYXxYfXFb0y6VpG0tLkiaU372eT8GzXzCoTRW7PAFcRtr50L8cvgbBKzy2IO0sVxvSKhsK0yoeDyyVl/bCr53XsVGVOjThyMeQZ5/RlnHjKOv8AYlvGgJA6IjukFHmMKEbkL8CLUHzGt/T1Mx4jat2+fIg85OTlhx44dmwTxL8X/WFNeXp4P8RVICV8pD55I18sBXaeWhy5jtFXNHYHobVeM4EYErihuEr+0wO1nE5Eughoc68Zs7MshAek9aKuIr9rxp/DhZBBf4MFIgUOwTC8glqoNGzZ084CaZwQEbPeEiKX+h5G8yl2rlwO6TsgDX2P0qcicEdVRM/efjscW70RvSXGT4A0I3F4NsXfjDewroCqe3aiIu/XB2yNnwhSPA325GsNSHqjAjRQsIjnTCojh1qJFi9x4+O6776JwL/9UMocvClwrB3S+Kw+8Mejx4f6t68ZPbq9KvOl4bPF29KbI7hzB9QjcDpFLIw5p7jhfOL1p/qwhi5Dn0cCvKO+cMSzlgTeFnoKVuwY1ABMDHpOasPiCJA9r1qyZjOtu6hW/EZPTtVbywBuDGpj0rD3gxfEDw66VxtXpfTzRLG6K7rLiJuGLC9xxfJYyzvyO2TmcL5jWFBTYLw55HQ88AdB0k3s5Y1jKg5IQpASu5ziZYvDgwYo8PPfcc2HoWarTK3KlPOlJ15NfueAgxoOw8U2ioO7P/pMjHgu9VDKzVOvjiZ7o3SN6bQLnhS67rZzJ7AIUfxOdNzSw3yzk8XmAujn7cQHBT9D4towHTxa48H+hq5QJsXv37jyIQTUP4eHhoWiwl+oRsdQ13sqr3P/VwoNrdy2JgsYEaF7SwPq86fvdxW4welOEF0RwVfsuAheKXWzfVjmDdaMC+8DxfdG5yFM0QFO46fHJaQ0rl+5aS3hQEotrwSp9Ri8Uc8WePXt084Bxk/2uQle6Z2+kK+XbNV0PD1LjGNTnT92Zj5YdfmWT6OOKVnHT+R4QOIm8B7/FvgTKX2c2Dp+tHbMJeXkRGAnQ2lVkfKeF3STGMUzlQarAxQpW7TE0Kqlh2YXVq1cb5uHbb7/d5Cmxe0Lg3uJBboCPRHEf8MjRzyet7I7sGsVNZhCL4HoEzgvdfTsdJnBH68mptz9bM5rEQANd1B35MJcnt9UOZQb4TONBrpCFAte6j7lFt1NTUz3Gw7Zt21by5tAqbjpfrZjFztOad+H5WnhQmhJCvTS0puyjf1s/dvaN07+92SVyp6jNf5aJ3hTVBRFcq8B7RD+N2U5LYSrSenD9RMzt2VMDaDGBSQC9P/4glxfRlUcUpoSYwoOWQseAG1MDEkNMTNfiEh7lYe3atbPx/Tf1ilxLXuXOVcMBnaOVByVjgM+u+Udkjl9uWBEac6Ns+k15kYtHb+eIrl7gQrH37MfCBBzKsHVBY85LTYnTApZyNcUwbAcA1LEguRyPirlSXudBbSGLnYepGcwV33//fVNsbKzXeFi+fHkMvvOmJ0RuJO/Caz3Fgxpj8OaguUcPvDMnaMLV4pg6W7mcuCnNOYLrEbitLAail8JrSONQii2HxuzJTUGD+8bjXicAT9E9AzRnSnZSoQpjeJ0HKmCxgtVzjEwREBDgdR6wnOgEzMuqI3N4Sty+wINaY5Ao+D7+vlOjHhvWfPy1WofYBdGb9kUiuB6B80K3lb4K0UvhFaT1oHjPhNynnuj7Ou6V5gANAv4VULUOrkpjeJUHPQagazDT1AmY3JcbGBhoGg+RkZHD0J1bq7Ym05tPpes8yYMWY/Ci4Ltzf3X2aHR6j+jFI7gegQvF3rM/BSbgcApbFxTvDnfthqQ1qVT/3oYGY3iNB9eC1fP5yy+/tIwHTExMVxKvmnQ9+Xa9xigPWo1BoqA/6qmhLs/HKw9O2tkT0Z0juB6B2069DNFL4ORLzCaCLzeG7cC9vAS4dseqfidDozG8woNaQWAkmolh3bp1lvOwf//+nbz41eZH73ne5EGvMYTmeKyl+KVm1wiuXeCTIXoxRDPbCTFE4XgUa8yIaMLNvArQvCdaoI26mDX/+IxOY3iUB6mC5o+jZ4V6V0SBSX8+wwPaHM1axK6Ub9d0M3gwYowuUaQuChroHMX1CZxE7o4XcYxDCbaiiKQfEaTBO5riQYOSmk1BGTFgDI/xIFfgfBrep6AflxGFL/CwcOHCgWqFria/Uud4mwejgvCrOxIxyRHRxYTNH1MncFtJJMQvhUlIE8faJU++DVHQEju6l/M0aAyP8CBX2GrSMH3cch6wONwkLYJXky+t53iCB6PG8G/Jn5jmHMnlxE1p0gK3lUxEOofj2HbjBey7IgLHHNj5YcgGmCKIe4xS3a7gGwoeqDE8woOYAAoKCphaYJq45Txg1m6aViGrOV8tB3SeJ3gwaow+bUUTD7iLXUzgYuKmYz0C79ov5jEB+1IIRxqHonBWsCNsP8RNUz5oYqCu39QwWGN4hAexwkc3KP3CkipgqoblPKB9cUBO6FoELjxXLQd0nid4MGqMe9qLIiod0dy4wG0QuTvG45gcnmd1B589A0PQrFl6t8KKNoZHeNBS+K7nQpAME/ws5wH3USknfiN5VHOtp3gwaowfO6K6cwTXK3Bb4fNMHM/huDxgiLEAjXLrWuPWYI3hER6o4KlgjcBqHtSIV805Rjiga43yYMQYfo3fjZ3oHs2lxE3HlQVuK/wNzpPDOGYrcMfSNwYmgoxHAV2/3WfAGB7jQasYsHoHc0VcXJxlPKDhPVGsJtOaL63ne4MHQ8a4lj12qbTY9QncIfqx4sjH8W48yzrye7Bl5RPvwxQ0DYQmPGpugBsxhqd4ECtgsWNYL4pJYcWKFZbxgAXWlmoVtfB8tfnnz/MmD0aM4X89d+xOW6F4BFcncGdxC4Xekf8MhM8hD1tJjEHaGJaxJZh+OH6I3ga4AWN4jAe5gqY09PgoYvPmzZbxgDf8dpLQPSlwMU7M4MGIMfq05T6b74jg+gVetH34seOfP51D4pbFMaRLYjSr/za0guuZ0tUAN2AMj/GAnxVDmcuLH8vgMzlgETXLeIAx8pXMLUwXyyt6lI75Ag9GjHGvexRXEDeJH+JuzRp9u3j78Nzocb9Ihpgjgd/MePGBaeX/ePpIx7HROEcOv0a6O65njfo/rmdKVwPcgDE8ygNmqk7DBLgjSgaQSsd0c8t4UDK1WDrlA/d8G4bIHTt2bLcerOZBtzEa0kNHiUdwaVG3ZoXdPvDnoD1DA+6jBb7odVOa30SPP/TTxY/RfuIrD7584vOQ3RD6rY7cMCaOUTjujlnRA2L0NsD1GsNbPEyZMuVlRM7dEM0tKRMgQjMxREVFmc4DJg+O0mpmMsTHH3+8Z9CgQZJ6sIoHvcbwu5YRNkcscjsfcwi7NXPU7fQ/DeENEcFFdvq9C3oHm6aH00tQBNp/CHji2eE/D8/ZOvTv1zNH3urICWXSGMnacxxYt2ggLR6mqwGu0xhe5yEkJCR8y5YtfyeDSBmBP56ZmckImK9kOg/4sck5ao1Bhvjoo494Q6jSg9k86DbG9czQTxzRXDx6d+SMYpcPj2j73xWDNkOsr3E1xCgSPUC/jkSj1NS1SgNywhXF6RilkUGGPBNy/4ScrUO2XTkyvLU9ZwQMIIHsp1nWlie34xqaTKj5Z8n0GsMsHoYNGzYBBtmGdx5aeQOIbdEzxNAAN50HiP0TMoacedGd25aSkmJID2bxoNcY/m1ZI/Pco7gjcl8+/HTbX1cO+gQCpXWcxgH03jU9KlHDmLpTlV4g4td1oink/8ZdG7x/Y+Cqq0dCWtqzh7NuZGGfw5mvhhbhXJoaorkBrtMYlvCwfv36VTBIC5lADHiDz3QecB95YqYg85Ih0I3scT14kwe9xrjnRvaITtfoXb0nuGbDkoEfQpg0DZxGoml1Dmo/8IbgawccUvXHG4TMRP+D/lfwvvWDUy+mBze0Z4YwIa4cCm5FOk0N0dwA12kMS3nAi0mpeLZvQLSmBmw3Dhw4YDoPMEanaw321Vdf1WCmq9f14A0edBmjYldQYDseXRwYzqr3PFWTkvAQDSzxNcRQF0Mo1RBKLuENQu0QMgjVPsEfv/3ogvpvgsrbM4NhEAd+PfQ+WiaGXljSNAKuxxi+wsPixYsXfP311+VCcwQFBZnGwxdffBEorLnIEPHx8abrwZM86DGG3+WDw2Lp8aVsZ9DR95MeThGpIfrhGInYqCFcDUMGoVrHqQb58zuPzG/Y++Tp9owg9tHihxdwxqHvVz0CrsMYPsfDkiVL5mMJztNHjx5liNSm8ZCenh5LxtixY8fRxMREy/XgCR50GaPhm6ETV89/hFbiCOUeXYQ1BAlS6yOTUo0hZhAyHX0XmZDmSAUlTO43JXXeg7Q6Bj1yaZoaoscYvspDdHT0lLlz55rGA2qricnJyT6nByM86DIG95hCjWJaB5Z6j2iZGm/UEEqG4WsQ+m66B3qEonvqD2h6m0+PMe7y0FU8VAb02Nqr9KDHGEQGvQxEZFBUFna5KgnZW+m8QcgM1JNFW03vZegwxl0eekqz1+nh/wHpt113GQ6n7AAAAABJRU5ErkJggg==);
+ background-position: left center;
+ background-repeat: no-repeat;
+ width: 24px;
+ height: 20px;
+ display: inline-block;
+ background-size: cover;
+}
+
+.galleryImage {
+ width: 120px;
+ display: inline-block;
+ margin: 5px;
+}
+
+.halfStarRating {
+ background-position: center center;
+}
+
+.emptyStarRating {
+ background-position: right center;
+}
+
+@media all and (min-width: 650px) {
+ .itemImageBlock {
+ display: inline-block;
+ }
+
+ .itemDetailImage, .itemImageBlock {
+ max-width: 220px;
+ }
+
+ .itemDetailBlock {
+ padding-top: 0;
+ display: inline-block;
+ width: 45%;
+ padding-left: 20px;
+ max-width: 800px;
+ }
+
+ .galleryImage {
+ width: 150px;
+ }
+}
+
+@media all and (min-width: 750px) {
+
+ .itemDetailImage, .itemImageBlock {
+ max-width: 300px;
+ }
+
+ .itemDetailBlock {
+ padding-left: 30px;
+ }
+}
+
+
+@media all and (min-width: 1200px) {
+
+ .itemDetailImage, .itemImageBlock {
+ max-width: 400px;
+ }
+
+ .itemDetailBlock {
+ width: 55%;
+ }
+
+ .galleryImage {
+ width: 200px;
+ }
+}
+
+/* Now playing bar */
+#nowPlayingBar {
+ padding: 10px 20px 8px;
+ border-top: 1px solid #5490CC;
+}
+
+.mediaButton {
+ margin: 0 20px 0 0;
+ display: inline-block;
+}
+
+#mediaElement {
+ margin-right: 20px;
+ display: inline-block;
+ position: relative;
+}
+
+.mediaButton img {
+ height: 28px;
+}
+
+.itemVideo {
+ position: absolute;
+ z-index: 99998;
+ height: auto;
+ width: 180px;
+ bottom: -5px;
+}
+
+@media all and (min-width: 650px) {
+
+ .itemVideo {
+ width: 270px;
+ }
+}
diff --git a/MediaBrowser.WebDashboard/Html/scripts/site.js b/MediaBrowser.WebDashboard/Html/scripts/site.js index 2660697dc..d5479b3ed 100644 --- a/MediaBrowser.WebDashboard/Html/scripts/site.js +++ b/MediaBrowser.WebDashboard/Html/scripts/site.js @@ -1,1187 +1,1187 @@ -$.ajaxSetup({ - crossDomain: true, - - error: function (event, jqxhr, settings, exception) { - Dashboard.hideLoadingMsg(); - - if (!Dashboard.suppressAjaxErrors) { - setTimeout(function () { - - - var msg = event.getResponseHeader("X-Application-Error-Code") || Dashboard.defaultErrorMessage; - - Dashboard.showError(msg); - }, 500); - } - } -}); - -$.support.cors = true; - -$(document).one('click', WebNotifications.requestPermission); - -var Dashboard = { - jQueryMobileInit: function () { - - //$.mobile.defaultPageTransition = 'slide'; - - // Page - //$.mobile.page.prototype.options.theme = "a"; - //$.mobile.page.prototype.options.headerTheme = "a"; - //$.mobile.page.prototype.options.contentTheme = "a"; - //$.mobile.page.prototype.options.footerTheme = "a"; - - //$.mobile.button.prototype.options.theme = "c"; - $.mobile.listview.prototype.options.dividerTheme = "b"; - - $.mobile.popup.prototype.options.theme = "c"; - //$.mobile.collapsible.prototype.options.contentTheme = "a"; - }, - - getCurrentUser: function () { - - if (!Dashboard.getUserPromise) { - Dashboard.getUserPromise = ApiClient.getUser(Dashboard.getCurrentUserId()).fail(Dashboard.logout); - } - - return Dashboard.getUserPromise; - }, - - validateCurrentUser: function () { - Dashboard.getUserPromise = null; - - if (Dashboard.getCurrentUserId()) { - Dashboard.getCurrentUser(); - } - - // Re-render the header - $('.header').remove(); - Dashboard.ensureHeader($.mobile.activePage); - }, - - getCurrentUserId: function () { - - var userId = localStorage.getItem("userId"); - - if (!userId) { - var autoLoginUserId = getParameterByName('u'); - - if (autoLoginUserId) { - userId = autoLoginUserId; - localStorage.setItem("userId", userId); - } - } - - return userId; - }, - - setCurrentUser: function (userId) { - localStorage.setItem("userId", userId); - Dashboard.getUserPromise = null; - }, - - logout: function () { - localStorage.removeItem("userId"); - Dashboard.getUserPromise = null; - window.location = "login.html"; - }, - - showError: function (message) { - - $.mobile.loading('show', { - theme: "e", - text: message, - textonly: true, - textVisible: true - }); - - setTimeout(function () { - $.mobile.loading('hide'); - }, 2000); - }, - - alert: function (message) { - - $.mobile.loading('show', { - theme: "e", - text: message, - textonly: true, - textVisible: true - }); - - setTimeout(function () { - $.mobile.loading('hide'); - }, 2000); - }, - - updateSystemInfo: function (info) { - - var isFirstLoad = !Dashboard.lastSystemInfo; - - Dashboard.lastSystemInfo = info; - Dashboard.ensureWebSocket(info); - - if (!Dashboard.initialServerVersion) { - Dashboard.initialServerVersion = info.Version; - } - - if (info.HasPendingRestart) { - - Dashboard.hideDashboardVersionWarning(); - Dashboard.showServerRestartWarning(); - - } else { - - Dashboard.hideServerRestartWarning(); - - if (Dashboard.initialServerVersion != info.Version) { - - Dashboard.showDashboardVersionWarning(); - } - } - - if (isFirstLoad) { - Dashboard.showFailedAssemblies(info.FailedPluginAssemblies); - } - - Dashboard.showInProgressInstallations(info.InProgressInstallations); - }, - - showFailedAssemblies: function (failedAssemblies) { - - for (var i = 0, length = failedAssemblies.length; i < length; i++) { - - var assembly = failedAssemblies[i]; - - var html = '<img src="css/images/notifications/error.png" class="notificationIcon" />'; - - var index = assembly.lastIndexOf('\\'); - - if (index != -1) { - assembly = assembly.substring(index + 1); - } - - html += '<span>'; - html += assembly + " failed to load."; - html += '</span>'; - - Dashboard.showFooterNotification({ html: html }); - - } - }, - - showInProgressInstallations: function (installations) { - - installations = installations || []; - - for (var i = 0, length = installations.length; i < length; i++) { - - var installation = installations[i]; - - var percent = installation.PercentComplete || 0; - - if (percent < 100) { - Dashboard.showPackageInstallNotification(installation, "progress"); - } - } - - if (installations.length) { - - Dashboard.ensureInstallRefreshInterval(); - } else { - Dashboard.stopInstallRefreshInterval(); - } - }, - - ensureInstallRefreshInterval: function () { - - if (!Dashboard.installRefreshInterval) { - - if (Dashboard.isWebSocketOpen()) { - Dashboard.sendWebSocketMessage("SystemInfoStart", "0,350"); - } - Dashboard.installRefreshInterval = 1; - } - }, - - stopInstallRefreshInterval: function () { - - if (Dashboard.installRefreshInterval) { - if (Dashboard.isWebSocketOpen()) { - Dashboard.sendWebSocketMessage("SystemInfoStop"); - } - Dashboard.installRefreshInterval = null; - } - }, - - cancelInstallation: function (id) { - - ApiClient.cancelPackageInstallation(id).always(Dashboard.refreshSystemInfoFromServer); - - }, - - showServerRestartWarning: function () { - - var html = '<span style="margin-right: 1em;">Please restart Media Browser Server to finish updating.</span>'; - html += '<button type="button" data-icon="refresh" onclick="Dashboard.restartServer();" data-theme="b" data-inline="true" data-mini="true">Restart Server</button>'; - - Dashboard.showFooterNotification({ id: "serverRestartWarning", html: html, forceShow: true, allowHide: false }); - }, - - hideServerRestartWarning: function () { - - $('#serverRestartWarning').remove(); - }, - - showDashboardVersionWarning: function () { - - var html = '<span style="margin-right: 1em;">Please refresh this page to receive new updates from the server.</span>'; - html += '<button type="button" data-icon="refresh" onclick="Dashboard.reloadPage();" data-theme="b" data-inline="true" data-mini="true">Refresh Page</button>'; - - Dashboard.showFooterNotification({ id: "dashboardVersionWarning", html: html, forceShow: true, allowHide: false }); - }, - - reloadPage: function () { - - window.location.href = window.location.href; - }, - - hideDashboardVersionWarning: function () { - - $('#dashboardVersionWarning').remove(); - }, - - showFooterNotification: function (options) { - - var removeOnHide = !options.id; - - options.id = options.id || "notification" + new Date().getTime() + parseInt(Math.random()); - - var parentElem = $('#footerNotifications'); - - var elem = $('#' + options.id, parentElem); - - if (!elem.length) { - elem = $('<p id="' + options.id + '" class="footerNotification"></p>').appendTo(parentElem); - } - - var onclick = removeOnHide ? "$(\"#" + options.id + "\").remove();" : "$(\"#" + options.id + "\").hide();"; - - if (options.allowHide !== false) { - options.html += "<span style='margin-left: 1em;'><button type='button' onclick='" + onclick + "' data-icon='delete' data-iconpos='notext' data-mini='true' data-inline='true' data-theme='a'>Hide</button></span>"; - } - - if (options.forceShow) { - elem.show(); - } - - elem.html(options.html).trigger('create'); - - if (options.timeout) { - - setTimeout(function () { - - if (removeOnHide) { - elem.remove(); - } else { - elem.hide(); - } - - }, options.timeout); - } - }, - - getConfigurationPageUrl: function (name) { - return "ConfigurationPage?name=" + encodeURIComponent(name); - }, - - navigate: function (url, preserveQueryString) { - - var queryString = window.location.search; - if (preserveQueryString && queryString) { - url += queryString; - } - $.mobile.changePage(url); - }, - - showLoadingMsg: function () { - $.mobile.showPageLoadingMsg(); - }, - - hideLoadingMsg: function () { - $.mobile.hidePageLoadingMsg(); - }, - - processPluginConfigurationUpdateResult: function () { - - Dashboard.hideLoadingMsg(); - - Dashboard.alert("Settings saved."); - }, - - defaultErrorMessage: "There was an error processing the request.", - - processServerConfigurationUpdateResult: function (result) { - - Dashboard.hideLoadingMsg(); - - Dashboard.alert("Settings saved."); - }, - - confirm: function (message, title, callback) { - - $('#confirmFlyout').popup("close").remove(); - - var html = '<div data-role="popup" id="confirmFlyout" style="max-width:500px;" class="ui-corner-all">'; - - html += '<div class="ui-corner-top ui-bar-a" style="text-align:center;">'; - html += '<h3>' + title + '</h3>'; - html += '</div>'; - - html += '<div data-role="content" class="ui-corner-bottom ui-content">'; - - html += '<div style="padding: 1em .25em;margin: 0;">'; - html += message; - html += '</div>'; - - html += '<p><button type="button" data-icon="ok" onclick="$(\'#confirmFlyout\')[0].confirm=true;$(\'#confirmFlyout\').popup(\'close\');" data-theme="b">Ok</button></p>'; - html += '<p><button type="button" data-icon="delete" onclick="$(\'#confirmFlyout\').popup(\'close\');" data-theme="a">Cancel</button></p>'; - html += '</div>'; - - html += '</div>'; - - $(document.body).append(html); - - $('#confirmFlyout').popup().trigger('create').popup("open").on("popupafterclose", function () { - - if (callback) { - callback(this.confirm == true); - } - - $(this).off("popupafterclose").remove(); - }); - }, - - refreshSystemInfoFromServer: function () { - ApiClient.getSystemInfo().done(function (info) { - - Dashboard.updateSystemInfo(info); - }); - }, - - restartServer: function () { - - Dashboard.suppressAjaxErrors = true; - Dashboard.showLoadingMsg(); - - ApiClient.performPendingRestart().done(function () { - - setTimeout(function () { - Dashboard.reloadPageWhenServerAvailable(); - }, 500); - - }).fail(function () { - Dashboard.suppressAjaxErrors = false; - }); - }, - - reloadPageWhenServerAvailable: function (retryCount) { - - ApiClient.getSystemInfo().done(function () { - Dashboard.reloadPage(); - - }).fail(function () { - setTimeout(function () { - - retryCount = retryCount || 0; - retryCount++; - - if (retryCount < 10) { - Dashboard.reloadPageWhenServerAvailable(retryCount); - } else { - Dashboard.suppressAjaxErrors = false; - } - }, 500); - }); - }, - - getPosterViewHtml: function (options) { - - var html = ""; - - for (var i = 0, length = options.items.length; i < length; i++) { - var item = options.items[i]; - - var hasPrimaryImage = item.ImageTags && item.ImageTags.Primary; - - var href = item.IsFolder ? "#" : "itemDetails.html?id=" + item.Id; - - html += "<div class='posterViewItem'><a href='" + href + "'>"; - - if (options.preferBackdrop && item.BackdropImageTags && item.BackdropImageTags.length) { - html += "<img src='" + ApiClient.getImageUrl(item.Id, { - type: "Backdrop", - height: 198, - width: 352, - tag: item.BackdropImageTags[0] - }) + "' />"; - } else if (hasPrimaryImage) { - html += "<img src='" + ApiClient.getImageUrl(item.Id, { - type: "Primary", - height: 300, - tag: item.ImageTags.Primary - }) + "' />"; - } - else if (item.BackdropImageTags && item.BackdropImageTags.length) { - html += "<img src='" + ApiClient.getImageUrl(item.Id, { - type: "Backdrop", - height: 198, - width: 352, - tag: item.BackdropImageTags[0] - }) + "' />"; - } else { - html += "<img style='background:" + Dashboard.getRandomMetroColor() + ";' src='css/images/defaultCollectionImage.png' />"; - } - - if (options.showTitle || !hasPrimaryImage || (item.Type !== 'Movie' && item.Type !== 'Series' && item.Type !== 'Season')) { - html += "<div class='posterViewItemText'>"; - html += "<div>" + item.Name + "</div>"; - html += "</div>" - } - - html += "</a></div>"; - } - - return html; - }, - - showUserFlyout: function () { - - Dashboard.getCurrentUser().done(function (user) { - - var html = '<div data-role="popup" id="userFlyout" style="max-width:400px;margin-top:50px;margin-right:20px;" class="ui-corner-all" data-position-to=".btnCurrentUser:visible">'; - - html += '<a href="#" data-rel="back" data-role="button" data-theme="a" data-icon="delete" data-iconpos="notext" class="ui-btn-right">Close</a>'; - - html += '<div class="ui-corner-top ui-bar-a" style="text-align:center;">'; - html += '<h3>' + user.Name + '</h3>'; - html += '</div>'; - - html += '<div data-role="content" class="ui-corner-bottom ui-content">'; - - html += '<p style="text-align:center;">'; - - var imageUrl = user.PrimaryImageTag ? ApiClient.getUserImageUrl(user.Id, { - - height: 400, - tag: user.PrimaryImageTag, - type: "Primary" - - }) : "css/images/userFlyoutDefault.png"; - - html += '<img style="max-height:125px;max-width:200px;" src="' + imageUrl + '" />'; - html += '</p>'; - - html += '<p><button type="button" onclick="Dashboard.navigate(\'editUser.html?userId=' + user.Id + '\');" data-icon="user">View Profile</button></p>'; - html += '<p><button type="button" onclick="Dashboard.logout();" data-icon="lock">Sign Out</button></p>'; - html += '</div>'; - - html += '</div>'; - - $(document.body).append(html); - - $('#userFlyout').popup().trigger('create').popup("open").on("popupafterclose", function () { - - $(this).off("popupafterclose").remove(); - }); - }); - }, - - selectDirectory: function (options) { - - options = options || {}; - - options.header = options.header || "Select Media Path"; - - var html = '<div data-role="popup" id="popupDirectoryPicker" class="ui-corner-all popup">'; - - html += '<div class="ui-corner-top ui-bar-a" style="text-align: center; padding: 0 20px;">'; - html += '<h3>' + options.header + '</h3>'; - html += '</div>'; - - html += '<div data-role="content" class="ui-corner-bottom ui-content">'; - html += '<form>'; - html += '<p>Browse to or enter the folder containing the media. Network paths (UNC) are recommended for optimal playback performance.</p>'; - - html += '<div data-role="fieldcontain" style="margin:0;">'; - html += '<label for="txtDirectoryPickerPath">Current Folder:</label>'; - html += '<input id="txtDirectoryPickerPath" name="txtDirectoryPickerPath" type="text" onchange="Dashboard.refreshDirectoryBrowser(this.value);" required="required" style="font-weight:bold;" />'; - html += '</div>'; - - html += '<div style="height: 300px; overflow-y: auto;">'; - html += '<ul id="ulDirectoryPickerList" data-role="listview" data-inset="true" data-auto-enhanced="false"></ul>'; - html += '</div>'; - - html += '<p>'; - html += '<button type="submit" data-theme="b" data-icon="ok">OK</button>'; - html += '<button type="button" data-icon="delete" onclick="$(this).parents(\'.popup\').popup(\'close\');">Cancel</button>'; - html += '</p>'; - html += '</form>'; - html += '</div>'; - html += '</div>'; - - $($.mobile.activePage).append(html); - - var popup = $('#popupDirectoryPicker').popup().trigger('create').popup("open").on("popupafterclose", function () { - - $('form', this).off("submit"); - $(this).off("click").off("popupafterclose").remove(); - - }).on("click", ".lnkDirectory", function () { - - var path = this.getAttribute('data-path'); - - Dashboard.refreshDirectoryBrowser(path); - }); - - var txtCurrentPath = $('#txtDirectoryPickerPath', popup); - - if (options.path) { - txtCurrentPath.val(options.path); - } - - $('form', popup).on('submit', function () { - - if (options.callback) { - options.callback($('#txtDirectoryPickerPath', this).val()); - } - - return false; - }); - - Dashboard.refreshDirectoryBrowser(txtCurrentPath.val()); - }, - - refreshDirectoryBrowser: function (path) { - var page = $.mobile.activePage; - - Dashboard.showLoadingMsg(); - - var promise; - - if (path === "Network") { - promise = ApiClient.getNetworkComputers(); - } - else if (path) { - promise = ApiClient.getDirectoryContents(path, { includeDirectories: true }); - } else { - promise = ApiClient.getDrives(); - } - - promise.done(function (folders) { - - $('#txtDirectoryPickerPath', page).val(path || ""); - - var html = ''; - - if (path) { - - var parentPath = path; - - if (parentPath.endsWith('\\')) { - parentPath = parentPath.substring(0, parentPath.length - 1); - } - - var lastIndex = parentPath.lastIndexOf('\\'); - parentPath = lastIndex == -1 ? "" : parentPath.substring(0, lastIndex); - - if (parentPath.endsWith(':')) { - parentPath += "\\"; - } - - if (parentPath == '\\') { - parentPath = "Network"; - } - - html += '<li><a class="lnkDirectory" data-path="' + parentPath + '" href="#">..</a></li>'; - } - - for (var i = 0, length = folders.length; i < length; i++) { - - var folder = folders[i]; - - html += '<li><a class="lnkDirectory" data-path="' + folder.Path + '" href="#">' + folder.Name + '</a></li>'; - } - - if (!path) { - html += '<li><a class="lnkDirectory" data-path="Network" href="#">Network</a></li>'; - } - - $('#ulDirectoryPickerList', page).html(html).listview('refresh'); - - Dashboard.hideLoadingMsg(); - - }).fail(function () { - - $('#txtDirectoryPickerPath', page).val(""); - $('#ulDirectoryPickerList', page).html('').listview('refresh'); - - Dashboard.hideLoadingMsg(); - }); - }, - - getPluginSecurityInfo: function () { - - if (!Dashboard.getPluginSecurityInfoPromise) { - Dashboard.getPluginSecurityInfoPromise = ApiClient.getPluginSecurityInfo(); - } - - return Dashboard.getPluginSecurityInfoPromise; - }, - - resetPluginSecurityInfo: function () { - Dashboard.getPluginSecurityInfoPromise = null; - }, - - ensureHeader: function (page) { - - if (!$('.header', page).length) { - - var isLoggedIn = Dashboard.getCurrentUserId(); - - if (isLoggedIn) { - - var promise1 = Dashboard.getCurrentUser(); - var promise2 = Dashboard.getPluginSecurityInfo(); - - $.when(promise1, promise2).done(function (response1, response2) { - - Dashboard.renderHeader(page, response1[0], response2[0]); - }); - - } else { - - Dashboard.renderHeader(page); - } - } - }, - - renderHeader: function (page, user, pluginSecurityInfo) { - - var headerHtml = ''; - headerHtml += '<div class="header">'; - - var isLibraryPage = page.hasClass('libraryPage'); - - headerHtml += '<a class="logo" href="index.html">'; - - if (page.hasClass('standalonePage')) { - - headerHtml += '<img class="imgLogo" src="css/images/mblogoblackfull.png" />'; - } - else if (isLibraryPage) { - - headerHtml += '<img class="imgLogo" src="css/images/mblogowhitefull.png" />'; - } - headerHtml += '</a>'; - - var imageColor = isLibraryPage ? "White" : "Black"; - - if (user && !page.hasClass('wizardPage')) { - headerHtml += '<div class="headerButtons">'; - headerHtml += '<a class="imageLink btnCurrentUser" href="#" onclick="Dashboard.showUserFlyout();"><span class="currentUsername">' + user.Name + '</span>'; - - if (user.PrimaryImageTag) { - - var url = ApiClient.getUserImageUrl(user.Id, { - width: 225, - tag: user.PrimaryImageTag, - type: "Primary" - }); - - headerHtml += '<img src="' + url + '" />'; - } else { - headerHtml += '<img src="css/images/currentUserDefault' + imageColor + '.png" />'; - } - headerHtml += '</a>'; - - if (pluginSecurityInfo.IsMBSupporter) { - headerHtml += '<a class="imageLink" href="supporter.html"><img src="css/images/suppbadge.png" /></a>'; - } - if (user.Configuration.IsAdministrator) { - headerHtml += '<a class="imageLink" href="dashboard.html"><img src="css/images/tools' + imageColor + '.png" /></a>'; - } - - headerHtml += '</div>'; - } - - headerHtml += '</div>'; - page.prepend(headerHtml); - }, - - ensureToolsMenu: function (page) { - - if (!page.hasClass('type-interior')) { - return; - } - - var sidebar = $('.toolsSidebar', page); - - if (!sidebar.length) { - - var html = '<div class="content-secondary ui-bar-a toolsSidebar">'; - - html += '<h1><a href="index.html" class="imageLink" style="margin-left: 0;margin-right: 20px;"> <img src="css/images/home.png" /></a>Tools</h1>'; - - html += '<div class="sidebarLinks">'; - - var links = Dashboard.getToolsMenuLinks(page); - - for (var i = 0, length = links.length; i < length; i++) { - - var link = links[i]; - - if (link.href) { - - if (link.selected) { - html += '<a class="selectedSidebarLink" href="' + link.href + '">' + link.name + '</a>'; - } else { - html += '<a href="' + link.href + '">' + link.name + '</a>'; - } - - } - } - - // collapsible - html += '</div>'; - - // content-secondary - html += '</div>'; - - $(page).append(html); - } - }, - - getToolsMenuLinks: function (page) { - - var pageElem = page[0]; - - return [{ - name: "Dashboard", - href: "dashboard.html", - selected: pageElem.id == "dashboardPage" - }, { - name: "Media Library", - href: "library.html", - selected: pageElem.id == "mediaLibraryPage" - }, { - name: "Metadata", - href: "metadata.html", - selected: pageElem.id == "metadataConfigurationPage" || pageElem.id == "advancedMetadataConfigurationPage" || pageElem.id == "metadataImagesConfigurationPage" - }, { - name: "Plugins", - href: "plugins.html", - selected: page.hasClass("pluginConfigurationPage") - }, { - name: "User Profiles", - href: "userProfiles.html", - selected: page.hasClass("userProfilesConfigurationPage") - }, { - name: "Display Settings", - href: "uiSettings.html", - selected: pageElem.id == "displaySettingsPage" - }, { - name: "Advanced", - href: "advanced.html", - selected: pageElem.id == "advancedConfigurationPage" - }, { - name: "Scheduled Tasks", - href: "scheduledTasks.html", - selected: pageElem.id == "scheduledTasksPage" || pageElem.id == "scheduledTaskPage" - }, { - name: "Help", - href: "support.html", - selected: pageElem.id == "supportPage" || pageElem.id == "logPage" || pageElem.id == "supporterPage" || pageElem.id == "supporterKeyPage" - }]; - - }, - - ensureWebSocket: function (systemInfo) { - - if (!("WebSocket" in window)) { - // Not supported by the browser - return; - } - - if (Dashboard.webSocket) { - if (Dashboard.webSocket.readyState === WebSocket.OPEN || Dashboard.webSocket.readyState === WebSocket.CONNECTING) { - return; - } - } - - systemInfo = systemInfo || Dashboard.lastSystemInfo; - - var url = "ws://" + ApiClient.serverHostName + ":" + systemInfo.WebSocketPortNumber + "/mediabrowser"; - - var ws = new WebSocket(url); - - ws.onmessage = Dashboard.onWebSocketMessage; - - ws.onopen = function () { - setTimeout(function () { - $(document).trigger("websocketopen"); - }, 500); - }; - ws.onerror = function () { - setTimeout(function () { - $(document).trigger("websocketerror"); - }, 0); - }; - ws.onclose = function () { - setTimeout(function () { - $(document).trigger("websocketclose"); - }, 0); - }; - - Dashboard.webSocket = ws; - }, - - resetWebSocketPingInterval: function () { - - if (Dashboard.pingWebSocketInterval) { - clearInterval(Dashboard.pingWebSocketInterval); - Dashboard.pingWebSocketInterval = null; - } - Dashboard.pingWebSocketInterval = setInterval(Dashboard.pingWebSocket, 30000); - }, - - pingWebSocket: function () { - - // Send a ping to the server every so often to try and keep the connection alive - if (Dashboard.isWebSocketOpen()) { - Dashboard.sendWebSocketMessage("ping"); - } - - }, - - onWebSocketMessage: function (msg) { - - msg = JSON.parse(msg.data); - - if (msg.MessageType === "LibraryChanged") { - Dashboard.processLibraryUpdateNotification(msg.Data); - } - else if (msg.MessageType === "UserDeleted") { - Dashboard.validateCurrentUser(); - } - else if (msg.MessageType === "SystemInfo") { - Dashboard.updateSystemInfo(msg.Data); - } - else if (msg.MessageType === "HasPendingRestartChanged") { - Dashboard.updateSystemInfo(msg.Data); - } - else if (msg.MessageType === "UserUpdated") { - Dashboard.validateCurrentUser(); - - var user = msg.Data; - - if (user.Id == Dashboard.getCurrentUserId()) { - - $('.currentUsername').html(user.Name); - } - } - else if (msg.MessageType === "PackageInstallationCompleted") { - Dashboard.showPackageInstallNotification(msg.Data, "completed"); - Dashboard.refreshSystemInfoFromServer(); - } - else if (msg.MessageType === "PackageInstallationFailed") { - Dashboard.showPackageInstallNotification(msg.Data, "failed"); - Dashboard.refreshSystemInfoFromServer(); - } - else if (msg.MessageType === "PackageInstallationCancelled") { - Dashboard.showPackageInstallNotification(msg.Data, "cancelled"); - Dashboard.refreshSystemInfoFromServer(); - } - else if (msg.MessageType === "PackageInstalling") { - Dashboard.showPackageInstallNotification(msg.Data, "progress"); - Dashboard.refreshSystemInfoFromServer(); - } - else if (msg.MessageType === "ScheduledTaskEndExecute") { - - Dashboard.showTaskCompletionNotification(msg.Data); - } - - $(document).trigger("websocketmessage", [msg]); - }, - - sendWebSocketMessage: function (name, data) { - - var msg = { MessageType: name }; - - if (data) { - msg.Data = data; - } - - msg = JSON.stringify(msg); - - Dashboard.webSocket.send(msg); - }, - - isWebSocketOpen: function () { - return Dashboard.webSocket && Dashboard.webSocket.readyState === WebSocket.OPEN; - }, - - showTaskCompletionNotification: function (result) { - - var html = ''; - - if (result.Status == "Completed") { - html += '<img src="css/images/notifications/done.png" class="notificationIcon" />'; - return; - } - else if (result.Status == "Cancelled") { - html += '<img src="css/images/notifications/info.png" class="notificationIcon" />'; - return; - } - else { - html += '<img src="css/images/notifications/error.png" class="notificationIcon" />'; - } - - html += '<span>'; - html += result.Name + " " + result.Status; - html += '</span>'; - - var timeout = 0; - - if (result.Status == 'Cancelled') { - timeout = 2000; - } - - Dashboard.showFooterNotification({ html: html, id: result.Id, forceShow: true, timeout: timeout }); - }, - - showPackageInstallNotification: function (installation, status) { - - var html = ''; - - if (status == 'completed') { - html += '<img src="css/images/notifications/done.png" class="notificationIcon" />'; - } - else if (status == 'cancelled') { - html += '<img src="css/images/notifications/info.png" class="notificationIcon" />'; - } - else if (status == 'failed') { - html += '<img src="css/images/notifications/error.png" class="notificationIcon" />'; - } - else if (status == 'progress') { - html += '<img src="css/images/notifications/download.png" class="notificationIcon" />'; - } - - html += '<span style="margin-right: 1em;">'; - - if (status == 'completed') { - html += installation.Name + ' ' + installation.Version + ' installation completed'; - } - else if (status == 'cancelled') { - html += installation.Name + ' ' + installation.Version + ' installation was cancelled'; - } - else if (status == 'failed') { - html += installation.Name + ' ' + installation.Version + ' installation failed'; - } - else if (status == 'progress') { - html += 'Installing ' + installation.Name + ' ' + installation.Version; - } - - html += '</span>'; - - if (status == 'progress') { - - var percentComplete = Math.round(installation.PercentComplete || 0); - - html += '<progress style="margin-right: 1em;" max="100" value="' + percentComplete + '" title="' + percentComplete + '%">'; - html += '' + percentComplete + '%'; - html += '</progress>'; - - if (percentComplete < 100) { - var btnId = "btnCancel" + installation.Id; - html += '<button id="' + btnId + '" type="button" data-icon="delete" onclick="$(\'' + btnId + '\').button(\'disable\');Dashboard.cancelInstallation(\'' + installation.Id + '\');" data-theme="b" data-inline="true" data-mini="true">Cancel</button>'; - } - } - - var timeout = 0; - - if (status == 'cancelled') { - timeout = 2000; - } - - var forceShow = status != "progress"; - var allowHide = status != "progress" && status != 'cancelled'; - - Dashboard.showFooterNotification({ html: html, id: installation.Id, timeout: timeout, forceShow: forceShow, allowHide: allowHide }); - }, - - processLibraryUpdateNotification: function (data) { - - var newItems = data.ItemsAdded.filter(function (a) { - return !a.IsFolder; - }); - - if (!Dashboard.newItems) { - Dashboard.newItems = []; - } - - for (var i = 0, length = newItems.length ; i < length; i++) { - - Dashboard.newItems.push(newItems[i]); - } - - if (Dashboard.newItemTimeout) { - clearTimeout(Dashboard.newItemTimeout); - } - - Dashboard.newItemTimeout = setTimeout(Dashboard.onNewItemTimerStopped, 60000); - }, - - onNewItemTimerStopped: function () { - - var newItems = Dashboard.newItems; - - newItems = newItems.sort(function (a, b) { - - if (a.PrimaryImageTag && b.PrimaryImageTag) { - return 0; - } - - if (a.PrimaryImageTag) { - return -1; - } - - return 1; - }); - - Dashboard.newItems = []; - Dashboard.newItemTimeout = null; - - // Show at most 3 notifications - for (var i = 0, length = Math.min(newItems.length, 3) ; i < length; i++) { - - var item = newItems[i]; - - var data = { - title: "New " + item.Type, - body: item.Name, - timeout: 6000 - }; - - if (item.PrimaryImageTag) { - data.icon = ApiClient.getImageUrl(item.Id, { - width: 100, - tag: item.PrimaryImageTag - }); - } - - WebNotifications.show(data); - } - }, - - ensurePageTitle: function (page) { - - if (!page.hasClass('type-interior')) { - return; - } - - var pageElem = page[0]; - - if (pageElem.hasPageTitle) { - return; - } - - var parent = $('.content-primary', page); - - if (!parent.length) { - parent = $('.ui-content', page)[0]; - } - - $(parent).prepend("<h2 class='pageTitle'>" + (document.title || " ") + "</h2>"); - - pageElem.hasPageTitle = true; - }, - - setPageTitle: function (title) { - - $('.pageTitle', $.mobile.activePage).html(title); - - if (title) { - document.title = title; - } - }, - - metroColors: ["#6FBD45", "#4BB3DD", "#4164A5", "#E12026", "#800080", "#E1B222", "#008040", "#0094FF", "#FF00C7", "#FF870F", "#7F0037"], - - getRandomMetroColor: function () { - - var index = Math.floor(Math.random() * (Dashboard.metroColors.length - 1)); - - return Dashboard.metroColors[index]; - } - -}; - -$(function () { - - var footerHtml = '<div id="footer" class="ui-bar-a">'; - - footerHtml += '<div id="nowPlayingBar" style="display:none;">'; - - footerHtml += '<button id="previousTrackButton" class="imageButton mediaButton" title="Previous Track" type="button"><img src="css/images/media/previousTrack.png" /></button>'; - - footerHtml += '<button id="stopButton" class="imageButton mediaButton" title="Stop" type="button" onclick="MediaPlayer.stop();"><img src="css/images/media/stop.png" /></button>'; - - footerHtml += '<button id="nextTrackButton" class="imageButton mediaButton" title="Next Track" type="button"><img src="css/images/media/nextTrack.png" /></button>'; - - footerHtml += '<div id="mediaElement"></div>'; - - footerHtml += '</div>'; - - footerHtml += '<div id="footerNotifications"></div>'; - - footerHtml += '</div>'; - - - $(document.body).append(footerHtml); -}); - -Dashboard.jQueryMobileInit(); - -$(document).on('pagebeforeshow', ".page", function () { - - Dashboard.refreshSystemInfoFromServer(); - - var page = $(this); - - Dashboard.ensureHeader(page); - Dashboard.ensurePageTitle(page); - -}).on('pageinit', ".page", function () { - - var page = $(this); - var hasLogin = Dashboard.getCurrentUserId(); - - if (!hasLogin) { - - if (this.id !== "loginPage" && !page.hasClass('wizardPage')) { - - Dashboard.logout(); - } - } - - else { - - Dashboard.getCurrentUser().done(function (user) { - - if (user.Configuration.IsAdministrator) { - Dashboard.ensureToolsMenu(page); - } - }); - } +$.ajaxSetup({
+ crossDomain: true,
+
+ error: function (event, jqxhr, settings, exception) {
+ Dashboard.hideLoadingMsg();
+
+ if (!Dashboard.suppressAjaxErrors) {
+ setTimeout(function () {
+
+
+ var msg = event.getResponseHeader("X-Application-Error-Code") || Dashboard.defaultErrorMessage;
+
+ Dashboard.showError(msg);
+ }, 500);
+ }
+ }
+});
+
+$.support.cors = true;
+
+$(document).one('click', WebNotifications.requestPermission);
+
+var Dashboard = {
+ jQueryMobileInit: function () {
+
+ //$.mobile.defaultPageTransition = 'slide';
+
+ // Page
+ //$.mobile.page.prototype.options.theme = "a";
+ //$.mobile.page.prototype.options.headerTheme = "a";
+ //$.mobile.page.prototype.options.contentTheme = "a";
+ //$.mobile.page.prototype.options.footerTheme = "a";
+
+ //$.mobile.button.prototype.options.theme = "c";
+ $.mobile.listview.prototype.options.dividerTheme = "b";
+
+ $.mobile.popup.prototype.options.theme = "c";
+ //$.mobile.collapsible.prototype.options.contentTheme = "a";
+ },
+
+ getCurrentUser: function () {
+
+ if (!Dashboard.getUserPromise) {
+ Dashboard.getUserPromise = ApiClient.getUser(Dashboard.getCurrentUserId()).fail(Dashboard.logout);
+ }
+
+ return Dashboard.getUserPromise;
+ },
+
+ validateCurrentUser: function () {
+ Dashboard.getUserPromise = null;
+
+ if (Dashboard.getCurrentUserId()) {
+ Dashboard.getCurrentUser();
+ }
+
+ // Re-render the header
+ $('.header').remove();
+ Dashboard.ensureHeader($.mobile.activePage);
+ },
+
+ getCurrentUserId: function () {
+
+ var userId = localStorage.getItem("userId");
+
+ if (!userId) {
+ var autoLoginUserId = getParameterByName('u');
+
+ if (autoLoginUserId) {
+ userId = autoLoginUserId;
+ localStorage.setItem("userId", userId);
+ }
+ }
+
+ return userId;
+ },
+
+ setCurrentUser: function (userId) {
+ localStorage.setItem("userId", userId);
+ Dashboard.getUserPromise = null;
+ },
+
+ logout: function () {
+ localStorage.removeItem("userId");
+ Dashboard.getUserPromise = null;
+ window.location = "login.html";
+ },
+
+ showError: function (message) {
+
+ $.mobile.loading('show', {
+ theme: "e",
+ text: message,
+ textonly: true,
+ textVisible: true
+ });
+
+ setTimeout(function () {
+ $.mobile.loading('hide');
+ }, 2000);
+ },
+
+ alert: function (message) {
+
+ $.mobile.loading('show', {
+ theme: "e",
+ text: message,
+ textonly: true,
+ textVisible: true
+ });
+
+ setTimeout(function () {
+ $.mobile.loading('hide');
+ }, 2000);
+ },
+
+ updateSystemInfo: function (info) {
+
+ var isFirstLoad = !Dashboard.lastSystemInfo;
+
+ Dashboard.lastSystemInfo = info;
+ Dashboard.ensureWebSocket(info);
+
+ if (!Dashboard.initialServerVersion) {
+ Dashboard.initialServerVersion = info.Version;
+ }
+
+ if (info.HasPendingRestart) {
+
+ Dashboard.hideDashboardVersionWarning();
+ Dashboard.showServerRestartWarning();
+
+ } else {
+
+ Dashboard.hideServerRestartWarning();
+
+ if (Dashboard.initialServerVersion != info.Version) {
+
+ Dashboard.showDashboardVersionWarning();
+ }
+ }
+
+ if (isFirstLoad) {
+ Dashboard.showFailedAssemblies(info.FailedPluginAssemblies);
+ }
+
+ Dashboard.showInProgressInstallations(info.InProgressInstallations);
+ },
+
+ showFailedAssemblies: function (failedAssemblies) {
+
+ for (var i = 0, length = failedAssemblies.length; i < length; i++) {
+
+ var assembly = failedAssemblies[i];
+
+ var html = '<img src="css/images/notifications/error.png" class="notificationIcon" />';
+
+ var index = assembly.lastIndexOf('\\');
+
+ if (index != -1) {
+ assembly = assembly.substring(index + 1);
+ }
+
+ html += '<span>';
+ html += assembly + " failed to load.";
+ html += '</span>';
+
+ Dashboard.showFooterNotification({ html: html });
+
+ }
+ },
+
+ showInProgressInstallations: function (installations) {
+
+ installations = installations || [];
+
+ for (var i = 0, length = installations.length; i < length; i++) {
+
+ var installation = installations[i];
+
+ var percent = installation.PercentComplete || 0;
+
+ if (percent < 100) {
+ Dashboard.showPackageInstallNotification(installation, "progress");
+ }
+ }
+
+ if (installations.length) {
+
+ Dashboard.ensureInstallRefreshInterval();
+ } else {
+ Dashboard.stopInstallRefreshInterval();
+ }
+ },
+
+ ensureInstallRefreshInterval: function () {
+
+ if (!Dashboard.installRefreshInterval) {
+
+ if (Dashboard.isWebSocketOpen()) {
+ Dashboard.sendWebSocketMessage("SystemInfoStart", "0,350");
+ }
+ Dashboard.installRefreshInterval = 1;
+ }
+ },
+
+ stopInstallRefreshInterval: function () {
+
+ if (Dashboard.installRefreshInterval) {
+ if (Dashboard.isWebSocketOpen()) {
+ Dashboard.sendWebSocketMessage("SystemInfoStop");
+ }
+ Dashboard.installRefreshInterval = null;
+ }
+ },
+
+ cancelInstallation: function (id) {
+
+ ApiClient.cancelPackageInstallation(id).always(Dashboard.refreshSystemInfoFromServer);
+
+ },
+
+ showServerRestartWarning: function () {
+
+ var html = '<span style="margin-right: 1em;">Please restart Media Browser Server to finish updating.</span>';
+ html += '<button type="button" data-icon="refresh" onclick="Dashboard.restartServer();" data-theme="b" data-inline="true" data-mini="true">Restart Server</button>';
+
+ Dashboard.showFooterNotification({ id: "serverRestartWarning", html: html, forceShow: true, allowHide: false });
+ },
+
+ hideServerRestartWarning: function () {
+
+ $('#serverRestartWarning').remove();
+ },
+
+ showDashboardVersionWarning: function () {
+
+ var html = '<span style="margin-right: 1em;">Please refresh this page to receive new updates from the server.</span>';
+ html += '<button type="button" data-icon="refresh" onclick="Dashboard.reloadPage();" data-theme="b" data-inline="true" data-mini="true">Refresh Page</button>';
+
+ Dashboard.showFooterNotification({ id: "dashboardVersionWarning", html: html, forceShow: true, allowHide: false });
+ },
+
+ reloadPage: function () {
+
+ window.location.href = window.location.href;
+ },
+
+ hideDashboardVersionWarning: function () {
+
+ $('#dashboardVersionWarning').remove();
+ },
+
+ showFooterNotification: function (options) {
+
+ var removeOnHide = !options.id;
+
+ options.id = options.id || "notification" + new Date().getTime() + parseInt(Math.random());
+
+ var parentElem = $('#footerNotifications');
+
+ var elem = $('#' + options.id, parentElem);
+
+ if (!elem.length) {
+ elem = $('<p id="' + options.id + '" class="footerNotification"></p>').appendTo(parentElem);
+ }
+
+ var onclick = removeOnHide ? "$(\"#" + options.id + "\").remove();" : "$(\"#" + options.id + "\").hide();";
+
+ if (options.allowHide !== false) {
+ options.html += "<span style='margin-left: 1em;'><button type='button' onclick='" + onclick + "' data-icon='delete' data-iconpos='notext' data-mini='true' data-inline='true' data-theme='a'>Hide</button></span>";
+ }
+
+ if (options.forceShow) {
+ elem.show();
+ }
+
+ elem.html(options.html).trigger('create');
+
+ if (options.timeout) {
+
+ setTimeout(function () {
+
+ if (removeOnHide) {
+ elem.remove();
+ } else {
+ elem.hide();
+ }
+
+ }, options.timeout);
+ }
+ },
+
+ getConfigurationPageUrl: function (name) {
+ return "ConfigurationPage?name=" + encodeURIComponent(name);
+ },
+
+ navigate: function (url, preserveQueryString) {
+
+ var queryString = window.location.search;
+ if (preserveQueryString && queryString) {
+ url += queryString;
+ }
+ $.mobile.changePage(url);
+ },
+
+ showLoadingMsg: function () {
+ $.mobile.showPageLoadingMsg();
+ },
+
+ hideLoadingMsg: function () {
+ $.mobile.hidePageLoadingMsg();
+ },
+
+ processPluginConfigurationUpdateResult: function () {
+
+ Dashboard.hideLoadingMsg();
+
+ Dashboard.alert("Settings saved.");
+ },
+
+ defaultErrorMessage: "There was an error processing the request.",
+
+ processServerConfigurationUpdateResult: function (result) {
+
+ Dashboard.hideLoadingMsg();
+
+ Dashboard.alert("Settings saved.");
+ },
+
+ confirm: function (message, title, callback) {
+
+ $('#confirmFlyout').popup("close").remove();
+
+ var html = '<div data-role="popup" id="confirmFlyout" style="max-width:500px;" class="ui-corner-all">';
+
+ html += '<div class="ui-corner-top ui-bar-a" style="text-align:center;">';
+ html += '<h3>' + title + '</h3>';
+ html += '</div>';
+
+ html += '<div data-role="content" class="ui-corner-bottom ui-content">';
+
+ html += '<div style="padding: 1em .25em;margin: 0;">';
+ html += message;
+ html += '</div>';
+
+ html += '<p><button type="button" data-icon="ok" onclick="$(\'#confirmFlyout\')[0].confirm=true;$(\'#confirmFlyout\').popup(\'close\');" data-theme="b">Ok</button></p>';
+ html += '<p><button type="button" data-icon="delete" onclick="$(\'#confirmFlyout\').popup(\'close\');" data-theme="a">Cancel</button></p>';
+ html += '</div>';
+
+ html += '</div>';
+
+ $(document.body).append(html);
+
+ $('#confirmFlyout').popup().trigger('create').popup("open").on("popupafterclose", function () {
+
+ if (callback) {
+ callback(this.confirm == true);
+ }
+
+ $(this).off("popupafterclose").remove();
+ });
+ },
+
+ refreshSystemInfoFromServer: function () {
+ ApiClient.getSystemInfo().done(function (info) {
+
+ Dashboard.updateSystemInfo(info);
+ });
+ },
+
+ restartServer: function () {
+
+ Dashboard.suppressAjaxErrors = true;
+ Dashboard.showLoadingMsg();
+
+ ApiClient.performPendingRestart().done(function () {
+
+ setTimeout(function () {
+ Dashboard.reloadPageWhenServerAvailable();
+ }, 500);
+
+ }).fail(function () {
+ Dashboard.suppressAjaxErrors = false;
+ });
+ },
+
+ reloadPageWhenServerAvailable: function (retryCount) {
+
+ ApiClient.getSystemInfo().done(function () {
+ Dashboard.reloadPage();
+
+ }).fail(function () {
+ setTimeout(function () {
+
+ retryCount = retryCount || 0;
+ retryCount++;
+
+ if (retryCount < 10) {
+ Dashboard.reloadPageWhenServerAvailable(retryCount);
+ } else {
+ Dashboard.suppressAjaxErrors = false;
+ }
+ }, 500);
+ });
+ },
+
+ getPosterViewHtml: function (options) {
+
+ var html = "";
+
+ for (var i = 0, length = options.items.length; i < length; i++) {
+ var item = options.items[i];
+
+ var hasPrimaryImage = item.ImageTags && item.ImageTags.Primary;
+
+ var href = item.IsFolder ? "#" : "itemDetails.html?id=" + item.Id;
+
+ html += "<div class='posterViewItem'><a href='" + href + "'>";
+
+ if (options.preferBackdrop && item.BackdropImageTags && item.BackdropImageTags.length) {
+ html += "<img src='" + ApiClient.getImageUrl(item.Id, {
+ type: "Backdrop",
+ height: 198,
+ width: 352,
+ tag: item.BackdropImageTags[0]
+ }) + "' />";
+ } else if (hasPrimaryImage) {
+ html += "<img src='" + ApiClient.getImageUrl(item.Id, {
+ type: "Primary",
+ height: 300,
+ tag: item.ImageTags.Primary
+ }) + "' />";
+ }
+ else if (item.BackdropImageTags && item.BackdropImageTags.length) {
+ html += "<img src='" + ApiClient.getImageUrl(item.Id, {
+ type: "Backdrop",
+ height: 198,
+ width: 352,
+ tag: item.BackdropImageTags[0]
+ }) + "' />";
+ } else {
+ html += "<img style='background:" + Dashboard.getRandomMetroColor() + ";' src='css/images/defaultCollectionImage.png' />";
+ }
+
+ if (options.showTitle || !hasPrimaryImage || (item.Type !== 'Movie' && item.Type !== 'Series' && item.Type !== 'Season')) {
+ html += "<div class='posterViewItemText'>";
+ html += "<div>" + item.Name + "</div>";
+ html += "</div>"
+ }
+
+ html += "</a></div>";
+ }
+
+ return html;
+ },
+
+ showUserFlyout: function () {
+
+ Dashboard.getCurrentUser().done(function (user) {
+
+ var html = '<div data-role="popup" id="userFlyout" style="max-width:400px;margin-top:50px;margin-right:20px;" class="ui-corner-all" data-position-to=".btnCurrentUser:visible">';
+
+ html += '<a href="#" data-rel="back" data-role="button" data-theme="a" data-icon="delete" data-iconpos="notext" class="ui-btn-right">Close</a>';
+
+ html += '<div class="ui-corner-top ui-bar-a" style="text-align:center;">';
+ html += '<h3>' + user.Name + '</h3>';
+ html += '</div>';
+
+ html += '<div data-role="content" class="ui-corner-bottom ui-content">';
+
+ html += '<p style="text-align:center;">';
+
+ var imageUrl = user.PrimaryImageTag ? ApiClient.getUserImageUrl(user.Id, {
+
+ height: 400,
+ tag: user.PrimaryImageTag,
+ type: "Primary"
+
+ }) : "css/images/userFlyoutDefault.png";
+
+ html += '<img style="max-height:125px;max-width:200px;" src="' + imageUrl + '" />';
+ html += '</p>';
+
+ html += '<p><button type="button" onclick="Dashboard.navigate(\'editUser.html?userId=' + user.Id + '\');" data-icon="user">View Profile</button></p>';
+ html += '<p><button type="button" onclick="Dashboard.logout();" data-icon="lock">Sign Out</button></p>';
+ html += '</div>';
+
+ html += '</div>';
+
+ $(document.body).append(html);
+
+ $('#userFlyout').popup().trigger('create').popup("open").on("popupafterclose", function () {
+
+ $(this).off("popupafterclose").remove();
+ });
+ });
+ },
+
+ selectDirectory: function (options) {
+
+ options = options || {};
+
+ options.header = options.header || "Select Media Path";
+
+ var html = '<div data-role="popup" id="popupDirectoryPicker" class="ui-corner-all popup">';
+
+ html += '<div class="ui-corner-top ui-bar-a" style="text-align: center; padding: 0 20px;">';
+ html += '<h3>' + options.header + '</h3>';
+ html += '</div>';
+
+ html += '<div data-role="content" class="ui-corner-bottom ui-content">';
+ html += '<form>';
+ html += '<p>Browse to or enter the folder containing the media. Network paths (UNC) are recommended for optimal playback performance.</p>';
+
+ html += '<div data-role="fieldcontain" style="margin:0;">';
+ html += '<label for="txtDirectoryPickerPath">Current Folder:</label>';
+ html += '<input id="txtDirectoryPickerPath" name="txtDirectoryPickerPath" type="text" onchange="Dashboard.refreshDirectoryBrowser(this.value);" required="required" style="font-weight:bold;" />';
+ html += '</div>';
+
+ html += '<div style="height: 300px; overflow-y: auto;">';
+ html += '<ul id="ulDirectoryPickerList" data-role="listview" data-inset="true" data-auto-enhanced="false"></ul>';
+ html += '</div>';
+
+ html += '<p>';
+ html += '<button type="submit" data-theme="b" data-icon="ok">OK</button>';
+ html += '<button type="button" data-icon="delete" onclick="$(this).parents(\'.popup\').popup(\'close\');">Cancel</button>';
+ html += '</p>';
+ html += '</form>';
+ html += '</div>';
+ html += '</div>';
+
+ $($.mobile.activePage).append(html);
+
+ var popup = $('#popupDirectoryPicker').popup().trigger('create').popup("open").on("popupafterclose", function () {
+
+ $('form', this).off("submit");
+ $(this).off("click").off("popupafterclose").remove();
+
+ }).on("click", ".lnkDirectory", function () {
+
+ var path = this.getAttribute('data-path');
+
+ Dashboard.refreshDirectoryBrowser(path);
+ });
+
+ var txtCurrentPath = $('#txtDirectoryPickerPath', popup);
+
+ if (options.path) {
+ txtCurrentPath.val(options.path);
+ }
+
+ $('form', popup).on('submit', function () {
+
+ if (options.callback) {
+ options.callback($('#txtDirectoryPickerPath', this).val());
+ }
+
+ return false;
+ });
+
+ Dashboard.refreshDirectoryBrowser(txtCurrentPath.val());
+ },
+
+ refreshDirectoryBrowser: function (path) {
+ var page = $.mobile.activePage;
+
+ Dashboard.showLoadingMsg();
+
+ var promise;
+
+ if (path === "Network") {
+ promise = ApiClient.getNetworkComputers();
+ }
+ else if (path) {
+ promise = ApiClient.getDirectoryContents(path, { includeDirectories: true });
+ } else {
+ promise = ApiClient.getDrives();
+ }
+
+ promise.done(function (folders) {
+
+ $('#txtDirectoryPickerPath', page).val(path || "");
+
+ var html = '';
+
+ if (path) {
+
+ var parentPath = path;
+
+ if (parentPath.endsWith('\\')) {
+ parentPath = parentPath.substring(0, parentPath.length - 1);
+ }
+
+ var lastIndex = parentPath.lastIndexOf('\\');
+ parentPath = lastIndex == -1 ? "" : parentPath.substring(0, lastIndex);
+
+ if (parentPath.endsWith(':')) {
+ parentPath += "\\";
+ }
+
+ if (parentPath == '\\') {
+ parentPath = "Network";
+ }
+
+ html += '<li><a class="lnkDirectory" data-path="' + parentPath + '" href="#">..</a></li>';
+ }
+
+ for (var i = 0, length = folders.length; i < length; i++) {
+
+ var folder = folders[i];
+
+ html += '<li><a class="lnkDirectory" data-path="' + folder.Path + '" href="#">' + folder.Name + '</a></li>';
+ }
+
+ if (!path) {
+ html += '<li><a class="lnkDirectory" data-path="Network" href="#">Network</a></li>';
+ }
+
+ $('#ulDirectoryPickerList', page).html(html).listview('refresh');
+
+ Dashboard.hideLoadingMsg();
+
+ }).fail(function () {
+
+ $('#txtDirectoryPickerPath', page).val("");
+ $('#ulDirectoryPickerList', page).html('').listview('refresh');
+
+ Dashboard.hideLoadingMsg();
+ });
+ },
+
+ getPluginSecurityInfo: function () {
+
+ if (!Dashboard.getPluginSecurityInfoPromise) {
+ Dashboard.getPluginSecurityInfoPromise = ApiClient.getPluginSecurityInfo();
+ }
+
+ return Dashboard.getPluginSecurityInfoPromise;
+ },
+
+ resetPluginSecurityInfo: function () {
+ Dashboard.getPluginSecurityInfoPromise = null;
+ },
+
+ ensureHeader: function (page) {
+
+ if (!$('.header', page).length) {
+
+ var isLoggedIn = Dashboard.getCurrentUserId();
+
+ if (isLoggedIn) {
+
+ var promise1 = Dashboard.getCurrentUser();
+ var promise2 = Dashboard.getPluginSecurityInfo();
+
+ $.when(promise1, promise2).done(function (response1, response2) {
+
+ Dashboard.renderHeader(page, response1[0], response2[0]);
+ });
+
+ } else {
+
+ Dashboard.renderHeader(page);
+ }
+ }
+ },
+
+ renderHeader: function (page, user, pluginSecurityInfo) {
+
+ var headerHtml = '';
+ headerHtml += '<div class="header">';
+
+ var isLibraryPage = page.hasClass('libraryPage');
+
+ headerHtml += '<a class="logo" href="index.html">';
+
+ if (page.hasClass('standalonePage')) {
+
+ headerHtml += '<img class="imgLogoIcon" src="css/images/mblogoicon.png" /><img class="imgLogoText" src="css/images/mblogotextblack.png" />';
+ }
+ else if (isLibraryPage) {
+
+ headerHtml += '<img class="imgLogoIcon" src="css/images/mblogoicon.png" /><img class="imgLogoText" src="css/images/mblogotextwhite.png" />';
+ }
+ headerHtml += '</a>';
+
+ var imageColor = isLibraryPage ? "White" : "Black";
+
+ if (user && !page.hasClass('wizardPage')) {
+ headerHtml += '<div class="headerButtons">';
+ headerHtml += '<a class="imageLink btnCurrentUser" href="#" onclick="Dashboard.showUserFlyout();"><span class="currentUsername">' + user.Name + '</span>';
+
+ if (user.PrimaryImageTag) {
+
+ var url = ApiClient.getUserImageUrl(user.Id, {
+ width: 225,
+ tag: user.PrimaryImageTag,
+ type: "Primary"
+ });
+
+ headerHtml += '<img src="' + url + '" />';
+ } else {
+ headerHtml += '<img src="css/images/currentUserDefault' + imageColor + '.png" />';
+ }
+ headerHtml += '</a>';
+
+ if (pluginSecurityInfo.IsMBSupporter) {
+ headerHtml += '<a class="imageLink" href="supporter.html"><img src="css/images/suppbadge.png" /></a>';
+ }
+ if (user.Configuration.IsAdministrator) {
+ headerHtml += '<a class="imageLink" href="dashboard.html"><img src="css/images/tools' + imageColor + '.png" /></a>';
+ }
+
+ headerHtml += '</div>';
+ }
+
+ headerHtml += '</div>';
+ page.prepend(headerHtml);
+ },
+
+ ensureToolsMenu: function (page) {
+
+ if (!page.hasClass('type-interior')) {
+ return;
+ }
+
+ var sidebar = $('.toolsSidebar', page);
+
+ if (!sidebar.length) {
+
+ var html = '<div class="content-secondary ui-bar-a toolsSidebar">';
+
+ html += '<h1><a href="index.html" class="imageLink" style="margin-left: 0;margin-right: 20px;"> <img src="css/images/home.png" /></a>Tools</h1>';
+
+ html += '<div class="sidebarLinks">';
+
+ var links = Dashboard.getToolsMenuLinks(page);
+
+ for (var i = 0, length = links.length; i < length; i++) {
+
+ var link = links[i];
+
+ if (link.href) {
+
+ if (link.selected) {
+ html += '<a class="selectedSidebarLink" href="' + link.href + '">' + link.name + '</a>';
+ } else {
+ html += '<a href="' + link.href + '">' + link.name + '</a>';
+ }
+
+ }
+ }
+
+ // collapsible
+ html += '</div>';
+
+ // content-secondary
+ html += '</div>';
+
+ $(page).append(html);
+ }
+ },
+
+ getToolsMenuLinks: function (page) {
+
+ var pageElem = page[0];
+
+ return [{
+ name: "Dashboard",
+ href: "dashboard.html",
+ selected: pageElem.id == "dashboardPage"
+ }, {
+ name: "Media Library",
+ href: "library.html",
+ selected: pageElem.id == "mediaLibraryPage"
+ }, {
+ name: "Metadata",
+ href: "metadata.html",
+ selected: pageElem.id == "metadataConfigurationPage" || pageElem.id == "advancedMetadataConfigurationPage" || pageElem.id == "metadataImagesConfigurationPage"
+ }, {
+ name: "Plugins",
+ href: "plugins.html",
+ selected: page.hasClass("pluginConfigurationPage")
+ }, {
+ name: "User Profiles",
+ href: "userProfiles.html",
+ selected: page.hasClass("userProfilesConfigurationPage")
+ }, {
+ name: "Display Settings",
+ href: "uiSettings.html",
+ selected: pageElem.id == "displaySettingsPage"
+ }, {
+ name: "Advanced",
+ href: "advanced.html",
+ selected: pageElem.id == "advancedConfigurationPage"
+ }, {
+ name: "Scheduled Tasks",
+ href: "scheduledTasks.html",
+ selected: pageElem.id == "scheduledTasksPage" || pageElem.id == "scheduledTaskPage"
+ }, {
+ name: "Help",
+ href: "support.html",
+ selected: pageElem.id == "supportPage" || pageElem.id == "logPage" || pageElem.id == "supporterPage" || pageElem.id == "supporterKeyPage"
+ }];
+
+ },
+
+ ensureWebSocket: function (systemInfo) {
+
+ if (!("WebSocket" in window)) {
+ // Not supported by the browser
+ return;
+ }
+
+ if (Dashboard.webSocket) {
+ if (Dashboard.webSocket.readyState === WebSocket.OPEN || Dashboard.webSocket.readyState === WebSocket.CONNECTING) {
+ return;
+ }
+ }
+
+ systemInfo = systemInfo || Dashboard.lastSystemInfo;
+
+ var url = "ws://" + ApiClient.serverHostName + ":" + systemInfo.WebSocketPortNumber + "/mediabrowser";
+
+ var ws = new WebSocket(url);
+
+ ws.onmessage = Dashboard.onWebSocketMessage;
+
+ ws.onopen = function () {
+ setTimeout(function () {
+ $(document).trigger("websocketopen");
+ }, 500);
+ };
+ ws.onerror = function () {
+ setTimeout(function () {
+ $(document).trigger("websocketerror");
+ }, 0);
+ };
+ ws.onclose = function () {
+ setTimeout(function () {
+ $(document).trigger("websocketclose");
+ }, 0);
+ };
+
+ Dashboard.webSocket = ws;
+ },
+
+ resetWebSocketPingInterval: function () {
+
+ if (Dashboard.pingWebSocketInterval) {
+ clearInterval(Dashboard.pingWebSocketInterval);
+ Dashboard.pingWebSocketInterval = null;
+ }
+ Dashboard.pingWebSocketInterval = setInterval(Dashboard.pingWebSocket, 30000);
+ },
+
+ pingWebSocket: function () {
+
+ // Send a ping to the server every so often to try and keep the connection alive
+ if (Dashboard.isWebSocketOpen()) {
+ Dashboard.sendWebSocketMessage("ping");
+ }
+
+ },
+
+ onWebSocketMessage: function (msg) {
+
+ msg = JSON.parse(msg.data);
+
+ if (msg.MessageType === "LibraryChanged") {
+ Dashboard.processLibraryUpdateNotification(msg.Data);
+ }
+ else if (msg.MessageType === "UserDeleted") {
+ Dashboard.validateCurrentUser();
+ }
+ else if (msg.MessageType === "SystemInfo") {
+ Dashboard.updateSystemInfo(msg.Data);
+ }
+ else if (msg.MessageType === "HasPendingRestartChanged") {
+ Dashboard.updateSystemInfo(msg.Data);
+ }
+ else if (msg.MessageType === "UserUpdated") {
+ Dashboard.validateCurrentUser();
+
+ var user = msg.Data;
+
+ if (user.Id == Dashboard.getCurrentUserId()) {
+
+ $('.currentUsername').html(user.Name);
+ }
+ }
+ else if (msg.MessageType === "PackageInstallationCompleted") {
+ Dashboard.showPackageInstallNotification(msg.Data, "completed");
+ Dashboard.refreshSystemInfoFromServer();
+ }
+ else if (msg.MessageType === "PackageInstallationFailed") {
+ Dashboard.showPackageInstallNotification(msg.Data, "failed");
+ Dashboard.refreshSystemInfoFromServer();
+ }
+ else if (msg.MessageType === "PackageInstallationCancelled") {
+ Dashboard.showPackageInstallNotification(msg.Data, "cancelled");
+ Dashboard.refreshSystemInfoFromServer();
+ }
+ else if (msg.MessageType === "PackageInstalling") {
+ Dashboard.showPackageInstallNotification(msg.Data, "progress");
+ Dashboard.refreshSystemInfoFromServer();
+ }
+ else if (msg.MessageType === "ScheduledTaskEndExecute") {
+
+ Dashboard.showTaskCompletionNotification(msg.Data);
+ }
+
+ $(document).trigger("websocketmessage", [msg]);
+ },
+
+ sendWebSocketMessage: function (name, data) {
+
+ var msg = { MessageType: name };
+
+ if (data) {
+ msg.Data = data;
+ }
+
+ msg = JSON.stringify(msg);
+
+ Dashboard.webSocket.send(msg);
+ },
+
+ isWebSocketOpen: function () {
+ return Dashboard.webSocket && Dashboard.webSocket.readyState === WebSocket.OPEN;
+ },
+
+ showTaskCompletionNotification: function (result) {
+
+ var html = '';
+
+ if (result.Status == "Completed") {
+ html += '<img src="css/images/notifications/done.png" class="notificationIcon" />';
+ return;
+ }
+ else if (result.Status == "Cancelled") {
+ html += '<img src="css/images/notifications/info.png" class="notificationIcon" />';
+ return;
+ }
+ else {
+ html += '<img src="css/images/notifications/error.png" class="notificationIcon" />';
+ }
+
+ html += '<span>';
+ html += result.Name + " " + result.Status;
+ html += '</span>';
+
+ var timeout = 0;
+
+ if (result.Status == 'Cancelled') {
+ timeout = 2000;
+ }
+
+ Dashboard.showFooterNotification({ html: html, id: result.Id, forceShow: true, timeout: timeout });
+ },
+
+ showPackageInstallNotification: function (installation, status) {
+
+ var html = '';
+
+ if (status == 'completed') {
+ html += '<img src="css/images/notifications/done.png" class="notificationIcon" />';
+ }
+ else if (status == 'cancelled') {
+ html += '<img src="css/images/notifications/info.png" class="notificationIcon" />';
+ }
+ else if (status == 'failed') {
+ html += '<img src="css/images/notifications/error.png" class="notificationIcon" />';
+ }
+ else if (status == 'progress') {
+ html += '<img src="css/images/notifications/download.png" class="notificationIcon" />';
+ }
+
+ html += '<span style="margin-right: 1em;">';
+
+ if (status == 'completed') {
+ html += installation.Name + ' ' + installation.Version + ' installation completed';
+ }
+ else if (status == 'cancelled') {
+ html += installation.Name + ' ' + installation.Version + ' installation was cancelled';
+ }
+ else if (status == 'failed') {
+ html += installation.Name + ' ' + installation.Version + ' installation failed';
+ }
+ else if (status == 'progress') {
+ html += 'Installing ' + installation.Name + ' ' + installation.Version;
+ }
+
+ html += '</span>';
+
+ if (status == 'progress') {
+
+ var percentComplete = Math.round(installation.PercentComplete || 0);
+
+ html += '<progress style="margin-right: 1em;" max="100" value="' + percentComplete + '" title="' + percentComplete + '%">';
+ html += '' + percentComplete + '%';
+ html += '</progress>';
+
+ if (percentComplete < 100) {
+ var btnId = "btnCancel" + installation.Id;
+ html += '<button id="' + btnId + '" type="button" data-icon="delete" onclick="$(\'' + btnId + '\').button(\'disable\');Dashboard.cancelInstallation(\'' + installation.Id + '\');" data-theme="b" data-inline="true" data-mini="true">Cancel</button>';
+ }
+ }
+
+ var timeout = 0;
+
+ if (status == 'cancelled') {
+ timeout = 2000;
+ }
+
+ var forceShow = status != "progress";
+ var allowHide = status != "progress" && status != 'cancelled';
+
+ Dashboard.showFooterNotification({ html: html, id: installation.Id, timeout: timeout, forceShow: forceShow, allowHide: allowHide });
+ },
+
+ processLibraryUpdateNotification: function (data) {
+
+ var newItems = data.ItemsAdded.filter(function (a) {
+ return !a.IsFolder;
+ });
+
+ if (!Dashboard.newItems) {
+ Dashboard.newItems = [];
+ }
+
+ for (var i = 0, length = newItems.length ; i < length; i++) {
+
+ Dashboard.newItems.push(newItems[i]);
+ }
+
+ if (Dashboard.newItemTimeout) {
+ clearTimeout(Dashboard.newItemTimeout);
+ }
+
+ Dashboard.newItemTimeout = setTimeout(Dashboard.onNewItemTimerStopped, 60000);
+ },
+
+ onNewItemTimerStopped: function () {
+
+ var newItems = Dashboard.newItems;
+
+ newItems = newItems.sort(function (a, b) {
+
+ if (a.PrimaryImageTag && b.PrimaryImageTag) {
+ return 0;
+ }
+
+ if (a.PrimaryImageTag) {
+ return -1;
+ }
+
+ return 1;
+ });
+
+ Dashboard.newItems = [];
+ Dashboard.newItemTimeout = null;
+
+ // Show at most 3 notifications
+ for (var i = 0, length = Math.min(newItems.length, 3) ; i < length; i++) {
+
+ var item = newItems[i];
+
+ var data = {
+ title: "New " + item.Type,
+ body: item.Name,
+ timeout: 6000
+ };
+
+ if (item.PrimaryImageTag) {
+ data.icon = ApiClient.getImageUrl(item.Id, {
+ width: 100,
+ tag: item.PrimaryImageTag
+ });
+ }
+
+ WebNotifications.show(data);
+ }
+ },
+
+ ensurePageTitle: function (page) {
+
+ if (!page.hasClass('type-interior')) {
+ return;
+ }
+
+ var pageElem = page[0];
+
+ if (pageElem.hasPageTitle) {
+ return;
+ }
+
+ var parent = $('.content-primary', page);
+
+ if (!parent.length) {
+ parent = $('.ui-content', page)[0];
+ }
+
+ $(parent).prepend("<h2 class='pageTitle'>" + (document.title || " ") + "</h2>");
+
+ pageElem.hasPageTitle = true;
+ },
+
+ setPageTitle: function (title) {
+
+ $('.pageTitle', $.mobile.activePage).html(title);
+
+ if (title) {
+ document.title = title;
+ }
+ },
+
+ metroColors: ["#6FBD45", "#4BB3DD", "#4164A5", "#E12026", "#800080", "#E1B222", "#008040", "#0094FF", "#FF00C7", "#FF870F", "#7F0037"],
+
+ getRandomMetroColor: function () {
+
+ var index = Math.floor(Math.random() * (Dashboard.metroColors.length - 1));
+
+ return Dashboard.metroColors[index];
+ }
+
+};
+
+$(function () {
+
+ var footerHtml = '<div id="footer" class="ui-bar-a">';
+
+ footerHtml += '<div id="nowPlayingBar" style="display:none;">';
+
+ footerHtml += '<button id="previousTrackButton" class="imageButton mediaButton" title="Previous Track" type="button"><img src="css/images/media/previousTrack.png" /></button>';
+
+ footerHtml += '<button id="stopButton" class="imageButton mediaButton" title="Stop" type="button" onclick="MediaPlayer.stop();"><img src="css/images/media/stop.png" /></button>';
+
+ footerHtml += '<button id="nextTrackButton" class="imageButton mediaButton" title="Next Track" type="button"><img src="css/images/media/nextTrack.png" /></button>';
+
+ footerHtml += '<div id="mediaElement"></div>';
+
+ footerHtml += '</div>';
+
+ footerHtml += '<div id="footerNotifications"></div>';
+
+ footerHtml += '</div>';
+
+
+ $(document.body).append(footerHtml);
+});
+
+Dashboard.jQueryMobileInit();
+
+$(document).on('pagebeforeshow', ".page", function () {
+
+ Dashboard.refreshSystemInfoFromServer();
+
+ var page = $(this);
+
+ Dashboard.ensureHeader(page);
+ Dashboard.ensurePageTitle(page);
+
+}).on('pageinit', ".page", function () {
+
+ var page = $(this);
+ var hasLogin = Dashboard.getCurrentUserId();
+
+ if (!hasLogin) {
+
+ if (this.id !== "loginPage" && !page.hasClass('wizardPage')) {
+
+ Dashboard.logout();
+ }
+ }
+
+ else {
+
+ Dashboard.getCurrentUser().done(function (user) {
+
+ if (user.Configuration.IsAdministrator) {
+ Dashboard.ensureToolsMenu(page);
+ }
+ });
+ }
});
\ No newline at end of file diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj index b18a2a832..91ca577a7 100644 --- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj +++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj @@ -1,416 +1,413 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> - <PropertyGroup> - <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> - <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> - <ProjectGuid>{5624B7B5-B5A7-41D8-9F10-CC5611109619}</ProjectGuid> - <OutputType>Library</OutputType> - <AppDesignerFolder>Properties</AppDesignerFolder> - <RootNamespace>MediaBrowser.WebDashboard</RootNamespace> - <AssemblyName>MediaBrowser.WebDashboard</AssemblyName> - <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> - <FileAlignment>512</FileAlignment> - <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir> - <RestorePackages>true</RestorePackages> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> - <DebugSymbols>true</DebugSymbols> - <DebugType>full</DebugType> - <Optimize>false</Optimize> - <OutputPath>bin\Debug\</OutputPath> - <DefineConstants>DEBUG;TRACE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> - <DebugType>pdbonly</DebugType> - <Optimize>true</Optimize> - <OutputPath>bin\Release\</OutputPath> - <DefineConstants>TRACE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <PropertyGroup> - <RunPostBuildEvent>Always</RunPostBuildEvent> - </PropertyGroup> - <ItemGroup> - <Reference Include="ServiceStack, Version=3.9.37.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.3.9.37\lib\net35\ServiceStack.dll</HintPath> - </Reference> - <Reference Include="ServiceStack.Common, Version=3.9.37.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.Common.3.9.37\lib\net35\ServiceStack.Common.dll</HintPath> - </Reference> - <Reference Include="ServiceStack.Interfaces, Version=3.9.37.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.Common.3.9.37\lib\net35\ServiceStack.Interfaces.dll</HintPath> - </Reference> - <Reference Include="ServiceStack.OrmLite, Version=3.9.37.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.OrmLite.SqlServer.3.9.37\lib\ServiceStack.OrmLite.dll</HintPath> - </Reference> - <Reference Include="ServiceStack.OrmLite.SqlServer, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.OrmLite.SqlServer.3.9.37\lib\ServiceStack.OrmLite.SqlServer.dll</HintPath> - </Reference> - <Reference Include="ServiceStack.Redis, Version=3.9.37.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.Redis.3.9.37\lib\net35\ServiceStack.Redis.dll</HintPath> - </Reference> - <Reference Include="ServiceStack.ServiceInterface, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.3.9.37\lib\net35\ServiceStack.ServiceInterface.dll</HintPath> - </Reference> - <Reference Include="ServiceStack.Text, Version=3.9.37.0, Culture=neutral, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\ServiceStack.Text.3.9.37\lib\net35\ServiceStack.Text.dll</HintPath> - </Reference> - <Reference Include="System" /> - <Reference Include="System.ComponentModel.Composition" /> - <Reference Include="System.Core" /> - <Reference Include="System.Runtime.Serialization" /> - <Reference Include="System.Xml.Linq" /> - <Reference Include="System.Data.DataSetExtensions" /> - <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="Api\DashboardInfo.cs" /> - <Compile Include="Api\DashboardService.cs" /> - <Compile Include="Api\DashboardInfoWebSocketListener.cs" /> - <Compile Include="Properties\AssemblyInfo.cs" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj"> - <Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project> - <Name>MediaBrowser.Common</Name> - </ProjectReference> - <ProjectReference Include="..\MediaBrowser.Controller\MediaBrowser.Controller.csproj"> - <Project>{17e1f4e6-8abd-4fe5-9ecf-43d4b6087ba2}</Project> - <Name>MediaBrowser.Controller</Name> - </ProjectReference> - <ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj"> - <Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project> - <Name>MediaBrowser.Model</Name> - </ProjectReference> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\index.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\advanced.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\dashboard.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\Site.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\site.css" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\library.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\metadata.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\userProfiles.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\plugins.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\login.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\logindefault.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\uiSettings.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\editUser.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\favicon.ico" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\touchicon.png" /> - <EmbeddedResource Include="Html\css\images\touchicon114.png" /> - <EmbeddedResource Include="Html\css\images\touchicon72.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\iossplash.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\updatePassword.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\userImage.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\IndexPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\mblogowhitefull.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\mblogoblackfull.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\defaultCollectionImage.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\toolsWhite.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\currentUserDefaultWhite.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\rightArrow.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\userFlyoutDefault.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\MediaLibraryPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\DisplaySettingsPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\PluginsPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\MetadataConfigurationPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\LoginPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\UpdatePasswordPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\AdvancedConfigurationPage.js" /> - <EmbeddedResource Include="Html\scripts\EditUserPage.js" /> - <EmbeddedResource Include="Html\scripts\UserImagePage.js" /> - <EmbeddedResource Include="Html\scripts\UserProfilesPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\advancedMetadata.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\AdvancedMetadataConfigurationPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\pluginUpdates.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\PluginUpdatesPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\addPlugin.html" /> - <EmbeddedResource Include="Html\scripts\AddPluginPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\bg.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\pluginCatalog.html" /> - <EmbeddedResource Include="Html\scripts\PluginCatalogPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\leftArrowBlack.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\leftArrowWhite.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\currentUserDefaultBlack.png" /> - <EmbeddedResource Include="Html\css\images\toolsBlack.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scheduledTasks.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\ScheduledTasksPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scheduledTask.html" /> - <EmbeddedResource Include="Html\scripts\ScheduledTaskPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\wizardStart.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\wizardFinish.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\wizardUser.html" /> - <EmbeddedResource Include="Html\wizardLibrary.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\WizardStartPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\WizardUserPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\cloudNetwork.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\movieFolder.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\checkmarkblack.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\log.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\LogPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\metadataImages.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\MetadataImagesPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\DashboardPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\checkMarkGreen.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\clients\html5.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\clients\android.png" /> - <EmbeddedResource Include="Html\css\images\clients\ios.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\clients\mb.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\clients\windowsrt.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\clients\windowsphone.png" /> - <EmbeddedResource Include="Html\css\images\clients\win8.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\notifications\download.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\Extensions.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\support.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\SupporterPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\supporter.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\suppbadge.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\premiumflag.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\supporterKey.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\SupporterKeyPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\donatepp.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\faicons-v2.png" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\faicons.png" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\images\ajax-loader.png" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\images\icons-18-black-pack.png" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\images\icons-18-white-pack.png" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\images\icons-36-black-pack.png" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\images\icons-36-white-pack.png" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\index.html" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\jqm-icon-pack-3.0.0-fa.css" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\original\images\ajax-loader.gif" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\original\images\ajax-loader.png" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\original\images\icons-18-black-pack.png" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\original\images\icons-18-white-pack.png" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\original\images\icons-36-black-pack.png" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\original\images\icons-36-white-pack.png" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\original\index.html" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\original\jqm-icon-pack-2.0-original.css" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\font\fontawesome-webfont.eot" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\font\fontawesome-webfont.ttf" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\font\fontawesome-webfont.woff" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\font\FontAwesome.otf" /> - <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\jqm-icon-pack-3.0.0-fa.scss" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\registerpp.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\home.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\notifications\done.png" /> - <EmbeddedResource Include="Html\css\images\notifications\error.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\notifications\cancelled.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\notifications\info.png" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\itemDetails.html" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\scripts\ItemDetailPage.js" /> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Html\css\images\media\playCircle.png" /> - <EmbeddedResource Include="Html\css\images\media\nextTrack.png" /> - <EmbeddedResource Include="Html\css\images\media\pause.png" /> - <EmbeddedResource Include="Html\css\images\media\play.png" /> - <EmbeddedResource Include="Html\css\images\media\previousTrack.png" /> - <EmbeddedResource Include="Html\css\images\media\stop.png" /> - <EmbeddedResource Include="Html\css\images\itemDetails\videoDefault.png" /> - <EmbeddedResource Include="Html\css\images\itemDetails\audioDefault.png" /> - <EmbeddedResource Include="Html\css\images\itemDetails\gameDefault.png" /> - <Content Include="Html\css\images\stars.png" /> - <EmbeddedResource Include="Html\scripts\MediaPlayer.js" /> - </ItemGroup> - <ItemGroup> - <None Include="packages.config" /> - </ItemGroup> - <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> - <PropertyGroup> - <PostBuildEvent>xcopy "$(TargetPath)" "$(SolutionDir)\MediaBrowser.ServerApplication\CorePlugins\" /y</PostBuildEvent> - </PropertyGroup> - <Import Project="$(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"> - </Target> - <Target Name="AfterBuild"> - </Target> - --> +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{5624B7B5-B5A7-41D8-9F10-CC5611109619}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>MediaBrowser.WebDashboard</RootNamespace>
+ <AssemblyName>MediaBrowser.WebDashboard</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
+ <RestorePackages>true</RestorePackages>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup>
+ <RunPostBuildEvent>Always</RunPostBuildEvent>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="ServiceStack, Version=3.9.37.0, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\ServiceStack.3.9.37\lib\net35\ServiceStack.dll</HintPath>
+ </Reference>
+ <Reference Include="ServiceStack.Common, Version=3.9.37.0, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\ServiceStack.Common.3.9.37\lib\net35\ServiceStack.Common.dll</HintPath>
+ </Reference>
+ <Reference Include="ServiceStack.Interfaces, Version=3.9.37.0, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\ServiceStack.Common.3.9.37\lib\net35\ServiceStack.Interfaces.dll</HintPath>
+ </Reference>
+ <Reference Include="ServiceStack.OrmLite, Version=3.9.37.0, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\ServiceStack.OrmLite.SqlServer.3.9.37\lib\ServiceStack.OrmLite.dll</HintPath>
+ </Reference>
+ <Reference Include="ServiceStack.OrmLite.SqlServer, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\ServiceStack.OrmLite.SqlServer.3.9.37\lib\ServiceStack.OrmLite.SqlServer.dll</HintPath>
+ </Reference>
+ <Reference Include="ServiceStack.Redis, Version=3.9.37.0, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\ServiceStack.Redis.3.9.37\lib\net35\ServiceStack.Redis.dll</HintPath>
+ </Reference>
+ <Reference Include="ServiceStack.ServiceInterface, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\ServiceStack.3.9.37\lib\net35\ServiceStack.ServiceInterface.dll</HintPath>
+ </Reference>
+ <Reference Include="ServiceStack.Text, Version=3.9.37.0, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\ServiceStack.Text.3.9.37\lib\net35\ServiceStack.Text.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.ComponentModel.Composition" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Runtime.Serialization" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <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="Api\DashboardInfo.cs" />
+ <Compile Include="Api\DashboardService.cs" />
+ <Compile Include="Api\DashboardInfoWebSocketListener.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj">
+ <Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project>
+ <Name>MediaBrowser.Common</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\MediaBrowser.Controller\MediaBrowser.Controller.csproj">
+ <Project>{17e1f4e6-8abd-4fe5-9ecf-43d4b6087ba2}</Project>
+ <Name>MediaBrowser.Controller</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj">
+ <Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project>
+ <Name>MediaBrowser.Model</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\index.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\advanced.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\dashboard.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\Site.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\site.css" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\library.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\metadata.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\userProfiles.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\plugins.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\login.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\logindefault.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\uiSettings.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\editUser.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\favicon.ico" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\touchicon.png" />
+ <EmbeddedResource Include="Html\css\images\touchicon114.png" />
+ <EmbeddedResource Include="Html\css\images\touchicon72.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\iossplash.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\updatePassword.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\userImage.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\IndexPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\defaultCollectionImage.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\toolsWhite.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\currentUserDefaultWhite.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\rightArrow.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\userFlyoutDefault.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\MediaLibraryPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\DisplaySettingsPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\PluginsPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\MetadataConfigurationPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\LoginPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\UpdatePasswordPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\AdvancedConfigurationPage.js" />
+ <EmbeddedResource Include="Html\scripts\EditUserPage.js" />
+ <EmbeddedResource Include="Html\scripts\UserImagePage.js" />
+ <EmbeddedResource Include="Html\scripts\UserProfilesPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\advancedMetadata.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\AdvancedMetadataConfigurationPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\pluginUpdates.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\PluginUpdatesPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\addPlugin.html" />
+ <EmbeddedResource Include="Html\scripts\AddPluginPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\bg.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\pluginCatalog.html" />
+ <EmbeddedResource Include="Html\scripts\PluginCatalogPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\leftArrowBlack.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\leftArrowWhite.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\currentUserDefaultBlack.png" />
+ <EmbeddedResource Include="Html\css\images\toolsBlack.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scheduledTasks.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\ScheduledTasksPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scheduledTask.html" />
+ <EmbeddedResource Include="Html\scripts\ScheduledTaskPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\wizardStart.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\wizardFinish.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\wizardUser.html" />
+ <EmbeddedResource Include="Html\wizardLibrary.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\WizardStartPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\WizardUserPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\cloudNetwork.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\movieFolder.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\checkmarkblack.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\log.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\LogPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\metadataImages.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\MetadataImagesPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\DashboardPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\checkMarkGreen.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\clients\html5.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\clients\android.png" />
+ <EmbeddedResource Include="Html\css\images\clients\ios.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\clients\mb.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\clients\windowsrt.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\clients\windowsphone.png" />
+ <EmbeddedResource Include="Html\css\images\clients\win8.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\notifications\download.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\Extensions.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\support.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\SupporterPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\supporter.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\suppbadge.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\premiumflag.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\supporterKey.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\SupporterKeyPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\donatepp.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\faicons-v2.png" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\faicons.png" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\images\ajax-loader.png" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\images\icons-18-black-pack.png" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\images\icons-18-white-pack.png" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\images\icons-36-black-pack.png" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\images\icons-36-white-pack.png" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\index.html" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\jqm-icon-pack-3.0.0-fa.css" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\original\images\ajax-loader.gif" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\original\images\ajax-loader.png" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\original\images\icons-18-black-pack.png" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\original\images\icons-18-white-pack.png" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\original\images\icons-36-black-pack.png" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\original\images\icons-36-white-pack.png" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\original\index.html" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\original\jqm-icon-pack-2.0-original.css" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\font\fontawesome-webfont.eot" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\font\fontawesome-webfont.ttf" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\font\fontawesome-webfont.woff" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\font\FontAwesome.otf" />
+ <EmbeddedResource Include="Html\thirdparty\jqm-icon-pack-3.0\font-awesome\jqm-icon-pack-3.0.0-fa.scss" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\registerpp.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\home.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\notifications\done.png" />
+ <EmbeddedResource Include="Html\css\images\notifications\error.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\notifications\cancelled.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\notifications\info.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\itemDetails.html" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\scripts\ItemDetailPage.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Html\css\images\media\playCircle.png" />
+ <EmbeddedResource Include="Html\css\images\media\nextTrack.png" />
+ <EmbeddedResource Include="Html\css\images\media\pause.png" />
+ <EmbeddedResource Include="Html\css\images\media\play.png" />
+ <EmbeddedResource Include="Html\css\images\media\previousTrack.png" />
+ <EmbeddedResource Include="Html\css\images\media\stop.png" />
+ <EmbeddedResource Include="Html\css\images\itemDetails\videoDefault.png" />
+ <EmbeddedResource Include="Html\css\images\itemDetails\audioDefault.png" />
+ <EmbeddedResource Include="Html\css\images\itemDetails\gameDefault.png" />
+ <Content Include="Html\css\images\mblogoicon.png" />
+ <Content Include="Html\css\images\mblogotextblack.png" />
+ <Content Include="Html\css\images\mblogotextwhite.png" />
+ <Content Include="Html\css\images\stars.png" />
+ <EmbeddedResource Include="Html\scripts\MediaPlayer.js" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <PropertyGroup>
+ <PostBuildEvent>xcopy "$(TargetPath)" "$(SolutionDir)\MediaBrowser.ServerApplication\CorePlugins\" /y</PostBuildEvent>
+ </PropertyGroup>
+ <Import Project="$(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">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
</Project>
\ No newline at end of file diff --git a/Nuget/MediaBrowser.ApiClient.nuspec b/Nuget/MediaBrowser.ApiClient.nuspec new file mode 100644 index 000000000..2ee732d8a --- /dev/null +++ b/Nuget/MediaBrowser.ApiClient.nuspec @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="utf-8"?> +<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"> + <metadata> + <id>MediaBrowser.ApiClient</id> + <version>3.0.0.0-beta</version> + <title>MediaBrowser.ApiInteraction</title> + <authors>Media Browser Team</authors> + <owners>Luke</owners> + <requireLicenseAcceptance>false</requireLicenseAcceptance> + <description>Description</description> + <copyright>Copyright © 2012</copyright> + <dependencies> + <group> + <dependency id="protobuf-net" version="2.0.0.621" /> + </group> + <group targetFramework=".NETFramework4.5"> + <dependency id="ServiceStack.Text" version="3.9.37" /> + </group> + <group targetFramework=".NETPortable0.0-net45+sl4+wp71+win8"> + <dependency id="Newtonsoft.Json" version="4.5.11" /> + <dependency id="Microsoft.Bcl.Async" version="1.0.14-rc" /> + <dependency id="Microsoft.Net.Http" version="2.1.3-beta" /> + </group> + </dependencies> + </metadata> + <files> + <file src="dlls\MediaBrowser.ApiInteraction.dll" target="lib\net45\MediaBrowser.ApiInteraction.dll" /> + <file src="dlls\MediaBrowser.ApiInteraction.Portable.dll" target="lib\portable-net45+sl4+wp71+win8\MediaBrowser.ApiInteraction.Portable.dll" /> + </files> +</package>
\ No newline at end of file diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec new file mode 100644 index 000000000..b6ca6ae02 --- /dev/null +++ b/Nuget/MediaBrowser.Common.nuspec @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> + <metadata> + <id>MediaBrowser.Common</id> + <version>1.0.1</version> + <title>MediaBrowser.Common</title> + <authors>Media Browser Team</authors> + <owners /> + <projectUrl>https://github.com/MediaBrowser/MediaBrowser</projectUrl> + <requireLicenseAcceptance>false</requireLicenseAcceptance> + <description>Contains common model objects and interfaces used by all Media Browser solutions.</description> + </metadata> + <files> + <file src="dlls\MediaBrowser.Common.dll" target="lib\net45\MediaBrowser.Common.dll" /> + <file src="dlls\MediaBrowser.Model.dll" target="lib\net45\MediaBrowser.Model.dll" /> + <file src="dlls\MediaBrowser.Model.dll" target="lib\portable-net4+sl4+wp7+win8\MediaBrowser.Model.dll" /> + </files> +</package>
\ No newline at end of file diff --git a/Nuget/MediaBrowser.Server.Core.nupkg.REMOVED.git-id b/Nuget/MediaBrowser.Server.Core.nupkg.REMOVED.git-id deleted file mode 100644 index a2490601e..000000000 --- a/Nuget/MediaBrowser.Server.Core.nupkg.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -da3d30d634468465d8995ba6cb1c0872959b3e9c
\ No newline at end of file diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec new file mode 100644 index 000000000..82fb2c531 --- /dev/null +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> + <metadata> + <id>MediaBrowser.Server.Core</id> + <version>1.0.0</version> + <title>Media Browser.Server.Core</title> + <authors>Media Browser Team</authors> + <owners /> + <projectUrl>https://github.com/MediaBrowser/MediaBrowser</projectUrl> + <requireLicenseAcceptance>false</requireLicenseAcceptance> + <description>Contains core components required to build plugins for Media Browser Server.</description> + <dependencies> + <dependency id="MediaBrowser.Common" version="1.0.1" /> + </dependencies> + </metadata> + <files> + <file src="dlls\MediaBrowser.Controller.dll" target="lib\net45\MediaBrowser.Controller.dll" /> + </files> +</package>
\ No newline at end of file diff --git a/Nuget/MediaBrowser.Theater.Core.nuspec b/Nuget/MediaBrowser.Theater.Core.nuspec new file mode 100644 index 000000000..1456ced03 --- /dev/null +++ b/Nuget/MediaBrowser.Theater.Core.nuspec @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> + <metadata> + <id>MediaBrowser.Theater.Core</id> + <version>1.0.0</version> + <title>MediaBrowser.Theater.Core</title> + <authors>Media Browser Team</authors> + <owners /> + <projectUrl>https://github.com/MediaBrowser/MediaBrowser.Theater</projectUrl> + <requireLicenseAcceptance>false</requireLicenseAcceptance> + <description>Contains components required to build plugins for Media Browser Theater.</description> + <dependencies> + <dependency id="MediaBrowser.Common" version="1.0.1" /> + </dependencies> + </metadata> + <files> + <file src="dlls\MediaBrowser.UI.Controls.dll" target="lib\net45\MediaBrowser.UI.Controls.dll" /> + <file src="dlls\MediaBrowser.UI.dll" target="lib\net45\MediaBrowser.UI.dll" /> + </files> +</package>
\ No newline at end of file |
