mirror of
https://gitea.invidious.io/iv-org/invidious-copy-2023-06-08.git
synced 2024-08-15 00:53:38 +00:00
Merge branch 'iv-org:master' into CICD
This commit is contained in:
commit
0428194598
4 changed files with 66 additions and 15 deletions
46
spec/invidious/utils_spec.cr
Normal file
46
spec/invidious/utils_spec.cr
Normal file
|
@ -0,0 +1,46 @@
|
|||
require "../spec_helper"
|
||||
|
||||
Spectator.describe "Utils" do
|
||||
describe "decode_date" do
|
||||
it "parses short dates (en-US)" do
|
||||
expect(decode_date("1s ago")).to be_close(Time.utc - 1.second, 500.milliseconds)
|
||||
expect(decode_date("2min ago")).to be_close(Time.utc - 2.minutes, 500.milliseconds)
|
||||
expect(decode_date("3h ago")).to be_close(Time.utc - 3.hours, 500.milliseconds)
|
||||
expect(decode_date("4d ago")).to be_close(Time.utc - 4.days, 500.milliseconds)
|
||||
expect(decode_date("5w ago")).to be_close(Time.utc - 5.weeks, 500.milliseconds)
|
||||
expect(decode_date("6mo ago")).to be_close(Time.utc - 6.months, 500.milliseconds)
|
||||
expect(decode_date("7y ago")).to be_close(Time.utc - 7.years, 500.milliseconds)
|
||||
end
|
||||
|
||||
it "parses short dates (en-GB)" do
|
||||
expect(decode_date("55s ago")).to be_close(Time.utc - 55.seconds, 500.milliseconds)
|
||||
expect(decode_date("44min ago")).to be_close(Time.utc - 44.minutes, 500.milliseconds)
|
||||
expect(decode_date("22hr ago")).to be_close(Time.utc - 22.hours, 500.milliseconds)
|
||||
expect(decode_date("1day ago")).to be_close(Time.utc - 1.day, 500.milliseconds)
|
||||
expect(decode_date("2days ago")).to be_close(Time.utc - 2.days, 500.milliseconds)
|
||||
expect(decode_date("3wk ago")).to be_close(Time.utc - 3.weeks, 500.milliseconds)
|
||||
expect(decode_date("11mo ago")).to be_close(Time.utc - 11.months, 500.milliseconds)
|
||||
expect(decode_date("11yr ago")).to be_close(Time.utc - 11.years, 500.milliseconds)
|
||||
end
|
||||
|
||||
it "parses long forms (singular)" do
|
||||
expect(decode_date("1 second ago")).to be_close(Time.utc - 1.second, 500.milliseconds)
|
||||
expect(decode_date("1 minute ago")).to be_close(Time.utc - 1.minute, 500.milliseconds)
|
||||
expect(decode_date("1 hour ago")).to be_close(Time.utc - 1.hour, 500.milliseconds)
|
||||
expect(decode_date("1 day ago")).to be_close(Time.utc - 1.day, 500.milliseconds)
|
||||
expect(decode_date("1 week ago")).to be_close(Time.utc - 1.week, 500.milliseconds)
|
||||
expect(decode_date("1 month ago")).to be_close(Time.utc - 1.month, 500.milliseconds)
|
||||
expect(decode_date("1 year ago")).to be_close(Time.utc - 1.year, 500.milliseconds)
|
||||
end
|
||||
|
||||
it "parses long forms (plural)" do
|
||||
expect(decode_date("5 seconds ago")).to be_close(Time.utc - 5.seconds, 500.milliseconds)
|
||||
expect(decode_date("17 minutes ago")).to be_close(Time.utc - 17.minutes, 500.milliseconds)
|
||||
expect(decode_date("23 hours ago")).to be_close(Time.utc - 23.hours, 500.milliseconds)
|
||||
expect(decode_date("3 days ago")).to be_close(Time.utc - 3.days, 500.milliseconds)
|
||||
expect(decode_date("2 weeks ago")).to be_close(Time.utc - 2.weeks, 500.milliseconds)
|
||||
expect(decode_date("9 months ago")).to be_close(Time.utc - 9.months, 500.milliseconds)
|
||||
expect(decode_date("8 years ago")).to be_close(Time.utc - 8.years, 500.milliseconds)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -111,24 +111,27 @@ def decode_date(string : String)
|
|||
else nil # Continue
|
||||
end
|
||||
|
||||
# String matches format "20 hours ago", "4 months ago"...
|
||||
date = string.split(" ")[-3, 3]
|
||||
delta = date[0].to_i
|
||||
# String matches format "20 hours ago", "4 months ago", "20s ago", "15min ago"...
|
||||
match = string.match(/(?<count>\d+) ?(?<span>[smhdwy]\w*) ago/)
|
||||
|
||||
case date[1]
|
||||
when .includes? "second"
|
||||
raise "Could not parse #{string}" if match.nil?
|
||||
|
||||
delta = match["count"].to_i
|
||||
|
||||
case match["span"]
|
||||
when .starts_with? "s" # second(s)
|
||||
delta = delta.seconds
|
||||
when .includes? "minute"
|
||||
when .starts_with? "mi" # minute(s)
|
||||
delta = delta.minutes
|
||||
when .includes? "hour"
|
||||
when .starts_with? "h" # hour(s)
|
||||
delta = delta.hours
|
||||
when .includes? "day"
|
||||
when .starts_with? "d" # day(s)
|
||||
delta = delta.days
|
||||
when .includes? "week"
|
||||
when .starts_with? "w" # week(s)
|
||||
delta = delta.weeks
|
||||
when .includes? "month"
|
||||
when .starts_with? "mo" # month(s)
|
||||
delta = delta.months
|
||||
when .includes? "year"
|
||||
when .starts_with? "y" # year(s)
|
||||
delta = delta.years
|
||||
else
|
||||
raise "Could not parse #{string}"
|
||||
|
|
|
@ -410,8 +410,8 @@ module Invidious::Routes::Playlists
|
|||
return error_template(500, ex)
|
||||
end
|
||||
|
||||
page_count = (playlist.video_count / 100).to_i
|
||||
page_count += 1 if (playlist.video_count % 100) > 0
|
||||
page_count = (playlist.video_count / 200).to_i
|
||||
page_count += 1 if (playlist.video_count % 200) > 0
|
||||
|
||||
if page > page_count
|
||||
return env.redirect "/playlist?list=#{plid}&page=#{page_count}"
|
||||
|
@ -422,7 +422,7 @@ module Invidious::Routes::Playlists
|
|||
end
|
||||
|
||||
begin
|
||||
videos = get_playlist_videos(playlist, offset: (page - 1) * 100)
|
||||
videos = get_playlist_videos(playlist, offset: (page - 1) * 200)
|
||||
rescue ex
|
||||
return error_template(500, "Error encountered while retrieving playlist videos.<br>#{ex.message}")
|
||||
end
|
||||
|
|
|
@ -381,7 +381,7 @@ private module Parsers
|
|||
# Parses an InnerTube itemSectionRenderer into a SearchVideo.
|
||||
# Returns nil when the given object isn't a ItemSectionRenderer
|
||||
#
|
||||
# A itemSectionRenderer seems to be a simple wrapper for a videoRenderer, used
|
||||
# A itemSectionRenderer seems to be a simple wrapper for a videoRenderer or a playlistRenderer, used
|
||||
# by the result page for channel searches. It is located inside a continuationItems
|
||||
# container.It is very similar to RichItemRendererParser
|
||||
#
|
||||
|
@ -394,6 +394,8 @@ private module Parsers
|
|||
|
||||
private def self.parse(item_contents, author_fallback)
|
||||
child = VideoRendererParser.process(item_contents, author_fallback)
|
||||
child ||= PlaylistRendererParser.process(item_contents, author_fallback)
|
||||
|
||||
return child
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue