fix: account server in GoToSocial

This commit is contained in:
三咲智子 Kevin Deng 2023-01-15 17:44:36 +08:00
parent ba5b89d5b8
commit 5247b36b6d
No known key found for this signature in database
GPG key ID: 69992F2250DFD93E
4 changed files with 14 additions and 6 deletions

View file

@ -43,7 +43,7 @@ export function fetchAccountById(id?: string | null): Promise<mastodon.v1.Accoun
const cached = cache.get(key) const cached = cache.get(key)
if (cached) if (cached)
return cached return cached
const domain = currentInstance.value?.uri const domain = currentInstance.value ? getInstanceDomain(currentInstance.value) : null
const promise = useMastoClient().v1.accounts.fetch(id) const promise = useMastoClient().v1.accounts.fetch(id)
.then((r) => { .then((r) => {
if (r.acct && !r.acct.includes('@') && domain) if (r.acct && !r.acct.includes('@') && domain)
@ -63,7 +63,7 @@ export async function fetchAccountByHandle(acct: string): Promise<mastodon.v1.Ac
const cached = cache.get(key) const cached = cache.get(key)
if (cached) if (cached)
return cached return cached
const domain = currentInstance.value?.uri const domain = currentInstance.value ? getInstanceDomain(currentInstance.value) : undefined
async function lookupAccount() { async function lookupAccount() {
const client = useMastoClient() const client = useMastoClient()

View file

@ -17,7 +17,7 @@ export function getServerName(account: mastodon.v1.Account) {
if (account.acct?.includes('@')) if (account.acct?.includes('@'))
return account.acct.split('@')[1] return account.acct.split('@')[1]
// We should only lack the server name if we're on the same server as the account // We should only lack the server name if we're on the same server as the account
return currentInstance.value?.uri || '' return currentInstance.value ? getInstanceDomain(currentInstance.value) : ''
} }
export function getFullHandle(account: mastodon.v1.Account) { export function getFullHandle(account: mastodon.v1.Account) {
@ -38,7 +38,7 @@ export function toShortHandle(fullHandle: string) {
export function extractAccountHandle(account: mastodon.v1.Account) { export function extractAccountHandle(account: mastodon.v1.Account) {
let handle = getFullHandle(account).slice(1) let handle = getFullHandle(account).slice(1)
const uri = currentInstance.value?.uri ?? currentServer.value const uri = currentInstance.value ? getInstanceDomain(currentInstance.value) : currentServer.value
if (currentInstance.value && handle.endsWith(`@${uri}`)) if (currentInstance.value && handle.endsWith(`@${uri}`))
handle = handle.slice(0, -uri.length - 1) handle = handle.slice(0, -uri.length - 1)

View file

@ -34,7 +34,7 @@ export function mastoLogin(masto: ElkMasto, user: Pick<UserLogin, 'server' | 'to
const server = user.server const server = user.server
const url = `https://${server}` const url = `https://${server}`
const instance: ElkInstance = reactive(getInstanceCache(server) || { uri: server }) const instance: ElkInstance = reactive(getInstanceCache(server) || { uri: server, accountDomain: server })
setParams({ setParams({
url, url,
accessToken: user?.token, accessToken: user?.token,

View file

@ -47,7 +47,11 @@ export const instances = useLocalStorage<Record<string, mastodon.v1.Instance>>(S
export const nodes = useLocalStorage<Record<string, any>>(STORAGE_KEY_NODES, {}, { 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
/** support GoToSocial */
accountDomain?: string | null
}
export const getInstanceCache = (server: string): mastodon.v1.Instance | undefined => instances.value[server] export const getInstanceCache = (server: string): mastodon.v1.Instance | undefined => instances.value[server]
export const currentUser = computed<UserLogin | undefined>(() => { export const currentUser = computed<UserLogin | undefined>(() => {
@ -63,6 +67,10 @@ 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 function getInstanceDomain(instance: ElkInstance) {
return instance.accountDomain || instance.uri
}
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)