summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSamantaz Fox <coding@samantaz.fr>2022-11-20 22:52:33 +0100
committerSamantaz Fox <coding@samantaz.fr>2022-11-20 23:28:21 +0100
commitafc0ec3c30d82b5cbbb38b09d3e57cdab2be5700 (patch)
tree1b7fb0ce8bda9d4d9c1a4ffdbf11d9e9bd0a5824 /src
parent516efd2df3f7d242c2d1df416053b4991a554116 (diff)
downloadinvidious-afc0ec3c30d82b5cbbb38b09d3e57cdab2be5700.tar.gz
invidious-afc0ec3c30d82b5cbbb38b09d3e57cdab2be5700.tar.bz2
invidious-afc0ec3c30d82b5cbbb38b09d3e57cdab2be5700.zip
search: Fix short text parsing
Diffstat (limited to 'src')
-rw-r--r--src/invidious/channels/about.cr5
-rw-r--r--src/invidious/helpers/utils.cr24
-rw-r--r--src/invidious/yt_backend/extractors.cr2
3 files changed, 15 insertions, 16 deletions
diff --git a/src/invidious/channels/about.cr b/src/invidious/channels/about.cr
index f60ee7af..4c442959 100644
--- a/src/invidious/channels/about.cr
+++ b/src/invidious/channels/about.cr
@@ -130,8 +130,9 @@ def get_about_info(ucid, locale) : AboutChannel
tabs = tabs_json.reject { |node| node["tabRenderer"]?.nil? }.map(&.["tabRenderer"]["title"].as_s.downcase)
end
- sub_count = initdata["header"]["c4TabbedHeaderRenderer"]?.try &.["subscriberCountText"]?.try &.["simpleText"]?.try &.as_s?
- .try { |text| short_text_to_number(text.split(" ")[0]) } || 0
+ sub_count = initdata
+ .dig?("header", "c4TabbedHeaderRenderer", "subscriberCountText", "simpleText").try &.as_s?
+ .try { |text| short_text_to_number(text.split(" ")[0]).to_i32 } || 0
AboutChannel.new(
ucid: ucid,
diff --git a/src/invidious/helpers/utils.cr b/src/invidious/helpers/utils.cr
index 8ae5034a..ed0cca38 100644
--- a/src/invidious/helpers/utils.cr
+++ b/src/invidious/helpers/utils.cr
@@ -161,21 +161,19 @@ def number_with_separator(number)
number.to_s.reverse.gsub(/(\d{3})(?=\d)/, "\\1,").reverse
end
-def short_text_to_number(short_text : String) : Int32
- case short_text
- when .ends_with? "M"
- number = short_text.rstrip(" mM").to_f
- number *= 1000000
- when .ends_with? "K"
- number = short_text.rstrip(" kK").to_f
- number *= 1000
- else
- number = short_text.rstrip(" ")
+def short_text_to_number(short_text : String) : Int64
+ matches = /(?<number>\d+(\.\d+)?)\s?(?<suffix>[mMkKbB])?/.match(short_text)
+ number = matches.try &.["number"].to_f || 0.0
+
+ case matches.try &.["suffix"].downcase
+ when "k" then number *= 1_000
+ when "m" then number *= 1_000_000
+ when "b" then number *= 1_000_000_000
end
- number = number.to_i
-
- return number
+ return number.to_i64
+rescue ex
+ return 0_i64
end
def number_to_short_text(number)
diff --git a/src/invidious/yt_backend/extractors.cr b/src/invidious/yt_backend/extractors.cr
index 8112930d..edc722cf 100644
--- a/src/invidious/yt_backend/extractors.cr
+++ b/src/invidious/yt_backend/extractors.cr
@@ -170,7 +170,7 @@ private module Parsers
# Always simpleText
# TODO change default value to nil
subscriber_count = item_contents.dig?("subscriberCountText", "simpleText")
- .try { |s| short_text_to_number(s.as_s.split(" ")[0]) } || 0
+ .try { |s| short_text_to_number(s.as_s.split(" ")[0]).to_i32 } || 0
# Auto-generated channels doesn't have videoCountText
# Taken from: https://github.com/iv-org/invidious/pull/2228#discussion_r717620922