diff --git a/package.json b/package.json index 12581c74..b822761c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tooot", - "version": "4.6.5", + "version": "4.6.6", "description": "tooot for Mastodon", "author": "xmflsct ", "license": "GPL-3.0-or-later", diff --git a/src/App.tsx b/src/App.tsx index 6575b3e1..92dcc448 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,4 +1,5 @@ import { ActionSheetProvider } from '@expo/react-native-action-sheet' +import getLanguage from '@helpers/getLanguage' import queryClient from '@helpers/queryClient' import i18n from '@root/i18n/i18n' import Screens from '@root/Screens' @@ -12,7 +13,7 @@ import timezone from '@root/startup/timezone' import { persistor, store } from '@root/store' import * as Sentry from '@sentry/react-native' import AccessibilityManager from '@utils/accessibility/AccessibilityManager' -import { changeLanguage, getSettingsLanguage } from '@utils/slices/settingsSlice' +import { changeLanguage } from '@utils/slices/settingsSlice' import ThemeManager from '@utils/styles/ThemeManager' import * as Localization from 'expo-localization' import * as SplashScreen from 'expo-splash-screen' @@ -85,7 +86,7 @@ const App: React.FC = () => { if (bootstrapped) { log('log', 'App', 'loading actual app :)') log('log', 'App', `Locale: ${Localization.locale}`) - const language = getSettingsLanguage(store.getState()) + const language = getLanguage() if (!language) { if (Platform.OS !== 'ios') { store.dispatch(changeLanguage('en')) diff --git a/src/components/Timeline/Default.tsx b/src/components/Timeline/Default.tsx index 9676ad6b..cf57785b 100644 --- a/src/components/Timeline/Default.tsx +++ b/src/components/Timeline/Default.tsx @@ -120,7 +120,7 @@ const TimelineDefault: React.FC = ({ queryKey, rootQueryKey, status, - isReblog: !!item.reblog, + reblogStatus: item.reblog ? item : undefined, ownAccount, spoilerHidden, copiableContent, diff --git a/src/components/Timeline/Notifications.tsx b/src/components/Timeline/Notifications.tsx index 802ae3d5..04204965 100644 --- a/src/components/Timeline/Notifications.tsx +++ b/src/components/Timeline/Notifications.tsx @@ -38,7 +38,7 @@ const TimelineNotifications: React.FC = ({ }) => { const instanceAccount = useSelector(getInstanceAccount, () => true) - const status = notification.status + const status = notification.status?.reblog ? notification.status.reblog : notification.status const account = notification.status ? notification.status.account : notification.account const ownAccount = notification.account?.id === instanceAccount?.id const [spoilerExpanded, setSpoilerExpanded] = useState( @@ -78,7 +78,11 @@ const TimelineNotifications: React.FC = ({ return ( <> {notification.type !== 'mention' ? ( - + ) : null} = ({ value={{ queryKey, status, - isReblog: !!status?.reblog, ownAccount, spoilerHidden, copiableContent, diff --git a/src/components/Timeline/Shared/Actioned.tsx b/src/components/Timeline/Shared/Actioned.tsx index 2a5c8f86..fcc3a002 100644 --- a/src/components/Timeline/Shared/Actioned.tsx +++ b/src/components/Timeline/Shared/Actioned.tsx @@ -13,12 +13,12 @@ import StatusContext from './Context' export interface Props { action: Mastodon.Notification['type'] | 'reblog' | 'pinned' isNotification?: boolean - account?: Mastodon.Account + account?: Mastodon.Account // For notification } const TimelineActioned: React.FC = ({ action, isNotification, ...rest }) => { - const { status } = useContext(StatusContext) - const account = isNotification ? rest.account : status?.account + const { status, reblogStatus } = useContext(StatusContext) + const account = rest.account || (reblogStatus ? reblogStatus.account : status?.account) if (!status || !account) return null const { t } = useTranslation('componentTimeline') diff --git a/src/components/Timeline/Shared/Actions.tsx b/src/components/Timeline/Shared/Actions.tsx index 511cbaa9..0991ee89 100644 --- a/src/components/Timeline/Shared/Actions.tsx +++ b/src/components/Timeline/Shared/Actions.tsx @@ -22,7 +22,7 @@ import { useSelector } from 'react-redux' import StatusContext from './Context' const TimelineActions: React.FC = () => { - const { queryKey, rootQueryKey, status, isReblog, ownAccount, highlighted, disableDetails } = + const { queryKey, rootQueryKey, status, reblogStatus, ownAccount, highlighted, disableDetails } = useContext(StatusContext) if (!queryKey || !status || disableDetails) return null @@ -109,7 +109,7 @@ const TimelineActions: React.FC = () => { queryKey, rootQueryKey, id: status.id, - isReblog, + isReblog: !!reblogStatus, payload: { property: 'reblogged', currentValue: status.reblogged, @@ -125,7 +125,7 @@ const TimelineActions: React.FC = () => { queryKey, rootQueryKey, id: status.id, - isReblog, + isReblog: !!reblogStatus, payload: { property: 'reblogged', currentValue: status.reblogged, @@ -144,7 +144,7 @@ const TimelineActions: React.FC = () => { queryKey, rootQueryKey, id: status.id, - isReblog, + isReblog: !!reblogStatus, payload: { property: 'reblogged', currentValue: status.reblogged, @@ -161,7 +161,7 @@ const TimelineActions: React.FC = () => { queryKey, rootQueryKey, id: status.id, - isReblog, + isReblog: !!reblogStatus, payload: { property: 'favourited', currentValue: status.favourited, @@ -176,7 +176,7 @@ const TimelineActions: React.FC = () => { queryKey, rootQueryKey, id: status.id, - isReblog, + isReblog: !!reblogStatus, payload: { property: 'bookmarked', currentValue: status.bookmarked, diff --git a/src/components/Timeline/Shared/Context.tsx b/src/components/Timeline/Shared/Context.tsx index 5447643b..5dafee11 100644 --- a/src/components/Timeline/Shared/Context.tsx +++ b/src/components/Timeline/Shared/Context.tsx @@ -7,7 +7,7 @@ type ContextType = { status?: Mastodon.Status - isReblog?: boolean + reblogStatus?: Mastodon.Status // When it is a reblog, pass the root status ownAccount?: boolean spoilerHidden?: boolean copiableContent?: React.MutableRefObject<{ diff --git a/src/components/Timeline/Shared/Poll.tsx b/src/components/Timeline/Shared/Poll.tsx index 339b2fc5..6a21fcae 100644 --- a/src/components/Timeline/Shared/Poll.tsx +++ b/src/components/Timeline/Shared/Poll.tsx @@ -20,8 +20,15 @@ import { useQueryClient } from 'react-query' import StatusContext from './Context' const TimelinePoll: React.FC = () => { - const { queryKey, rootQueryKey, status, isReblog, ownAccount, spoilerHidden, disableDetails } = - useContext(StatusContext) + const { + queryKey, + rootQueryKey, + status, + reblogStatus, + ownAccount, + spoilerHidden, + disableDetails + } = useContext(StatusContext) if (!queryKey || !status || !status.poll) return null const poll = status.poll @@ -78,7 +85,7 @@ const TimelinePoll: React.FC = () => { queryKey, rootQueryKey, id: status.id, - isReblog, + isReblog: !!reblogStatus, payload: { property: 'poll', id: poll.id, @@ -104,7 +111,7 @@ const TimelinePoll: React.FC = () => { queryKey, rootQueryKey, id: status.id, - isReblog, + isReblog: !!reblogStatus, payload: { property: 'poll', id: poll.id, diff --git a/src/i18n/ca/components/contextMenu.json b/src/i18n/ca/components/contextMenu.json index 8a4a90a7..a9cda06e 100644 --- a/src/i18n/ca/components/contextMenu.json +++ b/src/i18n/ca/components/contextMenu.json @@ -20,8 +20,8 @@ } }, "at": { - "direct": "", - "public": "" + "direct": "Missatge directe", + "public": "Missatge públic" }, "copy": { "action": "Copia la publicació", diff --git a/src/i18n/ca/screens/tabs.json b/src/i18n/ca/screens/tabs.json index 6f38f91d..bdd3f0e0 100644 --- a/src/i18n/ca/screens/tabs.json +++ b/src/i18n/ca/screens/tabs.json @@ -352,7 +352,7 @@ } }, "trending": { - "tags": "" + "tags": "Etiquetes en tendència" } }, "sections": { diff --git a/src/i18n/es/components/contextMenu.json b/src/i18n/es/components/contextMenu.json index fe8f71a9..149a2687 100644 --- a/src/i18n/es/components/contextMenu.json +++ b/src/i18n/es/components/contextMenu.json @@ -20,8 +20,8 @@ } }, "at": { - "direct": "", - "public": "" + "direct": "Mensaje directo", + "public": "Mensaje público" }, "copy": { "action": "Copiar toot", diff --git a/src/i18n/es/screens/tabs.json b/src/i18n/es/screens/tabs.json index 9103b01e..aa984450 100644 --- a/src/i18n/es/screens/tabs.json +++ b/src/i18n/es/screens/tabs.json @@ -352,7 +352,7 @@ } }, "trending": { - "tags": "" + "tags": "Etiquetas en tendencia" } }, "sections": { diff --git a/src/i18n/ja/components/contextMenu.json b/src/i18n/ja/components/contextMenu.json index 560b7e92..861a4043 100644 --- a/src/i18n/ja/components/contextMenu.json +++ b/src/i18n/ja/components/contextMenu.json @@ -20,8 +20,8 @@ } }, "at": { - "direct": "", - "public": "" + "direct": "ダイレクトメッセージ", + "public": "パブリックメッセージ" }, "copy": { "action": "トゥートをコピー", diff --git a/src/i18n/nl/components/contextMenu.json b/src/i18n/nl/components/contextMenu.json index 9bb9f208..52c73fe9 100644 --- a/src/i18n/nl/components/contextMenu.json +++ b/src/i18n/nl/components/contextMenu.json @@ -6,7 +6,7 @@ "action_false": "Volg gebruiker", "action_true": "Ontvolg" }, - "inLists": "Gebruiker van lijsten beheren", + "inLists": "Gebruiker op lijsten beheren", "mute": { "action_false": "Gebruiker dempen", "action_true": "Dempen opheffen voor gebruiker" @@ -20,8 +20,8 @@ } }, "at": { - "direct": "", - "public": "" + "direct": "Direct bericht", + "public": "Openbaar bericht" }, "copy": { "action": "Toot kopiëren", diff --git a/src/i18n/nl/components/mediaSelector.json b/src/i18n/nl/components/mediaSelector.json index 1c79a4c3..5f7596a6 100644 --- a/src/i18n/nl/components/mediaSelector.json +++ b/src/i18n/nl/components/mediaSelector.json @@ -1,6 +1,6 @@ { "title": "Selecteer mediabron", - "message": "Media EXIF-gegevens zijn niet geüpload", + "message": "Media EXIF gegevens worden niet geüpload", "options": { "image": "Foto's uploaden", "image_max": "Foto's uploaden (max {{max}})", diff --git a/src/i18n/nl/screens.json b/src/i18n/nl/screens.json index 6fab9103..264a63ba 100644 --- a/src/i18n/nl/screens.json +++ b/src/i18n/nl/screens.json @@ -1,7 +1,7 @@ { "screenshot": { "title": "Privacy Bescherming", - "message": "Gelieve de identiteit van een andere gebruiker niet openbaar te maken, zoals gebruikersnaam, avatar enz. Bedankt!", + "message": "Gelieve de identiteit van een andere gebruiker niet openbaar te maken, zoals gebruikersnaam of avatar en meer. Bedankt!", "button": "Bevestig" }, "localCorrupt": { diff --git a/src/i18n/nl/screens/tabs.json b/src/i18n/nl/screens/tabs.json index 307902d3..f17ece04 100644 --- a/src/i18n/nl/screens/tabs.json +++ b/src/i18n/nl/screens/tabs.json @@ -290,7 +290,7 @@ "heading": "Tooot beoordelen" }, "contact": { - "heading": "Contacteer tooot" + "heading": "Tooot contacteren" }, "version": "Version v{{version}}", "instanceVersion": "Mastodon versie v{{version}}" @@ -341,7 +341,7 @@ "placeholder": "naar..." }, "empty": { - "general": "Enter keyword to search for $t(screenTabs:shared.search.sections.accounts)$t(screenTabs:shared.search.sections.hashtags) or $t(screenTabs:shared.search.sections.statuses)", + "general": "Voer trefwoord in om te zoeken naar $t(screenTabs:shared.search.sections.accounts), $t(screenTabs:shared.search.sections.hashtags) of $t(screenTabs:shared.search.sections.statuses)", "advanced": { "header": "Geavanceerd zoeken", "example": { @@ -352,7 +352,7 @@ } }, "trending": { - "tags": "" + "tags": "Trending tags" } }, "sections": { @@ -363,7 +363,7 @@ "notFound": "Kan {{searchTerm}} niet vinden gerelateerd aan {{type}}" }, "toot": { - "name": "Discussies" + "name": "Gesprek" }, "users": { "accounts": { diff --git a/src/startup/audio.ts b/src/startup/audio.ts index 3055cbfd..f059a6af 100644 --- a/src/startup/audio.ts +++ b/src/startup/audio.ts @@ -4,8 +4,8 @@ import log from './log' const audio = () => { log('log', 'audio', 'setting audio playback default options') Audio.setAudioModeAsync({ - interruptionModeIOS: InterruptionModeIOS.DuckOthers, - interruptionModeAndroid: InterruptionModeAndroid.DuckOthers, + interruptionModeIOS: InterruptionModeIOS.DoNotMix, + interruptionModeAndroid: InterruptionModeAndroid.DoNotMix, playsInSilentModeIOS: true, staysActiveInBackground: false })