From db9295a65d8b7c949efdab6d14c21ea35306f1d3 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 1 Mar 2014 17:34:27 -0500 Subject: [PATCH] a start to the lookup feature --- .../css/images/items/list/remotesearch.png | Bin 0 -> 4419 bytes dashboard-ui/css/metadataeditor.css | 69 +++++++ dashboard-ui/edititemmetadata.html | 41 ++++ dashboard-ui/scripts/edititemmetadata.js | 192 +++++++++++++++++- 4 files changed, 299 insertions(+), 3 deletions(-) create mode 100644 dashboard-ui/css/images/items/list/remotesearch.png diff --git a/dashboard-ui/css/images/items/list/remotesearch.png b/dashboard-ui/css/images/items/list/remotesearch.png new file mode 100644 index 0000000000000000000000000000000000000000..979ba2e8e78fcb0232d9243b332d4c20c37608d7 GIT binary patch literal 4419 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 E1NpT?`v3p{ literal 0 HcmV?d00001 diff --git a/dashboard-ui/css/metadataeditor.css b/dashboard-ui/css/metadataeditor.css index e481ece130..5d4d8ba792 100644 --- a/dashboard-ui/css/metadataeditor.css +++ b/dashboard-ui/css/metadataeditor.css @@ -84,6 +84,44 @@ 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; + white-space: nowrap; +} + @media all and (min-width: 500px) { .availableImagesList { @@ -134,11 +172,22 @@ padding: 0 0 1em 0; } +@media all and (min-width: 600px) { + + .popupIdentify { + width: 400px; + } +} + @media all and (min-width: 700px) { .availableImagesList { width: 600px; } + + .popupIdentify { + width: 500px; + } } @media all and (min-width: 800px) { @@ -163,6 +212,10 @@ float: right; width: 67.5%; } + + .popupIdentify { + width: 600px; + } } @media all and (min-width: 900px) { @@ -170,6 +223,10 @@ .availableImagesList { width: 800px; } + + .popupIdentify { + width: 700px; + } } @media all and (min-width: 1000px) { @@ -177,6 +234,10 @@ .availableImagesList { width: 900px; } + + .popupIdentify { + width: 800px; + } } @media all and (min-width: 1100px) { @@ -184,6 +245,10 @@ .availableImagesList { width: 1000px; } + + .popupIdentify { + width: 900px; + } } @media all and (min-width: 1200px) { @@ -191,6 +256,10 @@ .availableImagesList { width: 1100px; } + + .popupIdentify { + width: 1000px; + } } @media all and (min-width: 1300px) { diff --git a/dashboard-ui/edititemmetadata.html b/dashboard-ui/edititemmetadata.html index 7b26a24ef1..ec88e238ab 100644 --- a/dashboard-ui/edititemmetadata.html +++ b/dashboard-ui/edititemmetadata.html @@ -381,11 +381,52 @@ + +
+ +
+ + + +

Identify Item +

+
+ +
+ +
+ +
+ + +
+
+ + +
+ +
+
+ +

+ +

+
+ +
+ +
+
+
+
diff --git a/dashboard-ui/scripts/edititemmetadata.js b/dashboard-ui/scripts/edititemmetadata.js index 1a95cd236f..652ed67811 100644 --- a/dashboard-ui/scripts/edititemmetadata.js +++ b/dashboard-ui/scripts/edititemmetadata.js @@ -31,7 +31,7 @@ $.when(promise1, promise2, promise3).done(function (response1, response2, response3) { var item = response1[0]; - + currentItem = item; if (item.Type == "UserRootFolder") { @@ -279,8 +279,8 @@ $('#fldDateAdded', page).show(); $('#fldYear', page).show(); } - - if (item.Type == "Movie") { + + if (item.Type == "Movie" || item.Type == "Trailer" || item.Type == "AdultVideo" || item.Type == "Series" || item.Type == "Game" || item.Type == "BoxSet" || item.Type == "Person") { $('#btnIdentify', page).show(); } else { $('#btnIdentify', page).hide(); @@ -855,10 +855,183 @@ return false; }; + + self.onIdentificationFormSubmitted = function () { + + var page = $(this).parents('.page'); + + searchForIdentificationResults(page); + return false; + }; } 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 += '
'; + html += ''; + + var value = providerIds[idInfo.Key] || ''; + + html += ''; + + html += '
'; + } + + $('#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; + } + + lookupInfo = { + SearchInfo: lookupInfo, + IncludeDisabledProviders: true + }; + + $.ajax({ + type: "POST", + url: ApiClient.getUrl("Items/RemoteSearch/" + currentItem.Type), + data: JSON.stringify(lookupInfo), + contentType: "application/json" + + }).done(function (results) { + + 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 += '
'; + + if (result.ImageUrl) { + var displayUrl = getSearchImageDisplayUrl(result.ImageUrl, result.SearchProviderName); + + html += ''; + } else { + + html += ''; + } + html += ''; + + html += '
'; + html += result.Name; + html += '
'; + + html += '
'; + html += result.ProductionYear || ' '; + html += '
'; + + html += '
'; + + html += '
'; + } + + $('.identificationSearchResultList', page).html(html).trigger('create'); + } + $(document).on('pageinit', "#editItemMetadataPage", function () { var page = this; @@ -904,6 +1077,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) { return Math.floor(Math.random() * (max - min + 1) + min); }