📄 abc.py
字号:
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 + -