Skip to content

Commit 57b2d27

Browse files
committed
0.1.1.10
1 parent 6b534b9 commit 57b2d27

28 files changed

+3397
-137
lines changed

common/MIME.py

Lines changed: 3065 additions & 0 deletions
Large diffs are not rendered by default.

common/books.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,7 @@ def insert_book(database: bdd.BDD, file_name_template: str, file_name_separator:
533533
elif ext in ['.cbz', '.cbr']: # section for CBZ and CBR files
534534
tmp_guid = uid() # assign random guid for CBZ and CBR books
535535
ret = inflate(file, tmpdir)
536-
tmp_cover = create_thumbnail(listDir(tmpdir)[0]) # get path of the first image into temp dir
536+
tmp_cover = create_thumbnail(list_directory(tmpdir)[0]) # get path of the first image into temp dir
537537

538538
else:
539539
print('Invalid file format')

common/files.py

Lines changed: 57 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
55
from common.vars import *
6+
from common.MIME import *
67

78

89
def get_file_size(file_name: str, human_readable: bool = True):
@@ -26,65 +27,86 @@ def get_file_size(file_name: str, human_readable: bool = True):
2627
return '{} bytes'.format(size)
2728

2829

29-
def listDir(dirName: str, ext: str = None):
30+
def get_file_type(file_path: str) -> str:
31+
file_path = file_path.replace('/', os.sep)
32+
file_tab = file_path.split(os.sep)
33+
ext = file_tab[len(file_tab) - 1]
34+
file_type = ""
35+
end = False
36+
while end is False:
37+
if ext in EXT_TO_TYPE:
38+
file_type = EXT_TO_TYPE[ext][0]
39+
end = True
40+
else:
41+
try:
42+
point_pos = ext.index('.', 1)
43+
ext = ext[point_pos:]
44+
except Exception:
45+
end = True
46+
file_type = "application/octet-stream"
47+
48+
return file_type
49+
50+
51+
def list_directory(directory_path: str, expected_extension: str = None):
3052
"""
3153
Recursive function for listing files in a folder and his sub folders
3254
33-
:param dirName: path of the parsed dir
34-
:param ext: list of extention separated by |
55+
:param directory_path: path of the parsed dir
56+
:param expected_extension: list of extension separated by |
3557
:return: list(str)
3658
"""
37-
allFiles = list()
38-
for root, directories, files in os.walk(dirName, topdown=False):
59+
file_list = list()
60+
for root, directories, files in os.walk(directory_path, topdown=False):
3961
for name in files:
40-
fullPath = os.path.join(root, name)
41-
if ext is not None:
42-
if re.search("\\.({})$".format(ext), name) is None: continue
43-
allFiles.append(fullPath)
44-
if ext is None:
62+
full_path = os.path.join(root, name)
63+
if expected_extension is not None:
64+
if re.search("\\.({})$".format(expected_extension), name) is None: continue
65+
file_list.append(full_path)
66+
if expected_extension is None:
4567
for name in directories:
46-
allFiles.append(os.path.join(root, name))
47-
return allFiles
68+
file_list.append(os.path.join(root, name))
69+
return file_list
4870

4971

50-
def listOnlyDir(path: str, level: int = 1, startDirs: list = [], excludeDirs: list = []):
72+
def listing_of_directory(path: str, level: int = 1, list_base_content: list = [], list_excluded_directory: list = []):
5173
some_dir = path.rstrip(os.path.sep)
52-
listDir = startDirs
74+
list_of_dir = list_base_content
5375
if os.path.isdir(some_dir):
5476
num_sep = some_dir.count(os.path.sep)
5577
for root, dirs, files in os.walk(some_dir):
5678
num_sep_this = root.count(os.path.sep)
5779
for name in dirs:
58-
if name in excludeDirs: continue
80+
if name in list_excluded_directory: continue
5981
if num_sep + level > num_sep_this:
60-
listDir.append(name)
61-
return listDir
82+
list_of_dir.append(name)
83+
return list_of_dir
6284

6385

64-
def listDirTree(dirName: str, ext: str = None):
65-
listOfFile = listDir(dirName, ext)
66-
listOfFile.sort()
86+
def list_directory_tree(base_directory: str, ext: str = None):
87+
list_of_file = list_directory(base_directory, ext)
88+
list_of_file.sort()
6789
# print(listOfFile)
6890

69-
treeFiles = dict()
70-
for file in listOfFile:
71-
recurListDirTree(file, dirName + os.sep, treeFiles)
72-
return treeFiles
91+
tree_files = dict()
92+
for file in list_of_file:
93+
__list_directory_tree_recursive(file, base_directory + os.sep, tree_files)
94+
return tree_files
7395

7496

75-
def recurListDirTree(file: str, path: str, treeFiles: dict):
76-
tmpl = file.replace(path, '')
77-
tmpp = tmpl.split(os.sep)
97+
def __list_directory_tree_recursive(file: str, path: str, parent_file_tree: dict):
98+
sub_path = file.replace(path, '')
99+
sub_path_tab = sub_path.split(os.sep)
78100

79-
if isinstance(tmpp, list):
80-
if len(tmpp) > 1:
81-
if tmpp[0] not in treeFiles:
82-
treeFiles[tmpp[0]] = dict()
83-
if isinstance(treeFiles[tmpp[0]], dict):
84-
recurListDirTree(file, path + tmpp[0] + os.sep, treeFiles[tmpp[0]])
101+
if isinstance(sub_path_tab, list):
102+
if len(sub_path_tab) > 1:
103+
if sub_path_tab[0] not in parent_file_tree:
104+
parent_file_tree[sub_path_tab[0]] = dict()
105+
if isinstance(parent_file_tree[sub_path_tab[0]], dict):
106+
__list_directory_tree_recursive(file, path + sub_path_tab[0] + os.sep, parent_file_tree[sub_path_tab[0]])
85107
else:
86-
if os.path.isfile(file): treeFiles[tmpl] = file
87-
else: treeFiles[tmpl] = dict()
108+
if os.path.isfile(file): parent_file_tree[sub_path] = file
109+
else: parent_file_tree[sub_path] = dict()
88110

89111

90112
def clean_dir(src_dir: str):

common/qt.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,22 @@ class QtQIconEnum(enum.Enum):
1212
unlock = env_vars['styles']['Dark']['icons']['unlock']
1313

1414

15-
def setQTreeItemIcon(item: QtWidgets.QTreeWidgetItem, icon_ref: QtQIconEnum = QtQIconEnum.folder):
15+
def setQTreeItemIcon(item: QtWidgets.QTreeWidgetItem, icon_ref: str = QtQIconEnum.folder.value):
1616
icon = QtGui.QIcon()
1717
image = QtGui.QPixmap()
18-
image.load(icon_ref.value)
18+
image.load(icon_ref)
1919
icon.addPixmap(image, QtGui.QIcon.Normal, QtGui.QIcon.Off)
2020
item.setIcon(0, icon)
2121

2222

23-
def setQTreeItemFolderIcon(item: QtWidgets.QTreeWidgetItem):
24-
setQTreeItemIcon(item, QtQIconEnum.folder)
23+
def setQTreeItemFileIcon(item: QtWidgets.QTreeWidgetItem, style='Dark'):
24+
setQTreeItemIcon(item, get_style_var(style, 'icons/file'))
2525

2626

27-
def setQTreeItemLockIcon(item: QtWidgets.QTreeWidgetItem):
28-
setQTreeItemIcon(item, QtQIconEnum.lock)
27+
def setQTreeItemFolderIcon(item: QtWidgets.QTreeWidgetItem, style='Dark'):
28+
setQTreeItemIcon(item, get_style_var(style, 'icons/folder'))
29+
30+
31+
def setQTreeItemLockIcon(item: QtWidgets.QTreeWidgetItem, style='Dark'):
32+
setQTreeItemIcon(item, get_style_var(style, 'icons/lock'))
2933

editor/checkpoint.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,28 @@ def __init__(self, parent, folder: str):
1515
super(CheckpointWindow, self).__init__(parent, QtCore.Qt.WindowTitleHint | QtCore.Qt.WindowCloseButtonHint)
1616
PyQt5.uic.loadUi(os.path.dirname(os.path.realpath(__file__)) + os.sep + 'checkpoint.ui'.replace('/', os.sep), self) # Load the .ui file
1717
lng = lang.Lang()
18+
self.BDD = parent.BDD
19+
style = self.BDD.get_param('style')
1820
self.setWindowTitle(lng['Editor']['LinkWindow']['WindowTitle'])
21+
self.setStyleSheet(env_vars['styles'][style]['QDialog'])
22+
1923
self.buttonBox.button(QtWidgets.QDialogButtonBox.Ok).setText(lng['Editor']['LinkWindow']['btnOk'])
2024
self.buttonBox.button(QtWidgets.QDialogButtonBox.Cancel).setText(lng['Editor']['LinkWindow']['btnCancel'])
21-
self.fileTree.setStyleSheet(env_vars['styles']['Dark']['fullTreeView'])
25+
self.buttonBox.button(QtWidgets.QDialogButtonBox.Ok).setStyleSheet(env_vars['styles'][style]['defaultButton'])
26+
self.buttonBox.button(QtWidgets.QDialogButtonBox.Cancel).setStyleSheet(env_vars['styles'][style]['defaultButton'])
27+
cursor = QtGui.QCursor(QtCore.Qt.PointingHandCursor)
28+
self.buttonBox.button(QtWidgets.QDialogButtonBox.Ok).setCursor(cursor)
29+
self.buttonBox.button(QtWidgets.QDialogButtonBox.Cancel).setCursor(cursor)
30+
31+
self.fileTree.setStyleSheet(env_vars['styles'][style]['fullTreeView'])
2232
self.fileTree.headerItem().setText(0, lng['Editor']['FileTableHeader'])
2333
self.fileTree.itemClicked.connect(self.itemClick)
2434
self.folder = folder
2535
self.selectedCheckpoint = ''
2636

2737
def openExec(self):
2838
self.fileTree.clear()
29-
liste = common.files.listOnlyDir(path=self.folder, level=1, startDirs=['original'], excludeDirs=['original', 'current'])
39+
liste = common.files.listing_of_directory(path=self.folder, level=1, list_base_content=['original'], list_excluded_directory=['original', 'current'])
3040
print(liste)
3141
for fold in liste:
3242
item = QtWidgets.QTreeWidgetItem(self.fileTree)

editor/content_table_editor.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,15 +78,15 @@ def open_exec(self, text: str = None, url: str = None):
7878
self.list_content.clear()
7979
self.addindex_combobox.clear()
8080

81-
self.files = common.files.listDirTree(self.folder, 'html|xhtml')
82-
files = common.files.listDir(self.folder, 'html|xhtml')
81+
self.files = common.files.list_directory_tree(self.folder, 'html|xhtml')
82+
files = common.files.list_directory(self.folder, 'html|xhtml')
8383
self.addindex_combobox.addItem("")
8484

8585
print(self.files)
8686
for file in files:
8787
self.addindex_combobox.addItem(file.replace(self.folder, ""))
8888

89-
li = common.files.listDir(self.folder, "opf")
89+
li = common.files.list_directory(self.folder, "opf")
9090
data = ''
9191
with open(li[0]) as myfile:
9292
data = myfile.read()

editor/editing_pane.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ def reload_contents(self):
114114
except Exception:
115115
''
116116

117-
def create_pane(self, title: str, path: str, tmpcss: str = None):
117+
def create_pane(self, title: str, icon: str, path: str, tmpcss: str = None):
118118
if tmpcss is not None:
119119
self.tmpcss = tmpcss
120120
data = None
@@ -245,7 +245,7 @@ def create_pane(self, title: str, path: str, tmpcss: str = None):
245245
block.setUrl(QtCore.QUrl(page))
246246
vertical_layout.addWidget(block)
247247

248-
self.addTab(tab, QtGui.QIcon(), title)
248+
self.addTab(tab, QtGui.QIcon(QtGui.QPixmap(icon)), title)
249249
self.setTabsClosable(True)
250250
self.setCurrentIndex(self.count() - 1)
251251

editor/files.py

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,19 @@ class FilesNameWindow(QDialog):
1616
def __init__(self, parent):
1717
super(FilesNameWindow, self).__init__(parent, QtCore.Qt.WindowTitleHint | QtCore.Qt.WindowCloseButtonHint)
1818
PyQt5.uic.loadUi(os.path.dirname(os.path.realpath(__file__)) + os.sep + 'files_name.ui'.replace('/', os.sep), self) # Load the .ui file
19-
lng = lang.Lang()
20-
self.lang = lng
19+
lng = parent.lng
20+
self.BDD = parent.BDD
21+
style = self.BDD.get_param('style')
22+
self.setStyleSheet(env_vars['styles'][style]['QDialog'])
2123
self.setWindowTitle(lng['Editor']['FilesWindow']['FileNameWindowTitle'])
2224
self.label.setText(lng['Editor']['FilesWindow']['FileNameWindowLabel'])
2325
self.button_box.button(QtWidgets.QDialogButtonBox.Ok).setText(lng['Editor']['FilesWindow']['btnOk'])
2426
self.button_box.button(QtWidgets.QDialogButtonBox.Cancel).setText(lng['Editor']['FilesWindow']['btnCancel'])
25-
self.button_box.button(QtWidgets.QDialogButtonBox.Ok).setStyleSheet(env_vars['styles']['Dark']['fullAltButton'])
26-
self.button_box.button(QtWidgets.QDialogButtonBox.Cancel).setStyleSheet(env_vars['styles']['Dark']['fullAltButton'])
27+
self.button_box.button(QtWidgets.QDialogButtonBox.Ok).setStyleSheet(env_vars['styles'][style]['defaultButton'])
28+
self.button_box.button(QtWidgets.QDialogButtonBox.Cancel).setStyleSheet(env_vars['styles'][style]['defaultButton'])
29+
cursor = QtGui.QCursor(QtCore.Qt.PointingHandCursor)
30+
self.button_box.button(QtWidgets.QDialogButtonBox.Ok).setCursor(cursor)
31+
self.button_box.button(QtWidgets.QDialogButtonBox.Cancel).setCursor(cursor)
2732

2833
def open_exec(self, text: str = None):
2934
if text is not None:
@@ -41,14 +46,19 @@ def __init__(self, parent, folder: str):
4146
super(FilesWindow, self).__init__(parent, QtCore.Qt.WindowTitleHint | QtCore.Qt.WindowCloseButtonHint)
4247
PyQt5.uic.loadUi(os.path.dirname(os.path.realpath(__file__)) + os.sep + 'files.ui'.replace('/', os.sep), self) # Load the .ui file
4348
lng = lang.Lang()
44-
self.lang = lng
49+
self.BDD = parent.BDD
50+
self.style = self.BDD.get_param('style')
51+
self.lng = lng
4552
self.setWindowTitle(lng['Editor']['FilesWindow']['WindowTitle'])
46-
self.setStyleSheet(env_vars['styles']['Dark']['fullButton'])
53+
self.setStyleSheet(env_vars['styles'][self.style]['QDialog'] + env_vars['styles'][self.style]['EditorFileDialogAdditional'])
4754
self.button_box.button(QtWidgets.QDialogButtonBox.Ok).setText(lng['Editor']['FilesWindow']['btnOk'])
4855
self.button_box.button(QtWidgets.QDialogButtonBox.Cancel).setText(lng['Editor']['FilesWindow']['btnCancel'])
49-
self.button_box.button(QtWidgets.QDialogButtonBox.Ok).setStyleSheet(env_vars['styles']['Dark']['fullAltButton'])
50-
self.button_box.button(QtWidgets.QDialogButtonBox.Cancel).setStyleSheet(env_vars['styles']['Dark']['fullAltButton'])
51-
self.file_tree.setStyleSheet(env_vars['styles']['Dark']['fullTreeView'])
56+
self.button_box.button(QtWidgets.QDialogButtonBox.Ok).setStyleSheet(env_vars['styles'][self.style]['defaultButton'])
57+
self.button_box.button(QtWidgets.QDialogButtonBox.Cancel).setStyleSheet(env_vars['styles'][self.style]['defaultButton'])
58+
cursor = QtGui.QCursor(QtCore.Qt.PointingHandCursor)
59+
self.button_box.button(QtWidgets.QDialogButtonBox.Ok).setCursor(cursor)
60+
self.button_box.button(QtWidgets.QDialogButtonBox.Cancel).setCursor(cursor)
61+
self.file_tree.setStyleSheet(env_vars['styles'][self.style]['fullTreeView'])
5262
self.file_tree.headerItem().setText(0, lng['Editor']['FileTableHeader'])
5363
self.file_tree.itemClicked.connect(self.item_click)
5464
self.file_tree.header().setSectionsClickable(True)
@@ -67,14 +77,14 @@ def __init__(self, parent, folder: str):
6777

6878
def open_exec(self, text: str = None, url: str = None):
6979
self.file_tree.clear()
70-
tree = common.files.listDirTree(self.folder)
80+
tree = common.files.list_directory_tree(self.folder)
7181
# for index in tree:
7282
# item = QtWidgets.QTreeWidgetItem(self.fileTree)
7383
# item.setText(0, index)
7484
# if isinstance(tree[index], dict):
7585
# item.setData(0, 100, ':dir:')
7686
# item.setData(0, 99, index)
77-
# common.qt.setQTreeItemFolderIcon(item)
87+
# common.qt.setQTreeItemFolderIcon(item, self.style)
7888
#
7989
# item = self.recur_file_table_insert(item, tree[index], index)
8090
# else:
@@ -102,7 +112,7 @@ def recur_file_table_insert(self, base_item: Union[QtWidgets.QTreeWidgetItem, Qt
102112
if isinstance(tree[indexr], dict):
103113
itemr.setData(0, 100, ':dir:')
104114
itemr.setData(0, 99, previous_dir + os.sep + indexr)
105-
common.qt.setQTreeItemFolderIcon(itemr)
115+
common.qt.setQTreeItemFolderIcon(itemr, self.style)
106116

107117
itemr = self.recur_file_table_insert(itemr, tree[indexr], previous_dir + os.sep + indexr)
108118
else:
@@ -111,7 +121,7 @@ def recur_file_table_insert(self, base_item: Union[QtWidgets.QTreeWidgetItem, Qt
111121
print(previous_dir + os.sep + indexr)
112122
if previous_dir + os.sep + indexr in self.lock_list or re.search('\\.opf$', indexr) is not None:
113123
itemr.setData(0, 98, True)
114-
common.qt.setQTreeItemLockIcon(itemr)
124+
common.qt.setQTreeItemLockIcon(itemr, self.style)
115125
if isinstance(base_item, QtWidgets.QTreeWidget):
116126
self.file_tree.insertTopLevelItem(0, itemr)
117127
else:
@@ -167,7 +177,7 @@ def importer(self):
167177
options |= QFileDialog.DontUseNativeDialog
168178
files, _ = QFileDialog.getOpenFileNames(
169179
self,
170-
self.lang['Editor']['FilesWindow']['ImportWindowTitle'],
180+
self.lng['Editor']['FilesWindow']['ImportWindowTitle'],
171181
"",
172182
"All Files (*.*)", options=options
173183
)
@@ -187,7 +197,7 @@ def importer(self):
187197
else:
188198
itemr = QtWidgets.QTreeWidgetItem(item)
189199
itemr.setText(0, tb[len(tb)-1])
190-
itemr.setForeground(0, QtGui.QColor(env_vars['styles']['Dark']['partialTreeViewItemColorNew']))
200+
itemr.setForeground(0, QtGui.QColor(env_vars['styles'][self.style]['partialTreeViewItemColorNew']))
191201

192202
if isinstance(item, QtWidgets.QTreeWidget): self.file_tree.insertTopLevelItem(0, itemr)
193203
else: item.addChild(itemr)
@@ -209,15 +219,15 @@ def new_file(self, is_file: bool = True):
209219
if self.selected_folder != '':
210220
prepath = os.sep + self.selected_folder
211221

212-
itemr.setForeground(0, QtGui.QColor(env_vars['styles']['Dark']['partialTreeViewItemColorNew']))
222+
itemr.setForeground(0, QtGui.QColor(env_vars['styles'][self.style]['partialTreeViewItemColorNew']))
213223
itemr.setText(0, file)
214224
if is_file is True:
215225
itemr.setData(0, 100, ':file:')
216226
self.list_new[prepath + os.sep + file] = {'innerPath': prepath + os.sep + file, 'type': 'new_file'}
217227
else:
218228
itemr.setData(0, 100, ':dir:')
219229
self.list_new[prepath + os.sep + file] = {'innerPath': prepath + os.sep + file, 'type': 'new_folder'}
220-
common.qt.setQTreeItemFolderIcon(itemr)
230+
common.qt.setQTreeItemFolderIcon(itemr, self.style)
221231
itemr.setData(0, 99, prepath + os.sep + file)
222232

223233
if isinstance(item, QtWidgets.QTreeWidget):
@@ -264,7 +274,7 @@ def rename(self):
264274
'newPath': self.selected_folder + os.sep + file, 'type': 'renameFile',
265275
'original': prepath + os.sep + pre_file}
266276
item.setText(0, file)
267-
item.setForeground(0, QtGui.QColor(env_vars['styles']['Dark']['partialTreeViewItemColorMod']))
277+
item.setForeground(0, QtGui.QColor(env_vars['styles'][self.style]['partialTreeViewItemColorMod']))
268278
except Exception:
269279
traceback.print_exc()
270280

@@ -307,7 +317,7 @@ def delete(self):
307317
ret2 = self.remove_from_dict(self.list_rename, file, parent)
308318
item.setText(tbo[len(tbo)-1])
309319

310-
item.setForeground(0, QtGui.QColor(env_vars['styles']['Dark']['partialTreeViewItemColorDel']))
320+
item.setForeground(0, QtGui.QColor(env_vars['styles'][self.style]['partialTreeViewItemColorDel']))
311321
except Exception:
312322
traceback.print_exc()
313323

0 commit comments

Comments
 (0)