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

📄 abc.py

📁 BitTorrentABC-Linux-V.2.4.3源码
💻 PY
📖 第 1 页 / 共 3 页
字号:
                f.close()
                # There is a duplicate .torrent file in /torrent
                dlg = wxMessageDialog(self, "This torrent is duplicate!\nAre you sure to replace it?" , "Duplicate Torrent!", wxYES_NO|wxICON_EXCLAMATION)
                if(dlg.ShowModal() == wxID_NO):
                    dlg.Destroy()
                    continue
            except:
                # No duplicate file
                pass
            copyfile(filelocation[i], torrentsrc)
            self.queue.addNewProc(torrentsrc, True)





    def changeABCParams(self, abcparams):
        self.abcparams = abcparams
        self.queue.changeABCParams(self.abcparams)

    def closeAllThread(self):
        self.queue.clearScheduler()

##############################################################
# Class : ABCFrame
#
# Main ABC Frame class that contains menu and menu bar management
# and contains ABCPanel
#
############################################################## 
class ABCFrame(wxFrame):
    def __init__(self, parent, ID, title, params, abcpath):
        self.guiman = GUIManager(abcpath)
        app_width  = self.guiman.getValue(0) # ID: 0 = App_Width
        app_height = self.guiman.getValue(1) # ID: 1 = App_Height
        
        wxFrame.__init__(self, parent, ID, title, wxDefaultPosition, wxSize(app_width,app_height))
        
        self.params = params
        self.abcparams = {}
        self.configchange = 0
        self.abcpath = abcpath
        self.abctweak = None
        self.maketorrent = None
        
        self.CreateStatusBar()
        self.SetStatusText("")

        if (sys.platform == 'win32'):
            self.icon = wxIcon(path.join(abcpath, 'icon_abc.ico'), wxBITMAP_TYPE_ICO)
            self.SetIcon(self.icon)

        # Menu Options
        ############################
        ID_ABC_OPTION   = wxNewId()
        ID_ABOUT        = wxNewId()
        ID_EXIT         = wxNewId()
        ID_ABC_TWEAK    = wxNewId()
        ID_GLOBAL_UPLOAD= wxNewId()
        ID_MAKETORRENT  = wxNewId()
        ID_LASTESTVERSION   = wxNewId()
        self.TBMENU_RESTORE = wxNewId()
        self.TBMENU_CLOSE   = wxNewId()

        
        menu = wxMenu()
        menu.Append(ID_ABC_OPTION, "&ABC Preference", "Set ABC preference")
        menu.Append(ID_GLOBAL_UPLOAD, "&Global Upload Setting", "Setting global upload value")
        menu.AppendSeparator()
        menu.Append(ID_EXIT, "&Exit", "Close Program")


        menutool = wxMenu()
        menutool.Append(ID_ABC_TWEAK, "&ABC Tweak", "Running ABC Tweak")
        menutool.Append(ID_MAKETORRENT, "&Make Torrent", "Make .torrent file")

        menuadv = wxMenu()
        menuadv.Append(ID_LASTESTVERSION, "&Check Lastest Version", "Check Lastest Version")
        menuadv.Append(ID_ABOUT, "&About ABC", "See Credit")

        menuBar = wxMenuBar()        
        menuBar.Append(menu, "&Action")
        menuBar.Append(menutool, "&Tools")
        menuBar.Append(menuadv, "&Version")
        self.SetMenuBar(menuBar)


        # Read ABC config file
        ##############################
        abcconfigfile = TorrentConfigFileManager()
        abcconfigfile.open(path.join(self.abcpath, "abc.conf"))
        while True:
            params = abcconfigfile.readConfig()
            if params != ["", ""]:
                self.abcparams[params[0]] = params[1]
            else:
                break
        abcconfigfile.close()
        
        self.window = ABCPanel(self, self.params, self.abcparams, self.abcpath, self.guiman) 

        # Menu Events 
        ############################
        EVT_MENU(self, ID_ABC_OPTION, self.OnMenuABCOption)
        EVT_MENU(self, ID_ABOUT, self.OnMenuAbout) 
        EVT_MENU(self, ID_ABC_TWEAK, self.OnMenuTweak)
        EVT_MENU(self, ID_GLOBAL_UPLOAD, self.OnGlobalUpload)
        EVT_MENU(self, ID_EXIT,  self.OnMenuExit)
        EVT_MENU(self, ID_MAKETORRENT, self.OnMakeTorrent)
        EVT_MENU(self, ID_LASTESTVERSION,  self.OnCheckLastestVersion)

        EVT_CLOSE(self, self.OnMenuExit)

        if(sys.platform == 'win32'):
            EVT_ICONIZE(self, self.onIconify)

   
    def OnMakeTorrent(self, event):
        self.maketorrent = DownloadInfo(self, self.abcpath)
        self.maketorrent.frame.Show(true)
        #self.SetTopWindow(d.frame)

    def OnGlobalUpload(self, event):
        abcglobupdlg = GlobalUploadDialog(self, -1, "Global Upload Setting",size=wxSize(273, 280),
                                       style = wxDEFAULT_DIALOG_STYLE)
        abcglobupdlg.ShowModal()

        
    #def OnMenuMisc(self, event):
    #    abcmiscdlg = ABCMiscDialog(self, -1, "Misc Setting",size=wxSize(295, 160),
    #                                   style = wxDEFAULT_DIALOG_STYLE)
    #    abcmiscdlg.ShowModal()
        
    def OnCheckLastestVersion(self, event):
        txtcontent = ""
        try :
            h = urlopen('http://pingpong-abc.sourceforge.net/lastest_version.txt')
            txtcontent = h.read()
            h.close()
            dlg = wxMessageDialog(self, txtcontent , "ABC Lasetest version", wxOK|wxICON_INFORMATION)
            dlg.ShowModal()
            dlg.Destroy()

        except :
            dlg = wxMessageDialog(self, "Can't connect to web server\nMaybe web server is down"  , "Error!!", wxICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()

    def PopFrameUp(self):
        if self.IsIconized():
            self.Iconize(false)
        if not self.IsShown():
            self.Show(true)
        self.Raise()
        if hasattr(self, "tbicon"):
            del self.tbicon
        return

    def onIconify(self, evt):
        if self.abcparams['mintray'] == "1":
            if not hasattr(self, "tbicon"):
                self.tbicon = wxTaskBarIcon()
                self.tbicon.SetIcon(self.icon, "ABC [Yet Another Bittorrent Client]")
            
                # setup a taskbar icon, and catch some events from it
                EVT_TASKBAR_LEFT_DCLICK(self.tbicon, self.onTaskBarActivate)
                EVT_TASKBAR_RIGHT_UP(self.tbicon, self.onTaskBarMenu)
                EVT_MENU(self.tbicon, self.TBMENU_RESTORE, self.onTaskBarActivate)
                EVT_MENU(self.tbicon, self.TBMENU_CLOSE, self.OnMenuExit)
                self.Hide()
            else:
                self.Iconize(1)
        else:
            if evt.Iconized():
                self.Iconize(1)
            else:
                self.Iconize(0)

    def onTaskBarActivate(self, evt):
        if self.IsIconized():
            self.Iconize(false)
        if not self.IsShown():
            self.Show(true)
        self.Raise()
        if hasattr(self, "tbicon"):
            del self.tbicon
        return

        

    def onTaskBarMenu(self, evt):
        menu = wxMenu()
        menu.Append(self.TBMENU_RESTORE, "Show ABC Window")
        menu.Append(self.TBMENU_CLOSE,   "Close")
        self.tbicon.PopupMenu(menu)
        menu.Destroy()
        
    ################################
    # Display ABC Option Dialog
    ################################
    def OnMenuABCOption(self, event):
        abcoptiondlg = ABCOptionDialog(self, -1, "ABC Preference",size=wxSize(295, 320),
                                       style = wxDEFAULT_DIALOG_STYLE)
        abcoptiondlg.ShowModal()
        
    ################################
    # Running ABC Tweak
    ################################
    def OnMenuTweak(self, event):
        if self.abctweak is not None:
            self.abctweak.OnExit()
        self.abctweak = ABCTweakFrame(self, -1, "ABC Tweak", self.abcpath)
        self.abctweak.Show(true)

    ################################
    # Display About me Dialog
    ################################
    def OnMenuAbout(self, event):
       aboutmedlg = AboutMeDialog(self, -1, "About ABC", size=wxSize(340, 240),
                     style = wxDEFAULT_DIALOG_STYLE)
       aboutmedlg.ShowModal()
       aboutmedlg.Destroy()
       
    ##################################
    # Close Program
    ##################################
    def OnMenuExit(self, event):
        dlg = wxMessageDialog(self, "Do you want to close ABC ?", "Confirm", wxOK|wxCANCEL)
        if dlg.ShowModal() != wxID_OK:
            return
        else:
            if self.IsIconized():
                self.Iconize(false)
            self.Raise()
            if hasattr(self, "tbicon"):
                del self.tbicon            
            # tell scheduler to close all active thread
            self.window.closeAllThread()
            if self.abctweak is not None:
                self.abctweak.OnExit()
            self.Destroy()
        
    ######################################
    # Update ABC on-the-fly
    ######################################
    def updateABCDisplay(self):
        # Reload INI
        old_numcol = self.guiman.getNumCol()
        self.guiman.reloadINI()        

        # Update App width, height
        self.SetSize(wxSize(self.guiman.getValue(0), self.guiman.getValue(1)))        
        # Update Detail width, height
        self.window.queue.SetDetailWinSize(wxSize(self.guiman.getValue(2), self.guiman.getValue(3)))

        # Update Column name and width add, delete
        #################################################
        # Delete Old Column
        #################################################
        for i in range(0, old_numcol):
            self.window.list.DeleteColumn(0)
        for rank in range(0, self.guiman.getNumCol()):
            self.window.list.InsertColumn(rank, self.guiman.getTextfromRank(rank))
            self.window.list.SetColumnWidth(rank, self.guiman.getValuefromRank(rank))

        # Update display in column for inactive torrent
        self.window.queue.updateInactiveCol()

##############################################################
# Class : ABCApp
#
# Main ABC application class that contains ABCFrame Object
#
##############################################################
class ABCApp(wxApp):
    def __init__(self, x , params, single_instance_checker, abcpath):
        self.params = params
        self.single_instance_checker = single_instance_checker
        self.abcpath = abcpath
        wxApp.__init__(self, x)

    def OnInit(self):
        frame = ABCFrame(NULL, -1, "ABC [Yet Another Bittorrent Client] 2.4.3",
                         self.params, self.abcpath)
        frame.Show(true)
        return true

        
    def OnExit(self):
        del self.single_instance_checker
        ClientPassParam("Please close connection!!", self.abcpath)
        return 0


    
##############################################################
#
# Main Program Start Here
#
##############################################################
def run(params, abcpath):
    # Create single instance semaphore
    single_instance_checker = wxSingleInstanceChecker("pingpong-abc" + str(wxGetUserId))
    
    if single_instance_checker.IsAnotherRunning():            
        #Send  torrent info to abc single instance
        #if params[0] != "":
        ClientPassParam(params[0], abcpath)
    else:
        # Launch first abc single instance
        app = ABCApp(0, params, single_instance_checker, abcpath)
        app.MainLoop()
        
if __name__ == '__main__':    
    abcpath = path.abspath(path.dirname(argv[0]))
    chdir(abcpath)

    if len(argv) == 1:
        run([""], abcpath)
    else:
        run(argv[1:], abcpath)
    

⌨️ 快捷键说明

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