⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 downloadmanager.py

📁 bittorrent source by python. please enjoy
💻 PY
📖 第 1 页 / 共 5 页
字号:
        else:            nv = _('%s (%s seeds)') % (str(np), str(ns))        ov = self.peers.GetLabel()        if ov != nv:            self.peers.SetLabel(nv)            layout = True        # if the torrent is not finished, set some other stuff, too        if not self.parent.completed:            for w, k, r in zip((self.time_remaining, self.download_rate),                               ('timeEst', 'downRate'),                               (Duration, Rate)):                if self.change_label(statistics, w, k, r):                    layout = True        # layout if necessary        if layout:            self.dynamic_sizer.Layout()        self.piece_bar.SetValue(self.torrent.completion, self.torrent.state, self.torrent.piece_states)class TorrentPanel(BTPanel):    sizer_class = wx.FlexGridSizer    sizer_args = (3, 1, 0, 0)    def __init__(self, parent, *a, **k):        BTPanel.__init__(self, parent, *a, **k)        self.torrent = parent.torrent        self.details_shown = False        self.parent = parent        self.completed = False        metainfo = self.torrent.metainfo        self.sizer.AddGrowableRow(0)        self.sizer.AddGrowableRow(2)        self.sizer.AddGrowableCol(0)        self.torrent_info = TorrentInfoPanel(self, self.torrent)        self.sizer.Add(self.torrent_info, flag=wx.GROW)        self.outer_button_sizer = wx.FlexGridSizer(1, 2, SPACING, SPACING)        self.outer_button_sizer.AddGrowableCol(0)        self.left_button_sizer = HSizer()        self.outer_button_sizer.Add(self.left_button_sizer)        self.right_button_sizer = HSizer()        self.outer_button_sizer.Add(self.right_button_sizer)        self.details_button = wx.Button(parent=self, id=wx.ID_ANY, label=_("Show &Details"))        self.details_button.Bind(wx.EVT_BUTTON, self.toggle_details)        self.open_button = wx.Button(parent=self, id=wx.ID_OPEN)        self.open_button.Bind(wx.EVT_BUTTON, self.open_torrent)        self.open_folder_button = wx.Button(parent=self, id=wx.ID_ANY, label=_("Open &Folder"))        self.open_folder_button.Bind(wx.EVT_BUTTON, self.open_folder)        self.left_button_sizer.Add(self.details_button,                                   flag=wx.ALIGN_LEFT|wx.LEFT,                                   border=SPACING)        self.right_button_sizer.Add(self.open_button,                                    flag=wx.RIGHT,                                    border=SPACING)        self.right_button_sizer.Add(self.open_folder_button,                                    flag=wx.RIGHT,                                    border=SPACING)        self.open_button.Disable()        if self.torrent.metainfo.is_batch:            self.open_button.Hide()        self.sizer.Add(self.outer_button_sizer, flag=wx.GROW|wx.ALIGN_BOTTOM, border=0)        self.notebook = wx.Notebook(self)        self.speed_tab_index = None        self.notebook.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGING, self.OnPageChanging)        self.notebook.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged)        self.tab_height = self.notebook.GetBestFittingSize().y        self.torrent_panel = TorrentDetailsPanel(self.notebook, self.torrent)        self.notebook.AddPage(self.torrent_panel, _("Torrent"))        if metainfo.is_batch:            self.file_tab_index = self.notebook.GetPageCount()            self.file_list = FileListPanel(self.notebook, self.torrent)            self.notebook.AddPage(self.file_list, _("File List"))        self.peer_tab_index = self.notebook.GetPageCount()        self.peer_tab_panel = wx.Panel(self.notebook)        self.peer_tab_sizer = wx.BoxSizer(wx.HORIZONTAL)        self.peer_list = PeerListView(self.torrent, self.peer_tab_panel)        self.peer_tab_sizer.Add(self.peer_list, proportion=1, flag=wx.GROW)        self.peer_tab_panel.SetSizerAndFit(self.peer_tab_sizer)        self.peer_list.SortListItems(col='ip', ascending=1)        self.notebook.AddPage(self.peer_tab_panel, _("Peer List"))        self.bandwidth_panel = BandwidthGraphPanel(self.notebook, self.torrent.bandwidth_history)        self.speed_tab_index = self.notebook.GetPageCount()        self.notebook.AddPage(self.bandwidth_panel, _("Speed"))        if metainfo.comment:            self.comment_panel = BTPanel(self.notebook)            self.notebook.AddPage(self.comment_panel, _("Comments"))            self.comment = wx.TextCtrl(self.comment_panel, id=wx.ID_ANY,                                       value=metainfo.comment,                                       style=wx.TE_MULTILINE|wx.TE_READONLY)            self.comment_panel.Add(self.comment, flag=wx.GROW, proportion=1)        self.log_panel = LogPanel(self.notebook, self.torrent)        self.notebook.AddPage(self.log_panel, _("Log"))        self.notebook.SetPageSize(wx.Size(300, 200))        self.notebook.Hide()        if self.torrent.completion >= 1:            self.change_to_completed()        self.toggle_details()        self.sizer.Layout()    def change_to_completed(self):        self.completed = True        self.torrent_info.change_to_completed()        self.open_button.Enable()    def toggle_details(self, event=None):        if self.details_shown:            self.sizer.AddGrowableRow(0)            self.notebook.Hide()            self.sizer.Detach(self.notebook)            self.sizer.Layout()            self.details_button.SetLabel(_("Show &Details"))            self.parent.Fit()            self.details_shown = False        else:            self.sizer.RemoveGrowableRow(0)            self.notebook.Show()            self.sizer.Add(self.notebook, flag=wx.GROW, proportion=1)            self.sizer.Layout()            self.details_button.SetLabel(_("Hide &Details"))            self.parent.Fit()            self.details_shown = True    def open_torrent(self, event):        wx.the_app.launch_torrent(self.torrent.metainfo.infohash)    def open_folder(self, event):        wx.the_app.launch_torrent_folder(self.torrent.metainfo.infohash)    def BindChildren(self, evt_id, func):        ws = [self.torrent_info, self.notebook, self.peer_list,              self.bandwidth_panel, self.log_panel, self.torrent_panel]        if self.torrent.metainfo.is_batch:            ws.append(self.file_list)        for w in ws:            w.Bind(evt_id, func)            if hasattr(w, 'BindChildren'):                w.BindChildren(evt_id, func)    def GetBestFittingSize(self):        tis = self.torrent_info.GetSize()        tibs = self.torrent_info.GetBestFittingSize()        tdbs = self.torrent_panel.GetBestFittingSize()        x = min(max(tis.x, tdbs.x), 600)        y = tibs.y + tdbs.y + self.tab_height        return wx.Size(x, y)    def OnPageChanging(self, event):        wx.the_app.make_statusrequest()    def OnPageChanged(self, event):        if event.GetSelection() == self.speed_tab_index:            self.bandwidth_panel.update(force=True)        event.Skip()    def wants_peers(self):        return self.IsShown() and self.peer_tab_index == self.notebook.GetSelection()    def wants_files(self):        return self.IsShown() and self.file_tab_index == self.notebook.GetSelection()    def update_peers(self, peers, bad_peers):        self.peer_list.update_peers(peers, bad_peers)    def update_files(self, *args):        self.file_list.update(*args)    def update_swarm(self, statistics):        self.torrent_panel.update(statistics)    def update_info(self, statistics):        if statistics.get('fractionDone', 0) >= 1 and not self.completed:            # first update since the torrent finished. Remove various            # download stats, enable open button.            self.change_to_completed()        self.torrent_info.update(statistics)    def reset_toolbar_style(self):        self.file_list.reset_toolbar_style()class TorrentWindow(BTFrameWithSizer):    panel_class = TorrentPanel    def __init__(self, torrent, parent, *a, **k):        self.torrent = torrent        k['style'] = k.get('style', wx.DEFAULT_FRAME_STYLE) | wx.WANTS_CHARS        BTFrameWithSizer.__init__(self, parent, *a, **k)        self.Bind(wx.EVT_CLOSE, self.close)        self.Bind(wx.EVT_CHAR, self.key)        self.panel.BindChildren(wx.EVT_CHAR, self.key)        self.sizer.Layout()        self.Fit()        self.SetMinSize(self.GetSize())    def key(self, event):        c = event.GetKeyCode()        if c == wx.WXK_ESCAPE:            self.close()        event.Skip()    def GetBestFittingSize(self):        sbs = self.GetSize()        pbs = BTFrameWithSizer.GetBestFittingSize(self)        return wx.Size(sbs.x, pbs.y)    def SortListItems(self, col=-1, ascending=1):        self.panel.peer_list.SortListItems(col, ascending)    def details_shown(self):        return self.panel.details_shown    def toggle_details(self):        self.panel.toggle_details()    def update_peers(self, peers, bad_peers):        self.panel.update_peers(peers, bad_peers)    def update_files(self, *args):        self.panel.update_files(*args)    def update_swarm(self, statistics):        self.panel.update_swarm(statistics)    def update_info(self, statistics):        self.panel.update_info(statistics)    def update(self, statistics):        percent = percentify(self.torrent.completion, self.torrent.completed)        if percent is not None:            title=_('%.1f%% of %s')%(percent, self.torrent.metainfo.name)        else:            title=_('%s')%(self.torrent.metainfo.name)        self.SetTitle(title)        if self.IsShown():            spew = statistics.get('spew', None)            if spew is not None:                self.update_peers(spew, statistics['bad_peers'])            if self.torrent.metainfo.is_batch:                self.update_files(statistics.get('files_left', {}),                                  statistics.get('file_priorities', {}))            self.update_swarm(statistics)            self.update_info(statistics)    def close(self, *e):        # this should set the app preference        self.Hide()    def reset_toolbar_style(self):        self.panel.reset_toolbar_style()    def wants_peers(self):        return self.IsShown() and self.panel.wants_peers()    def wants_files(self):        return self.IsShown() and self.panel.wants_files()class AboutWindow(BTDialog):    def __init__(self, main):        BTDialog.__init__(self, main, size = (300,400),                           style=wx.DEFAULT_DIALOG_STYLE|wx.CLIP_CHILDREN|wx.WANTS_CHARS)        self.Bind(wx.EVT_CLOSE, self.close)        self.SetTitle(_("About %s")%app_name)        self.sizer = VSizer()        i = wx.the_app.image_library.get(('logo', 'banner'))        b = wx.BitmapFromImage(i)        self.bitmap = ElectroStaticBitmap(self, b)        self.sizer.AddFirst(self.bitmap, flag=wx.ALIGN_CENTER_HORIZONTAL)        version_str = version        if int(version_str[2]) % 2:            version_str = version_str + ' ' + _("Beta")        version_label = ElectroStaticText(self, label=_("Version %s")%version_str)        self.sizer.Add(version_label, flag=wx.ALIGN_CENTER_HORIZONTAL)        if branch is not None:            blabel = ElectroStaticText(self, label='cdv client dir: %s' % branch)            self.sizer.Add(blabel, flag=wx.ALIGN_CENTER_HORIZONTAL)        self.credits_scroll     = CreditsScroll(self, 'credits', style=wx.TE_CENTRE)        self.translators_scroll = CreditsScroll(self, 'credits-l10n')        self.sizer.Add(self.credits_scroll    , flag=wx.GROW, proportion=1)        self.sizer.Add(self.translators_scroll, flag=wx.GROW, proportion=1)        self.credits_scroll.Hide()        self.translators_scroll.Hide()        self.button_sizer = HSizer()        self.credits_button = wx.Button(parent=self, id=wx.ID_ANY, label=_("&Credits"))        self.credits_button.Bind(wx.EVT_BUTTON, self.toggle_credits)        self.translators_button = wx.Button(parent=self, id=wx.ID_ANY, label=_("&Translators"))        self.translators_button.Bind(wx.EVT_BUTTON, self.toggle_translators)        self.button_sizer.AddFirst(self.credits_button)        self.button_sizer.Add(self.translators_button)        self.translators_button.Hide()        self.sizer.Add(self.button_sizer, flag=wx.ALIGN_CENTER_HORIZONTAL, proportion=0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -