]> git.parisson.com Git - teleforma.git/commitdiff
add push to master server when recording new conference
authoryomguy <yomguy@parisson.com>
Tue, 24 Jul 2012 22:35:19 +0000 (00:35 +0200)
committeryomguy <yomguy@parisson.com>
Tue, 24 Jul 2012 22:35:19 +0000 (00:35 +0200)
example/settings.py
teleforma/models.py
teleforma/templates/teleforma/course_conference.html
teleforma/views.py

index 54ef65db096412c4c7bff8d5e0bd0b9ececb5aee..399eb3dc2740826d2f9036564d013927a65afec8 100644 (file)
@@ -190,3 +190,4 @@ TELECASTER_CONF = [{'type':'mp3','server_type':'icecast','conf':'/etc/telecaster
 
 TELECASTER_RSYNC_SERVER = 'telecaster@jimi.parisson.com:archives/'
 TELECASTER_RSYNC_LOG = '/var/log/telecaster/rsync.log'
+TELECASTER_MASTER_SERVER = 'angus.parisson.com'
index 4da9817352219b00e35eb2b014722152a9b9aa21..a55be25213c5331237f02b3cbd067e3a9c03ed86 100755 (executable)
@@ -252,7 +252,13 @@ class Conference(Model):
     def to_json_dict(self):
         data = {'id': self.public_id, 'course_code': self.course.code,
                 'course_type': self.course_type.name, 'professor_id': self.professor.user.username,
-                'session': self.session, 'room': self.room.name,  }
+                'session': self.session, 'room': self.room.name, 'streams':[] }
+        streams = self.livestream.all()
+        if streams:
+            for stream in streams:
+                data['streams'].append({'host': stream.server.host,
+                                        'port': stream.server.port,
+                                        'type': stream.server.type })
         return data
 
     class Meta:
index 472a2be5cebd1232f5d1bdc4e4cef4a3067969fb..2d662c78c8162b080e47145a178f34040c3052ac 100644 (file)
@@ -7,15 +7,15 @@
 <script type="text/javascript">
     var conferenceUtils = {
         stop : function(id){
-            json([id],'teleforma.conference_stop',function(){
-                location.href = '{% url teleforma-desk %}';});
+            json([id],'teleforma.stop_conference',function(){
+                location.href = '{% url teleforma-conference-record %}';});
         }}
 
     jQuery(window).ready(function(){
         var a = jQuery('#action_red');
         var f = conferenceUtils;
         a.unbind('click').click(function(){
-            f.stop({{conference.id}});return false;});
+            f.stop({{conference.code}});return false;});
         });
 </script>
 
index f5f2411217d77991d40bc9ae102b444bb8e47f34..41bca6492258401e07356c89d394b0fb4ac55c23 100755 (executable)
@@ -35,6 +35,7 @@ from django.contrib.auth.decorators import login_required
 from django.contrib.contenttypes.models import ContentType
 from django.views.generic.edit import FormView
 from django.core.urlresolvers import reverse, reverse_lazy
+from jsonrpc.proxy import ServiceProxy
 
 from teleforma.models import *
 from teleforma.forms import *
@@ -273,7 +274,6 @@ class DocumentView(DetailView):
     model = Document
     template_name='teleforma/course_document.html'
 
-
     def get_context_data(self, **kwargs):
         context = super(DocumentView, self).get_context_data(**kwargs)
         all_courses = get_courses(self.request.user)
@@ -345,9 +345,9 @@ class ConferenceView(DetailView):
             context['message'] = contact_message
         return context
 
-    @jsonrpc_method('teleforma.conference_stop')
-    def stop(request, id):
-        conference = Conference.objects.get(id=id)
+    @jsonrpc_method('teleforma.stop_conference')
+    def stop(request, code):
+        conference = Conference.objects.get(code=code)
         conference.date_end = datetime.datetime.now()
         conference.save()
         for stream in conference.livestream.all():
@@ -361,6 +361,11 @@ class ConferenceView(DetailView):
     def dispatch(self, *args, **kwargs):
         return super(ConferenceView, self).dispatch(*args, **kwargs)
 
