Move ytimg pool logic to Invidious::ConnectionPool

This commit is contained in:
syeopite 2024-11-11 16:04:30 -08:00
parent b044727cca
commit c026a7b1f6
No known key found for this signature in database
GPG Key ID: A73C186DA3955A1A
3 changed files with 27 additions and 27 deletions

View File

@ -1,7 +1,3 @@
# Mapping of subdomain => Invidious::ConnectionPool::Pool
# This is needed as we may need to access arbitrary subdomains of ytimg
private YTIMG_POOLS = {} of String => Invidious::ConnectionPool::Pool
def add_yt_headers(request) def add_yt_headers(request)
request.headers.delete("User-Agent") if request.headers["User-Agent"] == "Crystal" request.headers.delete("User-Agent") if request.headers["User-Agent"] == "Crystal"
request.headers["User-Agent"] ||= "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36" request.headers["User-Agent"] ||= "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
@ -55,22 +51,3 @@ def make_configured_http_proxy_client
password: config_proxy.password, password: config_proxy.password,
) )
end end
# Fetches a HTTP pool for the specified subdomain of ytimg.com
#
# Creates a new one when the specified pool for the subdomain does not exist
def get_ytimg_pool(subdomain)
if pool = YTIMG_POOLS[subdomain]?
return pool
else
LOGGER.info("ytimg_pool: Creating a new HTTP pool for \"https://#{subdomain}.ytimg.com\"")
pool = Invidious::ConnectionPool::Pool.new(
URI.parse("https://#{subdomain}.ytimg.com"),
max_capacity: CONFIG.pool_size,
idle_capacity: CONFIG.idle_pool_size
)
YTIMG_POOLS[subdomain] = pool
return pool
end
end

View File

@ -63,4 +63,27 @@ module Invidious::ConnectionPool
class Error < Exception class Error < Exception
end end
# Mapping of subdomain => Invidious::ConnectionPool::Pool
# This is needed as we may need to access arbitrary subdomains of ytimg
private YTIMG_POOLS = {} of String => Invidious::ConnectionPool::Pool
# Fetches a HTTP pool for the specified subdomain of ytimg.com
#
# Creates a new one when the specified pool for the subdomain does not exist
def self.get_ytimg_pool(subdomain)
if pool = YTIMG_POOLS[subdomain]?
return pool
else
LOGGER.info("ytimg_pool: Creating a new HTTP pool for \"https://#{subdomain}.ytimg.com\"")
pool = Invidious::ConnectionPool::Pool.new(
URI.parse("https://#{subdomain}.ytimg.com"),
max_capacity: CONFIG.pool_size,
idle_capacity: CONFIG.idle_pool_size
)
YTIMG_POOLS[subdomain] = pool
return pool
end
end
end end

View File

@ -42,7 +42,7 @@ module Invidious::Routes::Images
end end
begin begin
get_ytimg_pool(authority).client &.get(url, headers) do |resp| Invidious::ConnectionPool.get_ytimg_pool(authority).client &.get(url, headers) do |resp|
env.response.headers["Connection"] = "close" env.response.headers["Connection"] = "close"
return self.proxy_image(env, resp) return self.proxy_image(env, resp)
end end
@ -65,7 +65,7 @@ module Invidious::Routes::Images
end end
begin begin
get_ytimg_pool("i9").client &.get(url, headers) do |resp| Invidious::ConnectionPool.get_ytimg_pool("i9").client &.get(url, headers) do |resp|
return self.proxy_image(env, resp) return self.proxy_image(env, resp)
end end
rescue ex rescue ex
@ -111,7 +111,7 @@ module Invidious::Routes::Images
if name == "maxres.jpg" if name == "maxres.jpg"
build_thumbnails(id).each do |thumb| build_thumbnails(id).each do |thumb|
thumbnail_resource_path = "/vi/#{id}/#{thumb[:url]}.jpg" thumbnail_resource_path = "/vi/#{id}/#{thumb[:url]}.jpg"
if get_ytimg_pool("i9").client &.head(thumbnail_resource_path, headers).status_code == 200 if Invidious::ConnectionPool.get_ytimg_pool("i9").client &.head(thumbnail_resource_path, headers).status_code == 200
name = thumb[:url] + ".jpg" name = thumb[:url] + ".jpg"
break break
end end
@ -127,7 +127,7 @@ module Invidious::Routes::Images
end end
begin begin
get_ytimg_pool("i").client &.get(url, headers) do |resp| Invidious::ConnectionPool.get_ytimg_pool("i").client &.get(url, headers) do |resp|
return self.proxy_image(env, resp) return self.proxy_image(env, resp)
end end
rescue ex rescue ex