From c89612d87510fb389bfec4708fa64e9f71a91f08 Mon Sep 17 00:00:00 2001 From: xmflsct Date: Tue, 6 Dec 2022 21:54:32 +0100 Subject: [PATCH 01/44] Fixed #530 thanks to ChatGPT --- fastlane/metadata/en-US/release_notes.txt | 3 +-- fastlane/metadata/zh-Hans/release_notes.txt | 3 +-- package.json | 2 +- src/components/Timeline/Shared/Filtered.tsx | 4 ++-- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/fastlane/metadata/en-US/release_notes.txt b/fastlane/metadata/en-US/release_notes.txt index 12b2cab0..a9c58068 100644 --- a/fastlane/metadata/en-US/release_notes.txt +++ b/fastlane/metadata/en-US/release_notes.txt @@ -1,3 +1,2 @@ Enjoy toooting! This version includes following improvements and fixes: -- Fix toot attribution of favourites etc. -- Fix switching language \ No newline at end of file +- Fix whole word filter matching \ No newline at end of file diff --git a/fastlane/metadata/zh-Hans/release_notes.txt b/fastlane/metadata/zh-Hans/release_notes.txt index 51453bd1..17c7b65f 100644 --- a/fastlane/metadata/zh-Hans/release_notes.txt +++ b/fastlane/metadata/zh-Hans/release_notes.txt @@ -1,3 +1,2 @@ toooting愉快!此版本包括以下改进和修复: -- 修复嘟文收藏等显示 -- 修复不能切换语言 \ No newline at end of file +- 修复过滤整词功能 \ No newline at end of file diff --git a/package.json b/package.json index b822761c..50527daa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tooot", - "version": "4.6.6", + "version": "4.7.0", "description": "tooot for Mastodon", "author": "xmflsct ", "license": "GPL-3.0-or-later", diff --git a/src/components/Timeline/Shared/Filtered.tsx b/src/components/Timeline/Shared/Filtered.tsx index e370d585..a9495366 100644 --- a/src/components/Timeline/Shared/Filtered.tsx +++ b/src/components/Timeline/Shared/Filtered.tsx @@ -72,12 +72,12 @@ export const shouldFilter = ({ const escapedPhrase = filter.phrase.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string switch (filter.whole_word) { case true: - if (new RegExp(`\\B${escapedPhrase}\\b`).test(rawContent)) { + if (new RegExp(`\\b${escapedPhrase}\\b`, 'i').test(rawContent)) { shouldFilter = filter.phrase } break case false: - if (new RegExp(escapedPhrase).test(rawContent)) { + if (new RegExp(escapedPhrase, 'i').test(rawContent)) { shouldFilter = filter.phrase } break From 705c1d0ad06a17facb510eefdd1cc65672984c6b Mon Sep 17 00:00:00 2001 From: xmflsct Date: Wed, 7 Dec 2022 23:56:00 +0100 Subject: [PATCH 02/44] Fixed #529 --- fastlane/metadata/en-US/release_notes.txt | 1 + fastlane/metadata/zh-Hans/release_notes.txt | 1 + ios/Podfile.lock | 4 +- package.json | 2 +- src/components/Timeline/Shared/Translate.tsx | 73 ++++++++++++------- src/helpers/detectLanguage.ts | 10 +++ src/screens/Compose.tsx | 2 +- src/screens/Compose/DraftsList/Root.tsx | 2 +- .../Compose/Root/Header/SpoilerInput.tsx | 2 +- src/screens/Compose/Root/Header/TextInput.tsx | 2 +- src/screens/Compose/Root/Suggestion.tsx | 2 +- src/screens/Compose/utils/post.ts | 9 +++ .../utils/{formatText.tsx => processText.tsx} | 18 ++++- yarn.lock | 8 +- 14 files changed, 96 insertions(+), 40 deletions(-) create mode 100644 src/helpers/detectLanguage.ts rename src/screens/Compose/utils/{formatText.tsx => processText.tsx} (93%) diff --git a/fastlane/metadata/en-US/release_notes.txt b/fastlane/metadata/en-US/release_notes.txt index a9c58068..8f5ab42e 100644 --- a/fastlane/metadata/en-US/release_notes.txt +++ b/fastlane/metadata/en-US/release_notes.txt @@ -1,2 +1,3 @@ Enjoy toooting! This version includes following improvements and fixes: +- Automatic setting detected language when tooting - Fix whole word filter matching \ No newline at end of file diff --git a/fastlane/metadata/zh-Hans/release_notes.txt b/fastlane/metadata/zh-Hans/release_notes.txt index 17c7b65f..c4bf0028 100644 --- a/fastlane/metadata/zh-Hans/release_notes.txt +++ b/fastlane/metadata/zh-Hans/release_notes.txt @@ -1,2 +1,3 @@ toooting愉快!此版本包括以下改进和修复: +- 自动识别发嘟语言 - 修复过滤整词功能 \ No newline at end of file diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 82d8d8f0..324f7837 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -301,7 +301,7 @@ PODS: - React-Core - react-native-ios-context-menu (1.15.1): - React-Core - - react-native-language-detection (0.1.0): + - react-native-language-detection (0.2.2): - React - react-native-live-text-image-view (0.4.0): - React-Core @@ -739,7 +739,7 @@ SPEC CHECKSUMS: react-native-cameraroll: a40b082318eb1ecd0336a2f29d9f74b7f2c8cae8 react-native-image-picker: bf34f3f516d139ed3e24c5f5a381a91819e349ea react-native-ios-context-menu: b170594b4448c0cd10c79e13432216bac99de1ac - react-native-language-detection: 0e43195ad014974f1b7a31b64820eff34a243f2d + react-native-language-detection: f414937fa715108ab50a6269a3de0bcb95e4ceb0 react-native-live-text-image-view: 483bacfdba464162b8cf176bba555364f18b584c react-native-menu: 8e172cfcf0e42e92f028e7781eddf84d430cae24 react-native-netinfo: 2517ad504b3d303e90d7a431b0fcaef76d207983 diff --git a/package.json b/package.json index 50527daa..797fe2c6 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "react-native-htmlview": "^0.16.0", "react-native-image-picker": "^4.10.2", "react-native-ios-context-menu": "^1.15.1", - "react-native-language-detection": "^0.1.0", + "react-native-language-detection": "^0.2.2", "react-native-live-text-image-view": "^0.4.0", "react-native-pager-view": "^6.1.2", "react-native-reanimated": "^2.13.0", diff --git a/src/components/Timeline/Shared/Translate.tsx b/src/components/Timeline/Shared/Translate.tsx index 55eb4c8d..cdbd66b9 100644 --- a/src/components/Timeline/Shared/Translate.tsx +++ b/src/components/Timeline/Shared/Translate.tsx @@ -1,5 +1,6 @@ import { ParseHTML } from '@components/Parse' import CustomText from '@components/Text' +import detectLanguage from '@helpers/detectLanguage' import getLanguage from '@helpers/getLanguage' import { useTranslateQuery } from '@utils/queryHooks/translate' import { StyleConstants } from '@utils/styles/constants' @@ -7,38 +8,44 @@ import { useTheme } from '@utils/styles/ThemeManager' import * as Localization from 'expo-localization' import React, { useContext, useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' -import { Pressable } from 'react-native' +import { Platform, Pressable } from 'react-native' import { Circle } from 'react-native-animated-spinkit' -import detectLanguage from 'react-native-language-detection' import StatusContext from './Context' const TimelineTranslate = () => { - const { status, highlighted } = useContext(StatusContext) + const { status, highlighted, copiableContent } = useContext(StatusContext) if (!status || !highlighted) return null const { t } = useTranslation('componentTimeline') const { colors } = useTheme() - const text = status.spoiler_text ? [status.spoiler_text, status.content] : [status.content] + const backupTextProcessing = (): string[] => { + const text = status.spoiler_text ? [status.spoiler_text, status.content] : [status.content] - for (const i in text) { - for (const emoji of status.emojis) { - text[i] = text[i].replaceAll(`:${emoji.shortcode}:`, ' ') + for (const i in text) { + for (const emoji of status.emojis) { + text[i] = text[i].replaceAll(`:${emoji.shortcode}:`, ' ') + } + text[i] = text[i] + .replace(/(<([^>]+)>)/gi, ' ') + .replace(/@.*? /gi, ' ') + .replace(/#.*? /gi, ' ') + .replace(/http(s):\/\/.*? /gi, ' ') } - text[i] = text[i] - .replace(/(<([^>]+)>)/gi, ' ') - .replace(/@.*? /gi, ' ') - .replace(/#.*? /gi, ' ') - .replace(/http(s):\/\/.*? /gi, ' ') + return text } + const text = copiableContent?.current.content + ? [copiableContent?.current.content] + : backupTextProcessing() - const [detectedLanguage, setDetectedLanguage] = useState('') + const [detectedLanguage, setDetectedLanguage] = useState<{ + language: string + confidence: number + }>({ language: status.language || '', confidence: 0 }) useEffect(() => { const detect = async () => { - const result = await detectLanguage(text.join(`\n\n`)).catch(() => { - // No need to log language detection failure - }) - result?.detected && setDetectedLanguage(result.detected.slice(0, 2)) + const result = await detectLanguage(text.join('\n\n')) + result && setDetectedLanguage(result) } detect() }, []) @@ -50,20 +57,36 @@ const TimelineTranslate = () => { const [enabled, setEnabled] = useState(false) const { refetch, data, isLoading, isSuccess, isError } = useTranslateQuery({ - source: detectedLanguage, + source: detectedLanguage.language, target: targetLanguage, text, options: { enabled } }) + const devView = () => { + return __DEV__ ? ( + {` Source: ${ + detectedLanguage?.language + }; Confidence: ${ + detectedLanguage?.confidence.toString().slice(0, 5) || 'null' + }; Target: ${targetLanguage}`} + ) : null + } + if (!detectedLanguage) { - return null + return devView() } - if (Localization.locale.slice(0, 2).includes(detectedLanguage)) { - return null + if ( + Platform.OS === 'ios' && + Localization.locale.slice(0, 2).includes(detectedLanguage.language.slice(0, 2)) + ) { + return devView() } - if (settingsLanguage?.slice(0, 2).includes(detectedLanguage)) { - return null + if ( + Platform.OS === 'android' && + settingsLanguage?.slice(0, 2).includes(detectedLanguage.language.slice(0, 2)) + ) { + return devView() } return ( @@ -102,9 +125,6 @@ const TimelineTranslate = () => { }) : t('shared.translate.default')} - - {__DEV__ ? ` Source: ${detectedLanguage}; Target: ${targetLanguage}` : undefined} - {isLoading ? ( { /> ) : null} + {devView()} {data && data.error === undefined ? data.text.map((d, i) => ) : null} diff --git a/src/helpers/detectLanguage.ts b/src/helpers/detectLanguage.ts new file mode 100644 index 00000000..c218344d --- /dev/null +++ b/src/helpers/detectLanguage.ts @@ -0,0 +1,10 @@ +import detect from 'react-native-language-detection' + +const detectLanguage = async ( + text: string +): Promise<{ language: string; confidence: number } | null> => { + const possibleLanguages = await detect(text).catch(() => {}) + return possibleLanguages ? possibleLanguages.filter(lang => lang.confidence > 0.5)?.[0] : null +} + +export default detectLanguage diff --git a/src/screens/Compose.tsx b/src/screens/Compose.tsx index b53fa346..a375c02e 100644 --- a/src/screens/Compose.tsx +++ b/src/screens/Compose.tsx @@ -6,7 +6,7 @@ import { createNativeStackNavigator } from '@react-navigation/native-stack' import haptics from '@root/components/haptics' import { useAppDispatch } from '@root/store' import ComposeRoot from '@screens/Compose/Root' -import formatText from '@screens/Compose/utils/formatText' +import { formatText } from '@screens/Compose/utils/processText' import { RootStackScreenProps } from '@utils/navigation/navigators' import { useTimelineMutation } from '@utils/queryHooks/timeline' import { updateStoreReview } from '@utils/slices/contextsSlice' diff --git a/src/screens/Compose/DraftsList/Root.tsx b/src/screens/Compose/DraftsList/Root.tsx index 7ea9ffa1..23aa0831 100644 --- a/src/screens/Compose/DraftsList/Root.tsx +++ b/src/screens/Compose/DraftsList/Root.tsx @@ -15,7 +15,7 @@ import { PanGestureHandler } from 'react-native-gesture-handler' import { SwipeListView } from 'react-native-swipe-list-view' import { useSelector } from 'react-redux' import ComposeContext from '../utils/createContext' -import formatText from '../utils/formatText' +import { formatText } from '../utils/processText' import { ComposeStateDraft, ExtendedAttachment } from '../utils/types' export interface Props { diff --git a/src/screens/Compose/Root/Header/SpoilerInput.tsx b/src/screens/Compose/Root/Header/SpoilerInput.tsx index 644737ae..2a7b1621 100644 --- a/src/screens/Compose/Root/Header/SpoilerInput.tsx +++ b/src/screens/Compose/Root/Header/SpoilerInput.tsx @@ -8,7 +8,7 @@ import { useTranslation } from 'react-i18next' import { TextInput } from 'react-native' import { useSelector } from 'react-redux' import ComposeContext from '../../utils/createContext' -import formatText from '../../utils/formatText' +import { formatText } from '../../utils/processText' const ComposeSpoilerInput: React.FC = () => { const { composeState, composeDispatch } = useContext(ComposeContext) diff --git a/src/screens/Compose/Root/Header/TextInput.tsx b/src/screens/Compose/Root/Header/TextInput.tsx index ef89d0e1..1b19c3f3 100644 --- a/src/screens/Compose/Root/Header/TextInput.tsx +++ b/src/screens/Compose/Root/Header/TextInput.tsx @@ -10,7 +10,7 @@ import { useTranslation } from 'react-i18next' import { Alert } from 'react-native' import { useSelector } from 'react-redux' import ComposeContext from '../../utils/createContext' -import formatText from '../../utils/formatText' +import { formatText } from '../../utils/processText' import { uploadAttachment } from '../Footer/addAttachment' const ComposeTextInput: React.FC = () => { diff --git a/src/screens/Compose/Root/Suggestion.tsx b/src/screens/Compose/Root/Suggestion.tsx index 0c317c9b..2731d3d7 100644 --- a/src/screens/Compose/Root/Suggestion.tsx +++ b/src/screens/Compose/Root/Suggestion.tsx @@ -3,7 +3,7 @@ import haptics from '@components/haptics' import ComponentHashtag from '@components/Hashtag' import React, { useContext, useEffect } from 'react' import ComposeContext from '../utils/createContext' -import formatText from '../utils/formatText' +import { formatText } from '../utils/processText' type Props = { item: Mastodon.Account & Mastodon.Tag } diff --git a/src/screens/Compose/utils/post.ts b/src/screens/Compose/utils/post.ts index 348225ef..c9e4f116 100644 --- a/src/screens/Compose/utils/post.ts +++ b/src/screens/Compose/utils/post.ts @@ -1,7 +1,9 @@ import apiInstance, { InstanceResponse } from '@api/instance' +import detectLanguage from '@helpers/detectLanguage' import { ComposeState } from '@screens/Compose/utils/types' import { RootStackParamList } from '@utils/navigation/navigators' import * as Crypto from 'expo-crypto' +import { getPureContent } from './processText' const composePost = async ( params: RootStackParamList['Screen-Compose'], @@ -9,6 +11,13 @@ const composePost = async ( ): Promise> => { const formData = new FormData() + const detectedLanguage = await detectLanguage( + getPureContent([composeState.spoiler.raw, composeState.text.raw].join('\n\n')) + ) + if (detectedLanguage) { + formData.append('language', detectedLanguage.language) + } + if (composeState.replyToStatus) { try { await apiInstance({ diff --git a/src/screens/Compose/utils/formatText.tsx b/src/screens/Compose/utils/processText.tsx similarity index 93% rename from src/screens/Compose/utils/formatText.tsx rename to src/screens/Compose/utils/processText.tsx index a82be98f..46be6143 100644 --- a/src/screens/Compose/utils/formatText.tsx +++ b/src/screens/Compose/utils/processText.tsx @@ -150,7 +150,7 @@ const formatText = ({ textInput, composeDispatch, content, disableDebounce = fal }) children.push(_content) contentLength = contentLength + _content.length - + getPureContent(content) composeDispatch({ type: textInput, payload: { @@ -161,4 +161,18 @@ const formatText = ({ textInput, composeDispatch, content, disableDebounce = fal }) } -export default formatText +const getPureContent = (content: string): string => { + const tags = linkify.match(content) + if (!tags) { + return content + } + + let _content = content + for (const tag of tags) { + _content = _content.replace(tag.raw, '') + } + + return _content.replace(/\s\s+/g, ' ') +} + +export { formatText, getPureContent } diff --git a/yarn.lock b/yarn.lock index 05ef3028..f07fdc90 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10853,10 +10853,10 @@ react-native-iphone-x-helper@^1.3.1: resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz#20c603e9a0e765fd6f97396638bdeb0e5a60b010" integrity sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg== -react-native-language-detection@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/react-native-language-detection/-/react-native-language-detection-0.1.0.tgz#06b5d20bffb60dbbd599c8e62b6acf500952afa8" - integrity sha512-26CLndVMmMbVp40Y9Herza73nfR08JFTcYkJ3MX5MIQbGRoqgNAG89z8pA1y7dPHHK1Nfa6AWKAYpNv7tMRCaw== +react-native-language-detection@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/react-native-language-detection/-/react-native-language-detection-0.2.2.tgz#4cc94177aa1c4575c4656f6d42456fa6c72ed5db" + integrity sha512-6u1JBgr+UG/GX/xMmT4K8CaBlSep4XfM91jwUzRA/Y3bMCHDx7bNVxGQvqvzkmOchby9h66XD8F5Eo+kV01CAA== react-native-live-text-image-view@^0.4.0: version "0.4.0" From 3345692719626c5f6e8d9947e426bcceba943eb7 Mon Sep 17 00:00:00 2001 From: xmflsct Date: Thu, 8 Dec 2022 00:11:03 +0100 Subject: [PATCH 03/44] Remove review menu --- src/i18n/en/screens/tabs.json | 3 --- src/screens/Tabs/Me/Settings/Tooot.tsx | 22 ++++++---------------- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/src/i18n/en/screens/tabs.json b/src/i18n/en/screens/tabs.json index b286a094..e2abcd89 100644 --- a/src/i18n/en/screens/tabs.json +++ b/src/i18n/en/screens/tabs.json @@ -290,9 +290,6 @@ "support": { "heading": "Support tooot" }, - "review": { - "heading": "Review tooot" - }, "contact": { "heading": "Contact tooot" }, diff --git a/src/screens/Tabs/Me/Settings/Tooot.tsx b/src/screens/Tabs/Me/Settings/Tooot.tsx index a6fcf735..a8c3ef05 100644 --- a/src/screens/Tabs/Me/Settings/Tooot.tsx +++ b/src/screens/Tabs/Me/Settings/Tooot.tsx @@ -4,13 +4,11 @@ import { useNavigation } from '@react-navigation/native' import { StyleConstants } from '@utils/styles/constants' import { useTheme } from '@utils/styles/ThemeManager' import * as Linking from 'expo-linking' -import * as StoreReview from 'expo-store-review' import * as WebBrowser from 'expo-web-browser' import React from 'react' import { useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' import { getInstanceActive, getInstanceVersion } from '@utils/slices/instancesSlice' -import { isDevelopment, isRelease } from '@utils/checkEnvironment' import { Platform } from 'react-native' import Constants from 'expo-constants' import { getExpoToken } from '@utils/slices/appSlice' @@ -27,6 +25,12 @@ const SettingsTooot: React.FC = () => { return ( + } + iconBack='ChevronRight' + onPress={() => Linking.openURL('https://www.buymeacoffee.com/xmflsct')} + /> { iconBack='ChevronRight' onPress={() => Linking.openURL('https://feedback.tooot.app/feature-requests')} /> - } - iconBack='ChevronRight' - onPress={() => Linking.openURL('https://www.buymeacoffee.com/xmflsct')} - /> - {isDevelopment || isRelease ? ( - } - iconBack='ChevronRight' - onPress={() => StoreReview?.isAvailableAsync().then(() => StoreReview?.requestReview())} - /> - ) : null} } From 3e081ab377bf5de98be9088e3bbcffc74c4ea269 Mon Sep 17 00:00:00 2001 From: xmflsct Date: Thu, 8 Dec 2022 00:13:41 +0100 Subject: [PATCH 04/44] Bringing back building apk --- fastlane/Fastfile | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index c4d1f624..b75182a9 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -108,6 +108,29 @@ private_lane :build_android do end end +desc "Build Android apk" +private_lane :build_android_apk do + sh("echo #{ENV["ANDROID_KEYSTORE"]} | base64 -d | tee #{File.expand_path('..', Dir.pwd)}/android/tooot.jks >/dev/null", log: false) + + prepare_playstore_android + + build_android_app( + task: 'assemble', + build_type: 'release', + project_dir: "./android", + print_command: true, + print_command_output: true, + properties: { + "android.injected.signing.store.file" => "#{File.expand_path('..', Dir.pwd)}/android/tooot.jks", + "android.injected.signing.store.password" => ENV["ANDROID_KEYSTORE_PASSWORD"], + "android.injected.signing.key.alias" => ENV["ANDROID_KEYSTORE_ALIAS"], + "android.injected.signing.key.password" => ENV["ANDROID_KEYSTORE_KEY_PASSWORD"], + } + ) + + sh "mv #{lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]} #{File.expand_path('..', Dir.pwd)}/tooot-#{GITHUB_RELEASE}.apk" +end + lane :ios do cocoapods(clean_install: true, podfile: "./ios/Podfile") build_ios @@ -121,6 +144,7 @@ end lane :release do if ENVIRONMENT == 'release' + build_android_apk set_github_release( repository_name: GITHUB_REPO, name: GITHUB_RELEASE, @@ -128,6 +152,7 @@ lane :release do description: "No changelog provided", commitish: git_branch, is_prerelease: false + upload_assets: ["#{File.expand_path('..', Dir.pwd)}/tooot-#{GITHUB_RELEASE}.apk"] ) end rocket From d6b3eabb1835292b763ae24bda45c0bb39bbcf42 Mon Sep 17 00:00:00 2001 From: xmflsct Date: Thu, 8 Dec 2022 00:19:22 +0100 Subject: [PATCH 05/44] Fixed #527 --- src/screens/Compose/Root/Footer/Reply.tsx | 25 +++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/screens/Compose/Root/Footer/Reply.tsx b/src/screens/Compose/Root/Footer/Reply.tsx index 0f86e146..2f5d7928 100644 --- a/src/screens/Compose/Root/Footer/Reply.tsx +++ b/src/screens/Compose/Root/Footer/Reply.tsx @@ -1,4 +1,5 @@ import TimelineDefault from '@components/Timeline/Default' +import { StyleConstants } from '@utils/styles/constants' import { useTheme } from '@utils/styles/ThemeManager' import React, { useContext } from 'react' import { StyleSheet, View } from 'react-native' @@ -11,16 +12,24 @@ const ComposeReply: React.FC = () => { const { colors } = useTheme() return ( - - + + {replyToStatus ? ( + + ) : null} ) } -const styles = StyleSheet.create({ - base: { - borderTopWidth: StyleSheet.hairlineWidth - } -}) - export default React.memo(ComposeReply, () => true) From 7a14c89e5bb9bafbc1f992121fead935388a8e9e Mon Sep 17 00:00:00 2001 From: xmflsct Date: Thu, 8 Dec 2022 00:38:05 +0100 Subject: [PATCH 06/44] Fixed #537 --- src/screens/Compose/Root/Header/TextInput.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/screens/Compose/Root/Header/TextInput.tsx b/src/screens/Compose/Root/Header/TextInput.tsx index 1b19c3f3..a74e85a1 100644 --- a/src/screens/Compose/Root/Header/TextInput.tsx +++ b/src/screens/Compose/Root/Header/TextInput.tsx @@ -27,6 +27,7 @@ const ComposeTextInput: React.FC = () => { return ( Date: Fri, 9 Dec 2022 00:35:02 +0100 Subject: [PATCH 07/44] Simple fix #540 --- package.json | 2 +- src/screens/Compose/DraftsList/Root.tsx | 15 +++++---------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 797fe2c6..42c4ade9 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "start": "react-native start", "android": "react-native run-android", "iphone": "react-native run-ios --simulator 'iPhone 14 Pro'", - "ipad": "react-native run-ios --simulator 'iPad Pro (11-inch) (3rd generation)'", + "ipad": "react-native run-ios --simulator 'iPad Pro (11-inch) (4th generation)'", "app:build": "bundle exec fastlane", "clean": "react-native-clean-project", "postinstall": "patch-package" diff --git a/src/screens/Compose/DraftsList/Root.tsx b/src/screens/Compose/DraftsList/Root.tsx index 23aa0831..7b3e870f 100644 --- a/src/screens/Compose/DraftsList/Root.tsx +++ b/src/screens/Compose/DraftsList/Root.tsx @@ -159,22 +159,23 @@ const ComposeDraftsListRoot: React.FC = ({ timestamp }) => { data={instanceDrafts} renderItem={renderItem} renderHiddenItem={({ item }) => ( - dispatch(removeInstanceDraft(item.timestamp))} children={ - dispatch(removeInstanceDraft(item.timestamp))} children={ = ({ timestamp }) => { )} disableRightSwipe={true} rightOpenValue={-actionWidth} - // previewRowKey={ - // instanceDrafts?.length - // ? instanceDrafts[0].timestamp.toString() - // : undefined - // } - // previewDuration={350} previewOpenValue={-actionWidth / 2} ItemSeparatorComponent={ComponentSeparator} keyExtractor={item => item.timestamp.toString()} From 44f83e44b98abbd638a36c0b5f97dd1ace87f9d0 Mon Sep 17 00:00:00 2001 From: xmflsct Date: Fri, 9 Dec 2022 00:48:34 +0100 Subject: [PATCH 08/44] Fixed #539 Respect system's reduced motion enabled setting --- src/components/Timeline/Shared/Attachment/Video.tsx | 13 ++++++++----- src/screens/Tabs/Local.tsx | 6 +----- src/utils/styles/layoutAnimation.ts | 8 ++++++-- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/components/Timeline/Shared/Attachment/Video.tsx b/src/components/Timeline/Shared/Attachment/Video.tsx index 518a5b78..b9ce9d98 100644 --- a/src/components/Timeline/Shared/Attachment/Video.tsx +++ b/src/components/Timeline/Shared/Attachment/Video.tsx @@ -7,6 +7,7 @@ import { Blurhash } from 'react-native-blurhash' import attachmentAspectRatio from './aspectRatio' import AttachmentAltText from './AltText' import { Platform } from 'expo-modules-core' +import { useAccessibility } from '@utils/accessibility/AccessibilityManager' export interface Props { total: number @@ -23,6 +24,8 @@ const AttachmentVideo: React.FC = ({ video, gifv = false }) => { + const { reduceMotionEnabled } = useAccessibility() + const videoPlayer = useRef