1
0
mirror of https://github.com/tooot-app/app synced 2025-03-21 05:50:05 +01:00

Merge pull request #207 from tooot-app/main

Test v3.3
This commit is contained in:
xmflsct 2022-02-04 00:44:32 +01:00 committed by GitHub
commit 2a676a8167
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 896 additions and 451 deletions

View File

@ -18,7 +18,7 @@ jobs:
- name: -- Step 2 -- Setup node
uses: actions/setup-node@v2
with:
node-version: 14.x
node-version: 16.x
- name: -- Step 3 -- Use Expo action
uses: expo/expo-github-action@v6
with:

70
.github/workflows/codeql-analysis.yml vendored Normal file
View File

@ -0,0 +1,70 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ main ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ main ]
schedule:
- cron: '35 4 * * 4'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'javascript' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Learn more about CodeQL language support at https://git.io/codeql-language-support
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1

View File

@ -17,23 +17,23 @@ GEM
artifactory (3.0.15)
atomos (0.1.3)
aws-eventstream (1.2.0)
aws-partitions (1.541.0)
aws-sdk-core (3.124.0)
aws-partitions (1.551.0)
aws-sdk-core (3.125.5)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.525.0)
aws-sigv4 (~> 1.1)
jmespath (~> 1.0)
aws-sdk-kms (1.52.0)
aws-sdk-core (~> 3, >= 3.122.0)
aws-sdk-kms (1.53.0)
aws-sdk-core (~> 3, >= 3.125.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.109.0)
aws-sdk-core (~> 3, >= 3.122.0)
aws-sdk-s3 (1.111.3)
aws-sdk-core (~> 3, >= 3.125.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.4)
aws-sigv4 (1.4.0)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
claide (1.0.3)
claide (1.1.0)
cocoapods (1.11.2)
addressable (~> 2.8)
claide (>= 1.0.2, < 2.0)
@ -86,17 +86,18 @@ GEM
escape (0.0.4)
ethon (0.15.0)
ffi (>= 1.15.0)
excon (0.89.0)
faraday (1.8.0)
excon (0.90.0)
faraday (1.9.3)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
faraday-httpclient (~> 1.0.1)
faraday-httpclient (~> 1.0)
faraday-multipart (~> 1.0)
faraday-net_http (~> 1.0)
faraday-net_http_persistent (~> 1.1)
faraday-net_http_persistent (~> 1.0)
faraday-patron (~> 1.0)
faraday-rack (~> 1.0)
multipart-post (>= 1.2, < 3)
faraday-retry (~> 1.0)
ruby2_keywords (>= 0.0.4)
faraday-cookie_jar (0.0.7)
faraday (>= 0.8.0)
@ -105,14 +106,17 @@ GEM
faraday-em_synchrony (1.0.0)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-multipart (1.0.3)
multipart-post (>= 1.2, < 3)
faraday-net_http (1.0.1)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
faraday-retry (1.0.3)
faraday_middleware (1.2.0)
faraday (~> 1.0)
fastimage (2.2.5)
fastlane (2.199.0)
fastimage (2.2.6)
fastlane (2.203.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
@ -159,9 +163,9 @@ GEM
fourflusher (2.3.1)
fuzzy_match (2.0.4)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.14.0)
google-apis-androidpublisher_v3 (0.16.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-core (0.4.1)
google-apis-core (0.4.2)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
@ -170,11 +174,11 @@ GEM
retriable (>= 2.0, < 4.a)
rexml
webrick
google-apis-iamcredentials_v1 (0.9.0)
google-apis-iamcredentials_v1 (0.10.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-playcustomapp_v1 (0.6.0)
google-apis-playcustomapp_v1 (0.7.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-storage_v1 (0.10.0)
google-apis-storage_v1 (0.11.0)
google-apis-core (>= 0.4, < 2.a)
google-cloud-core (1.6.0)
google-cloud-env (~> 1.0)
@ -182,7 +186,7 @@ GEM
google-cloud-env (1.5.0)
faraday (>= 0.17.3, < 2.0)
google-cloud-errors (1.2.0)
google-cloud-storage (1.35.0)
google-cloud-storage (1.36.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
google-apis-iamcredentials_v1 (~> 0.1)
@ -203,7 +207,7 @@ GEM
httpclient (2.8.3)
i18n (1.8.10)
concurrent-ruby (~> 1.0)
jmespath (1.4.0)
jmespath (1.5.0)
json (2.6.1)
jwt (2.3.0)
memoist (0.16.2)

View File

@ -1,4 +1,4 @@
fastlane_version "2.199.0"
fastlane_version "2.203.0"
skip_docs
ensure_env_vars(

View File

@ -1 +1 @@
Optimize performance and fix bugs
Support iPad

View File

@ -1,6 +1,7 @@
tooot是一个专门为中文用户社区所打造的开源、简洁长毛象客户端。使用此客户端需要已经拥有一个长毛象https://joinmastodon.org/)账号。
tooot支持
- iPad
- 多账号登录
- 黑暗或自适应模式
- 可调整正文字体大小

View File

@ -1 +1 @@
性能有改进及修复错误
添加支持iPad

View File

@ -3,62 +3,62 @@ PODS:
- DoubleConversion (1.1.6)
- EXApplication (4.0.1):
- ExpoModulesCore
- EXAV (10.2.0):
- EXAV (10.2.1):
- ExpoModulesCore
- ReactCommon/turbomodule/core
- EXConstants (13.0.0):
- EXConstants (13.0.2):
- ExpoModulesCore
- EXCrypto (10.1.1):
- EXCrypto (10.1.2):
- ExpoModulesCore
- EXDevice (4.1.0):
- EXDevice (4.1.1):
- ExpoModulesCore
- EXErrorRecovery (3.0.4):
- EXErrorRecovery (3.0.5):
- ExpoModulesCore
- EXFileSystem (13.2.0):
- ExpoModulesCore
- EXFirebaseAnalytics (6.0.0):
- EXFirebaseAnalytics (6.0.1):
- EXFirebaseCore
- ExpoModulesCore
- Firebase/Core (= 7.7.0)
- EXFirebaseCore (4.1.0):
- ExpoModulesCore
- Firebase/Core (= 7.7.0)
- EXFont (10.0.4):
- EXFont (10.0.5):
- ExpoModulesCore
- EXImageLoader (3.1.0):
- ExpoModulesCore
- React-Core
- EXImageManipulator (10.2.0):
- EXImageManipulator (10.2.1):
- EXImageLoader
- ExpoModulesCore
- EXImagePicker (12.0.1):
- EXImagePicker (12.0.2):
- ExpoModulesCore
- EXJSONUtils (0.2.0)
- EXKeepAwake (10.0.1):
- EXKeepAwake (10.0.2):
- ExpoModulesCore
- EXManifests (0.2.2):
- EXJSONUtils
- EXNotifications (0.14.0):
- EXNotifications (0.14.1):
- ExpoModulesCore
- Expo (44.0.4):
- Expo (44.0.6):
- ExpoModulesCore
- ExpoHaptics (11.1.0):
- ExpoHaptics (11.1.1):
- ExpoModulesCore
- ExpoLocalization (12.0.0):
- ExpoLocalization (12.0.1):
- ExpoModulesCore
- ExpoModulesCore (0.6.4):
- ExpoModulesCore (0.6.5):
- React-Core
- ReactCommon/turbomodule/core
- EXRandom (12.1.1):
- EXRandom (12.1.2):
- React-Core
- EXScreenCapture (4.1.0):
- EXScreenCapture (4.1.1):
- ExpoModulesCore
- EXSecureStore (11.1.0):
- EXSecureStore (11.1.1):
- ExpoModulesCore
- EXSplashScreen (0.14.1):
- EXSplashScreen (0.14.2):
- ExpoModulesCore
- React-Core
- EXStoreReview (5.1.0):
- EXStoreReview (5.1.1):
- ExpoModulesCore
- EXStructuredHeaders (2.1.0)
- EXUpdates (0.11.3):
@ -70,7 +70,7 @@ PODS:
- EXUpdatesInterface (0.5.0)
- EXVideoThumbnails (6.2.0):
- ExpoModulesCore
- EXWebBrowser (10.1.0):
- EXWebBrowser (10.1.1):
- ExpoModulesCore
- FBLazyVector (0.66.4)
- FBReactNativeSpec (0.66.4):
@ -120,24 +120,24 @@ PODS:
- GoogleUtilities/Environment (~> 7.2)
- nanopb (~> 2.30907.0)
- PromisesObjC (~> 1.2)
- GoogleUtilities/AppDelegateSwizzler (7.6.0):
- GoogleUtilities/AppDelegateSwizzler (7.7.0):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Environment (7.6.0):
- GoogleUtilities/Environment (7.7.0):
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/Logger (7.6.0):
- GoogleUtilities/Logger (7.7.0):
- GoogleUtilities/Environment
- GoogleUtilities/MethodSwizzler (7.6.0):
- GoogleUtilities/MethodSwizzler (7.7.0):
- GoogleUtilities/Logger
- GoogleUtilities/Network (7.6.0):
- GoogleUtilities/Network (7.7.0):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (7.6.0)"
- GoogleUtilities/Reachability (7.6.0):
- "GoogleUtilities/NSData+zlib (7.7.0)"
- GoogleUtilities/Reachability (7.7.0):
- GoogleUtilities/Logger
- GoogleUtilities/UserDefaults (7.6.0):
- GoogleUtilities/UserDefaults (7.7.0):
- GoogleUtilities/Logger
- hermes-engine (0.9.0)
- libevent (2.1.12)
@ -377,7 +377,7 @@ PODS:
- React-Core
- react-native-cameraroll (4.1.2):
- React-Core
- react-native-netinfo (7.1.7):
- react-native-netinfo (7.1.9):
- React-Core
- react-native-pager-view (5.4.9):
- React-Core
@ -450,13 +450,13 @@ PODS:
- React-jsi (= 0.66.4)
- React-logger (= 0.66.4)
- React-perflogger (= 0.66.4)
- RNCAsyncStorage (1.15.14):
- RNCAsyncStorage (1.15.17):
- React-Core
- RNFastImage (8.5.11):
- React-Core
- SDWebImage (~> 5.11.1)
- SDWebImageWebPCoder (~> 0.8.4)
- RNGestureHandler (2.1.0):
- RNGestureHandler (2.2.0):
- React-Core
- RNReanimated (2.3.1):
- DoubleConversion
@ -486,12 +486,12 @@ PODS:
- React-RCTText
- ReactCommon/turbomodule/core
- Yoga
- RNScreens (3.10.1):
- RNScreens (3.10.2):
- React-Core
- React-RCTImage
- RNSentry (3.2.3):
- RNSentry (3.2.13):
- React-Core
- Sentry (= 7.5.1)
- Sentry (= 7.9.0)
- RNSVG (12.1.1):
- React
- SDWebImage (5.11.1):
@ -500,9 +500,9 @@ PODS:
- SDWebImageWebPCoder (0.8.4):
- libwebp (~> 1.0)
- SDWebImage/Core (~> 5.10)
- Sentry (7.5.1):
- Sentry/Core (= 7.5.1)
- Sentry/Core (7.5.1)
- Sentry (7.9.0):
- Sentry/Core (= 7.9.0)
- Sentry/Core (7.9.0)
- UMTaskManagerInterface (7.1.0):
- ExpoModulesCore
- Yoga (1.14.0)
@ -770,36 +770,36 @@ SPEC CHECKSUMS:
boost: a7c83b31436843459a1961bfd74b96033dc77234
DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662
EXApplication: bdc8dc27713235565da1029a34385229f31b8e08
EXAV: e501565d5aff495b7b5e9249d489f5ef94db03b2
EXConstants: 5d18484e38e8eacef7695a82214b6ac90133dedf
EXCrypto: e3c0853c2a9ef885928f6227b967b9598132f727
EXDevice: 7de98d8f97088fad9c01e9a68abad07e501208b2
EXErrorRecovery: deea88a01d38f8b1c1181b4e1d179b0ba0e4bb5b
EXAV: b9ed0c201092244c46aa78f907f5c66176bed236
EXConstants: 88bf79622fbd9b476c96d8ec57fe97ca44fe8e3c
EXCrypto: ab2ba0df3136a5f2407b8c7e70eb498ac20d704f
EXDevice: aa5e1edbf350481a948c3258b750dd11e6e4579e
EXErrorRecovery: b0d7582714a2cc896e94a2308a356f94dbf14ef7
EXFileSystem: 7bcd3c1428698150d5c8ca140c8183f2ee204048
EXFirebaseAnalytics: 27dbc5cb83c244d8404b2927676299f3e172470e
EXFirebaseAnalytics: a7ec2dd1394ad0de5c0c63fac0deee496f798284
EXFirebaseCore: 16f39b0ea94ce985a8f2e16cc796bf79bdcfa297
EXFont: 1fb13af43dc517c01c0ff21a6e32f9f9bf2ea602
EXFont: 2597c10ac85a69d348d44d7873eccf5a7576ef5e
EXImageLoader: df83442d32bcfb57b7cfc5690096b6caf8203f8d
EXImageManipulator: 810c7ea8d4cdcc52d07ad377a9b4ffeaee3d937f
EXImagePicker: 91337b8d57a0a8f56800b9ac0f2b2f10aecf88ce
EXImageManipulator: 60d1bf3f1d7709453b1feb38adf8594b7f58710f
EXImagePicker: bf4d62532cc2bf217edbe4abbb0014e73e079eac
EXJSONUtils: f515cf71710855d7ba5bfc6752af3b9a6f6aad01
EXKeepAwake: b571c2ad8323b2fced6e907766e2549f75119471
EXKeepAwake: bf48d7f740a5cd2befed6cf9a49911d385c6c47d
EXManifests: 50e42e01335df4e54109dee7be5a91bfd37347db
EXNotifications: d5b454a2363c8743aa9b2888cc0df70a1d9ee816
Expo: d9b8b5e49c200471fc473a652a84fe30dee73027
ExpoHaptics: c62a5fc7bba0184d0165d559fc2b0fc46168ef40
ExpoLocalization: 83582a967db52987a8479490b056d5eb9fd70552
ExpoModulesCore: 64abda7af7cf659d2fa092934e29c6f4ea7e849f
EXRandom: 06978dcf45075f3c9e17ae5e726b887316ee9877
EXScreenCapture: 0146fdf6ca4c3402a1cf62b2ddb739a840e08c94
EXSecureStore: fa0fdde1c81ceee2a3cb0519e649feae42767969
EXSplashScreen: 7872675b95bb07c25f922b3d3dfae70c76fb5a00
EXStoreReview: 6143555fc912a4a194300992cd297c3e5b521a8a
EXNotifications: a7d582fa800d77f4a75bd22d52e84e2fbcee26df
Expo: 534e51e607aba8229293297da5585f4b26f50fa1
ExpoHaptics: 0d0b69b2414755a4057ffad0a10315902c0ea1b7
ExpoLocalization: 72b4524c167da6c4e2a0bbe09176ff8b2c4eddbe
ExpoModulesCore: 32c0ccb47f477d330ee93db72505380adf0de09a
EXRandom: 1d00fd04d7d874c0c9d1ff87cee59ffe0b638a3d
EXScreenCapture: 9bfdadf17f0b1dd082edb704764f1724176b2f27
EXSecureStore: b80c74c5ee29d0160c2aace3fd9a24a5edc20015
EXSplashScreen: 21669e598804ee810547dbb6692c8deb5dd8dbf3
EXStoreReview: 5a24fd222d193878a7d4f6059dd19f51c808af66
EXStructuredHeaders: 2ce79a3770bd3795bade1aab215ada70deae8bbc
EXUpdates: 98b9e647ce7a0e9d5ab67135bf42188c750a99eb
EXUpdatesInterface: f459b515151bd73fff7a35366eace34a6c6a0d3f
EXVideoThumbnails: 847d648d6f4bc0c1afad05caa56a487dc543445e
EXWebBrowser: 37388663fa51cbfc883de2244931a5182d948e5f
EXWebBrowser: f1573262c5de753987ed526c630076eda130804d
FBLazyVector: e5569e42a1c79ca00521846c223173a57aca1fe1
FBReactNativeSpec: fe08c1cd7e2e205718d77ad14b34957cce949b58
Firebase: cd2ab85eec8170dc260186159f21072ecb679ad5
@ -811,7 +811,7 @@ SPEC CHECKSUMS:
glog: 5337263514dd6f09803962437687240c5dc39aa4
GoogleAppMeasurement: 0c3b134b2c0a90c4c24833873894bfe0e42a0384
GoogleDataTransport: 8b0e733ea77c9218778e5a9e34ba9508b8328939
GoogleUtilities: 684ee790a24f73ebb2d1d966e9711c203f2a4237
GoogleUtilities: e0913149f6b0625b553d70dae12b49fc62914fd1
hermes-engine: bf7577d12ac6ccf53ab8b5af3c6ccf0dd8458c5c
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
libwebp: 98a37e597e40bfdb4c911fc98f2c53d0b12d05fc
@ -833,7 +833,7 @@ SPEC CHECKSUMS:
react-native-blur: cad4d93b364f91e7b7931b3fa935455487e5c33c
react-native-blurhash: b7ed7b7de81ae1f9ce52d694f43c5b5cddddcae1
react-native-cameraroll: 2957f2bce63ae896a848fbe0d5352c1bd4d20866
react-native-netinfo: 27f287f2d191693f3b9d01a4273137fcf91c3b5d
react-native-netinfo: 87e5bfaf21ea5c6c110941290aa481dd8e849f98
react-native-pager-view: 3ee7d4c7697fb3ef788346e834a60cca97ed8540
react-native-safe-area-context: 584dc04881deb49474363f3be89e4ca0e854c057
react-native-segmented-control: 65df6cd0619b780b3843d574a72d4c7cec396097
@ -849,16 +849,16 @@ SPEC CHECKSUMS:
React-RCTVibration: e3ffca672dd3772536cb844274094b0e2c31b187
React-runtimeexecutor: dec32ee6f2e2a26e13e58152271535fadff5455a
ReactCommon: 57b69f6383eafcbd7da625bfa6003810332313c4
RNCAsyncStorage: ea6b5c280997b2b32a587793163b1f10e580c4f7
RNCAsyncStorage: 6bd5a7ba3dde1c3facba418aa273f449bdc5437a
RNFastImage: 1f2cab428712a4baaf78d6169eaec7f622556dd7
RNGestureHandler: e5c7cab5f214503dcefd6b2b0cefb050e1f51c4a
RNGestureHandler: bf572f552ea324acd5b5464b8d30755b2d8c1de6
RNReanimated: da3860204e5660c0dd66739936732197d359d753
RNScreens: 522705f2e5c9d27efb17f24aceb2bf8335bc7b8e
RNSentry: 97bc62fa65b7d663daee16fbf9771470852217cf
RNScreens: d6da2b9e29cf523832c2542f47bf1287318b1868
RNSentry: 0aa1567f66c20390f3834637fc4f73380dcd0774
RNSVG: 551acb6562324b1d52a4e0758f7ca0ec234e278f
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
SDWebImageWebPCoder: f93010f3f6c031e2f8fb3081ca4ee6966c539815
Sentry: 0718c3ad7a08e1107599610795adaf08864102f3
Sentry: 2f7e91f247cfb05b05bd01e0b5d0692557a7687b
UMTaskManagerInterface: 6f7150f9ec9bc6f2760eeae532a70de71ff951c1
Yoga: e7dc4e71caba6472ff48ad7d234389b91dadc280

View File

@ -184,7 +184,7 @@
83CBB9F71A601CBA00E9B192 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1130;
LastUpgradeCheck = 1320;
TargetAttributes = {
13B07F861A680F5B00A75B9A = {
DevelopmentTeam = 8EGBLQ2MA6;
@ -391,10 +391,12 @@
PRODUCT_BUNDLE_IDENTIFIER = com.xmflsct.app.tooot;
PRODUCT_NAME = tooot;
PROVISIONING_PROFILE_SPECIFIER = "match AdHoc com.xmflsct.app.tooot";
SUPPORTS_MACCATALYST = YES;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
SWIFT_OBJC_BRIDGING_HEADER = "tooot-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
@ -422,9 +424,11 @@
PRODUCT_BUNDLE_IDENTIFIER = com.xmflsct.app.tooot;
PRODUCT_NAME = tooot;
PROVISIONING_PROFILE_SPECIFIER = "match AppStore com.xmflsct.app.tooot";
SUPPORTS_MACCATALYST = YES;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
SWIFT_OBJC_BRIDGING_HEADER = "tooot-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
@ -452,6 +456,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@ -514,6 +519,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@ -542,6 +548,7 @@
);
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
VALIDATE_PRODUCT = YES;
};
name = Release;

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1210"
LastUpgradeVersion = "1320"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

View File

@ -37,6 +37,8 @@
<string>2102022230</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSApplicationCategoryType</key>
<string>public.app-category.social-networking</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppTransportSecurity</key>
@ -50,12 +52,14 @@
</dict>
</dict>
</dict>
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) DOES NOT need microphone permission. Please reject this request.</string>
<key>NSCameraUsageDescription</key>
<string>Allow $(PRODUCT_NAME) to capture photo or video and attach it to your toot</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string/>
<string></string>
<key>NSMainNibFile</key>
<string>LaunchScreen</string>
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) DOES NOT need microphone permission. Please reject this request.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Allow $(PRODUCT_NAME) to save an image to your camera roll</string>
<key>NSPhotoLibraryUsageDescription</key>

View File

@ -1,8 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>aps-environment</key>
<string>development</string>
</dict>
</plist>
<dict>
<key>aps-environment</key>
<string>development</string>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.device.audio-input</key>
<true/>
<key>com.apple.security.device.camera</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.personal-information.location</key>
<true/>
<key>com.apple.security.personal-information.photos-library</key>
<true/>
</dict>
</plist>

View File

@ -1,9 +1,9 @@
{
"name": "tooot",
"versions": {
"native": "220102",
"native": "220204",
"major": 3,
"minor": 2,
"minor": 3,
"patch": 0,
"expo": "44.0.0"
},
@ -17,50 +17,51 @@
"scripts": {
"start": "react-native start",
"android": "react-native run-android",
"ios": "react-native run-ios",
"iphone": "react-native run-ios",
"ipad": "react-native run-ios --simulator 'iPad mini (6th generation)'",
"app:build": "bundle exec fastlane build",
"release": "scripts/release.sh",
"clean": "react-native-clean-project",
"postinstall": "patch-package"
},
"dependencies": {
"@expo/react-native-action-sheet": "3.12.0",
"@expo/react-native-action-sheet": "3.13.0",
"@neverdull-agency/expo-unlimited-secure-store": "1.0.10",
"@react-native-async-storage/async-storage": "1.15.14",
"@react-native-async-storage/async-storage": "1.15.17",
"@react-native-community/blur": "3.6.0",
"@react-native-community/cameraroll": "4.1.2",
"@react-native-community/netinfo": "7.1.7",
"@react-native-community/netinfo": "7.1.9",
"@react-native-community/segmented-control": "2.2.2",
"@react-navigation/bottom-tabs": "6.0.9",
"@react-navigation/native": "6.0.6",
"@react-navigation/native-stack": "6.2.5",
"@react-navigation/stack": "6.0.11",
"@reduxjs/toolkit": "1.7.1",
"@sentry/react-native": "3.2.3",
"@sharcoux/slider": "5.6.1",
"axios": "0.24.0",
"expo": "44.0.4",
"@react-navigation/bottom-tabs": "6.2.0",
"@react-navigation/native": "6.0.8",
"@react-navigation/native-stack": "6.4.1",
"@react-navigation/stack": "6.1.1",
"@reduxjs/toolkit": "1.7.2",
"@sentry/react-native": "3.2.13",
"@sharcoux/slider": "5.6.4",
"axios": "0.25.0",
"expo": "44.0.6",
"expo-auth-session": "3.5.0",
"expo-av": "10.2.0",
"expo-constants": "^13.0.0",
"expo-crypto": "10.1.1",
"expo-device": "4.1.0",
"expo-av": "10.2.1",
"expo-constants": "^13.0.2",
"expo-crypto": "10.1.2",
"expo-device": "4.1.1",
"expo-file-system": "13.2.0",
"expo-firebase-analytics": "6.0.0",
"expo-haptics": "11.1.0",
"expo-image-manipulator": "10.2.0",
"expo-image-picker": "12.0.1",
"expo-firebase-analytics": "6.0.1",
"expo-haptics": "11.1.1",
"expo-image-manipulator": "10.2.1",
"expo-image-picker": "12.0.2",
"expo-linking": "3.0.0",
"expo-localization": "12.0.0",
"expo-notifications": "0.14.0",
"expo-random": "12.1.1",
"expo-screen-capture": "4.1.0",
"expo-secure-store": "11.1.0",
"expo-splash-screen": "0.14.1",
"expo-store-review": "5.1.0",
"expo-localization": "12.0.1",
"expo-notifications": "0.14.1",
"expo-random": "12.1.2",
"expo-screen-capture": "4.1.1",
"expo-secure-store": "11.1.1",
"expo-splash-screen": "0.14.2",
"expo-store-review": "5.1.1",
"expo-updates": "0.11.3",
"expo-video-thumbnails": "6.2.0",
"expo-web-browser": "10.1.0",
"expo-web-browser": "10.1.1",
"i18next": "20.6.1",
"li": "1.3.0",
"lodash": "4.17.21",
@ -73,17 +74,17 @@
"react-native-blurhash": "1.1.8",
"react-native-fast-image": "8.5.11",
"react-native-feather": "1.1.2",
"react-native-flash-message": "0.2.0",
"react-native-gesture-handler": "2.1.0",
"react-native-flash-message": "0.2.1",
"react-native-gesture-handler": "2.2.0",
"react-native-htmlview": "0.16.0",
"react-native-pager-view": "5.4.9",
"react-native-reanimated": "2.3.1",
"react-native-safe-area-context": "3.3.2",
"react-native-screens": "3.10.1",
"react-native-screens": "3.10.2",
"react-native-svg": "12.1.1",
"react-native-swipe-list-view": "3.2.9",
"react-native-tab-view": "3.1.1",
"react-query": "3.34.7",
"react-query": "3.34.12",
"react-redux": "7.2.6",
"react-timeago": "6.2.1",
"redux-persist": "6.0.0",
@ -93,26 +94,26 @@
"valid-url": "1.0.9"
},
"devDependencies": {
"@babel/core": "7.16.7",
"@babel/core": "7.17.0",
"@babel/plugin-proposal-optional-chaining": "7.16.7",
"@babel/preset-typescript": "7.16.7",
"@expo/config": "6.0.15",
"@expo/config": "6.0.16",
"@types/lodash": "4.14.178",
"@types/react": "17.0.38",
"@types/react": "17.0.39",
"@types/react-dom": "17.0.11",
"@types/react-native": "0.66.11",
"@types/react-native": "0.66.15",
"@types/react-native-base64": "^0.2.0",
"@types/react-redux": "7.1.21",
"@types/react-redux": "7.1.22",
"@types/react-timeago": "4.1.3",
"@types/valid-url": "1.0.3",
"@welldone-software/why-did-you-render": "6.2.3",
"babel-plugin-module-resolver": "4.1.0",
"babel-plugin-transform-remove-console": "6.9.4",
"chalk": "4.1.2",
"dotenv": "10.0.0",
"dotenv": "16.0.0",
"patch-package": "6.4.7",
"postinstall-postinstall": "2.1.0",
"react-native-clean-project": "3.6.7",
"typescript": "4.5.4"
"react-native-clean-project": "4.0.0",
"typescript": "4.5.5"
}
}

View File

@ -9,7 +9,10 @@ import netInfo from '@root/startup/netInfo'
import sentry from '@root/startup/sentry'
import { persistor, store } from '@root/store'
import AccessibilityManager from '@utils/accessibility/AccessibilityManager'
import { getSettingsLanguage } from '@utils/slices/settingsSlice'
import {
changeLanguage,
getSettingsLanguage
} from '@utils/slices/settingsSlice'
import ThemeManager from '@utils/styles/ThemeManager'
import * as Notifications from 'expo-notifications'
import * as SplashScreen from 'expo-splash-screen'
@ -30,7 +33,7 @@ dev()
sentry()
audio()
push()
enableFreeze()
enableFreeze(true)
const App: React.FC = () => {
log('log', 'App', 'rendering App')
@ -86,6 +89,9 @@ const App: React.FC = () => {
if (bootstrapped) {
log('log', 'App', 'loading actual app :)')
const language = getSettingsLanguage(store.getState())
if (!language) {
store.dispatch(changeLanguage('en'))
}
i18n.changeLanguage(language)
return (
<ActionSheetProvider>

View File

@ -1,7 +1,6 @@
import { HeaderLeft } from '@components/Header'
import { displayMessage, Message, removeMessage } from '@components/Message'
import { displayMessage, Message } from '@components/Message'
import navigationRef from '@helpers/navigationRef'
import { useNetInfo } from '@react-native-community/netinfo'
import { NavigationContainer } from '@react-navigation/native'
import { createNativeStackNavigator } from '@react-navigation/native-stack'
import ScreenActions from '@screens/Actions'
@ -49,24 +48,6 @@ const Screens: React.FC<Props> = ({ localCorrupt }) => {
const routeRef = useRef<{ name?: string; params?: {} }>()
const isConnected = useNetInfo().isConnected
useEffect(() => {
switch (isConnected) {
case true:
removeMessage()
break
case false:
displayMessage({
mode,
type: 'error',
message: t('network.disconnected.message'),
description: t('network.disconnected.description'),
autoHide: false
})
break
}
}, [isConnected])
// Push hooks
const instances = useSelector(
getInstances,

View File

@ -4,6 +4,7 @@ import { useTranslateQuery } from '@utils/queryHooks/translate'
import { getSettingsLanguage } from '@utils/slices/settingsSlice'
import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager'
import * as Localization from 'expo-localization'
import React, { useState } from 'react'
import { useTranslation } from 'react-i18next'
import { Pressable, StyleSheet, Text } from 'react-native'
@ -48,7 +49,7 @@ const TimelineTranslate = React.memo(
const [enabled, setEnabled] = useState(false)
const { refetch, data, isLoading, isSuccess, isError } = useTranslateQuery({
source: status.language,
target: settingsLanguage,
target: Localization.locale || settingsLanguage || 'en',
text,
options: { enabled }
})
@ -92,7 +93,9 @@ const TimelineTranslate = React.memo(
source: data?.sourceLanguage
})
: t('shared.translate.default')}
{__DEV__ ? ` Source: ${status.language}` : undefined}
{__DEV__
? ` Source: ${status.language}; Target: ${settingsLanguage}`
: undefined}
</Text>
{isLoading ? (
<Circle

View File

@ -1,10 +1,4 @@
{
"network": {
"disconnected": {
"message": "Lost network connection",
"description": "Please check your phone's network setting"
}
},
"screenshot": {
"title": "Privacy Protection",
"message": "Please do not disclose other user's identity, such as username, avatar, etc. Thank you!",

View File

@ -1,10 +1,4 @@
{
"network": {
"disconnected": {
"message": "无法连接到网络",
"description": "请检查手机设置里的网络连接"
}
},
"screenshot": {
"title": "隐私保护",
"message": "请确保不要泄露其它用户的敏感信息,例如用户名、头像等,谢谢!",

View File

@ -190,16 +190,7 @@ const ComposePoll: React.FC = () => {
title={t('content.root.footer.poll.expiration.heading')}
content={t(`content.root.footer.poll.expiration.options.${expire}`)}
onPress={() => {
// @ts-ignore
const expirations: [
'300',
'1800',
'3600',
'21600',
'86400',
'259200',
'604800'
] = [
const expirations = [
'300',
'1800',
'3600',
@ -220,16 +211,17 @@ const ComposePoll: React.FC = () => {
),
t('content.root.footer.poll.expiration.options.cancel')
],
cancelButtonIndex: 7
cancelButtonIndex: expirations.length
},
index => {
if (index && expirations.length < 7) {
if (index && index < expirations.length) {
analytics('compose_poll_expiration_press', {
current: expire,
new: expirations[index]
})
composeDispatch({
type: 'poll',
// @ts-ignore
payload: { expire: expirations[index] }
})
}

View File

@ -102,6 +102,19 @@ const ScreenTabs = React.memo(
)
const composeComponent = useCallback(() => null, [])
const meListeners = useMemo(
() => ({
tabLongPress: () => {
haptics('Light')
//@ts-ignore
navigation.navigate('Tab-Me', { screen: 'Tab-Me-Root' })
//@ts-ignore
navigation.navigate('Tab-Me', { screen: 'Tab-Me-Switch' })
}
}),
[]
)
const previousTab = useSelector(getPreviousTab, () => true)
const versionUpdate = useSelector(getVersionUpdate)
@ -128,7 +141,12 @@ const ScreenTabs = React.memo(
listeners={composeListeners}
/>
<Tab.Screen name='Tab-Notifications' component={TabNotifications} />
<Tab.Screen name='Tab-Me' component={TabMe} options={tabMeOptions} />
<Tab.Screen
name='Tab-Me'
component={TabMe}
options={tabMeOptions}
listeners={meListeners}
/>
</Tab.Navigator>
)
},

View File

@ -1,9 +1,7 @@
import analytics from '@components/analytics'
import { HeaderCenter, HeaderRight } from '@components/Header'
import ComponentSeparator from '@components/Separator'
import Timeline from '@components/Timeline'
import TimelineDefault from '@components/Timeline/Default'
import TimelineLookback from '@components/Timeline/Lookback'
import { createNativeStackNavigator } from '@react-navigation/native-stack'
import {
ScreenTabsScreenProps,
@ -11,7 +9,6 @@ import {
} from '@utils/navigation/navigators'
import { QueryKeyTimeline } from '@utils/queryHooks/timeline'
import { getInstanceTimelinesLookback } from '@utils/slices/instancesSlice'
import { StyleConstants } from '@utils/styles/constants'
import React, { useCallback, useMemo } from 'react'
import { useTranslation } from 'react-i18next'
import { Platform } from 'react-native'
@ -55,17 +52,7 @@ const TabLocal = React.memo(
const queryKey: QueryKeyTimeline = ['Timeline', { page: 'Following' }]
const renderItem = useCallback(({ item }) => {
if (timelinesLookback?.['Following']?.ids?.[0] === item.id) {
return (
<>
<TimelineLookback />
<ComponentSeparator
extraMarginLeft={
StyleConstants.Avatar.M + StyleConstants.Spacing.S
}
/>
<TimelineDefault item={item} queryKey={queryKey} />
</>
)
return <TimelineDefault item={item} queryKey={queryKey} />
}
return <TimelineDefault item={item} queryKey={queryKey} />
}, [])

View File

@ -1,9 +1,7 @@
import analytics from '@components/analytics'
import { HeaderRight } from '@components/Header'
import ComponentSeparator from '@components/Separator'
import Timeline from '@components/Timeline'
import TimelineDefault from '@components/Timeline/Default'
import TimelineLookback from '@components/Timeline/Lookback'
import SegmentedControl from '@react-native-community/segmented-control'
import { createNativeStackNavigator } from '@react-navigation/native-stack'
import {
@ -12,7 +10,6 @@ import {
} from '@utils/navigation/navigators'
import { QueryKeyTimeline } from '@utils/queryHooks/timeline'
import { getInstanceTimelinesLookback } from '@utils/slices/instancesSlice'
import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager'
import React, { useCallback, useMemo, useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -90,17 +87,7 @@ const TabPublic = React.memo(
const queryKey: QueryKeyTimeline = ['Timeline', { page }]
const renderItem = ({ item }: any) => {
if (timelinesLookback?.[page]?.ids?.[0] === item.id) {
return (
<>
<TimelineLookback />
<ComponentSeparator
extraMarginLeft={
StyleConstants.Avatar.M + StyleConstants.Spacing.S
}
/>
<TimelineDefault item={item} queryKey={queryKey} />
</>
)
return <TimelineDefault item={item} queryKey={queryKey} />
}
return <TimelineDefault item={item} queryKey={queryKey} />
}

View File

@ -24,9 +24,12 @@ const TabSharedToot: React.FC<TabSharedStackScreenProps<'Tab-Shared-Toot'>> = ({
const scrolled = useRef(false)
const navigation = useNavigation()
const queryClient = useQueryClient()
const observer = new InfiniteQueryObserver(queryClient, { queryKey })
const observer = new InfiniteQueryObserver(queryClient, {
queryKey,
enabled: false
})
useEffect(() => {
const unsubscribe = observer.subscribe(result => {
return observer.subscribe(result => {
if (result.isSuccess) {
const flattenData = result.data?.pages
? // @ts-ignore
@ -62,7 +65,6 @@ const TabSharedToot: React.FC<TabSharedStackScreenProps<'Tab-Shared-Toot'>> = ({
}
}
})
return () => unsubscribe()
}, [scrolled.current])
// Toot page auto scroll to selected toot

View File

@ -36,10 +36,10 @@ const useColorSchemeDelay = (delay = 500) => {
[]
)
React.useEffect(() => {
Appearance.addChangeListener(onColorSchemeChange)
const listener = Appearance.addChangeListener(onColorSchemeChange)
return () => {
onColorSchemeChange.cancel()
Appearance.removeChangeListener(onColorSchemeChange)
listener.remove()
}
}, [])
return colorScheme

828
yarn.lock

File diff suppressed because it is too large Load Diff