diff --git a/data/interfaces/default/index.html b/data/interfaces/default/index.html
index 61715071..bb3a7632 100644
--- a/data/interfaces/default/index.html
+++ b/data/interfaces/default/index.html
@@ -26,11 +26,22 @@
-
+
+
%def>
<%def name="javascriptIncludes()">
+
%def>
diff --git a/data/interfaces/default/recently_added.html b/data/interfaces/default/recently_added.html
new file mode 100644
index 00000000..84d42a1e
--- /dev/null
+++ b/data/interfaces/default/recently_added.html
@@ -0,0 +1,36 @@
+% if recently_added != None:
+
+% else:
+ No recently added items.
+% endif
\ No newline at end of file
diff --git a/plexpy/pmsconnect.py b/plexpy/pmsconnect.py
index 10e3d0e1..2d0428d8 100644
--- a/plexpy/pmsconnect.py
+++ b/plexpy/pmsconnect.py
@@ -105,6 +105,100 @@ class PmsConnect(object):
return output
+ """
+ Return list of recently added items.
+
+ Parameters required: count { number of results to return }
+ Optional parameters: output_format { dict, json }
+
+ Output: array
+ """
+ def get_recently_added(self, count='0', output_format=''):
+ url_command = '/library/recentlyAdded?X-Plex-Container-Start=0&X-Plex-Container-Size=' + count
+ http_handler = HTTPConnection(self.host, self.port, timeout=10)
+
+ http_handler.request("GET", url_command + '&X-Plex-Token=' + self.token)
+ response = http_handler.getresponse()
+ request_status = response.status
+ request_content = response.read()
+
+ if output_format == 'dict':
+ output = helpers.convert_xml_to_dict(request_content)
+ elif output_format == 'json':
+ output = helpers.convert_xml_to_json(request_content)
+ else:
+ output = request_content
+
+ return output
+
+ """
+ Return processed and validated list of recently added items.
+
+ Parameters required: count { number of results to return }
+
+ Output: array
+ """
+ def get_recently_added_details(self, count='0'):
+ recent = self.get_recently_added(count)
+ recents_list = []
+
+ try:
+ xml_parse = minidom.parseString(recent)
+ except Exception, e:
+ logger.warn("Error parsing XML for Plex recently added: %s" % e)
+ return None
+ except:
+ logger.warn("Error parsing XML for Plex recently added.")
+ return None
+
+ xml_head = xml_parse.getElementsByTagName('MediaContainer')
+ if not xml_head:
+ logger.warn("Error parsing XML for Plex recently added.")
+ return None
+
+ for a in xml_head:
+ if a.getAttribute('size'):
+ if a.getAttribute('size') == '0':
+ output = {'recently_added': None}
+ return output
+
+ if a.getElementsByTagName('Directory'):
+ recents_main = a.getElementsByTagName('Directory')
+ for item in recents_main:
+ recent_type = self.get_xml_attr(item, 'type')
+
+ if recent_type == 'season':
+ recent_items = {'type': recent_type,
+ 'ratingKey': self.get_xml_attr(item, 'ratingKey'),
+ 'title': self.get_xml_attr(item, 'title'),
+ 'thumb': self.get_xml_attr(item, 'thumb'),
+ 'addedAt': self.get_xml_attr(item, 'addedAt')
+ }
+ recents_list.append(recent_items)
+ else:
+ recent_items = {}
+ recents_list.append(recent_items)
+ if a.getElementsByTagName('Video'):
+ recents_main = a.getElementsByTagName('Video')
+ for item in recents_main:
+ recent_type = self.get_xml_attr(item, 'type')
+
+ if recent_type == 'movie':
+ recent_items = {'type': recent_type,
+ 'ratingKey': self.get_xml_attr(item, 'ratingKey'),
+ 'title': self.get_xml_attr(item, 'title'),
+ 'year': self.get_xml_attr(item, 'year'),
+ 'thumb': self.get_xml_attr(item, 'thumb'),
+ 'addedAt': self.get_xml_attr(item, 'addedAt')
+ }
+ recents_list.append(recent_items)
+ else:
+ recent_items = {}
+ recents_list.append(recent_items)
+
+ output = {'recently_added': recents_list}
+ return output
+
"""
Return processed and validated metadata list for requested item.
diff --git a/plexpy/webserve.py b/plexpy/webserve.py
index 03b8001f..80a192c2 100644
--- a/plexpy/webserve.py
+++ b/plexpy/webserve.py
@@ -678,6 +678,21 @@ class WebInterface(object):
return serve_template(templatename="current_activity_header.html", activity=None)
logger.warn('Unable to retrieve data.')
+ @cherrypy.expose
+ def get_recently_added(self, count='0', **kwargs):
+
+ try:
+ pms_connect = pmsconnect.PmsConnect()
+ result = pms_connect.get_recently_added_details(count)
+ except IOError, e:
+ return serve_template(templatename="recently_added.html", recently_added=None)
+
+ if result:
+ return serve_template(templatename="recently_added.html", recently_added=result['recently_added'])
+ else:
+ return serve_template(templatename="recently_added.html", recently_added=None)
+ logger.warn('Unable to retrieve data.')
+
@cherrypy.expose
def pms_image_proxy(self, img='', width='0', height='0', **kwargs):
if img != '':
@@ -729,3 +744,15 @@ class WebInterface(object):
return result
else:
logger.warn('Unable to retrieve data.')
+
+ @cherrypy.expose
+ def get_recently_added_json(self, count='0', **kwargs):
+
+ pms_connect = pmsconnect.PmsConnect()
+ result = pms_connect.get_recently_added(count, 'json')
+
+ if result:
+ cherrypy.response.headers['Content-type'] = 'application/json'
+ return result
+ else:
+ logger.warn('Unable to retrieve data.')
\ No newline at end of file