Add platform and version to mobile devices

This commit is contained in:
JonnyWong16 2021-06-27 11:46:47 -07:00
parent c0837defed
commit bde2372d90
No known key found for this signature in database
GPG key ID: B1F1F9807184697A
5 changed files with 56 additions and 11 deletions

View file

@ -19,11 +19,20 @@
</div>
</div>
<p class="help-block">Optional: Enter a friendly name for this device. Leave blank for default.</p>
</div>
<div class="form-group">
<label for="friendly_name">App Version</label>
<div class="row">
<div class="col-md-3">
<input type="text" class="form-control" id="app_version" name="app_version" value="${device['version'] or ''}" size="30" readonly>
</div>
</div>
<p class="help-block">The version of the mobile app.</p>
</div>
<div class="form-group">
<label for="friendly_name">Device Token</label>
<div class="row">
<div class="col-md-8">
<div class="col-md-12">
<div class="input-group">
<span class="input-group-btn">
<button class="btn btn-form reveal-token" type="button"><i class="fa fa-eye-slash"></i></button>

View file

@ -16,7 +16,14 @@ DOCUMENTATION :: END
% if device['official'] == -1:
<span class="toggle-left official-tooltip" data-toggle="tooltip" data-placement="top" title="OneSignal Validation Failed"><i class="fa fa-lg fa-fw fa-exclamation-triangle"></i></span>
% elif device['official'] > 0:
<span class="toggle-left"><i class="fa fa-lg fa-fw fa-mobile"></i></span>
<%
icon = 'mobile'
if device['platform'] == 'android':
icon = 'android'
elif device['platform'] == 'ios':
icon = 'apple'
%>
<span class="toggle-left"><i class="fa fa-lg fa-fw fa-${icon}"></i></span>
% else:
<span class="toggle-left official-tooltip" data-toggle="tooltip" data-placement="top" title="Unofficial or Unknown App"><i class="fa fa-lg fa-fw fa-exclamation-triangle"></i></span>
% endif

View file

@ -1,4 +1,4 @@
# This file is part of Tautulli.
# This file is part of Tautulli.
#
# Tautulli is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -790,7 +790,8 @@ def dbcheck():
# mobile_devices table :: This table keeps record of devices linked with the mobile app
c_db.execute(
'CREATE TABLE IF NOT EXISTS mobile_devices (id INTEGER PRIMARY KEY AUTOINCREMENT, '
'device_id TEXT NOT NULL UNIQUE, device_token TEXT, device_name TEXT, friendly_name TEXT, '
'device_id TEXT NOT NULL UNIQUE, device_token TEXT, device_name TEXT, '
'platform TEXT, version TEXT, friendly_name TEXT, '
'onesignal_id TEXT, last_seen INTEGER, official INTEGER DEFAULT 0)'
)
@ -2214,6 +2215,23 @@ def dbcheck():
'ALTER TABLE mobile_devices ADD COLUMN onesignal_id TEXT'
)
# Upgrade mobile_devices table from earlier versions
try:
c_db.execute('SELECT platform FROM mobile_devices')
except sqlite3.OperationalError:
logger.debug("Altering database. Updating database table mobile_devices.")
c_db.execute(
'ALTER TABLE mobile_devices ADD COLUMN platform TEXT'
)
c_db.execute(
'ALTER TABLE mobile_devices ADD COLUMN version TEXT'
)
# Update mobile device platforms
for device_id, in c_db.execute(
'SELECT device_id FROM mobile_devices WHERE official > 0').fetchall():
c_db.execute('UPDATE mobile_devices SET platform = ? WHERE device_id = ?',
['android', device_id])
# Upgrade notifiers table from earlier versions
try:
c_db.execute('SELECT custom_conditions FROM notifiers')

View file

@ -398,9 +398,9 @@ class API2(object):
return data
def register_device(self, device_id='', device_name='', friendly_name='', onesignal_id=None,
min_version='', **kwargs):
""" Registers the Tautulli Android App for notifications.
def register_device(self, device_id='', device_name='', platform=None, version=None,
friendly_name='', onesignal_id=None, min_version='', **kwargs):
""" Registers the Tautulli Remote App.
```
Required parameters:
@ -408,6 +408,8 @@ class API2(object):
device_name (str): The device name of the mobile device
Optional parameters:
platform (str): The platform of the mobile devices
version (str): The version of the app
friendly_name (str): A friendly name to identify the mobile device
onesignal_id (str): The OneSignal id for the mobile device
min_version (str): The minimum Tautulli version supported by the mobile device, e.g. v2.5.6
@ -462,6 +464,8 @@ class API2(object):
result = mobile_app.add_mobile_device(device_id=device_id,
device_name=device_name,
device_token=self._api_apikey,
platform=platform,
version=version,
friendly_name=friendly_name,
onesignal_id=onesignal_id)

View file

@ -89,12 +89,15 @@ def get_mobile_device_by_token(device_token=None):
return get_mobile_devices(device_token=device_token)
def add_mobile_device(device_id=None, device_name=None, device_token=None, friendly_name=None, onesignal_id=None):
def add_mobile_device(device_id=None, device_name=None, device_token=None,
platform=None, version=None, friendly_name=None, onesignal_id=None):
db = database.MonitorDatabase()
keys = {'device_id': device_id}
values = {'device_name': device_name,
'device_token': device_token,
'platform': platform,
'version': version,
'onesignal_id': onesignal_id}
if friendly_name:
@ -110,8 +113,9 @@ def add_mobile_device(device_id=None, device_name=None, device_token=None, frien
if result == 'insert':
logger.info("Tautulli MobileApp :: Registered mobile device '%s' in the database." % device_name)
else:
logger.debug("Tautulli MobileApp :: Re-registered mobile device '%s' in the database." % device_name)
logger.info("Tautulli MobileApp :: Re-registered mobile device '%s' in the database." % device_name)
set_last_seen(device_token=device_token)
threading.Thread(target=set_official, args=[device_id, onesignal_id]).start()
return True
@ -172,10 +176,13 @@ def delete_mobile_device(mobile_device_id=None, device_id=None):
def set_official(device_id, onesignal_id):
db = database.MonitorDatabase()
official = validate_onesignal_id(onesignal_id=onesignal_id)
platform = 'android' if official > 0 else None
try:
result = db.action('UPDATE mobile_devices SET official = ? WHERE device_id = ?',
args=[official, device_id])
result = db.action('UPDATE mobile_devices '
'SET official = ?, platform = coalesce(platform, ?) '
'WHERE device_id = ?',
args=[official, platform, device_id])
except Exception as e:
logger.warn("Tautulli MobileApp :: Failed to set official flag for device: %s." % e)
return