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

📄 abcdetailframe.py

📁 BitTorrentABC-Linux-V.2.4.3源码
💻 PY
📖 第 1 页 / 共 2 页
字号:

        okButton = wxButton(panel, -1, 'Ok')
        buttonSizer.Add (okButton)




        colSizer.Add (buttonSizer, 0, wxALIGN_CENTER)
        colSizer.Add(StaticText(''))
        colSizer.AddGrowableCol(0)
        colSizer.AddGrowableRow(4)

        panel.SetSizer(colSizer)
        panel.SetAutoLayout(true)
        
        spewList.InsertColumn(0, "Optimistic Unchoke", format=wxLIST_FORMAT_CENTER, width=fw*2)
        spewList.InsertColumn(1, "IP", width=fw*11)
        spewList.InsertColumn(2, "Local/Remote", format=wxLIST_FORMAT_CENTER, width=fw*3)
        spewList.InsertColumn(3, "Up", format=wxLIST_FORMAT_RIGHT, width=fw*6)
        spewList.InsertColumn(4, "Interested", format=wxLIST_FORMAT_CENTER, width=fw*2)
        spewList.InsertColumn(5, "Choking", format=wxLIST_FORMAT_CENTER, width=fw*2)
        spewList.InsertColumn(6, "Down", format=wxLIST_FORMAT_RIGHT, width=fw*6)
        spewList.InsertColumn(7, "Interesting", format=wxLIST_FORMAT_CENTER, width=fw*2)
        spewList.InsertColumn(8, "Choked", format=wxLIST_FORMAT_CENTER, width=fw*2)
        spewList.InsertColumn(9, "Snubbed", format=wxLIST_FORMAT_CENTER, width=fw*2)
        spewList.InsertColumn(10, "Downloaded", format=wxLIST_FORMAT_RIGHT, width=fw*7)
        spewList.InsertColumn(11, "Uploaded", format=wxLIST_FORMAT_RIGHT, width=fw*7)
        spewList.InsertColumn(12, "Completed", format=wxLIST_FORMAT_RIGHT, width=fw*6)
        spewList.InsertColumn(13, "Peer Download Speed", format=wxLIST_FORMAT_RIGHT, width=fw*6)

        def getScrape(self, frame = self):
            # If torrent is not active, why u want to get SCRAPE !!
            if frame.parent.queue.isProcActive(frame.index) == False:
                return

            # Get Meta info from Scheduler
            metainfo = frame.parent.queue.getResponse(frame.index)
            if metainfo is None:
                return

            # If last request scrape data is less than 1 min return
            if (time() - frame.parent.queue.getLastScrape(frame.index)) < 60:
                return

            # Perform get scrape operation 
            ##############################################
            info = metainfo['info']
            info_hash = sha(bencode(info))
            if metainfo.has_key('announce'):
                announce = metainfo['announce']
            else:
                announce = None
                
            if metainfo.has_key('announce-list'):
                announce_list = metainfo['announce-list']
            else:
                announce_list = None
            if announce is None and announce_list is not None :
                announce = annouce_list[0][0]
                        
            if announce is not None:
                p = re.compile( '(.*/)[^/]+')
                surl = p.sub (r'\1', announce)
                surl = surl + "scrape?info_hash="
                info_hash_hex = info_hash.hexdigest()
                hashlen = len(info_hash_hex)
                for i in range(0, hashlen):
                    if (i % 2 == 0):
                        surl = surl + "%"
                    surl = surl + info_hash_hex[i]
                # connect scrape URL
                try :
                    h = urlopen(surl)
                    scrapedata = h.read()
                    h.close()
                    scrapedata = bdecode(scrapedata)
                    scrapedata = scrapedata['files']
                    for i in scrapedata.keys():
                        if binascii.b2a_hex(i) == info_hash_hex:
                            currentpeer = str(scrapedata[i]['incomplete'])
                            currentseed = str(scrapedata[i]['complete'])
                            break
                    # Tell scheduler to update in ABCengine
                    frame.parent.queue.updateScrapeData(frame.index, currentpeer, currentseed)
                except:
                    frame.parent.queue.updateScrapeData(frame.index, "?", "?")
                    
            else:
                return
        EVT_BUTTON(self, scrapeButton.GetId(), getScrape)
        
        def reannounce(self, frame = self):
                frame.parent.queue.reannounce(frame.index)
        EVT_BUTTON(self, reannounceButton.GetId(), reannounce)

        self.advextannouncebox = None
        def reannounce_external(self, frame = self):
            if (frame.advextannouncebox is not None):
                try:
                    frame.advextannouncebox.Close ()
                except wxPyDeadObjectError, e:
                    frame.advextannouncebox = None

            frame.advextannouncebox = wxFrame(None, -1, 'External Announce', size = (1,1))
            if (sys.platform == 'win32'):
                frame.advextannouncebox.SetIcon(frame.icon)

            panel = wxPanel(frame.advextannouncebox, -1)
            fullsizer = wxFlexGridSizer(cols = 1, vgap = 13)
            msg = wxStaticText(panel, -1, "Enter tracker anounce URL:")
            fullsizer.Add(msg)

            frame.advexturl = wxTextCtrl(parent = panel, id = -1, value = '',
                                size = (255, 20), style = wxTE_PROCESS_TAB)
            frame.advexturl.SetValue(frame.parent.queue.getlastexternalannounce(frame.index))
            fullsizer.Add(frame.advexturl)
            
            buttonSizer = wxFlexGridSizer (cols = 2, hgap = 10)

            okButton = wxButton(panel, -1, 'OK')
            buttonSizer.Add (okButton)

            cancelButton = wxButton(panel, -1, 'Cancel')
            buttonSizer.Add (cancelButton)

            fullsizer.Add (buttonSizer, 0, wxALIGN_CENTER)

            border = wxBoxSizer(wxHORIZONTAL)
            border.Add(fullsizer, 1, wxEXPAND | wxALL, 4)
            
            panel.SetSizer(border)
            panel.SetAutoLayout(true)

            def ok(self, frame = frame):
                special = frame.advexturl.GetValue()
                if special:
                    frame.parent.queue.setlastexternalannounce(frame.index, special)
                    frame.parent.queue.reannounce(frame.index, special)
                frame.advextannouncebox.Close()
            EVT_BUTTON(frame.advextannouncebox, okButton.GetId(), ok)
            
            def cancel(self, frame = frame):
                frame.advextannouncebox.Close()
            EVT_BUTTON(frame.advextannouncebox, cancelButton.GetId(), cancel)
                
            def kill(self, frame = frame):
                frame.advextannouncebox.Destroy()
                frame.advextannouncebox = None
            EVT_CLOSE(frame.advextannouncebox, kill)

            frame.advextannouncebox.Show ()
            fullsizer.Fit(panel)
            frame.advextannouncebox.Fit()
            
        EVT_BUTTON(self, extannounceButton.GetId(), reannounce_external)

        def bgalloc(self, frame = self):
            frame.parent.queue.bgalloc(frame.index)
        EVT_BUTTON(self, bgallocButton.GetId(), bgalloc)

        border = wxBoxSizer(wxHORIZONTAL)
        border.Add(colSizer, 1, wxEXPAND | wxALL, 15)
        self.Show ()
        #border.Fit(panel)
        #self.Fit()
        def trackerurl(self, turl = turl):
            Thread(target = open_new(turl)).start()
        EVT_LEFT_DOWN(trackerUrl, trackerurl)
        EVT_CLOSE(self, self.onKillDetail)
        EVT_BUTTON(self, okButton.GetId(), self.onKillDetail)

        
    def changeIndex(self, index):
        self.index = index
        
    def onKillDetail(self, event):
        self.killAdv()
        
    def killAdv(self):
        self.parent.queue.deleteDetailWin(self.index)
        if (self.advextannouncebox is not None):
            try:
                
                self.advextannouncebox.Close ()
            except wxPyDeadObjectError, e:
                pass
            self.advextannouncebox = None
        self.Destroy()
        
    def onPause(self):
        self.seedtitle.SetLabel("# Connected seed :")
        self.numseed.SetLabel("0")        
        self.numpeer.SetLabel("0")        
        self.numcopy.SetLabel("0")        
        self.avgprogress.SetLabel("0 %")        
        #self.downsize.SetLabel("0 MB")        
        #self.upsize.SetLabel("0 MB")        
        self.totalspeed.SetLabel("0 kB/s")        
        num = self.spewList.GetItemCount()
        for i in range(0, num):
            self.spewList.DeleteItem(0)
        self.storagestats1.SetLabel('')
        self.storagestats2.SetLabel('')       

⌨️ 快捷键说明

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