about summary refs log tree commit diff stats
path: root/src/assets
diff options
context:
space:
mode:
authorOr <>2023-11-18 17:40:35 +0200
committerOr <>2023-11-18 17:40:35 +0200
commitd9121aa5d8fc3df647ca5fe40cbd168b5a62dfdb (patch)
treea852c5b975595139ebe3c19df4d36a365d886cc5 /src/assets
parentMerge pull request #852 from Davilarek/patch-2 (diff)
downloadlibredirect-d9121aa5d8fc3df647ca5fe40cbd168b5a62dfdb.zip
switchInstance returns next instance instead of random
Diffstat (limited to 'src/assets')
-rw-r--r--src/assets/javascripts/services.js4
-rw-r--r--src/assets/javascripts/utils.js18
2 files changed, 20 insertions, 2 deletions
diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js
index 7f00b7cf..6fa6767f 100644
--- a/src/assets/javascripts/services.js
+++ b/src/assets/javascripts/services.js
@@ -605,7 +605,7 @@ function switchInstance(url, customService) {
 		if (customService) {
 			const instancesList = options[options[customService].frontend]
 			if (instancesList !== undefined) {
-				resolve(`${utils.getRandomInstance(instancesList)}${url.pathname}${url.search}`)
+				resolve(`${utils.getNextInstance(url.origin, instancesList)}${url.pathname}${url.search}`)
 			}
 		} else {
 			for (const service in config.services) {
@@ -618,7 +618,7 @@ function switchInstance(url, customService) {
 					resolve()
 					return
 				}
-				resolve(`${utils.getRandomInstance(instancesList)}${url.pathname}${url.search}`)
+				resolve(`${utils.getNextInstance(url.origin, instancesList)}${url.pathname}${url.search}`)
 				return
 			}
 		}
diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js
index f7b9fd73..0cc5331b 100644
--- a/src/assets/javascripts/utils.js
+++ b/src/assets/javascripts/utils.js
@@ -9,6 +9,23 @@ function getRandomInstance(instances) {
 }
 
 /**
+ * @param {string} currentInstanceUrl
+ * @param {Array.<T>} instances
+ * @returns {T}
+ */
+function getNextInstance(currentInstanceUrl, instances) {
+	const currentInstanceIndex = instances.indexOf(currentInstanceUrl);
+
+	if (currentInstanceIndex === -1){
+		return getRandomInstance(instances);
+	}
+
+	const nextInstanceIndex = (currentInstanceIndex + 1) % instances.length;
+
+	return instances[nextInstanceIndex];
+}
+
+/**
  * @param {string} str
  */
 function camelCase(str) {
@@ -195,6 +212,7 @@ function ping(href) {
 
 export default {
 	getRandomInstance,
+	getNextInstance,
 	protocolHost,
 	getList,
 	getBlacklist,