]> git.parisson.com Git - telecaster-cgi.git/commitdiff
Bug Fixes
authoryomguy <yomguy@parisson.com>
Mon, 26 Nov 2007 17:51:06 +0000 (17:51 +0000)
committeryomguy <yomguy@parisson.com>
Mon, 26 Nov 2007 17:51:06 +0000 (17:51 +0000)
pre-barreau.xml
teleoddcast.cfg
teleoddcast.py
teleoddcast.xml
tools.py

index e48b49f3afc5ea69931b7b71a002f863ea780139..20940f610efa1cbc119491ad394994ef37154a65 100644 (file)
 <teleoddcast>
     <url>http://augustins.pre-barreau.com</url>
-    <departement>
+    <title>Augustins - Pre-Barreau</title>
+    <department>
         <name>CRFPA</name>
         <courses>
             <course>
-                <name>Liberté publiques - Cours
-                </name>
+                <name>Liberté publiques - Cours</name>
             </course>
             <course>
-                <name>Note de synthèse - Corrections
-                </name>
+                <name>Note de synthèse - Corrections</name>
             </course>
             <course>
-                <name>Droit civil - Cours
-                </name>
+                <name>Droit civil - Cours</name>
             </course>
             <course>
-                <name>Droit civil - Corrections
-                </name>
+                <name>Droit civil - Corrections</name>
             </course>
             <course>
-                <name>Procédure administrative et contentieuse - Cours
-                </name>
+                <name>Procédure administrative et contentieuse - Cours</name>
             </course>
             <course>
-                <name>Procédure administrative et contentieuse - Corrections
-                </name>
+                <name>Procédure administrative et contentieuse - Corrections</name>
             </course>
             <course>
-                <name>Procédure civile - Cours
-                </name>
+                <name>Procédure civile - Cours</name>
             </course>
             <course>
-                <name>Procédure civile - Corrections
-                </name>
+                <name>Procédure civile - Corrections</name>
             </course>
             <course>
-                <name>Procédure pénale - Cours
-                </name>
+                <name>Procédure pénale - Cours</name>
             </course>
             <course>
-                <name>Procédure pénale - Corrections
-                </name>
+                <name>Procédure pénale - Corrections</name>
             </course>
             <course>
-                <name>Droit commercial des affaires - Cours
-                </name>
+                <name>Droit commercial des affaires - Cours</name>
             </course>
             <course>
-                <name>Droit commercial des affaires - Corrections
-                </name>
+                <name>Droit commercial des affaires - Corrections</name>
             </course>
             <course>
-                <name>Droit communautaire et européen - Cours
-                </name>
+                <name>Droit communautaire et européen - Cours</name>
             </course>
             <course>
-                <name>Droit communautaire et européen - Corrections
-                </name>
+                <name>Droit communautaire et européen - Corrections</name>
             </course>
             <course>
-                <name>Droit fiscal - Cours
-                </name>
+                <name>Droit fiscal - Cours</name>
             </course>
             <course>
-                <name>Droit fiscal - Corrections
-                </name>
+                <name>Droit fiscal - Corrections</name>
             </course>
             <course>
-                <name>Droit pénal - Cours
-                </name>
+                <name>Droit pénal - Cours</name>
             </course>
             <course>
-                <name>Droit pénal - Corrections
-                </name>
+                <name>Droit pénal - Corrections</name>
             </course>
             <course>
-                <name>Droit de la famille et des personnes - Cours
-                </name>
+                <name>Droit de la famille et des personnes - Cours</name>
             </course>
             <course>
-                <name>Droit de la famille et des personnes - Corrections
-                </name>
+                <name>Droit de la famille et des personnes - Corrections</name>
             </course>
             <course>
-                <name>Droit patrimonial - Cours
-                </name>
+                <name>Droit patrimonial - Cours</name>
             </course>
             <course>
-                <name>Droit patrimonial - Corrections
-                </name>
+                <name>Droit patrimonial - Corrections</name>
             </course>
             <course>
-                <name>Droit du travail - Cours
-                </name>
+                <name>Droit du travail - Cours</name>
             </course>
             <course>
