diff options
Diffstat (limited to 'src/assets/javascripts')
-rw-r--r-- | src/assets/javascripts/services.js | 40 | ||||
-rw-r--r-- | src/assets/javascripts/utils.js | 17 |
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, } |