mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-06 21:21:15 -07:00
Add export modal and buttons to library and info page
This commit is contained in:
parent
621fb95227
commit
43fefcf748
5 changed files with 129 additions and 3 deletions
78
data/interfaces/default/export_modal.html
Normal file
78
data/interfaces/default/export_modal.html
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
<%doc>
|
||||||
|
USAGE DOCUMENTATION :: PLEASE LEAVE THIS AT THE TOP OF THIS FILE
|
||||||
|
|
||||||
|
For Mako templating syntax documentation please visit: http://docs.makotemplates.org/en/latest/
|
||||||
|
|
||||||
|
Filename: export_modal.html
|
||||||
|
Version: 0.1
|
||||||
|
Variable names: data [list]
|
||||||
|
|
||||||
|
data :: Usable parameters
|
||||||
|
|
||||||
|
== Global keys ==
|
||||||
|
|
||||||
|
DOCUMENTATION :: END
|
||||||
|
</%doc>
|
||||||
|
|
||||||
|
<div class="modal-dialog" role="document">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||||
|
<h4 class="modal-title" id="info-modal-title">
|
||||||
|
${title}
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form method="post" class="form" id="export_metadata_form">
|
||||||
|
<input type="hidden" id="section_id" name="section_id" value="${section_id or ''}" />
|
||||||
|
<input type="hidden" id="rating_key" name="rating_key" value="${rating_key or ''}" />
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="export_level">Export Level</label>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<select class="form-control" id="export_level" name="export_level">
|
||||||
|
<option value="1">Level 1 - Basic Metadata</option>
|
||||||
|
<option value="2">Level 2 - Extended Metadata</option>
|
||||||
|
<option value="3">Level 3 - Basic Media Info</option>
|
||||||
|
<option value="4">Level 4 - Extended Media Info</option>
|
||||||
|
<option value="9">Level 9 - Everything</option>
|
||||||
|
<option value="-999">Custom</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="help-block">Select the export level.</p>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<div>
|
||||||
|
<input type="button" class="btn btn-bright btn-ok" data-dismiss="modal" id="export_metadata" value="Export">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$("#export_metadata").click(function() {
|
||||||
|
var section_id = $('#section_id').val();
|
||||||
|
var rating_key = $('#rating_key').val();
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: 'export_metadata',
|
||||||
|
data: {
|
||||||
|
section_id: section_id,
|
||||||
|
rating_key: rating_key
|
||||||
|
},
|
||||||
|
async: true,
|
||||||
|
success: function (data) {
|
||||||
|
if (data.result === 'success') {
|
||||||
|
if (typeof export_table !== 'undefined') {
|
||||||
|
redrawExportTable();
|
||||||
|
}
|
||||||
|
showMsg('<i class="fa fa-check"></i> ' + data.message, false, true, 5000);
|
||||||
|
} else {
|
||||||
|
showMsg('<i class="fa fa-exclamation-circle"></i> ' + data.message, false, true, 5000, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -510,6 +510,12 @@ DOCUMENTATION :: END
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
|
<div class="btn-group">
|
||||||
|
<button class="btn btn-dark export-button" id="toggle-export-modal" data-toggle="modal" data-target="#export-modal"
|
||||||
|
data-id="${data['rating_key']}">
|
||||||
|
<i class="fa fa-file-export"></i> Export Metadata
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
% endif
|
% endif
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<button class="btn btn-dark refresh-history-button" id="refresh-history-list"><i class="fa fa-refresh"></i> Refresh history</button>
|
<button class="btn btn-dark refresh-history-button" id="refresh-history-list"><i class="fa fa-refresh"></i> Refresh history</button>
|
||||||
|
@ -629,6 +635,8 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
|
<div id="export-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="export-modal">
|
||||||
|
</div>
|
||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="javascriptIncludes()">
|
<%def name="javascriptIncludes()">
|
||||||
|
@ -770,7 +778,7 @@ DOCUMENTATION :: END
|
||||||
data: {
|
data: {
|
||||||
rating_key: rating_key,
|
rating_key: rating_key,
|
||||||
notifier_id: $('#send-notification-notifier option:selected').val()
|
notifier_id: $('#send-notification-notifier option:selected').val()
|
||||||
},
|
},
|
||||||
async: true,
|
async: true,
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
if (data.result === 'success') {
|
if (data.result === 'success') {
|
||||||
|
@ -832,6 +840,19 @@ DOCUMENTATION :: END
|
||||||
return '<div class="channel-thumbnail" style="background-image: url(' + $(this).data('img') + ');" />';
|
return '<div class="channel-thumbnail" style="background-image: url(' + $(this).data('img') + ');" />';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$("#toggle-export-modal").click(function() {
|
||||||
|
$.ajax({
|
||||||
|
url: 'export_metadata_modal',
|
||||||
|
data: { rating_key: $(this).data('id') },
|
||||||
|
cache: false,
|
||||||
|
async: true,
|
||||||
|
complete: function(xhr, status) {
|
||||||
|
$("#export-modal").html(xhr.responseText);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
% if data.get('poster_url'):
|
% if data.get('poster_url'):
|
||||||
<script>
|
<script>
|
||||||
|
|
|
@ -320,6 +320,12 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
<div class="button-bar">
|
<div class="button-bar">
|
||||||
% if _session['user_group'] == 'admin':
|
% if _session['user_group'] == 'admin':
|
||||||
|
<div class="btn-group">
|
||||||
|
<button class="btn btn-dark export-button" id="toggle-export-modal" data-toggle="modal" data-target="#export-modal"
|
||||||
|
data-id="${data['section_id']}">
|
||||||
|
<i class="fa fa-file-export"></i> Export Metadata
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<button class="btn btn-dark refresh-export-table-button" id="refresh-export-table">
|
<button class="btn btn-dark refresh-export-table-button" id="refresh-export-table">
|
||||||
<i class="fa fa-refresh"></i> Refresh exports
|
<i class="fa fa-refresh"></i> Refresh exports
|
||||||
|
@ -403,6 +409,8 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="export-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="export-modal">
|
||||||
|
</div>
|
||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="javascriptIncludes()">
|
<%def name="javascriptIncludes()">
|
||||||
|
@ -551,6 +559,18 @@ DOCUMENTATION :: END
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$("#toggle-export-modal").click(function() {
|
||||||
|
$.ajax({
|
||||||
|
url: 'export_metadata_modal',
|
||||||
|
data: { section_id: $(this).data('id') },
|
||||||
|
cache: false,
|
||||||
|
async: true,
|
||||||
|
complete: function(xhr, status) {
|
||||||
|
$("#export-modal").html(xhr.responseText);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
$('#row-edit-mode').on('click', function() {
|
$('#row-edit-mode').on('click', function() {
|
||||||
$('#row-edit-mode-alert').fadeIn(200);
|
$('#row-edit-mode-alert').fadeIn(200);
|
||||||
|
|
||||||
|
|
|
@ -865,7 +865,7 @@ def export(section_id=None, rating_key=None, file_format='json'):
|
||||||
plex = Plex(plexpy.CONFIG.PMS_URL, plexpy.CONFIG.PMS_TOKEN)
|
plex = Plex(plexpy.CONFIG.PMS_URL, plexpy.CONFIG.PMS_TOKEN)
|
||||||
|
|
||||||
if section_id:
|
if section_id:
|
||||||
logger.debug("Tautulli Exporter :: Exporting called with section_id %s", section_id)
|
logger.debug("Tautulli Exporter :: Export called with section_id %s", section_id)
|
||||||
|
|
||||||
library = plex.get_library(section_id)
|
library = plex.get_library(section_id)
|
||||||
media_type = library.type
|
media_type = library.type
|
||||||
|
@ -875,7 +875,7 @@ def export(section_id=None, rating_key=None, file_format='json'):
|
||||||
items = library.all()
|
items = library.all()
|
||||||
|
|
||||||
elif rating_key:
|
elif rating_key:
|
||||||
logger.debug("Tautulli Exporter :: Exporting called with rating_key %s", rating_key)
|
logger.debug("Tautulli Exporter :: Export called with rating_key %s", rating_key)
|
||||||
|
|
||||||
item = plex.get_item(helpers.cast_to_int(rating_key))
|
item = plex.get_item(helpers.cast_to_int(rating_key))
|
||||||
media_type = item.type
|
media_type = item.type
|
||||||
|
|
|
@ -6478,6 +6478,13 @@ class WebInterface(object):
|
||||||
|
|
||||||
return status
|
return status
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
@requireAuth()
|
||||||
|
def export_metadata_modal(self, section_id=None, rating_key=None, **kwargs):
|
||||||
|
|
||||||
|
return serve_template(templatename="export_modal.html", title="Export Metadata",
|
||||||
|
section_id=section_id, rating_key=rating_key)
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
@cherrypy.tools.json_out()
|
@cherrypy.tools.json_out()
|
||||||
@requireAuth(member_of("admin"))
|
@requireAuth(member_of("admin"))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue