add CLI downloader

This commit is contained in:
Christopher Roy Bratusek 2012-11-19 23:00:16 +01:00
parent 636c441cdb
commit 7cf09f792c
2 changed files with 106 additions and 11 deletions

View File

@ -327,6 +327,18 @@ class Unpacking(Thread):
self.qobject.emit(SIGNAL("Exception"),e) self.qobject.emit(SIGNAL("Exception"),e)
self.qobject.emit(SIGNAL("Done")) self.qobject.emit(SIGNAL("Done"))
class UnpackingCLI(Thread):
def __init__(self, wadpath, dirpath):
Thread.__init__(self)
self.wadpath = wadpath
self.dirpath = dirpath
def run(self):
try:
WAD.loadFile(self.wadpath).dumpDir(self.dirpath)
except Exception, e:
print e
print "Done"
class Packing(Unpacking): class Packing(Unpacking):
def __init__(self, dirpath, wadpath, QMW, deletedir = False): def __init__(self, dirpath, wadpath, QMW, deletedir = False):
Unpacking.__init__(self, wadpath, dirpath, QMW) Unpacking.__init__(self, wadpath, dirpath, QMW)
@ -350,6 +362,25 @@ class Packing(Unpacking):
self.qobject.emit(SIGNAL("Exception"),e) self.qobject.emit(SIGNAL("Exception"),e)
self.qobject.emit(SIGNAL("Done")) self.qobject.emit(SIGNAL("Done"))
class PackingCLI(UnpackingCLI):
def __init__(self, dirpath, wadpath, deletedir = False):
UnpackingCLI.__init__(self, wadpath, dirpath)
self.deletedir = deletedir
def run(self):
try:
print self.dirpath
print self.wadpath
WAD.loadDir(self.dirpath).dumpFile(self.wadpath)
if self.deletedir:
print "Cleaning temporary files"
rmtree(self.dirpath)
except Exception, e:
if self.deletedir:
print "Cleaning temporary files"
rmtree(self.dirpath)
print e
print "Done"
class nusDownloading(Unpacking): class nusDownloading(Unpacking):
def __init__(self, titleid, version, outputdir, decrypt, QMW): def __init__(self, titleid, version, outputdir, decrypt, QMW):
Unpacking.__init__(self, None, outputdir, QMW) Unpacking.__init__(self, None, outputdir, QMW)
@ -376,6 +407,29 @@ class nusDownloading(Unpacking):
self.qobject.emit(SIGNAL("Exception"),Errormsg) self.qobject.emit(SIGNAL("Exception"),Errormsg)
self.qobject.emit(SIGNAL("Done")) self.qobject.emit(SIGNAL("Done"))
class nusDownloadingCLI(UnpackingCLI):
def __init__(self, titleid, version, outputdir, decrypt, pack):
UnpackingCLI.__init__(self, None, outputdir)
if version != None:
self.version = int(version)
else:
self.version = None
self.decrypt = decrypt
self.titleid = titleid
self.pack = pack
self.outputdir = outputdir
def run(self):
try:
if self.pack:
self.dirpath = tempfile.gettempdir() + "/NUS_"+ str(time.time()).replace(".","")
NUS(self.titleid, self.version).download(self.dirpath, decrypt = False)
self.packing = PackingCLI(self.dirpath, str(self.outputdir), True)
self.packing.start()
else:
NUS(self.titleid,self.version).download(self.dirpath, decrypt = self.decrypt)
except Exception, e:
print e
#Statusbar messages #Statusbar messages
#FIXME: Why don't they get translated? It's frustrating #FIXME: Why don't they get translated? It's frustrating
DOWNLOADING = QT_TR_NOOP("Downloading files from NUS... This may take a while, please, be patient.") DOWNLOADING = QT_TR_NOOP("Downloading files from NUS... This may take a while, please, be patient.")

View File

@ -1,25 +1,64 @@
#!/usr/bin/env python #!/usr/bin/env python
#coding=utf-8 #coding=utf-8
import sys import sys
import optparse from optparse import OptionParser
from optparse import Option, OptionValueError
from PyQt4.QtGui import QApplication from PyQt4.QtGui import QApplication
from PyQt4.QtCore import QTranslator, QString, QLocale from PyQt4.QtCore import QTranslator, QString, QLocale
from GUI.VenPri import MWQwad from GUI.VenPri import MWQwad
from GUI.VenPri import nusDownloadingCLI
from TitleIDs import TitleDict
parser = optparse.OptionParser("qwad <option> [value]\ class MultipleOption(Option):
\n\nQwad (c) 2012 Christopher Roy Bratusek\ ACTIONS = Option.ACTIONS + ("extend",)
\nLicensed under the GNU GENERAL PUBLIC LICENSE v3") STORE_ACTIONS = Option.STORE_ACTIONS + ("extend",)
TYPED_ACTIONS = Option.TYPED_ACTIONS + ("extend",)
ALWAYS_TYPED_ACTIONS = Option.ALWAYS_TYPED_ACTIONS + ("extend",)
parser.add_option("-v", "--version", dest="version", def take_action(self, action, dest, opt, value, values, parser):
action="store_true", default=False, help="print version and exit") if action == "extend":
values.ensure_value(dest, []).append(value)
else:
Option.take_action(self, action, dest, opt, value, values, parser)
(options, args) = parser.parse_args() VERSION = '0.6'
if options.version: def main():
print "0.6" description = """NUS-Downloader, WadManager for Linux"""
sys.exit(0) parser = OptionParser(option_class=MultipleOption,
usage='usage: qwad [OPTIONS] ARGUMENT',
description=description)
parser.add_option('-d', '--downloads',
action="extend", type="string",
dest='download',
metavar='Arguments',
help='IOS Version OutPut DeCrypt')
parser.add_option("-v", "--version", dest="version",
action="store_true", default=False, help="print version and exit")
if __name__ == "__main__": #if len(sys.argv) == 1:
# parser.parse_args(['--help'])
options, args = parser.parse_args()
if options.version:
print "%s" % VERSION
sys.exit(0)
if options.download:
if "IOS" in str(args[0]):
xarg = TitleDict[str(args[0])]
print "%s" % xarg
print "%d" % int(str(xarg).lower(),16)
nusdow = nusDownloadingCLI(int(str(xarg).lower(),16), args[1], args[2], args[3], args[4])
else:
print "%s" % args[0]
print "%d" % int(str(args[0]).lower(),16)
nusdow = nusDownloadingCLI(int(str(args[0]).lower(),16), args[1], args[2], args[3], args[4])
nusdow.start()
sys.exit(0)
os.chdir(os.getenv("HOME"))
translator = QTranslator() translator = QTranslator()
translator.load(QString("i18n/Qwad_%1").arg(QLocale.system().name())) translator.load(QString("i18n/Qwad_%1").arg(QLocale.system().name()))
qttranslator = QTranslator() qttranslator = QTranslator()
@ -33,3 +72,5 @@ if __name__ == "__main__":
VentanaP.show() VentanaP.show()
sys.exit(Vapp.exec_()) sys.exit(Vapp.exec_())
if __name__ == "__main__":
main()