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

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

?? torrentqueue.py

?? BT的原代碼
?? PY
?? 第 1 頁 / 共 2 頁
字號:
# The contents of this file are subject to the BitTorrent Open Source License# Version 1.0 (the License).  You may not copy or use this file, in either# source code or executable form, except in compliance with the License.  You# may obtain a copy of the License at http://www.bittorrent.com/license/.## Software distributed under the License is distributed on an AS IS basis,# WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the License# for the specific language governing rights and limitations under the# License.# Written by Uoti Urpalafrom __future__ import divisionimport osimport sysimport threadingfrom BitTorrent.platform import bttimefrom BitTorrent.download import Feedback, Multitorrentfrom BitTorrent.controlsocket import ControlSocketfrom BitTorrent.bencode import bdecodefrom BitTorrent.ConvertedMetainfo import ConvertedMetainfofrom BitTorrent import BTFailure, BTShutdown, INFO, WARNING, ERROR, CRITICALfrom BitTorrent import configfilefrom BitTorrent import FAQ_URLimport BitTorrent# check if dns library from http://www.dnspython.org/ is either installed# or the dns subdirectory has been copied to BitTorrent/dnsHAVE_DNS = Falsetry:    from BitTorrent import dns    sys.modules['dns'] = dns    import dns.resolver    HAVE_DNS = Trueexcept:    try:        import dns.resolver        HAVE_DNS = True    except:        passRUNNING = 0RUN_QUEUED = 1QUEUED = 2KNOWN = 3ASKING_LOCATION = 4class TorrentInfo(object):    def __init__(self):        self.metainfo = None        self.dlpath = None        self.dl = None        self.state = None        self.completion = None        self.finishtime = None        self.uptotal = 0        self.uptotal_old = 0        self.downtotal = 0        self.downtotal_old = 0def decode_position(l, pred, succ, default=None):    if default is None:        default = len(l)    if pred is None and succ is None:        return default    if pred is None:        return 0    if succ is None:        return len(l)    try:        if l[0] == succ and pred not in l:            return 0        if l[-1] == pred and succ not in l:            return len(l)        i = l.index(pred)        if l[i+1] == succ:            return i+1    except (ValueError, IndexError):        pass    return defaultclass TorrentQueue(Feedback):    def __init__(self, config, ui_options, controlsocket):        self.config = dict(config)        self.ui_options = ui_options        self.controlsocket = controlsocket        self.config['def_running_torrents'] = 1 # !@# XXX        self.config['max_running_torrents'] = 3 # !@# XXX        self.doneflag = threading.Event()        self.torrents = {}        self.starting_torrent = None        self.running_torrents = []        self.queue = []        self.other_torrents = []        self.last_save_time = 0        self.last_version_check = 0    def run(self, ui, ui_wrap, startflag):        self.ui = ui        self.run_ui_task = ui_wrap        self.multitorrent = Multitorrent(self.config, self.doneflag,                                        self.global_error, listen_fail_ok=True)        self.rawserver = self.multitorrent.rawserver        self.controlsocket.set_rawserver(self.rawserver)        self.controlsocket.start_listening(self.external_command)        try:            self._restore_state()        except BTFailure, e:            self.queue = []            self.other_torrents = []            self.torrents = {}            self.global_error(ERROR, "Could not load saved state: "+str(e))        else:            for infohash in self.running_torrents + self.queue + \                    self.other_torrents:                t = self.torrents[infohash]                if t.dlpath is not None:                    t.completion = self.multitorrent.get_completion(                        self.config, t.metainfo, t.dlpath)                state = t.state                if state == RUN_QUEUED:                    state = RUNNING                self.run_ui_task(self.ui.new_displayed_torrent, infohash,                                 t.metainfo, t.dlpath, state, t.completion,                                 t.uptotal, t.downtotal)        self._check_queue()        startflag.set()        self._queue_loop()        self._check_version()        self.multitorrent.rawserver.listen_forever()        self.multitorrent.close_listening_socket()        self.controlsocket.close_socket()        for infohash in list(self.running_torrents):            t = self.torrents[infohash]            if t.state == RUN_QUEUED:                continue            t.dl.shutdown()            if t.dl is not None:  # possibly set to none by failed()                totals = t.dl.get_total_transfer()                t.uptotal = t.uptotal_old + totals[0]                t.downtotal = t.downtotal_old + totals[1]        self._dump_state()    def _check_version(self):        now = bttime()        if self.last_version_check > now - 24*3600:            return        self.last_version_check = now        if not HAVE_DNS:            self.global_error(WARNING, "Version check failed: no DNS library")            return        threading.Thread(target=self._version_thread).start()    def _version_thread(self):        def error(level, text):            def f():                self.global_error(level, text)            self.rawserver.external_add_task(f, 0)        def splitversion(text):            return [int(t) for t in text.split('.')]        try:            try:                a = dns.resolver.query('version.bittorrent.com', 'TXT')            except:                # the exceptions from the library have empty str(),                # just different classes...                raise BTFailure('DNS query failed')            if len(a) != 1:                raise BTFailure('number of received TXT fields is not 1')            value = iter(a).next() # the object doesn't support a[0]            if len(value.strings) != 1:                raise BTFailure('number of strings in reply is not 1?')            s = value.strings[0].split(None, 2)            myversion = splitversion(BitTorrent.version)            if myversion[1] % 2 and len(s) > 1:                s = s[1]            else:                s = s[0]            try:                latest = splitversion(s)            except ValueError:                raise BTFailure("Could not parse new version string")            for my, new in zip(myversion, latest):                if my > new:                    break                if my < new:                    download_url = 'http://bittorrent.com/download.html'                    if hasattr(self.ui, 'new_version'):                        self.run_ui_task(self.ui.new_version, s,                                         download_url)                    else:                        error(ERROR, "A newer version of BitTorrent is "                              "available.\nYou can always get the latest "                              "version from\n%s." % download_url)        except Exception, e:            error(WARNING, "Version check failed: " + str(e))    def _dump_config(self):        configfile.save_ui_config(self.config, 'btdownloadgui',                               self.ui_options, self.global_error)    def _dump_state(self):        self.last_save_time = bttime()        r = []        def write_entry(infohash, t):            if t.dlpath is None:                assert t.state == ASKING_LOCATION                r.append(infohash.encode('hex') + '\n')            else:                r.append(infohash.encode('hex') + ' ' + str(t.uptotal) + ' ' +                    str(t.downtotal)+' '+t.dlpath.encode('string_escape')+'\n')        r.append('BitTorrent UI state file, version 3\n')        r.append('Running torrents\n')        for infohash in self.running_torrents:            write_entry(infohash, self.torrents[infohash])        r.append('Queued torrents\n')        for infohash in self.queue:            write_entry(infohash, self.torrents[infohash])        r.append('Known torrents\n')        for infohash in self.other_torrents:            write_entry(infohash, self.torrents[infohash])        r.append('End\n')        f = None        try:            f = file(os.path.join(self.config['data_dir'], 'ui_state'), 'wb')            f.write(''.join(r))            f.close()        except Exception, e:            self.global_error(ERROR, 'Could not save UI state: ' + str(e))            if f is not None:                f.close()    def _restore_state(self):        def decode_line(line):            hashtext = line[:40]            try:                infohash = hashtext.decode('hex')            except:                raise BTFailure("Invalid state file contents")            if len(infohash) != 20:                raise BTFailure("Invalid state file contents")            try:                path = os.path.join(self.config['data_dir'], 'metainfo',                                    hashtext)                f = file(path, 'rb')                data = f.read()                f.close()            except Exception, e:                try:                    f.close()                except:                    pass                self.global_error(ERROR,"Error reading file "+path+" ("+str(e)+                                  "), cannot restore state completely")                return None            if infohash in self.torrents:                raise BTFailure("Invalid state file (duplicate entry)")            t = TorrentInfo()            self.torrents[infohash] = t            try:                t.metainfo = ConvertedMetainfo(bdecode(data))            except Exception, e:                self.global_error(ERROR, "Corrupt data in "+path+                                  " , cannot restore torrent ("+str(e)+")")                return None            t.metainfo.reported_errors = True # suppress redisplay on restart            if infohash != t.metainfo.infohash:                self.global_error(ERROR, "Corrupt data in "+path+                                  " , cannot restore torrent ("+str(e)+")")                return None            if len(line) == 41:                t.dlpath = None                return infohash, t            try:                if version < 2:                    t.dlpath = line[41:-1].decode('string_escape')                else:                    up, down, dlpath = line[41:-1].split(' ', 2)                    t.uptotal = t.uptotal_old = int(up)                    t.downtotal = t.downtotal_old = int(down)                    t.dlpath = dlpath.decode('string_escape')            except ValueError:  # unpack, int(), decode()                raise BTFailure('Invalid state file (bad entry)')            return infohash, t        filename = os.path.join(self.config['data_dir'], 'ui_state')        if not os.path.exists(filename):            return        f = None        try:            f = file(filename, 'rb')            lines = f.readlines()            f.close()        except Exception, e:            if f is not None:                f.close()            raise BTFailure(str(e))        i = iter(lines)        try:            txt = 'BitTorrent UI state file, version '            version = i.next()            if not version.startswith(txt):                raise BTFailure('Bad UI state file')            try:                version = int(version[len(txt):-1])            except:                raise BTFailure('Bad UI state file version')            if version > 3:                raise BTFailure('Unsupported UI state file version (from '                                'newer client version?')            if version < 3:                if i.next() != "Running/queued torrents\n":                    raise BTFailure("Invalid state file contents")            else:                if i.next() != "Running torrents\n":                    raise BTFailure("Invalid state file contents")                while True:                    line = i.next()                    if line == 'Queued torrents\n':                        break                    t = decode_line(line)                    if t is None:                        continue                    infohash, t = t                    if t.dlpath is None:                        raise BTFailure("Invalid state file contents")                    t.state = RUN_QUEUED                    self.running_torrents.append(infohash)            while True:                line = i.next()                if line == 'Known torrents\n':                    break                t = decode_line(line)                if t is None:                    continue                infohash, t = t                if t.dlpath is None:                    raise BTFailure("Invalid state file contents")                t.state = QUEUED                self.queue.append(infohash)            while True:                line = i.next()                if line == 'End\n':                    break                t = decode_line(line)                if t is None:                    continue                infohash, t = t                if t.dlpath is None:                    t.state = ASKING_LOCATION                else:                    t.state = KNOWN                self.other_torrents.append(infohash)        except StopIteration:            raise BTFailure("Invalid state file contents")    def _queue_loop(self):        if self.doneflag.isSet():            return        self.rawserver.add_task(self._queue_loop, 20)        now = bttime()        if self.queue and self.starting_torrent is None:            mintime = now - self.config['next_torrent_time'] * 60            minratio = self.config['next_torrent_ratio'] / 100        else:            mintime = 0            minratio = self.config['last_torrent_ratio'] / 100            if not minratio:                return        for infohash in self.running_torrents:            t = self.torrents[infohash]            if t.state == RUN_QUEUED:                continue            totals = t.dl.get_total_transfer()            # not updated for remaining torrents if one is stopped, who cares            t.uptotal = t.uptotal_old + totals[0]            t.downtotal = t.downtotal_old + totals[1]            if t.finishtime is None or t.finishtime > now - 120:                continue

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩亚洲欧美一区| 欧美国产精品一区二区三区| 在线看国产一区二区| 欧美日韩在线综合| 欧美无乱码久久久免费午夜一区| 91看片淫黄大片一级| 日本福利一区二区| 欧美精品在线观看播放| 日韩一二三四区| 精品久久久久久最新网址| 久久精品欧美日韩精品| 久久久www免费人成精品| 国产一区二区三区免费播放| 综合分类小说区另类春色亚洲小说欧美| 久久久久青草大香线综合精品| 久久蜜桃一区二区| 亚洲欧美另类久久久精品2019| 亚洲 欧美综合在线网络| 国产一区二区女| 欧美日韩在线播放| 久久综合久久鬼色中文字| 国产精品不卡一区二区三区| 亚洲第一在线综合网站| 国产成人在线视频播放| 91精品国产品国语在线不卡| 国产精品国产三级国产a| 奇米影视在线99精品| 91黄色在线观看| 国产日韩欧美麻豆| 美脚の诱脚舐め脚责91| 在线观看免费亚洲| 一区二区中文字幕在线| 成人小视频在线观看| 久久综合色婷婷| 国产精品中文字幕日韩精品| 51精品视频一区二区三区| 亚洲一区二区在线视频| 91小视频免费观看| 国产精品国产成人国产三级| 国产在线国偷精品免费看| 欧美电影精品一区二区| 五月天亚洲婷婷| 日韩午夜激情免费电影| 青青草成人在线观看| 日韩欧美久久久| 国产精品99久久久久| 亚洲欧美另类在线| 欧美日韩一卡二卡三卡| 国产麻豆午夜三级精品| 日产精品久久久久久久性色| 亚洲动漫第一页| 亚洲一区二区欧美激情| 欧美精品一区二区三区蜜桃| 91精品国产综合久久香蕉麻豆| av激情成人网| av中文字幕一区| 成人av综合在线| 成人国产精品免费网站| 亚洲人午夜精品天堂一二香蕉| 成a人片亚洲日本久久| 亚洲成av人片一区二区梦乃| 精品国产乱码久久久久久久| 不卡的av电影| 国产福利精品一区| 日本女优在线视频一区二区| 成人欧美一区二区三区| 久久先锋影音av鲁色资源网| 欧美疯狂性受xxxxx喷水图片| 国产精品一区二区视频| 欧美aaaaa成人免费观看视频| 国产精品午夜在线| 日韩视频国产视频| 日韩欧美一区在线| 在线观看中文字幕不卡| 成人动漫一区二区| 国产成人在线免费观看| 国产一区二区三区日韩 | 日韩黄色免费网站| 一区二区三区四区视频精品免费 | 国产欧美一区二区精品久导航| 日韩欧美国产一区二区三区| 欧美国产综合色视频| 欧美伦理影视网| 人人精品人人爱| 中文字幕+乱码+中文字幕一区| 91久久线看在观草草青青| 国产欧美日韩精品在线| 91精品国产91久久久久久一区二区| 国产精品一区一区三区| 久久99热国产| 国产美女视频一区| 久久精品国产一区二区| 狠狠色狠狠色综合系列| 国产一区二区三区观看| 国产+成+人+亚洲欧洲自线| 成人国产精品免费| 在线一区二区三区四区五区 | 欧美一区三区二区| 国产亚洲欧美激情| 亚洲在线免费播放| 狠狠色狠狠色综合日日91app| 国产精品18久久久久久vr| 成人手机在线视频| 日韩一区二区在线观看视频| 久久久久久久久伊人| 亚洲精品国产精华液| 国内精品免费在线观看| 99国产欧美另类久久久精品| 日韩一级免费观看| 亚洲婷婷综合久久一本伊一区| 天堂精品中文字幕在线| 岛国精品在线播放| 欧美一级片在线| 天天影视网天天综合色在线播放| 黄色精品一二区| 欧美日韩一区三区| 亚洲精品中文在线影院| 国产综合成人久久大片91| 欧美日韩成人在线| 亚洲国产美女搞黄色| 色综合久久久久| 亚洲色图欧美激情| 91视频观看视频| 亚洲三级在线看| 色欧美日韩亚洲| 亚洲日本一区二区| 色美美综合视频| 中文字幕在线观看不卡视频| 成人一区二区三区视频| 亚洲国产精品二十页| 成人黄色大片在线观看| 国产精品美女www爽爽爽| 国产99久久精品| 亚洲精品一二三| 欧美日韩电影一区| 久久se这里有精品| 国产精品色在线| 色www精品视频在线观看| 依依成人精品视频| 69堂成人精品免费视频| 久久er精品视频| 中文字幕一区二区在线观看| 91麻豆免费视频| 免费xxxx性欧美18vr| 国产精品人妖ts系列视频| 色综合婷婷久久| 精品一区二区国语对白| 国产精品成人在线观看| 欧美日韩美女一区二区| 国产精品一二二区| 亚洲成人在线观看视频| 日本一二三不卡| 91精品国产欧美一区二区18| 成人伦理片在线| 久久国产福利国产秒拍| 亚洲综合视频网| 中文字幕在线一区| 欧美videos中文字幕| 欧美在线观看一区| 国产成人精品影视| 久久不见久久见免费视频1| 亚洲美女少妇撒尿| 中文字幕精品—区二区四季| 884aa四虎影成人精品一区| 色综合久久久久网| 97精品超碰一区二区三区| 国产一区三区三区| 精品一区中文字幕| 亚洲444eee在线观看| 亚洲免费在线视频| 中文字幕一区二区在线观看| 国产精品每日更新在线播放网址| 久久影视一区二区| 久久久久久久国产精品影院| 26uuu亚洲综合色| 久久欧美中文字幕| 久久久精品欧美丰满| 国产欧美一二三区| 国产精品久久久久久久久果冻传媒| 成人99免费视频| 欧美日韩国产一区二区三区地区| 国产精品三级久久久久三级| 日韩av电影免费观看高清完整版| 欧美做爰猛烈大尺度电影无法无天| 日韩欧美在线123| 亚洲午夜激情av| av一区二区三区四区| 精品久久99ma| 蜜臀91精品一区二区三区| 欧美日本国产一区| 亚洲综合清纯丝袜自拍| 91视频免费观看| 亚洲图片欧美激情| 99麻豆久久久国产精品免费优播| 久久精品一区二区三区av| 另类成人小视频在线| 欧美日韩一区二区三区四区五区 | 亚洲精品在线电影| 免费欧美在线视频| 7799精品视频|