-                <name>Droit du travail - Corrections
-                </name>
+                <name>Droit du travail - Corrections</name>
             </course>
             <course>
-                <name>Droit administratif - Cours
-                </name>
+                <name>Droit administratif - Cours</name>
             </course>
             <course>
-                <name>Droit administratif - Corrections
-                </name>
+                <name>Droit administratif - Corrections</name>
             </course>
             <course>
-                <name>Droit public des activités économiques - Cours
-                </name>
+                <name>Droit public des activités économiques - Cours</name>
             </course>
             <course>
-                <name>Droit public des activités économiques - Corrections
-                </name>
+                <name>Droit public des activités économiques - Corrections</name>
             </course>
             <course>
-                <name>Droit international privé - Cours
-                </name>
+                <name>Droit international privé - Cours</name>
             </course>
             <course>
-                <name>Droit international privé - Corrections
-                </name>
+                <name>Droit international privé - Corrections</name>
             </course>
             <course>
-                <name>Procédures collectives et sûretés - Cours
-                </name>
+                <name>Procédures collectives et sûretés - Cours</name>
             </course>
             <course>
-                <name>Procédures collectives et sûretés - Corrections
-                </name>
+                <name>Procédures collectives et sûretés - Corrections</name>
             </course>
             <course>
-                <name>Procédure communautaire - Cours
-                </name>
+                <name>Procédure communautaire - Cours</name>
             </course>
             <course>
-                <name>Procédures civile d'exécution - Cours
-                </name>
+                <name>Procédures civile d'exécution - Cours</name>
             </course>
             <course>
-                <name>Comptabilité privée - Cours
-                </name>
+                <name>Comptabilité privée - Cours</name>
             </course>
             <course>
-                <name>Finances publiques - Cours
-                </name>
+                <name>Finances publiques - Cours</name>
             </course>
             <course>
-                <name>REUNION
-                </name>
+                <name>REUNION</name>
             </course>
             <course>
-                <name>TEST
-                </name>
+                <name>TEST</name>
             </course>
         </courses>
-    </departement>
+    </department>
 
-    <departement>
+    <department>
         <name>AE</name>
         <courses>
             <course>
-                <name>
-                </name>
+                <name>Administratif_Cours</name>
             </course>
             <course>
-                <name>Administratif_Cours
-                </name>
+                <name>Adm_Correction</name>
             </course>
             <course>
-                <name>Adm_Correction
-                </name>
+                <name>Civil_Correction</name>
             </course>
             <course>
-                <name>Civil_Correction
-                </name>
+                <name>Commercial_Correctio</name>
             </course>
             <course>
-                <name>Commercial_Correctio
-                </name>
+                <name>Commercial_Cours</name>
             </course>
             <course>
-                <name>Commercial_Cours
-                </name>
+                <name>Deontologie_Cours</name>
             </course>
             <course>
-                <name>Deontologie_Cours
-                </name>
+                <name>Droit civil - Cours</name>
             </course>
             <course>
-                <name>Droit civil - Cours
-                </name>
+                <name>Methodo_Oraux</name>
             </course>
             <course>
-                <name>Methodo_Oraux
-                </name>
+                <name>Penal_Correction</name>
             </course>
             <course>
-                <name>Penal_Correction
-                </name>
+                <name>Penal_Cours</name>
             </course>
             <course>
-                <name>Penal_Cours
-                </name>
+                <name>Procedures_Cours</name>
             </course>
             <course>
-                <name>Procedures_Cours
-                </name>
+                <name>Reunion_info</name>
             </course>
             <course>
-                <name>Reunion_info
-                </name>
+                <name>Social_Corrections</name>
             </course>
             <course>
-                <name>Social_Corrections
-                </name>
+                <name>Social_Cours</name>
             </course>
             <course>
-                <name>Social_Cours
-                </name>
+                <name>REUNION</name>
             </course>
             <course>
-                <name>REUNION
-                </name>
-            </course>
-            <course>
-                <name>TEST
-                </name>
+                <name>TEST</name>
             </course>
         </courses>
-    </departement>
+    </department>
 
-    <departement>
+    <department>
         <name>ENM</name>
         <courses>
             <course>
-                <name>TEST
-                </name>
+                <name>TEST</name>
+            </course>
+            <course>
+                <name>REUNION</name>
             </course>
         </courses>
-    </departement>
+    </department>
                 
 
-    <departement>
+    <department>
         <name>FJP</name>
         <courses>
             <course>
-                <name>TEST
-                </name>
+                <name>TEST</name>
+            </course>
+            <course>
+                <name>REUNION</name>
             </course>
         </courses>
-    </departement>
+    </department>
 
 </teleoddcast>
index d8c19db9951601a83d5fc653c235d772901bf6ff..539d6b5fa04a929fd6f1b162f1030a63196e8c29 100644 (file)
@@ -1,7 +1,7 @@
 Server=localhost
 Port=8000
-ServerPassword=streampreb
-ServerMountpoint=/Pre-barreau_-_Augustins_-_CRFPA_-_Droit_civil_-_Corrections.ogg
+ServerPassword=source2parisson
+ServerMountpoint=/My_best_funky_station_-_AE_-_Civil_Correction.ogg
 ServerPublic=0
 AutomaticReconnectSecs=10
 Encode=OggVorbis
@@ -13,8 +13,8 @@ ServerType=Icecast2
 ExternalFile=/home/pre-barreau/augustins/audio/
 #YP Settings
 ServerStreamURL=http://www.pre-barreau.com
-ServerName=Pre-barreau_-_Augustins_-_CRFPA_-_Droit_civil_-_Corrections_-_1
-ServerDescription=Pre-barreau_-_Augustins_-_CRFPA_-_Droit_civil_-_Corrections_-_1_-_edfez_-_ezf
+ServerName=My_best_funky_station_-_AE_-_Civil_Correction_-_1
+ServerDescription=My_best_funky_station_-_AE_-_Civil_Correction_-_1_-_sf_-_ze
 ServerGenre=Teaching
 #Advanced Settings
 LogLevel=1
index 388983d20b2c1c33ffedb11d84f8da041f9e5115..64635682a53eb487e18bda662d9523fb03c80329 100755 (executable)
@@ -36,11 +36,11 @@ class Course:
     """A course in a class room"""
     
     def __init__(self, dict):
-        self.department = course_dict['department']
-        self.course = course_dict['course']
-        self.session = course_dict['session']
-        self.professor = course_dict['professor']
-        self.comment = course_dict['comment']
+        self.department = dict['department']
+        self.course = dict['course']
+        self.session = dict['session']
+        self.professor = dict['professor']
+        self.comment = dict['comment']
 
     def get_info(self):
         return self.title, self.department, self.course, self.session, self.professor, self.comment
@@ -61,25 +61,19 @@ class TeleOddCast(Course):
         self.port = self.conf['server']['port']
         self.password = self.conf['server']['sourcepassword']
         self.url = 'http://'+self.host+':'+self.port
-           self.uid = os.getuid()
-        self.odd_pid = get_pid('^oddcastv3 -n [^LIVE]', self.uid)
-        self.rip_pid = get_pid('streamripper ' + self.url + self.mount_point, self.uid)
         self.odd_conf_file = self.conf['server']['odd_conf_file']
-        self.ServerDescription = clean_string('_-_'.join(self.title,
-                                               self.department,
-                                               self.course,
-                                               self.session,
-                                               self.professor,
-                                               self.comment))
-        self.ServerName = clean_string('_-_'.join(self.title,
-                                        self.department,
-                                        self.course,
-                                        self.session))
+        self.description = [self.title, self.department, self.course, self.session, self.professor, self.comment]
+        self.server_name = [self.title, self.department, self.course, self.session]
+        self.ServerDescription = clean_string('_-_'.join(self.description))
+        self.ServerName = clean_string('_-_'.join(self.server_name))
         self.mount_point = '/' + clean_string(self.title) + '_-_' + \
                                  clean_string(self.department) + '_-_' + \
                                  clean_string(self.course)+'.ogg'
         self.lock_file = self.root_dir + self.ServerDescription + '.lock'
         self.filename = self.ServerDescription + '.ogg'
+        self.uid = os.getuid()
+        self.odd_pid = get_pid('^oddcastv3 -n [^LIVE]', self.uid)
+        self.rip_pid = get_pid('streamripper ' + self.url + self.mount_point, self.uid)
 
 
     def set_oddcast_conf(self):
@@ -114,16 +108,10 @@ class TeleOddCast(Course):
         os.system(command)
         self.set_lock()
         time.sleep(1)
-        return mount_point
 
     def set_lock(self):
         lock = open(self.lock_file,'w')
-        lock_text = clean_string('_*_'.join(self.title,
-                                               self.department,
-                                               self.course,
-                                               self.session,
-                                               self.professor,
-                                               self.comment))
+        lock_text = clean_string('_*_'.join(self.description))
         lock_text = lock_text.replace('\n','')
         lock.write(lock_text)
         lock.close()
@@ -149,7 +137,7 @@ class TeleOddCast(Course):
         time.sleep(1)
         date = datetime.datetime.now().strftime("%Y")
         dirname = self.media_dir + os.sep + self.department + os.sep + \
-                  clean_string('_-_'.join(self.title, self.department, self.course, self.session))
+                  clean_string('_-_'.join(self.server_name))
                   
         if os.path.exists(dirname) and os.path.exists(dirname+os.sep+'incomplete'):
             shutil.move(dirname+os.sep+'incomplete'+os.sep+' - .ogg',dirname+os.sep)
@@ -158,7 +146,7 @@ class TeleOddCast(Course):
 
     def write_tags(self):
         date = datetime.datetime.now().strftime("%Y")
-        new_title = clean_string('_-_'.join(self.title, self.department, self.course, self.session)
+        new_title = clean_string('_-_'.join(self.server_name))
         dirname = self.media_dir + os.sep + self.department + os.sep + new_title
         if os.path.exists(dirname+os.sep+self.filename):
             audio = OggVorbis(dirname+os.sep+self.filename)
@@ -191,8 +179,11 @@ class WebView:
         self.conf = xml2dict(school_file)
         self.conf = self.conf['teleoddcast']
         self.url = self.conf['url']
-        self.departments = self.conf['department']['name']
-        self.len_departments = str(len(self.departments))
+        self.title = self.conf['title']
+        self.departments = self.conf['department']
+        #print self.departments
+        #self.courses = self.conf['department']['courses']
+        self.len_departments = len(self.departments)
 
     def header(self):
         # Required header that tells the browser how to render the HTML.
@@ -205,24 +196,29 @@ class WebView:
         print 'function choix(formulaire)'
         print '{var j; var i = formulaire.department.selectedIndex;'
         print 'if (i == 0)'
-        print   'for(j = 1; j < '+ self.len_departments + '; j++)'
+        print   'for(j = 1; j < '+ str(self.len_departments) + '; j++)'
         print      'formulaire.course.options[j].text="";'
-        print      'formulaire.course.options[j].value="";'
+        #print      'formulaire.course.options[j].value="";'
         print 'else{'
         print '   switch (i){'
-        for k in range(1,self.len_departments)
+        for k in range(0,self.len_departments):
             department = self.departments[k]
-            courses = dict2tuple(department['courses'])
-            print '       case '+k+' : var text = new Array('+courses+'); '
+            courses = department['courses']
+            #print courses
+            courses_t = dict2tuple(courses)
+            #print courses
+            courses = '"'+'","'.join(courses_t)+'"'
+            print '       case '+str(k+1)+' : var text = new Array('+courses+'); '
             print '       break;'
         print '       }'
-        print '      for(j = 0; j<'+self.len_departments+'; j++)'
-        print '       formulaire.course.options[j+1].text=text[j];}'
-        print '       formulaire.course.options[j+1].value=text[j];}'
+        print '      for(j = 0; j<50; j++)'
+        print '       formulaire.course.options[j+1].text=text[j];'
+        #print '       formulaire.course.options[j+1].value=text[j];'
+        print '}'
         print '      formulaire.course.selectedIndex=0;}'
         print '</script>'
-            
         print "</HEAD>"
+        
         print "<BODY BGCOLOR =\"#FFFFFF\">"
         print "<div id=\"bg\">"
         print "<div id=\"header\">"
@@ -231,7 +227,7 @@ class WebView:
 
     def colophon(self):
         print "<div id=\"colophon\">"
-        print "TeleOddCast "+self.version+" &copy; <span>2007</span>&nbsp;<a href=\"http://parisson.com\">Parisson</a>. Tous droits r&eacute;serv&eacute;s."
+        print "TeleOddCast "+version+" &copy; <span>2007</span>&nbsp;<a href=\"http://parisson.com\">Parisson</a>. Tous droits r&eacute;serv&eacute;s."
         print "</div>"
             
     def footer(self):
@@ -244,19 +240,20 @@ class WebView:
         print "<div id=\"main\">"
         print "<h5><a href=\"http://augustins.pre-barreau.com:8000/crfpa.pre-barreau.com_live.ogg.m3u\">Cliquez ici pour &eacute;couter le flux continu 24/24 en direct</a></h5>"
         print "\t<TABLE BORDER = 0>"
-        print "\t\t<FORM METHOD = post ACTION = \"teleoddcast.py\">"
+        print "\t\t<form method=post action=\"teleoddcast.py\" name=\"formulaire\">"
         print "\t\t<TR><TH align=\"left\">Titre :</TH><TD>"+self.title+"</TD></TR>"
         
         print "\t\t<TR><TH align=\"left\">D&eacute;partement :</TH>"
         print "<TD><select name=\"department\" onChange=\"choix(this.form)\">"
-        print "<option selected>...........Choisissez un d&eacute;...........</option>"
+        print "<option selected>...........Choisissez un d&eacute;partement...........</option>"
         for department in self.departments:
-            print "<option value=\""+department+"\">"+department+"</option>"
+            print "<option value=\""+department['name']+"\">"+department['name']+"</option>"
         print "</select></TD></TR>"
         
         print "\t\t<TR><TH align=\"left\">Intitul&eacute; du cours :</TH>"
         print "<TD><select name=\"course\">"
-        for course in courses:
+        print "<option selected>...........Choisissez un intitul&eacute;...........</option>"
+        for i in range(1,50):
             print "<option></option>"
         print "</select></TD></TR>"
 
@@ -283,7 +280,6 @@ class WebView:
 
     def stop_form(self, course_dict):
         """Stop page"""
-        title = course_dict['title']
         department = course_dict['department']
         course = course_dict['course']
         session = course_dict['session']
@@ -296,7 +292,7 @@ class WebView:
         print "<hr>"
         print "\t<TABLE BORDER = 0>"
         print "\t\t<FORM METHOD = post ACTION = \"teleoddcast.py\">"
-        print "\t\t<TR><TH align=\"left\">Titre :</TH><TD>"+title+"</TD></TR>"
+        print "\t\t<TR><TH align=\"left\">Titre :</TH><TD>"+self.title+"</TD></TR>"
         print "\t\t<TR><TH align=\"left\">D&eacute;partement :</TH><TD>"+department+"</TD><TR>"
         print "\t\t<TR><TH align=\"left\">Intitul&eacute; du cours :</TH><TD>"+course+"</TD><TR>"
         print "\t\t<TR><TH align=\"left\">Session :</TH><TD>"+session+"</TD><TR>"
@@ -304,34 +300,33 @@ class WebView:
         print "\t\t<TR><TH align=\"left\">Commentaire :</TH><TD>"+comment+"</TD><TR>"
         print "\t</TABLE>"
         print "<hr>"
-        print "<h5><a href=\""+self.url+"/"+clean_string(title)+"_-_"+clean_string(department)+"_-_"+clean_string(course)+".ogg.m3u\">Cliquez ici pour &eacute;couter cette formation en direct</a></h5>"
+        print "<h5><a href=\""+self.url+"/"+clean_string(self.title)+"_-_"+clean_string(department)+"_-_"+clean_string(course)+".ogg.m3u\">Cliquez ici pour &eacute;couter cette formation en direct</a></h5>"
         print "</div>"
         print "<div id=\"tools\">"
         print "\t<INPUT TYPE = hidden NAME = \"action\" VALUE = \"stop\">"
         print "\t<INPUT TYPE = submit VALUE = \"Stop\">"
         print "\t</FORM>"
         print "</div>"
-        colophon()
-        footer()
+        self.colophon()
+        self.footer()
 
 def main():
-       """Main function"""
-
+    """Main function"""
     conf_file = 'teleoddcast.xml'
-       school_file = 'pre-barreau.xml'
-       odd_conf_file = 'teleoddcast.cfg'
+    school_file = 'pre-barreau.xml'
+    odd_conf_file = 'teleoddcast.cfg'
     lock_file = 'teleoddcast.lock'
-       uid = os.getuid()
+    uid = os.getuid()
     odd_pid = get_pid('^oddcastv3 -n [^LIVE]', uid)
 
     w = WebView(school_file)
-       form = cgi.FieldStorage()
+    form = cgi.FieldStorage()
     
-       if odd_pid == [] and form.has_key("action") and \
-              form.has_key("department") and form.has_key("course") and form.has_key("professor") \
-              and form.has_key("comment") and form["action"].value == "start":
+    if odd_pid == [] and form.has_key("action") and \
+           form.has_key("department") and form.has_key("course") and form.has_key("professor") \
+           and form.has_key("comment") and form["action"].value == "start":
         
-               course_dict = {'department': form["department"].value,
+        course_dict = {'department': form["department"].value,
                        'course': form["course"].value,
                        'session': form["session"].value,
                        'professor': form["professor"].value,
@@ -341,20 +336,20 @@ def main():
         t.start()
         w.stop_form(course_dict)
         
-       elif odd_pid != [] and os.path.exists(lock_file) and not form.has_key("action"):
+    elif odd_pid != [] and os.path.exists(lock_file) and not form.has_key("action"):
         t = TeleOddCast(conf_file, course_dict)
         title,department,course,session,professor,comment = t.get_info()
-               w.stop_form(course_dict)
+       w.stop_form(course_dict)
 
-       elif oddcast_pid != [] and form.has_key("action") and form["action"].value == "stop":
+    elif odd_pid != [] and form.has_key("action") and form["action"].value == "stop":
         t = TeleOddCast(conf_file, course_dict)
-               if os.path.exists(lock_file):
+        if os.path.exists(lock_file):
             title,department,course,session,professor,comment = t.get_info()
         t.stop()
-               w.start_form()
+       w.start_form()
 
-       elif oddcast_pid == []:
-               w.start_form()
+    elif odd_pid == []:
+       w.start_form()
 
 # Call main function.
 if __name__ == '__main__':
index ec98dc1320f8175d56eee6139bed6f26b056f8fc..4cd2dbd252de8f5913a690b0ada6cce011a1277f 100644 (file)
@@ -1,6 +1,5 @@
 <teleoddcast>
-    <station>
-        <infos>
+       <infos>
             <short_name>My_Station_5</short_name>
             <name>My best funky station</name>
             <description>My personal best funky playlist ever !</description>
@@ -25,5 +24,4 @@
             <voices>2</voices>
             <shuffle>1</shuffle>
         </media>
-    </station>
 </teleoddcast>
index 425cd6af17db115d5607e745772b16c6bb2cb50d..fc80489aee0577e062c61f9f2f9fb4c4476df234 100644 (file)
--- a/tools.py
+++ b/tools.py
@@ -66,4 +66,13 @@ def get_params_from_lock(lock_file):
     lockfile.close()
     return params_ok
 
+def dict2tuple(dict):
+    len_dict = len(dict['course'])
+    if len_dict == 1:
+        return dict['course']['name']
+    else:
+        tup = []
+        for value in dict['course']:
+            tup.append(value['name'])
+        return tup