feat: support lookup account for gotosocial
This commit is contained in:
parent
20a90cc949
commit
2e7979817a
|
@ -64,11 +64,22 @@ export async function fetchAccountByHandle(acct: string): Promise<mastodon.v1.Ac
|
||||||
if (cached)
|
if (cached)
|
||||||
return cached
|
return cached
|
||||||
const domain = currentInstance.value?.uri
|
const domain = currentInstance.value?.uri
|
||||||
const account = useMastoClient().v1.accounts.lookup({ acct })
|
|
||||||
.then((r) => {
|
|
||||||
if (r.acct && !r.acct.includes('@') && domain)
|
|
||||||
r.acct = `${r.acct}@${domain}`
|
|
||||||
|
|
||||||
|
async function lookupAccount() {
|
||||||
|
const client = useMastoClient()
|
||||||
|
let account: mastodon.v1.Account
|
||||||
|
if (!isGotoSocial.value)
|
||||||
|
account = await client.v1.accounts.lookup({ acct })
|
||||||
|
else
|
||||||
|
account = (await client.v1.search({ q: `@${acct}`, type: 'accounts' })).accounts[0]
|
||||||
|
|
||||||
|
if (account.acct && !account.acct.includes('@') && domain)
|
||||||
|
account.acct = `${account.acct}@${domain}`
|
||||||
|
return account
|
||||||
|
}
|
||||||
|
|
||||||
|
const account = lookupAccount()
|
||||||
|
.then((r) => {
|
||||||
cacheAccount(r, server, true)
|
cacheAccount(r, server, true)
|
||||||
return r
|
return r
|
||||||
})
|
})
|
||||||
|
|
|
@ -8,6 +8,7 @@ import {
|
||||||
DEFAULT_POST_CHARS_LIMIT,
|
DEFAULT_POST_CHARS_LIMIT,
|
||||||
STORAGE_KEY_CURRENT_USER,
|
STORAGE_KEY_CURRENT_USER,
|
||||||
STORAGE_KEY_CURRENT_USER_HANDLE,
|
STORAGE_KEY_CURRENT_USER_HANDLE,
|
||||||
|
STORAGE_KEY_NODES,
|
||||||
STORAGE_KEY_NOTIFICATION,
|
STORAGE_KEY_NOTIFICATION,
|
||||||
STORAGE_KEY_NOTIFICATION_POLICY,
|
STORAGE_KEY_NOTIFICATION_POLICY,
|
||||||
STORAGE_KEY_SERVERS,
|
STORAGE_KEY_SERVERS,
|
||||||
|
@ -43,6 +44,7 @@ const initializeUsers = async (): Promise<Ref<UserLogin[]> | RemovableRef<UserLo
|
||||||
|
|
||||||
const users = await initializeUsers()
|
const users = await initializeUsers()
|
||||||
export const instances = useLocalStorage<Record<string, mastodon.v1.Instance>>(STORAGE_KEY_SERVERS, mock ? mock.server : {}, { deep: true })
|
export const instances = useLocalStorage<Record<string, mastodon.v1.Instance>>(STORAGE_KEY_SERVERS, mock ? mock.server : {}, { deep: true })
|
||||||
|
export const nodes = useLocalStorage<Record<string, any>>(STORAGE_KEY_NODES, {}, { deep: true })
|
||||||
const currentUserId = useLocalStorage<string>(STORAGE_KEY_CURRENT_USER, mock ? mock.user.account.id : '')
|
const currentUserId = useLocalStorage<string>(STORAGE_KEY_CURRENT_USER, mock ? mock.user.account.id : '')
|
||||||
|
|
||||||
export type ElkInstance = Partial<mastodon.v1.Instance> & { uri: string }
|
export type ElkInstance = Partial<mastodon.v1.Instance> & { uri: string }
|
||||||
|
@ -60,11 +62,14 @@ export const currentUser = computed<UserLogin | undefined>(() => {
|
||||||
|
|
||||||
const publicInstance = ref<ElkInstance | null>(null)
|
const publicInstance = ref<ElkInstance | null>(null)
|
||||||
export const currentInstance = computed<null | ElkInstance>(() => currentUser.value ? instances.value[currentUser.value.server] ?? null : publicInstance.value)
|
export const currentInstance = computed<null | ElkInstance>(() => currentUser.value ? instances.value[currentUser.value.server] ?? null : publicInstance.value)
|
||||||
export const isGlitchEdition = computed(() => currentInstance.value?.version?.includes('+glitch'))
|
|
||||||
|
|
||||||
export const publicServer = ref('')
|
export const publicServer = ref('')
|
||||||
export const currentServer = computed<string>(() => currentUser.value?.server || publicServer.value)
|
export const currentServer = computed<string>(() => currentUser.value?.server || publicServer.value)
|
||||||
|
|
||||||
|
export const currentNodeInfo = computed<null | Record<string, any>>(() => nodes.value[currentServer.value] || null)
|
||||||
|
export const isGotoSocial = computed(() => currentNodeInfo.value?.software?.name === 'gotosocial')
|
||||||
|
export const isGlitchEdition = computed(() => currentInstance.value?.version?.includes('+glitch'))
|
||||||
|
|
||||||
// when multiple tabs: we need to reload window when sign in, switch account or sign out
|
// when multiple tabs: we need to reload window when sign in, switch account or sign out
|
||||||
if (process.client) {
|
if (process.client) {
|
||||||
const windowReload = () => {
|
const windowReload = () => {
|
||||||
|
@ -112,6 +117,12 @@ export async function loginTo(masto: ElkMasto, user: Overwrite<UserLogin, { acco
|
||||||
const { client } = $(masto)
|
const { client } = $(masto)
|
||||||
const instance = mastoLogin(masto, user)
|
const instance = mastoLogin(masto, user)
|
||||||
|
|
||||||
|
// GoToSocial only API
|
||||||
|
const url = `https://${user.server}`
|
||||||
|
fetch(`${url}/nodeinfo/2.0`).then(r => r.json()).then((info) => {
|
||||||
|
nodes.value[user.server] = info
|
||||||
|
})
|
||||||
|
|
||||||
if (!user?.token) {
|
if (!user?.token) {
|
||||||
publicServer.value = user.server
|
publicServer.value = user.server
|
||||||
publicInstance.value = instance
|
publicInstance.value = instance
|
||||||
|
|
|
@ -7,6 +7,7 @@ export const DEFAULT_LANGUAGE = 'en-US'
|
||||||
export const STORAGE_KEY_DRAFTS = 'elk-drafts'
|
export const STORAGE_KEY_DRAFTS = 'elk-drafts'
|
||||||
export const STORAGE_KEY_USERS = 'elk-users'
|
export const STORAGE_KEY_USERS = 'elk-users'
|
||||||
export const STORAGE_KEY_SERVERS = 'elk-servers'
|
export const STORAGE_KEY_SERVERS = 'elk-servers'
|
||||||
|
export const STORAGE_KEY_NODES = 'elk-nodes'
|
||||||
export const STORAGE_KEY_CURRENT_USER = 'elk-current-user'
|
export const STORAGE_KEY_CURRENT_USER = 'elk-current-user'
|
||||||
export const STORAGE_KEY_CURRENT_USER_HANDLE = 'elk-current-user-handle'
|
export const STORAGE_KEY_CURRENT_USER_HANDLE = 'elk-current-user-handle'
|
||||||
export const STORAGE_KEY_NOTIFY_TAB = 'elk-notify-tab'
|
export const STORAGE_KEY_NOTIFY_TAB = 'elk-notify-tab'
|
||||||
|
|
Loading…
Reference in a new issue