mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-07 21:51:14 -07:00
Add ability to unregister mobile devices
This commit is contained in:
parent
f60c978d80
commit
ddf671abd1
6 changed files with 133 additions and 2 deletions
|
@ -2405,6 +2405,22 @@ a .home-platforms-list-cover-face:hover
|
||||||
.stacked-configs > li.add-notification-agent {
|
.stacked-configs > li.add-notification-agent {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
.stacked-configs > li.registered-device > span,
|
||||||
|
.stacked-configs > li.registered-device > span:hover,
|
||||||
|
.stacked-configs > li.registered-device > span:focus {
|
||||||
|
background-color: #282828;
|
||||||
|
}
|
||||||
|
.stacked-configs > li.registered-device > span > a.toggle-left,
|
||||||
|
.stacked-configs > li.registered-device > span > span.toggle-left {
|
||||||
|
color: #999;
|
||||||
|
padding-right: 8px;
|
||||||
|
}
|
||||||
|
.stacked-configs > li.registered-device > span > span.delete-mobile-device {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.stacked-configs > li.registered-device > span > span.delete-mobile-device:hover {
|
||||||
|
color: #c9302c;
|
||||||
|
}
|
||||||
.accordion {
|
.accordion {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
max-width: 900px;
|
max-width: 900px;
|
||||||
|
|
46
data/interfaces/default/mobile_devices_table.html
Normal file
46
data/interfaces/default/mobile_devices_table.html
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
<%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: mobile_devices_table.html
|
||||||
|
Version: 0.1
|
||||||
|
|
||||||
|
DOCUMENTATION :: END
|
||||||
|
</%doc>
|
||||||
|
|
||||||
|
% if devices_list:
|
||||||
|
<ul class="stacked-configs list-unstyled">
|
||||||
|
% for device in sorted(devices_list, key=lambda k: k['device_name']):
|
||||||
|
<li class="registered-device" data-id="${device['device_id']}" data-name="${device['device_name']}">
|
||||||
|
<span>
|
||||||
|
<span class="toggle-left mobile-device-tooltip edit-mobile-device" data-toggle="tooltip" data-placement="top" title="Rename Device"><i class="fa fa-lg fa-pencil"></i></span>
|
||||||
|
<span class="mobile-device-name">${device['device_name']}</span>
|
||||||
|
<input type="text" class="edit-mobile-device-name hidden" value="${device['device_name']}" />
|
||||||
|
<span class="toggle-right delete-mobile-device"><i class="fa fa-lg fa-times"></i></span>
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
% endfor
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$('.mobile-device-tooltip').tooltip();
|
||||||
|
|
||||||
|
$('.delete-mobile-device').click(function () {
|
||||||
|
var device_id = $(this).closest('li').data('id');
|
||||||
|
var device_name = $(this).closest('li').data('name');
|
||||||
|
var msg = 'Are you sure you want to unregister the device <strong>' + device_name + '</strong> from PlexPy?';
|
||||||
|
var url = 'delete_mobile_device';
|
||||||
|
confirmAjaxCall(url, msg, { device_id: device_id }, null, getMobileDevicesTable);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
% else:
|
||||||
|
<ul class="stacked-configs list-unstyled">
|
||||||
|
<li class="registered-device">
|
||||||
|
<span>
|
||||||
|
<span class="toggle-left"><i class="fa fa-lg fa-mobile"></i></span>
|
||||||
|
No devices registered
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
% endif
|
|
@ -1112,6 +1112,16 @@
|
||||||
<span style="color: #eb8600; padding-left: 10px;" id="generate_qr_msg">The API must be enabled under <a data-tab-destination="tabs-access_control" style="cursor: pointer;">Access Control</a> to use the app.</span>
|
<span style="color: #eb8600; padding-left: 10px;" id="generate_qr_msg">The API must be enabled under <a data-tab-destination="tabs-access_control" style="cursor: pointer;">Access Control</a> to use the app.</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Registered Devices</label>
|
||||||
|
<p class="help-block">List of devices currently registered with the PlexPy server.</p>
|
||||||
|
<div class="row">
|
||||||
|
<div id="plexpy-mobile-devices-table" class="col-md-6">
|
||||||
|
<div class='text-muted'><i class="fa fa-refresh fa-spin"></i> Loading registered devices...</div>
|
||||||
|
<br>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -2451,6 +2461,17 @@
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getMobileDevicesTable() {
|
||||||
|
$.ajax({
|
||||||
|
url: 'get_mobile_devices_table',
|
||||||
|
cache: false,
|
||||||
|
async: true,
|
||||||
|
complete: function(xhr, status) {
|
||||||
|
$("#plexpy-mobile-devices-table").html(xhr.responseText);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
|
|
||||||
// Javascript to enable link to tab
|
// Javascript to enable link to tab
|
||||||
|
@ -2489,6 +2510,7 @@ $(document).ready(function() {
|
||||||
getConfigurationTable();
|
getConfigurationTable();
|
||||||
getSchedulerTable();
|
getSchedulerTable();
|
||||||
getNotifiersTable();
|
getNotifiersTable();
|
||||||
|
getMobileDevicesTable();
|
||||||
loadUpdateDistros();
|
loadUpdateDistros();
|
||||||
settingsChanged = false;
|
settingsChanged = false;
|
||||||
}
|
}
|
||||||
|
@ -2553,6 +2575,7 @@ $(document).ready(function() {
|
||||||
getConfigurationTable();
|
getConfigurationTable();
|
||||||
getSchedulerTable();
|
getSchedulerTable();
|
||||||
getNotifiersTable();
|
getNotifiersTable();
|
||||||
|
getMobileDevicesTable();
|
||||||
|
|
||||||
$('#changelog-modal-link').on('click', function (e) {
|
$('#changelog-modal-link').on('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
|
@ -372,14 +372,18 @@ class API2:
|
||||||
values = {'device_name': device_name}
|
values = {'device_name': device_name}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
db.upsert(table_name='mobile_devices', key_dict=keys, value_dict=values)
|
result = db.upsert(table_name='mobile_devices', key_dict=keys, value_dict=values)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warn(u"PlexPy APIv2 :: Failed to register mobile device in the database: %s." % e)
|
logger.warn(u"PlexPy APIv2 :: Failed to register mobile device in the database: %s." % e)
|
||||||
self._api_msg = 'Device registartion failed: database error.'
|
self._api_msg = 'Device registartion failed: database error.'
|
||||||
self._api_result_type = 'error'
|
self._api_result_type = 'error'
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if result == 'insert':
|
||||||
logger.info(u"PlexPy APIv2 :: Registered mobile device in the database: %s." % device_name)
|
logger.info(u"PlexPy APIv2 :: Registered mobile device in the database: %s." % device_name)
|
||||||
|
else:
|
||||||
|
logger.debug(u"PlexPy APIv2 :: Re-registered mobile device in the database: %s." % device_name)
|
||||||
|
|
||||||
self._api_msg = 'Device registration successful.'
|
self._api_msg = 'Device registration successful.'
|
||||||
self._api_result_type = 'success'
|
self._api_result_type = 'success'
|
||||||
return
|
return
|
||||||
|
|
|
@ -548,6 +548,17 @@ def blacklist_logger():
|
||||||
logger._BLACKLIST_WORDS.extend(blacklist)
|
logger._BLACKLIST_WORDS.extend(blacklist)
|
||||||
|
|
||||||
|
|
||||||
|
def delete_mobile_device(device_id=None):
|
||||||
|
monitor_db = database.MonitorDatabase()
|
||||||
|
|
||||||
|
if device_id:
|
||||||
|
logger.debug(u"PlexPy Notifiers :: Deleting device_id %s from the database." % device_id)
|
||||||
|
result = monitor_db.action('DELETE FROM mobile_devices WHERE device_id = ?', [device_id])
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
class PrettyMetadata(object):
|
class PrettyMetadata(object):
|
||||||
def __init__(self, parameters):
|
def __init__(self, parameters):
|
||||||
self.parameters = parameters
|
self.parameters = parameters
|
||||||
|
|
|
@ -3194,6 +3194,37 @@ class WebInterface(object):
|
||||||
|
|
||||||
cherrypy.response.status = 200
|
cherrypy.response.status = 200
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
@requireAuth(member_of("admin"))
|
||||||
|
def get_mobile_devices_table(self, **kwargs):
|
||||||
|
result = notifiers.ANDROIDAPP().get_devices()
|
||||||
|
devices_list = [{'device_id': id, 'device_name': name} for id, name in result.iteritems()]
|
||||||
|
return serve_template(templatename="mobile_devices_table.html", devices_list=devices_list)
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
@cherrypy.tools.json_out()
|
||||||
|
@requireAuth(member_of("admin"))
|
||||||
|
@addtoapi()
|
||||||
|
def delete_mobile_device(self, device_id=None, **kwargs):
|
||||||
|
""" Remove a mobile device from the database.
|
||||||
|
|
||||||
|
```
|
||||||
|
Required parameters:
|
||||||
|
device_id (int): The device to delete
|
||||||
|
|
||||||
|
Optional parameters:
|
||||||
|
None
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
None
|
||||||
|
```
|
||||||
|
"""
|
||||||
|
result = notifiers.delete_mobile_device(device_id=device_id)
|
||||||
|
if result:
|
||||||
|
return {'result': 'success', 'message': 'Device deleted successfully.'}
|
||||||
|
else:
|
||||||
|
return {'result': 'error', 'message': 'Failed to delete device.'}
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
@requireAuth(member_of("admin"))
|
@requireAuth(member_of("admin"))
|
||||||
@addtoapi()
|
@addtoapi()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue