diff --git a/fb2mobi-gui.config b/fb2mobi-gui.config
index 3563025..7851be3 100644
--- a/fb2mobi-gui.config
+++ b/fb2mobi-gui.config
@@ -17,15 +17,15 @@
True
- 516, 413
+ 630, 299
100
100
- 314
+ 428
- 314
- 257
+ -1286
+ 68
952
503
diff --git a/ui/fb2meta.py b/ui/fb2meta.py
index ac7802e..0afbc54 100644
--- a/ui/fb2meta.py
+++ b/ui/fb2meta.py
@@ -5,6 +5,9 @@
import os
import zipfile
import codecs
+import shutil
+import tempfile
+
from io import StringIO, BytesIO
from lxml import etree
@@ -62,6 +65,7 @@ def __init__(self, file):
self.coverdata = None
self.coverpage_href = ''
self.is_zip = False
+ self.encoding = ''
if os.path.splitext(self.file)[1].lower() == '.zip':
self.is_zip = True
@@ -76,11 +80,13 @@ def __init__(self, file):
f.close()
self.tree = etree.parse(BytesIO(content), parser=etree.XMLParser(recover=True))
+ self.encoding = self.tree.docinfo.encoding
else:
# TODO: архиве несколько файлов. Ошибка
pass
else:
self.tree = etree.parse(self.file, parser=etree.XMLParser(recover=True))
+ self.encoding = self.tree.docinfo.encoding
def get_first_series(self):
series_name = ''
@@ -258,16 +264,30 @@ def write(self):
indent(self.tree.getroot())
if self.is_zip:
- zip_file = zipfile.ZipFile(self.file, 'w', zipfile.ZIP_DEFLATED)
- zipped_file_name = os.path.splitext(os.path.split(self.file)[1])[0]
- if not zipped_file_name.lower().endswith('.fb2'):
- zipped_file_name += '.fb2'
-
- zip_file.writestr(zipped_file_name, etree.tostring(self.tree, encoding='utf-8',
- method='xml', xml_declaration=True))
- zip_file.close()
+ zipped_file_name = ''
+ temp_dir = tempfile.mkdtemp()
+ try:
+ zip_file = zipfile.ZipFile(self.file, 'r', zipfile.ZIP_DEFLATED)
+ zip_file.extractall(temp_dir)
+ zip_file.close()
+
+ file_list = os.listdir(temp_dir)
+ if len(file_list) == 1:
+ for file in file_list:
+ if file.lower().endswith('.fb2'):
+ zipped_file_name = file
+ break
+ shutil.rmtree(temp_dir)
+ except:
+ shutil.rmtree(temp_dir)
+
+ if zipped_file_name:
+ zip_file = zipfile.ZipFile(self.file, 'w', zipfile.ZIP_DEFLATED)
+ zip_file.writestr(zipped_file_name, etree.tostring(self.tree, encoding=self.encoding,
+ method='xml', xml_declaration=True))
+ zip_file.close()
else:
- self.tree.write(self.file, encoding='utf-8', method='xml', xml_declaration=True, pretty_print=False)
+ self.tree.write(self.file, encoding=self.encoding, method='xml', xml_declaration=True, pretty_print=False)
if __name__ == '__main__':
# meta = Fb2Meta('Судья Ди 01. Золото Будды.fb2.zip')
diff --git a/version.py b/version.py
index 384364d..cd22ac7 100644
--- a/version.py
+++ b/version.py
@@ -4,5 +4,5 @@
WINDOWS = platform.system().lower() == "windows"
-VERSION = u'3.6.36'
+VERSION = u'3.6.37'