@@ -30,21 +30,34 @@ def sorting_block_tree_init(self) -> None:
30
30
self .sorting_block_search_edit .returnPressed .connect (self .sorting_block_tree_research )
31
31
32
32
def sorting_block_tree_load_data (self ):
33
- # Clean sub-tree Authors ans Series
34
- while self .sorting_block_tree .topLevelItem (1 ).childCount () > 0 :
35
- self .sorting_block_tree .topLevelItem (1 ).removeChild (self .sorting_block_tree .topLevelItem (1 ).child (0 ))
36
- while self .sorting_block_tree .topLevelItem (2 ).childCount () > 0 :
37
- self .sorting_block_tree .topLevelItem (2 ).removeChild (self .sorting_block_tree .topLevelItem (2 ).child (0 ))
38
- authors = self .BDD .get_authors ()
39
- series = self .BDD .get_series ()
40
- for author in authors :
41
- item = QtWidgets .QTreeWidgetItem (self .sorting_block_tree .topLevelItem (1 ))
42
- item .setText (0 , author )
43
- item .setText (1 , 'authors:{}' .format (author ))
44
- for serie in series :
45
- item = QtWidgets .QTreeWidgetItem (self .sorting_block_tree .topLevelItem (2 ))
46
- item .setText (0 , serie )
47
- item .setText (1 , 'series:{}' .format (serie ))
33
+ try :
34
+ # Clean sub-tree Authors ans Series
35
+ while self .sorting_block_tree .topLevelItem (1 ).childCount () > 0 :
36
+ self .sorting_block_tree .topLevelItem (1 ).removeChild (self .sorting_block_tree .topLevelItem (1 ).child (0 ))
37
+ while self .sorting_block_tree .topLevelItem (2 ).childCount () > 0 :
38
+ self .sorting_block_tree .topLevelItem (2 ).removeChild (self .sorting_block_tree .topLevelItem (2 ).child (0 ))
39
+ while self .sorting_block_tree .topLevelItem (3 ).childCount () > 0 :
40
+ self .sorting_block_tree .topLevelItem (3 ).removeChild (self .sorting_block_tree .topLevelItem (3 ).child (0 ))
41
+ authors = self .BDD .get_authors ()
42
+ series = self .BDD .get_series ()
43
+ tags = self .BDD .get_tags ()
44
+ for author in authors :
45
+ item = QtWidgets .QTreeWidgetItem (self .sorting_block_tree .topLevelItem (1 ))
46
+ item .setText (0 , author )
47
+ item .setText (1 , 'authors:{}' .format (author ))
48
+ item .setToolTip (0 , author )
49
+ for serie in series :
50
+ item = QtWidgets .QTreeWidgetItem (self .sorting_block_tree .topLevelItem (2 ))
51
+ item .setText (0 , serie )
52
+ item .setText (1 , 'series:{}' .format (serie ))
53
+ item .setToolTip (0 , serie )
54
+ for tag in tags :
55
+ item = QtWidgets .QTreeWidgetItem (self .sorting_block_tree .topLevelItem (3 ))
56
+ item .setText (0 , tag )
57
+ item .setText (1 , 'tags:{}' .format (tag ))
58
+ item .setToolTip (0 , tag )
59
+ except Exception :
60
+ traceback .print_exc ()
48
61
49
62
def sorting_block_tree_item_activated (self , item , column ):
50
63
try :
@@ -53,23 +66,26 @@ def sorting_block_tree_item_activated(self, item, column):
53
66
traceback .print_exc ()
54
67
55
68
def sorting_block_tree_set_filter (self , filter : str = None ) -> None :
56
- if filter is None or filter .strip () == '' :
57
- return
58
- filter_tab = [filter ]
59
- if filter == 'all' or filter == '*' :
60
- self .sorting_block_tree_actual_filters .clear ()
61
- self .sorting_block_tree_actual_filters .append (LibrarySortingFilter ('*' , None ))
62
- else :
63
- self .sorting_block_tree_del_filter ('*' , False )
64
- filter_tab = filter .split (':' )
65
- found = False
66
- for index in range (0 , len (self .sorting_block_tree_actual_filters )):
67
- if self .sorting_block_tree_actual_filters [index ].type == filter_tab [0 ]:
68
- self .sorting_block_tree_actual_filters [index ].data = filter_tab [1 ]
69
- found = True
70
- if found is False :
71
- self .sorting_block_tree_actual_filters .append (LibrarySortingFilter (filter_tab [0 ], filter_tab [1 ]))
72
- self .sorting_block_tree_parse_filters ()
69
+ try :
70
+ if filter is None or filter .strip () == '' :
71
+ return
72
+ filter_tab = [filter ]
73
+ if filter == 'all' or filter == '*' :
74
+ self .sorting_block_tree_actual_filters .clear ()
75
+ self .sorting_block_tree_actual_filters .append (LibrarySortingFilter ('*' , None ))
76
+ else :
77
+ self .sorting_block_tree_del_filter ('*' , False )
78
+ filter_tab = filter .split (':' , 1 )
79
+ found = False
80
+ for index in range (0 , len (self .sorting_block_tree_actual_filters )):
81
+ if self .sorting_block_tree_actual_filters [index ].type == filter_tab [0 ]:
82
+ self .sorting_block_tree_actual_filters [index ].data = filter_tab [1 ]
83
+ found = True
84
+ if found is False :
85
+ self .sorting_block_tree_actual_filters .append (LibrarySortingFilter (filter_tab [0 ], filter_tab [1 ]))
86
+ self .sorting_block_tree_parse_filters ()
87
+ except Exception :
88
+ traceback .print_exc ()
73
89
74
90
def sorting_block_tree_del_filter (self , filter : str = None , filter_print : bool = True ) -> bool :
75
91
if filter is None or filter .strip () == '' :
@@ -110,12 +126,16 @@ def sorting_block_tree_parse_filters(self) -> None:
110
126
alabel .setMaximumHeight (20 )
111
127
alayout .addWidget (alabel )
112
128
self .sorting_block_search_zone .addLayout (alayout )
129
+ self .sorting_block_search_scroll_area .hide ()
113
130
else :
131
+ self .sorting_block_search_scroll_area .show ()
114
132
for filter in self .sorting_block_tree_actual_filters :
115
133
alayout = QtWidgets .QHBoxLayout ()
116
134
alabel = QtWidgets .QLabel ()
117
- alabel .setText (filter .type + ':' + filter .data )
118
- alabel .setMaximumHeight (20 )
135
+ alabel .setText (filter .type + ' : ' + filter .data )
136
+ alabel .setToolTip (filter .data )
137
+ alabel .setWordWrap (True )
138
+ # alabel.setMaximumHeight(20)
119
139
alayout .addWidget (alabel )
120
140
121
141
abutton = QtWidgets .QPushButton ()
@@ -129,29 +149,57 @@ def sorting_block_tree_parse_filters(self) -> None:
129
149
if len (self .sorting_block_tree_actual_filters ) < 2 :
130
150
if filter .type == '*' :
131
151
self .load_books (self .BDD .get_books ())
132
- elif filter .type in ['authors' , 'series' , 'search' ]:
152
+ elif filter .type in ['authors' , 'series' , 'tags' , ' search' ]:
133
153
self .load_books (self .BDD .get_books (None , filter .type + ':' + filter .data ))
134
154
else :
135
155
return
136
156
else :
137
157
books = self .BDD .get_books ()
138
158
end_books = []
139
159
for book in books :
160
+ cptYes = 0
161
+ cptNo = 0
140
162
ok = True
141
163
for filter in self .sorting_block_tree_actual_filters :
142
164
if filter .type == 'authors' :
143
- if book ['authors' ] != filter .data : ok = False
144
- if filter .type == 'series' :
145
- if book ['series' ] != filter .data : ok = False
146
- if filter .type == 'search' :
165
+ if book ['authors' ] != filter .data :
166
+ ok = False
167
+ cptNo += 1
168
+ else :
169
+ cptYes += 1
170
+ elif filter .type == 'series' :
171
+ if book ['series' ] != filter .data :
172
+ ok = False
173
+ cptNo += 1
174
+ else :
175
+ cptYes += 1
176
+ elif filter .type == 'tags' :
177
+ filter .data = filter .data .lower ()
178
+ tags = book ['tags' ].lower ()
179
+ if tags == filter .data :
180
+ cptYes += 1
181
+ elif ';' + filter .data + ';' in tags :
182
+ cptYes += 1
183
+ elif tags .startswith (filter .data + ';' ):
184
+ cptYes += 1
185
+ elif tags .endswith (';' + filter .data ):
186
+ cptYes += 1
187
+ else :
188
+ cptNo += 1
189
+ elif filter .type == 'search' :
147
190
fd = filter .data .lower ()
148
191
i = book ['title' ].lower ()
149
192
s = book ['series' ].lower ()
150
193
a = book ['authors' ].lower ()
151
194
t = book ['tags' ].lower ()
152
195
if fd not in i and fd not in s and fd not in a and fd not in t :
153
196
ok = False
154
- if ok is True :
197
+ cptNo += 1
198
+ else :
199
+ cptYes += 1
200
+ else :
201
+ cptNo += 1
202
+ if cptYes > cptNo :
155
203
end_books .append (book )
156
204
self .load_books (end_books )
157
205
except Exception :
0 commit comments