mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-11 15:56:07 -07:00
You can now toggle notifications per user from the users profile page.
The PlexWatch importer will now also import those users into the PlexPy db.
This commit is contained in:
parent
2a613c117f
commit
881b25a8d4
7 changed files with 101 additions and 54 deletions
|
@ -13,6 +13,7 @@ data :: Usable parameters
|
|||
user Return the real Plex username
|
||||
user_id Return the Plex user_id
|
||||
friendly_name Returns the friendly edited Plex username
|
||||
do_notify Returns bool value for whether the user should trigger notifications
|
||||
|
||||
DOCUMENTATION :: END
|
||||
</%doc>
|
||||
|
@ -29,6 +30,10 @@ DOCUMENTATION :: END
|
|||
<input type="text" id="friendly_name" name="friendly_name" value="${data['friendly_name']}" size="30">
|
||||
<p class="help-block">Replace all occurances of the username with this name.</p>
|
||||
</div>
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" id="do_notify" name="do_notify" value="1" ${data['do_notify']}> Enable notifications
|
||||
<p class="help-block">Uncheck this if you do not want to receive notifications for this user's activity.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
|
@ -41,10 +46,15 @@ DOCUMENTATION :: END
|
|||
// Set new friendly name
|
||||
$("#save_user_name").click(function() {
|
||||
var friendly_name = $("#friendly_name").val();
|
||||
var do_notify = 0;
|
||||
if ($("#do_notify").is(":checked")) {
|
||||
do_notify = 1;
|
||||
}
|
||||
|
||||
% if data['user_id']:
|
||||
$.ajax({
|
||||
url: 'edit_user',
|
||||
data: {user_id: '${data['user_id']}', friendly_name: friendly_name},
|
||||
data: {user_id: '${data['user_id']}', friendly_name: friendly_name, do_notify: do_notify},
|
||||
cache: false,
|
||||
async: true,
|
||||
success: function(data) {
|
||||
|
@ -57,7 +67,7 @@ DOCUMENTATION :: END
|
|||
% else:
|
||||
$.ajax({
|
||||
url: 'edit_user',
|
||||
data: {user: '${data['user']}', friendly_name: friendly_name},
|
||||
data: {user: '${data['user']}', friendly_name: friendly_name, do_notify: do_notify},
|
||||
cache: false,
|
||||
async: true,
|
||||
success: function(data) {
|
||||
|
|
|
@ -386,7 +386,7 @@ def dbcheck():
|
|||
'CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, '
|
||||
'user_id INTEGER DEFAULT NULL UNIQUE, username TEXT NOT NULL UNIQUE, '
|
||||
'friendly_name TEXT, thumb TEXT, email TEXT, is_home_user INTEGER DEFAULT NULL, '
|
||||
'is_allow_sync INTEGER DEFAULT NULL, is_restricted INTEGER DEFAULT NULL)'
|
||||
'is_allow_sync INTEGER DEFAULT NULL, is_restricted INTEGER DEFAULT NULL, do_notify INTEGER DEFAULT 1)'
|
||||
)
|
||||
|
||||
# Upgrade sessions table from earlier versions
|
||||
|
@ -531,6 +531,15 @@ def dbcheck():
|
|||
'agent_id INTEGER, agent_name TEXT, on_play INTEGER, on_stop INTEGER, on_watched INTEGER)'
|
||||
)
|
||||
|
||||
# Upgrade sessions table from earlier versions
|
||||
try:
|
||||
c_db.execute('SELECT do_notify from users')
|
||||
except sqlite3.OperationalError:
|
||||
logger.debug(u"Altering database. Updating database table sessions.")
|
||||
c_db.execute(
|
||||
'ALTER TABLE users ADD COLUMN do_notify INTEGER DEFAULT 1'
|
||||
)
|
||||
|
||||
conn_db.commit()
|
||||
c_db.close()
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# along with PlexPy. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from plexpy import logger, datatables, common, database
|
||||
from plexpy import logger, datatables, common, database, helpers
|
||||
|
||||
import datetime
|
||||
|
||||
|
@ -221,7 +221,8 @@ class DataFactory(object):
|
|||
|
||||
return dict
|
||||
|
||||
def set_user_friendly_name(self, user=None, user_id=None, friendly_name=None):
|
||||
# TODO: The getter and setter for this needs to become a config getter/setter for more than just friendlyname
|
||||
def set_user_friendly_name(self, user=None, user_id=None, friendly_name=None, do_notify=0):
|
||||
if user_id:
|
||||
if friendly_name.strip() == '':
|
||||
friendly_name = None
|
||||
|
@ -229,7 +230,8 @@ class DataFactory(object):
|
|||
monitor_db = database.MonitorDatabase()
|
||||
|
||||
control_value_dict = {"user_id": user_id}
|
||||
new_value_dict = {"friendly_name": friendly_name}
|
||||
new_value_dict = {"friendly_name": friendly_name,
|
||||
"do_notify": do_notify}
|
||||
try:
|
||||
monitor_db.upsert('users', new_value_dict, control_value_dict)
|
||||
except Exception, e:
|
||||
|
@ -241,7 +243,8 @@ class DataFactory(object):
|
|||
monitor_db = database.MonitorDatabase()
|
||||
|
||||
control_value_dict = {"username": user}
|
||||
new_value_dict = {"friendly_name": friendly_name}
|
||||
new_value_dict = {"friendly_name": friendly_name,
|
||||
"do_notify": do_notify}
|
||||
try:
|
||||
monitor_db.upsert('users', new_value_dict, control_value_dict)
|
||||
except Exception, e:
|
||||
|
@ -249,48 +252,42 @@ class DataFactory(object):
|
|||
|
||||
def get_user_friendly_name(self, user=None, user_id=None):
|
||||
if user_id:
|
||||
try:
|
||||
monitor_db = database.MonitorDatabase()
|
||||
query = 'select username, ' \
|
||||
'(CASE WHEN friendly_name IS NULL THEN username ELSE friendly_name END) ' \
|
||||
'(CASE WHEN friendly_name IS NULL THEN username ELSE friendly_name END),' \
|
||||
'do_notify ' \
|
||||
'FROM users WHERE user_id = ?'
|
||||
result = monitor_db.select(query, args=[user_id])
|
||||
if result:
|
||||
user_detail = {'user_id': user_id,
|
||||
'user': result[0][0],
|
||||
'friendly_name': result[0][1]}
|
||||
'friendly_name': result[0][1],
|
||||
'do_notify': helpers.checked(result[0][2])}
|
||||
return user_detail
|
||||
else:
|
||||
user_detail = {'user_id': user_id,
|
||||
'user': '',
|
||||
'friendly_name': ''}
|
||||
return user_detail
|
||||
except:
|
||||
user_detail = {'user_id': user_id,
|
||||
'user': '',
|
||||
'friendly_name': ''}
|
||||
'friendly_name': '',
|
||||
'do_notify': ''}
|
||||
return user_detail
|
||||
elif user:
|
||||
try:
|
||||
monitor_db = database.MonitorDatabase()
|
||||
query = 'select user_id, ' \
|
||||
'(CASE WHEN friendly_name IS NULL THEN username ELSE friendly_name END) ' \
|
||||
'(CASE WHEN friendly_name IS NULL THEN username ELSE friendly_name END),' \
|
||||
'do_notify ' \
|
||||
'FROM users WHERE username = ?'
|
||||
result = monitor_db.select(query, args=[user])
|
||||
if result:
|
||||
user_detail = {'user_id': result[0][0],
|
||||
'user': user,
|
||||
'friendly_name': result[0][1]}
|
||||
'friendly_name': result[0][1],
|
||||
'do_notify': helpers.checked(result[0][2])}
|
||||
return user_detail
|
||||
else:
|
||||
user_detail = {'user_id': None,
|
||||
'user': user,
|
||||
'friendly_name': ''}
|
||||
return user_detail
|
||||
except:
|
||||
user_detail = {'user_id': None,
|
||||
'user': user,
|
||||
'friendly_name': ''}
|
||||
'friendly_name': '',
|
||||
'do_notify': ''}
|
||||
return user_detail
|
||||
|
||||
return None
|
||||
|
@ -315,11 +312,11 @@ class DataFactory(object):
|
|||
|
||||
if user:
|
||||
query = 'SELECT user_id, username, friendly_name, email, ' \
|
||||
'thumb, is_home_user, is_allow_sync, is_restricted ' \
|
||||
'thumb, is_home_user, is_allow_sync, is_restricted, do_notify ' \
|
||||
'FROM users ' \
|
||||
'WHERE username = ? ' \
|
||||
'UNION ALL ' \
|
||||
'SELECT null, user, null, null, null, null, null, null ' \
|
||||
'SELECT null, user, null, null, null, null, null, null, null ' \
|
||||
'FROM session_history ' \
|
||||
'WHERE user = ? ' \
|
||||
'GROUP BY user ' \
|
||||
|
@ -327,11 +324,11 @@ class DataFactory(object):
|
|||
result = monitor_db.select(query, args=[user, user])
|
||||
elif user_id:
|
||||
query = 'SELECT user_id, username, friendly_name, email, ' \
|
||||
'thumb, is_home_user, is_allow_sync, is_restricted ' \
|
||||
'thumb, is_home_user, is_allow_sync, is_restricted, do_notify ' \
|
||||
'FROM users ' \
|
||||
'WHERE user_id = ? ' \
|
||||
'UNION ALL ' \
|
||||
'SELECT user_id, user, null, null, null, null, null, null ' \
|
||||
'SELECT user_id, user, null, null, null, null, null, null, null ' \
|
||||
'FROM session_history ' \
|
||||
'WHERE user_id = ? ' \
|
||||
'GROUP BY user ' \
|
||||
|
@ -359,7 +356,8 @@ class DataFactory(object):
|
|||
"thumb": user_thumb,
|
||||
"is_home_user": item['is_home_user'],
|
||||
"is_allow_sync": item['is_allow_sync'],
|
||||
"is_restricted": item['is_restricted']
|
||||
"is_restricted": item['is_restricted'],
|
||||
"do_notify": item['do_notify']
|
||||
}
|
||||
return user_details
|
||||
else:
|
||||
|
@ -372,7 +370,8 @@ class DataFactory(object):
|
|||
"thumb": '',
|
||||
"is_home_user": 0,
|
||||
"is_allow_sync": 0,
|
||||
"is_restricted": 0
|
||||
"is_restricted": 0,
|
||||
"do_notify": 0
|
||||
}
|
||||
|
||||
def get_home_stats(self, time_range='30'):
|
||||
|
|
|
@ -19,7 +19,7 @@ import plexpy
|
|||
import time
|
||||
|
||||
def notify(stream_data=None, notify_action=None):
|
||||
from plexpy import pmsconnect, common
|
||||
from plexpy import pmsconnect, common, datafactory
|
||||
|
||||
if stream_data and notify_action:
|
||||
# Get the server name
|
||||
|
@ -41,6 +41,13 @@ def notify(stream_data=None, notify_action=None):
|
|||
logger.info('PlexPy Notifier :: %s (%s) started playing %s.' % (stream_data['friendly_name'],
|
||||
stream_data['player'], item_title))
|
||||
|
||||
# Check if notifications enabled for user
|
||||
data_factory = datafactory.DataFactory()
|
||||
user_details = data_factory.get_user_friendly_name(user=stream_data['user'])
|
||||
|
||||
if not user_details['do_notify']:
|
||||
return
|
||||
|
||||
if stream_data['media_type'] == 'movie' or stream_data['media_type'] == 'episode':
|
||||
if plexpy.CONFIG.MOVIE_NOTIFY_ENABLE or plexpy.CONFIG.TV_NOTIFY_ENABLE:
|
||||
|
||||
|
|
|
@ -372,6 +372,24 @@ def import_from_plexwatch(database=None, table_name=None, import_ignore_interval
|
|||
logger.debug(u"PlexPy Importer :: Item has bad rating_key: %s" % session_history_metadata['rating_key'])
|
||||
|
||||
logger.debug(u"PlexPy Importer :: PlexWatch data import complete.")
|
||||
import_users()
|
||||
|
||||
logger.debug(u"PlexPy Importer :: Re-enabling monitoring.")
|
||||
plexpy.initialize_scheduler()
|
||||
|
||||
def import_users():
|
||||
from plexpy import database
|
||||
|
||||
logger.debug(u"PlexPy Importer :: Importing PlexWatch Users...")
|
||||
monitor_db = database.MonitorDatabase()
|
||||
|
||||
query = 'INSERT OR IGNORE INTO users (user_id, username) ' \
|
||||
'SELECT user_id, user ' \
|
||||
'FROM session_history WHERE user_id != 1 GROUP BY user_id'
|
||||
|
||||
try:
|
||||
monitor_db.action(query)
|
||||
logger.debug(u"PlexPy Importer :: Users imported.")
|
||||
except:
|
||||
logger.debug(u"PlexPy Importer :: Failed to import users.")
|
||||
|
||||
|
|
|
@ -703,7 +703,7 @@ class PmsConnect(object):
|
|||
'bif_thumb': bif_thumb,
|
||||
'parent_thumb': helpers.get_xml_attr(session, 'parentThumb'),
|
||||
'grandparent_thumb': helpers.get_xml_attr(session, 'grandparentThumb'),
|
||||
'user': helpers.get_xml_attr(session.getElementsByTagName('User')[0], 'title'),
|
||||
'user': user_details['username'],
|
||||
'user_id': user_details['user_id'],
|
||||
'friendly_name': user_details['friendly_name'],
|
||||
'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title'),
|
||||
|
@ -750,7 +750,7 @@ class PmsConnect(object):
|
|||
'bif_thumb': bif_thumb,
|
||||
'parent_thumb': helpers.get_xml_attr(session, 'parentThumb'),
|
||||
'grandparent_thumb': helpers.get_xml_attr(session, 'grandparentThumb'),
|
||||
'user': helpers.get_xml_attr(session.getElementsByTagName('User')[0], 'title'),
|
||||
'user': user_details['username'],
|
||||
'user_id': user_details['user_id'],
|
||||
'friendly_name': user_details['friendly_name'],
|
||||
'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title'),
|
||||
|
|
|
@ -175,10 +175,14 @@ class WebInterface(object):
|
|||
|
||||
@cherrypy.expose
|
||||
def edit_user(self, user=None, user_id=None, friendly_name=None, **kwargs):
|
||||
if 'do_notify' in kwargs:
|
||||
do_notify = kwargs.get('do_notify')
|
||||
else:
|
||||
do_notify = 0
|
||||
if user_id:
|
||||
try:
|
||||
data_factory = datafactory.DataFactory()
|
||||
data_factory.set_user_friendly_name(user_id=user_id, friendly_name=friendly_name)
|
||||
data_factory.set_user_friendly_name(user_id=user_id, friendly_name=friendly_name, do_notify=do_notify)
|
||||
|
||||
status_message = "Successfully updated user."
|
||||
return status_message
|
||||
|
@ -188,7 +192,7 @@ class WebInterface(object):
|
|||
if user:
|
||||
try:
|
||||
data_factory = datafactory.DataFactory()
|
||||
data_factory.set_user_friendly_name(user=user, friendly_name=friendly_name)
|
||||
data_factory.set_user_friendly_name(user=user, friendly_name=friendly_name, do_notify=do_notify)
|
||||
|
||||
status_message = "Successfully updated user."
|
||||
return status_message
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue