1

Add: Can open tarballs containing at most one (1) file.

This commit is contained in:
Pauline Gomér 2011-10-25 22:12:58 +02:00
parent 65ee3466ad
commit dcbd8c661a

View File

@ -16,6 +16,7 @@
import os import os
import tarfile
from PyQt4 import QtGui, QtCore from PyQt4 import QtGui, QtCore
from reader_ui import Ui_MainWindowReader from reader_ui import Ui_MainWindowReader
from preferences import DialogPreferences from preferences import DialogPreferences
@ -164,7 +165,7 @@ class MainWindowReader(QtGui.QMainWindow, Ui_MainWindowReader):
filename = QtGui.QFileDialog.getOpenFileName( filename = QtGui.QFileDialog.getOpenFileName(
parent=self, parent=self,
caption='Select a file to open', caption='Select a file to open',
filter='Text files (*.txt);;All files (*.*)' filter='Archive files (*.bz2 *.gz *.tar *.tgz);;Text files (*.txt);;All files (*.*)'
) )
if not filename.isNull(): if not filename.isNull():
self.openFile(filename) self.openFile(filename)
@ -322,8 +323,7 @@ class MainWindowReader(QtGui.QMainWindow, Ui_MainWindowReader):
def openFile(self, filename): def openFile(self, filename):
filename = unicode(filename) filename = unicode(filename)
try: try:
with open(filename, 'rb') as fp: content = self.openFileByExtension(filename)
content = fp.read()
except IOError: except IOError:
self.setStatus(u'Failed to load file {0}'.format(filename)) self.setStatus(u'Failed to load file {0}'.format(filename))
QtGui.QMessageBox.critical(self, 'Yomichan', 'Cannot open file for read') QtGui.QMessageBox.critical(self, 'Yomichan', 'Cannot open file for read')
@ -353,6 +353,25 @@ class MainWindowReader(QtGui.QMainWindow, Ui_MainWindowReader):
self.setStatus(u'Loaded file {0}'.format(filename)) self.setStatus(u'Loaded file {0}'.format(filename))
self.setWindowTitle(u'Yomichan - {0} ({1})'.format(os.path.split(filename)[1], encoding)) self.setWindowTitle(u'Yomichan - {0} ({1})'.format(os.path.split(filename)[1], encoding))
def openFileByExtension(self, filename):
if tarfile.is_tarfile(filename):
# opening an empty tar file raises ReadError
with tarfile.open(filename, 'r:*') as tp:
files = [f for f in tp.getnames() if tp.getmember(f).isfile()]
if len(files) == 0:
content = unicode()
elif len(files) == 1:
fp = tp.extractfile(files[0])
content = fp.read()
fp.close()
else:
content = unicode()
QtGui.QMessageBox.critical(self, 'Yomichan', 'Archives with more than one (1) file are not supported')
else:
with open(filename, 'rb') as fp:
content = fp.read()
return content
def closeFile(self): def closeFile(self):
self.setWindowTitle('Yomichan') self.setWindowTitle('Yomichan')
self.textContent.setPlainText(unicode()) self.textContent.setPlainText(unicode())