Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ameba: Miscellaneous fixes #4807

Merged
merged 4 commits into from
Aug 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/invidious/helpers/serialized_yt_data.cr
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ struct SearchVideo
json.field "lengthSeconds", self.length_seconds
json.field "liveNow", self.live_now
json.field "premium", self.premium
json.field "isUpcoming", self.is_upcoming
json.field "isUpcoming", self.upcoming?

if self.premiere_timestamp
json.field "premiereTimestamp", self.premiere_timestamp.try &.to_unix
Expand All @@ -109,7 +109,7 @@ struct SearchVideo
to_json(nil, json)
end

def is_upcoming
def upcoming?
premiere_timestamp ? true : false
end
end
Expand Down
4 changes: 2 additions & 2 deletions src/invidious/jsonify/api_v1/video_json.cr
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ module Invidious::JSONify::APIv1
json.field "isListed", video.is_listed
json.field "liveNow", video.live_now
json.field "isPostLiveDvr", video.post_live_dvr
json.field "isUpcoming", video.is_upcoming
json.field "isUpcoming", video.upcoming?

if video.premiere_timestamp
json.field "premiereTimestamp", video.premiere_timestamp.try &.to_unix
Expand Down Expand Up @@ -109,7 +109,7 @@ module Invidious::JSONify::APIv1
# On livestreams, it's not present, so always fall back to the
# current unix timestamp (up to mS precision) for compatibility.
last_modified = fmt["lastModified"]?
last_modified ||= "#{Time.utc.to_unix_ms.to_s}000"
last_modified ||= "#{Time.utc.to_unix_ms}000"
json.field "lmt", last_modified

json.field "projectionType", fmt["projectionType"]
Expand Down
4 changes: 2 additions & 2 deletions src/invidious/routes/api/v1/videos.cr
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ module Invidious::Routes::API::V1::Videos
else
caption_xml = XML.parse(caption_xml)

webvtt = WebVTT.build(settings_field) do |webvtt|
webvtt = WebVTT.build(settings_field) do |builder|
caption_nodes = caption_xml.xpath_nodes("//transcript/text")
caption_nodes.each_with_index do |node, i|
start_time = node["start"].to_f.seconds
Expand All @@ -136,7 +136,7 @@ module Invidious::Routes::API::V1::Videos
text = "<v #{md["name"]}>#{md["text"]}</v>"
end

webvtt.cue(start_time, end_time, text)
builder.cue(start_time, end_time, text)
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion src/invidious/routes/video_playback.cr
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ module Invidious::Routes::VideoPlayback
end

# TODO: Record bytes written so we can restart after a chunk fails
while true
loop do
syeopite marked this conversation as resolved.
Show resolved Hide resolved
if !range_end && content_length
range_end = content_length
end
Expand Down
6 changes: 3 additions & 3 deletions src/invidious/user/imports.cr
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ struct Invidious::User
playlists.each do |item|
title = item["title"]?.try &.as_s?.try &.delete("<>")
description = item["description"]?.try &.as_s?.try &.delete("\r")
privacy = item["privacy"]?.try &.as_s?.try { |privacy| PlaylistPrivacy.parse? privacy }
privacy = item["privacy"]?.try &.as_s?.try { |raw_pl_privacy_state| PlaylistPrivacy.parse? raw_pl_privacy_state }

next if !title
next if !description
Expand Down Expand Up @@ -161,7 +161,7 @@ struct Invidious::User
# Youtube
# -------------------

private def is_opml?(mimetype : String, extension : String)
private def opml?(mimetype : String, extension : String)
opml_mimetypes = [
"application/xml",
"text/xml",
Expand All @@ -179,7 +179,7 @@ struct Invidious::User
def from_youtube(user : User, body : String, filename : String, type : String) : Bool
extension = filename.split(".").last

if is_opml?(type, extension)
if opml?(type, extension)
subscriptions = XML.parse(body)
user.subscriptions += subscriptions.xpath_nodes(%q(//outline[@type="rss"])).map do |channel|
channel["xmlUrl"].match!(/UC[a-zA-Z0-9_-]{22}/)[0]
Expand Down
20 changes: 18 additions & 2 deletions src/invidious/videos.cr
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ struct Video
info["genreUcid"].try &.as_s? ? "/channel/#{info["genreUcid"]}" : nil
end

def is_vr : Bool?
def vr? : Bool?
return {"EQUIRECTANGULAR", "MESH"}.includes? self.projection_type
end

Expand Down Expand Up @@ -361,6 +361,21 @@ struct Video
{% if flag?(:debug_macros) %} {{debug}} {% end %}
end

# Macro to generate ? and = accessor methods for attributes in `info`
private macro predicate_bool(method_name, name)
# Return {{name.stringify}} from `info`
def {{method_name.id.underscore}}? : Bool
return info[{{name.stringify}}]?.try &.as_bool || false
end

# Update {{name.stringify}} into `info`
def {{method_name.id.underscore}}=(value : Bool)
info[{{name.stringify}}] = JSON::Any.new(value)
end

{% if flag?(:debug_macros) %} {{debug}} {% end %}
end

# Method definitions, using the macros above

getset_string author
Expand All @@ -382,11 +397,12 @@ struct Video
getset_i64 likes
getset_i64 views

# TODO: Make predicate_bool the default as to adhere to Crystal conventions
getset_bool allowRatings
getset_bool authorVerified
getset_bool isFamilyFriendly
getset_bool isListed
getset_bool isUpcoming
predicate_bool upcoming, isUpcoming
syeopite marked this conversation as resolved.
Show resolved Hide resolved
end

def get_video(id, refresh = true, region = nil, force_refresh = false)
Expand Down
4 changes: 2 additions & 2 deletions src/invidious/videos/transcript.cr
Original file line number Diff line number Diff line change
Expand Up @@ -110,13 +110,13 @@ module Invidious::Videos
"Language" => @language_code,
}

vtt = WebVTT.build(settings_field) do |vtt|
vtt = WebVTT.build(settings_field) do |builder|
@lines.each do |line|
# Section headers are excluded from the VTT conversion as to
# match the regular captions returned from YouTube as much as possible
next if line.is_a? HeadingLine

vtt.cue(line.start_ms, line.end_ms, line.line)
builder.cue(line.start_ms, line.end_ms, line.line)
end
end

Expand Down
2 changes: 1 addition & 1 deletion src/invidious/views/watch.ecr
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ we're going to need to do it here in order to allow for translations.
"params" => params,
"preferences" => preferences,
"premiere_timestamp" => video.premiere_timestamp.try &.to_unix,
"vr" => video.is_vr,
"vr" => video.vr?,
"projection_type" => video.projection_type,
"local_disabled" => CONFIG.disabled?("local"),
"support_reddit" => true
Expand Down
Loading