mirror of
				https://github.com/tooot-app/app
				synced 2025-06-05 22:19:13 +02:00 
			
		
		
		
	| @@ -119,6 +119,8 @@ const Screens: React.FC<Props> = ({ localCorrupt }) => { | |||||||
|     routeRef.current = { |     routeRef.current = { | ||||||
|       name: currentRoute?.name, |       name: currentRoute?.name, | ||||||
|       params: currentRoute?.params |       params: currentRoute?.params | ||||||
|  |         ? JSON.stringify(currentRoute.params) | ||||||
|  |         : undefined | ||||||
|     } |     } | ||||||
|   }, []) |   }, []) | ||||||
|   const navigationContainerOnStateChange = useCallback(() => { |   const navigationContainerOnStateChange = useCallback(() => { | ||||||
| @@ -144,7 +146,10 @@ const Screens: React.FC<Props> = ({ localCorrupt }) => { | |||||||
|  |  | ||||||
|   return ( |   return ( | ||||||
|     <> |     <> | ||||||
|       <StatusBar barStyle={barStyle[mode]} backgroundColor={theme.backgroundDefault} /> |       <StatusBar | ||||||
|  |         barStyle={barStyle[mode]} | ||||||
|  |         backgroundColor={theme.backgroundDefault} | ||||||
|  |       /> | ||||||
|       <NavigationContainer |       <NavigationContainer | ||||||
|         ref={navigationRef} |         ref={navigationRef} | ||||||
|         theme={themes[mode]} |         theme={themes[mode]} | ||||||
|   | |||||||
| @@ -86,7 +86,7 @@ const HeaderRight: React.FC<Props> = ({ | |||||||
|             : undefined, |             : undefined, | ||||||
|           minHeight: 44, |           minHeight: 44, | ||||||
|           minWidth: 44, |           minWidth: 44, | ||||||
|           marginLeft: native |           marginRight: native | ||||||
|             ? -StyleConstants.Spacing.S |             ? -StyleConstants.Spacing.S | ||||||
|             : StyleConstants.Spacing.S, |             : StyleConstants.Spacing.S, | ||||||
|           ...(type === 'icon' && { |           ...(type === 'icon' && { | ||||||
|   | |||||||
| @@ -95,6 +95,7 @@ const AttachmentAudio: React.FC<Props> = ({ | |||||||
|           </> |           </> | ||||||
|         )} |         )} | ||||||
|       </View> |       </View> | ||||||
|  |       {audio.meta.original.duration ? ( | ||||||
|         <View |         <View | ||||||
|           style={{ |           style={{ | ||||||
|             alignSelf: 'flex-end', |             alignSelf: 'flex-end', | ||||||
| @@ -124,6 +125,7 @@ const AttachmentAudio: React.FC<Props> = ({ | |||||||
|             thumbTintColor={theme.primaryOverlay} |             thumbTintColor={theme.primaryOverlay} | ||||||
|           /> |           /> | ||||||
|         </View> |         </View> | ||||||
|  |       ) : null} | ||||||
|     </View> |     </View> | ||||||
|   ) |   ) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -23,6 +23,19 @@ import ImageViewer from './ImageViewer/Root' | |||||||
| const saveImage = async ( | const saveImage = async ( | ||||||
|   image: Nav.RootStackParamList['Screen-ImagesViewer']['imageUrls'][0] |   image: Nav.RootStackParamList['Screen-ImagesViewer']['imageUrls'][0] | ||||||
| ) => { | ) => { | ||||||
|  |   if (Platform.OS === 'ios') { | ||||||
|  |     CameraRoll.save(image.url) | ||||||
|  |       .then(() => haptics('Success')) | ||||||
|  |       .catch(() => { | ||||||
|  |         if (image.remote_url) { | ||||||
|  |           CameraRoll.save(image.remote_url) | ||||||
|  |             .then(() => haptics('Success')) | ||||||
|  |             .catch(() => haptics('Error')) | ||||||
|  |         } else { | ||||||
|  |           haptics('Error') | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |   } else if (Platform.OS === 'android') { | ||||||
|     const hasAndroidPermission = async () => { |     const hasAndroidPermission = async () => { | ||||||
|       const permission = PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE |       const permission = PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE | ||||||
|  |  | ||||||
| @@ -35,20 +48,10 @@ const saveImage = async ( | |||||||
|       return status === 'granted' |       return status === 'granted' | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   if (Platform.OS === 'android' && !(await hasAndroidPermission())) { |     if (!(await hasAndroidPermission())) { | ||||||
|       return |       return | ||||||
|     } |     } | ||||||
|   CameraRoll.save(image.url) |  | ||||||
|     .then(() => haptics('Success')) |  | ||||||
|     .catch(() => { |  | ||||||
|       if (image.remote_url) { |  | ||||||
|         CameraRoll.save(image.remote_url) |  | ||||||
|           .then(() => haptics('Success')) |  | ||||||
|           .catch(() => haptics('Error')) |  | ||||||
|       } else { |  | ||||||
|         haptics('Error') |  | ||||||
|   } |   } | ||||||
|     }) |  | ||||||
| } | } | ||||||
|  |  | ||||||
| const HeaderComponent = React.memo( | const HeaderComponent = React.memo( | ||||||
| @@ -109,6 +112,7 @@ const HeaderComponent = React.memo( | |||||||
|         <HeaderLeft |         <HeaderLeft | ||||||
|           content='X' |           content='X' | ||||||
|           native={false} |           native={false} | ||||||
|  |           background | ||||||
|           onPress={() => navigation.goBack()} |           onPress={() => navigation.goBack()} | ||||||
|         /> |         /> | ||||||
|         <HeaderCenter |         <HeaderCenter | ||||||
| @@ -118,6 +122,7 @@ const HeaderComponent = React.memo( | |||||||
|         <HeaderRight |         <HeaderRight | ||||||
|           content='MoreHorizontal' |           content='MoreHorizontal' | ||||||
|           native={false} |           native={false} | ||||||
|  |           background | ||||||
|           onPress={onPress} |           onPress={onPress} | ||||||
|         /> |         /> | ||||||
|       </View> |       </View> | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ import { MenuContainer, MenuRow } from '@components/Menu' | |||||||
| import { updateInstancePush } from '@utils/slices/instances/updatePush' | import { updateInstancePush } from '@utils/slices/instances/updatePush' | ||||||
| import { updateInstancePushAlert } from '@utils/slices/instances/updatePushAlert' | import { updateInstancePushAlert } from '@utils/slices/instances/updatePushAlert' | ||||||
| import { updateInstancePushDecode } from '@utils/slices/instances/updatePushDecode' | import { updateInstancePushDecode } from '@utils/slices/instances/updatePushDecode' | ||||||
| import { getInstancePush } from '@utils/slices/instancesSlice' | import { clearPushLoading, getInstancePush } from '@utils/slices/instancesSlice' | ||||||
| import * as WebBrowser from 'expo-web-browser' | import * as WebBrowser from 'expo-web-browser' | ||||||
| import * as Notifications from 'expo-notifications' | import * as Notifications from 'expo-notifications' | ||||||
| import React, { useEffect, useMemo, useState } from 'react' | import React, { useEffect, useMemo, useState } from 'react' | ||||||
| @@ -36,6 +36,10 @@ const ScreenMeSettingsPush: React.FC = () => { | |||||||
|     } |     } | ||||||
|   }, []) |   }, []) | ||||||
|  |  | ||||||
|  |   useEffect(() => { | ||||||
|  |     dispatch(clearPushLoading()) | ||||||
|  |   }, []) | ||||||
|  |  | ||||||
|   const isLoading = instancePush?.global.loading || instancePush?.decode.loading |   const isLoading = instancePush?.global.loading || instancePush?.decode.loading | ||||||
|  |  | ||||||
|   const alerts = useMemo(() => { |   const alerts = useMemo(() => { | ||||||
|   | |||||||
| @@ -164,6 +164,16 @@ const instancesSlice = createSlice({ | |||||||
|         draft => draft.timestamp !== action.payload |         draft => draft.timestamp !== action.payload | ||||||
|       ) |       ) | ||||||
|     }, |     }, | ||||||
|  |     clearPushLoading: ({ instances }) => { | ||||||
|  |       const activeIndex = findInstanceActive(instances) | ||||||
|  |       instances[activeIndex].push.global.loading = false | ||||||
|  |       instances[activeIndex].push.decode.loading = false | ||||||
|  |       instances[activeIndex].push.alerts.favourite.loading = false | ||||||
|  |       instances[activeIndex].push.alerts.follow.loading = false | ||||||
|  |       instances[activeIndex].push.alerts.mention.loading = false | ||||||
|  |       instances[activeIndex].push.alerts.poll.loading = false | ||||||
|  |       instances[activeIndex].push.alerts.reblog.loading = false | ||||||
|  |     }, | ||||||
|     disableAllPushes: ({ instances }) => { |     disableAllPushes: ({ instances }) => { | ||||||
|       instances = instances.map(instance => { |       instances = instances.map(instance => { | ||||||
|         let newInstance = instance |         let newInstance = instance | ||||||
| @@ -352,6 +362,7 @@ export const { | |||||||
|   updateInstanceNotificationsFilter, |   updateInstanceNotificationsFilter, | ||||||
|   updateInstanceDraft, |   updateInstanceDraft, | ||||||
|   removeInstanceDraft, |   removeInstanceDraft, | ||||||
|  |   clearPushLoading, | ||||||
|   disableAllPushes |   disableAllPushes | ||||||
| } = instancesSlice.actions | } = instancesSlice.actions | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user