mirror of
https://github.com/iv-org/invidious.git
synced 2025-01-10 03:20:35 +05:30
Move ytimg pool logic to Invidious::ConnectionPool
This commit is contained in:
parent
b044727cca
commit
c026a7b1f6
@ -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
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user