Fix slow data fetch times. Fix scrollbar bug in dirs view.

This commit is contained in:
Sj-Si 2024-05-26 14:51:29 -04:00
parent 93fd33d69c
commit ab05f9c6c8
2 changed files with 28 additions and 10 deletions

View file

@ -24,6 +24,18 @@ extra_pages = []
allowed_dirs = set()
default_allowed_preview_extensions = ["png", "jpg", "jpeg", "webp", "gif"]
def _process(args):
data, keys_sorted = args
res = {}
for (div_id, card) in data.items():
res[div_id] = {
**{f"sort_{mode}": keys_sorted[mode].index(div_id) for mode in card.sort_keys.keys()},
"rel_parent_dir": card.rel_parent_dir,
"search_terms": card.search_terms,
"search_only": card.search_only,
"visible": not card.search_only,
}
return res
class ListItem:
"""
@ -234,6 +246,8 @@ class ExtraNetworksPage:
self.tree_roots = {}
self.nodes = {}
self.lister = util.MassFileLister()
self.generating_card_view_data = False
self.generating_tree_view_data = False
# HTML Templates
self.pane_tpl = shared.html("extra-networks-pane.html")
self.card_tpl = shared.html("extra-networks-card.html")
@ -486,6 +500,7 @@ class ExtraNetworksPage:
}
Return does not contain the HTML since that is fetched by client.
"""
self.generating_card_view_data = True
res = {}
# Cards require a different sorting method than tree/dirs. We want to present
@ -556,21 +571,18 @@ class ExtraNetworksPage:
keys_sorted = {}
sort_modes = self.cards[next(iter(self.cards))].sort_keys.keys()
for mode in sort_modes:
keys_sorted[mode] = sorted(
self.cards.keys(),
key=lambda k, sm=mode: shared.natural_sort_key(str(self.cards[k].sort_keys[sm])),
)
keys_sorted[mode] = {div_id: i for i, div_id in enumerate(sorted(self.cards.keys(), key=lambda k, sm=mode: shared.natural_sort_key(str(self.cards[k].sort_keys[sm]))))}
# Now that we have sorted, we can create the cards dataset.
for div_id, card in self.cards.items():
for (div_id, card) in self.cards.items():
res[div_id] = {
**{f"sort_{mode}": keys_sorted[mode].index(div_id) for mode in card.sort_keys.keys()},
**{f"sort_{mode}": keys_sorted[mode][div_id] for mode in card.sort_keys.keys()},
"rel_parent_dir": card.rel_parent_dir,
"search_terms": card.search_terms,
"search_only": card.search_only,
"visible": not card.search_only,
}
self.generating_card_view_data = False
return res
def generate_tree_view_data(self, tabname: str) -> dict:
@ -586,6 +598,7 @@ class ExtraNetworksPage:
}
Return does not contain the HTML since that is fetched by client.
"""
self.generating_tree_view_data = True
res = {}
show_files = shared.opts.extra_networks_tree_view_show_files is True
@ -718,6 +731,7 @@ class ExtraNetworksPage:
"expanded": tree_item.expanded,
}
self.generating_tree_view_data = False
return res
def create_dirs_view_html(self, tabname: str) -> str:
@ -1066,7 +1080,9 @@ def init_tree_data(tabname: str = "", extra_networks_tabname: str = "") -> JSONR
"""
page = get_page_by_name(extra_networks_tabname)
data = page.generate_tree_view_data(tabname)
data = None
if not page.generating_tree_view_data:
data = page.generate_tree_view_data(tabname)
return JSONResponse({"data": data, "ready": data is not None})
@ -1082,7 +1098,9 @@ def init_card_data(tabname: str = "", extra_networks_tabname: str = "") -> JSONR
"""
page = get_page_by_name(extra_networks_tabname)
data = page.generate_card_view_data(tabname)
data = None
if not page.generating_card_view_data:
data = page.generate_card_view_data(tabname)
return JSONResponse({"data": data, "ready": data is not None})

View file

@ -1329,7 +1329,7 @@ body.resizing.resize-grid-row {
.extra-network-content--dirs-view {
display: block;
flex: 1;
overflow: clip auto;
overflow: clip scroll;
border: 1px solid var(--block-border-color);
padding: var(--spacing-md);
}