mirror of
				https://gitea.invidious.io/iv-org/invidious
				synced 2025-06-05 23:29:12 +02:00 
			
		
		
		
	Merge pull request #2727 from SamantazFox/add-shorts-support
Add support for shorts
This commit is contained in:
		| @@ -21,10 +21,17 @@ def elapsed_text(elapsed) | |||||||
| end | end | ||||||
|  |  | ||||||
| def decode_length_seconds(string) | def decode_length_seconds(string) | ||||||
|   length_seconds = string.gsub(/[^0-9:]/, "").split(":").map &.to_i |   length_seconds = string.gsub(/[^0-9:]/, "") | ||||||
|  |   return 0_i32 if length_seconds.empty? | ||||||
|  |  | ||||||
|  |   length_seconds = length_seconds.split(":").map { |x| x.to_i? || 0 } | ||||||
|   length_seconds = [0] * (3 - length_seconds.size) + length_seconds |   length_seconds = [0] * (3 - length_seconds.size) + length_seconds | ||||||
|   length_seconds = Time::Span.new hours: length_seconds[0], minutes: length_seconds[1], seconds: length_seconds[2] |  | ||||||
|   length_seconds = length_seconds.total_seconds.to_i |   length_seconds = Time::Span.new( | ||||||
|  |     hours: length_seconds[0], | ||||||
|  |     minutes: length_seconds[1], | ||||||
|  |     seconds: length_seconds[2] | ||||||
|  |   ).total_seconds.to_i32 | ||||||
|  |  | ||||||
|   return length_seconds |   return length_seconds | ||||||
| end | end | ||||||
|   | |||||||
| @@ -49,6 +49,9 @@ private module Parsers | |||||||
|       if author_info = item_contents.dig?("ownerText", "runs", 0) |       if author_info = item_contents.dig?("ownerText", "runs", 0) | ||||||
|         author = author_info["text"].as_s |         author = author_info["text"].as_s | ||||||
|         author_id = HelperExtractors.get_browse_id(author_info) |         author_id = HelperExtractors.get_browse_id(author_info) | ||||||
|  |       elsif author_info = item_contents.dig?("shortBylineText", "runs", 0) | ||||||
|  |         author = author_info["text"].as_s | ||||||
|  |         author_id = HelperExtractors.get_browse_id(author_info) | ||||||
|       else |       else | ||||||
|         author = author_fallback.name |         author = author_fallback.name | ||||||
|         author_id = author_fallback.id |         author_id = author_fallback.id | ||||||
| @@ -68,18 +71,25 @@ private module Parsers | |||||||
|       view_count = item_contents.dig?("viewCountText", "simpleText").try &.as_s.gsub(/\D+/, "").to_i64? || 0_i64 |       view_count = item_contents.dig?("viewCountText", "simpleText").try &.as_s.gsub(/\D+/, "").to_i64? || 0_i64 | ||||||
|       description_html = item_contents["descriptionSnippet"]?.try { |t| parse_content(t) } || "" |       description_html = item_contents["descriptionSnippet"]?.try { |t| parse_content(t) } || "" | ||||||
|  |  | ||||||
|       # The length information *should* only always exist in "lengthText". However, the legacy Invidious code |       # The length information generally exist in "lengthText". However, the info can sometimes | ||||||
|       # extracts from "thumbnailOverlays" when it doesn't. More testing is needed to see if this is |       # be retrieved from "thumbnailOverlays" (e.g when the video is a "shorts" one). | ||||||
|       # actually needed |  | ||||||
|       if length_container = item_contents["lengthText"]? |       if length_container = item_contents["lengthText"]? | ||||||
|         length_seconds = decode_length_seconds(length_container["simpleText"].as_s) |         length_seconds = decode_length_seconds(length_container["simpleText"].as_s) | ||||||
|       elsif length_container = item_contents["thumbnailOverlays"]?.try &.as_a.find(&.["thumbnailOverlayTimeStatusRenderer"]?) |       elsif length_container = item_contents["thumbnailOverlays"]?.try &.as_a.find(&.["thumbnailOverlayTimeStatusRenderer"]?) | ||||||
|         # This needs to only go down the `simpleText` path (if possible). If more situations came up that requires |         # This needs to only go down the `simpleText` path (if possible). If more situations came up that requires | ||||||
|         # a specific pathway then we should add an argument to extract_text that'll make this possible |         # a specific pathway then we should add an argument to extract_text that'll make this possible | ||||||
|         length_seconds = length_container.dig?("thumbnailOverlayTimeStatusRenderer", "text", "simpleText") |         length_text = length_container.dig?("thumbnailOverlayTimeStatusRenderer", "text", "simpleText") | ||||||
|  |  | ||||||
|         if length_seconds |         if length_text | ||||||
|           length_seconds = decode_length_seconds(length_seconds.as_s) |           length_text = length_text.as_s | ||||||
|  |  | ||||||
|  |           if length_text == "SHORTS" | ||||||
|  |             # Approximate length to one minute, as "shorts" generally don't exceed that length. | ||||||
|  |             # TODO: Add some sort of metadata for the type of video (normal, live, premiere, shorts) | ||||||
|  |             length_seconds = 60_i32 | ||||||
|  |           else | ||||||
|  |             length_seconds = decode_length_seconds(length_text) | ||||||
|  |           end | ||||||
|         else |         else | ||||||
|           length_seconds = 0 |           length_seconds = 0 | ||||||
|         end |         end | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user