diff --git a/data/interfaces/default/mobile_device_config.html b/data/interfaces/default/mobile_device_config.html index 32deb09d..f0ed9777 100644 --- a/data/interfaces/default/mobile_device_config.html +++ b/data/interfaces/default/mobile_device_config.html @@ -20,10 +20,19 @@

Optional: Enter a friendly name for this device. Leave blank for default.

+
+ +
+
+ +
+
+

The version of the mobile app.

+
-
+
diff --git a/data/interfaces/default/mobile_devices_table.html b/data/interfaces/default/mobile_devices_table.html index 240748f8..20a7acda 100644 --- a/data/interfaces/default/mobile_devices_table.html +++ b/data/interfaces/default/mobile_devices_table.html @@ -16,7 +16,14 @@ DOCUMENTATION :: END % if device['official'] == -1: % elif device['official'] > 0: - + <% + icon = 'mobile' + if device['platform'] == 'android': + icon = 'android' + elif device['platform'] == 'ios': + icon = 'apple' + %> + % else: % endif diff --git a/plexpy/__init__.py b/plexpy/__init__.py index 83a3922b..ffe3f0d9 100644 --- a/plexpy/__init__.py +++ b/plexpy/__init__.py @@ -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') diff --git a/plexpy/api2.py b/plexpy/api2.py index 6d34aee9..b6733019 100644 --- a/plexpy/api2.py +++ b/plexpy/api2.py @@ -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) diff --git a/plexpy/mobile_app.py b/plexpy/mobile_app.py index ba37f5f7..75a33439 100644 --- a/plexpy/mobile_app.py +++ b/plexpy/mobile_app.py @@ -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