60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
import os
|
|
import gradio as gr
|
|
import modules.localization as localization
|
|
import json
|
|
|
|
|
|
all_styles = []
|
|
|
|
|
|
def try_load_sorted_styles(style_names, default_selected):
|
|
global all_styles
|
|
|
|
all_styles = style_names
|
|
|
|
try:
|
|
if os.path.exists('sorted_styles.json'):
|
|
with open('sorted_styles.json', 'rt', encoding='utf-8') as fp:
|
|
sorted_styles = []
|
|
for x in json.load(fp):
|
|
if x in all_styles:
|
|
sorted_styles.append(x)
|
|
for x in all_styles:
|
|
if x not in sorted_styles:
|
|
sorted_styles.append(x)
|
|
all_styles = sorted_styles
|
|
except Exception as e:
|
|
print('Load style sorting failed.')
|
|
print(e)
|
|
|
|
unselected = [y for y in all_styles if y not in default_selected]
|
|
all_styles = default_selected + unselected
|
|
|
|
return
|
|
|
|
|
|
def sort_styles(selected):
|
|
global all_styles
|
|
unselected = [y for y in all_styles if y not in selected]
|
|
sorted_styles = selected + unselected
|
|
try:
|
|
with open('sorted_styles.json', 'wt', encoding='utf-8') as fp:
|
|
json.dump(sorted_styles, fp, indent=4)
|
|
except Exception as e:
|
|
print('Write style sorting failed.')
|
|
print(e)
|
|
all_styles = sorted_styles
|
|
return gr.CheckboxGroup.update(choices=sorted_styles)
|
|
|
|
|
|
def localization_key(x):
|
|
return x + localization.current_translation.get(x, '')
|
|
|
|
|
|
def search_styles(selected, query):
|
|
unselected = [y for y in all_styles if y not in selected]
|
|
matched = [y for y in unselected if query.lower() in localization_key(y).lower()] if len(query.replace(' ', '')) > 0 else []
|
|
unmatched = [y for y in unselected if y not in matched]
|
|
sorted_styles = matched + selected + unmatched
|
|
return gr.CheckboxGroup.update(choices=sorted_styles)
|