From f0d0eded1f9b7f2a244d414d09ad97e197601fab Mon Sep 17 00:00:00 2001
From: sinanmohd <sinan@sinanmohd.com>
Date: Wed, 4 Oct 2023 08:54:28 +0530
Subject: lib/curl: move retry logic to curl from server

---
 lib/curl.lua             | 31 ++++++++++++++++---------------
 server/opensubtitles.lua | 12 ++++--------
 server/subscene.lua      | 32 ++++++++++----------------------
 3 files changed, 30 insertions(+), 45 deletions(-)

diff --git a/lib/curl.lua b/lib/curl.lua
index 04ebf95..5272508 100644
--- a/lib/curl.lua
+++ b/lib/curl.lua
@@ -17,7 +17,7 @@ local head_to_args = function (t)
 	return args
 end
 
-local get = function (url, headr, args)
+local get = function (url, headr, args, tries)
 	local fetch, hcode, def_args
 
 	def_args = {
@@ -35,28 +35,29 @@ local get = function (url, headr, args)
 	headr = util.table_merge(def_headr, headr)
 	args = util.array_merge(args, head_to_args(headr))
 
-	fetch = util.run(args)
-	-- hcode can be nil, it means curl was't able to fulfill the http request, either
-	-- because curl package is broken or mpv killed it prematurely. we can exit
-	-- out of retry loop early if hcode is nil since there's no point in retrying
-	hcode = fetch:match('%d*$')
-	fetch = fetch:gsub('%s*%d*$', '')
+	repeat
+		fetch = util.run(args)
+		-- hcode can be nil, it means curl was't able to fulfill the http request, either
+		-- because curl package is broken or mpv killed it prematurely. we can exit
+		-- out of retry loop early if hcode is nil since there's no point in retrying
+		hcode = fetch:match('%d*$')
 
+		tries = tries - 1
+	until hcode == '200' or not hcode or tries <= 0
+
+	fetch = fetch:gsub('%s*%d*$', '')
 	return fetch, tonumber(hcode)
 end
 
-local zip_link_to_file = function (url, headr, out, retries)
-	local tries, hcode, zip, rc
+local zip_link_to_file = function (url, headr, out, tries)
+	local hcode, zip, rc, args
 
-	tries = 0
 	zip = os.tmpname()
+	args = { '-o'.. zip }
 
-	repeat
-		_, hcode = get(url, headr, { '-o'.. zip })
-		tries = tries + 1
-	until hcode == 200 or not hcode or tries > retries
-	rc = (hcode == 200)
+	_, hcode = get(url, headr, args, tries)
 
+	rc = (hcode == 200)
 	if rc then
 		rc = util.zip_ext_first(zip, out)
 	end
diff --git a/server/opensubtitles.lua b/server/opensubtitles.lua
index e9caf7b..0bace8b 100644
--- a/server/opensubtitles.lua
+++ b/server/opensubtitles.lua
@@ -111,18 +111,14 @@ local languages = {
 
 local language = 'english'
 local domain = 'https://www.opensubtitles.org'
-local retries = 10
+local tries = 10
 
 local search_ohash = function (ohash)
-	local fetch, tries, hcode, url, id
+	local fetch, hcode, url, id
 
 	url = domain .. '/en' .. '/search/sublanguageid-' ..
 	      languages[language] .. '/moviehash-' .. ohash
-	tries = 0
-	repeat
-		fetch, hcode = curl.get(url, nil, nil)
-		tries = tries + 1
-	until hcode == 200 or not hcode or tries > retries
+	fetch, hcode = curl.get(url, nil, nil, tries)
 
 	id = fetch:match('/en/subtitleserve/sub/[^\n]*\n[^\n]*iduser%-0')
 	if id then
@@ -144,7 +140,7 @@ local search = function (path, out)
 	ohash = util.opensubtitles_hash(path)
 	link = search_ohash(ohash)
 	if link then
-		return curl.zip_link_to_file(link, nil, out, retries)
+		return curl.zip_link_to_file(link, nil, out, tries)
 	end
 end
 
diff --git a/server/subscene.lua b/server/subscene.lua
index 27fc1df..4c99e8a 100644
--- a/server/subscene.lua
+++ b/server/subscene.lua
@@ -87,21 +87,17 @@ local languages = {
 local language = 'english'
 local domain = 'https://subscene.com'
 local headr = {['Cookie'] = 'LanguageFilter=' ..languages[language]}
-local retries = 10
+local tries = 10
 
 local title_search = function (key)
-	local url, args, fetch, hcode, tries, title, rc
+	local url, args, fetch, hcode, title, rc
 
 	url = domain .. '/subtitles/searchbytitle'
 	args = { '--data-raw',  'query=' .. key }
 
-	tries = 0
-	repeat
-		fetch, hcode = curl.get(url, headr, args)
-		tries = tries + 1
-	until hcode == 200 or not hcode or tries > retries
-
+	fetch, hcode = curl.get(url, headr, args, tries)
 	title = fetch:match('href="/subtitles/[^"]*')
+
 	if title then
 		title = title:gsub('href="',  domain)
 	end
@@ -115,13 +111,9 @@ local title_search = function (key)
 end
 
 local id_fetch = function (title)
-	local tab, id, name, fetch, hcode, tries, iter, line
+	local tab, id, name, fetch, hcode, iter, line
 
-	tries = 0
-	repeat
-		fetch, hcode = curl.get(title, headr, nil)
-		tries = tries + 1
-	until hcode == 200 or not hcode or tries > retries
+	fetch, hcode = curl.get(title, headr, nil, tries)
 
 	tab = {}
 	iter = fetch:gmatch('[^\n\r]+')
@@ -152,15 +144,11 @@ local id_fetch = function (title)
 end
 
 local link_fetch = function (id)
-	local fetch, tries, hcode, link, rc
+	local fetch, hcode, link, rc
 
-	tries = 0
-	repeat
-		fetch, hcode = curl.get(id, headr, nil)
-		tries = tries + 1
-	until hcode == 200 or not hcode or tries > retries
-	rc = hcode == 200
+	fetch, hcode = curl.get(id, headr, nil, tries)
 
+	rc = (hcode == 200)
 	if rc then
 		link = domain .. fetch:match('/subtitles/[%l_-]*%-text/[^"]*')
 	end
@@ -192,7 +180,7 @@ local search = function (path, out)
 		return false
 	end
 
-	rc = curl.zip_link_to_file(link, headr, out, retries)
+	rc = curl.zip_link_to_file(link, headr, out, tries)
 	if not rc then
 		return false
 	end
-- 
cgit v1.2.3