import sys import os import wx from shutil import copy, move from ABC.Actions.actionbase import ABCAction from Utility.helpers import stopTorrentsIfNeeded from Utility.constants import * #IGNORE:W0611 ################################ # ################################ class MoveUp(ABCAction): def __init__(self, utility): ABCAction.__init__(self, utility, 'moveup.bmp', 'moveup') def action(self, event = None): list = self.utility.window.getSelectedList() selected = list.getSelected() newloc = self.utility.queue.MoveItems(selected, -1) list.updateSelected(selected, newloc) ################################ # ################################ class MoveDown(ABCAction): def __init__(self, utility): ABCAction.__init__(self, utility, 'movedown.bmp', 'movedown') def action(self, event = None): list = self.utility.window.getSelectedList() selected = list.getSelected() newloc = self.utility.queue.MoveItems(selected, 1) list.updateSelected(selected, newloc) ################################ # ################################ class MoveBottom(ABCAction): def __init__(self, utility): ABCAction.__init__(self, utility, 'movebottom.bmp', 'movebottom') def action(self, event = None): list = self.utility.window.getSelectedList() selected = list.getSelected() if selected: numberSelected = len(selected) movelist = [] for i in range(numberSelected): movelist.append(selected[i] - i) self.utility.queue.MoveItemsBottom(movelist) listSize = list.GetItemCount() newloc = range(listSize - 1, listSize - numberSelected - 1, -1) list.updateSelected(selected, newloc) ################################ # ################################ class MoveTop(ABCAction): def __init__(self, utility): ABCAction.__init__(self, utility, 'movetop.bmp', 'movetop') def action(self, event = None): list = self.utility.window.getSelectedList() selected = list.getSelected() if selected: numberSelected = len(selected) movelist = [] for i in range(numberSelected): movelist.append(selected[numberSelected - i - 1] + i) self.utility.queue.MoveItemsTop(movelist) list.updateSelected(selected, range(numberSelected)) ################################ # ################################ class ClearCompleted(ABCAction): def __init__(self, utility): ABCAction.__init__(self, utility, 'clearcompleted.bmp', 'clearallcompleted', menudesc = 'menu_clearcompleted') def action(self, event = None): list = self.utility.window.getSelectedList() if self.utility.queue.ratemanager.doneflag.isSet(): # RateManager is running : We record the event # It will be run after these tasks have completed if list.IsEnabled(): list.Disable() self.utility.window.postponedevents.append((self.action, event)) else: self.utility.queue.clearAllCompleted() list.SetFocus() ################################ # ################################ class AddTorrentFile(ABCAction): def __init__(self, utility): ABCAction.__init__(self, utility, 'addtorrent.bmp', 'addtorrentfile_short', menudesc = 'menu_addtorrentfile') def action(self, event = None): self.utility.queue.addtorrents.AddTorrentFile() ################################ # ################################ class AddTorrentNonDefault(ABCAction): def __init__(self, utility): ABCAction.__init__(self, utility, 'addtorrentnondefault.bmp', 'addtorrentfiletonondefault_short', menudesc = 'menu_addtorrentnondefault') def action(self, event = None): self.utility.queue.addtorrents.AddTorrentNoneDefault() ################################ # ################################ class AddTorrentURL(ABCAction): def __init__(self, utility): ABCAction.__init__(self, utility, 'addtorrenturl.bmp', 'addtorrenturl_short', menudesc = 'menu_addtorrenturl') def action(self, event = None): self.utility.queue.addtorrents.AddTorrentLink() ################################ # ################################ class Remove(ABCAction): def __init__(self, utility): ABCAction.__init__(self, utility, 'delete.bmp', 'tb_delete_short', longdesc = 'tb_delete_long', menudesc = 'rRemoveTorrent') def action(self, event = None, removefiles = False): list = self.utility.window.getSelectedList() if self.utility.queue.ratemanager.doneflag.isSet(): # RateManager is running : We record the event # It will be run after these tasks have completed if list.IsEnabled(): list.Disable() if removefiles: self.utility.window.postponedevents.append((self.utility.actions[ACTION_REMOVEFILE].action, event)) else: self.utility.window.postponedevents.append((self.action, event)) return torrentselected = list.getTorrentSelected(reverse = True) if not torrentselected: return if removefiles: # Display Dialog Warning ############################## dialog = wx.MessageDialog(None, self.utility.lang.get('confirmdeletefile'), self.utility.lang.get('warning'), wx.ICON_WARNING|wx.YES_NO) result = dialog.ShowModal() dialog.Destroy() if(result == wx.ID_NO): return firstselected = torrentselected[-1].listindex # Stop all the files first self.utility.actionhandler.procSTOP(torrentselected) # Remove the torrents from the list # (and remove files if necessary) self.utility.actionhandler.procREMOVE(torrentselected, removefiles) listsize = list.GetItemCount() - 1 if listsize >= 0: if firstselected >= listsize: list.Select(listsize) else: list.Select(firstselected) list.SetFocus() ################################ # ################################ class RemoveFile(ABCAction): def __init__(self, utility): ABCAction.__init__(self, utility, menudesc = 'rRemoveTorrentandFile') def action(self, event = None): self.utility.actions[ACTION_REMOVE].action(removefiles = True) ################################ # ################################ class ExtractFromList(ABCAction): def __init__(self, utility): ABCAction.__init__(self, utility, menudesc = 'rextractfromlist') def action(self, event = None): list = self.utility.window.getSelectedList() torrentselected = list.getTorrentSelected(reverse = True) if not torrentselected: return # All selected torrents must be inactive to proceed inactivestopped = stopTorrentsIfNeeded(torrentselected) if not inactivestopped: return firstselected = torrentselected[-1].listindex # Choose the destination folder dialog = wx.DirDialog(None, self.utility.lang.get('choosenewlocation'), '', style = wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) result = dialog.ShowModal() destfolder = dialog.GetPath() dialog.Destroy() if result != wx.ID_OK: return removelist = [] for ABCTorrentTemp in torrentselected: filename = os.path.split(ABCTorrentTemp.src)[1] destname = os.path.join(destfolder, filename) # Check if the file to be moved already exists in destination folder fileexists = os.access(destname, os.F_OK) if fileexists: message = "Torrent : " + ABCTorrentTemp.filename + \ "\n File : " + filename + "\n" + self.utility.lang.get('extracterrorduplicatemsg') dialog = wx.MessageDialog(None, message, self.utility.lang.get('extracterrorduplicate'), wx.YES_NO|wx.ICON_EXCLAMATION) result = dialog.ShowModal() dialog.Destroy() if(result == wx.ID_NO): continue # Move the torrent file try: move(ABCTorrentTemp.src, destname) except: message = "Torrent : " + ABCTorrentTemp.filename + "\n File : " + filename + "\n" + self.utility.lang.get('extracterrormoving') dialog = wx.MessageDialog(None, message, self.utility.lang.get('error'), wx.ICON_ERROR) dialog.ShowModal() dialog.Destroy() else: # If the move ended OK, delete the torrent from the list removelist.append(ABCTorrentTemp) self.utility.actionhandler.procREMOVE(removelist) listsize = list.GetItemCount() - 1 if listsize >= 0: if firstselected >= listsize: list.Select(listsize) else: list.Select(firstselected) list.SetFocus() ################################ # ################################ class CopyFromList(ABCAction): def __init__(self, utility): ABCAction.__init__(self, utility, menudesc = 'rcopyfromlist') def action(self, event = None): list = self.utility.window.getSelectedList() torrentselected = list.getTorrentSelected(reverse = True) if not torrentselected: return # All selected torrents must be inactive to proceed inactivestopped = stopTorrentsIfNeeded(torrentselected) if not inactivestopped: return # Choose the destination folder dialog = wx.DirDialog(None, self.utility.lang.get('choosenewlocation'), '', style = wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) result = dialog.ShowModal() destfolder = dialog.GetPath() dialog.Destroy() if result != wx.ID_OK: return for ABCTorrentTemp in torrentselected: filename = os.path.split(ABCTorrentTemp.src)[1] destname = os.path.join(destfolder, filename) # Check if the file to be moved already exists in destination folder fileexists = os.access(destname, os.F_OK) if fileexists: message = "Torrent : " + ABCTorrentTemp.filename + \ "\n File : " + filename + "\n" + self.utility.lang.get('extracterrorduplicatemsg') dialog = wx.MessageDialog(None, message, self.utility.lang.get('extracterrorduplicate'), wx.YES_NO|wx.ICON_EXCLAMATION) result = dialog.ShowModal() dialog.Destroy() if(result == wx.ID_NO): continue # Move the torrent file try: copy(ABCTorrentTemp.src, destname) except: message = "Torrent : " + ABCTorrentTemp.filename + "\n File : " + filename + "\n" + self.utility.lang.get('extracterrormoving') dialog = wx.MessageDialog(None, message, self.utility.lang.get('error'), wx.ICON_ERROR) dialog.ShowModal() dialog.Destroy()