mirror of
https://github.com/TagStudioDev/TagStudio.git
synced 2024-07-30 21:27:34 +00:00
fix(QtDriver): redundant search override
filter items on same search string override
This commit is contained in:
parent
c75aff4db3
commit
892b3c0985
1 changed files with 54 additions and 51 deletions
|
@ -162,7 +162,7 @@ class Consumer(QThread):
|
|||
|
||||
class QtDriver(QObject):
|
||||
"""A Qt GUI frontend driver for TagStudio."""
|
||||
|
||||
last_search_string: None = None | str,
|
||||
SIGTERM = Signal()
|
||||
|
||||
preview_panel: PreviewPanel
|
||||
|
@ -558,11 +558,11 @@ class QtDriver(QObject):
|
|||
|
||||
search_button: QPushButton = self.main_window.searchButton
|
||||
search_button.clicked.connect(
|
||||
lambda: self.filter_items(self.main_window.searchField.text())
|
||||
lambda: self.filter_items(self.main_window.searchField.text(),False) # False as a parameter cancels default 'redundant search' override in filter_items()
|
||||
)
|
||||
search_field: QLineEdit = self.main_window.searchField
|
||||
search_field.returnPressed.connect(
|
||||
lambda: self.filter_items(self.main_window.searchField.text())
|
||||
lambda: self.filter_items(self.main_window.searchField.text(),False) # False as a parameter cancels default 'redundant search' override in filter_items()
|
||||
)
|
||||
|
||||
back_button: QPushButton = self.main_window.backButton
|
||||
|
@ -1323,57 +1323,60 @@ class QtDriver(QObject):
|
|||
len(self.frame_dict[query]),
|
||||
)
|
||||
|
||||
def filter_items(self, query: str = ""):
|
||||
if self.lib:
|
||||
# logging.info('Filtering...')
|
||||
self.main_window.statusbar.showMessage(
|
||||
f'Searching Library for "{query}"...'
|
||||
)
|
||||
self.main_window.statusbar.repaint()
|
||||
start_time = time.time()
|
||||
|
||||
# self.filtered_items = self.lib.search_library(query)
|
||||
# 73601 Entries at 500 size should be 246
|
||||
all_items = self.lib.search_library(query)
|
||||
frames: list[list[tuple[ItemType, int]]] = []
|
||||
frame_count = math.ceil(len(all_items) / self.max_results)
|
||||
for i in range(0, frame_count):
|
||||
frames.append(
|
||||
all_items[
|
||||
min(len(all_items) - 1, (i) * self.max_results) : min(
|
||||
len(all_items), (i + 1) * self.max_results
|
||||
)
|
||||
]
|
||||
)
|
||||
for i, f in enumerate(frames):
|
||||
logging.info(f"Query:{query}, Frame: {i}, Length: {len(f)}")
|
||||
self.frame_dict[query] = frames
|
||||
# self.frame_dict[query] = [all_items]
|
||||
|
||||
if self.cur_query == query:
|
||||
# self.refresh_frame(self.lib.search_library(query))
|
||||
# NOTE: Trying to refresh instead of navigating forward here
|
||||
# now creates a bug when the page counts differ on refresh.
|
||||
# If refreshing is absolutely desired, see how to update
|
||||
# page counts where they need to be updated.
|
||||
self.nav_forward(*self.get_frame_contents(0, query))
|
||||
else:
|
||||
# self.nav_forward(self.lib.search_library(query))
|
||||
self.nav_forward(*self.get_frame_contents(0, query))
|
||||
self.cur_query = query
|
||||
|
||||
end_time = time.time()
|
||||
if query:
|
||||
|
||||
def filter_items(self, query: str = "", override: bool = True):
|
||||
if self.lib and (override or (not (self.last_search_string == query))):
|
||||
if(override or (not (self.last_search_string == query))):
|
||||
self.last_search_string = query
|
||||
# logging.info('Filtering...')
|
||||
self.main_window.statusbar.showMessage(
|
||||
f'{len(all_items)} Results Found for "{query}" ({format_timespan(end_time - start_time)})'
|
||||
f'Searching Library for "{query}"...'
|
||||
)
|
||||
else:
|
||||
self.main_window.statusbar.showMessage(
|
||||
f"{len(all_items)} Results ({format_timespan(end_time - start_time)})"
|
||||
)
|
||||
# logging.info(f'Done Filtering! ({(end_time - start_time):.3f}) seconds')
|
||||
self.main_window.statusbar.repaint()
|
||||
start_time = time.time()
|
||||
|
||||
# self.update_thumbs()
|
||||
# self.filtered_items = self.lib.search_library(query)
|
||||
# 73601 Entries at 500 size should be 246
|
||||
all_items = self.lib.search_library(query)
|
||||
frames: list[list[tuple[ItemType, int]]] = []
|
||||
frame_count = math.ceil(len(all_items) / self.max_results)
|
||||
for i in range(0, frame_count):
|
||||
frames.append(
|
||||
all_items[
|
||||
min(len(all_items) - 1, (i) * self.max_results) : min(
|
||||
len(all_items), (i + 1) * self.max_results
|
||||
)
|
||||
]
|
||||
)
|
||||
for i, f in enumerate(frames):
|
||||
logging.info(f"Query:{query}, Frame: {i}, Length: {len(f)}")
|
||||
self.frame_dict[query] = frames
|
||||
# self.frame_dict[query] = [all_items]
|
||||
|
||||
if self.cur_query == query:
|
||||
# self.refresh_frame(self.lib.search_library(query))
|
||||
# NOTE: Trying to refresh instead of navigating forward here
|
||||
# now creates a bug when the page counts differ on refresh.
|
||||
# If refreshing is absolutely desired, see how to update
|
||||
# page counts where they need to be updated.
|
||||
self.nav_forward(*self.get_frame_contents(0, query))
|
||||
else:
|
||||
# self.nav_forward(self.lib.search_library(query))
|
||||
self.nav_forward(*self.get_frame_contents(0, query))
|
||||
self.cur_query = query
|
||||
|
||||
end_time = time.time()
|
||||
if query:
|
||||
self.main_window.statusbar.showMessage(
|
||||
f'{len(all_items)} Results Found for "{query}" ({format_timespan(end_time - start_time)})'
|
||||
)
|
||||
else:
|
||||
self.main_window.statusbar.showMessage(
|
||||
f"{len(all_items)} Results ({format_timespan(end_time - start_time)})"
|
||||
)
|
||||
# logging.info(f'Done Filtering! ({(end_time - start_time):.3f}) seconds')
|
||||
|
||||
# self.update_thumbs()
|
||||
|
||||
def remove_recent_library(self, item_key: str):
|
||||
self.settings.beginGroup(SettingItems.LIBS_LIST)
|
||||
|
|
Loading…
Reference in a new issue