Fixed an issue where the app would crash if the file downloaded was corrupted.
This commit is contained in:
parent
b2efb78525
commit
1b516e9d7e
1 changed files with 38 additions and 15 deletions
53
main.py
53
main.py
|
|
@ -1,5 +1,5 @@
|
||||||
from utils import zip_files, join_files
|
from utils import zip_files, join_files
|
||||||
import sys, os, glob, json, re, shutil, stat
|
import sys, os, glob, json, re, shutil, stat, tarfile, zipfile
|
||||||
from PySide import QtGui, QtCore
|
from PySide import QtGui, QtCore
|
||||||
from PySide.QtGui import QApplication
|
from PySide.QtGui import QApplication
|
||||||
from PySide.QtNetwork import QHttp
|
from PySide.QtNetwork import QHttp
|
||||||
|
|
@ -134,6 +134,8 @@ class MainWindow(QtGui.QWidget):
|
||||||
|
|
||||||
self.resize(width,height)
|
self.resize(width,height)
|
||||||
|
|
||||||
|
self.extract_error = None
|
||||||
|
|
||||||
layout = QtGui.QVBoxLayout()
|
layout = QtGui.QVBoxLayout()
|
||||||
dl_bar = self.createDownloadBar()
|
dl_bar = self.createDownloadBar()
|
||||||
self.app_settings_widget = self.createApplicationSettings()
|
self.app_settings_widget = self.createApplicationSettings()
|
||||||
|
|
@ -164,7 +166,13 @@ class MainWindow(QtGui.QWidget):
|
||||||
cancel_button.setEnabled(True)
|
cancel_button.setEnabled(True)
|
||||||
self.disableUIWhileWorking()
|
self.disableUIWhileWorking()
|
||||||
setting = self.files_to_download.pop()
|
setting = self.files_to_download.pop()
|
||||||
self.downloadFile(setting.url, setting)
|
try:
|
||||||
|
self.downloadFile(setting.url, setting)
|
||||||
|
except Exception as e:
|
||||||
|
if os.path.exists(setting.full_file_path):
|
||||||
|
os.remove(setting.full_file_path)
|
||||||
|
QtGui.QMessageBox.information(self, 'Error!', str(e))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
QtGui.QMessageBox.information(self, 'Export Options Empty!', 'Please choose one of the export options!')
|
QtGui.QMessageBox.information(self, 'Export Options Empty!', 'Please choose one of the export options!')
|
||||||
|
|
||||||
|
|
@ -322,22 +330,39 @@ class MainWindow(QtGui.QWidget):
|
||||||
self.runInBackground('extractFiles', self.doneExtracting)
|
self.runInBackground('extractFiles', self.doneExtracting)
|
||||||
|
|
||||||
def extractFiles(self):
|
def extractFiles(self):
|
||||||
|
self.extract_error = None
|
||||||
for setting_name, setting in self.export_settings.items():
|
for setting_name, setting in self.export_settings.items():
|
||||||
if setting.value:
|
try:
|
||||||
extract_path = os.path.join('files', setting.name)
|
if setting.value:
|
||||||
if not os.path.exists(os.path.join(extract_path, setting.dest_file)):
|
extract_path = os.path.join('files', setting.name)
|
||||||
fbytes = setting.get_file_bytes()
|
|
||||||
with open(os.path.join(extract_path, setting.dest_file), 'wb') as d:
|
if not os.path.exists(os.path.join(extract_path, setting.dest_file)):
|
||||||
d.write(fbytes)
|
fbytes = setting.get_file_bytes()
|
||||||
if os.path.exists(setting.full_file_path):
|
|
||||||
os.remove(setting.full_file_path) #remove the zip/tar since we don't need it anymore
|
with open(os.path.join(extract_path, setting.dest_file), 'wb') as d:
|
||||||
self.progress_label.setText(self.progress_label.text()+'.')
|
d.write(fbytes)
|
||||||
|
if os.path.exists(setting.full_file_path):
|
||||||
|
os.remove(setting.full_file_path) #remove the zip/tar since we don't need it anymore
|
||||||
|
|
||||||
|
self.progress_label.setText(self.progress_label.text()+'.')
|
||||||
|
|
||||||
|
except (tarfile.ReadError, zipfile.BadZipfile) as e:
|
||||||
|
if os.path.exists(setting.full_file_path):
|
||||||
|
os.remove(setting.full_file_path)
|
||||||
|
self.extract_error = e
|
||||||
|
#cannot use GUI in thread to notify user. Save it for later
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def doneExtracting(self):
|
def doneExtracting(self):
|
||||||
self.ex_button.setEnabled(True)
|
self.ex_button.setEnabled(True)
|
||||||
self.progress_label.setText('Done Extracting.')
|
|
||||||
self.makeOutputFilesInBackground()
|
|
||||||
self.enableUI()
|
self.enableUI()
|
||||||
|
if self.extract_error:
|
||||||
|
self.progress_label.setText('Error extracting.')
|
||||||
|
QtGui.QMessageBox.information(self, 'Error!', 'There were one or more errors with your zip/tar files. They were deleted. Please try to export again.')
|
||||||
|
else:
|
||||||
|
self.progress_label.setText('Done Extracting.')
|
||||||
|
self.makeOutputFilesInBackground()
|
||||||
|
|
||||||
def cancelDownload(self):
|
def cancelDownload(self):
|
||||||
self.progress_label.setText("Download canceled.")
|
self.progress_label.setText("Download canceled.")
|
||||||
|
|
@ -784,8 +809,6 @@ class MainWindow(QtGui.QWidget):
|
||||||
self.progress_label.setText(self.progress_label.text()+'.')
|
self.progress_label.setText(self.progress_label.text()+'.')
|
||||||
|
|
||||||
os.remove(nw_path)
|
os.remove(nw_path)
|
||||||
except Exception as e:
|
|
||||||
QtGui.QMessageBox.information(self, 'Error!', str(e))
|
|
||||||
finally:
|
finally:
|
||||||
shutil.rmtree(tempDir)
|
shutil.rmtree(tempDir)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue