summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/meetingtools/apps/room/feeds.py45
-rw-r--r--src/meetingtools/apps/room/models.py3
-rw-r--r--src/meetingtools/apps/room/views.py22
-rw-r--r--src/meetingtools/urls.py5
4 files changed, 62 insertions, 13 deletions
diff --git a/src/meetingtools/apps/room/feeds.py b/src/meetingtools/apps/room/feeds.py
index 0254339..3dff05e 100644
--- a/src/meetingtools/apps/room/feeds.py
+++ b/src/meetingtools/apps/room/feeds.py
@@ -9,6 +9,8 @@ from meetingtools.apps.room.models import Room
from tagging.models import TaggedItem
from meetingtools.settings import BASE_URL
from django.utils.feedgenerator import Atom1Feed, Rss201rev2Feed
+from meetingtools.apps.room.views import room_recordings
+from django.shortcuts import get_object_or_404
class TagsWrapper(object):
@@ -25,7 +27,7 @@ class TagsWrapper(object):
def link(self,ext):
return "%s/room/+%s.%s" % (BASE_URL,"+".join(self.tags),ext)
-class RoomTagFeed(Feed):
+class MeetingToolsFeed(Feed):
item_author_name = 'SUNET e-meeting tools'
@@ -37,6 +39,9 @@ class RoomTagFeed(Feed):
return "rss"
return "rss"
+
+
+class RoomTagFeed(MeetingToolsFeed):
def get_object(self,request,tn):
return TagsWrapper(tn)
@@ -73,4 +78,42 @@ class RoomAtomTagFeed(RoomTagFeed):
feed_type = Atom1Feed
class RoomRSSTagField(RoomTagFeed):
+ feed_type = Rss201rev2Feed
+
+class RecordingsWrapper(object):
+ def __init__(self,room,request):
+ self.room = room
+ self.items = room_recordings(request, room)
+
+class RecordingFeed(MeetingToolsFeed):
+
+ def get_object(self,request,rid):
+ room = get_object_or_404(Room,pk=rid)
+ return RecordingsWrapper(room,request)
+
+ def title(self,recordings):
+ return "Recordings in room '%s'" % recordings.room.name
+
+ def link(self,recordings):
+ return recordings.room.recordings_url()
+
+ def items(self,recordings):
+ return recordings.items
+
+ def item_title(self,recording):
+ return recording['name']
+
+ def item_description(self,recording):
+ return recording['description']
+
+ def item_link(self,recording):
+ return recording['url']
+
+ def item_pubdate(self,recording):
+ return recording['date_created']
+
+class AtomRecordingFeed(RecordingFeed):
+ feed_type = Atom1Feed
+
+class RSSRecordingField(RecordingFeed):
feed_type = Rss201rev2Feed \ No newline at end of file
diff --git a/src/meetingtools/apps/room/models.py b/src/meetingtools/apps/room/models.py
index a54f1e9..b49925a 100644
--- a/src/meetingtools/apps/room/models.py
+++ b/src/meetingtools/apps/room/models.py
@@ -51,6 +51,9 @@ class Room(models.Model):
def permalink(self):
return "%s/room/%d" % (BASE_URL,self.id)
+
+ def recordings_url(self):
+ return "%s/room/%d/recordings" % (BASE_URL,self.id)
def nusers(self):
if self.user_count == None:
diff --git a/src/meetingtools/apps/room/views.py b/src/meetingtools/apps/room/views.py
index b0297cd..6df49fe 100644
--- a/src/meetingtools/apps/room/views.py
+++ b/src/meetingtools/apps/room/views.py
@@ -448,19 +448,19 @@ def tag(request,rid):
from time import mktime
from feedparser import _parse_date as parse_date
+def room_recordings(request,room):
+ api = ac_api_client(request, room.acc)
+ r = api.request('sco-expanded-contents',{'sco-id': room.sco_id,'filter-icon':'archive'},True)
+ return [{'name': sco.findtext('name'),
+ 'sco_id': sco.get('sco-id'),
+ 'url': room.acc.make_url(sco.findtext('url-path')),
+ 'description': sco.findtext('description'),
+ 'date_created': datetime.fromtimestamp(mktime(parse_date(sco.findtext('date-created')))),
+ 'date_modified': datetime.fromtimestamp(mktime(parse_date(sco.findtext('date-modified'))))} for sco in r.et.findall(".//sco")]
+
@login_required
def recordings(request,rid):
room = get_object_or_404(Room,pk=rid)
- api = ac_api_client(request, room.acc)
-
- r = api.request('sco-expanded-contents',{'sco-id': room.sco_id,'filter-icon':'archive'},True)
- recordings = [{'name': sco.findtext('name'),
- 'sco_id': sco.get('sco-id'),
- 'url': room.acc.make_url(sco.findtext('url-path')),
- 'description': sco.findtext('description'),
- 'date_created': datetime.fromtimestamp(mktime(parse_date(sco.findtext('date-created')))),
- 'date_modified': datetime.fromtimestamp(mktime(parse_date(sco.findtext('date-modified'))))} for sco in r.et.findall(".//sco")]
-
return respond_to(request,
{'text/html': 'apps/room/recordings.html'},
- {'recordings': recordings,'room':room}) \ No newline at end of file
+ {'recordings': room_recordings(request,room),'room':room}) \ No newline at end of file
diff --git a/src/meetingtools/urls.py b/src/meetingtools/urls.py
index 7df1ea0..ec10376 100644
--- a/src/meetingtools/urls.py
+++ b/src/meetingtools/urls.py
@@ -4,7 +4,8 @@ from django.conf.urls.defaults import patterns,include
from django.contrib import admin
from meetingtools.settings import ADMIN_MEDIA_ROOT, MEDIA_ROOT
from meetingtools.multiresponse import redirect_to
-from meetingtools.apps.room.feeds import RoomAtomTagFeed,RoomRSSTagField
+from meetingtools.apps.room.feeds import RoomAtomTagFeed,RoomRSSTagField,\
+ AtomRecordingFeed, RSSRecordingField
admin.autodiscover()
def welcome(request):
@@ -34,6 +35,8 @@ urlpatterns = patterns('',
(r'^room/\+(.+)\.(?:json|html|htm)$','meetingtools.apps.room.views.list_by_tag'),
(r'^room/\+(.+)\.(?:atom)$',RoomAtomTagFeed()),
(r'^room/\+(.+)\.(?:rss)$',RoomRSSTagField()),
+ (r'^room/(\d+)/recordings\.(?:atom)$',AtomRecordingFeed()),
+ (r'^room/(\d+)/recordings\.(?:rss)$',RSSRecordingField()),
(r'^room/\+(.+)$','meetingtools.apps.room.views.list_by_tag'),
# Uncomment the admin/doc line below to enable admin documentation:
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),