mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-11 15:56:07 -07:00
Allow custom search query to update metadata
This commit is contained in:
parent
b24e9a2185
commit
cc287607cd
5 changed files with 72 additions and 33 deletions
|
@ -245,7 +245,7 @@ ${next.headerIncludes()}
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
url: 'search',
|
url: 'search',
|
||||||
data: { 'query': $('#query').val() }
|
data: { query: $('#query').val() }
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
|
@ -2641,6 +2641,14 @@ table[id^='media_info_child'] table[id^='media_info_child'] thead th {
|
||||||
-o-transition: background 0.3s;
|
-o-transition: background 0.3s;
|
||||||
transition: background 0.3s;
|
transition: background 0.3s;
|
||||||
}
|
}
|
||||||
|
#update_search_form div.input-group {
|
||||||
|
display: inline-table;
|
||||||
|
vertical-align: middle;
|
||||||
|
max-width: 250px;
|
||||||
|
}
|
||||||
|
#update_search_form #update_query {
|
||||||
|
margin: 5px 0 0 0.5em;
|
||||||
|
}
|
||||||
.notification-params {
|
.notification-params {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
background-color: #282828;
|
background-color: #282828;
|
||||||
|
|
|
@ -515,11 +515,15 @@ DOCUMENTATION :: END
|
||||||
</script>
|
</script>
|
||||||
% endif
|
% endif
|
||||||
<script>
|
<script>
|
||||||
$('#row-edit-mode').after('<a href="update_metadata?rating_key=${data['rating_key']}" class="btn btn-danger btn-edit" id="fix-metadata"> \
|
|
||||||
<i class="fa fa-wrench"></i> Fix Metadata</a>');
|
|
||||||
$("#airdate").html(moment($("#airdate").text()).format('MMM DD, YYYY'));
|
$("#airdate").html(moment($("#airdate").text()).format('MMM DD, YYYY'));
|
||||||
$("#runtime").html(millisecondsToMinutes($("#runtime").text(), true));
|
$("#runtime").html(millisecondsToMinutes($("#runtime").text(), true));
|
||||||
$('div.art-face').animate({ opacity: 0.2 }, { duration: 1000 });
|
$('div.art-face').animate({ opacity: 0.2 }, { duration: 1000 });
|
||||||
</script>
|
</script>
|
||||||
|
% if source == 'history':
|
||||||
|
<script>
|
||||||
|
$('#row-edit-mode').after('<a href="update_metadata?rating_key=${data['rating_key']}&update=True" class="btn btn-danger btn-edit" id="fix-metadata"> \
|
||||||
|
<i class="fa fa-wrench"></i> Fix Metadata</a>');
|
||||||
|
</script>
|
||||||
|
% endif
|
||||||
% endif
|
% endif
|
||||||
</%def>
|
</%def>
|
||||||
|
|
|
@ -71,15 +71,28 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
<div class="summary-content-wrapper">
|
<div class="summary-content-wrapper">
|
||||||
<div class='col-md-12'>
|
<div class='col-md-12'>
|
||||||
|
% if not update:
|
||||||
<div style="text-align: center; margin-top: 20px;">
|
<div style="text-align: center; margin-top: 20px;">
|
||||||
<i class="fa fa-exclamation-triangle"></i> Error retrieving item metadata. This media item is not available in the Plex Media Server library.
|
<i class="fa fa-exclamation-triangle"></i> PlexPy cannot find this item's metadata. Either this media item is not available in the Plex Media Server library or it has been moved.
|
||||||
</div>
|
</div>
|
||||||
|
% endif
|
||||||
<div style="text-align: center; margin-top: 20px;">
|
<div style="text-align: center; margin-top: 20px;">
|
||||||
Please select the correct match below to update the PlexPy database.
|
<i class="fa fa-info-circle"></i> Please select the correct match below to update the PlexPy database.
|
||||||
</div>
|
</div>
|
||||||
<div class='table-card-header'>
|
<div class='table-card-header'>
|
||||||
<div class="header-bar">
|
<div class="header-bar">
|
||||||
<span>Search Results for <strong>${query['query_string']}</strong></span>
|
<span>Search Results for <strong><span id="update_query_title">${query['query_string']}</span></strong></span>
|
||||||
|
</div>
|
||||||
|
<div class="button-bar">
|
||||||
|
<form class="form" id="update_search_form">
|
||||||
|
Incorrect search results? Try a different query:
|
||||||
|
<div class="input-group" role="group" aria-label="Update Metadata Query">
|
||||||
|
<input type="search" class="form-control" name="update_query" id="update_query" aria-label="Query" placeholder="Query..." value="${query['query_string']}" />
|
||||||
|
<span class="input-group-btn">
|
||||||
|
<button class="btn btn-form btn-dark btn-inactive" type="submit" id="update_search_button"><i class="fa fa-search"></i></button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class='table-card-back'>
|
<div class='table-card-back'>
|
||||||
|
@ -143,7 +156,7 @@ DOCUMENTATION :: END
|
||||||
<div class="summary-content-wrapper">
|
<div class="summary-content-wrapper">
|
||||||
<div class='col-md-12'>
|
<div class='col-md-12'>
|
||||||
<div style="text-align: center; margin-top: 20px;">
|
<div style="text-align: center; margin-top: 20px;">
|
||||||
<i class="fa fa-exclamation-triangle"></i> Error retrieving item metadata. This media item is not available in the Plex Media Server library.
|
<i class="fa fa-exclamation-triangle"></i> PlexPy cannot find this item's metadata. Either this media item is not available in the Plex Media Server library or it has been moved.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -157,36 +170,43 @@ DOCUMENTATION :: END
|
||||||
|
|
||||||
% if query:
|
% if query:
|
||||||
<script>
|
<script>
|
||||||
$.ajax({
|
function getSearchResults() {
|
||||||
url: 'get_search_results_children',
|
var query_string = $('#update_query').val();
|
||||||
type: 'GET',
|
$.ajax({
|
||||||
async: true,
|
url: 'get_search_results_children',
|
||||||
data: {'query': "${query['query_string']}",
|
type: 'GET',
|
||||||
'media_type': "${query['media_type']}",
|
async: true,
|
||||||
'season_index': "${query['parent_media_index']}"
|
data: {
|
||||||
},
|
query: query_string,
|
||||||
complete: function(xhr, status) {
|
media_type: '${query["media_type"]}',
|
||||||
$("#search-results-list").html(xhr.responseText); }
|
season_index: '${query["parent_media_index"]}'
|
||||||
});
|
},
|
||||||
|
complete: function (xhr, status) {
|
||||||
|
$('#search-results-list').html(xhr.responseText);
|
||||||
|
$('#update_query_title').html(query_string)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
$(document).on('click', '#search-results-list a', function (e) {
|
$(document).on('click', '#search-results-list a', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
var new_rating_key = $(this).attr("id");
|
var new_rating_key = $(this).attr('id');
|
||||||
var new_href = $(this).attr("href");
|
var new_href = $(this).attr('href');
|
||||||
|
|
||||||
$('#new_title').html($(this).find('.item-children-instance-text-wrapper').html());
|
$('#new_title').html($(this).find('.item-children-instance-text-wrapper').html());
|
||||||
|
|
||||||
$('#confirm-modal').modal();
|
$('#confirm-modal').modal();
|
||||||
$('#confirm-modal').one('click', '#confirm-update', function () {
|
$('#confirm-modal').one('click', '#confirm-update', function () {
|
||||||
$(this).prop('disabled', true);
|
$(this).prop('disabled', true);
|
||||||
var msg = "<i class='fa fa-refresh fa-spin'></i> Updating database..."
|
var msg = '<i class="fa fa-refresh fa-spin"></i> Updating database...'
|
||||||
showMsg(msg, false, false, 0)
|
showMsg(msg, false, false, 0)
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: 'update_metadata_details',
|
url: 'update_metadata_details',
|
||||||
data: {
|
data: {
|
||||||
old_rating_key: "${query['rating_key']}",
|
old_rating_key: '${query["rating_key"]}',
|
||||||
new_rating_key: new_rating_key,
|
new_rating_key: new_rating_key,
|
||||||
media_type: "${query['media_type']}"
|
media_type: '${query["media_type"]}'
|
||||||
},
|
},
|
||||||
async: true,
|
async: true,
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
|
@ -195,6 +215,15 @@ DOCUMENTATION :: END
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
getSearchResults();
|
||||||
|
$('#update_search_form').submit(function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
if ($('#update_query').val().trim() != '')
|
||||||
|
{
|
||||||
|
getSearchResults();
|
||||||
|
}
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
% endif
|
% endif
|
||||||
</%def>
|
</%def>
|
|
@ -1469,7 +1469,7 @@ class WebInterface(object):
|
||||||
metadata = result['metadata']
|
metadata = result['metadata']
|
||||||
|
|
||||||
if metadata:
|
if metadata:
|
||||||
return serve_template(templatename="info.html", data=metadata, title="Info", config=config)
|
return serve_template(templatename="info.html", data=metadata, title="Info", config=config, source=source)
|
||||||
else:
|
else:
|
||||||
return self.update_metadata(rating_key, query)
|
return self.update_metadata(rating_key, query)
|
||||||
|
|
||||||
|
@ -1542,10 +1542,8 @@ class WebInterface(object):
|
||||||
if media_type:
|
if media_type:
|
||||||
result['results_list'] = {media_type: result['results_list'][media_type]}
|
result['results_list'] = {media_type: result['results_list'][media_type]}
|
||||||
if media_type == 'season' and season_index:
|
if media_type == 'season' and season_index:
|
||||||
for season in result['results_list']['season']:
|
result['results_list']['season'] = [season for season in result['results_list']['season']
|
||||||
if season['media_index'] == season_index:
|
if season['media_index'] == season_index]
|
||||||
result['results_list']['season'] = [season]
|
|
||||||
break
|
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
return serve_template(templatename="info_search_results_list.html", data=result, title="Search Result List")
|
return serve_template(templatename="info_search_results_list.html", data=result, title="Search Result List")
|
||||||
|
@ -1558,9 +1556,9 @@ class WebInterface(object):
|
||||||
##### Update Metadata #####
|
##### Update Metadata #####
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
def update_metadata(self, rating_key=None, query=None, **kwargs):
|
def update_metadata(self, rating_key=None, query=None, update=False, **kwargs):
|
||||||
|
|
||||||
query_string = query
|
query_string = query
|
||||||
|
update = True if update == 'True' else False
|
||||||
|
|
||||||
data_factory = datafactory.DataFactory()
|
data_factory = datafactory.DataFactory()
|
||||||
query = data_factory.get_search_query(rating_key=rating_key)
|
query = data_factory.get_search_query(rating_key=rating_key)
|
||||||
|
@ -1568,10 +1566,10 @@ class WebInterface(object):
|
||||||
query['query_string'] = query_string
|
query['query_string'] = query_string
|
||||||
|
|
||||||
if query:
|
if query:
|
||||||
return serve_template(templatename="update_metadata.html", query=query, title="Info")
|
return serve_template(templatename="update_metadata.html", query=query, update=update, title="Info")
|
||||||
else:
|
else:
|
||||||
logger.warn(u"Unable to retrieve data for update_metadata.")
|
logger.warn(u"Unable to retrieve data for update_metadata.")
|
||||||
return serve_template(templatename="update_metadata.html", query=query, title="Info")
|
return serve_template(templatename="update_metadata.html", query=query, update=update, title="Info")
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
def update_metadata_details(self, old_rating_key, new_rating_key, media_type, **kwargs):
|
def update_metadata_details(self, old_rating_key, new_rating_key, media_type, **kwargs):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue