import sys
import wx
from time import time
from Utility.getscrapedata import ScrapeThread
from Utility.constants import *#IGNORE:W0611
################################################################
#
# Class: TorrentActions
#
# Handles processing of most all the user-initiated actions
# on a torrent.
#
################################################################
class TorrentActions:
def __init__(self, torrent):
self.torrent = torrent
self.utility = torrent.utility
self.lastgetscrape = 0
self.oldstatus = None
def scrape(self, faildialog = False, manualscrape = False):
# Manual Scraping should be done no more than once per minute
if (manualscrape):
if (time() - self.lastgetscrape < 60):
if faildialog:
dlg = wx.MessageDialog(None, self.utility.lang.get('warningscrapelessthanmin'), self.utility.lang.get('error'), wx.ICON_ERROR)
dlg.ShowModal()
dlg.Destroy()
return False
# Automatic Scraping can be done as often as once an hour
elif (self.lastgetscrape != 0) and ((time() - self.lastgetscrape) < 1200):
# Scraping again too soon
return False
ScrapeThread(self.utility, self.torrent, manualscrape).start()
self.lastgetscrape = time()
return True
# pause a torrent or release it,
# returns True if we actually did something
def pause(self, release = False):
torrent = self.torrent
# We need to release the torrent
if release:
return self.pauseResume()
# Pause the torrent if it isn't already paused or queued
if torrent.status.value == STATUS_PAUSE or not torrent.status.isActive():
return False
self.oldstatus = torrent.status.value
torrent.status.updateStatus(STATUS_PAUSE)
# if torrent.connection.engine is not None and torrent.connection.engine.dow is not None:
if torrent.status.isActive():
torrent.connection.engine.dow.Pause()
torrent.updateSingleItemStatus()
return True
def pauseResume(self):
torrent = self.torrent
if torrent.status.value != STATUS_PAUSE:
return False
torrent.status.updateStatus(self.oldstatus)
# pause an active process
###########################################
if torrent.status.isActive():
torrent.connection.engine.dow.Unpause()
return True
return False
# stop a single torrent, returns True if we actually did something
def stop(self):
torrent = self.torrent
if torrent.status.isDoneUploading():
return True
if torrent.status.value == STATUS_STOP:
return False
torrent.connection.stopEngine(update = False)
torrent.status.updateStatus(STATUS_STOP)
torrent.updateSingleItemStatus()
return True
# Return True if we put something into queue
def queue(self):
torrent = self.torrent
if torrent.status.isDoneUploading():
# Might need to return True to show something happened
return True
# Do nothing if already queued, stopped, or done uploading
if torrent.status.value == STATUS_QUEUE:
return False
torrent.connection.stopEngine(update = False)
torrent.status.updateStatus(STATUS_QUEUE)
torrent.updateSingleItemStatus()
return True
def resume(self, skipcheck = False):
torrent = self.torrent
################### Resume for On-Hold State ###########################
if torrent.status.value == STATUS_PAUSE:
return self.pauseResume()
################## Resume for Other inactive States ##############################
# Don't resume if done uploading or currently active
if torrent.status.isDoneUploading():
return True
if torrent.status.isActive():
return False
# If the file is complete and it's finished uploading,
# don't need to resume
if self.torrent.status.isDoneUploading():
self.torrent.updateSingleItemStatus()
# This may indicate that something has changed, so return True
return True
torrent.status.updateStatus(STATUS_QUEUE)
# torrent.files.skipcheck = skipcheck
torrent.connection.startEngine()
return True
def hashCheck(self):
torrent = self.torrent
# Don't need to do hashcheck if already checking
if torrent.status.value == STATUS_HASHCHECK:
return False
self.oldstatus = torrent.status.value
# # (if it's currently active, wait for it to stop)
# torrent.connection.stopEngine(waitForThread = True)
torrent.connection.stopEngine()
torrent.connection.startEngine(STATUS_HASHCHECK)
return True
|