Merge branch 'master' of https://github.com/MediaBrowser/MediaBrowser
Conflicts: MediaBrowser.WebDashboard/dashboard-ui/scripts/mediaplayer.js
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
|
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
|
||||||
<a href="#" data-role="button" class="ui-btn-active">General</a>
|
<a href="#" data-role="button" class="ui-btn-active">General</a>
|
||||||
<a href="advancedserversettings.html" data-role="button">Http Server</a>
|
<a href="advancedserversettings.html" data-role="button">Server</a>
|
||||||
<a href="encodingsettings.html" data-role="button">Transcoding</a>
|
<a href="encodingsettings.html" data-role="button">Transcoding</a>
|
||||||
</div>
|
</div>
|
||||||
<form id="advancedConfigurationForm">
|
<form id="advancedConfigurationForm">
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
|
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
|
||||||
<a href="advanced.html" data-role="button">General</a>
|
<a href="advanced.html" data-role="button">General</a>
|
||||||
<a href="#" data-role="button" class="ui-btn-active">Http Server</a>
|
<a href="#" data-role="button" class="ui-btn-active">Server</a>
|
||||||
<a href="encodingsettings.html" data-role="button">Transcoding</a>
|
<a href="encodingsettings.html" data-role="button">Transcoding</a>
|
||||||
</div>
|
</div>
|
||||||
<form class="advancedServerSettingsForm">
|
<form class="advancedServerSettingsForm">
|
||||||
|
@ -25,6 +25,11 @@
|
||||||
<label for="txtWebSocketPortNumber">Web socket port number: </label>
|
<label for="txtWebSocketPortNumber">Web socket port number: </label>
|
||||||
<input type="number" id="txtWebSocketPortNumber" name="txtWebSocketPortNumber" pattern="[0-9]*" required="required" min="1" data-mini="true" />
|
<input type="number" id="txtWebSocketPortNumber" name="txtWebSocketPortNumber" pattern="[0-9]*" required="required" min="1" data-mini="true" />
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<label for="txtDdns">External DDNS:</label>
|
||||||
|
<input id="txtDdns" data-mini="true" />
|
||||||
|
<div class="fieldDescription">If you have a dynamic DNS enter it here. Media Browser apps will use it when connecting remotely.</div>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<label for="chkEnableUpnp">Enable UPnP</label>
|
<label for="chkEnableUpnp">Enable UPnP</label>
|
||||||
<input type="checkbox" id="chkEnableUpnp" data-mini="true" />
|
<input type="checkbox" id="chkEnableUpnp" data-mini="true" />
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
<a href="autoorganizetv.html" data-role="button">TV Settings</a>
|
<a href="autoorganizetv.html" data-role="button">TV Settings</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style="margin: -15px 0 1em; text-align: right;">
|
<div style="margin: -25px 0 1em; text-align: right;">
|
||||||
<div class="listTopPaging" style="float: left; position: relative; top: 15px;">
|
<div class="listTopPaging" style="float: left; position: relative; top: 15px;">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
text-align: left;
|
text-align: left;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
|
text-shadow: none!important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stretchedDetailTable {
|
.stretchedDetailTable {
|
||||||
|
|
BIN
dashboard-ui/css/images/items/list/remotesearch.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
|
@ -385,7 +385,7 @@ a.itemTag:hover {
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
background-position: center 15%;
|
background-position: center 15%;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
height: 500px;
|
height: 550px;
|
||||||
border-bottom: 1px solid #111;
|
border-bottom: 1px solid #111;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
@ -869,6 +869,26 @@ a.itemTag:hover {
|
||||||
background-color: transparent !important;
|
background-color: transparent !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.unidentifiedIndicator {
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 5px;
|
||||||
|
left: 5px;
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
width: 24px;
|
||||||
|
height: 19px;
|
||||||
|
padding-top: 3px;
|
||||||
|
border-radius: 50%;
|
||||||
|
color: #fff;
|
||||||
|
background: rgb(204, 0, 0);
|
||||||
|
background: rgba(204, 0, 0, .8);
|
||||||
|
}
|
||||||
|
|
||||||
|
.unidentifiedIndicator div:after {
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
.itemProgress {
|
.itemProgress {
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
font-size: 19px;
|
font-size: 19px;
|
||||||
|
|
|
@ -53,6 +53,9 @@
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-size: contain;
|
background-size: contain;
|
||||||
display: block;
|
display: block;
|
||||||
|
/* For the box shadow so that the bottom border isnt underneath the text */
|
||||||
|
z-index: 100000;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.remotePosterImage {
|
.remotePosterImage {
|
||||||
|
@ -84,6 +87,43 @@
|
||||||
padding-right: 0!important;
|
padding-right: 0!important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.searchImage {
|
||||||
|
background-position: center bottom;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: contain;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchBackdropImageContainer {
|
||||||
|
width: 160px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchDiscImageContainer {
|
||||||
|
width: 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchPosterImageContainer {
|
||||||
|
width: 140px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchBackdropImageContainer .searchImage {
|
||||||
|
height: 90px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchDiscImageContainer .searchImage {
|
||||||
|
height: 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchPosterImageContainer .searchImage {
|
||||||
|
height: 210px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchImageContainer .remoteImageDetails {
|
||||||
|
overflow-x: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
@media all and (min-width: 500px) {
|
@media all and (min-width: 500px) {
|
||||||
|
|
||||||
.availableImagesList {
|
.availableImagesList {
|
||||||
|
@ -104,6 +144,28 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.libraryReportIndicator {
|
||||||
|
position: relative;
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
width: 24px;
|
||||||
|
height: 19px;
|
||||||
|
padding-top: 3px;
|
||||||
|
border-radius: 50%;
|
||||||
|
color: #fff;
|
||||||
|
background: rgb(204, 0, 0);
|
||||||
|
background: rgba(204, 0, 0, .8);
|
||||||
|
}
|
||||||
|
|
||||||
|
.libraryReportIndicator div:after {
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clearLibraryReportIndicator {
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
.editorTile {
|
.editorTile {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
|
@ -134,11 +196,33 @@
|
||||||
padding: 0 0 1em 0;
|
padding: 0 0 1em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.remoteImage:hover, .searchImageContainer:hover {
|
||||||
|
-moz-box-shadow: 0 0 12px 7px #38c;
|
||||||
|
-webkit-box-shadow: 0 0 12px 7px #38c;
|
||||||
|
box-shadow: 0 0 12px 7px #38c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tblLibraryReport img {
|
||||||
|
height: 18px;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (min-width: 600px) {
|
||||||
|
|
||||||
|
.popupIdentify {
|
||||||
|
width: 400px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@media all and (min-width: 700px) {
|
@media all and (min-width: 700px) {
|
||||||
|
|
||||||
.availableImagesList {
|
.availableImagesList {
|
||||||
width: 600px;
|
width: 600px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.popupIdentify {
|
||||||
|
width: 500px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media all and (min-width: 800px) {
|
@media all and (min-width: 800px) {
|
||||||
|
@ -163,6 +247,10 @@
|
||||||
float: right;
|
float: right;
|
||||||
width: 67.5%;
|
width: 67.5%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.popupIdentify {
|
||||||
|
width: 600px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media all and (min-width: 900px) {
|
@media all and (min-width: 900px) {
|
||||||
|
@ -170,6 +258,10 @@
|
||||||
.availableImagesList {
|
.availableImagesList {
|
||||||
width: 800px;
|
width: 800px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.popupIdentify {
|
||||||
|
width: 700px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media all and (min-width: 1000px) {
|
@media all and (min-width: 1000px) {
|
||||||
|
@ -177,6 +269,10 @@
|
||||||
.availableImagesList {
|
.availableImagesList {
|
||||||
width: 900px;
|
width: 900px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.popupIdentify {
|
||||||
|
width: 800px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media all and (min-width: 1100px) {
|
@media all and (min-width: 1100px) {
|
||||||
|
@ -184,6 +280,10 @@
|
||||||
.availableImagesList {
|
.availableImagesList {
|
||||||
width: 1000px;
|
width: 1000px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.popupIdentify {
|
||||||
|
width: 900px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media all and (min-width: 1200px) {
|
@media all and (min-width: 1200px) {
|
||||||
|
@ -191,6 +291,10 @@
|
||||||
.availableImagesList {
|
.availableImagesList {
|
||||||
width: 1100px;
|
width: 1100px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.popupIdentify {
|
||||||
|
width: 1000px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media all and (min-width: 1300px) {
|
@media all and (min-width: 1300px) {
|
||||||
|
@ -225,11 +329,41 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.popupIdentifyForm, .identificationSearchResults {
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@media all and (min-height: 500px) {
|
||||||
|
|
||||||
|
.popupIdentifyForm, .identificationSearchResults {
|
||||||
|
height: 350px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (min-height: 600px) {
|
||||||
|
|
||||||
|
.popupIdentifyForm, .identificationSearchResults {
|
||||||
|
height: 450px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (min-height: 700px) {
|
||||||
|
|
||||||
|
.popupIdentifyForm, .identificationSearchResults {
|
||||||
|
height: 550px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@media all and (min-height: 800px) {
|
@media all and (min-height: 800px) {
|
||||||
|
|
||||||
.availableImagesList {
|
.availableImagesList {
|
||||||
height: 600px;
|
height: 600px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.popupIdentifyForm, .identificationSearchResults {
|
||||||
|
height: 600px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media all and (min-height: 900px) {
|
@media all and (min-height: 900px) {
|
||||||
|
@ -237,4 +371,8 @@
|
||||||
.availableImagesList {
|
.availableImagesList {
|
||||||
height: 700px;
|
height: 700px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.popupIdentifyForm, .identificationSearchResults {
|
||||||
|
height: 700px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -182,19 +182,4 @@
|
||||||
.notificationContent p {
|
.notificationContent p {
|
||||||
max-width: 350px;
|
max-width: 350px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media all and (min-width: 600px) {
|
|
||||||
.notificationsFlyout {
|
|
||||||
width: 500px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.imgNotification, .imgNotificationInner {
|
|
||||||
width: 60px;
|
|
||||||
height: 60px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notificationContent p {
|
|
||||||
max-width: 400px;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -253,7 +253,7 @@ h1 .imageLink {
|
||||||
color: #fff!important;
|
color: #fff!important;
|
||||||
text-shadow: none!important;
|
text-shadow: none!important;
|
||||||
font-weight: 400!important;
|
font-weight: 400!important;
|
||||||
font-size: 15px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebarLinks a:hover {
|
.sidebarLinks a:hover {
|
||||||
|
@ -268,7 +268,7 @@ h1 .imageLink {
|
||||||
|
|
||||||
.sidebarDivider {
|
.sidebarDivider {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background: #444;
|
background: #404040;
|
||||||
margin: .25em 0;
|
margin: .25em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,17 +36,18 @@
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div style="vertical-align: bottom; display: inline-block;">
|
<div style="vertical-align: bottom; display: inline-block;">
|
||||||
<div class="fldRefresh" style="display: none;">
|
<button id="btnRefresh" type="button" data-icon="refresh" data-mini="true" data-inline="true">Refresh</button>
|
||||||
<button id="btnRefresh" type="button" data-icon="refresh" data-mini="true" data-inline="true">Refresh</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div style="display: inline-block; vertical-align: top;">
|
<div style="display: inline-block; vertical-align: top;">
|
||||||
<div class="fldRefresh" style="display: none;">
|
|
||||||
<select data-mini="true" data-inline="true" id="selectRefreshMode">
|
<select data-mini="true" data-inline="true" id="selectRefreshMode">
|
||||||
<option value="all">Refresh All Data</option>
|
<option value="all">Refresh All Data</option>
|
||||||
<option value="missing">Add Missing Data Only</option>
|
<option value="missing">Add Missing Data Only</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
|
||||||
|
</div>
|
||||||
|
<div style="vertical-align: bottom; display: inline-block;">
|
||||||
|
<button id="btnIdentify" type="button" data-icon="info" data-mini="true" data-inline="true">Identify</button>
|
||||||
</div>
|
</div>
|
||||||
<div style="vertical-align: bottom; display: inline-block;">
|
<div style="vertical-align: bottom; display: inline-block;">
|
||||||
<div id="fldDelete" style="display: none;">
|
<div id="fldDelete" style="display: none;">
|
||||||
|
@ -380,11 +381,54 @@
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div data-role="popup" data-transition="slidefade" class="popupIdentify popup" data-theme="a">
|
||||||
|
|
||||||
|
<div class="ui-bar-a" style="text-align: center; padding: 0 20px; position: relative;">
|
||||||
|
|
||||||
|
<button type="button" data-icon="search" data-mini="true" data-inline="true" data-iconpos="notext" style="position: absolute; top: 8px; left: 10px; margin: 0;" class="btnSearchAgain">Search</button>
|
||||||
|
|
||||||
|
<h3 class="identificationHeader">Identify Item
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div data-role="content">
|
||||||
|
|
||||||
|
<form class="popupIdentifyForm" style="max-width: initial;">
|
||||||
|
|
||||||
|
<p>Enter one or more search criteria.</p>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label for="txtLookupName">Name:</label>
|
||||||
|
<input type="text" id="txtLookupName" data-mini="true" class="identifyField" data-lookup="Name" />
|
||||||
|
</div>
|
||||||
|
<div class="fldLookupYear">
|
||||||
|
<label for="txtLookupYear">Year:</label>
|
||||||
|
<input type="number" id="txtLookupYear" data-mini="true" class="identifyField" data-lookup="Year" pattern="[0-9]*" min="1800" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="identifyProviderIds">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<button type="submit" data-theme="b" data-icon="search" data-mini="true">
|
||||||
|
Search
|
||||||
|
</button>
|
||||||
|
</p>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div class="identificationSearchResults">
|
||||||
|
|
||||||
|
<div class="identificationSearchResultList"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$('.editItemMetadataForm').off('submit', EditItemMetadataPage.onSubmit).on('submit', EditItemMetadataPage.onSubmit);
|
$('.editItemMetadataForm').off('submit', EditItemMetadataPage.onSubmit).on('submit', EditItemMetadataPage.onSubmit);
|
||||||
$('.popupConfirmDeleteForm').off('submit', EditItemMetadataPage.onDeleteFormSubmitted).on('submit', EditItemMetadataPage.onDeleteFormSubmitted);
|
$('.popupConfirmDeleteForm').off('submit', EditItemMetadataPage.onDeleteFormSubmitted).on('submit', EditItemMetadataPage.onDeleteFormSubmitted);
|
||||||
|
$('.popupIdentifyForm').off('submit', EditItemMetadataPage.onIdentificationFormSubmitted).on('submit', EditItemMetadataPage.onIdentificationFormSubmitted);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
|
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
|
||||||
<a href="advanced.html" data-role="button">General</a>
|
<a href="advanced.html" data-role="button">General</a>
|
||||||
<a href="advancedserversettings.html" data-role="button">Http Server</a>
|
<a href="advancedserversettings.html" data-role="button">Server</a>
|
||||||
<a href="#" data-role="button" class="ui-btn-active">Transcoding</a>
|
<a href="#" data-role="button" class="ui-btn-active">Transcoding</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
155
dashboard-ui/libraryreport.html
Normal file
|
@ -0,0 +1,155 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Media Browser</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="libraryReportPage" data-role="page" data-theme="b" class="page libraryPage metadataEditorPage">
|
||||||
|
<div data-role="content editPageContent">
|
||||||
|
<div class="editPageSidebar">
|
||||||
|
<div class="libraryTree">
|
||||||
|
<ul>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="editPageInnerContent">
|
||||||
|
|
||||||
|
<h1 style="margin-bottom: 0;">Reports</h1>
|
||||||
|
|
||||||
|
<div style="text-align: center;">
|
||||||
|
<div class="viewControls">
|
||||||
|
<span style="margin-right: 10px; vertical-align: middle;">Report:</span>
|
||||||
|
<div style="display: inline-block;">
|
||||||
|
<select data-mini="true" data-inline="true" id="selectView" name="selectView">
|
||||||
|
<option value="AdultVideo">Adult Videos</option>
|
||||||
|
<option value="MusicAlbum">Albums</option>
|
||||||
|
<option value="MusicArtist">Artists</option>
|
||||||
|
<option value="Book">Books</option>
|
||||||
|
<option value="BoxSet">Collections</option>
|
||||||
|
<option value="Episode">Episodes</option>
|
||||||
|
<option value="Game">Games</option>
|
||||||
|
<option value="Video">Home Videos</option>
|
||||||
|
<option value="Movie">Movies</option>
|
||||||
|
<option value="MusicVideo">Music Videos</option>
|
||||||
|
<option value="Trailer">Trailers</option>
|
||||||
|
<option value="Season">Seasons</option>
|
||||||
|
<option value="Series">Series</option>
|
||||||
|
<option value="Audio">Songs</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
|
||||||
|
</div>
|
||||||
|
<div class="listTopPaging">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
|
<div class="reportContainer"></div>
|
||||||
|
|
||||||
|
<div class="listBottomPaging">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
|
||||||
|
<form>
|
||||||
|
|
||||||
|
<fieldset data-role="controlgroup" data-type="horizontal" style="margin-bottom: 1em;">
|
||||||
|
<legend>Filters:</legend>
|
||||||
|
<input type="radio" name="radioFilterTypes" id="radioBasicFilters" value="on" checked="checked" data-mini="true">
|
||||||
|
<label for="radioBasicFilters">Basic</label>
|
||||||
|
<input type="radio" name="radioFilterTypes" id="radioAdvancedFilters" value="off" data-mini="true">
|
||||||
|
<label for="radioAdvancedFilters">Advanced</label>
|
||||||
|
</fieldset>
|
||||||
|
<div class="basicFilters">
|
||||||
|
<fieldset data-role="controlgroup">
|
||||||
|
<legend>
|
||||||
|
<strong>Video Type:</strong>
|
||||||
|
</legend>
|
||||||
|
|
||||||
|
<input class="chkVideoTypeFilter" type="checkbox" name="chkBluray" id="chkBluray" data-filter="Bluray" data-mini="true">
|
||||||
|
<label for="chkBluray">Bluray</label>
|
||||||
|
|
||||||
|
<input class="chkVideoTypeFilter" type="checkbox" name="chkDvd" id="chkDvd" data-filter="Dvd" data-mini="true">
|
||||||
|
<label for="chkDvd">Dvd</label>
|
||||||
|
|
||||||
|
<input class="chkVideoTypeFilter" type="checkbox" name="chkIso" id="chkIso" data-filter="Iso" data-mini="true">
|
||||||
|
<label for="chkIso">Iso</label>
|
||||||
|
|
||||||
|
<input class="chkHDFilter" type="checkbox" name="chkHD" id="chkHD" data-filter="IsHD" data-mini="true">
|
||||||
|
<label for="chkHD">HD</label>
|
||||||
|
|
||||||
|
<input class="chkSDFilter" type="checkbox" name="chkSD" id="chkSD" data-filter="IsHD" data-mini="true">
|
||||||
|
<label for="chkSD">SD</label>
|
||||||
|
|
||||||
|
<input class="chk3DFilter" type="checkbox" name="chk3D" id="chk3D" data-filter="Digital3D,Sbs3D" data-mini="true">
|
||||||
|
<label for="chk3D">3D</label>
|
||||||
|
<input class="chkIsPlaceHolder" type="checkbox" id="chkIsPlaceHolder" data-mini="true">
|
||||||
|
<label for="chkIsPlaceHolder">Stub</label>
|
||||||
|
</fieldset>
|
||||||
|
<br />
|
||||||
|
<fieldset data-role="controlgroup">
|
||||||
|
<legend>
|
||||||
|
<strong>Episodes:</strong>
|
||||||
|
</legend>
|
||||||
|
<input type="checkbox" name="chkSpecialEpisode" id="chkSpecialEpisode" data-mini="true">
|
||||||
|
<label for="chkSpecialEpisode">Season 0</label>
|
||||||
|
|
||||||
|
<input type="checkbox" name="chkMissingEpisode" id="chkMissingEpisode" data-mini="true">
|
||||||
|
<label for="chkMissingEpisode">Missing Episode</label>
|
||||||
|
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="advancedFilters" style="display: none;">
|
||||||
|
|
||||||
|
<fieldset data-role="controlgroup">
|
||||||
|
<legend>
|
||||||
|
<strong>Management:</strong>
|
||||||
|
</legend>
|
||||||
|
|
||||||
|
<input class="chkIsLocked" type="checkbox" id="chkIsLocked" data-mini="true">
|
||||||
|
<label for="chkIsLocked">Locked</label>
|
||||||
|
|
||||||
|
<input class="chkMissingOverview" type="checkbox" name="chkMissingOverview" id="chkMissingOverview" data-mini="true">
|
||||||
|
<label for="chkMissingOverview">Missing Overview</label>
|
||||||
|
|
||||||
|
<input class="chkMissingRating" type="checkbox" name="chkMissingRating" id="chkMissingRating" data-mini="true">
|
||||||
|
<label for="chkMissingRating">Missing Rating</label>
|
||||||
|
|
||||||
|
<input class="chkIsUnidentified" type="checkbox" id="chkIsUnidentified" data-mini="true">
|
||||||
|
<label for="chkIsUnidentified">Unidentified</label>
|
||||||
|
|
||||||
|
<input class="chkYearMismatch" type="checkbox" name="chkYearMismatch" id="chkYearMismatch" data-mini="true">
|
||||||
|
<label for="chkYearMismatch">File/Metadata Years Mismatched</label>
|
||||||
|
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
<fieldset data-role="controlgroup">
|
||||||
|
<legend>
|
||||||
|
<strong>Features:</strong>
|
||||||
|
</legend>
|
||||||
|
|
||||||
|
<input class="chkFeatureFilter" type="checkbox" name="chkSubtitle" id="chkSubtitle" data-mini="true">
|
||||||
|
<label for="chkSubtitle">Subtitles</label>
|
||||||
|
|
||||||
|
<input class="chkFeatureFilter" type="checkbox" name="chkTrailer" id="chkTrailer" data-mini="true">
|
||||||
|
<label for="chkTrailer">Trailer</label>
|
||||||
|
|
||||||
|
<input class="chkFeatureFilter" type="checkbox" name="chkSpecialFeature" id="chkSpecialFeature" data-mini="true">
|
||||||
|
<label for="chkSpecialFeature">Special features</label>
|
||||||
|
|
||||||
|
<input class="chkFeatureFilter" type="checkbox" name="chkThemeSong" id="chkThemeSong" data-mini="true">
|
||||||
|
<label for="chkThemeSong">Theme song</label>
|
||||||
|
|
||||||
|
<input class="chkFeatureFilter" type="checkbox" name="chkThemeVideo" id="chkThemeVideo" data-mini="true">
|
||||||
|
<label for="chkThemeVideo">Theme video</label>
|
||||||
|
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -13,6 +13,8 @@
|
||||||
|
|
||||||
$('#txtPortNumber', page).val(config.HttpServerPortNumber);
|
$('#txtPortNumber', page).val(config.HttpServerPortNumber);
|
||||||
|
|
||||||
|
$('#txtDdns', page).val(config.WanDdns || '');
|
||||||
|
|
||||||
$('#chkEnableUpnp', page).checked(config.EnableUPnP).checkboxradio('refresh');
|
$('#chkEnableUpnp', page).checked(config.EnableUPnP).checkboxradio('refresh');
|
||||||
|
|
||||||
Dashboard.hideLoadingMsg();
|
Dashboard.hideLoadingMsg();
|
||||||
|
@ -49,6 +51,8 @@
|
||||||
config.HttpServerPortNumber = $('#txtPortNumber', form).val();
|
config.HttpServerPortNumber = $('#txtPortNumber', form).val();
|
||||||
config.EnableUPnP = $('#chkEnableUpnp', form).checked();
|
config.EnableUPnP = $('#chkEnableUpnp', form).checked();
|
||||||
|
|
||||||
|
config.WanDdns = $('#txtDdns', form).val();
|
||||||
|
|
||||||
ApiClient.updateServerConfiguration(config).done(Dashboard.processServerConfigurationUpdateResult);
|
ApiClient.updateServerConfiguration(config).done(Dashboard.processServerConfigurationUpdateResult);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -538,6 +538,15 @@
|
||||||
|
|
||||||
$('.libraryTree', page).on('itemclicked', function (event, data) {
|
$('.libraryTree', page).on('itemclicked', function (event, data) {
|
||||||
|
|
||||||
|
if (data.itemType == "libraryreport") {
|
||||||
|
Dashboard.navigate('libraryreport.html');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.itemType == "livetvservice") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (data.id != currentItem.Id) {
|
if (data.id != currentItem.Id) {
|
||||||
|
|
||||||
MetadataEditor.currentItemId = data.id;
|
MetadataEditor.currentItemId = data.id;
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
$.when(promise1, promise2, promise3).done(function (response1, response2, response3) {
|
$.when(promise1, promise2, promise3).done(function (response1, response2, response3) {
|
||||||
|
|
||||||
var item = response1[0];
|
var item = response1[0];
|
||||||
|
|
||||||
currentItem = item;
|
currentItem = item;
|
||||||
|
|
||||||
if (item.Type == "UserRootFolder") {
|
if (item.Type == "UserRootFolder") {
|
||||||
|
@ -271,7 +271,6 @@
|
||||||
$('#fldSortName', page).hide();
|
$('#fldSortName', page).hide();
|
||||||
$('#fldDateAdded', page).hide();
|
$('#fldDateAdded', page).hide();
|
||||||
$('#fldYear', page).hide();
|
$('#fldYear', page).hide();
|
||||||
$('.fldRefresh', page).hide();
|
|
||||||
} else {
|
} else {
|
||||||
$('#tagsCollapsible', page).show();
|
$('#tagsCollapsible', page).show();
|
||||||
$('#metadataSettingsCollapsible', page).show();
|
$('#metadataSettingsCollapsible', page).show();
|
||||||
|
@ -279,7 +278,12 @@
|
||||||
$('#fldSortName', page).show();
|
$('#fldSortName', page).show();
|
||||||
$('#fldDateAdded', page).show();
|
$('#fldDateAdded', page).show();
|
||||||
$('#fldYear', page).show();
|
$('#fldYear', page).show();
|
||||||
$('.fldRefresh', page).show();
|
}
|
||||||
|
|
||||||
|
if (item.Type == "Movie" || item.Type == "Trailer" || item.Type == "AdultVideo" || item.Type == "Series" || item.Type == "Game" || item.Type == "BoxSet" || item.Type == "Person" || item.Type == "Book") {
|
||||||
|
$('#btnIdentify', page).show();
|
||||||
|
} else {
|
||||||
|
$('#btnIdentify', page).hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.Type == "Movie" || item.Type == "Trailer" || item.Type == "BoxSet") {
|
if (item.Type == "Movie" || item.Type == "Trailer" || item.Type == "BoxSet") {
|
||||||
|
@ -713,7 +717,7 @@
|
||||||
Revenue: $('#txtRevenue', form).val(),
|
Revenue: $('#txtRevenue', form).val(),
|
||||||
CriticRating: $('#txtCriticRating', form).val(),
|
CriticRating: $('#txtCriticRating', form).val(),
|
||||||
CriticRatingSummary: $('#txtCriticRatingSummary', form).val(),
|
CriticRatingSummary: $('#txtCriticRatingSummary', form).val(),
|
||||||
IndexNumber: $('#txtIndexNumber', form).val(),
|
IndexNumber: $('#txtIndexNumber', form).val() || null,
|
||||||
DisplaySpecialsWithSeasons: $('#chkDisplaySpecialsInline', form).checked(),
|
DisplaySpecialsWithSeasons: $('#chkDisplaySpecialsInline', form).checked(),
|
||||||
AbsoluteEpisodeNumber: $('#txtAbsoluteEpisodeNumber', form).val(),
|
AbsoluteEpisodeNumber: $('#txtAbsoluteEpisodeNumber', form).val(),
|
||||||
DvdEpisodeNumber: $('#txtDvdEpisodeNumber', form).val(),
|
DvdEpisodeNumber: $('#txtDvdEpisodeNumber', form).val(),
|
||||||
|
@ -721,7 +725,7 @@
|
||||||
AirsBeforeSeasonNumber: $('#txtAirsBeforeSeason', form).val(),
|
AirsBeforeSeasonNumber: $('#txtAirsBeforeSeason', form).val(),
|
||||||
AirsAfterSeasonNumber: $('#txtAirsAfterSeason', form).val(),
|
AirsAfterSeasonNumber: $('#txtAirsAfterSeason', form).val(),
|
||||||
AirsBeforeEpisodeNumber: $('#txtAirsBeforeEpisode', form).val(),
|
AirsBeforeEpisodeNumber: $('#txtAirsBeforeEpisode', form).val(),
|
||||||
ParentIndexNumber: $('#txtParentIndexNumber', form).val(),
|
ParentIndexNumber: $('#txtParentIndexNumber', form).val() || null,
|
||||||
DisplayOrder: $('#selectDisplayOrder', form).val(),
|
DisplayOrder: $('#selectDisplayOrder', form).val(),
|
||||||
Players: $('#txtPlayers', form).val(),
|
Players: $('#txtPlayers', form).val(),
|
||||||
Album: $('#txtAlbum', form).val(),
|
Album: $('#txtAlbum', form).val(),
|
||||||
|
@ -809,6 +813,10 @@
|
||||||
|
|
||||||
Dashboard.alert('Item saved.');
|
Dashboard.alert('Item saved.');
|
||||||
|
|
||||||
|
MetadataEditor.getItemPromise().done(function (i) {
|
||||||
|
$(form).parents('.page').trigger('itemsaved', [i]);
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -851,10 +859,217 @@
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
self.onIdentificationFormSubmitted = function () {
|
||||||
|
|
||||||
|
var page = $(this).parents('.page');
|
||||||
|
|
||||||
|
searchForIdentificationResults(page);
|
||||||
|
return false;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
window.EditItemMetadataPage = new editItemMetadataPage();
|
window.EditItemMetadataPage = new editItemMetadataPage();
|
||||||
|
|
||||||
|
function showIdentificationForm(page) {
|
||||||
|
|
||||||
|
var item = currentItem;
|
||||||
|
|
||||||
|
$.getJSON(ApiClient.getUrl("Items/" + item.Id + "/ExternalIdInfos")).done(function (idList) {
|
||||||
|
|
||||||
|
var html = '';
|
||||||
|
|
||||||
|
var providerIds = item.ProviderIds || {};
|
||||||
|
|
||||||
|
for (var i = 0, length = idList.length; i < length; i++) {
|
||||||
|
|
||||||
|
var idInfo = idList[i];
|
||||||
|
|
||||||
|
var id = "txtLookup" + idInfo.Key;
|
||||||
|
|
||||||
|
html += '<div data-role="fieldcontain">';
|
||||||
|
html += '<label for="' + id + '">' + idInfo.Name + ' Id:</label>';
|
||||||
|
|
||||||
|
var value = providerIds[idInfo.Key] || '';
|
||||||
|
|
||||||
|
html += '<input class="txtLookupId" value="' + value + '" data-providerkey="' + idInfo.Key + '" id="' + id + '" data-mini="true" />';
|
||||||
|
|
||||||
|
html += '</div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#txtLookupName', page).val(item.Name);
|
||||||
|
|
||||||
|
if (item.Type == "Person" || item.Type == "BoxSet") {
|
||||||
|
|
||||||
|
$('.fldLookupYear', page).hide();
|
||||||
|
$('#txtLookupYear', page).val('');
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$('.fldLookupYear', page).show();
|
||||||
|
$('#txtLookupYear', page).val(item.ProductionYear);
|
||||||
|
}
|
||||||
|
|
||||||
|
$('.identifyProviderIds', page).html(html).trigger('create');
|
||||||
|
|
||||||
|
var friendlyName = item.Type == "BoxSet" ? "Collection" : item.Type;
|
||||||
|
|
||||||
|
$('.identificationHeader', page).html('Identify ' + friendlyName);
|
||||||
|
|
||||||
|
$('.popupIdentifyForm', page).show();
|
||||||
|
$('.identificationSearchResults', page).hide();
|
||||||
|
$('.btnSearchAgain', page).hide();
|
||||||
|
|
||||||
|
$('.popupIdentify', page).popup('open');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function searchForIdentificationResults(page) {
|
||||||
|
|
||||||
|
var lookupInfo = {
|
||||||
|
ProviderIds: {}
|
||||||
|
};
|
||||||
|
|
||||||
|
$('.identifyField', page).each(function () {
|
||||||
|
|
||||||
|
var value = this.value;
|
||||||
|
|
||||||
|
if (value) {
|
||||||
|
|
||||||
|
if (this.type == 'number') {
|
||||||
|
value = parseInt(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
lookupInfo[this.getAttribute('data-lookup')] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
var hasId = false;
|
||||||
|
|
||||||
|
$('.txtLookupId', page).each(function () {
|
||||||
|
|
||||||
|
var value = this.value;
|
||||||
|
|
||||||
|
if (value) {
|
||||||
|
hasId = true;
|
||||||
|
}
|
||||||
|
lookupInfo.ProviderIds[this.getAttribute('data-providerkey')] = value;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!hasId && !lookupInfo.Name) {
|
||||||
|
Dashboard.alert('Please enter a name or an external Id.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentItem.GameSystem) {
|
||||||
|
lookupInfo.GameSystem = currentItem.GameSystem;
|
||||||
|
}
|
||||||
|
|
||||||
|
lookupInfo = {
|
||||||
|
SearchInfo: lookupInfo,
|
||||||
|
IncludeDisabledProviders: true
|
||||||
|
};
|
||||||
|
|
||||||
|
Dashboard.showLoadingMsg();
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
url: ApiClient.getUrl("Items/RemoteSearch/" + currentItem.Type),
|
||||||
|
data: JSON.stringify(lookupInfo),
|
||||||
|
contentType: "application/json"
|
||||||
|
|
||||||
|
}).done(function (results) {
|
||||||
|
|
||||||
|
Dashboard.hideLoadingMsg();
|
||||||
|
showIdentificationSearchResults(page, results);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function getSearchImageDisplayUrl(url, provider) {
|
||||||
|
return ApiClient.getUrl("Items/RemoteSearch/Image", { imageUrl: url, ProviderName: provider });
|
||||||
|
}
|
||||||
|
|
||||||
|
function showIdentificationSearchResults(page, results) {
|
||||||
|
|
||||||
|
$('.popupIdentifyForm', page).hide();
|
||||||
|
$('.identificationSearchResults', page).show();
|
||||||
|
$('.btnSearchAgain', page).show();
|
||||||
|
|
||||||
|
var html = '';
|
||||||
|
|
||||||
|
for (var i = 0, length = results.length; i < length; i++) {
|
||||||
|
|
||||||
|
var result = results[i];
|
||||||
|
|
||||||
|
var cssClass = "searchImageContainer remoteImageContainer";
|
||||||
|
|
||||||
|
if (currentItem.Type == "Episode") {
|
||||||
|
cssClass += " searchBackdropImageContainer";
|
||||||
|
}
|
||||||
|
else if (currentItem.Type == "MusicAlbum" || currentItem.Type == "MusicArtist") {
|
||||||
|
cssClass += " searchDiscImageContainer";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cssClass += " searchPosterImageContainer";
|
||||||
|
}
|
||||||
|
|
||||||
|
html += '<div class="' + cssClass + '">';
|
||||||
|
|
||||||
|
if (result.ImageUrl) {
|
||||||
|
var displayUrl = getSearchImageDisplayUrl(result.ImageUrl, result.SearchProviderName);
|
||||||
|
|
||||||
|
html += '<a href="#" class="searchImage" data-index="' + i + '" style="background-image:url(\'' + displayUrl + '\');">';
|
||||||
|
} else {
|
||||||
|
|
||||||
|
html += '<a href="#" class="searchImage" data-index="' + i + '" style="background-image:url(\'css/images/items/list/remotesearch.png\');background-position: center center;">';
|
||||||
|
}
|
||||||
|
html += '</a>';
|
||||||
|
|
||||||
|
html += '<div class="remoteImageDetails">';
|
||||||
|
html += result.Name;
|
||||||
|
html += '</div>';
|
||||||
|
|
||||||
|
html += '<div class="remoteImageDetails">';
|
||||||
|
html += result.ProductionYear || ' ';
|
||||||
|
html += '</div>';
|
||||||
|
|
||||||
|
if (result.GameSystem) {
|
||||||
|
html += '<div class="remoteImageDetails">';
|
||||||
|
html += result.GameSystem;
|
||||||
|
html += '</div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
html += '</div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
var elem = $('.identificationSearchResultList', page).html(html).trigger('create');
|
||||||
|
|
||||||
|
$('.searchImage', elem).on('click', function () {
|
||||||
|
|
||||||
|
Dashboard.showLoadingMsg();
|
||||||
|
|
||||||
|
var index = parseInt(this.getAttribute('data-index'));
|
||||||
|
|
||||||
|
var currentResult = results[index];
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
url: ApiClient.getUrl("Items/RemoteSearch/Apply/" + currentItem.Id),
|
||||||
|
data: JSON.stringify(currentResult),
|
||||||
|
contentType: "application/json"
|
||||||
|
|
||||||
|
}).done(function () {
|
||||||
|
|
||||||
|
Dashboard.hideLoadingMsg();
|
||||||
|
|
||||||
|
$('.popupIdentify', page).popup('close');
|
||||||
|
|
||||||
|
reload(page);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
$(document).on('pageinit', "#editItemMetadataPage", function () {
|
$(document).on('pageinit', "#editItemMetadataPage", function () {
|
||||||
|
|
||||||
var page = this;
|
var page = this;
|
||||||
|
@ -900,6 +1115,19 @@
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('#btnIdentify', page).on('click', function () {
|
||||||
|
|
||||||
|
showIdentificationForm(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.btnSearchAgain', page).on('click', function () {
|
||||||
|
|
||||||
|
$('.popupIdentifyForm', page).show();
|
||||||
|
$('.identificationSearchResults', page).hide();
|
||||||
|
$('.btnSearchAgain', page).hide();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
function getRandomInt(min, max) {
|
function getRandomInt(min, max) {
|
||||||
return Math.floor(Math.random() * (max - min + 1) + min);
|
return Math.floor(Math.random() * (max - min + 1) + min);
|
||||||
}
|
}
|
||||||
|
@ -937,6 +1165,11 @@
|
||||||
|
|
||||||
$('.libraryTree', page).on('itemclicked', function (event, data) {
|
$('.libraryTree', page).on('itemclicked', function (event, data) {
|
||||||
|
|
||||||
|
if (data.itemType == "libraryreport") {
|
||||||
|
Dashboard.navigate('libraryreport.html');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (data.itemType == "livetvservice") {
|
if (data.itemType == "livetvservice") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -254,6 +254,15 @@
|
||||||
|
|
||||||
$('.libraryTree', page).on('itemclicked', function (event, data) {
|
$('.libraryTree', page).on('itemclicked', function (event, data) {
|
||||||
|
|
||||||
|
if (data.itemType == "libraryreport") {
|
||||||
|
Dashboard.navigate('libraryreport.html');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.itemType == "livetvservice") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (data.id != currentItem.Id) {
|
if (data.id != currentItem.Id) {
|
||||||
MetadataEditor.currentItemId = data.id;
|
MetadataEditor.currentItemId = data.id;
|
||||||
MetadataEditor.currentItemName = data.itemName;
|
MetadataEditor.currentItemName = data.itemName;
|
||||||
|
|
|
@ -4,6 +4,15 @@
|
||||||
|
|
||||||
var state = item.IsFolder ? folderState : '';
|
var state = item.IsFolder ? folderState : '';
|
||||||
|
|
||||||
|
var htmlName = getNodeInnerHtml(item);
|
||||||
|
|
||||||
|
var rel = item.IsFolder ? 'folder' : 'default';
|
||||||
|
|
||||||
|
return { attr: { id: item.Id, rel: rel, itemtype: item.Type }, data: htmlName, state: state };
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNodeInnerHtml(item) {
|
||||||
|
|
||||||
var name = item.Name;
|
var name = item.Name;
|
||||||
|
|
||||||
// Channel number
|
// Channel number
|
||||||
|
@ -62,12 +71,10 @@
|
||||||
|
|
||||||
htmlName += "</div>";
|
htmlName += "</div>";
|
||||||
|
|
||||||
var rel = item.IsFolder ? 'folder' : 'default';
|
return htmlName;
|
||||||
|
|
||||||
return { attr: { id: item.Id, rel: rel, itemtype: item.Type }, data: htmlName, state: state };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadChildrenOfRootNode(callback, openItems) {
|
function loadChildrenOfRootNode(page, callback, openItems, selectedId) {
|
||||||
|
|
||||||
var promise1 = $.getJSON(ApiClient.getUrl("Library/MediaFolders"));
|
var promise1 = $.getJSON(ApiClient.getUrl("Library/MediaFolders"));
|
||||||
|
|
||||||
|
@ -95,9 +102,7 @@
|
||||||
|
|
||||||
var name = service.Name;
|
var name = service.Name;
|
||||||
|
|
||||||
var cssClass = "editorNode";
|
var htmlName = "<div class='editorNode'>";
|
||||||
|
|
||||||
var htmlName = "<div class='" + cssClass + "'>";
|
|
||||||
|
|
||||||
htmlName += name;
|
htmlName += name;
|
||||||
|
|
||||||
|
@ -106,8 +111,18 @@
|
||||||
nodes.push({ attr: { id: name, rel: 'folder', itemtype: 'livetvservice' }, data: htmlName, state: 'closed' });
|
nodes.push({ attr: { id: name, rel: 'folder', itemtype: 'livetvservice' }, data: htmlName, state: 'closed' });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nodes.push({ attr: { id: 'libraryreport', rel: 'default', itemtype: 'libraryreport' }, data: 'Reports' });
|
||||||
|
|
||||||
callback(nodes);
|
callback(nodes);
|
||||||
|
|
||||||
|
if (selectedId && nodes.filter(function (f) {
|
||||||
|
|
||||||
|
return f.attr.id == selectedId;
|
||||||
|
|
||||||
|
}).length) {
|
||||||
|
|
||||||
|
selectNode(page, selectedId);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,7 +148,7 @@
|
||||||
|
|
||||||
if (node == '-1') {
|
if (node == '-1') {
|
||||||
|
|
||||||
loadChildrenOfRootNode(callback, openItems);
|
loadChildrenOfRootNode(page, callback, openItems, selectedId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,6 +156,11 @@
|
||||||
|
|
||||||
var itemtype = node.attr("itemtype");
|
var itemtype = node.attr("itemtype");
|
||||||
|
|
||||||
|
if (itemtype == 'libraryreport') {
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (itemtype == 'livetvservice') {
|
if (itemtype == 'livetvservice') {
|
||||||
|
|
||||||
loadLiveTvChannels(id, openItems, callback);
|
loadLiveTvChannels(id, openItems, callback);
|
||||||
|
@ -231,8 +251,32 @@
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateEditorNode(page, item) {
|
||||||
|
|
||||||
$(document).on('pagebeforeshow', ".metadataEditorPage", function () {
|
var elem = $('#' + item.Id + '>a', page)[0];
|
||||||
|
|
||||||
|
if (elem == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$('.editorNode', elem).remove();
|
||||||
|
|
||||||
|
$(elem).append(getNodeInnerHtml(item));
|
||||||
|
|
||||||
|
if (item.IsFolder) {
|
||||||
|
|
||||||
|
var tree = jQuery.jstree._reference(".libraryTree");
|
||||||
|
var currentNode = tree._get_node(null, false);
|
||||||
|
tree.refresh(currentNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).on('itemsaved', ".metadataEditorPage", function (e, item) {
|
||||||
|
|
||||||
|
updateEditorNode(this, item);
|
||||||
|
|
||||||
|
}).on('pagebeforeshow', ".metadataEditorPage", function () {
|
||||||
|
|
||||||
window.MetadataEditor = new metadataEditor();
|
window.MetadataEditor = new metadataEditor();
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
$('#editButtonContainer', page).hide();
|
$('#editButtonContainer', page).hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MediaPlayer.canPlay(item, user) && item.LocationType !== "Offline" && item.LocationType !== "Virtual") {
|
if (MediaPlayer.canPlay(item, user)) {
|
||||||
|
|
||||||
var url = MediaPlayer.getPlayUrl(item);
|
var url = MediaPlayer.getPlayUrl(item);
|
||||||
|
|
||||||
|
|
|
@ -373,9 +373,9 @@
|
||||||
if (sortField == selectedSortField) {
|
if (sortField == selectedSortField) {
|
||||||
|
|
||||||
if (sortDirection == "Descending") {
|
if (sortDirection == "Descending") {
|
||||||
html += '<span style="font-weight:bold;margin-left:3px;">↓</span>';
|
html += '<span style="font-weight:bold;margin-left:5px;vertical-align:top;font-size:12px;">↓</span>';
|
||||||
} else {
|
} else {
|
||||||
html += '<span style="font-weight:bold;margin-left:3px;">↑</span>';
|
html += '<span style="font-weight:bold;margin-left:5px;vertical-align:top;font-size:12px;">↑</span>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -906,6 +906,10 @@
|
||||||
html += LibraryBrowser.getPlayedIndicatorHtml(item);
|
html += LibraryBrowser.getPlayedIndicatorHtml(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (item.IsUnidentified) {
|
||||||
|
html += '<div class="unidentifiedIndicator"><div class="ui-icon-alert ui-btn-icon-notext"></div></div>';
|
||||||
|
}
|
||||||
|
|
||||||
if (!options.overlayText) {
|
if (!options.overlayText) {
|
||||||
|
|
||||||
if (progressHtml) {
|
if (progressHtml) {
|
||||||
|
@ -1359,7 +1363,7 @@
|
||||||
|
|
||||||
html += '<div class="listPaging">';
|
html += '<div class="listPaging">';
|
||||||
|
|
||||||
html += '<span style="margin-right: 10px;">';
|
html += '<span style="margin-right: 10px;vertical-align:middle;">';
|
||||||
|
|
||||||
var startAtDisplay = totalRecordCount ? query.StartIndex + 1 : 0;
|
var startAtDisplay = totalRecordCount ? query.StartIndex + 1 : 0;
|
||||||
html += startAtDisplay + '-' + recordsEnd + ' of ' + totalRecordCount;
|
html += startAtDisplay + '-' + recordsEnd + ' of ' + totalRecordCount;
|
||||||
|
@ -1756,7 +1760,8 @@
|
||||||
if (item.Status == "Continuing") {
|
if (item.Status == "Continuing") {
|
||||||
miscInfo.push(item.ProductionYear + "-Present");
|
miscInfo.push(item.ProductionYear + "-Present");
|
||||||
|
|
||||||
} else if (item.ProductionYear) {
|
}
|
||||||
|
else if (item.ProductionYear) {
|
||||||
|
|
||||||
text = item.ProductionYear;
|
text = item.ProductionYear;
|
||||||
|
|
||||||
|
|
721
dashboard-ui/scripts/libraryreport.js
Normal file
|
@ -0,0 +1,721 @@
|
||||||
|
(function ($, document, window) {
|
||||||
|
|
||||||
|
// The base query options
|
||||||
|
var query = {
|
||||||
|
|
||||||
|
SortBy: "SeriesSortName,SortName",
|
||||||
|
SortOrder: "Ascending",
|
||||||
|
Recursive: true,
|
||||||
|
Fields: "MediaStreams,DateCreated,Settings,Studios",
|
||||||
|
StartIndex: 0,
|
||||||
|
IncludeItemTypes: "Movie",
|
||||||
|
IsMissing: false,
|
||||||
|
IsVirtualUnaired: false
|
||||||
|
};
|
||||||
|
|
||||||
|
function getHeaderCells(reportType) {
|
||||||
|
|
||||||
|
switch (reportType) {
|
||||||
|
|
||||||
|
case 'Season':
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
{},
|
||||||
|
{ name: 'Series' },
|
||||||
|
{ name: 'Season' },
|
||||||
|
{ name: 'Date Added' }
|
||||||
|
];
|
||||||
|
}
|
||||||
|
case 'Series':
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
{},
|
||||||
|
{ name: 'Name' },
|
||||||
|
{ name: 'Network' },
|
||||||
|
{ name: 'Date Added' },
|
||||||
|
{ name: 'Year' },
|
||||||
|
{ name: 'Rating' },
|
||||||
|
{ name: 'Runtime' },
|
||||||
|
{ name: 'Trailers' },
|
||||||
|
{ name: 'Specials' }
|
||||||
|
];
|
||||||
|
}
|
||||||
|
case 'Game':
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
{},
|
||||||
|
{ name: 'Name' },
|
||||||
|
{ name: 'Game System' },
|
||||||
|
{ name: 'Date Added' },
|
||||||
|
{ name: 'Release Date' },
|
||||||
|
{ name: 'Rating' },
|
||||||
|
{ name: 'Players' },
|
||||||
|
{ name: 'Trailers' }
|
||||||
|
];
|
||||||
|
}
|
||||||
|
case 'Audio':
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
{},
|
||||||
|
{ name: 'Album Artist' },
|
||||||
|
{ name: 'Album' },
|
||||||
|
{ name: 'Track' },
|
||||||
|
{ name: 'Name' },
|
||||||
|
{ name: 'Date Added' },
|
||||||
|
{ name: 'Release Date' },
|
||||||
|
{ name: 'Runtime' },
|
||||||
|
{ name: 'Audio' },
|
||||||
|
{ name: 'Embedded Image' }
|
||||||
|
];
|
||||||
|
}
|
||||||
|
case 'Episode':
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
{},
|
||||||
|
{ name: 'Series' },
|
||||||
|
{ name: 'Season' },
|
||||||
|
{ name: 'Name' },
|
||||||
|
{ name: 'Date Added' },
|
||||||
|
{ name: 'Release Date' },
|
||||||
|
{ name: 'Runtime' },
|
||||||
|
{ name: 'Video' },
|
||||||
|
{ name: 'Audio' },
|
||||||
|
{ name: 'Subtitles' }
|
||||||
|
];
|
||||||
|
}
|
||||||
|
case 'BoxSet':
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
{},
|
||||||
|
{ name: 'Name' },
|
||||||
|
{ name: 'Date Added' },
|
||||||
|
{ name: 'Release Date' },
|
||||||
|
{ name: 'Rating' },
|
||||||
|
{ name: 'Trailers' }
|
||||||
|
];
|
||||||
|
}
|
||||||
|
case 'Book':
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
{},
|
||||||
|
{ name: 'Series' },
|
||||||
|
{ name: 'Name' },
|
||||||
|
{ name: 'Date Added' },
|
||||||
|
{ name: 'Release Date' },
|
||||||
|
{ name: 'Rating' }
|
||||||
|
];
|
||||||
|
}
|
||||||
|
case 'MusicArtist':
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
{},
|
||||||
|
{ name: 'Name' },
|
||||||
|
{ name: 'Date Added' }
|
||||||
|
];
|
||||||
|
}
|
||||||
|
case 'MusicAlbum':
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
{},
|
||||||
|
{ name: 'Album Artist' },
|
||||||
|
{ name: 'Name' },
|
||||||
|
{ name: 'Date Added' },
|
||||||
|
{ name: 'Release Date' },
|
||||||
|
{ name: 'Rating' },
|
||||||
|
{ name: 'Runtime' }
|
||||||
|
];
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
{},
|
||||||
|
{ name: 'Name' },
|
||||||
|
{ name: 'Date Added' },
|
||||||
|
{ name: 'Release Date' },
|
||||||
|
{ name: 'Rating' },
|
||||||
|
{ name: 'Runtime' },
|
||||||
|
{ name: 'Video' },
|
||||||
|
{ name: 'Audio' },
|
||||||
|
{ name: 'Subtitles' },
|
||||||
|
{ name: 'Trailers' },
|
||||||
|
{ name: 'Specials' }
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getItemCellsHtml(item, headercells) {
|
||||||
|
|
||||||
|
return headercells.map(function (cell) {
|
||||||
|
|
||||||
|
var html = '';
|
||||||
|
html += '<td>';
|
||||||
|
|
||||||
|
switch (cell.type || cell.name) {
|
||||||
|
|
||||||
|
case 'Album Artist':
|
||||||
|
{
|
||||||
|
html += item.AlbumArtist || ' ';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'Album':
|
||||||
|
{
|
||||||
|
html += item.Album || ' ';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'Series':
|
||||||
|
{
|
||||||
|
html += item.SeriesName || ' ';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'Game System':
|
||||||
|
{
|
||||||
|
html += item.GameSystem || ' ';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'Network':
|
||||||
|
{
|
||||||
|
html += item.Studios.length ? item.Studios[0].Name : ' ';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'Track':
|
||||||
|
{
|
||||||
|
html += item.IndexNumber == null ? '' : item.IndexNumber;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'Players':
|
||||||
|
{
|
||||||
|
html += item.Players || ' ';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'Audio':
|
||||||
|
{
|
||||||
|
var stream = (item.MediaStreams || []).filter(function (s) {
|
||||||
|
|
||||||
|
return s.Type == 'Audio';
|
||||||
|
|
||||||
|
})[0];
|
||||||
|
|
||||||
|
if (stream) {
|
||||||
|
|
||||||
|
var name = (stream.Codec || '').toUpperCase();
|
||||||
|
html += name == 'DCA' ? (stream.Profile || '').toUpperCase() : name;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'Video':
|
||||||
|
{
|
||||||
|
var stream = (item.MediaStreams || []).filter(function (s) {
|
||||||
|
|
||||||
|
return s.Type == 'Video';
|
||||||
|
|
||||||
|
})[0];
|
||||||
|
|
||||||
|
if (stream) {
|
||||||
|
html += (stream.Codec || '').toUpperCase();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'Embedded Image':
|
||||||
|
{
|
||||||
|
if ((item.MediaStreams || []).filter(function (s) {
|
||||||
|
|
||||||
|
return s.Type == 'Video';
|
||||||
|
|
||||||
|
}).length) {
|
||||||
|
html += '<div class="libraryReportIndicator clearLibraryReportIndicator"><div class="ui-icon-check ui-btn-icon-notext"></div></div>';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'Subtitles':
|
||||||
|
{
|
||||||
|
var hasSubtitles = (item.MediaStreams || []).filter(function (s) {
|
||||||
|
|
||||||
|
return s.Type == 'Subtitle';
|
||||||
|
|
||||||
|
}).length;
|
||||||
|
|
||||||
|
if (hasSubtitles) {
|
||||||
|
html += '<div class="libraryReportIndicator clearLibraryReportIndicator"><div class="ui-icon-check ui-btn-icon-notext"></div></div>';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'Runtime':
|
||||||
|
{
|
||||||
|
if (item.RunTimeTicks) {
|
||||||
|
html += Dashboard.getDisplayTime(item.RunTimeTicks);
|
||||||
|
} else {
|
||||||
|
html += ' ';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'Trailers':
|
||||||
|
{
|
||||||
|
if (item.LocalTrailerCount) {
|
||||||
|
|
||||||
|
html += '<div class="libraryReportIndicator clearLibraryReportIndicator"><div class="ui-icon-check ui-btn-icon-notext"></div></div>';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'Specials':
|
||||||
|
{
|
||||||
|
if (item.SpecialFeatureCount) {
|
||||||
|
|
||||||
|
html += '<div class="libraryReportIndicator clearLibraryReportIndicator"><div class="ui-icon-check ui-btn-icon-notext"></div></div>';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'Season':
|
||||||
|
{
|
||||||
|
if (item.Type == "Episode") {
|
||||||
|
html += item.ParentIndexNumber == null ? '' : ('Season ' + item.ParentIndexNumber);
|
||||||
|
} else {
|
||||||
|
html += '<a href="edititemmetadata.html?id=' + item.Id + '">' + LibraryBrowser.getPosterViewDisplayName(item, false, false) + '</a>';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'Name':
|
||||||
|
{
|
||||||
|
html += '<a href="edititemmetadata.html?id=' + item.Id + '">' + LibraryBrowser.getPosterViewDisplayName(item, false, false) + '</a>';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'Rating':
|
||||||
|
{
|
||||||
|
html += item.OfficialRating || ' ';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'Year':
|
||||||
|
case 'Release Date':
|
||||||
|
{
|
||||||
|
if (item.PremiereDate && item.Type != "Series") {
|
||||||
|
try {
|
||||||
|
var date = parseISO8601Date(item.PremiereDate, { toLocal: true });
|
||||||
|
|
||||||
|
html += date.toLocaleDateString();
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
html += ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (item.ProductionYear) {
|
||||||
|
html += item.ProductionYear;
|
||||||
|
|
||||||
|
if (item.Status == "Continuing") {
|
||||||
|
html += "-Present";
|
||||||
|
}
|
||||||
|
else if (item.EndDate) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
var endYear = parseISO8601Date(item.EndDate, { toLocal: true }).getFullYear();
|
||||||
|
|
||||||
|
if (endYear != item.ProductionYear) {
|
||||||
|
html += "-" + parseISO8601Date(item.EndDate, { toLocal: true }).getFullYear();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
console.log("Error parsing date: " + item.EndDate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
html += ' ';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'Date Added':
|
||||||
|
{
|
||||||
|
if (item.DateCreated) {
|
||||||
|
try {
|
||||||
|
html += parseISO8601Date(item.DateCreated, { toLocal: true }).toLocaleDateString();
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
html += ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
if (item.LockData) {
|
||||||
|
html += '<img src="css/images/editor/lock.png" />';
|
||||||
|
}
|
||||||
|
if (item.IsUnidentified) {
|
||||||
|
html += '<div class="libraryReportIndicator"><div class="ui-icon-alert ui-btn-icon-notext"></div></div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!item.LocalTrailerCount && item.Type == "Movie") {
|
||||||
|
html += '<img src="css/images/editor/missingtrailer.png" title="Missing local trailer." />';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!item.ImageTags || !item.ImageTags.Primary) {
|
||||||
|
html += '<a href="edititemimages.html?id=' + item.Id + '"><img src="css/images/editor/missingprimaryimage.png" title="Missing primary image." /></a>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!item.BackdropImageTags || !item.BackdropImageTags.length) {
|
||||||
|
if (item.Type !== "Episode" && item.Type !== "Season" && item.MediaType !== "Audio" && item.Type !== "Channel") {
|
||||||
|
html += '<a href="edititemimages.html?id=' + item.Id + '"><img src="css/images/editor/missingbackdrop.png" title="Missing backdrop image." /></a>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!item.ImageTags || !item.ImageTags.Logo) {
|
||||||
|
if (item.Type == "Movie" || item.Type == "Trailer" || item.Type == "Series" || item.Type == "MusicArtist" || item.Type == "BoxSet") {
|
||||||
|
html += '<a href="edititemimages.html?id=' + item.Id + '"><img src="css/images/editor/missinglogo.png" title="Missing logo image." /></a>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
html += '</td>';
|
||||||
|
return html;
|
||||||
|
|
||||||
|
}).join('');
|
||||||
|
}
|
||||||
|
|
||||||
|
function getReportHtml(items, reportType) {
|
||||||
|
|
||||||
|
var html = '';
|
||||||
|
|
||||||
|
html += '<table data-role="table" data-mode="reflow" class="tblLibraryReport detailTable stripedTable ui-responsive table-stroke" style="display: table;">';
|
||||||
|
|
||||||
|
html += '<thead>';
|
||||||
|
html += '<tr>';
|
||||||
|
|
||||||
|
var cells = getHeaderCells(reportType);
|
||||||
|
|
||||||
|
html += cells.map(function (c) {
|
||||||
|
|
||||||
|
return '<th>' + (c.name || ' ') + '</th>';
|
||||||
|
|
||||||
|
}).join('');
|
||||||
|
|
||||||
|
html += '</tr>';
|
||||||
|
html += '</thead>';
|
||||||
|
|
||||||
|
html += '<tbody>';
|
||||||
|
|
||||||
|
for (var i = 0, length = items.length; i < length; i++) {
|
||||||
|
|
||||||
|
var item = items[i];
|
||||||
|
|
||||||
|
html += '<tr>';
|
||||||
|
html += getItemCellsHtml(item, cells);
|
||||||
|
html += '</tr>';
|
||||||
|
}
|
||||||
|
|
||||||
|
html += '</tbody>';
|
||||||
|
|
||||||
|
html += '</table>';
|
||||||
|
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderItems(page, result, reportType) {
|
||||||
|
|
||||||
|
// Scroll back up so they can see the results from the beginning
|
||||||
|
$(document).scrollTop(0);
|
||||||
|
|
||||||
|
$('.listTopPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, true)).trigger('create');
|
||||||
|
|
||||||
|
updateFilterControls(page);
|
||||||
|
|
||||||
|
$('.listBottomPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount)).trigger('create');
|
||||||
|
|
||||||
|
$('.reportContainer', page).html(getReportHtml(result.Items, reportType)).trigger('create');
|
||||||
|
|
||||||
|
$('.btnNextPage', page).on('click', function () {
|
||||||
|
query.StartIndex += query.Limit;
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.btnPreviousPage', page).on('click', function () {
|
||||||
|
query.StartIndex -= query.Limit;
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.selectPageSize', page).on('change', function () {
|
||||||
|
query.Limit = parseInt(this.value);
|
||||||
|
query.StartIndex = 0;
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function reloadItems(page) {
|
||||||
|
|
||||||
|
var url = ApiClient.getUrl("Items", query);
|
||||||
|
var reportType = $('#selectView', page).val();
|
||||||
|
|
||||||
|
$.getJSON(url).done(function (result) {
|
||||||
|
|
||||||
|
renderItems(page, result, reportType);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateFilterControls(page) {
|
||||||
|
|
||||||
|
$('#selectView').val(query.IncludeItemTypes).selectmenu('refresh');
|
||||||
|
|
||||||
|
$('.chkVideoTypeFilter', page).each(function () {
|
||||||
|
|
||||||
|
var filters = "," + (query.VideoTypes || "");
|
||||||
|
var filterName = this.getAttribute('data-filter');
|
||||||
|
|
||||||
|
this.checked = filters.indexOf(',' + filterName) != -1;
|
||||||
|
|
||||||
|
}).checkboxradio('refresh');
|
||||||
|
|
||||||
|
$('#chk3D', page).checked(query.Is3D == true).checkboxradio('refresh');
|
||||||
|
$('#chkHD', page).checked(query.IsHD == true).checkboxradio('refresh');
|
||||||
|
$('#chkSD', page).checked(query.IsHD == false).checkboxradio('refresh');
|
||||||
|
|
||||||
|
$('#chkSubtitle', page).checked(query.HasSubtitles == true).checkboxradio('refresh');
|
||||||
|
$('#chkTrailer', page).checked(query.HasTrailer == true).checkboxradio('refresh');
|
||||||
|
$('#chkSpecialFeature', page).checked(query.HasSpecialFeature == true).checkboxradio('refresh');
|
||||||
|
$('#chkThemeSong', page).checked(query.HasThemeSong == true).checkboxradio('refresh');
|
||||||
|
$('#chkThemeVideo', page).checked(query.HasThemeVideo == true).checkboxradio('refresh');
|
||||||
|
$('#chkIsPlaceHolder', page).checked(query.IsPlaceHolder == true).checkboxradio('refresh');
|
||||||
|
|
||||||
|
$('#chkMissingRating', page).checked(query.HasOfficialRating == false).checkboxradio('refresh');
|
||||||
|
$('#chkMissingOverview', page).checked(query.HasOverview == false).checkboxradio('refresh');
|
||||||
|
$('#chkYearMismatch', page).checked(query.IsYearMismatched == true).checkboxradio('refresh');
|
||||||
|
|
||||||
|
$('#chkIsUnidentified', page).checked(query.IsUnidentified == true).checkboxradio('refresh');
|
||||||
|
$('#chkIsLocked', page).checked(query.IsLocked == true).checkboxradio('refresh');
|
||||||
|
|
||||||
|
$('#chkSpecialEpisode', page).checked(query.ParentIndexNumber == 0).checkboxradio('refresh');
|
||||||
|
$('#chkMissingEpisode', page).checked(query.IsMissing == true).checkboxradio('refresh');
|
||||||
|
$('#chkFutureEpisode', page).checked(query.IsUnaired == true).checkboxradio('refresh');
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).on('pageinit', "#libraryReportPage", function () {
|
||||||
|
|
||||||
|
var page = this;
|
||||||
|
|
||||||
|
$('.libraryTree', page).on('itemclicked', function (event, data) {
|
||||||
|
|
||||||
|
if (data.itemType == "libraryreport") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.itemType == "livetvservice") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Dashboard.navigate('edititemmetadata.html?id=' + data.id);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#radioBasicFilters', page).on('change', function () {
|
||||||
|
|
||||||
|
if (this.checked) {
|
||||||
|
$('.basicFilters', page).show();
|
||||||
|
$('.advancedFilters', page).hide();
|
||||||
|
} else {
|
||||||
|
$('.basicFilters', page).hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#radioAdvancedFilters', page).on('change', function () {
|
||||||
|
|
||||||
|
if (this.checked) {
|
||||||
|
$('.advancedFilters', page).show();
|
||||||
|
$('.basicFilters', page).hide();
|
||||||
|
} else {
|
||||||
|
$('.advancedFilters', page).hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#selectView', page).on('change', function () {
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
query.IncludeItemTypes = this.value;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.chkVideoTypeFilter', page).on('change', function () {
|
||||||
|
|
||||||
|
var filterName = this.getAttribute('data-filter');
|
||||||
|
var filters = query.VideoTypes || "";
|
||||||
|
|
||||||
|
filters = (',' + filters).replace(',' + filterName, '').substring(1);
|
||||||
|
|
||||||
|
if (this.checked) {
|
||||||
|
filters = filters ? (filters + ',' + filterName) : filterName;
|
||||||
|
}
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
query.VideoTypes = filters;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#chk3D', page).on('change', function () {
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
query.Is3D = this.checked ? true : null;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#chkHD', page).on('change', function () {
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
query.IsHD = this.checked ? true : null;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#chkSD', page).on('change', function () {
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
query.IsHD = this.checked ? false : null;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#chkSubtitle', page).on('change', function () {
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
query.HasSubtitles = this.checked ? true : null;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#chkTrailer', page).on('change', function () {
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
query.HasTrailer = this.checked ? true : null;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#chkSpecialFeature', page).on('change', function () {
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
query.HasSpecialFeature = this.checked ? true : null;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#chkIsPlaceHolder', page).on('change', function () {
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
query.IsPlaceHolder = this.checked ? true : null;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#chkThemeSong', page).on('change', function () {
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
query.HasThemeSong = this.checked ? true : null;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#chkThemeVideo', page).on('change', function () {
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
query.HasThemeVideo = this.checked ? true : null;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#chkMissingOverview', page).on('change', function () {
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
query.HasOverview = this.checked ? false : null;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#chkMissingRating', page).on('change', function () {
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
query.HasOfficialRating = this.checked ? false : null;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#chkYearMismatch', page).on('change', function () {
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
query.IsYearMismatched = this.checked ? true : null;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#chkIsUnidentified', page).on('change', function () {
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
query.IsUnidentified = this.checked ? true : null;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#chkIsLocked', page).on('change', function () {
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
query.IsLocked = this.checked ? true : null;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#chkMissingEpisode', page).on('change', function () {
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
query.IsMissing = this.checked ? true : false;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#chkFutureEpisode', page).on('change', function () {
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
|
||||||
|
if (this.checked) {
|
||||||
|
query.IsUnaired = true;
|
||||||
|
query.IsVirtualUnaired = null;
|
||||||
|
} else {
|
||||||
|
query.IsUnaired = null;
|
||||||
|
query.IsVirtualUnaired = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#chkSpecialEpisode', page).on('change', function () {
|
||||||
|
|
||||||
|
query.ParentIndexNumber = this.checked ? 0 : null;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
|
}).on('pagebeforeshow', "#libraryReportPage", function () {
|
||||||
|
|
||||||
|
var page = this;
|
||||||
|
var limit = LibraryBrowser.getDefaultPageSize();
|
||||||
|
|
||||||
|
// If the default page size has changed, the start index will have to be reset
|
||||||
|
if (limit != query.Limit) {
|
||||||
|
query.Limit = limit;
|
||||||
|
query.StartIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
|
||||||
|
}).on('pageshow', "#libraryReportPage", function () {
|
||||||
|
|
||||||
|
updateFilterControls(this);
|
||||||
|
});
|
||||||
|
|
||||||
|
})(jQuery, document, window);
|
||||||
|
|
|
@ -24,29 +24,11 @@
|
||||||
self.playlist = [];
|
self.playlist = [];
|
||||||
var currentPlaylistIndex = 0;
|
var currentPlaylistIndex = 0;
|
||||||
|
|
||||||
var channelsListPromise;
|
|
||||||
var channelsListPromiseTime;
|
|
||||||
|
|
||||||
function updateCanClientSeek(elem) {
|
function updateCanClientSeek(elem) {
|
||||||
var duration = elem.duration;
|
var duration = elem.duration;
|
||||||
canClientSeek = duration && !isNaN(duration) && duration != Number.POSITIVE_INFINITY && duration != Number.NEGATIVE_INFINITY;
|
canClientSeek = duration && !isNaN(duration) && duration != Number.POSITIVE_INFINITY && duration != Number.NEGATIVE_INFINITY;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getChannelsListPromise() {
|
|
||||||
|
|
||||||
var lastUpdateTime = channelsListPromiseTime || 0;
|
|
||||||
|
|
||||||
// Update every three minutes
|
|
||||||
if (!channelsListPromise || !lastUpdateTime || (new Date().getTime() - lastUpdateTime) > 10800000) {
|
|
||||||
|
|
||||||
channelsListPromise = ApiClient.getLiveTvChannels({
|
|
||||||
userId: Dashboard.getCurrentUserId()
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return channelsListPromise;
|
|
||||||
}
|
|
||||||
|
|
||||||
function requestFullScreen(element) {
|
function requestFullScreen(element) {
|
||||||
// Supports most browsers and their versions.
|
// Supports most browsers and their versions.
|
||||||
var requestMethod = element.requestFullScreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullScreen;
|
var requestMethod = element.requestFullScreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullScreen;
|
||||||
|
@ -353,16 +335,6 @@
|
||||||
|
|
||||||
hideFlyout($('#qualityFlyout'));
|
hideFlyout($('#qualityFlyout'));
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#channelsFlyout').on('click', '.mediaFlyoutOption', function () {
|
|
||||||
|
|
||||||
if (!$(this).hasClass('selectedMediaFlyoutOption')) {
|
|
||||||
var channelId = this.getAttribute('data-channelid');
|
|
||||||
self.playById(channelId);
|
|
||||||
}
|
|
||||||
|
|
||||||
hideFlyout($('#channelsFlyout'));
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function endsWith(text, pattern) {
|
function endsWith(text, pattern) {
|
||||||
|
@ -476,7 +448,6 @@
|
||||||
$('#audioTracksButton', nowPlayingBar).hide();
|
$('#audioTracksButton', nowPlayingBar).hide();
|
||||||
$('#subtitleButton', nowPlayingBar).hide();
|
$('#subtitleButton', nowPlayingBar).hide();
|
||||||
$('#chaptersButton', nowPlayingBar).hide();
|
$('#chaptersButton', nowPlayingBar).hide();
|
||||||
$('#channelsButton', nowPlayingBar).hide();
|
|
||||||
|
|
||||||
$('#mediaElement', nowPlayingBar).html(html);
|
$('#mediaElement', nowPlayingBar).html(html);
|
||||||
var audioElement = $("audio", nowPlayingBar);
|
var audioElement = $("audio", nowPlayingBar);
|
||||||
|
@ -852,12 +823,6 @@
|
||||||
$('#fullscreenButton', nowPlayingBar).show();
|
$('#fullscreenButton', nowPlayingBar).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isFullScreen() == false) {
|
|
||||||
repositionPlayer();
|
|
||||||
}
|
|
||||||
|
|
||||||
var channelsButton = $('#channelsButton', nowPlayingBar).hide();
|
|
||||||
|
|
||||||
var videoElement = $("video", nowPlayingBar);
|
var videoElement = $("video", nowPlayingBar);
|
||||||
|
|
||||||
var initialVolume = localStorage.getItem("volume") || 0.5;
|
var initialVolume = localStorage.getItem("volume") || 0.5;
|
||||||
|
@ -926,15 +891,6 @@
|
||||||
currentItem = item;
|
currentItem = item;
|
||||||
curentDurationTicks = item.RunTimeTicks;
|
curentDurationTicks = item.RunTimeTicks;
|
||||||
|
|
||||||
getChannelsListPromise().done(function (result) {
|
|
||||||
|
|
||||||
if (result.Items.length) {
|
|
||||||
channelsButton.show();
|
|
||||||
} else {
|
|
||||||
channelsButton.hide();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return videoElement[0];
|
return videoElement[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1021,7 +977,7 @@
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.LocationType == "Virtual") {
|
if (item.LocationType == "Virtual" || item.IsPlaceHolder) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (item.Type == "MusicAlbum" || item.Type == "MusicArtist" || item.Type == "MusicGenre") {
|
if (item.Type == "MusicAlbum" || item.Type == "MusicArtist" || item.Type == "MusicGenre") {
|
||||||
|
@ -1923,61 +1879,6 @@
|
||||||
return html;
|
return html;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getChannelsFlyoutHtml(channels) {
|
|
||||||
|
|
||||||
var html = '';
|
|
||||||
|
|
||||||
for (var i = 0, length = channels.length; i < length; i++) {
|
|
||||||
|
|
||||||
var channel = channels[i];
|
|
||||||
|
|
||||||
html += '<div data-channelid="' + channel.Id + '" class="mediaFlyoutOption">';
|
|
||||||
|
|
||||||
var imgUrl;
|
|
||||||
|
|
||||||
if (channel.ImageTags.Primary) {
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getImageUrl(channel.Id, {
|
|
||||||
maxwidth: 200,
|
|
||||||
tag: channel.ImageTags.Primary,
|
|
||||||
type: "Primary"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
imgUrl = "css/images/media/tvflyout.png";
|
|
||||||
}
|
|
||||||
|
|
||||||
html += '<img class="mediaFlyoutOptionImage" src="' + imgUrl + '" />';
|
|
||||||
|
|
||||||
html += '<div class="mediaFlyoutOptionContent">';
|
|
||||||
|
|
||||||
var name = channel.Number + ' ' + channel.Name;
|
|
||||||
|
|
||||||
html += '<div class="mediaFlyoutOptionName">' + name + '</div>';
|
|
||||||
html += '<div class="mediaFlyoutOptionSecondaryText">' + channel.CurrentProgram.Name + '</div>';
|
|
||||||
|
|
||||||
html += '</div>';
|
|
||||||
|
|
||||||
html += "</div>";
|
|
||||||
}
|
|
||||||
|
|
||||||
return html;
|
|
||||||
}
|
|
||||||
|
|
||||||
self.showChannelsFlyout = function () {
|
|
||||||
|
|
||||||
var flyout = $('#channelsFlyout');
|
|
||||||
|
|
||||||
if (!flyout.is(':visible')) {
|
|
||||||
getChannelsListPromise().done(function (result) {
|
|
||||||
|
|
||||||
showFlyout(flyout, '#channelsButton');
|
|
||||||
|
|
||||||
flyout.html(getChannelsFlyoutHtml(result.Items)).scrollTop(0);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
self.showAudioTracksFlyout = function () {
|
self.showAudioTracksFlyout = function () {
|
||||||
|
|
||||||
var flyout = $('#audioTracksFlyout');
|
var flyout = $('#audioTracksFlyout');
|
||||||
|
|
|
@ -176,24 +176,6 @@
|
||||||
reloadItems(page);
|
reloadItems(page);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
$('.chkVideoTypeFilter', this).on('change', function () {
|
|
||||||
|
|
||||||
var filterName = this.getAttribute('data-filter');
|
|
||||||
var filters = query.VideoTypes || "";
|
|
||||||
|
|
||||||
filters = (',' + filters).replace(',' + filterName, '').substring(1);
|
|
||||||
|
|
||||||
if (this.checked) {
|
|
||||||
filters = filters ? (filters + ',' + filterName) : filterName;
|
|
||||||
}
|
|
||||||
|
|
||||||
query.StartIndex = 0;
|
|
||||||
query.VideoTypes = filters;
|
|
||||||
|
|
||||||
reloadItems(page);
|
|
||||||
});
|
|
||||||
|
|
||||||
$('#selectView', this).on('change', function () {
|
$('#selectView', this).on('change', function () {
|
||||||
|
|
||||||
view = this.value;
|
view = this.value;
|
||||||
|
@ -212,6 +194,23 @@
|
||||||
LibraryBrowser.saveViewSetting('movies', view);
|
LibraryBrowser.saveViewSetting('movies', view);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('.chkVideoTypeFilter', this).on('change', function () {
|
||||||
|
|
||||||
|
var filterName = this.getAttribute('data-filter');
|
||||||
|
var filters = query.VideoTypes || "";
|
||||||
|
|
||||||
|
filters = (',' + filters).replace(',' + filterName, '').substring(1);
|
||||||
|
|
||||||
|
if (this.checked) {
|
||||||
|
filters = filters ? (filters + ',' + filterName) : filterName;
|
||||||
|
}
|
||||||
|
|
||||||
|
query.StartIndex = 0;
|
||||||
|
query.VideoTypes = filters;
|
||||||
|
|
||||||
|
reloadItems(page);
|
||||||
|
});
|
||||||
|
|
||||||
$('#chk3D', this).on('change', function () {
|
$('#chk3D', this).on('change', function () {
|
||||||
|
|
||||||
query.StartIndex = 0;
|
query.StartIndex = 0;
|
||||||
|
|
|
@ -131,16 +131,16 @@
|
||||||
|
|
||||||
html += '<div class="notificationContent">';
|
html += '<div class="notificationContent">';
|
||||||
|
|
||||||
html += '<p class="notificationName">' + notification.Name + '</p>';
|
html += '<p style="margin: .4em 0 .25em;" class="notificationName">' + notification.Name + '</p>';
|
||||||
|
|
||||||
html += '<p>' + humane_date(notification.Date) + '</p>';
|
html += '<p style="margin: .25em 0;">' + humane_date(notification.Date) + '</p>';
|
||||||
|
|
||||||
if (notification.Description) {
|
if (notification.Description) {
|
||||||
html += '<p>' + notification.Description + '</p>';
|
html += '<p style="margin: .25em 0;">' + notification.Description + '</p>';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (notification.Url) {
|
if (notification.Url) {
|
||||||
html += '<p><a href="' + notification.Url + '" target="_blank">More information</a></p>';
|
html += '<p style="margin: .25em 0;"><a href="' + notification.Url + '" target="_blank">More information</a></p>';
|
||||||
}
|
}
|
||||||
|
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
|
|
|
@ -713,7 +713,7 @@ var Dashboard = {
|
||||||
href: "dashboard.html",
|
href: "dashboard.html",
|
||||||
selected: page.hasClass("dashboardHomePage")
|
selected: page.hasClass("dashboardHomePage")
|
||||||
}, {
|
}, {
|
||||||
name: "Media Library",
|
name: "Library",
|
||||||
divider: true,
|
divider: true,
|
||||||
href: "library.html",
|
href: "library.html",
|
||||||
selected: page.hasClass("mediaLibraryPage")
|
selected: page.hasClass("mediaLibraryPage")
|
||||||
|
@ -1347,9 +1347,6 @@ $(function () {
|
||||||
|
|
||||||
footerHtml += '<button onclick="MediaPlayer.toggleFullscreen();" id="fullscreenButton" class="mediaButton fullscreenButton" title="Fullscreen" type="button" data-icon="action" data-iconpos="notext" data-inline="true">Fullscreen</button>';
|
footerHtml += '<button onclick="MediaPlayer.toggleFullscreen();" id="fullscreenButton" class="mediaButton fullscreenButton" title="Fullscreen" type="button" data-icon="action" data-iconpos="notext" data-inline="true">Fullscreen</button>';
|
||||||
|
|
||||||
footerHtml += '<button onclick="MediaPlayer.showChannelsFlyout();" id="channelsButton" class="mediaButton channelsButton" title="TV Channels" type="button" data-icon="tv" data-iconpos="notext" data-inline="true">TV Channels</button>';
|
|
||||||
footerHtml += '<div class="mediaFlyoutContainer"><div id="channelsFlyout" style="display:none;" class="mediaPlayerFlyout channelsFlyout"></div></div>';
|
|
||||||
|
|
||||||
footerHtml += '<button onclick="MediaPlayer.showSendMediaMenu();" id="sendMediaButton" class="mediaButton sendMediaButton" title="Remote" type="button" data-icon="wireless" data-iconpos="notext" data-inline="true">Remote</button>';
|
footerHtml += '<button onclick="MediaPlayer.showSendMediaMenu();" id="sendMediaButton" class="mediaButton sendMediaButton" title="Remote" type="button" data-icon="wireless" data-iconpos="notext" data-inline="true">Remote</button>';
|
||||||
|
|
||||||
footerHtml += '</div>';
|
footerHtml += '</div>';
|
||||||
|
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 219 B After Width: | Height: | Size: 219 B |
Before Width: | Height: | Size: 227 B After Width: | Height: | Size: 227 B |
Before Width: | Height: | Size: 244 B After Width: | Height: | Size: 244 B |
Before Width: | Height: | Size: 243 B After Width: | Height: | Size: 243 B |
Before Width: | Height: | Size: 146 B After Width: | Height: | Size: 146 B |
Before Width: | Height: | Size: 167 B After Width: | Height: | Size: 167 B |
Before Width: | Height: | Size: 173 B After Width: | Height: | Size: 173 B |
Before Width: | Height: | Size: 159 B After Width: | Height: | Size: 159 B |
Before Width: | Height: | Size: 171 B After Width: | Height: | Size: 171 B |
Before Width: | Height: | Size: 149 B After Width: | Height: | Size: 149 B |
Before Width: | Height: | Size: 149 B After Width: | Height: | Size: 149 B |
Before Width: | Height: | Size: 156 B After Width: | Height: | Size: 156 B |
Before Width: | Height: | Size: 147 B After Width: | Height: | Size: 147 B |
Before Width: | Height: | Size: 152 B After Width: | Height: | Size: 152 B |
Before Width: | Height: | Size: 147 B After Width: | Height: | Size: 147 B |
Before Width: | Height: | Size: 163 B After Width: | Height: | Size: 163 B |
Before Width: | Height: | Size: 169 B After Width: | Height: | Size: 169 B |
Before Width: | Height: | Size: 163 B After Width: | Height: | Size: 163 B |
Before Width: | Height: | Size: 165 B After Width: | Height: | Size: 165 B |
Before Width: | Height: | Size: 151 B After Width: | Height: | Size: 151 B |
Before Width: | Height: | Size: 307 B After Width: | Height: | Size: 307 B |
Before Width: | Height: | Size: 314 B After Width: | Height: | Size: 314 B |
Before Width: | Height: | Size: 233 B After Width: | Height: | Size: 233 B |
Before Width: | Height: | Size: 240 B After Width: | Height: | Size: 240 B |
Before Width: | Height: | Size: 132 B After Width: | Height: | Size: 132 B |
Before Width: | Height: | Size: 135 B After Width: | Height: | Size: 135 B |
Before Width: | Height: | Size: 147 B After Width: | Height: | Size: 147 B |
Before Width: | Height: | Size: 152 B After Width: | Height: | Size: 152 B |
Before Width: | Height: | Size: 146 B After Width: | Height: | Size: 146 B |
Before Width: | Height: | Size: 143 B After Width: | Height: | Size: 143 B |
Before Width: | Height: | Size: 250 B After Width: | Height: | Size: 250 B |
Before Width: | Height: | Size: 251 B After Width: | Height: | Size: 251 B |
Before Width: | Height: | Size: 207 B After Width: | Height: | Size: 207 B |
Before Width: | Height: | Size: 213 B After Width: | Height: | Size: 213 B |
Before Width: | Height: | Size: 174 B After Width: | Height: | Size: 174 B |
Before Width: | Height: | Size: 177 B After Width: | Height: | Size: 177 B |
Before Width: | Height: | Size: 184 B After Width: | Height: | Size: 184 B |
Before Width: | Height: | Size: 194 B After Width: | Height: | Size: 194 B |
Before Width: | Height: | Size: 196 B After Width: | Height: | Size: 196 B |
Before Width: | Height: | Size: 204 B After Width: | Height: | Size: 204 B |
Before Width: | Height: | Size: 169 B After Width: | Height: | Size: 169 B |
Before Width: | Height: | Size: 172 B After Width: | Height: | Size: 172 B |
Before Width: | Height: | Size: 310 B After Width: | Height: | Size: 310 B |
Before Width: | Height: | Size: 316 B After Width: | Height: | Size: 316 B |
Before Width: | Height: | Size: 212 B After Width: | Height: | Size: 212 B |
Before Width: | Height: | Size: 210 B After Width: | Height: | Size: 210 B |
Before Width: | Height: | Size: 165 B After Width: | Height: | Size: 165 B |
Before Width: | Height: | Size: 160 B After Width: | Height: | Size: 160 B |
Before Width: | Height: | Size: 171 B After Width: | Height: | Size: 171 B |
Before Width: | Height: | Size: 185 B After Width: | Height: | Size: 185 B |
Before Width: | Height: | Size: 163 B After Width: | Height: | Size: 163 B |
Before Width: | Height: | Size: 170 B After Width: | Height: | Size: 170 B |
Before Width: | Height: | Size: 249 B After Width: | Height: | Size: 249 B |
Before Width: | Height: | Size: 253 B After Width: | Height: | Size: 253 B |
Before Width: | Height: | Size: 299 B After Width: | Height: | Size: 299 B |
Before Width: | Height: | Size: 308 B After Width: | Height: | Size: 308 B |
Before Width: | Height: | Size: 233 B After Width: | Height: | Size: 233 B |
Before Width: | Height: | Size: 243 B After Width: | Height: | Size: 243 B |
Before Width: | Height: | Size: 318 B After Width: | Height: | Size: 318 B |
Before Width: | Height: | Size: 302 B After Width: | Height: | Size: 302 B |
Before Width: | Height: | Size: 160 B After Width: | Height: | Size: 160 B |
Before Width: | Height: | Size: 167 B After Width: | Height: | Size: 167 B |
Before Width: | Height: | Size: 242 B After Width: | Height: | Size: 242 B |
Before Width: | Height: | Size: 246 B After Width: | Height: | Size: 246 B |
Before Width: | Height: | Size: 150 B After Width: | Height: | Size: 150 B |
Before Width: | Height: | Size: 154 B After Width: | Height: | Size: 154 B |
Before Width: | Height: | Size: 250 B After Width: | Height: | Size: 250 B |
Before Width: | Height: | Size: 251 B After Width: | Height: | Size: 251 B |
Before Width: | Height: | Size: 245 B After Width: | Height: | Size: 245 B |
Before Width: | Height: | Size: 247 B After Width: | Height: | Size: 247 B |
Before Width: | Height: | Size: 204 B After Width: | Height: | Size: 204 B |
Before Width: | Height: | Size: 207 B After Width: | Height: | Size: 207 B |
Before Width: | Height: | Size: 226 B After Width: | Height: | Size: 226 B |
Before Width: | Height: | Size: 227 B After Width: | Height: | Size: 227 B |