import sys import wx import os from Dialogs.abcdetailframe import ABCDetailFrame from Dialogs.setdestdlg import SetDestDialog from Utility.constants import * #IGNORE:W0611 ################################################################ # # Class: TorrentDialogs # # Creates dialogs specific to an individual torrent # ################################################################ class TorrentDialogs: def __init__(self, torrent): self.torrent = torrent self.utility = torrent.utility # Advanced details window self.details = None def stopIfNeeded(self, showDialog = True, singleTorrent = True): # If the torrent is already stopped, return True if not self.torrent.status.isActive(): return True stopTorrent = False if showDialog: if singleTorrent: message = self.utility.lang.get('errorinactivesingle') else: message = self.utility.lang.get('errorinactivemultiple') dialog = wx.MessageDialog(None, message, self.utility.lang.get('warning'), wx.YES_NO|wx.ICON_EXCLAMATION) result = dialog.ShowModal() dialog.Destroy() if result == wx.ID_YES: stopTorrent = True if not showDialog or stopTorrent: # Stop the torrent, then return True self.torrent.actions.stop() return True return False def changeDest(self, event = None, parent = None): if not self.stopIfNeeded(): return # pop-up file dialog or dir dialog for new destination dialog = SetDestDialog(self.torrent, parent) dialog.ShowModal() dialog.Destroy() def setDestination(self, event = None): dest = self.torrent.files.dest sizetext = '(' + self.torrent.getColumnText(COL_SIZE) +')' if dest is None: # Use one set of strings if setting a location to start filetext = self.utility.lang.get('choosefiletosaveas') + sizetext dirtext = self.utility.lang.get('choosedirtosaveto') + sizetext else: # Use a different set of strings if we're setting a new location filetext = self.utility.lang.get('choosenewlocation') + sizetext dirtext = self.utility.lang.get('choosenewlocation') + sizetext defaultdir = self.utility.getLastDir("save") # What do we do if we don't have a default download location specified # and we call this from the webservice? #################################################### if sys.platform == "darwin": # Mac requires the original extension to be mentioned explicitly, # since it will override the extension with the first option (even if it's '*') try: # TODO: localise 'files' string extension = self.torrent.files.filename.split(".")[-1] orig_filetype = extension.upper() + " files|*." + extension.lower() + "|" except: orig_filetype = "" else: orig_filetype = "" if self.torrent.files.isFile(): #1 file for this torrent dialog = wx.FileDialog(None, filetext, defaultdir, self.torrent.files.filename, orig_filetype + self.utility.lang.get('allfileswildcard') + ' (*.*)|*.*', wx.SAVE | wx.OVERWRITE_PROMPT) else: # Directory torrent dialog = wx.DirDialog(None, dirtext, defaultdir, style = wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) dialog.Raise() result = dialog.ShowModal() dialog.Destroy() if result != wx.ID_OK: return False, dest dest = dialog.GetPath() if self.torrent.files.isFile(): # If a file, get the directory we saved the file in lastdir = os.path.dirname(dest) else: # If a directory, just use the directory lastdir = dest self.utility.lastdir['save'] = lastdir self.torrent.files.changeProcDest(dest) return True, dest def advancedDetails(self, event = None): if (self.details is not None): try: self.details.Raise() return except: self.details.killAdv() self.details = ABCDetailFrame(self.torrent)