aboutsummaryrefslogtreecommitdiffstats
path: root/src/assets
diff options
context:
space:
mode:
Diffstat (limited to 'src/assets')
-rw-r--r--src/assets/javascripts/services.js40
-rw-r--r--src/assets/javascripts/utils.js17
2 files changed, 30 insertions, 27 deletions
diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js
index a0ba0111..80a4851c 100644
--- a/src/assets/javascripts/services.js
+++ b/src/assets/javascripts/services.js
@@ -647,32 +647,19 @@ async function redirectAsync(url, type, originUrl, documentUrl, incognito, force
/**
* @param {URL} url
*/
-function computeService(url) {
- return new Promise(async resolve => {
- const config = await utils.getConfig()
- const options = await utils.getOptions()
- for (const service in config.services) {
- if (regexArray(service, url, config, options)) {
- resolve(service)
- return
- } else {
- for (const frontend in config.services[service].frontends) {
- if (all(service, frontend, options, config).findIndex(instance => url.href.startsWith(instance)) >= 0) {
- return resolve(service)
- }
- }
- }
- }
- resolve()
- })
-}
-export function computeFrontend(url) {
+async function computeServiceFrontend(url) {
+ const config = await utils.getConfig()
+ const options = await utils.getOptions()
for (const service in config.services) {
- for (const frontend in config.services[service].frontends) {
- const instances = all(service, frontend, options, config)
- const i = instances.findIndex(instance => url.href.startsWith(instance))
- if (i >= 0) {
- return { service, frontend }
+ if (regexArray(service, url, config, options)) {
+ return { service, frontend: null }
+ } else {
+ for (const frontend in config.services[service].frontends) {
+ const instances = all(service, frontend, options, config)
+ const i = instances.findIndex(instance => url.href.startsWith(instance))
+ if (i >= 0) {
+ return { service, frontend }
+ }
}
}
}
@@ -970,12 +957,11 @@ function isException(url) {
export default {
redirect,
redirectAsync,
- computeService,
+ computeServiceFrontend,
reverse,
initDefaults,
processUpdate,
copyRaw,
switchInstance,
isException,
- computeFrontend,
}
diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js
index d81a96bc..f360a15b 100644
--- a/src/assets/javascripts/utils.js
+++ b/src/assets/javascripts/utils.js
@@ -222,6 +222,22 @@ export function randomInstances(clearnet, n) {
}
return instances
}
+
+async function autoPickInstance(clearnet, url) {
+ if (url) {
+ const i = clearnet.findIndex(instance => url.href.startsWith(instance))
+ if (i >= 0) clearnet.splice(i, 1)
+ }
+ const random = randomInstances(clearnet, 5)
+ const pings = await Promise.all([
+ ...random.map(async instance => {
+ return [instance, await ping(instance)]
+ }),
+ ])
+ pings.sort((a, b) => a[1] - b[1])
+ return pings[0][0]
+}
+
export function style(options, window) {
const vars = cssVariables(options, window)
return `--text: ${vars.text};
@@ -277,4 +293,5 @@ export default {
convertMapCentre,
randomInstances,
style,
+ autoPickInstance,
}