46
46
import settings as settings_file
47
47
48
48
# Version of the script
49
- script_version = (2 , 5 , 21 )
49
+ script_version = (2 , 5 , 22 )
50
50
script_version_text = "v{}.{}.{}" .format (* script_version )
51
51
52
52
# Paths = existing library
@@ -1969,7 +1969,7 @@ def remove_brackets(string):
1969
1969
1970
1970
# Pre-compile the volume pattern
1971
1971
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)" % (
1973
1973
volume_regex_keywords ,
1974
1974
volume_regex_keywords ,
1975
1975
volume_regex_keywords ,
@@ -2909,7 +2909,7 @@ def contains_non_numeric(input_string):
2909
2909
2910
2910
# Pre-compiled volume-keyword search for get_release_number()
2911
2911
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 ,
2913
2913
re .IGNORECASE ,
2914
2914
)
2915
2915
@@ -5056,6 +5056,52 @@ def array_to_string(array, separator=", "):
5056
5056
return str (array )
5057
5057
5058
5058
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
+
5059
5105
class Result :
5060
5106
def __init__ (self , dir , score ):
5061
5107
self .dir = dir
@@ -6846,6 +6892,16 @@ def get_matching_volumes(file, img_volumes):
6846
6892
)
6847
6893
group_messages .remove (message )
6848
6894
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 )
6849
6905
volume_numbers_mts = []
6850
6906
volume_names_mts = []
6851
6907
first_item = group_messages [0 ]
@@ -6856,14 +6912,11 @@ def get_matching_volumes(file, img_volumes):
6856
6912
for message in group_messages :
6857
6913
if message .fields and len (message .fields ) >= 2 :
6858
6914
# remove ``` from the start and end of the value
6859
- volume_numbers_mts .append (
6860
- message .fields [0 ]["value" ].replace ("```" , "" )
6861
- )
6862
6915
volume_names_mts .append (
6863
6916
message .fields [1 ]["value" ].replace ("```" , "" )
6864
6917
)
6865
6918
6866
- if volume_numbers_mts and volume_names_mts and series_name :
6919
+ if abbreviated_numbers_str and volume_names_mts and series_name :
6867
6920
new_fields = [
6868
6921
{
6869
6922
"name" : "Series Name" ,
@@ -6872,7 +6925,7 @@ def get_matching_volumes(file, img_volumes):
6872
6925
},
6873
6926
{
6874
6927
"name" : title ,
6875
- "value" : "```" + ", " . join ( volume_numbers_mts ) + "```" ,
6928
+ "value" : "```" + abbreviated_numbers_str + "```" ,
6876
6929
"inline" : False ,
6877
6930
},
6878
6931
{
0 commit comments