Skip to content

Commit 1d62022

Browse files
authored
v2.5.22
1 parent 748bca5 commit 1d62022

File tree

1 file changed

+61
-8
lines changed

1 file changed

+61
-8
lines changed

Diff for: komga_cover_extractor.py

+61-8
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
import settings as settings_file
4747

4848
# Version of the script
49-
script_version = (2, 5, 21)
49+
script_version = (2, 5, 22)
5050
script_version_text = "v{}.{}.{}".format(*script_version)
5151

5252
# Paths = existing library
@@ -1969,7 +1969,7 @@ def remove_brackets(string):
19691969

19701970
# Pre-compile the volume pattern
19711971
volume_regex = re.compile(
1972-
r"((\s?(\s-\s|)(Part|)+({})(\.|)([-_. ]|)([0-9]+)\b)|\s?(\s-\s|)(Part|)({})(\.|)([-_. ]|)([0-9]+)([-_.])(\s-\s|)(Part|)({})([0-9]+)\s|\s?(\s-\s|)(Part|)({})(\.|)([-_. ]|)([0-9]+)([-_.])(\s-\s|)(Part|)({})([0-9]+)\s)".format(
1972+
r"((\s?(\s-\s|)(Part|)+(?<![\[\(\{])(%s)(\.|)([-_. ]|)([0-9]+)\b)|\s?(\s-\s|)(Part|)(%s)(\.|)([-_. ]|)([0-9]+)([-_.])(\s-\s|)(Part|)(%s)([0-9]+)\s|\s?(\s-\s|)(Part|)(%s)(\.|)([-_. ]|)([0-9]+)([-_.])(\s-\s|)(Part|)(%s)([0-9]+)\s)" % (
19731973
volume_regex_keywords,
19741974
volume_regex_keywords,
19751975
volume_regex_keywords,
@@ -2909,7 +2909,7 @@ def contains_non_numeric(input_string):
29092909

29102910
# Pre-compiled volume-keyword search for get_release_number()
29112911
volume_number_search_pattern = re.compile(
2912-
r"\b({})((\.)|)(\s+)?([0-9]+)(([-_.])([0-9]+)|)+\b".format(volume_regex_keywords),
2912+
r"\b(?<![\[\(\{])(%s)((\.)|)(\s+)?([0-9]+)(([-_.])([0-9]+)|)+\b" % volume_regex_keywords,
29132913
re.IGNORECASE,
29142914
)
29152915

@@ -5056,6 +5056,52 @@ def array_to_string(array, separator=", "):
50565056
return str(array)
50575057

50585058

5059+
# Converts an array to a string seperated array with subsequent whole numbers abbreviated.
5060+
def abbreviate_numbers(numbers):
5061+
result = []
5062+
temp_range = []
5063+
5064+
for i in range(len(numbers)):
5065+
# Check if the current number is an integer and if it's part of a sequential range
5066+
if i == 0 or (
5067+
isinstance(numbers[i], int)
5068+
and isinstance(numbers[i - 1], int)
5069+
and numbers[i] == numbers[i - 1] + 1
5070+
):
5071+
temp_range.append(numbers[i])
5072+
else:
5073+
# Handle ranges and individual numbers
5074+
if len(temp_range) > 1:
5075+
result.append(f"{temp_range[0]}-{temp_range[-1]}")
5076+
else:
5077+
result.extend(map(str, temp_range))
5078+
temp_range = [numbers[i]]
5079+
5080+
# Handle the last part
5081+
if len(temp_range) > 1:
5082+
result.append(f"{temp_range[0]}-{temp_range[-1]}")
5083+
else:
5084+
result.extend(map(str, temp_range))
5085+
5086+
return ", ".join(result)
5087+
5088+
5089+
# Fills in missing whole nubmers between
5090+
# the lowest and the highest number.
5091+
def complete_num_array(arr):
5092+
if not arr: # Handle empty arrays
5093+
return arr
5094+
5095+
# Find the minimum and maximum numbers in the array
5096+
min_num = int(min(arr))
5097+
max_num = int(max(arr))
5098+
5099+
# Generate a complete range of whole numbers between min and max
5100+
complete_arr = list(range(min_num, max_num + 1))
5101+
5102+
return complete_arr
5103+
5104+
50595105
class Result:
50605106
def __init__(self, dir, score):
50615107
self.dir = dir
@@ -6846,6 +6892,16 @@ def get_matching_volumes(file, img_volumes):
68466892
)
68476893
group_messages.remove(message)
68486894
else:
6895+
group_numbers = []
6896+
for item in group_messages:
6897+
if isinstance(item.number, list):
6898+
filled_num_array = complete_num_array(item.number)
6899+
for num in filled_num_array:
6900+
group_numbers.append(num)
6901+
else:
6902+
group_numbers.append(item.number)
6903+
6904+
abbreviated_numbers_str = abbreviate_numbers(group_numbers)
68496905
volume_numbers_mts = []
68506906
volume_names_mts = []
68516907
first_item = group_messages[0]
@@ -6856,14 +6912,11 @@ def get_matching_volumes(file, img_volumes):
68566912
for message in group_messages:
68576913
if message.fields and len(message.fields) >= 2:
68586914
# remove ``` from the start and end of the value
6859-
volume_numbers_mts.append(
6860-
message.fields[0]["value"].replace("```", "")
6861-
)
68626915
volume_names_mts.append(
68636916
message.fields[1]["value"].replace("```", "")
68646917
)
68656918

6866-
if volume_numbers_mts and volume_names_mts and series_name:
6919+
if abbreviated_numbers_str and volume_names_mts and series_name:
68676920
new_fields = [
68686921
{
68696922
"name": "Series Name",
@@ -6872,7 +6925,7 @@ def get_matching_volumes(file, img_volumes):
68726925
},
68736926
{
68746927
"name": title,
6875-
"value": "```" + ", ".join(volume_numbers_mts) + "```",
6928+
"value": "```" + abbreviated_numbers_str + "```",
68766929
"inline": False,
68776930
},
68786931
{

0 commit comments

Comments
 (0)