+    def push(self, conference):
+        url = 'http://' + settings.TELECASTER_MASTER_SERVER + '/json/'
+        s = ServiceProxy(url)
+        s.teleforma.stop_conference(conference.code)
+
 
 class ConferenceRecordView(FormView):
     "Conference record form : TeleCaster module required"
@@ -412,61 +417,61 @@ class ConferenceRecordView(FormView):
 #                self.snapshot(stream.snapshot_url, station.output_dir)
                 self.snapshot('http://localhost:8080/snapshot/safe', station.output_dir)
 
+            try:
+                self.push(self.conference)
+            except:
+                pass
+
         return super(ConferenceRecordView, self).form_valid(form)
 
     def snapshot(self, url, dir):
+        width = 160
+        height = 90
         img = urllib.urlopen(url)
         path = dir + os.sep + 'preview.webp'
         f = open(path, 'w')
         f.write(img.read())
         f.close()
-        command = '/usr/bin/dwebp ' + path + ' -o ' + dir + os.sep + 'preview.png &'
+        command = '/usr/bin/dwebp ' + path + ' -scale ' + str(width) + ' ' + str(height) + \
+                    ' -o ' + dir + os.sep + 'preview.png &'
         os.system(command)
 
     @method_decorator(login_required)
     def dispatch(self, *args, **kwargs):
         return super(ConferenceRecordView, self).dispatch(*args, **kwargs)
 
-    def create(self, conference):
+    @jsonrpc_method('teleforma.create_conference')
+    def create(request, conference):
         if isinstance(conference, dict):
-            conf, c = Conference.objects.get_or_create(public_id=conference['id'])
+            course = Course.objects.get(code=conference['course_code'])
+            course_type = CourseType.objects.get(name=conference['course_type'])
+            conf, c = Conference.objects.get_or_create(public_id=conference['id'],
+                                                       course=course, course_type=course_type)
             if c:
-                conf.course = Course.objects.get(code=conference['course_code'])
-                conf.course_type = CourseType.objects.get(name=conference['course_type'])
                 user = User.objects.get(username=conference['professor_id'])
                 conf.session = conference['session']
                 conf.professor = Professor.objects.get(user=user)
                 conf.room = Room.objects.get(name=conference['room'])
+                conf.date_begin = datetime.datetime.now()
                 conf.save()
-                #TODO: dates
-        else:
-            raise 'Error : Bad Conference dictionnary'
-
-    @jsonrpc_method('teleforma.update_conferences')
-    def update(request, data):
-        if isinstance(data, list):
-            for conference in data:
-                self.create(conference)
-        else:
-            raise 'Error : Bad Conference dictionnary list'
-
-    @jsonrpc_method('teleforma.add_conference')
-    def add(request, data):
-        # playlist_resource must be a dict
-        if isinstance(data, dict):
-            self.create(data)
+                course.save()
+                for stream in conference['streams']:
+                    host = stream['host']
+                    port = stream['port']
+                    server_type = stream['type']
+                    server, c = StreamingServer.objects.get_or_create(host=status.ip,
+                                                                      port=port,
+                                                                      type=server_type)
+                    stream = LiveStream(conference=conf, server=server,
+                                        stream_type=type, streaming=True)
+                    stream.save()
         else:
             raise 'Error : Bad Conference dictionnary'
 
     def push(self, conference):
-        url = 'http://' + conference.course.department.domain + '/'
-        data = {"id":"jsonrpc", "params":"'%s'", "method":"'teleforma.add_conference'",
-                                    "jsonrpc":"1.0"} % conference.to_json_dict()
-        jdata = json.dumps(data)
-        try:
-            urllib2.urlopen(url, jdata)
-        except:
-            pass
+        url = 'http://' + settings.TELECASTER_MASTER_SERVER + '/json/'
+        s = ServiceProxy(url)
+        s.teleforma.create_conference(conference.to_json_dict())
 
 
 class UsersView(ListView):