mirror of https://github.com/tooot-app/app
Merge branch 'main' into release
This commit is contained in:
commit
e58f9cb2e7
|
@ -8,14 +8,14 @@
|
||||||
|
|
||||||
Please **do not** create a pull request to update translation. tooot's translation is managed through [https://crowdin.tooot.app/](https://crowdin.tooot.app/) and Crowdin struggles to properly sync two ways. If there is a minor update and you do not want to register an account on Crowdin, please open an issue.
|
Please **do not** create a pull request to update translation. tooot's translation is managed through [https://crowdin.tooot.app/](https://crowdin.tooot.app/) and Crowdin struggles to properly sync two ways. If there is a minor update and you do not want to register an account on Crowdin, please open an issue.
|
||||||
|
|
||||||
|
|
||||||
## Special thanks
|
## Special thanks
|
||||||
|
|
||||||
- [@a_mento](https://crowdin.com/profile/a_mento) for Basques translation
|
- [@a_mento](https://crowdin.com/profile/a_mento) for Basques translation
|
||||||
- [@dzmitry.zubialevich](https://crowdin.com/profile/dzmitry.zubialevich) for Belarusian translation
|
- [@dzmitry.zubialevich](https://crowdin.com/profile/dzmitry.zubialevich) for Belarusian translation
|
||||||
- [@amrtf](https://crowdin.com/profile/amrtf) for Catalan and Spanish translation
|
- [@amrtf](https://crowdin.com/profile/amrtf) for Catalan and Spanish translation
|
||||||
- [@forenta](https://github.com/forenta) for German translation
|
|
||||||
- [@pat](https://piaille.fr/@pat) for French translation
|
- [@pat](https://piaille.fr/@pat) for French translation
|
||||||
|
- [@forenta](https://github.com/forenta) for German translation
|
||||||
|
- [@heracl.es](https://heracl.es/) for Greek translation
|
||||||
- [@andrigamerita](https://github.com/andrigamerita) for Italian translation
|
- [@andrigamerita](https://github.com/andrigamerita) for Italian translation
|
||||||
- [@Hikaru](https://github.com/Hikali-47041) and [@la_la](https://mstdn.jp/@la_la_la) for Japanese translation
|
- [@Hikaru](https://github.com/Hikali-47041) and [@la_la](https://mstdn.jp/@la_la_la) for Japanese translation
|
||||||
- [@hellojaccc](https://github.com/hellojaccc) for Korean translation
|
- [@hellojaccc](https://github.com/hellojaccc) for Korean translation
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
<!-- [Custom] Expo Notifications -->
|
<!-- [Custom] Expo Notifications -->
|
||||||
<meta-data android:name="expo.modules.notifications.default_notification_icon" android:resource="@drawable/ic_stat_notifications" />
|
<meta-data android:name="expo.modules.notifications.default_notification_icon" android:resource="@drawable/ic_stat_notifications" />
|
||||||
<!-- [Custom] End Expo Notifications -->
|
<!-- [Custom] End Expo Notifications -->
|
||||||
<activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize" android:exported="true" android:theme="@style/Theme.App.SplashScreen" android:screenOrientation="portrait" android:documentLaunchMode="never">
|
<activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize" android:exported="true" android:theme="@style/Theme.App.SplashScreen" android:documentLaunchMode="never">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN"/>
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
<category android:name="android.intent.category.LAUNCHER"/>
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
|
|
|
@ -1,3 +1,2 @@
|
||||||
Enjoy toooting! This version includes following improvements and fixes:
|
Enjoy toooting! This version includes following improvements and fixes:
|
||||||
- Added Basque language
|
- Added Greek translation
|
||||||
- Added Polish language
|
|
|
@ -1,4 +1,3 @@
|
||||||
toooting愉快!此版本包括以下改进和修复:
|
toooting愉快!此版本包括以下改进和修复:
|
||||||
- 添加neodb.social书影音展示卡片
|
- 新增希腊语
|
||||||
- 新增巴斯克语
|
- 新增neodb专辑、播客及剧集卡片
|
||||||
- 新增波兰语
|
|
506
ios/Podfile.lock
506
ios/Podfile.lock
|
@ -14,13 +14,13 @@ PODS:
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- EXNotifications (0.18.1):
|
- EXNotifications (0.18.1):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- Expo (48.0.7):
|
- Expo (48.0.11):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- ExpoCrypto (12.2.1):
|
- ExpoCrypto (12.2.2):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- ExpoHaptics (12.2.1):
|
- ExpoHaptics (12.2.1):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- ExpoImage (1.0.0):
|
- ExpoImage (1.2.1):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- SDWebImage (~> 5.15.0)
|
- SDWebImage (~> 5.15.0)
|
||||||
- SDWebImageAVIFCoder (~> 0.9.4)
|
- SDWebImageAVIFCoder (~> 0.9.4)
|
||||||
|
@ -30,7 +30,7 @@ PODS:
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- ExpoLocalization (14.1.1):
|
- ExpoLocalization (14.1.1):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- ExpoModulesCore (1.2.5):
|
- ExpoModulesCore (1.2.6):
|
||||||
- React-Core
|
- React-Core
|
||||||
- React-RCTAppDelegate
|
- React-RCTAppDelegate
|
||||||
- ReactCommon/turbomodule/core
|
- ReactCommon/turbomodule/core
|
||||||
|
@ -50,19 +50,19 @@ PODS:
|
||||||
- EXSplashScreen (0.18.1):
|
- EXSplashScreen (0.18.1):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- React-Core
|
- React-Core
|
||||||
- FBLazyVector (0.71.4)
|
- FBLazyVector (0.71.7)
|
||||||
- FBReactNativeSpec (0.71.4):
|
- FBReactNativeSpec (0.71.7):
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- RCTRequired (= 0.71.4)
|
- RCTRequired (= 0.71.7)
|
||||||
- RCTTypeSafety (= 0.71.4)
|
- RCTTypeSafety (= 0.71.7)
|
||||||
- React-Core (= 0.71.4)
|
- React-Core (= 0.71.7)
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- ReactCommon/turbomodule/core (= 0.71.4)
|
- ReactCommon/turbomodule/core (= 0.71.7)
|
||||||
- fmt (6.2.1)
|
- fmt (6.2.1)
|
||||||
- glog (0.3.5)
|
- glog (0.3.5)
|
||||||
- hermes-engine (0.71.4):
|
- hermes-engine (0.71.7):
|
||||||
- hermes-engine/Pre-built (= 0.71.4)
|
- hermes-engine/Pre-built (= 0.71.7)
|
||||||
- hermes-engine/Pre-built (0.71.4)
|
- hermes-engine/Pre-built (0.71.7)
|
||||||
- libaom (2.0.2):
|
- libaom (2.0.2):
|
||||||
- libvmaf
|
- libvmaf
|
||||||
- libavif (0.10.1):
|
- libavif (0.10.1):
|
||||||
|
@ -102,26 +102,26 @@ PODS:
|
||||||
- fmt (~> 6.2.1)
|
- fmt (~> 6.2.1)
|
||||||
- glog
|
- glog
|
||||||
- libevent
|
- libevent
|
||||||
- RCTRequired (0.71.4)
|
- RCTRequired (0.71.7)
|
||||||
- RCTTypeSafety (0.71.4):
|
- RCTTypeSafety (0.71.7):
|
||||||
- FBLazyVector (= 0.71.4)
|
- FBLazyVector (= 0.71.7)
|
||||||
- RCTRequired (= 0.71.4)
|
- RCTRequired (= 0.71.7)
|
||||||
- React-Core (= 0.71.4)
|
- React-Core (= 0.71.7)
|
||||||
- React (0.71.4):
|
- React (0.71.7):
|
||||||
- React-Core (= 0.71.4)
|
- React-Core (= 0.71.7)
|
||||||
- React-Core/DevSupport (= 0.71.4)
|
- React-Core/DevSupport (= 0.71.7)
|
||||||
- React-Core/RCTWebSocket (= 0.71.4)
|
- React-Core/RCTWebSocket (= 0.71.7)
|
||||||
- React-RCTActionSheet (= 0.71.4)
|
- React-RCTActionSheet (= 0.71.7)
|
||||||
- React-RCTAnimation (= 0.71.4)
|
- React-RCTAnimation (= 0.71.7)
|
||||||
- React-RCTBlob (= 0.71.4)
|
- React-RCTBlob (= 0.71.7)
|
||||||
- React-RCTImage (= 0.71.4)
|
- React-RCTImage (= 0.71.7)
|
||||||
- React-RCTLinking (= 0.71.4)
|
- React-RCTLinking (= 0.71.7)
|
||||||
- React-RCTNetwork (= 0.71.4)
|
- React-RCTNetwork (= 0.71.7)
|
||||||
- React-RCTSettings (= 0.71.4)
|
- React-RCTSettings (= 0.71.7)
|
||||||
- React-RCTText (= 0.71.4)
|
- React-RCTText (= 0.71.7)
|
||||||
- React-RCTVibration (= 0.71.4)
|
- React-RCTVibration (= 0.71.7)
|
||||||
- React-callinvoker (0.71.4)
|
- React-callinvoker (0.71.7)
|
||||||
- React-Codegen (0.71.4):
|
- React-Codegen (0.71.7):
|
||||||
- FBReactNativeSpec
|
- FBReactNativeSpec
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly
|
- RCT-Folly
|
||||||
|
@ -132,209 +132,209 @@ PODS:
|
||||||
- React-jsiexecutor
|
- React-jsiexecutor
|
||||||
- ReactCommon/turbomodule/bridging
|
- ReactCommon/turbomodule/bridging
|
||||||
- ReactCommon/turbomodule/core
|
- ReactCommon/turbomodule/core
|
||||||
- React-Core (0.71.4):
|
- React-Core (0.71.7):
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default (= 0.71.4)
|
- React-Core/Default (= 0.71.7)
|
||||||
- React-cxxreact (= 0.71.4)
|
- React-cxxreact (= 0.71.7)
|
||||||
- React-hermes
|
- React-hermes
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-jsiexecutor (= 0.71.4)
|
- React-jsiexecutor (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/CoreModulesHeaders (0.71.4):
|
- React-Core/CoreModulesHeaders (0.71.7):
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.71.4)
|
- React-cxxreact (= 0.71.7)
|
||||||
- React-hermes
|
- React-hermes
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-jsiexecutor (= 0.71.4)
|
- React-jsiexecutor (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/Default (0.71.4):
|
- React-Core/Default (0.71.7):
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-cxxreact (= 0.71.4)
|
- React-cxxreact (= 0.71.7)
|
||||||
- React-hermes
|
- React-hermes
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-jsiexecutor (= 0.71.4)
|
- React-jsiexecutor (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/DevSupport (0.71.4):
|
- React-Core/DevSupport (0.71.7):
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default (= 0.71.4)
|
- React-Core/Default (= 0.71.7)
|
||||||
- React-Core/RCTWebSocket (= 0.71.4)
|
- React-Core/RCTWebSocket (= 0.71.7)
|
||||||
- React-cxxreact (= 0.71.4)
|
- React-cxxreact (= 0.71.7)
|
||||||
- React-hermes
|
- React-hermes
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-jsiexecutor (= 0.71.4)
|
- React-jsiexecutor (= 0.71.7)
|
||||||
- React-jsinspector (= 0.71.4)
|
- React-jsinspector (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTActionSheetHeaders (0.71.4):
|
- React-Core/RCTActionSheetHeaders (0.71.7):
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.71.4)
|
- React-cxxreact (= 0.71.7)
|
||||||
- React-hermes
|
- React-hermes
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-jsiexecutor (= 0.71.4)
|
- React-jsiexecutor (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTAnimationHeaders (0.71.4):
|
- React-Core/RCTAnimationHeaders (0.71.7):
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.71.4)
|
- React-cxxreact (= 0.71.7)
|
||||||
- React-hermes
|
- React-hermes
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-jsiexecutor (= 0.71.4)
|
- React-jsiexecutor (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTBlobHeaders (0.71.4):
|
- React-Core/RCTBlobHeaders (0.71.7):
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.71.4)
|
- React-cxxreact (= 0.71.7)
|
||||||
- React-hermes
|
- React-hermes
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-jsiexecutor (= 0.71.4)
|
- React-jsiexecutor (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTImageHeaders (0.71.4):
|
- React-Core/RCTImageHeaders (0.71.7):
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.71.4)
|
- React-cxxreact (= 0.71.7)
|
||||||
- React-hermes
|
- React-hermes
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-jsiexecutor (= 0.71.4)
|
- React-jsiexecutor (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTLinkingHeaders (0.71.4):
|
- React-Core/RCTLinkingHeaders (0.71.7):
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.71.4)
|
- React-cxxreact (= 0.71.7)
|
||||||
- React-hermes
|
- React-hermes
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-jsiexecutor (= 0.71.4)
|
- React-jsiexecutor (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTNetworkHeaders (0.71.4):
|
- React-Core/RCTNetworkHeaders (0.71.7):
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.71.4)
|
- React-cxxreact (= 0.71.7)
|
||||||
- React-hermes
|
- React-hermes
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-jsiexecutor (= 0.71.4)
|
- React-jsiexecutor (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTSettingsHeaders (0.71.4):
|
- React-Core/RCTSettingsHeaders (0.71.7):
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.71.4)
|
- React-cxxreact (= 0.71.7)
|
||||||
- React-hermes
|
- React-hermes
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-jsiexecutor (= 0.71.4)
|
- React-jsiexecutor (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTTextHeaders (0.71.4):
|
- React-Core/RCTTextHeaders (0.71.7):
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.71.4)
|
- React-cxxreact (= 0.71.7)
|
||||||
- React-hermes
|
- React-hermes
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-jsiexecutor (= 0.71.4)
|
- React-jsiexecutor (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTVibrationHeaders (0.71.4):
|
- React-Core/RCTVibrationHeaders (0.71.7):
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.71.4)
|
- React-cxxreact (= 0.71.7)
|
||||||
- React-hermes
|
- React-hermes
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-jsiexecutor (= 0.71.4)
|
- React-jsiexecutor (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTWebSocket (0.71.4):
|
- React-Core/RCTWebSocket (0.71.7):
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default (= 0.71.4)
|
- React-Core/Default (= 0.71.7)
|
||||||
- React-cxxreact (= 0.71.4)
|
- React-cxxreact (= 0.71.7)
|
||||||
- React-hermes
|
- React-hermes
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-jsiexecutor (= 0.71.4)
|
- React-jsiexecutor (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-CoreModules (0.71.4):
|
- React-CoreModules (0.71.7):
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- RCTTypeSafety (= 0.71.4)
|
- RCTTypeSafety (= 0.71.7)
|
||||||
- React-Codegen (= 0.71.4)
|
- React-Codegen (= 0.71.7)
|
||||||
- React-Core/CoreModulesHeaders (= 0.71.4)
|
- React-Core/CoreModulesHeaders (= 0.71.7)
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-RCTBlob
|
- React-RCTBlob
|
||||||
- React-RCTImage (= 0.71.4)
|
- React-RCTImage (= 0.71.7)
|
||||||
- ReactCommon/turbomodule/core (= 0.71.4)
|
- ReactCommon/turbomodule/core (= 0.71.7)
|
||||||
- React-cxxreact (0.71.4):
|
- React-cxxreact (0.71.7):
|
||||||
- boost (= 1.76.0)
|
- boost (= 1.76.0)
|
||||||
- DoubleConversion
|
- DoubleConversion
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-callinvoker (= 0.71.4)
|
- React-callinvoker (= 0.71.7)
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-jsinspector (= 0.71.4)
|
- React-jsinspector (= 0.71.7)
|
||||||
- React-logger (= 0.71.4)
|
- React-logger (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- React-runtimeexecutor (= 0.71.4)
|
- React-runtimeexecutor (= 0.71.7)
|
||||||
- React-hermes (0.71.4):
|
- React-hermes (0.71.7):
|
||||||
- DoubleConversion
|
- DoubleConversion
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- RCT-Folly/Futures (= 2021.07.22.00)
|
- RCT-Folly/Futures (= 2021.07.22.00)
|
||||||
- React-cxxreact (= 0.71.4)
|
- React-cxxreact (= 0.71.7)
|
||||||
- React-jsi
|
- React-jsi
|
||||||
- React-jsiexecutor (= 0.71.4)
|
- React-jsiexecutor (= 0.71.7)
|
||||||
- React-jsinspector (= 0.71.4)
|
- React-jsinspector (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- React-jsi (0.71.4):
|
- React-jsi (0.71.7):
|
||||||
- boost (= 1.76.0)
|
- boost (= 1.76.0)
|
||||||
- DoubleConversion
|
- DoubleConversion
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-jsiexecutor (0.71.4):
|
- React-jsiexecutor (0.71.7):
|
||||||
- DoubleConversion
|
- DoubleConversion
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-cxxreact (= 0.71.4)
|
- React-cxxreact (= 0.71.7)
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- React-jsinspector (0.71.4)
|
- React-jsinspector (0.71.7)
|
||||||
- React-logger (0.71.4):
|
- React-logger (0.71.7):
|
||||||
- glog
|
- glog
|
||||||
- react-native-blur (4.3.0):
|
- react-native-blur (4.3.0):
|
||||||
- React-Core
|
- React-Core
|
||||||
|
@ -346,110 +346,110 @@ PODS:
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-language-detection (0.2.2):
|
- react-native-language-detection (0.2.2):
|
||||||
- React
|
- React
|
||||||
- react-native-mmkv (2.7.0):
|
- react-native-mmkv (2.8.0):
|
||||||
- MMKV (>= 1.2.13)
|
- MMKV (>= 1.2.13)
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-netinfo (9.3.7):
|
- react-native-netinfo (9.3.9):
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-pager-view (6.1.4):
|
- react-native-pager-view (6.2.0):
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-paste-input (0.6.2):
|
- react-native-paste-input (0.6.2):
|
||||||
- React-Core
|
- React-Core
|
||||||
- Swime (= 3.0.6)
|
- Swime (= 3.0.6)
|
||||||
- react-native-quick-base64 (2.0.5):
|
- react-native-quick-base64 (2.0.5):
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-safe-area-context (4.5.0):
|
- react-native-safe-area-context (4.5.1):
|
||||||
- RCT-Folly
|
- RCT-Folly
|
||||||
- RCTRequired
|
- RCTRequired
|
||||||
- RCTTypeSafety
|
- RCTTypeSafety
|
||||||
- React-Core
|
- React-Core
|
||||||
- ReactCommon/turbomodule/core
|
- ReactCommon/turbomodule/core
|
||||||
- react-native-segmented-control (2.4.0):
|
- react-native-segmented-control (2.4.1):
|
||||||
- React-Core
|
- React-Core
|
||||||
- React-perflogger (0.71.4)
|
- React-perflogger (0.71.7)
|
||||||
- React-RCTActionSheet (0.71.4):
|
- React-RCTActionSheet (0.71.7):
|
||||||
- React-Core/RCTActionSheetHeaders (= 0.71.4)
|
- React-Core/RCTActionSheetHeaders (= 0.71.7)
|
||||||
- React-RCTAnimation (0.71.4):
|
- React-RCTAnimation (0.71.7):
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- RCTTypeSafety (= 0.71.4)
|
- RCTTypeSafety (= 0.71.7)
|
||||||
- React-Codegen (= 0.71.4)
|
- React-Codegen (= 0.71.7)
|
||||||
- React-Core/RCTAnimationHeaders (= 0.71.4)
|
- React-Core/RCTAnimationHeaders (= 0.71.7)
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- ReactCommon/turbomodule/core (= 0.71.4)
|
- ReactCommon/turbomodule/core (= 0.71.7)
|
||||||
- React-RCTAppDelegate (0.71.4):
|
- React-RCTAppDelegate (0.71.7):
|
||||||
- RCT-Folly
|
- RCT-Folly
|
||||||
- RCTRequired
|
- RCTRequired
|
||||||
- RCTTypeSafety
|
- RCTTypeSafety
|
||||||
- React-Core
|
- React-Core
|
||||||
- ReactCommon/turbomodule/core
|
- ReactCommon/turbomodule/core
|
||||||
- React-RCTBlob (0.71.4):
|
- React-RCTBlob (0.71.7):
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Codegen (= 0.71.4)
|
- React-Codegen (= 0.71.7)
|
||||||
- React-Core/RCTBlobHeaders (= 0.71.4)
|
- React-Core/RCTBlobHeaders (= 0.71.7)
|
||||||
- React-Core/RCTWebSocket (= 0.71.4)
|
- React-Core/RCTWebSocket (= 0.71.7)
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-RCTNetwork (= 0.71.4)
|
- React-RCTNetwork (= 0.71.7)
|
||||||
- ReactCommon/turbomodule/core (= 0.71.4)
|
- ReactCommon/turbomodule/core (= 0.71.7)
|
||||||
- React-RCTImage (0.71.4):
|
- React-RCTImage (0.71.7):
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- RCTTypeSafety (= 0.71.4)
|
- RCTTypeSafety (= 0.71.7)
|
||||||
- React-Codegen (= 0.71.4)
|
- React-Codegen (= 0.71.7)
|
||||||
- React-Core/RCTImageHeaders (= 0.71.4)
|
- React-Core/RCTImageHeaders (= 0.71.7)
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-RCTNetwork (= 0.71.4)
|
- React-RCTNetwork (= 0.71.7)
|
||||||
- ReactCommon/turbomodule/core (= 0.71.4)
|
- ReactCommon/turbomodule/core (= 0.71.7)
|
||||||
- React-RCTLinking (0.71.4):
|
- React-RCTLinking (0.71.7):
|
||||||
- React-Codegen (= 0.71.4)
|
- React-Codegen (= 0.71.7)
|
||||||
- React-Core/RCTLinkingHeaders (= 0.71.4)
|
- React-Core/RCTLinkingHeaders (= 0.71.7)
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- ReactCommon/turbomodule/core (= 0.71.4)
|
- ReactCommon/turbomodule/core (= 0.71.7)
|
||||||
- React-RCTNetwork (0.71.4):
|
- React-RCTNetwork (0.71.7):
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- RCTTypeSafety (= 0.71.4)
|
- RCTTypeSafety (= 0.71.7)
|
||||||
- React-Codegen (= 0.71.4)
|
- React-Codegen (= 0.71.7)
|
||||||
- React-Core/RCTNetworkHeaders (= 0.71.4)
|
- React-Core/RCTNetworkHeaders (= 0.71.7)
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- ReactCommon/turbomodule/core (= 0.71.4)
|
- ReactCommon/turbomodule/core (= 0.71.7)
|
||||||
- React-RCTSettings (0.71.4):
|
- React-RCTSettings (0.71.7):
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- RCTTypeSafety (= 0.71.4)
|
- RCTTypeSafety (= 0.71.7)
|
||||||
- React-Codegen (= 0.71.4)
|
- React-Codegen (= 0.71.7)
|
||||||
- React-Core/RCTSettingsHeaders (= 0.71.4)
|
- React-Core/RCTSettingsHeaders (= 0.71.7)
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- ReactCommon/turbomodule/core (= 0.71.4)
|
- ReactCommon/turbomodule/core (= 0.71.7)
|
||||||
- React-RCTText (0.71.4):
|
- React-RCTText (0.71.7):
|
||||||
- React-Core/RCTTextHeaders (= 0.71.4)
|
- React-Core/RCTTextHeaders (= 0.71.7)
|
||||||
- React-RCTVibration (0.71.4):
|
- React-RCTVibration (0.71.7):
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Codegen (= 0.71.4)
|
- React-Codegen (= 0.71.7)
|
||||||
- React-Core/RCTVibrationHeaders (= 0.71.4)
|
- React-Core/RCTVibrationHeaders (= 0.71.7)
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- ReactCommon/turbomodule/core (= 0.71.4)
|
- ReactCommon/turbomodule/core (= 0.71.7)
|
||||||
- React-runtimeexecutor (0.71.4):
|
- React-runtimeexecutor (0.71.7):
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- ReactCommon/turbomodule/bridging (0.71.4):
|
- ReactCommon/turbomodule/bridging (0.71.7):
|
||||||
- DoubleConversion
|
- DoubleConversion
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-callinvoker (= 0.71.4)
|
- React-callinvoker (= 0.71.7)
|
||||||
- React-Core (= 0.71.4)
|
- React-Core (= 0.71.7)
|
||||||
- React-cxxreact (= 0.71.4)
|
- React-cxxreact (= 0.71.7)
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-logger (= 0.71.4)
|
- React-logger (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- ReactCommon/turbomodule/core (0.71.4):
|
- ReactCommon/turbomodule/core (0.71.7):
|
||||||
- DoubleConversion
|
- DoubleConversion
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.07.22.00)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-callinvoker (= 0.71.4)
|
- React-callinvoker (= 0.71.7)
|
||||||
- React-Core (= 0.71.4)
|
- React-Core (= 0.71.7)
|
||||||
- React-cxxreact (= 0.71.4)
|
- React-cxxreact (= 0.71.7)
|
||||||
- React-jsi (= 0.71.4)
|
- React-jsi (= 0.71.7)
|
||||||
- React-logger (= 0.71.4)
|
- React-logger (= 0.71.7)
|
||||||
- React-perflogger (= 0.71.4)
|
- React-perflogger (= 0.71.7)
|
||||||
- RNCAsyncStorage (1.17.11):
|
- RNCAsyncStorage (1.17.11):
|
||||||
- React-Core
|
- React-Core
|
||||||
- RNCClipboard (1.11.2):
|
- RNCClipboard (1.11.2):
|
||||||
|
@ -486,12 +486,12 @@ PODS:
|
||||||
- RNScreens (3.20.0):
|
- RNScreens (3.20.0):
|
||||||
- React-Core
|
- React-Core
|
||||||
- React-RCTImage
|
- React-RCTImage
|
||||||
- RNSentry (5.1.1):
|
- RNSentry (5.3.1):
|
||||||
- React-Core
|
- React-Core
|
||||||
- Sentry/HybridSDK (= 8.3.0)
|
- Sentry/HybridSDK (= 8.4.0)
|
||||||
- RNShareMenu (6.0.0):
|
- RNShareMenu (6.0.0):
|
||||||
- React
|
- React
|
||||||
- RNSVG (13.8.0):
|
- RNSVG (13.9.0):
|
||||||
- React-Core
|
- React-Core
|
||||||
- SDWebImage (5.15.5):
|
- SDWebImage (5.15.5):
|
||||||
- SDWebImage/Core (= 5.15.5)
|
- SDWebImage/Core (= 5.15.5)
|
||||||
|
@ -504,9 +504,9 @@ PODS:
|
||||||
- SDWebImageWebPCoder (0.9.1):
|
- SDWebImageWebPCoder (0.9.1):
|
||||||
- libwebp (~> 1.0)
|
- libwebp (~> 1.0)
|
||||||
- SDWebImage/Core (~> 5.13)
|
- SDWebImage/Core (~> 5.13)
|
||||||
- Sentry/HybridSDK (8.3.0):
|
- Sentry/HybridSDK (8.4.0):
|
||||||
- SentryPrivate (= 8.3.0)
|
- SentryPrivate (= 8.4.0)
|
||||||
- SentryPrivate (8.3.0)
|
- SentryPrivate (8.4.0)
|
||||||
- Swime (3.0.6)
|
- Swime (3.0.6)
|
||||||
- Yoga (1.14.0)
|
- Yoga (1.14.0)
|
||||||
|
|
||||||
|
@ -765,13 +765,13 @@ SPEC CHECKSUMS:
|
||||||
EXFileSystem: 844e86ca9b5375486ecc4ef06d3838d5597d895d
|
EXFileSystem: 844e86ca9b5375486ecc4ef06d3838d5597d895d
|
||||||
EXFont: 6ea3800df746be7233208d80fe379b8ed74f4272
|
EXFont: 6ea3800df746be7233208d80fe379b8ed74f4272
|
||||||
EXNotifications: dd628737af60fc8cc62dccebacd326b0fbbc0dcb
|
EXNotifications: dd628737af60fc8cc62dccebacd326b0fbbc0dcb
|
||||||
Expo: 707f9b0039eacc6a1dce90c08c9e37b9c417bba2
|
Expo: 81418098ffb16914b2e190f54e06db923248e4a1
|
||||||
ExpoCrypto: 477dfe89c81527b376f2c344ca1d2a01244b243c
|
ExpoCrypto: 9105610a09cd6290b900bd82fc5d190e489125a3
|
||||||
ExpoHaptics: 5156bc5160d8e04c170dd6e645a71154951a2ad9
|
ExpoHaptics: 5156bc5160d8e04c170dd6e645a71154951a2ad9
|
||||||
ExpoImage: b6a65c4aa891cdf00bfba0da46df14b27ae09cc7
|
ExpoImage: 09d394e082cdd18d946f10a522d566dfca019fb8
|
||||||
ExpoKeepAwake: 69f5f627670d62318410392d03e0b5db0f85759a
|
ExpoKeepAwake: 69f5f627670d62318410392d03e0b5db0f85759a
|
||||||
ExpoLocalization: f26cd431ad9ea3533c5b08c4fabd879176a794bb
|
ExpoLocalization: f26cd431ad9ea3533c5b08c4fabd879176a794bb
|
||||||
ExpoModulesCore: 397fc99e9d6c9dcc010f36d5802097c17b90424c
|
ExpoModulesCore: 6e0259511f4c4341b6b8357db393624df2280828
|
||||||
ExpoStoreReview: d057dcca4b9c95f3c9db11bd2e168dab9cba59f3
|
ExpoStoreReview: d057dcca4b9c95f3c9db11bd2e168dab9cba59f3
|
||||||
ExpoVideoThumbnails: 0021303b614a89fcc5df8b59d9d37ddf14a7d4cf
|
ExpoVideoThumbnails: 0021303b614a89fcc5df8b59d9d37ddf14a7d4cf
|
||||||
ExpoWebBrowser: 033d34c478d9986da2f1679729041423837626e0
|
ExpoWebBrowser: 033d34c478d9986da2f1679729041423837626e0
|
||||||
|
@ -779,11 +779,11 @@ SPEC CHECKSUMS:
|
||||||
EXScreenOrientation: 52220f8f2477ed25a37e3b2cdbbaa8635d250256
|
EXScreenOrientation: 52220f8f2477ed25a37e3b2cdbbaa8635d250256
|
||||||
EXSecureStore: e8923258361cc406d0401af380f12bd05b2b720f
|
EXSecureStore: e8923258361cc406d0401af380f12bd05b2b720f
|
||||||
EXSplashScreen: cd7fb052dff5ba8311d5c2455ecbebffe1b7a8ca
|
EXSplashScreen: cd7fb052dff5ba8311d5c2455ecbebffe1b7a8ca
|
||||||
FBLazyVector: 446e84642979fff0ba57f3c804c2228a473aeac2
|
FBLazyVector: a89a0525bc7ca174675045c2b492b5280d5a2470
|
||||||
FBReactNativeSpec: 241709e132e3bf1526c1c4f00bc5384dd39dfba9
|
FBReactNativeSpec: 7714e6bc1e9ea23df6c4cb42f0b2fd9c6a3a559c
|
||||||
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
|
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
|
||||||
glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
|
glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
|
||||||
hermes-engine: a1f157c49ea579c28b0296bda8530e980c45bdb3
|
hermes-engine: 4438d2b8bf8bebaba1b1ac0451160bab59e491f8
|
||||||
libaom: 9bb51e0f8f9192245e3ca2a1c9e4375d9cbccc52
|
libaom: 9bb51e0f8f9192245e3ca2a1c9e4375d9cbccc52
|
||||||
libavif: e242998ccec1c83bcba0bbdc256f460ad5077348
|
libavif: e242998ccec1c83bcba0bbdc256f460ad5077348
|
||||||
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
|
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
|
||||||
|
@ -792,60 +792,60 @@ SPEC CHECKSUMS:
|
||||||
MMKV: 7f34558bbb5a33b0eaefae2de4b6a20a2ffdad6f
|
MMKV: 7f34558bbb5a33b0eaefae2de4b6a20a2ffdad6f
|
||||||
MMKVCore: ddf41b9d9262f058419f9ba7598719af56c02cd3
|
MMKVCore: ddf41b9d9262f058419f9ba7598719af56c02cd3
|
||||||
RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1
|
RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1
|
||||||
RCTRequired: 5a024fdf458fa8c0d82fc262e76f982d4dcdecdd
|
RCTRequired: 5a4a30ac20c86eeadd6844a9328f78d4168cf9b2
|
||||||
RCTTypeSafety: b6c253064466411c6810b45f66bc1e43ce0c54ba
|
RCTTypeSafety: 279fc5861a89f0f37db3a585f27f971485b4b734
|
||||||
React: 715292db5bd46989419445a5547954b25d2090f0
|
React: 88307a9be3bd0e71a6822271cf28b84a587fb97f
|
||||||
React-callinvoker: 105392d1179058585b564d35b4592fe1c46d6fba
|
React-callinvoker: 35fb980c454104ebe82f0afb9826830089248e08
|
||||||
React-Codegen: b75333b93d835afce84b73472927cccaef2c9f8c
|
React-Codegen: a8dbde3b7476d5c19437d2adb9e8ea1b426b9595
|
||||||
React-Core: 88838ed1724c64905fc6c0811d752828a92e395b
|
React-Core: 385cb6fa78762c6409ff39faeb0dd9ad664b6e84
|
||||||
React-CoreModules: cd238b4bb8dc8529ccc8b34ceae7267b04ce1882
|
React-CoreModules: c2b7db313b04d9b71954ffd55d0c2e46bc40e9fb
|
||||||
React-cxxreact: 291bfab79d8098dc5ebab98f62e6bdfe81b3955a
|
React-cxxreact: 845fefb889132e5d004ff818f7a599e32c52e7d6
|
||||||
React-hermes: b1e67e9a81c71745704950516f40ee804349641c
|
React-hermes: 86135f35e1dd2dfccfb97afe96d0c06f6a3970c4
|
||||||
React-jsi: c9d5b563a6af6bb57034a82c2b0d39d0a7483bdc
|
React-jsi: 39c116aa6c3d6f3d9874eff6998a670b47882a28
|
||||||
React-jsiexecutor: d6b7fa9260aa3cb40afee0507e3bc1d17ecaa6f2
|
React-jsiexecutor: eaa5f71eb8f6861cf0e57f1a0f52aeb020d9e18e
|
||||||
React-jsinspector: 1f51e775819199d3fe9410e69ee8d4c4161c7b06
|
React-jsinspector: 9885f6f94d231b95a739ef7bb50536fb87ce7539
|
||||||
React-logger: 0d58569ec51d30d1792c5e86a8e3b78d24b582c6
|
React-logger: 3f8ebad1be1bf3299d1ab6d7f971802d7395c7ef
|
||||||
react-native-blur: 50c9feabacbc5f49b61337ebc32192c6be7ec3c3
|
react-native-blur: 50c9feabacbc5f49b61337ebc32192c6be7ec3c3
|
||||||
react-native-cameraroll: f3050460fe1708378698c16686bfaa5f34099be2
|
react-native-cameraroll: f3050460fe1708378698c16686bfaa5f34099be2
|
||||||
react-native-image-picker: ec9b713e248760bfa0f879f0715391de4651a7cb
|
react-native-image-picker: ec9b713e248760bfa0f879f0715391de4651a7cb
|
||||||
react-native-ios-context-menu: e529171ba760a1af7f2ef0729f5a7f4d226171c5
|
react-native-ios-context-menu: e529171ba760a1af7f2ef0729f5a7f4d226171c5
|
||||||
react-native-language-detection: f414937fa715108ab50a6269a3de0bcb95e4ceb0
|
react-native-language-detection: f414937fa715108ab50a6269a3de0bcb95e4ceb0
|
||||||
react-native-mmkv: a2a40a0458bdbc9d43c4e7752ecfc5e3a87b66dd
|
react-native-mmkv: 7da5e18e55c04a9af9a7e0ab9792a1e8d33765a1
|
||||||
react-native-netinfo: 2517ad504b3d303e90d7a431b0fcaef76d207983
|
react-native-netinfo: 22c082970cbd99071a4e5aa7a612ac20d66b08f0
|
||||||
react-native-pager-view: b58cb9e9f42f64e50cab3040815772c1d119a2e2
|
react-native-pager-view: 0ccb8bf60e2ebd38b1f3669fa3650ecce81db2df
|
||||||
react-native-paste-input: 3392800944a47c00dddbff23c31c281482209679
|
react-native-paste-input: 3392800944a47c00dddbff23c31c281482209679
|
||||||
react-native-quick-base64: e657e9197e61b60a9dec49807843052b830da254
|
react-native-quick-base64: e657e9197e61b60a9dec49807843052b830da254
|
||||||
react-native-safe-area-context: 39c2d8be3328df5d437ac1700f4f3a4f75716acc
|
react-native-safe-area-context: f5549f36508b1b7497434baa0cd97d7e470920d4
|
||||||
react-native-segmented-control: 06607462630512ff8eef652ec560e6235a30cc3e
|
react-native-segmented-control: 0e4b5d93911e2234f110057df2b41738b326ab3e
|
||||||
React-perflogger: 0bb0522a12e058f6eb69d888bc16f40c16c4b907
|
React-perflogger: 2d505bbe298e3b7bacdd9e542b15535be07220f6
|
||||||
React-RCTActionSheet: bfd675a10f06a18728ea15d82082d48f228a213a
|
React-RCTActionSheet: 0e96e4560bd733c9b37efbf68f5b1a47615892fb
|
||||||
React-RCTAnimation: 2fa220b2052ec75b733112aca39143d34546a941
|
React-RCTAnimation: fd138e26f120371c87e406745a27535e2c8a04ef
|
||||||
React-RCTAppDelegate: 8564f93c1d9274e95e3b0c746d08a87ff5a621b2
|
React-RCTAppDelegate: 4a9fd1230a98dc3d4382f8a934dc9f50834d8335
|
||||||
React-RCTBlob: d0336111f46301ae8aba2e161817e451aad72dd6
|
React-RCTBlob: 38a7185f06a0ce8153a023e63b406a28d67b955d
|
||||||
React-RCTImage: fec592c46edb7c12a9cde08780bdb4a688416c62
|
React-RCTImage: 92b0966e7c1cadda889e961c474397ad5180e194
|
||||||
React-RCTLinking: 14eccac5d2a3b34b89dbfa29e8ef6219a153fe2d
|
React-RCTLinking: b80f8d0c6e94c54294b0048def51f57eaa9a27af
|
||||||
React-RCTNetwork: 1fbce92e772e39ca3687a2ebb854501ff6226dd7
|
React-RCTNetwork: 491b0c65ac22edbd6695d12d084b4943103b009b
|
||||||
React-RCTSettings: 1abea36c9bb16d9979df6c4b42e2ea281b4bbcc5
|
React-RCTSettings: 97af3e8abe0023349ec015910df3bda1a0380117
|
||||||
React-RCTText: 15355c41561a9f43dfd23616d0a0dd40ba05ed61
|
React-RCTText: 33c85753bd714d527d2ae538dc56ec24c6783d84
|
||||||
React-RCTVibration: ad17efcfb2fa8f6bfd8ac0cf48d96668b8b28e0b
|
React-RCTVibration: 08f132cad9896458776f37c112e71d60aef1c6ae
|
||||||
React-runtimeexecutor: 8fa50b38df6b992c76537993a2b0553d3b088004
|
React-runtimeexecutor: c5c89f8f543842dd864b63ded1b0bbb9c9445328
|
||||||
ReactCommon: b49a4b00ca6d181ff74b17c12b2d59ac4add0bde
|
ReactCommon: dbfbe2f7f3c5ce4ce44f43f2fd0d5950d1eb67c5
|
||||||
RNCAsyncStorage: 8616bd5a58af409453ea4e1b246521bb76578d60
|
RNCAsyncStorage: 8616bd5a58af409453ea4e1b246521bb76578d60
|
||||||
RNCClipboard: 3f0451a8100393908bea5c5c5b16f96d45f30bfc
|
RNCClipboard: 3f0451a8100393908bea5c5c5b16f96d45f30bfc
|
||||||
RNGestureHandler: 071d7a9ad81e8b83fe7663b303d132406a7d8f39
|
RNGestureHandler: 071d7a9ad81e8b83fe7663b303d132406a7d8f39
|
||||||
RNReanimated: f0dd6b881808e635ef0673f89642937d6c141314
|
RNReanimated: f0dd6b881808e635ef0673f89642937d6c141314
|
||||||
RNScreens: 218801c16a2782546d30bd2026bb625c0302d70f
|
RNScreens: 218801c16a2782546d30bd2026bb625c0302d70f
|
||||||
RNSentry: 43658c8c327376e0c06149ce981899f5f84e90d9
|
RNSentry: 68d5b2339fc7cd864e8076279345cc90174fa583
|
||||||
RNShareMenu: cb9dac548c8bf147d06f0bf07296ad51ea9f5fc3
|
RNShareMenu: cb9dac548c8bf147d06f0bf07296ad51ea9f5fc3
|
||||||
RNSVG: c1e76b81c76cdcd34b4e1188852892dc280eb902
|
RNSVG: 53c661b76829783cdaf9b7a57258f3d3b4c28315
|
||||||
SDWebImage: fd7e1a22f00303e058058278639bf6196ee431fe
|
SDWebImage: fd7e1a22f00303e058058278639bf6196ee431fe
|
||||||
SDWebImageAVIFCoder: d759e21cf4efb640cc97250566aa556ad8bb877c
|
SDWebImageAVIFCoder: d759e21cf4efb640cc97250566aa556ad8bb877c
|
||||||
SDWebImageSVGCoder: 6fc109f9c2a82ab44510fff410b88b1a6c271ee8
|
SDWebImageSVGCoder: 6fc109f9c2a82ab44510fff410b88b1a6c271ee8
|
||||||
SDWebImageWebPCoder: 18503de6621dd2c420d680e33d46bf8e1d5169b0
|
SDWebImageWebPCoder: 18503de6621dd2c420d680e33d46bf8e1d5169b0
|
||||||
Sentry: 757565eb01e2a6ef6b26e897e4e47e8213e12f06
|
Sentry: 16d46dd5ca10e7f4469a2611805a3de123188add
|
||||||
SentryPrivate: 668d6ce46835769b32e61dc8b5c78ef0b6cdcef8
|
SentryPrivate: 2bb4f8d9ff558b25ac70b66c1dedc58a7c43630b
|
||||||
Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b
|
Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b
|
||||||
Yoga: 79dd7410de6f8ad73a77c868d3d368843f0c93e0
|
Yoga: d56980c8914db0b51692f55533409e844b66133c
|
||||||
|
|
||||||
PODFILE CHECKSUM: 61a84f1ad8a466fbbbf09e0f8bb3ed30b2d5e301
|
PODFILE CHECKSUM: 61a84f1ad8a466fbbbf09e0f8bb3ed30b2d5e301
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
"NSPhotoLibraryAddUsageDescription" = "Επιτρέψτε στο tooot να αποθηκεύει εικόνες στο ρολό της κάμερας";
|
||||||
|
"NSPhotoLibraryUsageDescription" = "Επιτρέψτε στο tooot να αποθηκεύει εικόνες στο ρολό της κάμερας";
|
|
@ -77,6 +77,7 @@
|
||||||
E633A42F281EAF38000E540F /* ShareViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ShareViewController.swift; path = "../../node_modules/react-native-share-menu/ios/ShareViewController.swift"; sourceTree = "<group>"; };
|
E633A42F281EAF38000E540F /* ShareViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ShareViewController.swift; path = "../../node_modules/react-native-share-menu/ios/ShareViewController.swift"; sourceTree = "<group>"; };
|
||||||
E633A431281EB55C000E540F /* ShareExtension-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ShareExtension-Bridging-Header.h"; sourceTree = "<group>"; };
|
E633A431281EB55C000E540F /* ShareExtension-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ShareExtension-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||||
E63E7FF0292A828100C76FD4 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
E63E7FF0292A828100C76FD4 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
|
E65BA25629EDEF8C008E0BBC /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
E66C0842291F095800DFFF60 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
E66C0842291F095800DFFF60 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
E671BDF8290EAFB800287BD0 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
E671BDF8290EAFB800287BD0 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
||||||
E690907B29C1133000489554 /* eu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = eu; path = eu.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
E690907B29C1133000489554 /* eu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = eu; path = eu.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
|
@ -308,6 +309,7 @@
|
||||||
be,
|
be,
|
||||||
eu,
|
eu,
|
||||||
pl,
|
pl,
|
||||||
|
el,
|
||||||
);
|
);
|
||||||
mainGroup = 83CBB9F61A601CBA00E9B192;
|
mainGroup = 83CBB9F61A601CBA00E9B192;
|
||||||
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
|
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
|
||||||
|
@ -545,6 +547,7 @@
|
||||||
E6179D6E29B94551001930D5 /* be */,
|
E6179D6E29B94551001930D5 /* be */,
|
||||||
E690907B29C1133000489554 /* eu */,
|
E690907B29C1133000489554 /* eu */,
|
||||||
E6B76A1E29C1147B00187ABB /* pl */,
|
E6B76A1E29C1147B00187ABB /* pl */,
|
||||||
|
E65BA25629EDEF8C008E0BBC /* el */,
|
||||||
);
|
);
|
||||||
name = InfoPlist.strings;
|
name = InfoPlist.strings;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
|
64
package.json
64
package.json
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "tooot",
|
"name": "tooot",
|
||||||
"version": "4.9.3",
|
"version": "4.9.4",
|
||||||
"description": "tooot for Mastodon",
|
"description": "tooot for Mastodon",
|
||||||
"author": "xmflsct <me@xmflsct.com>",
|
"author": "xmflsct <me@xmflsct.com>",
|
||||||
"license": "GPL-3.0-or-later",
|
"license": "GPL-3.0-or-later",
|
||||||
|
@ -19,39 +19,39 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@expo/react-native-action-sheet": "^4.0.1",
|
"@expo/react-native-action-sheet": "^4.0.1",
|
||||||
"@formatjs/intl-datetimeformat": "^6.5.1",
|
"@formatjs/intl-datetimeformat": "^6.7.0",
|
||||||
"@formatjs/intl-getcanonicallocales": "^2.1.0",
|
"@formatjs/intl-getcanonicallocales": "^2.1.0",
|
||||||
"@formatjs/intl-locale": "^3.1.1",
|
"@formatjs/intl-locale": "^3.2.1",
|
||||||
"@formatjs/intl-numberformat": "^8.3.5",
|
"@formatjs/intl-numberformat": "^8.4.1",
|
||||||
"@formatjs/intl-pluralrules": "^5.1.10",
|
"@formatjs/intl-pluralrules": "^5.2.1",
|
||||||
"@formatjs/intl-relativetimeformat": "^11.1.10",
|
"@formatjs/intl-relativetimeformat": "^11.2.1",
|
||||||
"@mattermost/react-native-paste-input": "^0.6.2",
|
"@mattermost/react-native-paste-input": "^0.6.2",
|
||||||
"@neverdull-agency/expo-unlimited-secure-store": "^1.0.10",
|
"@neverdull-agency/expo-unlimited-secure-store": "^1.0.10",
|
||||||
"@react-native-async-storage/async-storage": "~1.17.11",
|
"@react-native-async-storage/async-storage": "~1.17.11",
|
||||||
"@react-native-camera-roll/camera-roll": "^5.3.1",
|
"@react-native-camera-roll/camera-roll": "^5.3.1",
|
||||||
"@react-native-clipboard/clipboard": "^1.11.2",
|
"@react-native-clipboard/clipboard": "^1.11.2",
|
||||||
"@react-native-community/blur": "^4.3.0",
|
"@react-native-community/blur": "^4.3.0",
|
||||||
"@react-native-community/netinfo": "9.3.7",
|
"@react-native-community/netinfo": "9.3.9",
|
||||||
"@react-native-firebase/app": "^17.3.2",
|
"@react-native-firebase/app": "^17.4.2",
|
||||||
"@react-native-menu/menu": "^0.7.3",
|
"@react-native-menu/menu": "^0.7.3",
|
||||||
"@react-native-segmented-control/segmented-control": "^2.4.0",
|
"@react-native-segmented-control/segmented-control": "^2.4.1",
|
||||||
"@react-navigation/bottom-tabs": "^6.5.7",
|
"@react-navigation/bottom-tabs": "^6.5.7",
|
||||||
"@react-navigation/native": "^6.1.6",
|
"@react-navigation/native": "^6.1.6",
|
||||||
"@react-navigation/native-stack": "^6.9.12",
|
"@react-navigation/native-stack": "^6.9.12",
|
||||||
"@react-navigation/stack": "^6.3.16",
|
"@react-navigation/stack": "^6.3.16",
|
||||||
"@sentry/react-native": "5.1.1",
|
"@sentry/react-native": "5.3.1",
|
||||||
"@sharcoux/slider": "^6.1.1",
|
"@sharcoux/slider": "^6.1.2",
|
||||||
"@tanstack/react-query": "^4.26.1",
|
"@tanstack/react-query": "^4.29.3",
|
||||||
"axios": "^1.3.4",
|
"axios": "^1.3.6",
|
||||||
"diff": "^5.1.0",
|
"diff": "^5.1.0",
|
||||||
"expo": "48.0.7",
|
"expo": "48.0.11",
|
||||||
"expo-auth-session": "^4.0.3",
|
"expo-auth-session": "^4.0.3",
|
||||||
"expo-av": "^13.2.1",
|
"expo-av": "^13.2.1",
|
||||||
"expo-constants": "^14.2.1",
|
"expo-constants": "^14.2.1",
|
||||||
"expo-crypto": "^12.2.1",
|
"expo-crypto": "^12.2.2",
|
||||||
"expo-file-system": "^15.2.2",
|
"expo-file-system": "^15.2.2",
|
||||||
"expo-haptics": "^12.2.1",
|
"expo-haptics": "^12.2.1",
|
||||||
"expo-image": "^1.0.0",
|
"expo-image": "^1.2.1",
|
||||||
"expo-linking": "^4.0.1",
|
"expo-linking": "^4.0.1",
|
||||||
"expo-localization": "^14.1.1",
|
"expo-localization": "^14.1.1",
|
||||||
"expo-notifications": "^0.18.1",
|
"expo-notifications": "^0.18.1",
|
||||||
|
@ -62,43 +62,43 @@
|
||||||
"expo-store-review": "^6.2.1",
|
"expo-store-review": "^6.2.1",
|
||||||
"expo-video-thumbnails": "^7.2.1",
|
"expo-video-thumbnails": "^7.2.1",
|
||||||
"expo-web-browser": "~12.1.1",
|
"expo-web-browser": "~12.1.1",
|
||||||
"htmlparser2": "^8.0.1",
|
"htmlparser2": "^8.0.2",
|
||||||
"i18next": "^22.4.11",
|
"i18next": "^22.4.15",
|
||||||
"linkify-it": "^4.0.1",
|
"linkify-it": "^4.0.1",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-i18next": "^12.2.0",
|
"react-i18next": "^12.2.0",
|
||||||
"react-intl": "^6.2.10",
|
"react-intl": "^6.4.1",
|
||||||
"react-native": "^0.71.4",
|
"react-native": "^0.71.7",
|
||||||
"react-native-flash-message": "^0.4.0",
|
"react-native-flash-message": "^0.4.1",
|
||||||
"react-native-gesture-handler": "~2.9.0",
|
"react-native-gesture-handler": "~2.9.0",
|
||||||
"react-native-image-picker": "^5.3.1",
|
"react-native-image-picker": "^5.3.1",
|
||||||
"react-native-ios-context-menu": "^1.15.3",
|
"react-native-ios-context-menu": "^1.15.3",
|
||||||
"react-native-language-detection": "^0.2.2",
|
"react-native-language-detection": "^0.2.2",
|
||||||
"react-native-mmkv": "~2.7.0",
|
"react-native-mmkv": "~2.8.0",
|
||||||
"react-native-pager-view": "^6.1.4",
|
"react-native-pager-view": "^6.2.0",
|
||||||
"react-native-quick-base64": "^2.0.5",
|
"react-native-quick-base64": "^2.0.5",
|
||||||
"react-native-reanimated": "^3.0.2",
|
"react-native-reanimated": "^3.0.2",
|
||||||
"react-native-reanimated-zoom": "^0.3.3",
|
"react-native-reanimated-zoom": "^0.3.3",
|
||||||
"react-native-safe-area-context": "^4.5.0",
|
"react-native-safe-area-context": "^4.5.1",
|
||||||
"react-native-screens": "^3.20.0",
|
"react-native-screens": "^3.20.0",
|
||||||
"react-native-share-menu": "^6.0.0",
|
"react-native-share-menu": "^6.0.0",
|
||||||
"react-native-svg": "^13.8.0",
|
"react-native-svg": "^13.9.0",
|
||||||
"react-native-swipe-list-view": "^3.2.9",
|
"react-native-swipe-list-view": "^3.2.9",
|
||||||
"react-native-tab-view": "^3.5.1",
|
"react-native-tab-view": "^3.5.1",
|
||||||
"rn-placeholder": "^3.0.3",
|
"rn-placeholder": "^3.0.3",
|
||||||
"zeego": "^1.4.1"
|
"zeego": "^1.4.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.21.3",
|
"@babel/core": "^7.21.4",
|
||||||
"@babel/plugin-proposal-optional-chaining": "^7.21.0",
|
"@babel/plugin-proposal-optional-chaining": "^7.21.0",
|
||||||
"@babel/preset-typescript": "^7.21.0",
|
"@babel/preset-typescript": "^7.21.4",
|
||||||
"@expo/config": "^8.0.2",
|
"@expo/config": "^8.0.2",
|
||||||
"@types/diff": "^5.0.2",
|
"@types/diff": "^5.0.3",
|
||||||
"@types/linkify-it": "^3.0.2",
|
"@types/linkify-it": "^3.0.2",
|
||||||
"@types/lodash": "^4.14.191",
|
"@types/lodash": "^4.14.194",
|
||||||
"@types/react": "^18.0.28",
|
"@types/react": "^18.0.37",
|
||||||
"@types/react-dom": "^18.0.11",
|
"@types/react-dom": "^18.0.11",
|
||||||
"@types/react-native-share-menu": "^5.0.2",
|
"@types/react-native-share-menu": "^5.0.2",
|
||||||
"babel-plugin-module-resolver": "^5.0.0",
|
"babel-plugin-module-resolver": "^5.0.0",
|
||||||
|
@ -107,7 +107,7 @@
|
||||||
"deprecated-react-native-prop-types": "^4.0.0",
|
"deprecated-react-native-prop-types": "^4.0.0",
|
||||||
"dotenv": "^16.0.3",
|
"dotenv": "^16.0.3",
|
||||||
"react-native-clean-project": "^4.0.1",
|
"react-native-clean-project": "^4.0.1",
|
||||||
"typescript": "^4.9.5"
|
"typescript": "^5.0.4"
|
||||||
},
|
},
|
||||||
"packageManager": "yarn@3.3.1",
|
"packageManager": "yarn@3.3.1",
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
|
|
|
@ -4,9 +4,10 @@ import { TabLocalStackParamList } from '@utils/navigation/navigators'
|
||||||
import { StyleConstants } from '@utils/styles/constants'
|
import { StyleConstants } from '@utils/styles/constants'
|
||||||
import { useTheme } from '@utils/styles/ThemeManager'
|
import { useTheme } from '@utils/styles/ThemeManager'
|
||||||
import React, { PropsWithChildren, useState } from 'react'
|
import React, { PropsWithChildren, useState } from 'react'
|
||||||
import { Dimensions, Pressable, View } from 'react-native'
|
import { Dimensions, Pressable, Text, View } from 'react-native'
|
||||||
import Sparkline from './Sparkline'
|
import Sparkline from './Sparkline'
|
||||||
import CustomText from './Text'
|
import CustomText from './Text'
|
||||||
|
import { sumBy } from 'lodash'
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
hashtag: Mastodon.Tag
|
hashtag: Mastodon.Tag
|
||||||
|
@ -29,6 +30,8 @@ const ComponentHashtag: React.FC<PropsWithChildren & Props> = ({
|
||||||
const width = Dimensions.get('window').width / 4
|
const width = Dimensions.get('window').width / 4
|
||||||
const [height, setHeight] = useState<number>(0)
|
const [height, setHeight] = useState<number>(0)
|
||||||
|
|
||||||
|
const sum = sumBy(hashtag.history, h => parseInt(h.uses))
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Pressable
|
<Pressable
|
||||||
accessibilityRole='button'
|
accessibilityRole='button'
|
||||||
|
@ -41,17 +44,24 @@ const ComponentHashtag: React.FC<PropsWithChildren & Props> = ({
|
||||||
}}
|
}}
|
||||||
onPress={customOnPress || onPress}
|
onPress={customOnPress || onPress}
|
||||||
>
|
>
|
||||||
<CustomText
|
<View
|
||||||
fontStyle='M'
|
|
||||||
style={{
|
style={{
|
||||||
flexShrink: 1,
|
flexShrink: 1,
|
||||||
color: colors.primaryDefault,
|
|
||||||
paddingRight: StyleConstants.Spacing.M
|
paddingRight: StyleConstants.Spacing.M
|
||||||
}}
|
}}
|
||||||
numberOfLines={1}
|
|
||||||
>
|
>
|
||||||
#{hashtag.name}
|
<CustomText fontStyle='M' style={{ color: colors.primaryDefault }} numberOfLines={1}>
|
||||||
</CustomText>
|
#{hashtag.name}
|
||||||
|
{sum ? (
|
||||||
|
<>
|
||||||
|
{' '}
|
||||||
|
<CustomText fontStyle='S' style={{ color: colors.secondary }}>
|
||||||
|
({sumBy(hashtag.history, h => parseInt(h.uses))})
|
||||||
|
</CustomText>
|
||||||
|
</>
|
||||||
|
) : null}
|
||||||
|
</CustomText>
|
||||||
|
</View>
|
||||||
{hashtag.history?.length ? (
|
{hashtag.history?.length ? (
|
||||||
<View
|
<View
|
||||||
style={{ flexDirection: 'row', alignItems: 'center', alignSelf: 'stretch' }}
|
style={{ flexDirection: 'row', alignItems: 'center', alignSelf: 'stretch' }}
|
||||||
|
@ -66,6 +76,7 @@ const ComponentHashtag: React.FC<PropsWithChildren & Props> = ({
|
||||||
width={width}
|
width={width}
|
||||||
height={height}
|
height={height}
|
||||||
margin={children ? StyleConstants.Spacing.S : undefined}
|
margin={children ? StyleConstants.Spacing.S : undefined}
|
||||||
|
color={!sum ? colors.disabled : undefined}
|
||||||
/>
|
/>
|
||||||
{children}
|
{children}
|
||||||
</View>
|
</View>
|
||||||
|
|
|
@ -22,7 +22,6 @@ import * as AuthSession from 'expo-auth-session'
|
||||||
import * as Crypto from 'expo-crypto'
|
import * as Crypto from 'expo-crypto'
|
||||||
import { Image } from 'expo-image'
|
import { Image } from 'expo-image'
|
||||||
import * as Linking from 'expo-linking'
|
import * as Linking from 'expo-linking'
|
||||||
import * as WebBrowser from 'expo-web-browser'
|
|
||||||
import { debounce } from 'lodash'
|
import { debounce } from 'lodash'
|
||||||
import React, { RefObject, useCallback, useState } from 'react'
|
import React, { RefObject, useCallback, useState } from 'react'
|
||||||
import { Trans, useTranslation } from 'react-i18next'
|
import { Trans, useTranslation } from 'react-i18next'
|
||||||
|
@ -30,6 +29,7 @@ import { Alert, KeyboardAvoidingView, Platform, TextInput, View } from 'react-na
|
||||||
import { ScrollView } from 'react-native-gesture-handler'
|
import { ScrollView } from 'react-native-gesture-handler'
|
||||||
import { fromByteArray } from 'react-native-quick-base64'
|
import { fromByteArray } from 'react-native-quick-base64'
|
||||||
import CustomText from '../Text'
|
import CustomText from '../Text'
|
||||||
|
import openLink from '@components/openLink'
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
scrollViewRef?: RefObject<ScrollView>
|
scrollViewRef?: RefObject<ScrollView>
|
||||||
|
@ -80,7 +80,7 @@ const ComponentInstance: React.FC<Props> = ({
|
||||||
clientSecret,
|
clientSecret,
|
||||||
scopes: variables.scopes,
|
scopes: variables.scopes,
|
||||||
redirectUri,
|
redirectUri,
|
||||||
usePKCE: !['pawoo.net'].includes(domain)
|
usePKCE: !['pawoo.net', 'mao.mastodonhub.com'].includes(domain)
|
||||||
})
|
})
|
||||||
await request.makeAuthUrlAsync(discovery)
|
await request.makeAuthUrlAsync(discovery)
|
||||||
|
|
||||||
|
@ -386,20 +386,12 @@ const ComponentInstance: React.FC<Props> = ({
|
||||||
<CustomText
|
<CustomText
|
||||||
accessible
|
accessible
|
||||||
style={{ color: colors.blue }}
|
style={{ color: colors.blue }}
|
||||||
onPress={async () =>
|
onPress={async () => openLink('https://tooot.app/privacy-policy')}
|
||||||
WebBrowser.openBrowserAsync('https://tooot.app/privacy-policy', {
|
|
||||||
...(await browserPackage())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
/>,
|
/>,
|
||||||
<CustomText
|
<CustomText
|
||||||
accessible
|
accessible
|
||||||
style={{ color: colors.blue }}
|
style={{ color: colors.blue }}
|
||||||
onPress={async () =>
|
onPress={async () => openLink('https://tooot.app/terms-of-service')}
|
||||||
WebBrowser.openBrowserAsync('https://tooot.app/terms-of-service', {
|
|
||||||
...(await browserPackage())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
/>
|
/>
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -223,7 +223,7 @@ const ParseHTML: React.FC<Props> = ({
|
||||||
key={index}
|
key={index}
|
||||||
style={{ lineHeight: adaptedLineheight ? adaptedLineheight / 2 : undefined }}
|
style={{ lineHeight: adaptedLineheight ? adaptedLineheight / 2 : undefined }}
|
||||||
>
|
>
|
||||||
{'\n'}
|
{'\n\n'}
|
||||||
</Text>
|
</Text>
|
||||||
)
|
)
|
||||||
case 'p':
|
case 'p':
|
||||||
|
|
|
@ -8,9 +8,10 @@ export interface Props {
|
||||||
width: number
|
width: number
|
||||||
height: number
|
height: number
|
||||||
margin?: number
|
margin?: number
|
||||||
|
color?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
const Sparkline: React.FC<Props> = ({ data, width, height, margin = 0 }) => {
|
const Sparkline: React.FC<Props> = ({ data, width, height, margin = 0, color }) => {
|
||||||
const { colors } = useTheme()
|
const { colors } = useTheme()
|
||||||
|
|
||||||
const dataToPoints = ({
|
const dataToPoints = ({
|
||||||
|
@ -70,10 +71,10 @@ const Sparkline: React.FC<Props> = ({ data, width, height, margin = 0 }) => {
|
||||||
return (
|
return (
|
||||||
<Svg height={height} width={width} style={{ marginRight: margin }} fill='none'>
|
<Svg height={height} width={width} style={{ marginRight: margin }} fill='none'>
|
||||||
<G>
|
<G>
|
||||||
<Path d={'M' + fillPoints.join(' ')} fill={colors.blue} fillOpacity={0.1} />
|
<Path d={'M' + fillPoints.join(' ')} fill={color || colors.blue} fillOpacity={0.1} />
|
||||||
<Path
|
<Path
|
||||||
d={'M' + linePoints.join(' ')}
|
d={'M' + linePoints.join(' ')}
|
||||||
stroke={colors.blue}
|
stroke={color || colors.blue}
|
||||||
strokeWidth={1}
|
strokeWidth={1}
|
||||||
strokeLinejoin='round'
|
strokeLinejoin='round'
|
||||||
strokeLinecap='round'
|
strokeLinecap='round'
|
||||||
|
|
|
@ -218,6 +218,7 @@ const TimelineRefresh: React.FC<Props> = ({
|
||||||
}
|
}
|
||||||
isFetchingPrev.value = false
|
isFetchingPrev.value = false
|
||||||
})
|
})
|
||||||
|
.catch(() => (isFetchingPrev.value = false))
|
||||||
}
|
}
|
||||||
|
|
||||||
const runFetchLatest = async () => {
|
const runFetchLatest = async () => {
|
||||||
|
|
|
@ -17,20 +17,17 @@ export const CardNeodb: React.FC<Props> = ({ card }) => {
|
||||||
const { colors } = useTheme()
|
const { colors } = useTheme()
|
||||||
|
|
||||||
const segments = Linking.parse(card.url).path?.split('/')
|
const segments = Linking.parse(card.url).path?.split('/')
|
||||||
if (
|
if (!segments || !['movie', 'book', 'tv', 'game', 'album', 'podcast'].includes(segments[0]))
|
||||||
!segments ||
|
|
||||||
!(
|
|
||||||
segments[0] === 'movie' ||
|
|
||||||
segments[0] === 'book' ||
|
|
||||||
(segments[0] === 'tv' && segments[1] !== 'season') ||
|
|
||||||
segments[0] === 'game'
|
|
||||||
)
|
|
||||||
)
|
|
||||||
return null
|
return null
|
||||||
|
|
||||||
const [headingLines, setHeadingLines] = useState(3)
|
const [headingLines, setHeadingLines] = useState(3)
|
||||||
|
|
||||||
const { data } = useNeodbQuery({ path: `${segments[0]}/${segments[1]}` })
|
const { data } = useNeodbQuery({
|
||||||
|
path:
|
||||||
|
segments[0] === 'tv' && segments[1] === 'season'
|
||||||
|
? `${segments[0]}${segments[1]}/${segments[2]}`
|
||||||
|
: `${segments[0]}/${segments[1]}`
|
||||||
|
})
|
||||||
|
|
||||||
if (!data) return null
|
if (!data) return null
|
||||||
|
|
||||||
|
@ -110,17 +107,32 @@ export const CardNeodb: React.FC<Props> = ({ card }) => {
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
case 'tv':
|
case 'tv':
|
||||||
return (
|
if (segments[1] === 'season') {
|
||||||
<Content
|
return (
|
||||||
heading={[data.title, data.orig_title, data.year ? `(${data.year})` : null]}
|
<Content
|
||||||
details={[
|
heading={[data.title, data.orig_title, data.year ? `(${data.year})` : null]}
|
||||||
data.season_count ? `共${data.season_count}季` : null,
|
details={[
|
||||||
data.area?.join(' '),
|
data.season_number ? `第${data.season_number}季` : null,
|
||||||
data.genre?.join(' '),
|
data.episode_count ? `共${data.episode_count}集` : null,
|
||||||
data.director?.join(' ')
|
data.area?.join(' '),
|
||||||
]}
|
data.genre?.join(' '),
|
||||||
/>
|
data.director?.join(' ')
|
||||||
)
|
]}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
return (
|
||||||
|
<Content
|
||||||
|
heading={[data.title, data.orig_title, data.year ? `(${data.year})` : null]}
|
||||||
|
details={[
|
||||||
|
data.season_count ? `共${data.season_count}季` : null,
|
||||||
|
data.area?.join(' '),
|
||||||
|
data.genre?.join(' '),
|
||||||
|
data.director?.join(' ')
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
case 'game':
|
case 'game':
|
||||||
return (
|
return (
|
||||||
<Content
|
<Content
|
||||||
|
@ -133,6 +145,23 @@ export const CardNeodb: React.FC<Props> = ({ card }) => {
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
|
case 'album':
|
||||||
|
return (
|
||||||
|
<Content
|
||||||
|
heading={[data.title]}
|
||||||
|
details={[
|
||||||
|
data.artist.join(' '),
|
||||||
|
data.release_date,
|
||||||
|
data.duration,
|
||||||
|
data.genre.join(' '),
|
||||||
|
data.company.join(' ')
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
case 'podcast':
|
||||||
|
return (
|
||||||
|
<Content heading={[data.title]} details={[data.hosts.join(' '), data.genre.join(' ')]} />
|
||||||
|
)
|
||||||
default:
|
default:
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import { QueryKeyStatus } from '@utils/queryHooks/status'
|
||||||
import { getGlobalStorage } from '@utils/storage/actions'
|
import { getGlobalStorage } from '@utils/storage/actions'
|
||||||
import * as Linking from 'expo-linking'
|
import * as Linking from 'expo-linking'
|
||||||
import * as WebBrowser from 'expo-web-browser'
|
import * as WebBrowser from 'expo-web-browser'
|
||||||
|
import { WebBrowserPresentationStyle } from 'expo-web-browser'
|
||||||
|
|
||||||
const openLink = async (url: string, navigation?: any) => {
|
const openLink = async (url: string, navigation?: any) => {
|
||||||
const handleNavigation = (page: 'Tab-Shared-Toot' | 'Tab-Shared-Account', options: any) => {
|
const handleNavigation = (page: 'Tab-Shared-Toot' | 'Tab-Shared-Account', options: any) => {
|
||||||
|
@ -74,6 +75,7 @@ const openLink = async (url: string, navigation?: any) => {
|
||||||
default:
|
default:
|
||||||
await WebBrowser.openBrowserAsync(url.trim(), {
|
await WebBrowser.openBrowserAsync(url.trim(), {
|
||||||
dismissButtonStyle: 'close',
|
dismissButtonStyle: 'close',
|
||||||
|
presentationStyle: WebBrowserPresentationStyle.AUTOMATIC,
|
||||||
enableBarCollapsing: true,
|
enableBarCollapsing: true,
|
||||||
...(await browserPackage())
|
...(await browserPackage())
|
||||||
}).catch(() => Linking.openURL(url.trim()))
|
}).catch(() => Linking.openURL(url.trim()))
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
export default {
|
||||||
|
common: require('./common'),
|
||||||
|
|
||||||
|
screens: require('./screens'),
|
||||||
|
screenAccountSelection: require('./screens/accountSelection.json'),
|
||||||
|
screenAnnouncements: require('./screens/announcements'),
|
||||||
|
screenCompose: require('./screens/compose'),
|
||||||
|
screenImageViewer: require('./screens/imageViewer'),
|
||||||
|
screenTabs: require('./screens/tabs'),
|
||||||
|
|
||||||
|
componentContextMenu: require('./components/contextMenu'),
|
||||||
|
componentEmojis: require('./components/emojis'),
|
||||||
|
componentInstance: require('./components/instance'),
|
||||||
|
componentMediaSelector: require('./components/mediaSelector'),
|
||||||
|
componentParse: require('./components/parse'),
|
||||||
|
componentRelationship: require('./components/relationship'),
|
||||||
|
componentTimeline: require('./components/timeline')
|
||||||
|
}
|
|
@ -5,6 +5,7 @@ import { initReactI18next } from 'react-i18next'
|
||||||
import be from './be'
|
import be from './be'
|
||||||
import ca from './ca'
|
import ca from './ca'
|
||||||
import de from './de'
|
import de from './de'
|
||||||
|
import el from './el'
|
||||||
import en from './en'
|
import en from './en'
|
||||||
import es from './es'
|
import es from './es'
|
||||||
import eu from './eu'
|
import eu from './eu'
|
||||||
|
@ -29,6 +30,7 @@ import '@formatjs/intl-pluralrules/polyfill'
|
||||||
import '@formatjs/intl-pluralrules/locale-data/be'
|
import '@formatjs/intl-pluralrules/locale-data/be'
|
||||||
import '@formatjs/intl-pluralrules/locale-data/ca'
|
import '@formatjs/intl-pluralrules/locale-data/ca'
|
||||||
import '@formatjs/intl-pluralrules/locale-data/de'
|
import '@formatjs/intl-pluralrules/locale-data/de'
|
||||||
|
import '@formatjs/intl-pluralrules/locale-data/el'
|
||||||
import '@formatjs/intl-pluralrules/locale-data/en'
|
import '@formatjs/intl-pluralrules/locale-data/en'
|
||||||
import '@formatjs/intl-pluralrules/locale-data/es'
|
import '@formatjs/intl-pluralrules/locale-data/es'
|
||||||
import '@formatjs/intl-pluralrules/locale-data/eu'
|
import '@formatjs/intl-pluralrules/locale-data/eu'
|
||||||
|
@ -49,6 +51,7 @@ import '@formatjs/intl-numberformat/polyfill'
|
||||||
import '@formatjs/intl-numberformat/locale-data/be'
|
import '@formatjs/intl-numberformat/locale-data/be'
|
||||||
import '@formatjs/intl-numberformat/locale-data/ca'
|
import '@formatjs/intl-numberformat/locale-data/ca'
|
||||||
import '@formatjs/intl-numberformat/locale-data/de'
|
import '@formatjs/intl-numberformat/locale-data/de'
|
||||||
|
import '@formatjs/intl-numberformat/locale-data/el'
|
||||||
import '@formatjs/intl-numberformat/locale-data/en'
|
import '@formatjs/intl-numberformat/locale-data/en'
|
||||||
import '@formatjs/intl-numberformat/locale-data/es'
|
import '@formatjs/intl-numberformat/locale-data/es'
|
||||||
import '@formatjs/intl-numberformat/locale-data/eu'
|
import '@formatjs/intl-numberformat/locale-data/eu'
|
||||||
|
@ -71,6 +74,7 @@ import '@formatjs/intl-datetimeformat/add-all-tz'
|
||||||
import '@formatjs/intl-datetimeformat/locale-data/be'
|
import '@formatjs/intl-datetimeformat/locale-data/be'
|
||||||
import '@formatjs/intl-datetimeformat/locale-data/ca'
|
import '@formatjs/intl-datetimeformat/locale-data/ca'
|
||||||
import '@formatjs/intl-datetimeformat/locale-data/de'
|
import '@formatjs/intl-datetimeformat/locale-data/de'
|
||||||
|
import '@formatjs/intl-datetimeformat/locale-data/el'
|
||||||
import '@formatjs/intl-datetimeformat/locale-data/en'
|
import '@formatjs/intl-datetimeformat/locale-data/en'
|
||||||
import '@formatjs/intl-datetimeformat/locale-data/es'
|
import '@formatjs/intl-datetimeformat/locale-data/es'
|
||||||
import '@formatjs/intl-datetimeformat/locale-data/eu'
|
import '@formatjs/intl-datetimeformat/locale-data/eu'
|
||||||
|
@ -92,6 +96,7 @@ import '@formatjs/intl-relativetimeformat/polyfill'
|
||||||
import '@formatjs/intl-relativetimeformat/locale-data/be'
|
import '@formatjs/intl-relativetimeformat/locale-data/be'
|
||||||
import '@formatjs/intl-relativetimeformat/locale-data/ca'
|
import '@formatjs/intl-relativetimeformat/locale-data/ca'
|
||||||
import '@formatjs/intl-relativetimeformat/locale-data/de'
|
import '@formatjs/intl-relativetimeformat/locale-data/de'
|
||||||
|
import '@formatjs/intl-relativetimeformat/locale-data/el'
|
||||||
import '@formatjs/intl-relativetimeformat/locale-data/en'
|
import '@formatjs/intl-relativetimeformat/locale-data/en'
|
||||||
import '@formatjs/intl-relativetimeformat/locale-data/es'
|
import '@formatjs/intl-relativetimeformat/locale-data/es'
|
||||||
import '@formatjs/intl-relativetimeformat/locale-data/eu'
|
import '@formatjs/intl-relativetimeformat/locale-data/eu'
|
||||||
|
@ -120,6 +125,7 @@ i18n.use(initReactI18next).init({
|
||||||
be,
|
be,
|
||||||
ca,
|
ca,
|
||||||
de,
|
de,
|
||||||
|
el,
|
||||||
en,
|
en,
|
||||||
es,
|
es,
|
||||||
eu,
|
eu,
|
||||||
|
|
|
@ -2,6 +2,7 @@ const LOCALES = {
|
||||||
be: 'Беларуская',
|
be: 'Беларуская',
|
||||||
ca: 'Català',
|
ca: 'Català',
|
||||||
de: 'Deutsch',
|
de: 'Deutsch',
|
||||||
|
el: 'Ελληνικά',
|
||||||
en: 'English',
|
en: 'English',
|
||||||
es: 'Español',
|
es: 'Español',
|
||||||
eu: 'Euskara',
|
eu: 'Euskara',
|
||||||
|
|
|
@ -129,7 +129,7 @@
|
||||||
"muted": {
|
"muted": {
|
||||||
"accessibilityLabel": "Дмух приглушений"
|
"accessibilityLabel": "Дмух приглушений"
|
||||||
},
|
},
|
||||||
"replies": "",
|
"replies": "Відповіді <0 />",
|
||||||
"visibility": {
|
"visibility": {
|
||||||
"direct": {
|
"direct": {
|
||||||
"accessibilityLabel": "Дмухнути особистим повідомленням"
|
"accessibilityLabel": "Дмухнути особистим повідомленням"
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
"delete": "Xóa",
|
"delete": "Xóa",
|
||||||
"done": "Xong",
|
"done": "Xong",
|
||||||
"confirm": "Xác nhận",
|
"confirm": "Xác nhận",
|
||||||
"add": ""
|
"add": "Thêm"
|
||||||
},
|
},
|
||||||
"customEmoji": {
|
"customEmoji": {
|
||||||
"accessibilityLabel": "Tùy chỉnh emoji {{emoji}}"
|
"accessibilityLabel": "Tùy chỉnh emoji {{emoji}}"
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
"action_false": "Theo dõi người này",
|
"action_false": "Theo dõi người này",
|
||||||
"action_true": "Ngưng theo dõi người này"
|
"action_true": "Ngưng theo dõi người này"
|
||||||
},
|
},
|
||||||
"inLists": "",
|
"inLists": "Danh sách người ...",
|
||||||
"showBoosts": {
|
"showBoosts": {
|
||||||
"action_false": "Hiển lượt đăng lại",
|
"action_false": "Hiển lượt đăng lại",
|
||||||
"action_true": "Ẩn lượt đăng lại"
|
"action_true": "Ẩn lượt đăng lại"
|
||||||
|
@ -16,12 +16,12 @@
|
||||||
"action_true": "Bỏ ẩn người dùng"
|
"action_true": "Bỏ ẩn người dùng"
|
||||||
},
|
},
|
||||||
"followAs": {
|
"followAs": {
|
||||||
"trigger": "",
|
"trigger": "Theo dõi như...",
|
||||||
"succeed_default": "",
|
"succeed_default": "Đang theo dõi @{{target}} bằng @{{source}}",
|
||||||
"succeed_locked": "",
|
"succeed_locked": "Đã gửi yêu cầu theo dõi tới @{{target}} bằng {{source}}, đang chờ duyệt",
|
||||||
"failed": ""
|
"failed": "Theo dõi như"
|
||||||
},
|
},
|
||||||
"blockReport": "",
|
"blockReport": "Chặn & Báo cáo",
|
||||||
"block": {
|
"block": {
|
||||||
"action_false": "Chặn người này",
|
"action_false": "Chặn người này",
|
||||||
"action_true": "Bỏ chặn người dùng",
|
"action_true": "Bỏ chặn người dùng",
|
||||||
|
@ -56,11 +56,11 @@
|
||||||
},
|
},
|
||||||
"hashtag": {
|
"hashtag": {
|
||||||
"follow": {
|
"follow": {
|
||||||
"action_false": "",
|
"action_false": "Theo dõi",
|
||||||
"action_true": ""
|
"action_true": "Ngưng theo dõi"
|
||||||
},
|
},
|
||||||
"filter": {
|
"filter": {
|
||||||
"action": ""
|
"action": "Lọc hashtag..."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"share": {
|
"share": {
|
||||||
|
@ -99,8 +99,8 @@
|
||||||
"action_true": "Bỏ ghim tút"
|
"action_true": "Bỏ ghim tút"
|
||||||
},
|
},
|
||||||
"filter": {
|
"filter": {
|
||||||
"action_false": "",
|
"action_false": "Lọc tút...",
|
||||||
"action_true": ""
|
"action_true": "Quản lý bộ lọc..."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -17,10 +17,10 @@
|
||||||
"refresh": {
|
"refresh": {
|
||||||
"fetchPreviousPage": "Trước đó",
|
"fetchPreviousPage": "Trước đó",
|
||||||
"refetch": "Trang cuối",
|
"refetch": "Trang cuối",
|
||||||
"fetching": "",
|
"fetching": "Đang tải những tút mới...",
|
||||||
"fetched": {
|
"fetched": {
|
||||||
"none": "",
|
"none": "Đã đọc hết",
|
||||||
"found": ""
|
"found": "Đã tải {{count}} tút"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"shared": {
|
"shared": {
|
||||||
|
@ -33,7 +33,7 @@
|
||||||
"poll": "Cuộc bình chọn đã kết thúc",
|
"poll": "Cuộc bình chọn đã kết thúc",
|
||||||
"reblog": {
|
"reblog": {
|
||||||
"default": "{{name}} đăng lại",
|
"default": "{{name}} đăng lại",
|
||||||
"myself": "",
|
"myself": "Bạn đăng lại",
|
||||||
"notification": "{{name}} đăng lại tút của bạn"
|
"notification": "{{name}} đăng lại tút của bạn"
|
||||||
},
|
},
|
||||||
"update": "Đăng lại đã được sửa",
|
"update": "Đăng lại đã được sửa",
|
||||||
|
|
|
@ -11,16 +11,16 @@
|
||||||
"segments": {
|
"segments": {
|
||||||
"federated": "Liên hợp",
|
"federated": "Liên hợp",
|
||||||
"local": "Máy chủ",
|
"local": "Máy chủ",
|
||||||
"explore": ""
|
"explore": "Khám phá"
|
||||||
},
|
},
|
||||||
"exploring": {
|
"exploring": {
|
||||||
"heading": "",
|
"heading": "Khám phá",
|
||||||
"trending": "",
|
"trending": "Xu hướng",
|
||||||
"followRemote": "",
|
"followRemote": "Theo dõi máy chủ từ xa",
|
||||||
"noTitle": "",
|
"noTitle": "Không tiêu đề",
|
||||||
"errors": {
|
"errors": {
|
||||||
"existed": "",
|
"existed": "Bạn đang theo dõi máy chủ này.",
|
||||||
"notAvailable": ""
|
"notAvailable": "Bảng tin máy chủ này không công khai. Thử máy chủ khác."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -80,16 +80,16 @@
|
||||||
"name": "Thông báo đẩy"
|
"name": "Thông báo đẩy"
|
||||||
},
|
},
|
||||||
"preferences": {
|
"preferences": {
|
||||||
"name": ""
|
"name": "Tùy chọn"
|
||||||
},
|
},
|
||||||
"preferencesFilters": {
|
"preferencesFilters": {
|
||||||
"name": ""
|
"name": "Tất cả bộ lọc nội dung"
|
||||||
},
|
},
|
||||||
"preferencesFilterAdd": {
|
"preferencesFilterAdd": {
|
||||||
"name": ""
|
"name": "Tạo bộ lọc"
|
||||||
},
|
},
|
||||||
"preferencesFilterEdit": {
|
"preferencesFilterEdit": {
|
||||||
"name": ""
|
"name": "Sửa bộ lọc"
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
"name": "Sửa hồ sơ"
|
"name": "Sửa hồ sơ"
|
||||||
|
@ -146,48 +146,48 @@
|
||||||
},
|
},
|
||||||
"preferences": {
|
"preferences": {
|
||||||
"visibility": {
|
"visibility": {
|
||||||
"title": "",
|
"title": "Kiểu đăng mặc định",
|
||||||
"options": {
|
"options": {
|
||||||
"public": "",
|
"public": "Công khai",
|
||||||
"unlisted": "",
|
"unlisted": "Hạn chế",
|
||||||
"private": ""
|
"private": "Chỉ người theo dõi"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sensitive": {
|
"sensitive": {
|
||||||
"title": ""
|
"title": "Luôn đánh dấu ảnh/video là nội dung nhạy cảm"
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
"title": "",
|
"title": "Hiển thị media",
|
||||||
"options": {
|
"options": {
|
||||||
"default": "",
|
"default": "Làm mờ nội dung nhạy cảm",
|
||||||
"show_all": "",
|
"show_all": "Luôn hiển thị",
|
||||||
"hide_all": ""
|
"hide_all": "Ẩn"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"spoilers": {
|
"spoilers": {
|
||||||
"title": ""
|
"title": "Luôn hiển thị đầy đủ nội dung tút"
|
||||||
},
|
},
|
||||||
"autoplay_gifs": {
|
"autoplay_gifs": {
|
||||||
"title": ""
|
"title": "Tự động phát GIF"
|
||||||
},
|
},
|
||||||
"filters": {
|
"filters": {
|
||||||
"title": "",
|
"title": "Lọc nội dung",
|
||||||
"content": ""
|
"content": "{{count}} đang dùng"
|
||||||
},
|
},
|
||||||
"web_only": {
|
"web_only": {
|
||||||
"title": "",
|
"title": "Cài đặt cập nhật",
|
||||||
"description": ""
|
"description": "Những cài đặt bên dưới chỉ cập nhật khi dùng web UI"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"preferencesFilters": {
|
"preferencesFilters": {
|
||||||
"expired": "",
|
"expired": "Đã hết hạn",
|
||||||
"keywords_one": "{{count}} từ khóa",
|
"keywords_one": "{{count}} từ khóa",
|
||||||
"keywords_other": "{{count}} từ khóa",
|
"keywords_other": "{{count}} từ khóa",
|
||||||
"statuses_one": "{{count}} tút",
|
"statuses_one": "{{count}} tút",
|
||||||
"statuses_other": "{{count}} tút",
|
"statuses_other": "{{count}} tút",
|
||||||
"context": "",
|
"context": "Áp dụng sau <0 />",
|
||||||
"contexts": {
|
"contexts": {
|
||||||
"home": "",
|
"home": "đang theo dõi và danh sách",
|
||||||
"notifications": "thông báo",
|
"notifications": "thông báo",
|
||||||
"public": "liên hợp",
|
"public": "liên hợp",
|
||||||
"thread": "thảo luận",
|
"thread": "thảo luận",
|
||||||
|
@ -195,33 +195,33 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"preferencesFilter": {
|
"preferencesFilter": {
|
||||||
"name": "",
|
"name": "Tên",
|
||||||
"expiration": "",
|
"expiration": "Hết hiệu lực",
|
||||||
"expirationOptions": {
|
"expirationOptions": {
|
||||||
"0": "",
|
"0": "Không bao giờ",
|
||||||
"1800": "",
|
"1800": "Sau 30 phút",
|
||||||
"3600": "",
|
"3600": "Sau 1 giờ",
|
||||||
"43200": "",
|
"43200": "Sau 12 giờ",
|
||||||
"86400": "",
|
"86400": "Sau 1 ngày",
|
||||||
"604800": "",
|
"604800": "Sau 1 tuần",
|
||||||
"18144000": ""
|
"18144000": "Sau 1 tháng"
|
||||||
},
|
},
|
||||||
"context": "",
|
"context": "Áp dụng trong",
|
||||||
"contexts": {
|
"contexts": {
|
||||||
"home": "",
|
"home": "Đang theo dõi và danh sách",
|
||||||
"notifications": "",
|
"notifications": "Thông báo",
|
||||||
"public": "",
|
"public": "Liên hợp",
|
||||||
"thread": "",
|
"thread": "Hội thoại",
|
||||||
"account": ""
|
"account": "Xem hồ sơ"
|
||||||
},
|
},
|
||||||
"action": "",
|
"action": "Khi trùng khớp",
|
||||||
"actions": {
|
"actions": {
|
||||||
"warn": "",
|
"warn": "Thu gọn nhưng có thể mở rộng",
|
||||||
"hide": ""
|
"hide": "Ẩn hoàn toàn"
|
||||||
},
|
},
|
||||||
"keywords": "",
|
"keywords": "Khớp từ khóa",
|
||||||
"keyword": "",
|
"keyword": "Từ khóa",
|
||||||
"statuses": ""
|
"statuses": "Tút trùng khớp"
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
"feedback": {
|
"feedback": {
|
||||||
|
@ -390,7 +390,7 @@
|
||||||
"accessibilityHint": "Bạn có thể ẩn, chặn, báo cáo hoặc chia sẻ người này"
|
"accessibilityHint": "Bạn có thể ẩn, chặn, báo cáo hoặc chia sẻ người này"
|
||||||
},
|
},
|
||||||
"followed_by": " đang theo dõi bạn",
|
"followed_by": " đang theo dõi bạn",
|
||||||
"privateNote": "",
|
"privateNote": "Cài ghi chú riêng",
|
||||||
"moved": "Đã chuyển đi",
|
"moved": "Đã chuyển đi",
|
||||||
"created_at": "Đã tham gia {{date}}",
|
"created_at": "Đã tham gia {{date}}",
|
||||||
"summary": {
|
"summary": {
|
||||||
|
@ -411,8 +411,8 @@
|
||||||
"name": "<0 /><1>'s media</1>"
|
"name": "<0 /><1>'s media</1>"
|
||||||
},
|
},
|
||||||
"filter": {
|
"filter": {
|
||||||
"name": "",
|
"name": "Thêm vào bộ lọc",
|
||||||
"existed": ""
|
"existed": "Đã tồn tại trong bộ lọc"
|
||||||
},
|
},
|
||||||
"history": {
|
"history": {
|
||||||
"name": "Lịch sử chỉnh sửa"
|
"name": "Lịch sử chỉnh sửa"
|
||||||
|
@ -462,7 +462,7 @@
|
||||||
"statuses": "Tút"
|
"statuses": "Tút"
|
||||||
},
|
},
|
||||||
"notFound": "Không tìm thấy {{type}} <bold>{{searchTerm}}</bold>",
|
"notFound": "Không tìm thấy {{type}} <bold>{{searchTerm}}</bold>",
|
||||||
"noResult": ""
|
"noResult": "Không tìm thấy, vui lòng thử cái khác"
|
||||||
},
|
},
|
||||||
"toot": {
|
"toot": {
|
||||||
"name": "Nội dung tút",
|
"name": "Nội dung tút",
|
||||||
|
|
|
@ -11,7 +11,6 @@ import { RootStackScreenProps } from '@utils/navigation/navigators'
|
||||||
import { useInstanceQuery } from '@utils/queryHooks/instance'
|
import { useInstanceQuery } from '@utils/queryHooks/instance'
|
||||||
import { usePreferencesQuery } from '@utils/queryHooks/preferences'
|
import { usePreferencesQuery } from '@utils/queryHooks/preferences'
|
||||||
import { searchLocalStatus } from '@utils/queryHooks/search'
|
import { searchLocalStatus } from '@utils/queryHooks/search'
|
||||||
import { useTimelineMutation } from '@utils/queryHooks/timeline'
|
|
||||||
import {
|
import {
|
||||||
getAccountStorage,
|
getAccountStorage,
|
||||||
getGlobalStorage,
|
getGlobalStorage,
|
||||||
|
@ -220,7 +219,6 @@ const ScreenCompose: React.FC<RootStackScreenProps<'Screen-Compose'>> = ({
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
const mutateTimeline = useTimelineMutation({ onMutate: true })
|
|
||||||
|
|
||||||
const inputProps: EmojisState['inputProps'] = [
|
const inputProps: EmojisState['inputProps'] = [
|
||||||
{
|
{
|
||||||
|
|
|
@ -3,11 +3,11 @@ import Icon from '@components/Icon'
|
||||||
import { Loading } from '@components/Loading'
|
import { Loading } from '@components/Loading'
|
||||||
import { MenuContainer, MenuRow } from '@components/Menu'
|
import { MenuContainer, MenuRow } from '@components/Menu'
|
||||||
import { displayMessage } from '@components/Message'
|
import { displayMessage } from '@components/Message'
|
||||||
|
import openLink from '@components/openLink'
|
||||||
import CustomText from '@components/Text'
|
import CustomText from '@components/Text'
|
||||||
import * as Sentry from '@sentry/react-native'
|
import * as Sentry from '@sentry/react-native'
|
||||||
import apiInstance from '@utils/api/instance'
|
import apiInstance from '@utils/api/instance'
|
||||||
import apiTooot, { TOOOT_API_DOMAIN } from '@utils/api/tooot'
|
import apiTooot, { TOOOT_API_DOMAIN } from '@utils/api/tooot'
|
||||||
import browserPackage from '@utils/helpers/browserPackage'
|
|
||||||
import { PUSH_ADMIN, PUSH_DEFAULT, setChannels } from '@utils/push/constants'
|
import { PUSH_ADMIN, PUSH_DEFAULT, setChannels } from '@utils/push/constants'
|
||||||
import { updateExpoToken } from '@utils/push/updateExpoToken'
|
import { updateExpoToken } from '@utils/push/updateExpoToken'
|
||||||
import { useAppsQuery } from '@utils/queryHooks/apps'
|
import { useAppsQuery } from '@utils/queryHooks/apps'
|
||||||
|
@ -18,7 +18,6 @@ import layoutAnimation from '@utils/styles/layoutAnimation'
|
||||||
import { useTheme } from '@utils/styles/ThemeManager'
|
import { useTheme } from '@utils/styles/ThemeManager'
|
||||||
import * as Crypto from 'expo-crypto'
|
import * as Crypto from 'expo-crypto'
|
||||||
import * as Notifications from 'expo-notifications'
|
import * as Notifications from 'expo-notifications'
|
||||||
import * as WebBrowser from 'expo-web-browser'
|
|
||||||
import React, { useEffect, useState } from 'react'
|
import React, { useEffect, useState } from 'react'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import { AppState, Linking, Platform, ScrollView, View } from 'react-native'
|
import { AppState, Linking, Platform, ScrollView, View } from 'react-native'
|
||||||
|
@ -271,11 +270,7 @@ const TabMePush: React.FC = () => {
|
||||||
<MenuRow
|
<MenuRow
|
||||||
title={t('me.push.howitworks')}
|
title={t('me.push.howitworks')}
|
||||||
iconBack='external-link'
|
iconBack='external-link'
|
||||||
onPress={async () =>
|
onPress={async () => openLink('https://tooot.app/how-push-works')}
|
||||||
WebBrowser.openBrowserAsync('https://tooot.app/how-push-works', {
|
|
||||||
...(await browserPackage())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
/>
|
/>
|
||||||
</MenuContainer>
|
</MenuContainer>
|
||||||
<MenuContainer children={alerts()} />
|
<MenuContainer children={alerts()} />
|
||||||
|
|
|
@ -36,15 +36,12 @@ const SettingsApp: React.FC = () => {
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
if (connect) {
|
if (connect) {
|
||||||
GLOBAL.connect = false
|
GLOBAL.connect = false
|
||||||
setConnect(false)
|
|
||||||
} else {
|
} else {
|
||||||
setShowConnect(false)
|
setShowConnect(false)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
const [clearingCache, setClearingCache] = useState(false)
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<MenuContainer>
|
<MenuContainer>
|
||||||
<MenuRow
|
<MenuRow
|
||||||
|
@ -175,7 +172,7 @@ const SettingsApp: React.FC = () => {
|
||||||
/>
|
/>
|
||||||
{showConnect ? (
|
{showConnect ? (
|
||||||
<MenuRow
|
<MenuRow
|
||||||
title='使用代理'
|
title='使用免费🪜'
|
||||||
switchValue={connect || false}
|
switchValue={connect || false}
|
||||||
switchOnValueChange={() => {
|
switchOnValueChange={() => {
|
||||||
GLOBAL.connect = !connect
|
GLOBAL.connect = !connect
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
import Icon from '@components/Icon'
|
import Icon from '@components/Icon'
|
||||||
import { MenuContainer, MenuRow } from '@components/Menu'
|
import { MenuContainer, MenuRow } from '@components/Menu'
|
||||||
|
import openLink from '@components/openLink'
|
||||||
import { useNavigation } from '@react-navigation/native'
|
import { useNavigation } from '@react-navigation/native'
|
||||||
import browserPackage from '@utils/helpers/browserPackage'
|
|
||||||
import { getAccountStorage, useGlobalStorage } from '@utils/storage/actions'
|
import { getAccountStorage, useGlobalStorage } from '@utils/storage/actions'
|
||||||
import { StyleConstants } from '@utils/styles/constants'
|
import { StyleConstants } from '@utils/styles/constants'
|
||||||
import { useTheme } from '@utils/styles/ThemeManager'
|
import { useTheme } from '@utils/styles/ThemeManager'
|
||||||
import Constants from 'expo-constants'
|
import Constants from 'expo-constants'
|
||||||
import * as Linking from 'expo-linking'
|
import * as Linking from 'expo-linking'
|
||||||
import * as WebBrowser from 'expo-web-browser'
|
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import { Platform } from 'react-native'
|
import { Platform } from 'react-native'
|
||||||
|
@ -60,9 +59,7 @@ const SettingsTooot: React.FC = () => {
|
||||||
']'
|
']'
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
WebBrowser.openBrowserAsync('https://social.xmflsct.com/@tooot', {
|
openLink('https://social.xmflsct.com/@tooot')
|
||||||
...(await browserPackage())
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -11,6 +11,7 @@ import React, { useContext, useState } from 'react'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import { Pressable, TextInput, View } from 'react-native'
|
import { Pressable, TextInput, View } from 'react-native'
|
||||||
import AccountContext from '../Context'
|
import AccountContext from '../Context'
|
||||||
|
import haptics from '@components/haptics'
|
||||||
|
|
||||||
const AccountInformationPrivateNote: React.FC = () => {
|
const AccountInformationPrivateNote: React.FC = () => {
|
||||||
const { relationship, pageMe } = useContext(AccountContext)
|
const { relationship, pageMe } = useContext(AccountContext)
|
||||||
|
@ -24,6 +25,7 @@ const AccountInformationPrivateNote: React.FC = () => {
|
||||||
const queryKey: QueryKeyRelationship = ['Relationship', { id: relationship?.id }]
|
const queryKey: QueryKeyRelationship = ['Relationship', { id: relationship?.id }]
|
||||||
const mutation = useRelationshipMutation({
|
const mutation = useRelationshipMutation({
|
||||||
onMutate: async vars => {
|
onMutate: async vars => {
|
||||||
|
haptics('Light')
|
||||||
await queryClient.cancelQueries({ queryKey })
|
await queryClient.cancelQueries({ queryKey })
|
||||||
queryClient.setQueryData<Mastodon.Relationship[]>(queryKey, old => {
|
queryClient.setQueryData<Mastodon.Relationship[]>(queryKey, old => {
|
||||||
return old
|
return old
|
||||||
|
|
|
@ -77,6 +77,8 @@ const TabSharedToot: React.FC<TabSharedStackScreenProps<'Tab-Shared-Toot'>> = ({
|
||||||
const ancestorsCache = useRef<(Mastodon.Status & { _level?: number })[]>()
|
const ancestorsCache = useRef<(Mastodon.Status & { _level?: number })[]>()
|
||||||
const loaded = useRef<boolean>(false)
|
const loaded = useRef<boolean>(false)
|
||||||
const prependContent = async () => {
|
const prependContent = async () => {
|
||||||
|
await new Promise<void>(promise => setTimeout(promise, 128))
|
||||||
|
|
||||||
loaded.current = true
|
loaded.current = true
|
||||||
|
|
||||||
if (ancestorsCache.current?.length) {
|
if (ancestorsCache.current?.length) {
|
||||||
|
@ -123,6 +125,14 @@ const TabSharedToot: React.FC<TabSharedStackScreenProps<'Tab-Shared-Toot'>> = ({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const updateCounts = (
|
||||||
|
remote: Mastodon.Status
|
||||||
|
): Pick<Mastodon.Status, 'reblogs_count' | 'replies_count' | 'favourites_count'> => ({
|
||||||
|
reblogs_count: remote.reblogs_count,
|
||||||
|
replies_count: remote.replies_count,
|
||||||
|
favourites_count: remote.favourites_count
|
||||||
|
})
|
||||||
|
|
||||||
const match = urlMatcher(toot.url || toot.uri)
|
const match = urlMatcher(toot.url || toot.uri)
|
||||||
const remoteQueryEnabled =
|
const remoteQueryEnabled =
|
||||||
['public', 'unlisted'].includes(toot.visibility) &&
|
['public', 'unlisted'].includes(toot.visibility) &&
|
||||||
|
@ -165,14 +175,14 @@ const TabSharedToot: React.FC<TabSharedStackScreenProps<'Tab-Shared-Toot'>> = ({
|
||||||
enabled: !toot._remote,
|
enabled: !toot._remote,
|
||||||
staleTime: 0,
|
staleTime: 0,
|
||||||
refetchOnMount: true,
|
refetchOnMount: true,
|
||||||
onSuccess: async data => {
|
onSuccess: data => {
|
||||||
if (data.pages[0].body.length < 1) {
|
if (data.pages[0].body.length < 1) {
|
||||||
navigation.goBack()
|
navigation.goBack()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!remoteQueryEnabled) {
|
if (!remoteQueryEnabled) {
|
||||||
await prependContent()
|
prependContent()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -189,17 +199,24 @@ const TabSharedToot: React.FC<TabSharedStackScreenProps<'Tab-Shared-Toot'>> = ({
|
||||||
return Promise.reject('Cannot parse remote toot id')
|
return Promise.reject('Cannot parse remote toot id')
|
||||||
}
|
}
|
||||||
|
|
||||||
const context = await apiGeneral<{
|
const [remote, context] = await Promise.all([
|
||||||
ancestors: Mastodon.Status[]
|
apiGeneral<Mastodon.Status>({
|
||||||
descendants: Mastodon.Status[]
|
method: 'get',
|
||||||
}>({
|
domain,
|
||||||
method: 'get',
|
url: `api/v1/statuses/${id}`
|
||||||
domain,
|
}).then(res => res.body),
|
||||||
url: `api/v1/statuses/${id}/context`
|
apiGeneral<{
|
||||||
}).then(res => res.body)
|
ancestors: Mastodon.Status[]
|
||||||
|
descendants: Mastodon.Status[]
|
||||||
|
}>({
|
||||||
|
method: 'get',
|
||||||
|
domain,
|
||||||
|
url: `api/v1/statuses/${id}/context`
|
||||||
|
}).then(res => res.body)
|
||||||
|
])
|
||||||
|
|
||||||
if (!context?.ancestors.length && !context?.descendants.length) {
|
if (!context?.ancestors.length && !context?.descendants.length) {
|
||||||
return Promise.resolve([{ ...toot }])
|
return Promise.resolve([{ ...toot, ...updateCounts(remote) }])
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ancestorsCache.current?.length || 0) < context.ancestors.length) {
|
if ((ancestorsCache.current?.length || 0) < context.ancestors.length) {
|
||||||
|
@ -213,7 +230,7 @@ const TabSharedToot: React.FC<TabSharedStackScreenProps<'Tab-Shared-Toot'>> = ({
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const statuses = [{ ...toot }, ...context.descendants]
|
const statuses = [{ ...toot, ...updateCounts(remote) }, ...context.descendants]
|
||||||
return statuses.map((status, index) => {
|
return statuses.map((status, index) => {
|
||||||
if (index === 0) {
|
if (index === 0) {
|
||||||
status._level = 0
|
status._level = 0
|
||||||
|
@ -243,28 +260,44 @@ const TabSharedToot: React.FC<TabSharedStackScreenProps<'Tab-Shared-Toot'>> = ({
|
||||||
queryClient.cancelQueries(queryKey.local)
|
queryClient.cancelQueries(queryKey.local)
|
||||||
queryClient.setQueryData<{ pages: { body: Mastodon.Status[] }[] }>(
|
queryClient.setQueryData<{ pages: { body: Mastodon.Status[] }[] }>(
|
||||||
queryKey.local,
|
queryKey.local,
|
||||||
old => {
|
old => ({
|
||||||
return {
|
pages: [
|
||||||
pages: [
|
{
|
||||||
{
|
body: data.map(remote => {
|
||||||
body: data.map(remote => {
|
const localMatch = old?.pages[0].body.find(local => local.uri === remote.uri)
|
||||||
const localMatch = old?.pages[0].body.find(local => local.uri === remote.uri)
|
if (localMatch) {
|
||||||
if (localMatch) {
|
return { ...localMatch, _level: remote._level, ...updateCounts(remote) }
|
||||||
return { ...localMatch, _level: remote._level }
|
} else {
|
||||||
|
return appendRemote.status(remote, match!.domain)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
queryClient.cancelQueries(queryKey.local)
|
||||||
|
queryClient.setQueryData<{ pages: { body: Mastodon.Status[] }[] }>(
|
||||||
|
queryKey.local,
|
||||||
|
old => ({
|
||||||
|
pages: [
|
||||||
|
{
|
||||||
|
body:
|
||||||
|
old?.pages[0].body.map(local => {
|
||||||
|
const remoteMatch = data.find(remote => remote.uri === local.uri)
|
||||||
|
if (remoteMatch) {
|
||||||
|
return { ...local, ...updateCounts(remoteMatch) }
|
||||||
} else {
|
} else {
|
||||||
return appendRemote.status(remote, match!.domain)
|
return local
|
||||||
}
|
}
|
||||||
})
|
}) || []
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
})
|
||||||
}
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onSettled: async () => {
|
onSettled: () => prependContent()
|
||||||
await prependContent()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import { mapEnvironment } from '@utils/helpers/checkEnvironment'
|
import { mapEnvironment } from '@utils/helpers/checkEnvironment'
|
||||||
import { GLOBAL } from '@utils/storage'
|
import { GLOBAL } from '@utils/storage'
|
||||||
import { setGlobalStorage } from '@utils/storage/actions'
|
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
import * as Linking from 'expo-linking'
|
import * as Linking from 'expo-linking'
|
||||||
import { userAgent } from '.'
|
import { userAgent } from '.'
|
||||||
|
@ -119,6 +118,5 @@ export const connectVerify = () =>
|
||||||
headers: { ...userAgent }
|
headers: { ...userAgent }
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
GLOBAL.connect = false
|
GLOBAL.connect = false
|
||||||
setGlobalStorage('app.connect', false)
|
|
||||||
return Promise.reject(err)
|
return Promise.reject(err)
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import * as Sentry from '@sentry/react-native'
|
import * as Sentry from '@sentry/react-native'
|
||||||
import { GLOBAL } from '@utils/storage'
|
import { GLOBAL } from '@utils/storage'
|
||||||
import { setGlobalStorage } from '@utils/storage/actions'
|
|
||||||
import chalk from 'chalk'
|
import chalk from 'chalk'
|
||||||
import Constants from 'expo-constants'
|
import Constants from 'expo-constants'
|
||||||
import * as Linking from 'expo-linking'
|
import * as Linking from 'expo-linking'
|
||||||
|
@ -23,7 +22,6 @@ const handleError =
|
||||||
if (GLOBAL.connect) {
|
if (GLOBAL.connect) {
|
||||||
if (error?.response?.status == 403 && error?.response?.data == 'connect_blocked') {
|
if (error?.response?.status == 403 && error?.response?.data == 'connect_blocked') {
|
||||||
GLOBAL.connect = false
|
GLOBAL.connect = false
|
||||||
setGlobalStorage('app.connect', false)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const shouldReportToSentry = config && (config.captureRequest || config.captureResponse)
|
const shouldReportToSentry = config && (config.captureRequest || config.captureResponse)
|
||||||
|
|
|
@ -23,6 +23,20 @@ const pushUseNavigate = (id?: Mastodon.Notification['id']) => {
|
||||||
params: { toot: body.status }
|
params: { toot: body.status }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body.type === 'follow' || body.type === 'follow_request') {
|
||||||
|
if (body.account) {
|
||||||
|
navigationRef.navigate('Screen-Tabs', {
|
||||||
|
screen: 'Tab-Notifications',
|
||||||
|
params: {
|
||||||
|
screen: 'Tab-Shared-Account',
|
||||||
|
params: { account: body.account }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ const queryFunction = async ({ queryKey }: QueryFunctionContext<QueryKeyNeodb>)
|
||||||
apiGeneral({
|
apiGeneral({
|
||||||
method: 'get',
|
method: 'get',
|
||||||
domain: 'neodb.social',
|
domain: 'neodb.social',
|
||||||
url: `/api/${queryKey[1].path}`
|
url: `api/${queryKey[1].path}`
|
||||||
}).then(res => res.body)
|
}).then(res => res.body)
|
||||||
|
|
||||||
export const useNeodbQuery = (
|
export const useNeodbQuery = (
|
||||||
|
|
|
@ -60,7 +60,7 @@ export const searchLocalStatus = async (
|
||||||
staleTime: 3600,
|
staleTime: 3600,
|
||||||
cacheTime: 3600,
|
cacheTime: 3600,
|
||||||
retry: false,
|
retry: false,
|
||||||
...(timeout && { meta: { timeout: 1000 } })
|
...(timeout && { meta: { timeout: 1500 } })
|
||||||
})
|
})
|
||||||
.then(res =>
|
.then(res =>
|
||||||
res.statuses[0]?.uri === uri || res.statuses[0]?.url === uri
|
res.statuses[0]?.uri === uri || res.statuses[0]?.url === uri
|
||||||
|
@ -79,7 +79,7 @@ export const searchLocalAccount = async (
|
||||||
staleTime: 3600,
|
staleTime: 3600,
|
||||||
cacheTime: 3600,
|
cacheTime: 3600,
|
||||||
retry: false,
|
retry: false,
|
||||||
...(timeout && { meta: { timeout: 1000 } })
|
...(timeout && { meta: { timeout: 1500 } })
|
||||||
})
|
})
|
||||||
.then(res => (res.accounts[0].url === url ? res.accounts[0] : Promise.reject()))
|
.then(res => (res.accounts[0].url === url ? res.accounts[0] : Promise.reject()))
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,6 +60,7 @@ const determineTheme = (
|
||||||
const determineDarkTheme = DarkTheme[darkTheme || 'lighter']
|
const determineDarkTheme = DarkTheme[darkTheme || 'lighter']
|
||||||
switch (userTheme) {
|
switch (userTheme) {
|
||||||
case 'auto':
|
case 'auto':
|
||||||
|
default:
|
||||||
switch (osTheme) {
|
switch (osTheme) {
|
||||||
case 'dark':
|
case 'dark':
|
||||||
return determineDarkTheme
|
return determineDarkTheme
|
||||||
|
@ -70,8 +71,6 @@ const determineTheme = (
|
||||||
return 'light'
|
return 'light'
|
||||||
case 'dark':
|
case 'dark':
|
||||||
return determineDarkTheme
|
return determineDarkTheme
|
||||||
default:
|
|
||||||
return determineDarkTheme
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue