From 4ffa67c9c177f7fe61ba10eb1531b6bcea7dcfa9 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 8 Oct 2024 10:23:29 -0500 Subject: [PATCH 1/2] Refactor supportsInstanceV2 to use features directly --- src/actions/instance.ts | 31 ++++++------------------------- src/utils/features.ts | 1 + 2 files changed, 7 insertions(+), 25 deletions(-) diff --git a/src/actions/instance.ts b/src/actions/instance.ts index 6332ad198..510fb052c 100644 --- a/src/actions/instance.ts +++ b/src/actions/instance.ts @@ -1,10 +1,9 @@ import { createAsyncThunk } from '@reduxjs/toolkit'; -import get from 'lodash/get'; -import { gte } from 'semver'; +import { instanceSchema } from 'soapbox/schemas'; import { RootState } from 'soapbox/store'; import { getAuthUserUrl, getMeUrl } from 'soapbox/utils/auth'; -import { MASTODON, parseVersion, PLEROMA, REBASED } from 'soapbox/utils/features'; +import { getFeatures } from 'soapbox/utils/features'; import api from '../api'; @@ -19,18 +18,6 @@ export const getHost = (state: RootState) => { } }; -const supportsInstanceV2 = (instance: Record): boolean => { - const v = parseVersion(get(instance, 'version')); - return (v.software === MASTODON && gte(v.compatVersion, '4.0.0')) || - (v.software === PLEROMA && v.build === REBASED && gte(v.version, '2.5.54')); -}; - -/** We may need to fetch nodeinfo on Pleroma < 2.1 */ -const needsNodeinfo = (instance: Record): boolean => { - const v = parseVersion(get(instance, 'version')); - return v.software === PLEROMA && !get(instance, ['pleroma', 'metadata']); -}; - interface InstanceData { instance: Record; host: string | null | undefined; @@ -40,15 +27,14 @@ export const fetchInstance = createAsyncThunk { try { - const { data: instance } = await api(getState).get('/api/v1/instance'); + const { data } = await api(getState).get('/api/v1/instance'); + const instance = instanceSchema.parse(data); + const features = getFeatures(instance); - if (supportsInstanceV2(instance)) { + if (features.instanceV2) { dispatch(fetchInstanceV2(host)); } - if (needsNodeinfo(instance)) { - dispatch(fetchNodeinfo()); - } return { instance, host }; } catch (e) { return rejectWithValue(e); @@ -67,8 +53,3 @@ export const fetchInstanceV2 = createAsyncThunk( - 'nodeinfo/fetch', - async(_arg, { getState }) => await api(getState).get('/nodeinfo/2.1.json'), -); diff --git a/src/utils/features.ts b/src/utils/features.ts index ac757dd1b..2bbc3914b 100644 --- a/src/utils/features.ts +++ b/src/utils/features.ts @@ -711,6 +711,7 @@ const getInstanceFeatures = (instance: Instance) => { instanceV2: any([ v.software === MASTODON && gte(v.compatVersion, '4.0.0'), v.software === PLEROMA && v.build === REBASED && gte(v.version, '2.5.54'), + v.software === DITTO, ]), /** From 8690307076103615dbb59a6b534e091ae55c667a Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 8 Oct 2024 10:41:17 -0500 Subject: [PATCH 2/2] Send the `lang` param to translate statuses --- src/actions/statuses.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/actions/statuses.ts b/src/actions/statuses.ts index ab6a855ee..78b4a8390 100644 --- a/src/actions/statuses.ts +++ b/src/actions/statuses.ts @@ -316,11 +316,12 @@ const toggleStatusHidden = (status: Status) => { } }; -const translateStatus = (id: string, targetLanguage?: string) => (dispatch: AppDispatch, getState: () => RootState) => { +const translateStatus = (id: string, lang?: string) => (dispatch: AppDispatch, getState: () => RootState) => { dispatch({ type: STATUS_TRANSLATE_REQUEST, id }); api(getState).post(`/api/v1/statuses/${id}/translate`, { - target_language: targetLanguage, + lang, // Mastodon API + target_language: lang, // HACK: Rebased and Pleroma compatibility }).then(response => { dispatch({ type: STATUS_TRANSLATE_SUCCESS,