2021-07-05 03:19:04 +00:00
|
|
|
import { get, paramsString, DEFAULT_TIMEOUT } from '../_utils/ajax.js'
|
|
|
|
import { auth, basename } from './utils.js'
|
2018-02-07 04:54:49 +00:00
|
|
|
|
2019-10-13 15:08:06 +00:00
|
|
|
function doSearch (version, instanceName, accessToken, query, resolve, limit, excludeUnreviewed, signal) {
|
2019-09-26 12:24:20 +00:00
|
|
|
const url = `${basename(instanceName)}/api/${version}/search?` + paramsString({
|
2018-02-07 04:54:49 +00:00
|
|
|
q: query,
|
2019-05-06 02:16:02 +00:00
|
|
|
resolve,
|
2019-10-13 15:08:06 +00:00
|
|
|
limit,
|
|
|
|
exclude_unreviewed: !!excludeUnreviewed
|
2018-02-07 04:54:49 +00:00
|
|
|
})
|
2019-05-07 03:29:43 +00:00
|
|
|
return get(url, auth(accessToken), {
|
|
|
|
timeout: DEFAULT_TIMEOUT,
|
|
|
|
signal
|
|
|
|
})
|
2018-02-07 04:54:49 +00:00
|
|
|
}
|
2019-09-26 12:24:20 +00:00
|
|
|
|
2019-10-13 15:08:06 +00:00
|
|
|
async function doSearchV1 (instanceName, accessToken, query, resolve, limit, excludeUnreviewed, signal) {
|
|
|
|
const resp = await doSearch('v1', instanceName, accessToken, query, resolve, limit, excludeUnreviewed, signal)
|
2019-09-26 12:24:20 +00:00
|
|
|
resp.hashtags = resp.hashtags && resp.hashtags.map(tag => ({
|
|
|
|
name: tag,
|
|
|
|
url: `${basename(instanceName)}/tags/${tag.toLowerCase()}`,
|
|
|
|
history: []
|
|
|
|
}))
|
|
|
|
return resp
|
|
|
|
}
|
|
|
|
|
2019-10-13 15:08:06 +00:00
|
|
|
async function doSearchV2 (instanceName, accessToken, query, resolve, limit, excludeUnreviewed, signal) {
|
|
|
|
return doSearch('v2', instanceName, accessToken, query, resolve, limit, excludeUnreviewed, signal)
|
2019-09-26 12:24:20 +00:00
|
|
|
}
|
|
|
|
|
2019-10-13 15:08:06 +00:00
|
|
|
export async function search (instanceName, accessToken, query, resolve = true, limit = 5,
|
|
|
|
excludeUnreviewed = false, signal = null) {
|
2019-09-26 12:24:20 +00:00
|
|
|
try {
|
2019-10-13 15:08:06 +00:00
|
|
|
return (await doSearchV2(instanceName, accessToken, query, resolve, limit, excludeUnreviewed, signal))
|
2019-09-26 12:24:20 +00:00
|
|
|
} catch (err) {
|
|
|
|
if (err && err.status === 404) { // fall back to old search API
|
2019-10-13 15:08:06 +00:00
|
|
|
return doSearchV1(instanceName, accessToken, query, resolve, limit, excludeUnreviewed, signal)
|
2019-09-26 12:24:20 +00:00
|
|
|
} else {
|
|
|
|
throw err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|