亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? btdownloadgui.py

?? BT的原代碼
?? PY
?? 第 1 頁 / 共 5 頁
字號:
        self.sw.set_shadow_type(gtk.SHADOW_IN)        self.win.add(self.sw)        column_header = ['IP address', 'Client', 'Connection', 'KB/s down', 'KB/s up', 'MB downloaded', 'MB uploaded', '% complete', 'KB/s est. peer download']        pre_size_list = ['666.666.666.666', 'TorrentStorm 1.3', 'bad peer', 66666, 66666, '1666.66', '1666.66', '100.0', 6666]        numeric_cols = [3,4,5,6,7,8]        store_types = [gobject.TYPE_STRING]*3  + [gobject.TYPE_INT]*2 + [gobject.TYPE_STRING]*3 + [gobject.TYPE_INT]                if advanced_ui:            column_header[2:2] = ['Peer ID']            pre_size_list[2:2] = ['-AZ2104-']            store_types[2:2]   = [gobject.TYPE_STRING]            column_header[5:5] = ['Interested','Choked','Snubbed']            pre_size_list[5:5] = ['*','*','*']            store_types[5:5]   = [gobject.TYPE_STRING]*3            column_header[9:9] = ['Interested','Choked','Optimistic upload']            pre_size_list[9:9] = ['*','*','*']            store_types[9:9]   = [gobject.TYPE_STRING]*3            numeric_cols = [4,8,12,13,14,15]        num_columns = len(column_header)        self.store = gtk.ListStore(*store_types)        self.store.append(pre_size_list)        def makesortfunc(sort_func):            def sortfunc(treemodel, iter1, iter2, column):                a_str = treemodel.get_value(iter1, column)                b_str = treemodel.get_value(iter2, column)                if a_str is not None and b_str is not None:                    return sort_func(a_str,b_str)                else:                    return 0            return sortfunc        def ip_sort(a_str,b_str):            a = map(int, a_str.split('.'))            b = map(int, b_str.split('.'))            return cmp(a,b)        def float_sort(a_str,b_str):            a,b = 0,0            try: a = float(a_str)            except ValueError: pass            try: b = float(b_str)            except ValueError: pass            return cmp(a,b)        self.store.set_sort_func(0, makesortfunc(ip_sort), 0)        for i in range(2,5):            self.store.set_sort_func(num_columns-i, makesortfunc(float_sort), num_columns-i)                self.treeview = gtk.TreeView(self.store)        cs = []        for i, name in enumerate(column_header):            r = gtk.CellRendererText()            if i in numeric_cols:                r.set_property('xalign', 1)            column = gtk.TreeViewColumn(name, r, text = i)            column.set_resizable(True)            column.set_min_width(5)            column.set_sort_column_id(i)            self.treeview.append_column(column)            cs.append(column)        self.treeview.set_rules_hint(True)        self.sw.add(self.treeview)        self.treeview.set_headers_visible(False)        self.treeview.columns_autosize()        self.sw.show_all()        self.treeview.realize()        for column in cs:            column.set_fixed_width(column.get_width())            column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)        self.treeview.set_headers_visible(True)        self.store.clear()        self.treeview.get_selection().set_mode(gtk.SELECTION_NONE)        width = self.treeview.size_request()[0]        self.win.set_default_size(width+SCROLLBAR_WIDTH, 300)        self.win.show_all()        self.prev = []    def update(self, peers, bad_peers):        fields = []        def p_bool(value): return value and '*' or ''        for peer in peers:            field = []            field.append(peer['ip'])             client, version = ClientIdentifier.identify_client(peer['id'])             field.append(client + ' ' + version)            if advanced_ui:                field.append(quote(peer['id']))             field.append(peer['initiation'] == 'R' and 'remote' or 'local')            dl = peer['download']            ul = peer['upload']            for l in (dl, ul):                rate = l[1]                if rate > 100:                    field.append(int(round(rate/(2**10))))                 else:                    field.append(0)                if advanced_ui:                    field.append(p_bool(l[2]))                    field.append(p_bool(l[3]))                    if len(l) > 4:                        field.append(p_bool(l[4]))                    else:                        field.append(p_bool(peer['is_optimistic_unchoke']))            field.append('%.2f'%round(dl[0] / 2**20, 2))            field.append('%.2f'%round(ul[0] / 2**20, 2))            field.append('%.1f'%round(int(peer['completed']*1000)/10, 1))            field.append(int(peer['speed']//(2**10)))            fields.append(field)        for (ip, (is_banned, stats)) in bad_peers.iteritems():            field = []            field.append(ip)            client, version = ClientIdentifier.identify_client(stats.peerid)            field.append(client + ' ' + version)            if advanced_ui:                field.append(quote(stats.peerid))            field.append('bad peer')            # the sortable peer list won't take strings in these fields            field.append(0)             if advanced_ui:                field.extend([0] * 7) # upRate, * fields            else:                field.extend([0] * 1) # upRate                            field.append("%d ok" % stats.numgood)            field.append("%d bad" % len(stats.bad))            if is_banned: # completion                field.append('banned')            else:                field.append('ok')            field.append(0) # peer dl rate            fields.append(field)        if self.store.get_sort_column_id() < 0:            # ListStore is unsorted, it might be faster to set only modified fields            it = self.store.get_iter_first()            for old, new in itertools.izip(self.prev, fields):                if old != new:                    for i, value in enumerate(new):                        if value != old[i]:                            self.store.set_value(it, i, value)                it = self.store.iter_next(it)            for i in range(len(fields), len(self.prev)):                self.store.remove(it)            for i in range(len(self.prev), len(fields)):                self.store.append(fields[i])            self.prev = fields        else:            # ListStore is sorted, no reason not to to reset all fields            self.store.clear()            for field in fields:                self.store.append(field)                        def close(self):        self.win.destroy()class TorrentInfoWindow(object):    def __init__(self, torrent_box, closefunc):        self.win = Window()        self.torrent_box = torrent_box        name = self.torrent_box.metainfo.name        self.win.set_title('Info for "%s"'%name)        self.win.set_size_request(-1,-1)        self.win.set_border_width(SPACING)        self.win.set_resizable(False)        self.win.connect('destroy', closefunc)        self.vbox = gtk.VBox(spacing=SPACING)        self.table = gtk.Table(rows=4, columns=3, homogeneous=False)        self.table.set_row_spacings(SPACING)        self.table.set_col_spacings(SPACING)        y = 0        def add_item(key, val, y):            self.table.attach(ralign(gtk.Label(key)), 0, 1, y, y+1)            v = gtk.Label(val)            v.set_selectable(True)            self.table.attach(lalign(v), 1, 2, y, y+1)        add_item('Torrent name:', name, y)        y+=1        add_item('Announce url:', self.torrent_box.metainfo.announce, y)        y+=1        size = Size(self.torrent_box.metainfo.total_bytes)        num_files = ', in one file'        if self.torrent_box.is_batch:            num_files = ', in %d files' % len(self.torrent_box.metainfo.sizes)        add_item('Total size:',  str(size)+num_files, y)        y+=1        if advanced_ui:            pl = self.torrent_box.metainfo.piece_length            count, lastlen = divmod(size, pl)            sizedetail = '%d x %d + %d = %d' % (count, pl, lastlen, int(size))            add_item('Pieces:', sizedetail, y)            y+=1            add_item('Info hash:', self.torrent_box.infohash.encode('hex'), y)            y+=1        path = self.torrent_box.dlpath         filename = ''        if not self.torrent_box.is_batch:            path,filename = os.path.split(self.torrent_box.dlpath)        if path[-1] != os.sep:            path += os.sep        path = path_wrap(path)        add_item('Save in:', path, y)        y+=1        if not self.torrent_box.is_batch:            add_item('File name:', filename, y)            y+=1                self.vbox.pack_start(self.table)        self.vbox.pack_start(gtk.HSeparator(), expand=False, fill=False)        self.hbox = gtk.HBox(spacing=SPACING)        lbbox = gtk.HButtonBox()        rbbox = gtk.HButtonBox()        lbbox.set_spacing(SPACING)        if OpenPath.can_open_files:            opendirbutton = IconButton("Open directory", stock=gtk.STOCK_OPEN)            opendirbutton.connect('clicked', self.torrent_box.open_dir)            lbbox.pack_start(opendirbutton, expand=False, fill=False)        opendirbutton.set_sensitive(self.torrent_box.can_open_dir())        filelistbutton = IconButton("Show file list", stock='gtk-index')        if self.torrent_box.is_batch:            filelistbutton.connect('clicked', self.torrent_box.open_filelist)        else:            filelistbutton.set_sensitive(False)        lbbox.pack_start(filelistbutton, expand=False, fill=False)        closebutton = gtk.Button(stock='gtk-close')        closebutton.connect('clicked', lambda w: self.close())        rbbox.pack_end(closebutton, expand=False, fill=False)        self.hbox.pack_start(lbbox, expand=False, fill=False)        self.hbox.pack_end(  rbbox, expand=False, fill=False)        self.vbox.pack_end(self.hbox, expand=False, fill=False)        self.win.add(self.vbox)                self.win.show_all()    def close(self):        self.win.destroy()class TorrentBox(gtk.EventBox):        def __init__(self, infohash, metainfo, dlpath, completion, main):        gtk.EventBox.__init__(self)        self.infohash = infohash        self.metainfo = metainfo        self.dlpath = dlpath        self.completion = completion        self.main = main        self.uptotal   = self.main.torrents[self.infohash].uptotal        self.downtotal = self.main.torrents[self.infohash].downtotal        if self.downtotal > 0:            self.up_down_ratio = self.uptotal / self.downtotal        else:            self.up_down_ratio = None        self.infowindow = None        self.filelistwindow = None        self.is_batch = metainfo.is_batch        self.menu = None        self.menu_handler = None        self.vbox = gtk.VBox(homogeneous=False, spacing=SPACING)        self.label = gtk.Label()        self.set_name()                self.vbox.pack_start(lalign(self.label), expand=False, fill=False)        self.hbox = gtk.HBox(homogeneous=False, spacing=SPACING)        self.icon = gtk.Image()        self.icon.set_size_request(-1, 29)        self.iconbox = gtk.VBox()        self.iconevbox = gtk.EventBox()                self.iconevbox.add(self.icon)        self.iconbox.pack_start(self.iconevbox, expand=False, fill=False)        self.hbox.pack_start(self.iconbox, expand=False, fill=False)                self.vbox.pack_start(self.hbox)                self.infobox = gtk.VBox(homogeneous=False)        self.progressbarbox = gtk.HBox(homogeneous=False, spacing=SPACING)        self.progressbar = gtk.ProgressBar()        self.reset_progressbar_color()                if self.completion is not None:            self.progressbar.set_fraction(self.completion)            if self.completion >= 1:                done_label = self.make_done_label()                self.progressbar.set_text(done_label)            else:                self.progressbar.set_text('%.1f%%'%(self.completion*100))        else:            self.progressbar.set_text('?')                    self.progressbarbox.pack_start(self.progressbar,                                       expand=True, fill=True)        self.buttonevbox = gtk.EventBox()        self.buttonbox = gtk.HBox(homogeneous=True, spacing=SPACING)        self.infobutton = gtk.Button()        self.infoimage = gtk.Image()        self.infoimage.set_from_stock('bt-info', gtk.ICON_SIZE_BUTTON)        self.infobutton.add(self.infoimage)        self.infobutton.connect('clicked', self.open_info)        self.main.tooltips.set_tip(self.infobutton,                                   'Torrent info')        self.buttonbox.pack_start(self.infobutton, expand=True)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩成人av影视| 麻豆久久一区二区| 亚洲精品在线三区| 色诱亚洲精品久久久久久| 蜜桃av一区二区| 一区二区三区国产精华| 久久久综合九色合综国产精品| 在线观看欧美黄色| 成人自拍视频在线| 日本怡春院一区二区| 日本不卡免费在线视频| 国产精品私房写真福利视频| 日韩一区二区三区精品视频| 欧美专区日韩专区| 色婷婷av一区| www.视频一区| 成人免费视频一区| 国产一区二区三区av电影 | 欧美一区二区国产| 色哟哟一区二区在线观看| 国产乱子伦视频一区二区三区 | 高清视频一区二区| 国产综合久久久久影院| 美女视频一区二区三区| 午夜激情综合网| 亚洲最快最全在线视频| 国产精品久久久久影院老司| 国产欧美精品日韩区二区麻豆天美| 欧美成人一区二区三区| 欧美一区二区三区喷汁尤物| 欧美日韩精品一区二区天天拍小说| 91视频一区二区三区| www.亚洲色图.com| 97精品国产露脸对白| caoporn国产一区二区| 丁香亚洲综合激情啪啪综合| 国产丶欧美丶日本不卡视频| 国精品**一区二区三区在线蜜桃| 久久精品二区亚洲w码| 精品一区二区三区免费视频| 麻豆精品在线观看| 激情图区综合网| 国内精品国产成人| 国产不卡视频一区二区三区| 国产成人精品网址| av中文字幕一区| 欧洲亚洲精品在线| 欧美日韩一区三区四区| 欧美日韩三级一区二区| 678五月天丁香亚洲综合网| 91麻豆精品久久久久蜜臀| 91精品国产品国语在线不卡| 欧美xxxxxxxxx| 国产日韩欧美a| 亚洲欧美激情一区二区| 一区二区在线观看免费| 亚洲愉拍自拍另类高清精品| 午夜视频一区二区三区| 精品一区精品二区高清| 国产成人精品一区二区三区网站观看| 成人ar影院免费观看视频| 91免费视频大全| 欧美丰满嫩嫩电影| 欧美va亚洲va| 国产精品免费网站在线观看| 亚洲精品乱码久久久久| 日本aⅴ亚洲精品中文乱码| 精品亚洲国产成人av制服丝袜| 国产成人av电影在线观看| 91福利视频久久久久| 91精品国产入口在线| 亚洲国产精品t66y| 亚洲福利一二三区| 国产酒店精品激情| 色欧美片视频在线观看| 日韩一区二区精品| 中文字幕一区二区不卡| 午夜精品爽啪视频| 高清av一区二区| 欧美日韩亚洲综合一区二区三区| 欧美精品一区男女天堂| 亚洲欧美日韩电影| 精油按摩中文字幕久久| 在线观看不卡一区| 久久精品水蜜桃av综合天堂| 亚洲国产精品久久不卡毛片| 国产综合色视频| 欧美日韩国产小视频在线观看| 久久日一线二线三线suv| 亚洲精品高清视频在线观看| 狠狠v欧美v日韩v亚洲ⅴ| 色欧美88888久久久久久影院| 日韩午夜在线观看视频| 亚洲另类在线制服丝袜| 久久99久久99小草精品免视看| 97久久超碰国产精品电影| 精品美女在线观看| 亚洲成av人片在线观看| 成人性视频免费网站| 欧美区一区二区三区| 1024国产精品| 国产精品综合av一区二区国产馆| 欧美在线|欧美| 亚洲三级在线看| 国产盗摄视频一区二区三区| 欧美一级一区二区| 亚洲午夜久久久久久久久电影院| 国产不卡免费视频| 精品国产乱码久久久久久1区2区| 亚洲网友自拍偷拍| 色噜噜夜夜夜综合网| 欧美极品xxx| 激情久久五月天| 欧美一卡在线观看| 亚洲午夜av在线| 色琪琪一区二区三区亚洲区| 国产精品伦理一区二区| 国产精品99久久久久久似苏梦涵| 欧美一级专区免费大片| 天堂成人国产精品一区| 一本大道久久a久久精品综合| 中文字幕av一区二区三区| 精品一区二区免费视频| 这里只有精品免费| 日韩高清不卡一区二区三区| 欧美视频三区在线播放| 亚洲激情一二三区| 在线中文字幕一区二区| 亚洲美女在线国产| 欧美亚洲国产怡红院影院| 亚洲精品国产成人久久av盗摄| 99精品久久只有精品| 亚洲视频每日更新| 99re这里都是精品| 亚洲精品一二三| 在线观看av一区| 亚洲成人动漫精品| 欧美高清视频在线高清观看mv色露露十八| 亚洲综合在线第一页| 欧美性大战xxxxx久久久| 午夜精品久久久久久久99水蜜桃 | 日本成人在线一区| 日韩欧美视频一区| 国产主播一区二区三区| 久久这里只有精品视频网| 国产乱人伦精品一区二区在线观看 | 色综合色狠狠综合色| 一区二区三区在线观看视频| 精品视频一区三区九区| 日韩成人av影视| 久久美女高清视频 | 日韩一区二区三区视频在线| 久久99精品久久久久久| 久久亚洲二区三区| www.亚洲免费av| 亚洲成人免费在线| 日韩欧美国产电影| 国产超碰在线一区| 亚洲精品日韩专区silk| 欧美精品 日韩| 国产精品资源在线看| 中文字幕精品一区二区精品绿巨人| 99久久伊人久久99| 亚洲成人黄色影院| 久久综合色综合88| 97精品久久久久中文字幕| 亚洲成人av福利| 2020国产精品| 色婷婷亚洲精品| 美女性感视频久久| 中文字幕精品一区二区精品绿巨人 | 亚洲一区二区中文在线| 日韩精品中文字幕一区二区三区| 国产成人综合亚洲网站| 一区二区成人在线视频| 欧美一区二区三区思思人| 成人午夜视频福利| 视频在线观看91| 中文字幕欧美激情| 欧美精品123区| 成人综合日日夜夜| 免费欧美日韩国产三级电影| 日本一区二区三区国色天香| 欧美日韩一区二区三区在线| 韩国理伦片一区二区三区在线播放| 国产精品久久久久久久午夜片| 欧美久久一二三四区| 成人性生交大片免费看视频在线| 亚洲国产成人91porn| 国产精品区一区二区三区| 欧美日韩国产高清一区二区三区| 国产高清亚洲一区| 日本女人一区二区三区| 综合久久一区二区三区| 欧美精品一区二区三| 欧美日韩一级片在线观看| 99精品黄色片免费大全| 国产在线一区二区综合免费视频| 亚洲图片自拍偷拍| 亚洲婷婷在线视频|