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

📄 btmaketorrentgui.py

📁 BitTorrentABC-Linux-V.2.4.3源码
💻 PY
📖 第 1 页 / 共 2 页
字号:
        EVT_BUTTON(frame, b4.GetId(), self.closewin)        panel.SetSizer(border)        panel.SetAutoLayout(true)#        panel.DragAcceptFiles(true)#        EVT_DROP_FILES(panel, self.selectdrop)    def closewin(self, x):        self.frame.Destroy()            def saveconfig(self, x):        self.piece_length.GetSelection()        self.announceconf.saveDefault(self.piece_length.GetSelection(), self.annCtl.GetValue())            def addAnnounce(self, x):        announceurl = self.annCtl.GetValue()        if announceurl == "":            return        self.annCtl.Append(announceurl)        self.announceconf.addAnnounce(announceurl)            def removeAnnounce(self, x):        if self.annCtl.GetSelection() == -1:            dlg = wxMessageDialog(self.frame, "Please select announce url from combo box", "Error", wxICON_ERROR)            dlg.ShowModal()            dlg.Destroy()        else:            announceurl = self.annCtl.GetValue()            i = self.annCtl.GetSelection()            self.announceconf.removeAnnounce(announceurl)            self.annCtl.Delete(i)            def selectdir(self, x):        dl = wxDirDialog(self.frame, style = wxDD_DEFAULT_STYLE | wxDD_NEW_DIR_BUTTON)        if dl.ShowModal() == wxID_OK:            self.dirCtl.SetValue(dl.GetPath())    def selectfile(self, x):        dl = wxFileDialog (self.frame, 'Choose file or directory to use', '', '', '', wxOPEN)        if dl.ShowModal() == wxID_OK:            self.dirCtl.SetValue(dl.GetPath())    def selectdrop(self, x):        print x        list = x.m_files        self.dirCtl.SetValue(x[0])    def announcecopy(self, x):        dl = wxFileDialog (self.frame, 'Choose .torrent file to use', '', '', '*.torrent', wxOPEN)        if dl.ShowModal() == wxID_OK:            try:                h = open(dl.GetPath(), 'rb')                metainfo = bdecode(h.read())                h.close()                self.annCtl.SetValue(metainfo['announce'])                if metainfo.has_key('announce-list'):                    list = []                    for tier in metainfo['announce-list']:                        for tracker in tier:                            list += [tracker, ', ']                        del list[-1]                        list += ['\n']                    liststring = ''                    for i in list:                        liststring += i                    self.annListCtl.SetValue(liststring+'\n\n')                else:                    self.annListCtl.SetValue('')            except:                return    def getannouncelist(self):        list = []        for t in self.annListCtl.GetValue().split('\n'):            tier = []            t = t.replace(',',' ')            for tr in t.split(' '):                if tr != '':                    tier += [tr]            if len(tier)>0:                list.append(tier)        return list        def complete(self, x):        if self.dirCtl.GetValue() == '':            dlg = wxMessageDialog(self.frame, message = 'You must select a\n file or directory',                 caption = 'Error', style = wxOK | wxICON_ERROR)            dlg.ShowModal()            dlg.Destroy()            return        params = {'piece_size_pow2': self.piece_length_list[self.piece_length.GetSelection()]}        annlist = self.getannouncelist()        if len(annlist)>0:            params['real_announce_list'] = annlist        comment = self.commentCtl.GetValue()        if comment != '':            params['comment'] = comment        try:            CompleteDir(self.dirCtl.GetValue(), self.annCtl.GetValue(), params)        except:            print_exc()from traceback import print_excclass CompleteDir:    def __init__(self, d, a, params):        self.d = d        self.a = a        self.params = params        self.flag = Event()        self.separatetorrents = false        if isdir(d):            self.choicemade = Event()            frame = wxFrame(None, -1, 'BitTorrent make torrent', size = (1,1))            self.frame = frame            panel = wxPanel(frame, -1)            gridSizer = wxFlexGridSizer(cols = 1, vgap = 8, hgap = 8)            gridSizer.AddGrowableRow(1)            gridSizer.Add(wxStaticText(panel, -1,                    'Do you want to make a separate .torrent'),0,wxALIGN_CENTER)            gridSizer.Add(wxStaticText(panel, -1,                    'for every item in this directory?'),0,wxALIGN_CENTER)            gridSizer.Add(wxStaticText(panel, -1, ''))            b = wxFlexGridSizer(cols = 3, hgap = 10)            yesbut = wxButton(panel, -1, 'Yes')            def saidyes(e, self = self):                self.frame.Destroy()                self.separatetorrents = true                self.begin()            EVT_BUTTON(frame, yesbut.GetId(), saidyes)            b.Add(yesbut, 0)            nobut = wxButton(panel, -1, 'No')            def saidno(e, self = self):                self.frame.Destroy()                self.begin()            EVT_BUTTON(frame, nobut.GetId(), saidno)            b.Add(nobut, 0)            cancelbut = wxButton(panel, -1, 'Cancel')            def canceled(e, self = self):                self.frame.Destroy()                            EVT_BUTTON(frame, cancelbut.GetId(), canceled)            b.Add(cancelbut, 0)            gridSizer.Add(b, 0, wxALIGN_CENTER)            border = wxBoxSizer(wxHORIZONTAL)            border.Add(gridSizer, 1, wxEXPAND | wxALL, 4)                        panel.SetSizer(border)            panel.SetAutoLayout(true)            frame.Show()            border.Fit(panel)            frame.Fit()                    else:            self.begin()    def begin(self):        if self.separatetorrents:            frame = wxFrame(None, -1, 'BitTorrent make directory', size = wxSize(550, 250))        else:            frame = wxFrame(None, -1, 'BitTorrent make torrent', size = wxSize(550, 250))        self.frame = frame        panel = wxPanel(frame, -1)        gridSizer = wxFlexGridSizer(cols = 1, vgap = 15, hgap = 8)        if self.separatetorrents:            self.currentLabel = wxStaticText(panel, -1, 'checking file sizes')        else:            self.currentLabel = wxStaticText(panel, -1, 'building ' + self.d + '.torrent')        gridSizer.Add(self.currentLabel, 0, wxEXPAND)        self.gauge = wxGauge(panel, -1, range = 1000, style = wxGA_SMOOTH)        gridSizer.Add(self.gauge, 0, wxEXPAND)        gridSizer.Add(10, 10, 1, wxEXPAND)        self.button = wxButton(panel, -1, 'cancel')        gridSizer.Add(self.button, 0, wxALIGN_CENTER)        gridSizer.AddGrowableRow(2)        gridSizer.AddGrowableCol(0)        g2 = wxFlexGridSizer(cols = 1, vgap = 15, hgap = 8)        g2.Add(gridSizer, 1, wxEXPAND | wxALL, 25)        g2.AddGrowableRow(0)        g2.AddGrowableCol(0)        panel.SetSizer(g2)        panel.SetAutoLayout(true)        EVT_BUTTON(frame, self.button.GetId(), self.done)        EVT_CLOSE(frame, self.done)        EVT_INVOKE(frame, self.onInvoke)        frame.Show(true)        Thread(target = self.complete).start()    def complete(self):        try:            if self.separatetorrents:                completedir(self.d, self.a, self.params, self.flag,                            self.valcallback, self.filecallback)            else:                make_meta_file(self.d, self.a, self.params, self.flag,                            self.valcallback, progress_percent = 1)            if not self.flag.isSet():                self.currentLabel.SetLabel('Done!')                self.gauge.SetValue(1000)                self.button.SetLabel('Close')                self.frame.Refresh()        except (OSError, IOError), e:            self.currentLabel.SetLabel('Error!')            self.button.SetLabel('Close')            dlg = wxMessageDialog(self.frame, message = 'Error - ' + str(e),                 caption = 'Error', style = wxOK | wxICON_ERROR)            dlg.ShowModal()            dlg.Destroy()    def valcallback(self, amount):        self.invokeLater(self.onval, [amount])    def onval(self, amount):        self.gauge.SetValue(int(amount * 1000))    def filecallback(self, f):        self.invokeLater(self.onfile, [f])    def onfile(self, f):        self.currentLabel.SetLabel('building ' + join(self.d, f) + '.torrent')    def onInvoke(self, event):        if not self.flag.isSet():            apply(event.func, event.args, event.kwargs)    def invokeLater(self, func, args = [], kwargs = {}):        if not self.flag.isSet():            wxPostEvent(self.frame, InvokeEvent(func, args, kwargs))    def done(self, event):        self.flag.set()        self.frame.Destroy()class btWxApp(wxApp):    def OnInit(self):        d = DownloadInfo()        d.frame.Show(true)        self.SetTopWindow(d.frame)        return trueif __name__ == '__main__':    btWxApp().MainLoop()

⌨️ 快捷键说明

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