From 5c3494006f1bc06f165d977a0e17ad25cfd05eed Mon Sep 17 00:00:00 2001
From: Omar Roth <omarroth@hotmail.com>
Date: Fri, 20 Jul 2018 16:39:31 -0500
Subject: [PATCH] Optimize fetch_video

---
 src/invidious/helpers.cr | 34 ++++++++++++++++++++++++----------
 1 file changed, 24 insertions(+), 10 deletions(-)

diff --git a/src/invidious/helpers.cr b/src/invidious/helpers.cr
index c33af1b8..d579abae 100644
--- a/src/invidious/helpers.cr
+++ b/src/invidious/helpers.cr
@@ -221,20 +221,34 @@ def elapsed_text(elapsed)
 end
 
 def fetch_video(id, client)
-  info = client.get("/get_video_info?video_id=#{id}&el=detailpage&ps=default&eurl=&gl=US&hl=en&disable_polymer=1").body
-  html = client.get("/watch?v=#{id}&bpctr=#{Time.new.epoch + 2000}&disable_polymer=1").body
+  info_channel = Channel(HTTP::Params).new
+  html_channel = Channel(XML::Node).new
 
-  html = XML.parse_html(html)
-  info = HTTP::Params.parse(info)
+  spawn do
+    html = client.get("/watch?v=#{id}&bpctr=#{Time.new.epoch + 2000}&disable_polymer=1").body
+    html = XML.parse_html(html)
 
-  if info["reason"]?
-    info = client.get("/get_video_info?video_id=#{id}&ps=default&eurl=&gl=US&hl=en&disable_polymer=1").body
-    info = HTTP::Params.parse(info)
-    if info["reason"]?
-      raise info["reason"]
-    end
+    html_channel.send(html)
   end
 
+  spawn do
+    info = client.get("/get_video_info?video_id=#{id}&el=detailpage&ps=default&eurl=&gl=US&hl=en&disable_polymer=1").body
+    info = HTTP::Params.parse(info)
+
+    if info["reason"]?
+      info = client.get("/get_video_info?video_id=#{id}&ps=default&eurl=&gl=US&hl=en&disable_polymer=1").body
+      info = HTTP::Params.parse(info)
+      if info["reason"]?
+        raise info["reason"]
+      end
+    end
+
+    info_channel.send(info)
+  end
+
+  html = html_channel.receive
+  info = info_channel.receive
+
   title = info["title"]
   views = info["view_count"].to_i64
   author = info["author"]