diff --git a/README.md b/README.md
index 2991b1cc..f3469fd7 100644
--- a/README.md
+++ b/README.md
@@ -51,7 +51,7 @@ A python based web front-end for plexWatch.
* full user list with general information and comparison stats
-* individual user information **NOT YET IMPLEMENTED**
+* individual user information **PARTIALLY IMPLEMENTED**
- username and gravatar (if available)
- daily, weekly, monthly, all time stats for play count and duration length
- individual platform stats for each user
diff --git a/data/interfaces/default/user.html b/data/interfaces/default/user.html
index aeebf954..2585cb1d 100644
--- a/data/interfaces/default/user.html
+++ b/data/interfaces/default/user.html
@@ -189,6 +189,16 @@
%def>
diff --git a/data/interfaces/default/user_recently_watched.html b/data/interfaces/default/user_recently_watched.html
new file mode 100644
index 00000000..17313f0d
--- /dev/null
+++ b/data/interfaces/default/user_recently_watched.html
@@ -0,0 +1,36 @@
+% if recently_watched != None:
+
+% else:
+ There was an error retrieving some data. Please check your
settings.
+% endif
\ No newline at end of file
diff --git a/plexpy/plexwatch.py b/plexpy/plexwatch.py
index f313cb74..607c0ccc 100644
--- a/plexpy/plexwatch.py
+++ b/plexpy/plexwatch.py
@@ -281,23 +281,6 @@ class PlexWatch(object):
return dict
- def get_stream_details(self, id=0):
-
- myDB = db.DBConnection()
-
- query = 'SELECT xml from %s where id = %s' % (self.get_history_table_name(), id)
- xml = myDB.select_single(query)
-
- try:
- dict_data = helpers.convert_xml_to_dict(helpers.latinToAscii(xml))
- except IOError, e:
- logger.warn("Error parsing XML in PlexWatch db: %s" % e)
-
- dict = {'id': id,
- 'data': dict_data}
-
- return dict
-
"""
Validate xml keys to make sure they exist and return their attribute value, return blank value is none found
"""
@@ -388,4 +371,52 @@ class PlexWatch(object):
'grandparent_title': grandparent_title
}
- return stream_output
\ No newline at end of file
+ return stream_output
+
+ def get_recently_watched(self, user=None, limit='10'):
+ myDB = db.DBConnection()
+ recently_watched = []
+
+ if not limit.isdigit():
+ limit = '10'
+
+ if user:
+ query = 'SELECT time, user, xml FROM %s WHERE user = "%s" ORDER BY time DESC LIMIT %s' % \
+ (self.get_user_table_name(), user, limit)
+ xml = myDB.select(query)
+ else:
+ query = 'SELECT time, user, xml FROM %s ORDER BY time DESC LIMIT %s' % \
+ (self.get_user_table_name(), limit)
+ xml = myDB.select(query)
+
+ for row in xml:
+ xml_data = helpers.latinToAscii(row[2])
+ try:
+ xml_parse = minidom.parseString(xml_data)
+ except:
+ logger.warn("Error parsing XML for Plex stream data.")
+ return None
+
+ xml_head = xml_parse.getElementsByTagName('opt')
+ if not xml_head:
+ logger.warn("Error parsing XML for Plex stream data.")
+ return None
+
+ for a in xml_head:
+ if self.get_xml_attr(a, 'type') == 'episode':
+ thumb = self.get_xml_attr(a, 'parentThumb')
+ else:
+ thumb = self.get_xml_attr(a, 'thumb')
+
+ recent_output = {'type': self.get_xml_attr(a, 'type'),
+ 'rating_key': self.get_xml_attr(a, 'ratingKey'),
+ 'title': self.get_xml_attr(a, 'title'),
+ 'thumb': thumb,
+ 'index': self.get_xml_attr(a, 'index'),
+ 'parentIndex': self.get_xml_attr(a, 'parentIndex'),
+ 'time': row[0],
+ 'user': row[1]
+ }
+ recently_watched.append(recent_output)
+
+ return recently_watched
\ No newline at end of file
diff --git a/plexpy/webserve.py b/plexpy/webserve.py
index 1ea1c695..041cd7cb 100644
--- a/plexpy/webserve.py
+++ b/plexpy/webserve.py
@@ -534,6 +534,18 @@ class WebInterface(object):
return serve_template(templatename="info.html", metadata='', title="Info")
logger.warn('Unable to retrieve data.')
+ @cherrypy.expose
+ def get_user_recently_watched(self, user=None, limit='10', **kwargs):
+
+ plex_watch = plexwatch.PlexWatch()
+ result = plex_watch.get_recently_watched(user, limit)
+
+ if result:
+ return serve_template(templatename="user_recently_watched.html", recently_watched=result, title="Recently Watched")
+ else:
+ return serve_template(templatename="user_recently_watched.html", metadata='', title="Recently Watched")
+ logger.warn('Unable to retrieve data.')
+
@cherrypy.expose
def get_metadata_json(self, rating_key='', **kwargs):
@@ -593,4 +605,16 @@ class WebInterface(object):
history = plex_watch.get_user_unique_ips(start, length, kwargs, custom_where)
cherrypy.response.headers['Content-type'] = 'application/json'
- return json.dumps(history)
\ No newline at end of file
+ return json.dumps(history)
+
+ @cherrypy.expose
+ def get_watched(self, user=None, limit='10', **kwargs):
+
+ plex_watch = plexwatch.PlexWatch()
+ result = plex_watch.get_recently_watched(user, limit)
+
+ if result:
+ cherrypy.response.headers['Content-type'] = 'application/json'
+ return json.dumps(result)
+ else:
+ logger.warn('Unable to retrieve data.')