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

📄 btcompletedirgui.py

📁 BitTorrentABC-Linux-V.2.4.3源码
💻 PY
字号:
#!/usr/bin/env python# Written by Bram Cohen# see LICENSE.txt for license information#import PSYCO#if PSYCO.psyco:#    try:#        import psyco#        assert psyco.__version__ >= 0x010100f0#        psyco.full()#   except:#        passfrom sys import argv, versionfrom btcompletedir import completedirfrom threading import Event, Threadfrom os.path import joinfrom os import getcwdfrom wxPython.wx import *wxEVT_INVOKE = wxNewEventType()def EVT_INVOKE(win, func):    win.Connect(-1, -1, wxEVT_INVOKE, func)class InvokeEvent(wxPyEvent):    def __init__(self, func, args, kwargs):        wxPyEvent.__init__(self)        self.SetEventType(wxEVT_INVOKE)        self.func = func        self.args = args        self.kwargs = kwargsclass DownloadInfo:    def __init__(self):        frame = wxFrame(None, -1, 'BitTorrent complete dir 1.0.1', size = wxSize(550, 250))        self.frame = frame        panel = wxPanel(frame, -1)        gridSizer = wxFlexGridSizer(cols = 2, rows = 2, vgap = 15, hgap = 8)                gridSizer.Add(wxStaticText(panel, -1, 'directory to build:'))        self.dirCtl = wxTextCtrl(panel, -1, '')        b = wxBoxSizer(wxHORIZONTAL)        b.Add(self.dirCtl, 1, wxEXPAND)        b.Add(10, 10, 0, wxEXPAND)        button = wxButton(panel, -1, 'select')        b.Add(button, 0, wxEXPAND)        EVT_BUTTON(frame, button.GetId(), self.select)        gridSizer.Add(b, 0, wxEXPAND)        gridSizer.Add(wxStaticText(panel, -1, 'announce url:'))        self.annCtl = wxTextCtrl(panel, -1, 'http://my.tracker:6969/announce')        gridSizer.Add(self.annCtl, 0, wxEXPAND)        gridSizer.Add(wxStaticText(panel, -1, 'piece size:'))        self.piece_length = wxChoice(panel, -1, choices = ['2 ** 21', '2 ** 20', '2 ** 19',             '2 ** 18', '2 ** 17', '2 ** 16', '2 ** 15'])        self.piece_length.SetSelection(3)        gridSizer.Add(self.piece_length)        gridSizer.AddGrowableCol(1)         border = wxBoxSizer(wxVERTICAL)        border.Add(gridSizer, 0, wxEXPAND | wxNORTH | wxEAST | wxWEST, 25)        b2 = wxButton(panel, -1, 'make')        border.Add(10, 10, 1, wxEXPAND)        border.Add(b2, 0, wxALIGN_CENTER | wxSOUTH, 20)        EVT_BUTTON(frame, b2.GetId(), self.complete)        panel.SetSizer(border)        panel.SetAutoLayout(true)    def select(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 complete(self, x):        if self.dirCtl.GetValue() == '':            dlg = wxMessageDialog(self.frame, message = 'You must select a directory',                 caption = 'Error', style = wxOK | wxICON_ERROR)            dlg.ShowModal()            dlg.Destroy()            return        try:            ps = 2 ** (21 - self.piece_length.GetSelection())            CompleteDir(self.dirCtl.GetValue(), self.annCtl.GetValue(), ps)        except:            print_exc()from traceback import print_excclass CompleteDir:    def __init__(self, d, a, pl):        self.d = d        self.a = a        self.pl = pl        self.flag = Event()        frame = wxFrame(None, -1, 'BitTorrent make directory', size = wxSize(550, 250))        self.frame = frame        panel = wxPanel(frame, -1)        gridSizer = wxFlexGridSizer(cols = 1, vgap = 15, hgap = 8)        self.currentLabel = wxStaticText(panel, -1, 'checking file sizes')        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):        params = {'piece_size_pow2': self.pl}        try:            completedir(self.d, self.a, params, self.flag, self.valcallback, self.filecallback)            if not self.flag.isSet():                self.currentLabel.SetLabel('Done!')                self.gauge.SetValue(1000)                self.button.SetLabel('Close')        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 + -