2008年8月8日星期五

gtktunet

tunet二校门在Linux下只有命令行程序,我给包装成了gtk托盘图标的了。
StatusIcon很漂亮

#!/usr/bin/env python
import popen2, gtk

class MyTunetGTK():
    def __init__(self):
        self.tr = gtk.StatusIcon()
        self.tr.connect('popup-menu', self.on_popup_menu)
        self.tr.set_from_file('gif/tunet.gif')
        self.tr.set_visible(True)
        self.ui = gtk.UIManager()
        menu = """
        <ui><popup name="Popup">
                <menuitem action="Disconnect"/>
                <menuitem action="Limit"/>
                <menuitem action="Free"/>
                <separator/>
                <menuitem action="About"/>
                <menuitem action="Quit"/>
        </popup></ui>
        """
        ag = gtk.ActionGroup('Actions')
        ag.add_actions([
                ('About', gtk.STOCK_ABOUT, 'About', None, None, self.on_about),
                ('Quit', gtk.STOCK_QUIT, 'Quit', None, None, self.on_quit)
        ])
        ag.add_radio_actions([
            ('Disconnect', None, 'Disconnect', None, None, 0),
                ('Limit', None, 'Limit', None, None, 1),
                ('Free', None, 'Free', None, None, 2),
        ], 0, self.on_conn_changed)
        self.ui.insert_action_group(ag, 0)
        self.ui.add_ui_from_string(menu)
        self.menu = self.ui.get_widget('/Popup')

    def start(self):
        gtk.main()

    def on_popup_menu(self, status, button, time):
        self.menu.popup(None, None, None, button, time)
   
    def on_conn_changed(self, action, current):
        self.tr.set_from_file('gif/tunet.gif')
        self.local()
        self.status = action.get_current_value()
        if self.status == 1:
            self.conn_limit()
        elif self.status == 2:
            self.conn_free()

    def local(self):
        for i in range(3):
            p = popen2.Popen3("ps -C tunet o pid= | grep -m 1 . | xargs kill", True)
            s = p.fromchild.read()

    def conn_limit(self):
        f = popen2.Popen3("./inner", True).fromchild
        while True:
            line = f.readline()
            if line:
                if "DoConnect(503): ok!" in line:
                    self.tr.set_from_file('gif/green.gif')
                    break

    def conn_free(self):
        p = popen2.Popen3("./outter", True)
        f = p.fromchild
        while True:
            line = f.readline()
            if line:
                if "DoConnect(503): ok!" in line:
                    self.tr.set_from_file('gif/blue.gif')
                    break

    def on_about(self, data):
        dialog = gtk.AboutDialog()
        dialog.set_name('pygtk wrapper for tunet')
        dialog.set_version('0.1')
        dialog.set_authors(['wangyuantao@msn.com'])
        dialog.run()
        dialog.destroy()
           
    def on_quit(self, data):
        self.local()
        gtk.main_quit()

if __name__ == "__main__":
    m = MyTunetGTK()
    m.start()

2008年8月1日星期五

乐道随机播放的GM脚本

乐道
http://www.likenote.com/
是一个音乐网站,功能上没有什么特别的,甚至很弱,但是我喜欢上面的内容,是我喜欢的音乐风格。
为了能够在这个网站上不间断地听随机收听音乐,我写了一个简单的GreaseMonkey脚本。
目前的问题是无法获得一首曲子的结束时间,因此总是5分钟后强制切换到下一首。

// ==UserScript==
// @name           likenote random walk
// @include        http://www.likenote.com/listener/article/*
// ==/UserScript==

(function(){
//setTimeout("document.documentElement.innerHTML=''",1000);

$ = function(id){
    return document.getElementById(id);
}


duration=5*60*1000;
setTimeout(function(){
    var player = $("SinglePlayer");
//    var tab = $("content").getElementsByClassName("right_bg")[0].getElementsByTagName("table")[1];
//    for(var i=0;i<tab.rows.length;i++){
//        list[i] = tab.rows[i].cells[1].firstChild.href;
//    }
    str = document.documentElement.innerHTML;


    list = str.match(/listener\/article\/\d+/mg);
    rnd = Math.floor(Math.random()*list.length);
    document.documentElement.innerHTML='';
    document.documentElement.appendChild(player);
//    document.documentElement.appendChild(tab);
    document.documentElement.innerHTML += "all:";
    for(i in list){
        href = list[i].split("\/")[2];
        document.documentElement.innerHTML += "<a href='"+href+"'>"+href+"</a>|"
    }
    document.documentElement.innerHTML += "<p>next:"+list[rnd];
},1);

setTimeout(function(){
try{
        location.href = "http://www.likenote.com/"+list[rnd];
}catch(e){alert(e)}
},duration);
//str.match(/listener\/article\/\d+/mg)

})();