remove character sorting
This commit is contained in:
+11
-77
@@ -1,4 +1,3 @@
|
||||
import json
|
||||
import os
|
||||
import random
|
||||
|
||||
@@ -15,24 +14,13 @@ class CharacterSelectNode:
|
||||
Node that lets a user select a character and then returns the character and character prompt
|
||||
"""
|
||||
|
||||
character_dict = {}
|
||||
final_character_dict = {}
|
||||
final_characters = []
|
||||
cached_sorting_setting = ConfigReader.get_setting("sn0w.CharacterSettings.SortCharactersBy", "alphabetical")
|
||||
cached_default_character_setting = ConfigReader.get_setting(
|
||||
"sn0w.CharacterSettings.DisableDefaultCharacters", False
|
||||
)
|
||||
character_dict = {}
|
||||
last_character = ""
|
||||
favorites = ConfigReader.get_setting("SyntaxHighlighting.favorites", [])
|
||||
|
||||
logger = Logger()
|
||||
|
||||
@classmethod
|
||||
def initialize(cls):
|
||||
dir_path = cls.get_base_dir()
|
||||
|
||||
cls.load_characters(dir_path)
|
||||
|
||||
@classmethod
|
||||
def get_base_dir(cls):
|
||||
dir_path = os.path.dirname(os.path.realpath(__file__))
|
||||
@@ -40,67 +28,15 @@ class CharacterSelectNode:
|
||||
dir_path = os.path.dirname(dir_path)
|
||||
return dir_path
|
||||
|
||||
@classmethod
|
||||
def check_initialize(cls):
|
||||
if not cls.final_characters or cls.cached_default_character_setting != ConfigReader.get_setting(
|
||||
"sn0w.CharacterSettings.DisableDefaultCharacters", False
|
||||
):
|
||||
cls.cached_default_character_setting = ConfigReader.get_setting(
|
||||
"sn0w.CharacterSettings.DisableDefaultCharacters", False
|
||||
)
|
||||
cls.initialize()
|
||||
elif cls.cached_sorting_setting != ConfigReader.get_setting(
|
||||
"sn0w.CharacterSettings.SortCharactersBy", "alphabetical"
|
||||
):
|
||||
cls.sort_characters()
|
||||
|
||||
@classmethod
|
||||
def load_characters(cls, dir_path):
|
||||
include_default = not cls.cached_default_character_setting
|
||||
cls.character_dict = CharacterLoader.get_character_dict(dir_path, include_default)
|
||||
cls.sort_characters(True)
|
||||
|
||||
@staticmethod
|
||||
def extract_series_name(character_name):
|
||||
return CharacterLoader.extract_series_name(character_name)
|
||||
|
||||
@classmethod
|
||||
def sort_characters(cls, force_sort=False):
|
||||
current_sorting_setting = ConfigReader.get_setting("sn0w.CharacterSettings.SortCharactersBy", "alphabetical")
|
||||
if current_sorting_setting != cls.cached_sorting_setting or force_sort:
|
||||
if current_sorting_setting == "series":
|
||||
cls.final_character_dict = {
|
||||
name: cls.character_dict[name] for name in sorted(cls.character_dict, key=cls.extract_series_name)
|
||||
}
|
||||
if current_sorting_setting == "alphabetical":
|
||||
cls.final_character_dict = {name: cls.character_dict[name] for name in sorted(cls.character_dict)}
|
||||
|
||||
cls.cached_sorting_setting = current_sorting_setting
|
||||
|
||||
favorite_names = []
|
||||
non_favorite_names = []
|
||||
|
||||
for name in cls.final_character_dict.keys():
|
||||
if name in cls.favorites:
|
||||
favorite_names.append(name)
|
||||
else:
|
||||
non_favorite_names.append(name)
|
||||
|
||||
ordered_characters = {}
|
||||
for fav_name in favorite_names:
|
||||
ordered_characters[fav_name] = cls.final_character_dict[fav_name]
|
||||
|
||||
for name in non_favorite_names:
|
||||
ordered_characters[name] = cls.final_character_dict[name]
|
||||
|
||||
cls.final_characters = list(ordered_characters.keys())
|
||||
|
||||
@classmethod
|
||||
def INPUT_TYPES(cls):
|
||||
cls.check_initialize()
|
||||
dir_path = cls.get_base_dir()
|
||||
filtered_character_names = CharacterLoader.get_filtered_character_list(dir_path, cls.final_character_dict)
|
||||
character_names = ["None"] + filtered_character_names + ["SN0W_CHARACTER_SELECTOR"]
|
||||
filtered_character_names = CharacterLoader.get_filtered_character_dict(
|
||||
dir_path,
|
||||
include_default=not ConfigReader.get_setting("sn0w.CharacterSettings.DisableDefaultCharacters", False),
|
||||
)
|
||||
cls.character_dict = filtered_character_names
|
||||
character_names = ["None"] + list(filtered_character_names.keys()) + ["SN0W_CHARACTER_SELECTOR"]
|
||||
return {
|
||||
"required": {
|
||||
"character": (character_names,),
|
||||
@@ -129,7 +65,7 @@ class CharacterSelectNode:
|
||||
elif character == "None" or character == "SN0W_CHARACTER_SELECTOR":
|
||||
return ("", "")
|
||||
else:
|
||||
char_item = self.final_character_dict.get(character)
|
||||
char_item = self.character_dict.get(character)
|
||||
|
||||
self.last_character = char_item
|
||||
character_name = ""
|
||||
@@ -152,8 +88,8 @@ class CharacterSelectNode:
|
||||
# Fetching the exclusion settings
|
||||
exclude_characters = ConfigReader.get_setting("sn0w.CharacterSettings.ExcludedRandomCharacters", False)
|
||||
if exclude_characters is False:
|
||||
random_character_name = random.choice(list(self.final_character_dict.keys()))
|
||||
char_item = self.final_character_dict[random_character_name]
|
||||
random_character_name = random.choice(list(self.character_dict.keys()))
|
||||
char_item = self.character_dict[random_character_name]
|
||||
self.logger.log("Random Character: " + str(char_item["name"]), "INFORMATIONAL")
|
||||
return char_item
|
||||
|
||||
@@ -163,9 +99,7 @@ class CharacterSelectNode:
|
||||
return ""
|
||||
|
||||
# Filter the characters by excluding the ones in the exclusion list
|
||||
filtered_characters = {
|
||||
name: char for name, char in self.final_character_dict.items() if name in favourite_characters
|
||||
}
|
||||
filtered_characters = {name: char for name, char in self.character_dict.items() if name in favourite_characters}
|
||||
|
||||
# Choosing a random character from the filtered list
|
||||
if filtered_characters:
|
||||
|
||||
@@ -45,7 +45,9 @@ class GenerateCharactersNode:
|
||||
if series:
|
||||
series_list_with_counts.append(f"{series} ({count})")
|
||||
|
||||
cls.series_list = ["All"] + series_list_with_counts
|
||||
# Calculate total count for "All" option
|
||||
total_count = len(cls.character_dict)
|
||||
cls.series_list = [f"All ({total_count})"] + series_list_with_counts
|
||||
return cls.character_dict
|
||||
|
||||
@classmethod
|
||||
@@ -129,14 +131,14 @@ class GenerateCharactersNode:
|
||||
existing_filenames = self.load_existing_images()
|
||||
|
||||
orig_positive = kwargs.get("positive", "")
|
||||
match = re.match(r"^(.*?)\s*\(\d+\)$", series_filter)
|
||||
if match:
|
||||
selected_series = match.group(1).strip()
|
||||
else:
|
||||
selected_series = series_filter
|
||||
|
||||
# Filter characters by series if not "All"
|
||||
if series_filter != "All":
|
||||
match = re.match(r"^(.*?)\s*\(\d+\)$", series_filter)
|
||||
if match:
|
||||
selected_series = match.group(1).strip()
|
||||
else:
|
||||
selected_series = series_filter
|
||||
if selected_series != "All":
|
||||
character_dict = {
|
||||
name: char for name, char in character_dict.items() if char.get("series", "") == selected_series
|
||||
}
|
||||
|
||||
+15
-13
@@ -123,20 +123,22 @@ app.registerExtension({
|
||||
|
||||
const hierarchicalValues = [createMenuItem("None")];
|
||||
|
||||
Object.keys(seriesGroups).forEach((seriesName) => {
|
||||
const submenuOptions = seriesGroups[seriesName].map((characterName) => ({
|
||||
content: characterName,
|
||||
callback: newCallback,
|
||||
toString: () => characterName,
|
||||
}));
|
||||
|
||||
hierarchicalValues.push(
|
||||
createMenuItem(seriesName, true, {
|
||||
options: submenuOptions,
|
||||
Object.keys(seriesGroups)
|
||||
.sort()
|
||||
.forEach((seriesName) => {
|
||||
const submenuOptions = seriesGroups[seriesName].map((characterName) => ({
|
||||
content: characterName,
|
||||
callback: newCallback,
|
||||
})
|
||||
);
|
||||
});
|
||||
toString: () => characterName,
|
||||
}));
|
||||
|
||||
hierarchicalValues.push(
|
||||
createMenuItem(seriesName, true, {
|
||||
options: submenuOptions,
|
||||
callback: newCallback,
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
options.callback = undefined;
|
||||
existingContextMenu.call(this, hierarchicalValues, options);
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
import { SettingUtils } from './sn0w.js';
|
||||
import { app } from '../../../scripts/app.js';
|
||||
import { api } from '../../../scripts/api.js';
|
||||
|
||||
const settingUtils = new SettingUtils();
|
||||
|
||||
function updateSorting(graphCanvas) {
|
||||
api.fetchApi(`${SettingUtils.API_PREFIX}/update_characters`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
});
|
||||
setTimeout(() => {
|
||||
settingUtils.refreshComboInSingleNode(graphCanvas, 'Character Selector');
|
||||
}, 50);
|
||||
}
|
||||
|
||||
const id = 'sn0w.CharacterSettings.SortCharactersBy';
|
||||
const settingDefinition = {
|
||||
id,
|
||||
name: 'Sort Characters By',
|
||||
defaultValue: 'alphabetical',
|
||||
options: [
|
||||
{ text: 'Alphabetical', value: 'alphabetical' },
|
||||
{ text: 'Series', value: 'series' },
|
||||
],
|
||||
type: 'combo',
|
||||
onChange: () => updateSorting(app),
|
||||
};
|
||||
|
||||
let setting;
|
||||
|
||||
const extension = {
|
||||
name: id,
|
||||
init() {
|
||||
setting = app.ui.settings.addSetting(settingDefinition);
|
||||
},
|
||||
};
|
||||
|
||||
app.registerExtension(extension);
|
||||
Reference in New Issue
Block a user