Changeset 77f938108c38f31000cf130d4f5bef8e31adfb8a

Show
Ignore:
Timestamp:
12/14/09 01:41:22 (5 years ago)
Author:
Guillaume Pellerin <yomguy@…>
Children:
dbe9f5c4d1ea2d8af563d63bd8fb2fd9dd70862e
Parents:
5277dfef6c190c796dab80dc046e6b48c00288ec
git-committer:
Guillaume Pellerin <yomguy@parisson.com> / 2009-12-14T00:41:22Z+0000
Message:

add osc controller and next_media callback to skip current media

Files:
1 added
2 modified

Legend:

Unmodified
Added
Removed
  • deefuzzer.py

    r5277dfe r77f9381  
    4747import subprocess 
    4848import platform 
    49 import twitter 
    50 import tinyurl 
    5149from threading import Thread 
    5250from tools import * 
     
    137135        self.stations = [] 
    138136        self.logger.write('Number of stations : ' + str(self.nb_stations)) 
    139  
    140         # Create M3U playlist 
    141         self.logger.write('Writing M3U file to : ' + self.m3u) 
    142137 
    143138    def get_conf_dict(self): 
     
    161156            i += 1 
    162157        m3u.close() 
     158        self.logger.write('Writing M3U file to : ' + self.m3u) 
     159 
    163160 
    164161    def run(self): 
    165162        # Create a Queue 
    166         # Not too much, otherwise, you will get memory leaks ! 
    167163        q = Queue.Queue(1) 
    168164 
     
    274270                self.twitter = Twitter(self.twitter_user, self.twitter_pass) 
    275271                self.twitter_tags = self.station['twitter']['tags'].split(' ') 
     272                import tinyurl 
    276273                self.tinyurl = tinyurl.create_one(self.channel.url + '/m3u/' + self.m3u.split(os.sep)[-1]) 
    277274 
     
    286283                self.jingle_id = 0 
    287284 
     285        self.osc_control = '0' 
     286        if 'control' in self.station: 
     287            self.osc_control_mode = self.station['control']['mode'] 
     288            self.osc_port = self.station['control']['port'] 
     289            if self.osc_control_mode =='1': 
     290                self.osc_controller = OSCController(self.osc_port) 
     291                self.osc_controller.add_method('/media/next', 'i', self.media_next_callback) 
     292                self.osc_controller.start() 
     293 
     294    def media_next_callback(self, path, value): 
     295        value = value[0] 
     296        self.osc_next_media = value 
     297        message = "Received OSC message '%s' with arguments '%d'" % (path, value) 
     298        self.logger.write(message) 
     299 
    288300    def get_playlist(self): 
    289301        file_list = [] 
     
    292304                s = file.split('.') 
    293305                ext = s[len(s)-1] 
    294                 if ext.lower() == self.channel.format and not '/.' in file: 
     306                if ext.lower() == self.channel.format and not os.sep+'.' in file: 
    295307                    file_list.append(root + os.sep + file) 
    296308        file_list.sort() 
     
    303315                s = file.split('.') 
    304316                ext = s[len(s)-1] 
    305                 if ext.lower() == self.channel.format and not '/.' in file: 
     317                if ext.lower() == self.channel.format and not os.sep+'.' in file: 
    306318                    file_list.append(root + os.sep + file) 
    307319        file_list.sort() 
     
    458470                break 
    459471            media = self.get_next_media() 
     472            self.osc_next_media = 0 
    460473            self.counter += 1 
    461474            q.task_done() 
     
    493506                        self.channel.send(__chunk) 
    494507                        self.channel.sync() 
     508                        if self.osc_next_media != 0: 
     509                            break 
    495510                        # self.logger.write('Station delay (ms) ' + self.short_name + ' : '  + str(self.channel.delay())) 
    496511                    except: 
     
    554569 
    555570    def read_slow(self): 
    556         """Read a bigger part of the media and stream the little parts of data through a generator 
     571        """Read a bigger part of the media and stream the little parts of the data through a generator 
    557572        """ 
    558573 
     
    579594 
    580595class Twitter: 
    581     """Post a message to Twitter""" 
    582  
     596     
    583597    def __init__(self, username, password): 
    584         #Thread.__init__(self) 
     598        import twitter 
    585599        self.username = username 
    586600        self.password = password 
     
    592606        except: 
    593607            pass 
     608 
     609 
     610class OSCController(Thread): 
     611 
     612    def __init__(self, port): 
     613        Thread.__init__(self) 
     614        import liblo 
     615        self.port = port 
     616        try: 
     617            self.server = liblo.Server(self.port) 
     618        except liblo.ServerError, err: 
     619            self.logger.write(str(err)) 
     620 
     621    def add_method(self, path, type, method): 
     622        self.server.add_method(path, type, method) 
     623 
     624    def server(self): 
     625        return self.server 
     626 
     627    def run(self): 
     628        while True: 
     629            self.server.recv(1000) 
    594630 
    595631 
  • example/myfuzz.xml

    rb0f26c1 r77f9381  
    11<deefuzzer> 
    22    <log>/tmp/deefuzz.log</log> 
    3     <m3u>/var/www/m3u/yomguy_playlist.m3u</m3u> 
     3    <m3u>/var/www/m3u/mystation.m3u</m3u> 
    44    <station> 
    55        <infos> 
     
    4040            <shuffle>1</shuffle> 
    4141        </jingles> 
     42        <control> 
     43            <mode>1</mode> 
     44            <port>1234</port> 
     45        </control> 
    4246    </station> 
    4347</deefuzzer>