1
0
mirror of https://github.com/ciromattia/kcc synced 2025-12-22 06:01:49 +00:00

Attempt to fix access denied errors

This commit is contained in:
Paweł Jastrzębski
2013-10-07 22:25:01 +02:00
parent 5077f60881
commit 3f0eea44f4
2 changed files with 29 additions and 12 deletions

View File

@@ -331,7 +331,7 @@ def dirImgProcess(path):
pass pass
if not GUI.conversionAlive: if not GUI.conversionAlive:
pool.terminate() pool.terminate()
rmtree(os.path.join(path, '..', '..')) rmtree(os.path.join(path, '..', '..'), onerror=fixReadOnly)
raise UserWarning("Conversion interrupted.") raise UserWarning("Conversion interrupted.")
GUI.emit(QtCore.SIGNAL("progressBarTick")) GUI.emit(QtCore.SIGNAL("progressBarTick"))
pool.join() pool.join()
@@ -339,7 +339,7 @@ def dirImgProcess(path):
try: try:
splitpages = splitpages.get() splitpages = splitpages.get()
except: except:
rmtree(os.path.join(path, '..', '..')) rmtree(os.path.join(path, '..', '..'), onerror=fixReadOnly)
raise RuntimeError("One of workers crashed. Cause: " + str(sys.exc_info()[1])) raise RuntimeError("One of workers crashed. Cause: " + str(sys.exc_info()[1]))
splitpages = filter(None, splitpages) splitpages = filter(None, splitpages)
splitpages.sort() splitpages.sort()
@@ -348,7 +348,7 @@ def dirImgProcess(path):
pagenumbermodifier += 1 pagenumbermodifier += 1
pagenumbermodifier += 1 pagenumbermodifier += 1
else: else:
rmtree(os.path.join(path, '..', '..')) rmtree(os.path.join(path, '..', '..'), onerror=fixReadOnly)
raise UserWarning("Source directory is empty.") raise UserWarning("Source directory is empty.")
@@ -556,13 +556,13 @@ def getWorkFolder(afile):
sanitizeTreeBeforeConversion(fullPath) sanitizeTreeBeforeConversion(fullPath)
return workdir return workdir
except OSError: except OSError:
rmtree(workdir) rmtree(workdir, onerror=fixReadOnly)
raise raise
elif afile.lower().endswith('.pdf'): elif afile.lower().endswith('.pdf'):
pdf = pdfjpgextract.PdfJpgExtract(afile) pdf = pdfjpgextract.PdfJpgExtract(afile)
path, njpg = pdf.extract() path, njpg = pdf.extract()
if njpg == 0: if njpg == 0:
rmtree(path) rmtree(path, onerror=fixReadOnly)
raise UserWarning("Failed to extract images.") raise UserWarning("Failed to extract images.")
else: else:
workdir = tempfile.mkdtemp('', 'KCC-TMP-') workdir = tempfile.mkdtemp('', 'KCC-TMP-')
@@ -572,11 +572,11 @@ def getWorkFolder(afile):
try: try:
path = cbx.extract(workdir) path = cbx.extract(workdir)
except OSError: except OSError:
rmtree(workdir) rmtree(workdir, onerror=fixReadOnly)
print 'UnRAR/7za not found or file failed to extract!' print 'UnRAR/7za not found or file failed to extract!'
sys.exit(21) sys.exit(21)
else: else:
rmtree(workdir) rmtree(workdir, onerror=fixReadOnly)
raise TypeError raise TypeError
move(path, path + "_temp") move(path, path + "_temp")
move(path + "_temp", os.path.join(path, 'OEBPS', 'Images')) move(path + "_temp", os.path.join(path, 'OEBPS', 'Images'))
@@ -907,7 +907,7 @@ def main(argv=None, qtGUI=None):
filepath.append(getOutputFilename(args[0], options.output, '.epub', '')) filepath.append(getOutputFilename(args[0], options.output, '.epub', ''))
make_archive(tome + '_comic', 'zip', tome) make_archive(tome + '_comic', 'zip', tome)
move(tome + '_comic.zip', filepath[-1]) move(tome + '_comic.zip', filepath[-1])
rmtree(tome) rmtree(tome, onerror=fixReadOnly)
return filepath return filepath
@@ -976,6 +976,14 @@ def checkOptions():
options.profileData = image.ProfileData.Profiles[options.profile] options.profileData = image.ProfileData.Profiles[options.profile]
#noinspection PyUnusedLocal
def fixReadOnly(func, path, exc_info):
if not os.access(path, os.W_OK):
os.chmod(path, stat.S_IWUSR)
func(path)
else:
raise
if __name__ == "__main__": if __name__ == "__main__":
freeze_support() freeze_support()
Copyright() Copyright()

View File

@@ -25,6 +25,7 @@ __docformat__ = 'restructuredtext en'
import os import os
import sys import sys
import stat
from shutil import rmtree, copytree, move from shutil import rmtree, copytree, move
from optparse import OptionParser, OptionGroup from optparse import OptionParser, OptionGroup
from multiprocessing import Pool, Queue, freeze_support from multiprocessing import Pool, Queue, freeze_support
@@ -223,7 +224,7 @@ def main(argv=None, qtGUI=None):
options.targetDir = args[0] + "-Splitted" options.targetDir = args[0] + "-Splitted"
print "\nSplitting images..." print "\nSplitting images..."
if os.path.isdir(options.sourceDir): if os.path.isdir(options.sourceDir):
rmtree(options.targetDir, True) rmtree(options.targetDir, onerror=fixReadOnly)
copytree(options.sourceDir, options.targetDir) copytree(options.sourceDir, options.targetDir)
work = [] work = []
pagenumber = 0 pagenumber = 0
@@ -254,15 +255,15 @@ def main(argv=None, qtGUI=None):
try: try:
workers.get() workers.get()
except: except:
rmtree(options.targetDir, True) rmtree(options.targetDir, onerror=fixReadOnly)
raise RuntimeError("One of workers crashed. Cause: " + str(sys.exc_info()[1])) raise RuntimeError("One of workers crashed. Cause: " + str(sys.exc_info()[1]))
if GUI: if GUI:
GUI.emit(QtCore.SIGNAL("progressBarTick"), 1) GUI.emit(QtCore.SIGNAL("progressBarTick"), 1)
if options.inPlace: if options.inPlace:
rmtree(options.sourceDir, True) rmtree(options.sourceDir, onerror=fixReadOnly)
move(options.targetDir, options.sourceDir) move(options.targetDir, options.sourceDir)
else: else:
rmtree(options.targetDir) rmtree(options.targetDir, onerror=fixReadOnly)
raise UserWarning("Source directory is empty.") raise UserWarning("Source directory is empty.")
else: else:
raise UserWarning("Provided path is not a directory.") raise UserWarning("Provided path is not a directory.")
@@ -270,6 +271,14 @@ def main(argv=None, qtGUI=None):
raise UserWarning("Target height is not set.") raise UserWarning("Target height is not set.")
#noinspection PyUnusedLocal
def fixReadOnly(func, path, exc_info):
if not os.access(path, os.W_OK):
os.chmod(path, stat.S_IWUSR)
func(path)
else:
raise
if __name__ == "__main__": if __name__ == "__main__":
freeze_support() freeze_support()
Copyright() Copyright()