Fix proper reblog permission

https://github.com/tooot-app/app/issues/274
This commit is contained in:
Zhiyuan Zheng 2022-05-16 21:54:11 +02:00
parent 00b0ad3ac5
commit d0aa55d021
6 changed files with 20 additions and 12 deletions

View File

@ -4,7 +4,7 @@
"native": "220508", "native": "220508",
"major": 4, "major": 4,
"minor": 0, "minor": 0,
"patch": 0, "patch": 1,
"expo": "45.0.0" "expo": "45.0.0"
}, },
"description": "tooot app for Mastodon", "description": "tooot app for Mastodon",

View File

@ -54,7 +54,6 @@ import { enableFreeze } from 'react-native-screens'
import { QueryClientProvider } from 'react-query' import { QueryClientProvider } from 'react-query'
import { Provider } from 'react-redux' import { Provider } from 'react-redux'
import { PersistGate } from 'redux-persist/integration/react' import { PersistGate } from 'redux-persist/integration/react'
import { IntlProvider } from 'react-intl'
Platform.select({ Platform.select({
android: LogBox.ignoreLogs(['Setting a timer for a long period of time']) android: LogBox.ignoreLogs(['Setting a timer for a long period of time'])
@ -132,9 +131,7 @@ const App: React.FC = () => {
<ActionSheetProvider> <ActionSheetProvider>
<AccessibilityManager> <AccessibilityManager>
<ThemeManager> <ThemeManager>
<IntlProvider locale={language}> <Screens localCorrupt={localCorrupt} />
<Screens localCorrupt={localCorrupt} />
</IntlProvider>
</ThemeManager> </ThemeManager>
</AccessibilityManager> </AccessibilityManager>
</ActionSheetProvider> </ActionSheetProvider>

View File

@ -26,6 +26,7 @@ import * as Linking from 'expo-linking'
import { addScreenshotListener } from 'expo-screen-capture' import { addScreenshotListener } from 'expo-screen-capture'
import React, { useCallback, useEffect, useRef, useState } from 'react' import React, { useCallback, useEffect, useRef, useState } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { IntlProvider } from 'react-intl'
import { Alert, Platform, StatusBar } from 'react-native' import { Alert, Platform, StatusBar } from 'react-native'
import ShareMenu from 'react-native-share-menu' import ShareMenu from 'react-native-share-menu'
import { useSelector } from 'react-redux' import { useSelector } from 'react-redux'
@ -39,7 +40,7 @@ export interface Props {
} }
const Screens: React.FC<Props> = ({ localCorrupt }) => { const Screens: React.FC<Props> = ({ localCorrupt }) => {
const { t } = useTranslation('screens') const { i18n, t } = useTranslation('screens')
const dispatch = useAppDispatch() const dispatch = useAppDispatch()
const instanceActive = useSelector(getInstanceActive) const instanceActive = useSelector(getInstanceActive)
const { colors, theme } = useTheme() const { colors, theme } = useTheme()
@ -320,7 +321,7 @@ const Screens: React.FC<Props> = ({ localCorrupt }) => {
}, []) }, [])
return ( return (
<> <IntlProvider locale={i18n.language}>
<StatusBar backgroundColor={colors.backgroundDefault} /> <StatusBar backgroundColor={colors.backgroundDefault} />
<NavigationContainer <NavigationContainer
ref={navigationRef} ref={navigationRef}
@ -381,7 +382,7 @@ const Screens: React.FC<Props> = ({ localCorrupt }) => {
<Message /> <Message />
</NavigationContainer> </NavigationContainer>
</> </IntlProvider>
) )
} }

View File

@ -156,6 +156,7 @@ const TimelineDefault = React.memo(
rootQueryKey={rootQueryKey} rootQueryKey={rootQueryKey}
highlighted={highlighted} highlighted={highlighted}
status={actualStatus} status={actualStatus}
ownAccount={ownAccount}
accts={uniqBy( accts={uniqBy(
( (
[actualStatus.account] as Mastodon.Account[] & [actualStatus.account] as Mastodon.Account[] &

View File

@ -22,6 +22,7 @@ export interface Props {
rootQueryKey?: QueryKeyTimeline rootQueryKey?: QueryKeyTimeline
highlighted: boolean highlighted: boolean
status: Mastodon.Status status: Mastodon.Status
ownAccount?: boolean
accts: Mastodon.Account['acct'][] // When replying to conversations accts: Mastodon.Account['acct'][] // When replying to conversations
reblog: boolean reblog: boolean
} }
@ -31,6 +32,7 @@ const TimelineActions: React.FC<Props> = ({
rootQueryKey, rootQueryKey,
highlighted, highlighted,
status, status,
ownAccount = false,
accts, accts,
reblog reblog
}) => { }) => {
@ -207,7 +209,8 @@ const TimelineActions: React.FC<Props> = ({
<Icon <Icon
name='Repeat' name='Repeat'
color={ color={
status.visibility === 'direct' status.visibility === 'direct' ||
(status.visibility === 'private' && !ownAccount)
? colors.disabled ? colors.disabled
: color(status.reblogged) : color(status.reblogged)
} }
@ -216,7 +219,10 @@ const TimelineActions: React.FC<Props> = ({
{status.reblogs_count > 0 ? ( {status.reblogs_count > 0 ? (
<CustomText <CustomText
style={{ style={{
color: color(status.reblogged), color:
status.visibility === 'private' && !ownAccount
? colors.disabled
: color(status.reblogged),
fontSize: StyleConstants.Font.Size.M, fontSize: StyleConstants.Font.Size.M,
marginLeft: StyleConstants.Spacing.XS marginLeft: StyleConstants.Spacing.XS
}} }}
@ -297,7 +303,10 @@ const TimelineActions: React.FC<Props> = ({
style={styles.action} style={styles.action}
onPress={onPressReblog} onPress={onPressReblog}
children={childrenReblog} children={childrenReblog}
disabled={status.visibility === 'direct'} disabled={
status.visibility === 'direct' ||
(status.visibility === 'private' && !ownAccount)
}
/> />
<Pressable <Pressable

View File

@ -4,7 +4,7 @@ import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager' import { useTheme } from '@utils/styles/ThemeManager'
import React from 'react' import React from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { FormattedDate, FormattedRelativeTime, FormattedTime } from 'react-intl' import { FormattedDate, FormattedRelativeTime } from 'react-intl'
export interface Props { export interface Props {
created_at: Mastodon.Status['created_at'] | number created_at: Mastodon.Status['created_at'] | number