diff options
| author | syeopite <syeopite@syeopite.dev> | 2021-06-14 02:31:51 -0700 |
|---|---|---|
| committer | syeopite <syeopite@syeopite.dev> | 2021-06-19 04:17:49 -0700 |
| commit | eb911de92842ecfdb2005822dbaa94d82855f191 (patch) | |
| tree | c1860da030198f6dc3d4d792cde4a3e0ce4c4ae3 /src | |
| parent | b393e31b766d5fa2156befe61eb2ba023a845208 (diff) | |
| download | invidious-eb911de92842ecfdb2005822dbaa94d82855f191.tar.gz invidious-eb911de92842ecfdb2005822dbaa94d82855f191.tar.bz2 invidious-eb911de92842ecfdb2005822dbaa94d82855f191.zip | |
Handle if inst. api is down for rand inst fetch
Diffstat (limited to 'src')
| -rw-r--r-- | src/invidious/helpers/utils.cr | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/invidious/helpers/utils.cr b/src/invidious/helpers/utils.cr index 72cb1b1d..32359e9a 100644 --- a/src/invidious/helpers/utils.cr +++ b/src/invidious/helpers/utils.cr @@ -411,12 +411,22 @@ def convert_theme(theme) end def fetch_random_instance - instance_list = HTTP::Client.get "https://api.invidious.io/instances.json" - instance_list = JSON.parse(instance_list.body) + begin + instance_api_client = HTTP::Client.new("api.invidious.io") + + # Timeouts + instance_api_client.connect_timeout = 10.seconds + instance_api_client.dns_timeout = 10.seconds + + instance_list = JSON.parse(instance_api_client.get("/instances.json").body).as_a + instance_api_client.close + rescue Socket::ConnectError | IO::TimeoutError | JSON::ParseException + instance_list = [] of JSON::Any + end filtered_instance_list = [] of String - instance_list.as_a.each do |data| + instance_list.each do |data| # TODO Check if current URL is onion instance and use .onion types if so. if data[1]["type"] == "https" # Instances can have statisitics disabled, which is an requirement of version validation. |
