mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-15 01:32:57 -07:00
Early implementation of friendly names. This be aware that this writes a new table to your plexWatch database.
Note: To edit friendly name, go to user page and click the pencil icon next to the user name. Currently only works on home stats and user info page. Adjust some table styling issues. Fix bug with user IP modal details not showing. Fix users default list order.
This commit is contained in:
parent
762199344c
commit
e7b305a1d5
11 changed files with 155 additions and 25 deletions
|
@ -307,6 +307,8 @@ def sig_handler(signum=None, frame=None):
|
|||
def dbcheck():
|
||||
conn = sqlite3.connect(plexpy.CONFIG.PLEXWATCH_DATABASE)
|
||||
c = conn.cursor()
|
||||
c.execute('CREATE TABLE IF NOT EXISTS plexpy_users (id INTEGER PRIMARY KEY AUTOINCREMENT, '
|
||||
'username TEXT NOT NULL UNIQUE, friendly_name TEXT)')
|
||||
conn.commit()
|
||||
c.close()
|
||||
|
||||
|
|
|
@ -660,11 +660,14 @@ class PlexWatch(object):
|
|||
elif 'top_users' in stat:
|
||||
top_users = []
|
||||
try:
|
||||
query = 'SELECT user, COUNT(id) as total_plays, MAX(time) as last_watch ' \
|
||||
'FROM %s ' \
|
||||
'WHERE datetime(stopped, "unixepoch", "localtime") >= datetime("now", "-%s days", "localtime") ' \
|
||||
'GROUP BY user ' \
|
||||
'ORDER BY total_plays DESC LIMIT 10' % (self.get_history_table_name(), time_range)
|
||||
s = self.get_history_table_name()
|
||||
query = 'SELECT user, (case when friendly_name is null then user else friendly_name end) as friendly_name,' \
|
||||
'COUNT(' + s + '.id) as total_plays, MAX(time) as last_watch ' \
|
||||
'FROM ' + s + ' ' \
|
||||
'LEFT OUTER JOIN plexpy_users ON ' + s + '.user = plexpy_users.username ' \
|
||||
'WHERE datetime(stopped, "unixepoch", "localtime") >= datetime("now", "-' + time_range + ' days", "localtime") '\
|
||||
'GROUP BY ' + s + '.user ' \
|
||||
'ORDER BY total_plays DESC LIMIT 10'
|
||||
result = myDB.select(query)
|
||||
except:
|
||||
logger.warn("Unable to open PlexWatch database.")
|
||||
|
@ -673,8 +676,9 @@ class PlexWatch(object):
|
|||
for item in result:
|
||||
thumb = self.get_user_gravatar_image(item[0])
|
||||
row = {'user': item[0],
|
||||
'total_plays': item[1],
|
||||
'last_play': item[2],
|
||||
'friendly_name': item[1],
|
||||
'total_plays': item[2],
|
||||
'last_play': item[3],
|
||||
'thumb': thumb['user_thumb']
|
||||
}
|
||||
top_users.append(row)
|
||||
|
@ -875,6 +879,24 @@ class PlexWatch(object):
|
|||
'series': [series_1_output]}
|
||||
return output
|
||||
|
||||
def set_user_friendly_name(self, user=None, friendly_name=None):
|
||||
if user and friendly_name:
|
||||
myDB = db.DBConnection()
|
||||
|
||||
control_value_dict = {"username": user}
|
||||
new_value_dict = {"friendly_name": friendly_name}
|
||||
|
||||
myDB.upsert('plexpy_users', new_value_dict, control_value_dict)
|
||||
|
||||
def get_user_friendly_name(self, user=None):
|
||||
if user:
|
||||
myDB = db.DBConnection()
|
||||
|
||||
query = 'select friendly_name FROM plexpy_users WHERE username = "%s"' % user
|
||||
result = myDB.select_single(query)
|
||||
|
||||
return result
|
||||
|
||||
# Taken from:
|
||||
# https://stackoverflow.com/questions/18066269/group-by-and-aggregate-the-values-of-a-list-of-dictionaries-in-python
|
||||
@staticmethod
|
||||
|
|
|
@ -99,7 +99,42 @@ class WebInterface(object):
|
|||
|
||||
@cherrypy.expose
|
||||
def user(self, user=None):
|
||||
return serve_template(templatename="user.html", title="User", user=user)
|
||||
try:
|
||||
plex_watch = plexwatch.PlexWatch()
|
||||
friendly_name = plex_watch.get_user_friendly_name(user)
|
||||
except:
|
||||
logger.warn("Unable to retrieve friendly name for user %s " % user)
|
||||
friendly_name = user
|
||||
|
||||
return serve_template(templatename="user.html", title="User", user=user, friendly_name=friendly_name)
|
||||
|
||||
@cherrypy.expose
|
||||
def edit_user(self, user=None, friendly_name=None, **kwargs):
|
||||
if user and friendly_name:
|
||||
try:
|
||||
plex_watch = plexwatch.PlexWatch()
|
||||
plex_watch.set_user_friendly_name(user, friendly_name)
|
||||
status_message = "Successfully updated user."
|
||||
return status_message
|
||||
except:
|
||||
status_message = "Failed to updated user."
|
||||
return status_message
|
||||
elif user and not friendly_name:
|
||||
try:
|
||||
plex_watch = plexwatch.PlexWatch()
|
||||
result = {'user': user,
|
||||
'friendly_name': plex_watch.get_user_friendly_name(user)
|
||||
}
|
||||
status_message = ""
|
||||
except:
|
||||
result = {'user': user,
|
||||
'friendly_name': ''
|
||||
}
|
||||
status_message = "There was an error."
|
||||
|
||||
return serve_template(templatename="edit_user.html", title="Edit User", data=result, status_message=status_message)
|
||||
else:
|
||||
return serve_template(templatename="edit_user.html", title="Edit User", data=user, status_message='Unknown error.')
|
||||
|
||||
@cherrypy.expose
|
||||
def get_stream_data(self, row_id=None, user=None, **kwargs):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue