All pastes #70159 Raw Edit

Untitled

public python v1 · immutable
#70159 ·published 2006-06-23 20:52 UTC
rendered paste body
#!/usr/bin/env python"""A quick hack which started out as a mpd client to update the status bar,   turning into a general purpose status bar updater thing, slowly.   Motivated by an irrational hatred of seeing the wmii status script churn,   spinning new processes left and right just to update the time.TODO: Make the mpd support optional.      Make the whole thing slightly 'plugin-anble' Maybe.Using:      #status &      /bin/kill `cat ~/.wmii-4/.pystatus.pid`      pystatus &"""import timeimport ostry:    from mpdclient import MpdController, MpdNoResponseErrorexcept ImportError:    print 'install http://www.musicpd.org/py-libmpdclient.shtml'    raise SystemExitWMIIDIR = os.environ['HOME'] + '/.wmii-4'PIDFILE = WMIIDIR+'/.pystatus.pid'mpd_state = {    "1" : '.', # stopped    "2" : '>', # playing    "3" : '|', # paused    }def wmii_status_write(notice):    """(string)    """    os.system('echo "%s" | wmiir write /rbar/status' % notice)def format_datetime():    return time.strftime(' | %-I:%M %p %A %B %-d', time.localtime())class Status:    def __init__(self):        self.mpc = MpdController(port=6600)        self.last_status_bar = ''    def format_load_average(self):        return ' | %.2f %.2f %.2f' % os.getloadavg()    def format_mpd_status(self):        try:            status = self.mpc.getStatus()        except MpdNoResponseError:            try: # one second chance                 self.mpd.__init__()            except:                raise SystemExit            status = self.mpc.getStatus()        song = self.mpc.getCurrentSong()        song_num = status.song        playlist_length = status.playlistLength        state = status.state        return '%s %s - %s %s (%s/%s)' % (mpd_state[str(state)],                    song.title.strip(),                    song.artist.strip(),                    song.album.strip(),                    song_num,                    playlist_length)    def update_bar(self):        """go into a loop... and keep on doing it.        """        open(PIDFILE,'w').write("%s\n" % os.getpid())        while 1:            current = self.format_mpd_status() + \                      self.format_load_average() + \                      format_datetime()             if current <> self.last_status_bar:                wmii_status_write(current)                self.last_status_bar = current            time.sleep(1)if __name__ == '__main__':    status = Status()    # below is only here for testing - no consequence in     # leaving in or out for 'real' use    wmii_status_write(status.format_mpd_status() + format_datetime())    # do it, do it forever.    status.update_bar()