亚洲欧美第一页_禁久久精品乱码_粉嫩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麻豆精品国产综合久久久久久| 中文一区二区在线观看| 久久综合久色欧美综合狠狠| 久久久一区二区| 日韩一区精品视频| 色网站国产精品| 精品成人私密视频| 天天操天天色综合| 色婷婷久久99综合精品jk白丝| 久久毛片高清国产| 麻豆极品一区二区三区| 欧美日韩国产另类不卡| 一区二区三区欧美视频| 成年人午夜久久久| 欧美国产一区二区| 精品一区二区三区不卡| 欧美一区二区国产| 爽爽淫人综合网网站| 色噜噜狠狠成人中文综合| 日本一区二区不卡视频| 国产一区二区三区四区五区美女| 91精品国产综合久久精品app| 亚洲一区二区三区中文字幕在线| 91蜜桃网址入口| 亚洲图片欧美激情| www.欧美.com| 亚洲欧美日韩精品久久久久| av在线播放一区二区三区| 亚洲国产高清不卡| 成人18精品视频| 久久久久久综合| 国产在线不卡一区| 日本一区二区三区在线观看| 成人视屏免费看| 极品少妇xxxx精品少妇| 亚洲国产精品麻豆| 欧美中文字幕一区二区三区| 亚洲综合色自拍一区| 欧洲av一区二区嗯嗯嗯啊| 亚洲精品免费一二三区| 91久久精品一区二区| 亚洲人123区| 色诱亚洲精品久久久久久| 亚洲大片精品永久免费| 在线成人高清不卡| 麻豆精品在线观看| 久久久久国产精品厨房| 成人夜色视频网站在线观看| 亚洲欧美日韩国产中文在线| 欧美午夜精品电影| 久久99精品久久久久久动态图| 欧美精品一区二区三区四区| 高清在线观看日韩| 一区二区三区四区国产精品| 欧美一级精品大片| 亚洲在线一区二区三区| 欧美国产一区视频在线观看| jiyouzz国产精品久久| 一区二区在线看| 精品污污网站免费看| 蜜臀久久久99精品久久久久久| 欧美一级电影网站| 成av人片一区二区| 男女男精品视频| 欧美经典三级视频一区二区三区| 色综合欧美在线视频区| 天天操天天综合网| 国产欧美日韩综合精品一区二区| 色综合色狠狠综合色| 美女一区二区视频| 亚洲色图制服诱惑| 精品国产免费久久| 日本精品免费观看高清观看| 狠狠色综合日日| 亚洲少妇最新在线视频| 久久久久免费观看| 欧美成人伊人久久综合网| 国产精品自在欧美一区| 亚洲精品美国一| 欧美sm美女调教| 色婷婷综合久久久久中文| 麻豆91精品视频| 亚洲美女淫视频| 久久久精品欧美丰满| 欧美天堂亚洲电影院在线播放| 国产一区二区在线影院| 午夜精品久久久久久久久久久| 中文字幕中文字幕在线一区| 7777精品伊人久久久大香线蕉 | 色综合久久99| 麻豆精品国产91久久久久久| 亚洲午夜视频在线观看| 国产精品女同一区二区三区| 久久久久久久久99精品| 欧美一区二区三区视频免费| 国产麻豆视频一区| 亚洲欧美影音先锋| 欧美大尺度电影在线| 一本色道综合亚洲| 99久久久国产精品| 国产suv一区二区三区88区| 久久精品国产久精国产| 婷婷综合五月天| 香蕉影视欧美成人| 亚洲第一二三四区| 亚洲综合一二区| 亚洲国产日韩av| 亚洲国产美女搞黄色| 一区二区三区在线免费视频| 亚洲欧洲美洲综合色网| 国产精品久久久久7777按摩| 国产欧美日韩三级| 国产精品久久久一本精品| 中文一区一区三区高中清不卡| 国产女人18毛片水真多成人如厕| 欧美精品一区二区三| 久久综合九色综合97婷婷女人 | 美女一区二区三区| 亚洲二区视频在线| 午夜久久久久久电影| 日日摸夜夜添夜夜添国产精品| 亚洲v中文字幕| 午夜久久久久久电影| 日本成人在线电影网| 另类人妖一区二区av| 久久99精品国产.久久久久| 美女国产一区二区三区| 久久精品久久综合| 国产精品资源在线| 97成人超碰视| 欧美三级视频在线| 欧美不卡在线视频| 久久精品人人爽人人爽| 亚洲欧洲色图综合| 午夜久久久久久| 国产精品亚洲综合一区在线观看| 北条麻妃国产九九精品视频| 日本二三区不卡| 欧美在线一区二区三区| 日韩一卡二卡三卡国产欧美| 亚洲精品一区二区在线观看| 国产欧美一区二区精品秋霞影院| 一区二区三区**美女毛片| 日韩激情av在线| 国产风韵犹存在线视精品| 色婷婷综合激情| 欧美va亚洲va| 亚洲欧美怡红院| 免费的成人av| 91蝌蚪国产九色| 日韩精品中午字幕| 亚洲欧美偷拍卡通变态| 麻豆精品视频在线观看视频| 成人免费观看视频| 91精品国产欧美一区二区成人| 久久久影视传媒| 五月天一区二区| 北条麻妃一区二区三区| 日韩一区二区三区免费观看| 1024成人网| 国产综合色精品一区二区三区| 色综合久久综合中文综合网| 精品对白一区国产伦| 亚洲一区日韩精品中文字幕| 国产剧情在线观看一区二区| 欧美丝袜第三区| ●精品国产综合乱码久久久久| 狠狠色综合日日| 4438x成人网最大色成网站| 国产精品传媒视频| 精品亚洲porn| 欧美日韩视频在线观看一区二区三区| 国产无一区二区| 精品一区二区三区日韩| 欧洲国产伦久久久久久久| 国产精品国产三级国产普通话蜜臀 | 欧美亚洲尤物久久| 欧美激情在线一区二区三区| 免费精品视频最新在线| 欧美日韩视频一区二区| 亚洲日本欧美天堂| 成人av高清在线| 国产日韩欧美麻豆| 国产精品一二二区| 久久伊人蜜桃av一区二区| 日本sm残虐另类| 欧美男女性生活在线直播观看| 亚洲欧美日韩在线播放| a在线播放不卡| 国产精品欧美久久久久无广告| 精品一二三四区| 久久综合久久综合久久综合| 激情成人午夜视频| 久久色.com| 国产精品自拍av| 欧美国产日韩a欧美在线观看 | 久久久精品人体av艺术| 激情综合五月天| 久久嫩草精品久久久精品一| 国产自产高清不卡|