mirror of
https://github.com/tooot-app/app
synced 2025-02-13 02:10:39 +01:00
Test updates (#456)
* Build succeeded * Fix RN update caused Android build error Spent whole fucking 2 days to figure this out https://github.com/facebook/react-native/issues/35210 * Fixed #408 Potentially because of too small pressable area * Fixed #439 * Bump up RN and Expo * Fixed #450 * Spelling (#449) * spelling: announcement Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: corrupted Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: dimensions Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: favourites Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: mutation Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: retrieve Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * spelling: transitive Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> * Fixed #451 More properly adjusted flexbox layout * Partial fix of #444 It is possible to implement what the web does but that adds additional resources which I believe is not justified. Filtering is meant to be precise. Even hiding the entire block that you still would like to take a look at the content, then why would you set up a certain filter then. Though showing the matched filter is still useful. * New Crowdin updates (#440) * New translations tabs.json (German) * New translations tabs.json (Italian) * New translations tabs.json (Japanese) * New translations tabs.json (Korean) * New translations tabs.json (Chinese Simplified) * New translations tabs.json (Chinese Traditional) * New translations tabs.json (Vietnamese) * New translations tabs.json (Portuguese, Brazilian) * New translations tabs.json (Chinese Simplified) * New translations instance.json (German) * New translations parse.json (German) * New translations timeline.json (German) * New translations mediaSelector.json (German) * New translations emojis.json (German) * New translations contextMenu.json (German) * New translations actions.json (German) * New translations compose.json (German) * New translations accountSelection.json (German) * New translations timeline.json (German) * New translations contextMenu.json (German) * New translations actions.json (German) * New translations compose.json (German) * New translations tabs.json (German) * New translations screens.json (German) * New translations common.json (French) * New translations instance.json (French) * New translations parse.json (French) * New translations relationship.json (French) * New translations timeline.json (French) * New translations actions.json (French) * New translations imageViewer.json (French) * New translations announcements.json (French) * New translations compose.json (French) * New translations screens.json (French) * New translations tabs.json (French) * New translations mediaSelector.json (French) * New translations emojis.json (French) * New translations contextMenu.json (French) * New translations accountSelection.json (French) * New translations actions.json (French) * New translations announcements.json (French) * New translations compose.json (French) * New translations accountSelection.json (French) * New translations instance.json (French) * New translations parse.json (French) * New translations relationship.json (French) * New translations timeline.json (French) * New translations imageViewer.json (French) * New translations compose.json (French) * New translations tabs.json (French) * New translations mediaSelector.json (French) * New translations emojis.json (French) * New translations contextMenu.json (French) * New translations common.json (French) * New translations compose.json (French) * New translations screens.json (French) * New translations tabs.json (French) * New translations contextMenu.json (French) * New translations common.json (French) * New translations instance.json (French) * Added French translation 🇫🇷 * Fixed #454 * Fixed #443 Basically matching all none whitespace characters * Fixed #446 Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> Co-authored-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
This commit is contained in:
parent
abff63eef0
commit
641e1f0cdc
1
.gitignore
vendored
1
.gitignore
vendored
@ -41,6 +41,7 @@ build/
|
|||||||
local.properties
|
local.properties
|
||||||
*.iml
|
*.iml
|
||||||
*.hprof
|
*.hprof
|
||||||
|
.cxx/
|
||||||
|
|
||||||
# node.js
|
# node.js
|
||||||
#
|
#
|
||||||
|
@ -11,6 +11,8 @@ Please **do not** create a pull request to update translation. tooot's translati
|
|||||||
|
|
||||||
## Special thanks
|
## Special thanks
|
||||||
|
|
||||||
|
[@pat](https://piaille.fr/@pat) for French translation
|
||||||
|
|
||||||
[@forenta](https://github.com/forenta) for German translation
|
[@forenta](https://github.com/forenta) for German translation
|
||||||
|
|
||||||
[@andrigamerita](https://github.com/andrigamerita) for Italian translation
|
[@andrigamerita](https://github.com/andrigamerita) for Italian translation
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
apply plugin: "com.android.application"
|
apply plugin: "com.android.application"
|
||||||
|
|
||||||
import com.android.build.OutputFile
|
import com.android.build.OutputFile
|
||||||
|
import org.apache.tools.ant.taskdefs.condition.Os
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
|
* The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
|
||||||
@ -78,7 +79,7 @@ import com.android.build.OutputFile
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
project.ext.react = [
|
project.ext.react = [
|
||||||
enableHermes: (findProperty('expo.jsEngine') ?: "jsc") == "hermes",
|
enableHermes: true,
|
||||||
]
|
]
|
||||||
|
|
||||||
apply from: new File(["node", "--print", "require.resolve('react-native/package.json')"].execute().text.trim(), "../react.gradle")
|
apply from: new File(["node", "--print", "require.resolve('react-native/package.json')"].execute().text.trim(), "../react.gradle")
|
||||||
@ -146,22 +147,14 @@ android {
|
|||||||
versionName "0.2"
|
versionName "0.2"
|
||||||
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
|
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
|
||||||
if (isNewArchitectureEnabled()) {
|
if (isNewArchitectureEnabled()) {
|
||||||
// We configure the NDK build only if you decide to opt-in for the New Architecture.
|
// We configure the CMake build only if you decide to opt-in for the New Architecture.
|
||||||
externalNativeBuild {
|
externalNativeBuild {
|
||||||
ndkBuild {
|
cmake {
|
||||||
arguments "APP_PLATFORM=android-21",
|
arguments "-DPROJECT_BUILD_DIR=$buildDir",
|
||||||
"APP_STL=c++_shared",
|
"-DREACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid",
|
||||||
"NDK_TOOLCHAIN_VERSION=clang",
|
"-DREACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build",
|
||||||
"GENERATED_SRC_DIR=$buildDir/generated/source",
|
"-DNODE_MODULES_DIR=$rootDir/../node_modules",
|
||||||
"PROJECT_BUILD_DIR=$buildDir",
|
"-DANDROID_STL=c++_shared"
|
||||||
"REACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid",
|
|
||||||
"REACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build"
|
|
||||||
"NODE_MODULES_DIR=$rootDir/../node_modules"
|
|
||||||
cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1"
|
|
||||||
cppFlags "-std=c++17"
|
|
||||||
// Make sure this target name is the same you specify inside the
|
|
||||||
// src/main/jni/Android.mk file for the `LOCAL_MODULE` variable.
|
|
||||||
targets "tooot_appmodules"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!enableSeparateBuildPerCPUArchitecture) {
|
if (!enableSeparateBuildPerCPUArchitecture) {
|
||||||
@ -172,10 +165,10 @@ android {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isNewArchitectureEnabled()) {
|
if (isNewArchitectureEnabled()) {
|
||||||
// We configure the NDK build only if you decide to opt-in for the New Architecture.
|
// We configure the CMake build only if you decide to opt-in for the New Architecture.
|
||||||
externalNativeBuild {
|
externalNativeBuild {
|
||||||
ndkBuild {
|
cmake {
|
||||||
path "$projectDir/src/main/jni/Android.mk"
|
path "$projectDir/src/main/jni/CMakeLists.txt"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
def reactAndroidProjectDir = project(':ReactAndroid').projectDir
|
def reactAndroidProjectDir = project(':ReactAndroid').projectDir
|
||||||
@ -196,15 +189,15 @@ android {
|
|||||||
preDebugBuild.dependsOn(packageReactNdkDebugLibs)
|
preDebugBuild.dependsOn(packageReactNdkDebugLibs)
|
||||||
preReleaseBuild.dependsOn(packageReactNdkReleaseLibs)
|
preReleaseBuild.dependsOn(packageReactNdkReleaseLibs)
|
||||||
// Due to a bug inside AGP, we have to explicitly set a dependency
|
// Due to a bug inside AGP, we have to explicitly set a dependency
|
||||||
// between configureNdkBuild* tasks and the preBuild tasks.
|
// between configureCMakeDebug* tasks and the preBuild tasks.
|
||||||
// This can be removed once this is solved: https://issuetracker.google.com/issues/207403732
|
// This can be removed once this is solved: https://issuetracker.google.com/issues/207403732
|
||||||
configureNdkBuildRelease.dependsOn(preReleaseBuild)
|
configureCMakeRelWithDebInfo.dependsOn(preReleaseBuild)
|
||||||
configureNdkBuildDebug.dependsOn(preDebugBuild)
|
configureCMakeDebug.dependsOn(preDebugBuild)
|
||||||
reactNativeArchitectures().each { architecture ->
|
reactNativeArchitectures().each { architecture ->
|
||||||
tasks.findByName("configureNdkBuildDebug[${architecture}]")?.configure {
|
tasks.findByName("configureCMakeDebug[${architecture}]")?.configure {
|
||||||
dependsOn("preDebugBuild")
|
dependsOn("preDebugBuild")
|
||||||
}
|
}
|
||||||
tasks.findByName("configureNdkBuildRelease[${architecture}]")?.configure {
|
tasks.findByName("configureCMakeRelWithDebInfo[${architecture}]")?.configure {
|
||||||
dependsOn("preReleaseBuild")
|
dependsOn("preReleaseBuild")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -314,7 +307,7 @@ dependencies {
|
|||||||
if (isNewArchitectureEnabled()) {
|
if (isNewArchitectureEnabled()) {
|
||||||
// If new architecture is enabled, we let you build RN from source
|
// If new architecture is enabled, we let you build RN from source
|
||||||
// Otherwise we fallback to a prebuilt .aar bundled in the NPM package.
|
// Otherwise we fallback to a prebuilt .aar bundled in the NPM package.
|
||||||
// This will be applied to all the imported transtitive dependency.
|
// This will be applied to all the imported transitive dependency.
|
||||||
configurations.all {
|
configurations.all {
|
||||||
resolutionStrategy.dependencySubstitution {
|
resolutionStrategy.dependencySubstitution {
|
||||||
substitute(module("com.facebook.react:react-native"))
|
substitute(module("com.facebook.react:react-native"))
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
import org.apache.tools.ant.taskdefs.condition.Os
|
|
||||||
|
|
||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
@ -24,10 +22,11 @@ buildscript {
|
|||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
jcenter()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.google.gms:google-services:4.3.3'
|
classpath 'com.google.gms:google-services:4.3.3'
|
||||||
classpath("com.android.tools.build:gradle:7.1.1")
|
classpath("com.android.tools.build:gradle:7.2.1")
|
||||||
classpath("com.facebook.react:react-native-gradle-plugin")
|
classpath("com.facebook.react:react-native-gradle-plugin")
|
||||||
classpath("de.undercouch:gradle-download-task:5.0.1")
|
classpath("de.undercouch:gradle-download-task:5.0.1")
|
||||||
|
|
||||||
@ -50,6 +49,7 @@ allprojects {
|
|||||||
|
|
||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
jcenter()
|
||||||
maven { url 'https://www.jitpack.io' }
|
maven { url 'https://www.jitpack.io' }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
BIN
android/gradle/wrapper/gradle-wrapper.jar
vendored
BIN
android/gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
@ -1,5 +1,5 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
@ -10,7 +10,6 @@ export default (): ExpoConfig => ({
|
|||||||
version,
|
version,
|
||||||
extra: { environment: process.env.ENVIRONMENT },
|
extra: { environment: process.env.ENVIRONMENT },
|
||||||
privacy: 'hidden',
|
privacy: 'hidden',
|
||||||
jsEngine: 'hermes',
|
|
||||||
ios: {
|
ios: {
|
||||||
bundleIdentifier: 'com.xmflsct.app.tooot'
|
bundleIdentifier: 'com.xmflsct.app.tooot'
|
||||||
},
|
},
|
||||||
|
17
ios/Podfile
17
ios/Podfile
@ -2,11 +2,9 @@ require File.join(File.dirname(`node --print "require.resolve('expo/package.json
|
|||||||
require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")
|
require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")
|
||||||
require File.join(File.dirname(`node --print "require.resolve('@react-native-community/cli-platform-ios/package.json')"`), "native_modules")
|
require File.join(File.dirname(`node --print "require.resolve('@react-native-community/cli-platform-ios/package.json')"`), "native_modules")
|
||||||
|
|
||||||
platform :ios, '12.4'
|
platform :ios, '13.0'
|
||||||
install! 'cocoapods', :deterministic_uuids => false
|
install! 'cocoapods', :deterministic_uuids => false
|
||||||
|
|
||||||
production = ENV["PRODUCTION"] == "1"
|
|
||||||
|
|
||||||
require 'json'
|
require 'json'
|
||||||
podfile_properties = JSON.parse(File.read('./Podfile.properties.json')) rescue {}
|
podfile_properties = JSON.parse(File.read('./Podfile.properties.json')) rescue {}
|
||||||
|
|
||||||
@ -25,8 +23,7 @@ target 'tooot' do
|
|||||||
|
|
||||||
use_react_native!(
|
use_react_native!(
|
||||||
:path => config[:reactNativePath],
|
:path => config[:reactNativePath],
|
||||||
:production => production,
|
:hermes_enabled => true,
|
||||||
:hermes_enabled => podfile_properties['expo.jsEngine'] == 'hermes',
|
|
||||||
:fabric_enabled => flags[:fabric_enabled],
|
:fabric_enabled => flags[:fabric_enabled],
|
||||||
:flipper_configuration => FlipperConfiguration.disabled,
|
:flipper_configuration => FlipperConfiguration.disabled,
|
||||||
# An absolute path to your application root.
|
# An absolute path to your application root.
|
||||||
@ -34,7 +31,12 @@ target 'tooot' do
|
|||||||
)
|
)
|
||||||
|
|
||||||
post_install do |installer|
|
post_install do |installer|
|
||||||
react_native_post_install(installer)
|
react_native_post_install(
|
||||||
|
installer,
|
||||||
|
# Set `mac_catalyst_enabled` to `true` in order to apply patches
|
||||||
|
# necessary for Mac Catalyst builds
|
||||||
|
:mac_catalyst_enabled => false
|
||||||
|
)
|
||||||
__apply_Xcode_12_5_M1_post_install_workaround(installer)
|
__apply_Xcode_12_5_M1_post_install_workaround(installer)
|
||||||
|
|
||||||
# For share extension
|
# For share extension
|
||||||
@ -65,8 +67,7 @@ end
|
|||||||
|
|
||||||
target 'ShareExtension' do
|
target 'ShareExtension' do
|
||||||
use_react_native!(
|
use_react_native!(
|
||||||
:production => production,
|
:hermes_enabled => true,
|
||||||
:hermes_enabled => podfile_properties['expo.jsEngine'] == 'hermes',
|
|
||||||
:flipper_configuration => FlipperConfiguration.disabled
|
:flipper_configuration => FlipperConfiguration.disabled
|
||||||
)
|
)
|
||||||
|
|
||||||
|
730
ios/Podfile.lock
730
ios/Podfile.lock
@ -1,65 +1,64 @@
|
|||||||
PODS:
|
PODS:
|
||||||
- boost (1.76.0)
|
- boost (1.76.0)
|
||||||
- DoubleConversion (1.1.6)
|
- DoubleConversion (1.1.6)
|
||||||
- EXApplication (4.2.2):
|
- EXApplication (5.0.1):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- EXAV (12.0.4):
|
- EXAV (13.0.1):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- React-runtimeexecutor
|
- ReactCommon/turbomodule/core
|
||||||
- ReactCommon
|
- EXConstants (14.0.2):
|
||||||
- EXConstants (13.2.4):
|
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- EXErrorRecovery (3.2.0):
|
- EXErrorRecovery (4.0.1):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- EXFileSystem (14.1.0):
|
- EXFileSystem (15.1.1):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- EXFirebaseAnalytics (7.2.0):
|
- EXFirebaseAnalytics (8.0.0):
|
||||||
- EXFirebaseCore
|
- EXFirebaseCore
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- Firebase/Core (= 9.5.0)
|
- Firebase/Core (= 9.5.0)
|
||||||
- EXFirebaseCore (5.2.0):
|
- EXFirebaseCore (6.0.0):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- Firebase/Core (= 9.5.0)
|
- Firebase/Core (= 9.5.0)
|
||||||
- EXFont (10.2.1):
|
- EXFont (11.0.1):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- EXNotifications (0.16.1):
|
- EXNotifications (0.17.0):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- Expo (46.0.16):
|
- Expo (47.0.3):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- ExpoCrypto (11.0.0):
|
- ExpoCrypto (12.0.0):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- ExpoHaptics (11.3.0):
|
- ExpoHaptics (12.0.1):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- ExpoKeepAwake (10.2.0):
|
- ExpoKeepAwake (11.0.1):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- ExpoLocalization (13.1.0):
|
- ExpoLocalization (14.0.0):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- ExpoModulesCore (0.11.8):
|
- ExpoModulesCore (1.0.2):
|
||||||
- React-Core
|
- React-Core
|
||||||
- ReactCommon/turbomodule/core
|
- ReactCommon/turbomodule/core
|
||||||
- ExpoRandom (12.3.0):
|
- ExpoRandom (13.0.0):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- ExpoWebBrowser (11.0.0):
|
- ExpoStoreReview (6.0.0):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- EXScreenCapture (4.3.0):
|
- ExpoWebBrowser (12.0.0):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- EXSecureStore (11.3.0):
|
- EXScreenCapture (5.0.0):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- EXSplashScreen (0.16.2):
|
- EXSecureStore (12.0.0):
|
||||||
|
- ExpoModulesCore
|
||||||
|
- EXSplashScreen (0.17.4):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- React-Core
|
- React-Core
|
||||||
- EXStoreReview (5.3.0):
|
- EXVideoThumbnails (7.0.0):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- EXVideoThumbnails (6.4.0):
|
- FBLazyVector (0.70.5)
|
||||||
- ExpoModulesCore
|
- FBReactNativeSpec (0.70.5):
|
||||||
- FBLazyVector (0.69.6)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- FBReactNativeSpec (0.69.6):
|
- RCTRequired (= 0.70.5)
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCTTypeSafety (= 0.70.5)
|
||||||
- RCTRequired (= 0.69.6)
|
- React-Core (= 0.70.5)
|
||||||
- RCTTypeSafety (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-Core (= 0.69.6)
|
- ReactCommon/turbomodule/core (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
|
||||||
- ReactCommon/turbomodule/core (= 0.69.6)
|
|
||||||
- Firebase (9.5.0):
|
- Firebase (9.5.0):
|
||||||
- Firebase/Core (= 9.5.0)
|
- Firebase/Core (= 9.5.0)
|
||||||
- Firebase/Core (9.5.0):
|
- Firebase/Core (9.5.0):
|
||||||
@ -161,254 +160,254 @@ PODS:
|
|||||||
- GoogleUtilities/MethodSwizzler
|
- GoogleUtilities/MethodSwizzler
|
||||||
- GoogleUtilities/UserDefaults (7.8.0):
|
- GoogleUtilities/UserDefaults (7.8.0):
|
||||||
- GoogleUtilities/Logger
|
- GoogleUtilities/Logger
|
||||||
- hermes-engine (0.69.6)
|
- hermes-engine (0.70.5)
|
||||||
- libevent (2.1.12)
|
- libevent (2.1.12)
|
||||||
- libwebp (1.2.3):
|
- libwebp (1.2.4):
|
||||||
- libwebp/demux (= 1.2.3)
|
- libwebp/demux (= 1.2.4)
|
||||||
- libwebp/mux (= 1.2.3)
|
- libwebp/mux (= 1.2.4)
|
||||||
- libwebp/webp (= 1.2.3)
|
- libwebp/webp (= 1.2.4)
|
||||||
- libwebp/demux (1.2.3):
|
- libwebp/demux (1.2.4):
|
||||||
- libwebp/webp
|
- libwebp/webp
|
||||||
- libwebp/mux (1.2.3):
|
- libwebp/mux (1.2.4):
|
||||||
- libwebp/demux
|
- libwebp/demux
|
||||||
- libwebp/webp (1.2.3)
|
- libwebp/webp (1.2.4)
|
||||||
- nanopb (2.30909.0):
|
- nanopb (2.30909.0):
|
||||||
- nanopb/decode (= 2.30909.0)
|
- nanopb/decode (= 2.30909.0)
|
||||||
- nanopb/encode (= 2.30909.0)
|
- nanopb/encode (= 2.30909.0)
|
||||||
- nanopb/decode (2.30909.0)
|
- nanopb/decode (2.30909.0)
|
||||||
- nanopb/encode (2.30909.0)
|
- nanopb/encode (2.30909.0)
|
||||||
- PromisesObjC (2.1.1)
|
- PromisesObjC (2.1.1)
|
||||||
- RCT-Folly (2021.06.28.00-v2):
|
- RCT-Folly (2021.07.22.00):
|
||||||
- boost
|
- boost
|
||||||
- DoubleConversion
|
- DoubleConversion
|
||||||
- fmt (~> 6.2.1)
|
- fmt (~> 6.2.1)
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly/Default (= 2021.06.28.00-v2)
|
- RCT-Folly/Default (= 2021.07.22.00)
|
||||||
- RCT-Folly/Default (2021.06.28.00-v2):
|
- RCT-Folly/Default (2021.07.22.00):
|
||||||
- boost
|
- boost
|
||||||
- DoubleConversion
|
- DoubleConversion
|
||||||
- fmt (~> 6.2.1)
|
- fmt (~> 6.2.1)
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly/Futures (2021.06.28.00-v2):
|
- RCT-Folly/Futures (2021.07.22.00):
|
||||||
- boost
|
- boost
|
||||||
- DoubleConversion
|
- DoubleConversion
|
||||||
- fmt (~> 6.2.1)
|
- fmt (~> 6.2.1)
|
||||||
- glog
|
- glog
|
||||||
- libevent
|
- libevent
|
||||||
- RCTRequired (0.69.6)
|
- RCTRequired (0.70.5)
|
||||||
- RCTTypeSafety (0.69.6):
|
- RCTTypeSafety (0.70.5):
|
||||||
- FBLazyVector (= 0.69.6)
|
- FBLazyVector (= 0.70.5)
|
||||||
- RCTRequired (= 0.69.6)
|
- RCTRequired (= 0.70.5)
|
||||||
- React-Core (= 0.69.6)
|
- React-Core (= 0.70.5)
|
||||||
- React (0.69.6):
|
- React (0.70.5):
|
||||||
- React-Core (= 0.69.6)
|
- React-Core (= 0.70.5)
|
||||||
- React-Core/DevSupport (= 0.69.6)
|
- React-Core/DevSupport (= 0.70.5)
|
||||||
- React-Core/RCTWebSocket (= 0.69.6)
|
- React-Core/RCTWebSocket (= 0.70.5)
|
||||||
- React-RCTActionSheet (= 0.69.6)
|
- React-RCTActionSheet (= 0.70.5)
|
||||||
- React-RCTAnimation (= 0.69.6)
|
- React-RCTAnimation (= 0.70.5)
|
||||||
- React-RCTBlob (= 0.69.6)
|
- React-RCTBlob (= 0.70.5)
|
||||||
- React-RCTImage (= 0.69.6)
|
- React-RCTImage (= 0.70.5)
|
||||||
- React-RCTLinking (= 0.69.6)
|
- React-RCTLinking (= 0.70.5)
|
||||||
- React-RCTNetwork (= 0.69.6)
|
- React-RCTNetwork (= 0.70.5)
|
||||||
- React-RCTSettings (= 0.69.6)
|
- React-RCTSettings (= 0.70.5)
|
||||||
- React-RCTText (= 0.69.6)
|
- React-RCTText (= 0.70.5)
|
||||||
- React-RCTVibration (= 0.69.6)
|
- React-RCTVibration (= 0.70.5)
|
||||||
- React-bridging (0.69.6):
|
- React-bridging (0.70.5):
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-callinvoker (0.69.6)
|
- React-callinvoker (0.70.5)
|
||||||
- React-Codegen (0.69.6):
|
- React-Codegen (0.70.5):
|
||||||
- FBReactNativeSpec (= 0.69.6)
|
- FBReactNativeSpec (= 0.70.5)
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- RCTRequired (= 0.69.6)
|
- RCTRequired (= 0.70.5)
|
||||||
- RCTTypeSafety (= 0.69.6)
|
- RCTTypeSafety (= 0.70.5)
|
||||||
- React-Core (= 0.69.6)
|
- React-Core (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-jsiexecutor (= 0.69.6)
|
- React-jsiexecutor (= 0.70.5)
|
||||||
- ReactCommon/turbomodule/core (= 0.69.6)
|
- ReactCommon/turbomodule/core (= 0.70.5)
|
||||||
- React-Core (0.69.6):
|
- React-Core (0.70.5):
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default (= 0.69.6)
|
- React-Core/Default (= 0.70.5)
|
||||||
- React-cxxreact (= 0.69.6)
|
- React-cxxreact (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-jsiexecutor (= 0.69.6)
|
- React-jsiexecutor (= 0.70.5)
|
||||||
- React-perflogger (= 0.69.6)
|
- React-perflogger (= 0.70.5)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/CoreModulesHeaders (0.69.6):
|
- React-Core/CoreModulesHeaders (0.70.5):
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.69.6)
|
- React-cxxreact (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-jsiexecutor (= 0.69.6)
|
- React-jsiexecutor (= 0.70.5)
|
||||||
- React-perflogger (= 0.69.6)
|
- React-perflogger (= 0.70.5)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/Default (0.69.6):
|
- React-Core/Default (0.70.5):
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-cxxreact (= 0.69.6)
|
- React-cxxreact (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-jsiexecutor (= 0.69.6)
|
- React-jsiexecutor (= 0.70.5)
|
||||||
- React-perflogger (= 0.69.6)
|
- React-perflogger (= 0.70.5)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/DevSupport (0.69.6):
|
- React-Core/DevSupport (0.70.5):
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default (= 0.69.6)
|
- React-Core/Default (= 0.70.5)
|
||||||
- React-Core/RCTWebSocket (= 0.69.6)
|
- React-Core/RCTWebSocket (= 0.70.5)
|
||||||
- React-cxxreact (= 0.69.6)
|
- React-cxxreact (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-jsiexecutor (= 0.69.6)
|
- React-jsiexecutor (= 0.70.5)
|
||||||
- React-jsinspector (= 0.69.6)
|
- React-jsinspector (= 0.70.5)
|
||||||
- React-perflogger (= 0.69.6)
|
- React-perflogger (= 0.70.5)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTActionSheetHeaders (0.69.6):
|
- React-Core/RCTActionSheetHeaders (0.70.5):
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.69.6)
|
- React-cxxreact (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-jsiexecutor (= 0.69.6)
|
- React-jsiexecutor (= 0.70.5)
|
||||||
- React-perflogger (= 0.69.6)
|
- React-perflogger (= 0.70.5)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTAnimationHeaders (0.69.6):
|
- React-Core/RCTAnimationHeaders (0.70.5):
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.69.6)
|
- React-cxxreact (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-jsiexecutor (= 0.69.6)
|
- React-jsiexecutor (= 0.70.5)
|
||||||
- React-perflogger (= 0.69.6)
|
- React-perflogger (= 0.70.5)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTBlobHeaders (0.69.6):
|
- React-Core/RCTBlobHeaders (0.70.5):
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.69.6)
|
- React-cxxreact (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-jsiexecutor (= 0.69.6)
|
- React-jsiexecutor (= 0.70.5)
|
||||||
- React-perflogger (= 0.69.6)
|
- React-perflogger (= 0.70.5)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTImageHeaders (0.69.6):
|
- React-Core/RCTImageHeaders (0.70.5):
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.69.6)
|
- React-cxxreact (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-jsiexecutor (= 0.69.6)
|
- React-jsiexecutor (= 0.70.5)
|
||||||
- React-perflogger (= 0.69.6)
|
- React-perflogger (= 0.70.5)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTLinkingHeaders (0.69.6):
|
- React-Core/RCTLinkingHeaders (0.70.5):
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.69.6)
|
- React-cxxreact (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-jsiexecutor (= 0.69.6)
|
- React-jsiexecutor (= 0.70.5)
|
||||||
- React-perflogger (= 0.69.6)
|
- React-perflogger (= 0.70.5)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTNetworkHeaders (0.69.6):
|
- React-Core/RCTNetworkHeaders (0.70.5):
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.69.6)
|
- React-cxxreact (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-jsiexecutor (= 0.69.6)
|
- React-jsiexecutor (= 0.70.5)
|
||||||
- React-perflogger (= 0.69.6)
|
- React-perflogger (= 0.70.5)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTSettingsHeaders (0.69.6):
|
- React-Core/RCTSettingsHeaders (0.70.5):
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.69.6)
|
- React-cxxreact (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-jsiexecutor (= 0.69.6)
|
- React-jsiexecutor (= 0.70.5)
|
||||||
- React-perflogger (= 0.69.6)
|
- React-perflogger (= 0.70.5)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTTextHeaders (0.69.6):
|
- React-Core/RCTTextHeaders (0.70.5):
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.69.6)
|
- React-cxxreact (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-jsiexecutor (= 0.69.6)
|
- React-jsiexecutor (= 0.70.5)
|
||||||
- React-perflogger (= 0.69.6)
|
- React-perflogger (= 0.70.5)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTVibrationHeaders (0.69.6):
|
- React-Core/RCTVibrationHeaders (0.70.5):
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default
|
- React-Core/Default
|
||||||
- React-cxxreact (= 0.69.6)
|
- React-cxxreact (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-jsiexecutor (= 0.69.6)
|
- React-jsiexecutor (= 0.70.5)
|
||||||
- React-perflogger (= 0.69.6)
|
- React-perflogger (= 0.70.5)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-Core/RCTWebSocket (0.69.6):
|
- React-Core/RCTWebSocket (0.70.5):
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Core/Default (= 0.69.6)
|
- React-Core/Default (= 0.70.5)
|
||||||
- React-cxxreact (= 0.69.6)
|
- React-cxxreact (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-jsiexecutor (= 0.69.6)
|
- React-jsiexecutor (= 0.70.5)
|
||||||
- React-perflogger (= 0.69.6)
|
- React-perflogger (= 0.70.5)
|
||||||
- Yoga
|
- Yoga
|
||||||
- React-CoreModules (0.69.6):
|
- React-CoreModules (0.70.5):
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- RCTTypeSafety (= 0.69.6)
|
- RCTTypeSafety (= 0.70.5)
|
||||||
- React-Codegen (= 0.69.6)
|
- React-Codegen (= 0.70.5)
|
||||||
- React-Core/CoreModulesHeaders (= 0.69.6)
|
- React-Core/CoreModulesHeaders (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-RCTImage (= 0.69.6)
|
- React-RCTImage (= 0.70.5)
|
||||||
- ReactCommon/turbomodule/core (= 0.69.6)
|
- ReactCommon/turbomodule/core (= 0.70.5)
|
||||||
- React-cxxreact (0.69.6):
|
- React-cxxreact (0.70.5):
|
||||||
- boost (= 1.76.0)
|
- boost (= 1.76.0)
|
||||||
- DoubleConversion
|
- DoubleConversion
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-callinvoker (= 0.69.6)
|
- React-callinvoker (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-jsinspector (= 0.69.6)
|
- React-jsinspector (= 0.70.5)
|
||||||
- React-logger (= 0.69.6)
|
- React-logger (= 0.70.5)
|
||||||
- React-perflogger (= 0.69.6)
|
- React-perflogger (= 0.70.5)
|
||||||
- React-runtimeexecutor (= 0.69.6)
|
- React-runtimeexecutor (= 0.70.5)
|
||||||
- React-hermes (0.69.6):
|
- React-hermes (0.70.5):
|
||||||
- DoubleConversion
|
- DoubleConversion
|
||||||
- glog
|
- glog
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- RCT-Folly/Futures (= 2021.06.28.00-v2)
|
- RCT-Folly/Futures (= 2021.07.22.00)
|
||||||
- React-cxxreact (= 0.69.6)
|
- React-cxxreact (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-jsiexecutor (= 0.69.6)
|
- React-jsiexecutor (= 0.70.5)
|
||||||
- React-jsinspector (= 0.69.6)
|
- React-jsinspector (= 0.70.5)
|
||||||
- React-perflogger (= 0.69.6)
|
- React-perflogger (= 0.70.5)
|
||||||
- React-jsi (0.69.6):
|
- React-jsi (0.70.5):
|
||||||
- boost (= 1.76.0)
|
- boost (= 1.76.0)
|
||||||
- DoubleConversion
|
- DoubleConversion
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-jsi/Default (= 0.69.6)
|
- React-jsi/Default (= 0.70.5)
|
||||||
- React-jsi/Default (0.69.6):
|
- React-jsi/Default (0.70.5):
|
||||||
- boost (= 1.76.0)
|
- boost (= 1.76.0)
|
||||||
- DoubleConversion
|
- DoubleConversion
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-jsiexecutor (0.69.6):
|
- React-jsiexecutor (0.70.5):
|
||||||
- DoubleConversion
|
- DoubleConversion
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-cxxreact (= 0.69.6)
|
- React-cxxreact (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-perflogger (= 0.69.6)
|
- React-perflogger (= 0.70.5)
|
||||||
- React-jsinspector (0.69.6)
|
- React-jsinspector (0.70.5)
|
||||||
- React-logger (0.69.6):
|
- React-logger (0.70.5):
|
||||||
- glog
|
- glog
|
||||||
- react-native-blur (4.2.0):
|
- react-native-blur (4.3.0):
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-blurhash (1.1.10):
|
- react-native-blurhash (1.1.10):
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-cameraroll (5.0.4):
|
- react-native-cameraroll (5.1.0):
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-context-menu-view (1.5.4):
|
- react-native-context-menu-view (1.5.4):
|
||||||
- React
|
- React
|
||||||
@ -420,7 +419,7 @@ PODS:
|
|||||||
- React-Core
|
- React-Core
|
||||||
- react-native-netinfo (9.3.6):
|
- react-native-netinfo (9.3.6):
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-pager-view (6.0.2):
|
- react-native-pager-view (6.1.0):
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-paste-input (0.5.1):
|
- react-native-paste-input (0.5.1):
|
||||||
- React-Core
|
- React-Core
|
||||||
@ -433,110 +432,79 @@ PODS:
|
|||||||
- ReactCommon/turbomodule/core
|
- ReactCommon/turbomodule/core
|
||||||
- react-native-segmented-control (2.2.2):
|
- react-native-segmented-control (2.2.2):
|
||||||
- React-Core
|
- React-Core
|
||||||
- React-perflogger (0.69.6)
|
- React-perflogger (0.70.5)
|
||||||
- React-RCTActionSheet (0.69.6):
|
- React-RCTActionSheet (0.70.5):
|
||||||
- React-Core/RCTActionSheetHeaders (= 0.69.6)
|
- React-Core/RCTActionSheetHeaders (= 0.70.5)
|
||||||
- React-RCTAnimation (0.69.6):
|
- React-RCTAnimation (0.70.5):
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- RCTTypeSafety (= 0.69.6)
|
- RCTTypeSafety (= 0.70.5)
|
||||||
- React-Codegen (= 0.69.6)
|
- React-Codegen (= 0.70.5)
|
||||||
- React-Core/RCTAnimationHeaders (= 0.69.6)
|
- React-Core/RCTAnimationHeaders (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- ReactCommon/turbomodule/core (= 0.69.6)
|
- ReactCommon/turbomodule/core (= 0.70.5)
|
||||||
- React-RCTBlob (0.69.6):
|
- React-RCTBlob (0.70.5):
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Codegen (= 0.69.6)
|
- React-Codegen (= 0.70.5)
|
||||||
- React-Core/RCTBlobHeaders (= 0.69.6)
|
- React-Core/RCTBlobHeaders (= 0.70.5)
|
||||||
- React-Core/RCTWebSocket (= 0.69.6)
|
- React-Core/RCTWebSocket (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-RCTNetwork (= 0.69.6)
|
- React-RCTNetwork (= 0.70.5)
|
||||||
- ReactCommon/turbomodule/core (= 0.69.6)
|
- ReactCommon/turbomodule/core (= 0.70.5)
|
||||||
- React-RCTImage (0.69.6):
|
- React-RCTImage (0.70.5):
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- RCTTypeSafety (= 0.69.6)
|
- RCTTypeSafety (= 0.70.5)
|
||||||
- React-Codegen (= 0.69.6)
|
- React-Codegen (= 0.70.5)
|
||||||
- React-Core/RCTImageHeaders (= 0.69.6)
|
- React-Core/RCTImageHeaders (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-RCTNetwork (= 0.69.6)
|
- React-RCTNetwork (= 0.70.5)
|
||||||
- ReactCommon/turbomodule/core (= 0.69.6)
|
- ReactCommon/turbomodule/core (= 0.70.5)
|
||||||
- React-RCTLinking (0.69.6):
|
- React-RCTLinking (0.70.5):
|
||||||
- React-Codegen (= 0.69.6)
|
- React-Codegen (= 0.70.5)
|
||||||
- React-Core/RCTLinkingHeaders (= 0.69.6)
|
- React-Core/RCTLinkingHeaders (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- ReactCommon/turbomodule/core (= 0.69.6)
|
- ReactCommon/turbomodule/core (= 0.70.5)
|
||||||
- React-RCTNetwork (0.69.6):
|
- React-RCTNetwork (0.70.5):
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- RCTTypeSafety (= 0.69.6)
|
- RCTTypeSafety (= 0.70.5)
|
||||||
- React-Codegen (= 0.69.6)
|
- React-Codegen (= 0.70.5)
|
||||||
- React-Core/RCTNetworkHeaders (= 0.69.6)
|
- React-Core/RCTNetworkHeaders (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- ReactCommon/turbomodule/core (= 0.69.6)
|
- ReactCommon/turbomodule/core (= 0.70.5)
|
||||||
- React-RCTSettings (0.69.6):
|
- React-RCTSettings (0.70.5):
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- RCTTypeSafety (= 0.69.6)
|
- RCTTypeSafety (= 0.70.5)
|
||||||
- React-Codegen (= 0.69.6)
|
- React-Codegen (= 0.70.5)
|
||||||
- React-Core/RCTSettingsHeaders (= 0.69.6)
|
- React-Core/RCTSettingsHeaders (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- ReactCommon/turbomodule/core (= 0.69.6)
|
- ReactCommon/turbomodule/core (= 0.70.5)
|
||||||
- React-RCTText (0.69.6):
|
- React-RCTText (0.70.5):
|
||||||
- React-Core/RCTTextHeaders (= 0.69.6)
|
- React-Core/RCTTextHeaders (= 0.70.5)
|
||||||
- React-RCTVibration (0.69.6):
|
- React-RCTVibration (0.70.5):
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-Codegen (= 0.69.6)
|
- React-Codegen (= 0.70.5)
|
||||||
- React-Core/RCTVibrationHeaders (= 0.69.6)
|
- React-Core/RCTVibrationHeaders (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- ReactCommon/turbomodule/core (= 0.69.6)
|
- ReactCommon/turbomodule/core (= 0.70.5)
|
||||||
- React-runtimeexecutor (0.69.6):
|
- React-runtimeexecutor (0.70.5):
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- ReactCommon (0.69.6):
|
- ReactCommon/turbomodule/core (0.70.5):
|
||||||
- React-logger (= 0.69.6)
|
|
||||||
- ReactCommon/react_debug_core (= 0.69.6)
|
|
||||||
- ReactCommon/turbomodule (= 0.69.6)
|
|
||||||
- ReactCommon/react_debug_core (0.69.6):
|
|
||||||
- React-logger (= 0.69.6)
|
|
||||||
- ReactCommon/turbomodule (0.69.6):
|
|
||||||
- DoubleConversion
|
- DoubleConversion
|
||||||
- glog
|
- glog
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
- RCT-Folly (= 2021.07.22.00)
|
||||||
- React-bridging (= 0.69.6)
|
- React-bridging (= 0.70.5)
|
||||||
- React-callinvoker (= 0.69.6)
|
- React-callinvoker (= 0.70.5)
|
||||||
- React-Core (= 0.69.6)
|
- React-Core (= 0.70.5)
|
||||||
- React-cxxreact (= 0.69.6)
|
- React-cxxreact (= 0.70.5)
|
||||||
- React-jsi (= 0.69.6)
|
- React-jsi (= 0.70.5)
|
||||||
- React-logger (= 0.69.6)
|
- React-logger (= 0.70.5)
|
||||||
- React-perflogger (= 0.69.6)
|
- React-perflogger (= 0.70.5)
|
||||||
- ReactCommon/turbomodule/core (= 0.69.6)
|
- RNCAsyncStorage (1.17.11):
|
||||||
- ReactCommon/turbomodule/samples (= 0.69.6)
|
|
||||||
- ReactCommon/turbomodule/core (0.69.6):
|
|
||||||
- DoubleConversion
|
|
||||||
- glog
|
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
|
||||||
- React-bridging (= 0.69.6)
|
|
||||||
- React-callinvoker (= 0.69.6)
|
|
||||||
- React-Core (= 0.69.6)
|
|
||||||
- React-cxxreact (= 0.69.6)
|
|
||||||
- React-jsi (= 0.69.6)
|
|
||||||
- React-logger (= 0.69.6)
|
|
||||||
- React-perflogger (= 0.69.6)
|
|
||||||
- ReactCommon/turbomodule/samples (0.69.6):
|
|
||||||
- DoubleConversion
|
|
||||||
- glog
|
|
||||||
- RCT-Folly (= 2021.06.28.00-v2)
|
|
||||||
- React-bridging (= 0.69.6)
|
|
||||||
- React-callinvoker (= 0.69.6)
|
|
||||||
- React-Core (= 0.69.6)
|
|
||||||
- React-cxxreact (= 0.69.6)
|
|
||||||
- React-jsi (= 0.69.6)
|
|
||||||
- React-logger (= 0.69.6)
|
|
||||||
- React-perflogger (= 0.69.6)
|
|
||||||
- ReactCommon/turbomodule/core (= 0.69.6)
|
|
||||||
- RNCAsyncStorage (1.17.10):
|
|
||||||
- React-Core
|
- React-Core
|
||||||
- RNCClipboard (1.11.1):
|
- RNCClipboard (1.11.1):
|
||||||
- React-Core
|
- React-Core
|
||||||
- RNFastImage (8.6.3):
|
- RNFastImage (8.6.3):
|
||||||
- React-Core
|
- React-Core
|
||||||
- SDWebImage (~> 5.13.5)
|
- SDWebImage (~> 5.14.1)
|
||||||
- SDWebImageWebPCoder (~> 0.9.1)
|
- SDWebImageWebPCoder (~> 0.9.1)
|
||||||
- RNGestureHandler (2.8.0):
|
- RNGestureHandler (2.8.0):
|
||||||
- React-Core
|
- React-Core
|
||||||
@ -570,22 +538,22 @@ PODS:
|
|||||||
- RNScreens (3.18.2):
|
- RNScreens (3.18.2):
|
||||||
- React-Core
|
- React-Core
|
||||||
- React-RCTImage
|
- React-RCTImage
|
||||||
- RNSentry (4.7.1):
|
- RNSentry (4.8.0):
|
||||||
- React-Core
|
- React-Core
|
||||||
- Sentry (= 7.28.0)
|
- Sentry (= 7.29.0)
|
||||||
- RNShareMenu (6.0.0):
|
- RNShareMenu (6.0.0):
|
||||||
- React
|
- React
|
||||||
- RNSVG (13.0.0):
|
- RNSVG (13.5.0):
|
||||||
- React-Core
|
- React-Core
|
||||||
- SDWebImage (5.13.5):
|
- SDWebImage (5.14.1):
|
||||||
- SDWebImage/Core (= 5.13.5)
|
- SDWebImage/Core (= 5.14.1)
|
||||||
- SDWebImage/Core (5.13.5)
|
- SDWebImage/Core (5.14.1)
|
||||||
- SDWebImageWebPCoder (0.9.1):
|
- SDWebImageWebPCoder (0.9.1):
|
||||||
- libwebp (~> 1.0)
|
- libwebp (~> 1.0)
|
||||||
- SDWebImage/Core (~> 5.13)
|
- SDWebImage/Core (~> 5.13)
|
||||||
- Sentry (7.28.0):
|
- Sentry (7.29.0):
|
||||||
- Sentry/Core (= 7.28.0)
|
- Sentry/Core (= 7.29.0)
|
||||||
- Sentry/Core (7.28.0)
|
- Sentry/Core (7.29.0)
|
||||||
- Swime (3.0.6)
|
- Swime (3.0.6)
|
||||||
- Yoga (1.14.0)
|
- Yoga (1.14.0)
|
||||||
|
|
||||||
@ -606,13 +574,13 @@ DEPENDENCIES:
|
|||||||
- ExpoHaptics (from `../node_modules/expo-haptics/ios`)
|
- ExpoHaptics (from `../node_modules/expo-haptics/ios`)
|
||||||
- ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`)
|
- ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`)
|
||||||
- ExpoLocalization (from `../node_modules/expo-localization/ios`)
|
- ExpoLocalization (from `../node_modules/expo-localization/ios`)
|
||||||
- ExpoModulesCore (from `../node_modules/expo-modules-core/ios`)
|
- ExpoModulesCore (from `../node_modules/expo-modules-core`)
|
||||||
- ExpoRandom (from `../node_modules/expo-random/ios`)
|
- ExpoRandom (from `../node_modules/expo-random/ios`)
|
||||||
|
- ExpoStoreReview (from `../node_modules/expo-store-review/ios`)
|
||||||
- ExpoWebBrowser (from `../node_modules/expo-web-browser/ios`)
|
- ExpoWebBrowser (from `../node_modules/expo-web-browser/ios`)
|
||||||
- EXScreenCapture (from `../node_modules/expo-screen-capture/ios`)
|
- EXScreenCapture (from `../node_modules/expo-screen-capture/ios`)
|
||||||
- EXSecureStore (from `../node_modules/expo-secure-store/ios`)
|
- EXSecureStore (from `../node_modules/expo-secure-store/ios`)
|
||||||
- EXSplashScreen (from `../node_modules/expo-splash-screen/ios`)
|
- EXSplashScreen (from `../node_modules/expo-splash-screen/ios`)
|
||||||
- EXStoreReview (from `../node_modules/expo-store-review/ios`)
|
|
||||||
- EXVideoThumbnails (from `../node_modules/expo-video-thumbnails/ios`)
|
- EXVideoThumbnails (from `../node_modules/expo-video-thumbnails/ios`)
|
||||||
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
|
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
|
||||||
- FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
|
- FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
|
||||||
@ -728,9 +696,11 @@ EXTERNAL SOURCES:
|
|||||||
ExpoLocalization:
|
ExpoLocalization:
|
||||||
:path: "../node_modules/expo-localization/ios"
|
:path: "../node_modules/expo-localization/ios"
|
||||||
ExpoModulesCore:
|
ExpoModulesCore:
|
||||||
:path: "../node_modules/expo-modules-core/ios"
|
:path: "../node_modules/expo-modules-core"
|
||||||
ExpoRandom:
|
ExpoRandom:
|
||||||
:path: "../node_modules/expo-random/ios"
|
:path: "../node_modules/expo-random/ios"
|
||||||
|
ExpoStoreReview:
|
||||||
|
:path: "../node_modules/expo-store-review/ios"
|
||||||
ExpoWebBrowser:
|
ExpoWebBrowser:
|
||||||
:path: "../node_modules/expo-web-browser/ios"
|
:path: "../node_modules/expo-web-browser/ios"
|
||||||
EXScreenCapture:
|
EXScreenCapture:
|
||||||
@ -739,8 +709,6 @@ EXTERNAL SOURCES:
|
|||||||
:path: "../node_modules/expo-secure-store/ios"
|
:path: "../node_modules/expo-secure-store/ios"
|
||||||
EXSplashScreen:
|
EXSplashScreen:
|
||||||
:path: "../node_modules/expo-splash-screen/ios"
|
:path: "../node_modules/expo-splash-screen/ios"
|
||||||
EXStoreReview:
|
|
||||||
:path: "../node_modules/expo-store-review/ios"
|
|
||||||
EXVideoThumbnails:
|
EXVideoThumbnails:
|
||||||
:path: "../node_modules/expo-video-thumbnails/ios"
|
:path: "../node_modules/expo-video-thumbnails/ios"
|
||||||
FBLazyVector:
|
FBLazyVector:
|
||||||
@ -853,30 +821,30 @@ EXTERNAL SOURCES:
|
|||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
boost: a7c83b31436843459a1961bfd74b96033dc77234
|
boost: a7c83b31436843459a1961bfd74b96033dc77234
|
||||||
DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
|
DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
|
||||||
EXApplication: e418d737a036e788510f2c4ad6c10a7d54d18586
|
EXApplication: 034b1c40a8e9fe1bff76a1e511ee90dff64ad834
|
||||||
EXAV: 596506c9bee54ad52f2f3b625cdaeb9d9f2dd6b7
|
EXAV: 766516466675fc5fdd7c500acced5934e8b00de2
|
||||||
EXConstants: 7c44785d41d8e959d527d23d29444277a4d1ee73
|
EXConstants: 3c86653c422dd77e40d10cbbabb3025003977415
|
||||||
EXErrorRecovery: 74d71ee59f6814315457b09d68e86aa95cc7d05d
|
EXErrorRecovery: ae43433feb0608a64dc5b1c8363b3e7769a9ea24
|
||||||
EXFileSystem: 927e0a8885aa9c49e50fc38eaba2c2389f2f1019
|
EXFileSystem: 60602b6eefa6873f97172c684b7537c9760b50d6
|
||||||
EXFirebaseAnalytics: 2e478758e153b908b67477dff7adf99ffbf37a1b
|
EXFirebaseAnalytics: 58d70e698859b070b2450ad8664d7b5bc6c6e3e1
|
||||||
EXFirebaseCore: cb1e6afad20c4c32a4966432c78ebfff29d8db6b
|
EXFirebaseCore: d0d88cb904e893af07f809ab08c0892489bc6956
|
||||||
EXFont: 06df627203afcb8a3b3152ec06eb2f11f46f0cff
|
EXFont: 319606bfe48c33b5b5063fb0994afdc496befe80
|
||||||
EXNotifications: 9a2aa201deb19dfe1dbe0e370eeb2922de0d2422
|
EXNotifications: babce2a87b7922051354fcfe7a74dd279b7e272a
|
||||||
Expo: 7ac824960a6059d6c68e73f432c8e6bf6d92a0ef
|
Expo: 8e4f1d149b58d5df10d302e0b5c489f9fc6623fc
|
||||||
ExpoCrypto: e534314db0e1a17ae12b5140d529bd0c5efcbc6a
|
ExpoCrypto: 51e7662c7f5bfeab25b7909b8a5d545ec15d4877
|
||||||
ExpoHaptics: efe9e68e9dfe0d15c183c0c70a25f3874124ab9e
|
ExpoHaptics: 5a56d30a87ea213dd00b09566dc4b441a4dff97f
|
||||||
ExpoKeepAwake: 0e8f18142e71bbf2c7f6aa66ebed249ba1420320
|
ExpoKeepAwake: 69b59d0a8d2b24de9f82759c39b3821fec030318
|
||||||
ExpoLocalization: 63204f4b9d4f653469d266332ceaa6c6ac8a305d
|
ExpoLocalization: e202d1e2a4950df17ac8d0889d65a1ffd7532d7e
|
||||||
ExpoModulesCore: 39ec590ce622289c060183aba57f77b1e73b4e11
|
ExpoModulesCore: 20decc110ca3987e1728dee2ce4b3f79e147edda
|
||||||
ExpoRandom: f9f1faa299a40733867f344d6b7bfa2d1f4ab04d
|
ExpoRandom: 58b7e0a5fe1adf1cb6dc1cbe503a6fe9524f36ce
|
||||||
ExpoWebBrowser: 5804ac42a8269d0e534bc4461993005f72535649
|
ExpoStoreReview: ff6d631f2949eb7e4b2d14146ef6af25a16d770d
|
||||||
EXScreenCapture: 23de056fdb02edd1fb8f147b0fd198c6d5cada3d
|
ExpoWebBrowser: 073e50f16669d498fb49063b9b7fe780b24f7fda
|
||||||
EXSecureStore: ac4b3c89dd5810528074d9422d5fed5a9e684467
|
EXScreenCapture: d9f1ec31042dfef109290d06c2b4789b7444d16d
|
||||||
EXSplashScreen: 799bece80089219b2c989c1082d70f3b00995cda
|
EXSecureStore: daec0117c922a67c658cb229152a9e252e5c1750
|
||||||
EXStoreReview: cbb6b2202bb6f831cd3234d9d8b995cec0eb32f2
|
EXSplashScreen: 4b57f8416a057411cb3c97db9fc9a615f8c1d5d9
|
||||||
EXVideoThumbnails: 486533e1a66c9859f9b9e3b2e1f9f0b275515b48
|
EXVideoThumbnails: 8b3e48f3716679dd0cbf949217a31eab5c555799
|
||||||
FBLazyVector: 739d2f9719faecb463c7aa191591af31c8c94182
|
FBLazyVector: affa4ba1bfdaac110a789192f4d452b053a86624
|
||||||
FBReactNativeSpec: 957de82f66e31f2f14bbec34e37242282fdd26de
|
FBReactNativeSpec: fe8b5f1429cfe83a8d72dc8ed61dc7704cac8745
|
||||||
Firebase: 800f16f07af493d98d017446a315c27af0552f41
|
Firebase: 800f16f07af493d98d017446a315c27af0552f41
|
||||||
FirebaseAnalytics: 1b60984a408320dda637306f3f733699ef8473d7
|
FirebaseAnalytics: 1b60984a408320dda637306f3f733699ef8473d7
|
||||||
FirebaseCore: 25c0400b670fd1e2f2104349cd3b5dcce8d9418f
|
FirebaseCore: 25c0400b670fd1e2f2104349cd3b5dcce8d9418f
|
||||||
@ -884,69 +852,69 @@ SPEC CHECKSUMS:
|
|||||||
FirebaseCoreInternal: bca76517fe1ed381e989f5e7d8abb0da8d85bed3
|
FirebaseCoreInternal: bca76517fe1ed381e989f5e7d8abb0da8d85bed3
|
||||||
FirebaseInstallations: 0a115432c4e223c5ab20b0dbbe4cbefa793a0e8e
|
FirebaseInstallations: 0a115432c4e223c5ab20b0dbbe4cbefa793a0e8e
|
||||||
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
|
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
|
||||||
glog: 3d02b25ca00c2d456734d0bcff864cbc62f6ae1a
|
glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
|
||||||
GoogleAppMeasurement: 6ee231473fbd75c11221dfce489894334024eead
|
GoogleAppMeasurement: 6ee231473fbd75c11221dfce489894334024eead
|
||||||
GoogleDataTransport: 1c8145da7117bd68bbbed00cf304edb6a24de00f
|
GoogleDataTransport: 1c8145da7117bd68bbbed00cf304edb6a24de00f
|
||||||
GoogleUtilities: 1d20a6ad97ef46f67bbdec158ce00563a671ebb7
|
GoogleUtilities: 1d20a6ad97ef46f67bbdec158ce00563a671ebb7
|
||||||
hermes-engine: c2c873a670bc435451449f918c2b3ab3c39255fc
|
hermes-engine: 7fe5fc6ef707b7fdcb161b63898ec500e285653d
|
||||||
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
|
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
|
||||||
libwebp: 60305b2e989864154bd9be3d772730f08fc6a59c
|
libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef
|
||||||
nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431
|
nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431
|
||||||
PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb
|
PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb
|
||||||
RCT-Folly: b9d9fe1fc70114b751c076104e52f3b1b5e5a95a
|
RCT-Folly: 0080d0a6ebf2577475bda044aa59e2ca1f909cda
|
||||||
RCTRequired: c8c080849a3670601d5c7056023a2176067a69d8
|
RCTRequired: 21229f84411088e5d8538f21212de49e46cc83e2
|
||||||
RCTTypeSafety: 710aef40f5ae246bc5fff7e873855b17ed11c180
|
RCTTypeSafety: 62eed57a32924b09edaaf170a548d1fc96223086
|
||||||
React: b6bb382534be4de9d367ef3d04f92108c1768160
|
React: f0254ccddeeef1defe66c6b1bb9133a4f040792b
|
||||||
React-bridging: 0fca0337cef9305026814907dd29254a833a2db7
|
React-bridging: e46911666b7ec19538a620a221d6396cd293d687
|
||||||
React-callinvoker: 700e6eb96b5f7f2fdd96d7263cd4627d2fa080ed
|
React-callinvoker: 66b62e2c34546546b2f21ab0b7670346410a2b53
|
||||||
React-Codegen: fd21633c4b9f47d0681bbb54b173a203963a5e4d
|
React-Codegen: b6999435966df3bdf82afa3f319ba0d6f9a8532a
|
||||||
React-Core: 8ec15c9727c8c01b1e4f14cad5bd21f7c1d56d49
|
React-Core: dabbc9d1fe0a11d884e6ee1599789cf8eb1058a5
|
||||||
React-CoreModules: 79486447bf901292a83df52d4f7acbecda296723
|
React-CoreModules: 5b6b7668f156f73a56420df9ec68ca2ec8f2e818
|
||||||
React-cxxreact: 9022135650dd9960a60a1361e9add424c6c37ab9
|
React-cxxreact: c7ca2baee46db22a30fce9e639277add3c3f6ad1
|
||||||
React-hermes: b5ce7fb460ff6d39e7bb9bbe1f523272c4b85c0b
|
React-hermes: c93e1d759ad5560dfea54d233013d7d2c725c286
|
||||||
React-jsi: 4ccb3599c422ad071e3895c5feab9b0afc40505d
|
React-jsi: a565dcb49130ed20877a9bb1105ffeecbb93d02d
|
||||||
React-jsiexecutor: c61b60de03b3474e5749b8a8fd8e6507630d62c4
|
React-jsiexecutor: 31564fa6912459921568e8b0e49024285a4d584b
|
||||||
React-jsinspector: eaacb698c5af7a99131bc1933806372c20222dfd
|
React-jsinspector: badd81696361249893a80477983e697aab3c1a34
|
||||||
React-logger: ebb4d31bbbe4f1a8a1a9b658d7429210b8f68160
|
React-logger: fdda34dd285bdb0232e059b19d9606fa0ec3bb9c
|
||||||
react-native-blur: 3e9c8e8e9f7d17fa1b94e1a0ae9fd816675f5382
|
react-native-blur: 50c9feabacbc5f49b61337ebc32192c6be7ec3c3
|
||||||
react-native-blurhash: add4df9a937b4e021a24bc67a0714f13e0bd40b7
|
react-native-blurhash: add4df9a937b4e021a24bc67a0714f13e0bd40b7
|
||||||
react-native-cameraroll: 38b40d9033e4077b6c603f92f95c6d05fa7907df
|
react-native-cameraroll: a40b082318eb1ecd0336a2f29d9f74b7f2c8cae8
|
||||||
react-native-context-menu-view: b0beca02aad4bd9f9d7d932bf437e0a03baa69ef
|
react-native-context-menu-view: b0beca02aad4bd9f9d7d932bf437e0a03baa69ef
|
||||||
react-native-image-picker: 4bc9ed38c8be255b515d8c88babbaf74973f91a8
|
react-native-image-picker: 4bc9ed38c8be255b515d8c88babbaf74973f91a8
|
||||||
react-native-language-detection: 0e43195ad014974f1b7a31b64820eff34a243f2d
|
react-native-language-detection: 0e43195ad014974f1b7a31b64820eff34a243f2d
|
||||||
react-native-live-text-image-view: 483bacfdba464162b8cf176bba555364f18b584c
|
react-native-live-text-image-view: 483bacfdba464162b8cf176bba555364f18b584c
|
||||||
react-native-netinfo: f80db8cac2151405633324cb645c60af098ee461
|
react-native-netinfo: f80db8cac2151405633324cb645c60af098ee461
|
||||||
react-native-pager-view: 592421df0259bf7a7a4fe85b74c24f3f39905605
|
react-native-pager-view: 7abf89f9834d9a4021b2fb6a5ef2abff570b46fb
|
||||||
react-native-paste-input: 183ad7dc224e192719616f4258dde5b548627d08
|
react-native-paste-input: 183ad7dc224e192719616f4258dde5b548627d08
|
||||||
react-native-safe-area-context: 99b24a0c5acd0d5dcac2b1a7f18c49ea317be99a
|
react-native-safe-area-context: 99b24a0c5acd0d5dcac2b1a7f18c49ea317be99a
|
||||||
react-native-segmented-control: 65df6cd0619b780b3843d574a72d4c7cec396097
|
react-native-segmented-control: 65df6cd0619b780b3843d574a72d4c7cec396097
|
||||||
React-perflogger: 1fb1ad5333b43a5137afd7608695f7a42c5efd27
|
React-perflogger: e68d3795cf5d247a0379735cbac7309adf2fb931
|
||||||
React-RCTActionSheet: a435bd67689433575a1e5d7614b021d2c17f0726
|
React-RCTActionSheet: 05452c3b281edb27850253db13ecd4c5a65bc247
|
||||||
React-RCTAnimation: d097c5ed2d00735958508617555abd85183b94e2
|
React-RCTAnimation: 578eebac706428e68466118e84aeacf3a282b4da
|
||||||
React-RCTBlob: f43a0fceb328e1a40aa52701a4eba955635444ab
|
React-RCTBlob: f47a0aa61e7d1fb1a0e13da832b0da934939d71a
|
||||||
React-RCTImage: 08f4428e931efe0eefb94443c8ca08cfb250a556
|
React-RCTImage: 60f54b66eed65d86b6dffaf4733d09161d44929d
|
||||||
React-RCTLinking: 3a8851e818652582f87e5a7577302e6ad7e1de3e
|
React-RCTLinking: 91073205aeec4b29450ca79b709277319368ac9e
|
||||||
React-RCTNetwork: 19f7c66b612e2336eefdfbc7ab3a9bd8ca4e21cf
|
React-RCTNetwork: ca91f2c9465a7e335c8a5fae731fd7f10572213b
|
||||||
React-RCTSettings: 9324e718a865ff01e4a96be4c65923581b2d5170
|
React-RCTSettings: 1a9a5d01337d55c18168c1abe0f4a589167d134a
|
||||||
React-RCTText: 9cadcd5d982c1d25f7439f47354b1c1b75e60105
|
React-RCTText: c591e8bd9347a294d8416357ca12d779afec01d5
|
||||||
React-RCTVibration: 285f8538386c660e6b9497e204636acd93bf7fcc
|
React-RCTVibration: 8e5c8c5d17af641f306d7380d8d0fe9b3c142c48
|
||||||
React-runtimeexecutor: 0af71c94f968fa10015bf0119951bccd2e4d8865
|
React-runtimeexecutor: 7401c4a40f8728fd89df4a56104541b760876117
|
||||||
ReactCommon: fe7580b9d10f00249facf25659e0ec051320cc8a
|
ReactCommon: c9246996e73bf75a2c6c3ff15f1e16707cdc2da9
|
||||||
RNCAsyncStorage: 0c357f3156fcb16c8589ede67cc036330b6698ca
|
RNCAsyncStorage: 8616bd5a58af409453ea4e1b246521bb76578d60
|
||||||
RNCClipboard: 2834e1c4af68697089cdd455ee4a4cdd198fa7dd
|
RNCClipboard: 2834e1c4af68697089cdd455ee4a4cdd198fa7dd
|
||||||
RNFastImage: c74e098cb862b4870c3de0b1096b65c63e492938
|
RNFastImage: 0211f5ebb561956cbb14d822606a6dce9d88e9c7
|
||||||
RNGestureHandler: 62232ba8f562f7dea5ba1b3383494eb5bf97a4d3
|
RNGestureHandler: 62232ba8f562f7dea5ba1b3383494eb5bf97a4d3
|
||||||
RNReanimated: c3e58924b9418883b0bde9e78c4c957302f02435
|
RNReanimated: 2a91e85fcd343f8af3c58d3425b99fdd285590a5
|
||||||
RNScreens: 34cc502acf1b916c582c60003dc3089fa01dc66d
|
RNScreens: 34cc502acf1b916c582c60003dc3089fa01dc66d
|
||||||
RNSentry: 694aecc3d8240e4935374974a6636e360ae06394
|
RNSentry: db7fd7b66efda28885e4e904a8b5e7349aec61c1
|
||||||
RNShareMenu: cb9dac548c8bf147d06f0bf07296ad51ea9f5fc3
|
RNShareMenu: cb9dac548c8bf147d06f0bf07296ad51ea9f5fc3
|
||||||
RNSVG: 42a0c731b11179ebbd27a3eeeafa7201ebb476ff
|
RNSVG: 38ca962c970dbce1ca38991a5aebf26d163f9efb
|
||||||
SDWebImage: 23d714cd599354ee7906dbae26dff89b421c4370
|
SDWebImage: e1b3c38f170c6100130fce6856e423ed9e5f4fce
|
||||||
SDWebImageWebPCoder: 18503de6621dd2c420d680e33d46bf8e1d5169b0
|
SDWebImageWebPCoder: 18503de6621dd2c420d680e33d46bf8e1d5169b0
|
||||||
Sentry: 2c6053e4cfe6dea6608135dea1928ffbb4ecfba5
|
Sentry: 4272663eb0eda312024d795ca3f5a562a8ce5e18
|
||||||
Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b
|
Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b
|
||||||
Yoga: 75bf4b0131cfb46a659cd0c13309b79a6fcff66d
|
Yoga: eca980a5771bf114c41a754098cd85e6e0d90ed7
|
||||||
|
|
||||||
PODFILE CHECKSUM: 244b6793e4be83f0909a91b2fe15c8f89a5e8151
|
PODFILE CHECKSUM: e4191b63c8f15031b2365226730770e7978dca41
|
||||||
|
|
||||||
COCOAPODS: 1.11.3
|
COCOAPODS: 1.11.3
|
||||||
|
2
ios/fr.lproj/InfoPlist.strings
Normal file
2
ios/fr.lproj/InfoPlist.strings
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
"NSPhotoLibraryAddUsageDescription" = "Autoriser tooot à enregistrer des images sur votre pellicule";
|
||||||
|
"NSPhotoLibraryUsageDescription" = "Autoriser tooot à enregistrer des images sur votre pellicule";
|
@ -76,6 +76,7 @@
|
|||||||
E633A427281EAEAB000E540F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
E633A427281EAEAB000E540F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; 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>"; };
|
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>"; };
|
||||||
|
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>"; };
|
||||||
E69EBACA28DF282D0057EDEC /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
E69EBACA28DF282D0057EDEC /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
E69EBACB28DF283A0057EDEC /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
E69EBACB28DF283A0057EDEC /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
@ -291,6 +292,7 @@
|
|||||||
vi,
|
vi,
|
||||||
ja,
|
ja,
|
||||||
"zh-Hant",
|
"zh-Hant",
|
||||||
|
fr,
|
||||||
);
|
);
|
||||||
mainGroup = 83CBB9F61A601CBA00E9B192;
|
mainGroup = 83CBB9F61A601CBA00E9B192;
|
||||||
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
|
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
|
||||||
@ -519,6 +521,7 @@
|
|||||||
E69EBACE28DF28560057EDEC /* vi */,
|
E69EBACE28DF28560057EDEC /* vi */,
|
||||||
E6C8B26628F5F9FC0062CF2E /* ja */,
|
E6C8B26628F5F9FC0062CF2E /* ja */,
|
||||||
E671BDF8290EAFB800287BD0 /* zh-Hant */,
|
E671BDF8290EAFB800287BD0 /* zh-Hant */,
|
||||||
|
E66C0842291F095800DFFF60 /* fr */,
|
||||||
);
|
);
|
||||||
name = InfoPlist.strings;
|
name = InfoPlist.strings;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -544,7 +547,8 @@
|
|||||||
"FB_SONARKIT_ENABLED=1",
|
"FB_SONARKIT_ENABLED=1",
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = tooot/Info.plist;
|
INFOPLIST_FILE = tooot/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
|
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
@ -581,7 +585,8 @@
|
|||||||
DEVELOPMENT_TEAM = 8EGBLQ2MA6;
|
DEVELOPMENT_TEAM = 8EGBLQ2MA6;
|
||||||
"ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = YES;
|
"ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = YES;
|
||||||
INFOPLIST_FILE = tooot/Info.plist;
|
INFOPLIST_FILE = tooot/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
|
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
@ -609,7 +614,7 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "c++17";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
@ -654,12 +659,12 @@
|
|||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
/usr/lib/swift,
|
/usr/lib/swift,
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
);
|
);
|
||||||
LIBRARY_SEARCH_PATHS = "\"\"";
|
LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"\"";
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
|
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
|
||||||
@ -672,7 +677,7 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "c++17";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
@ -710,12 +715,12 @@
|
|||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
/usr/lib/swift,
|
/usr/lib/swift,
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
);
|
);
|
||||||
LIBRARY_SEARCH_PATHS = "\"\"";
|
LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"\"";
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
ONLY_ACTIVE_ARCH = NO;
|
ONLY_ACTIVE_ARCH = NO;
|
||||||
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
|
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
|
||||||
@ -747,7 +752,7 @@
|
|||||||
INFOPLIST_FILE = ShareExtension/Info.plist;
|
INFOPLIST_FILE = ShareExtension/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = ShareExtension;
|
INFOPLIST_KEY_CFBundleDisplayName = ShareExtension;
|
||||||
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
"IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.2;
|
"IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.2;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@ -796,7 +801,7 @@
|
|||||||
INFOPLIST_FILE = ShareExtension/Info.plist;
|
INFOPLIST_FILE = ShareExtension/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = ShareExtension;
|
INFOPLIST_KEY_CFBundleDisplayName = ShareExtension;
|
||||||
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
"IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.2;
|
"IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.2;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
|
89
package.json
89
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "tooot",
|
"name": "tooot",
|
||||||
"version": "4.5.1",
|
"version": "4.6.0",
|
||||||
"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",
|
||||||
@ -18,7 +18,7 @@
|
|||||||
"postinstall": "patch-package"
|
"postinstall": "patch-package"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@expo/react-native-action-sheet": "^4.0.0",
|
"@expo/react-native-action-sheet": "^4.0.1",
|
||||||
"@formatjs/intl-datetimeformat": "^6.3.1",
|
"@formatjs/intl-datetimeformat": "^6.3.1",
|
||||||
"@formatjs/intl-getcanonicallocales": "^2.0.4",
|
"@formatjs/intl-getcanonicallocales": "^2.0.4",
|
||||||
"@formatjs/intl-locale": "^3.0.7",
|
"@formatjs/intl-locale": "^3.0.7",
|
||||||
@ -27,47 +27,47 @@
|
|||||||
"@formatjs/intl-relativetimeformat": "^11.1.4",
|
"@formatjs/intl-relativetimeformat": "^11.1.4",
|
||||||
"@mattermost/react-native-paste-input": "^0.5.1",
|
"@mattermost/react-native-paste-input": "^0.5.1",
|
||||||
"@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.10",
|
"@react-native-async-storage/async-storage": "~1.17.11",
|
||||||
"@react-native-camera-roll/camera-roll": "^5.0.4",
|
"@react-native-camera-roll/camera-roll": "^5.1.0",
|
||||||
"@react-native-clipboard/clipboard": "^1.11.1",
|
"@react-native-clipboard/clipboard": "^1.11.1",
|
||||||
"@react-native-community/blur": "^4.2.0",
|
"@react-native-community/blur": "^4.3.0",
|
||||||
"@react-native-community/netinfo": "^9.3.6",
|
"@react-native-community/netinfo": "9.3.6",
|
||||||
"@react-native-community/segmented-control": "^2.2.2",
|
"@react-native-community/segmented-control": "^2.2.2",
|
||||||
"@react-navigation/bottom-tabs": "^6.4.0",
|
"@react-navigation/bottom-tabs": "^6.4.0",
|
||||||
"@react-navigation/native": "^6.0.13",
|
"@react-navigation/native": "^6.0.13",
|
||||||
"@react-navigation/native-stack": "^6.9.1",
|
"@react-navigation/native-stack": "^6.9.1",
|
||||||
"@react-navigation/stack": "^6.3.3",
|
"@react-navigation/stack": "^6.3.4",
|
||||||
"@reduxjs/toolkit": "^1.8.6",
|
"@reduxjs/toolkit": "^1.9.0",
|
||||||
"@sentry/react-native": "^4.7.1",
|
"@sentry/react-native": "4.8.0",
|
||||||
"@sharcoux/slider": "^6.0.3",
|
"@sharcoux/slider": "^6.0.3",
|
||||||
"axios": "^0.27.2",
|
"axios": "^0.27.2",
|
||||||
"expo": "^46.0.16",
|
"expo": "^47.0.3",
|
||||||
"expo-auth-session": "^3.7.1",
|
"expo-auth-session": "~3.7.2",
|
||||||
"expo-av": "^12.0.4",
|
"expo-av": "~13.0.1",
|
||||||
"expo-constants": "^13.2.4",
|
"expo-constants": "~14.0.2",
|
||||||
"expo-crypto": "^11.0.0",
|
"expo-crypto": "~12.0.0",
|
||||||
"expo-file-system": "^14.1.0",
|
"expo-file-system": "~15.1.1",
|
||||||
"expo-firebase-analytics": "^7.2.0",
|
"expo-firebase-analytics": "~8.0.0",
|
||||||
"expo-haptics": "^11.3.0",
|
"expo-haptics": "~12.0.1",
|
||||||
"expo-linking": "^3.2.2",
|
"expo-linking": "~3.2.3",
|
||||||
"expo-localization": "^13.1.0",
|
"expo-localization": "~14.0.0",
|
||||||
"expo-notifications": "^0.16.1",
|
"expo-notifications": "~0.17.0",
|
||||||
"expo-random": "^12.3.0",
|
"expo-random": "~13.0.0",
|
||||||
"expo-screen-capture": "^4.3.0",
|
"expo-screen-capture": "~5.0.0",
|
||||||
"expo-secure-store": "^11.3.0",
|
"expo-secure-store": "~12.0.0",
|
||||||
"expo-splash-screen": "^0.16.2",
|
"expo-splash-screen": "~0.17.4",
|
||||||
"expo-store-review": "^5.3.0",
|
"expo-store-review": "~6.0.0",
|
||||||
"expo-video-thumbnails": "^6.4.0",
|
"expo-video-thumbnails": "~7.0.0",
|
||||||
"expo-web-browser": "^11.0.0",
|
"expo-web-browser": "~12.0.0",
|
||||||
"i18next": "^22.0.4",
|
"i18next": "^22.0.4",
|
||||||
"li": "^1.3.0",
|
"li": "^1.3.0",
|
||||||
"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.0.0",
|
"react-i18next": "^12.0.0",
|
||||||
"react-intl": "^6.2.1",
|
"react-intl": "^6.2.1",
|
||||||
"react-native": "^0.69.6",
|
"react-native": "0.70.5",
|
||||||
"react-native-animated-spinkit": "^1.5.2",
|
"react-native-animated-spinkit": "^1.5.2",
|
||||||
"react-native-base64": "^0.2.1",
|
"react-native-base64": "^0.2.1",
|
||||||
"react-native-blurhash": "^1.1.10",
|
"react-native-blurhash": "^1.1.10",
|
||||||
@ -75,37 +75,37 @@
|
|||||||
"react-native-fast-image": "^8.6.3",
|
"react-native-fast-image": "^8.6.3",
|
||||||
"react-native-feather": "^1.1.2",
|
"react-native-feather": "^1.1.2",
|
||||||
"react-native-flash-message": "^0.3.1",
|
"react-native-flash-message": "^0.3.1",
|
||||||
"react-native-gesture-handler": "^2.8.0",
|
"react-native-gesture-handler": "~2.8.0",
|
||||||
"react-native-htmlview": "^0.16.0",
|
"react-native-htmlview": "^0.16.0",
|
||||||
"react-native-image-picker": "^4.10.0",
|
"react-native-image-picker": "^4.10.0",
|
||||||
"react-native-language-detection": "^0.1.0",
|
"react-native-language-detection": "^0.1.0",
|
||||||
"react-native-live-text-image-view": "^0.4.0",
|
"react-native-live-text-image-view": "^0.4.0",
|
||||||
"react-native-pager-view": "^6.0.2",
|
"react-native-pager-view": "6.1.0",
|
||||||
"react-native-reanimated": "^2.12.0",
|
"react-native-reanimated": "~2.12.0",
|
||||||
"react-native-reanimated-zoom": "^0.3.2",
|
"react-native-reanimated-zoom": "^0.3.3",
|
||||||
"react-native-safe-area-context": "^4.4.1",
|
"react-native-safe-area-context": "4.4.1",
|
||||||
"react-native-screens": "^3.18.2",
|
"react-native-screens": "~3.18.2",
|
||||||
"react-native-share-menu": "^6.0.0",
|
"react-native-share-menu": "^6.0.0",
|
||||||
"react-native-svg": "13.0.0",
|
"react-native-svg": "13.5.0",
|
||||||
"react-native-swipe-list-view": "^3.2.9",
|
"react-native-swipe-list-view": "^3.2.9",
|
||||||
"react-native-tab-view": "^3.3.0",
|
"react-native-tab-view": "^3.3.0",
|
||||||
"react-query": "^3.39.2",
|
"react-query": "^3.39.2",
|
||||||
"react-redux": "^8.0.4",
|
"react-redux": "^8.0.5",
|
||||||
"redux-persist": "^6.0.0",
|
"redux-persist": "^6.0.0",
|
||||||
"rn-placeholder": "^3.0.3",
|
"rn-placeholder": "^3.0.3",
|
||||||
"valid-url": "^1.0.9"
|
"valid-url": "^1.0.9"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.19.6",
|
"@babel/core": "^7.20.2",
|
||||||
"@babel/plugin-proposal-optional-chaining": "^7.18.9",
|
"@babel/plugin-proposal-optional-chaining": "^7.18.9",
|
||||||
"@babel/preset-react": "^7.18.6",
|
"@babel/preset-react": "^7.18.6",
|
||||||
"@babel/preset-typescript": "^7.18.6",
|
"@babel/preset-typescript": "^7.18.6",
|
||||||
"@expo/config": "^7.0.1",
|
"@expo/config": "^7.0.3",
|
||||||
"@types/linkify-it": "^3.0.2",
|
"@types/linkify-it": "^3.0.2",
|
||||||
"@types/lodash": "^4.14.186",
|
"@types/lodash": "^4.14.188",
|
||||||
"@types/react": "^18.0.24",
|
"@types/react": "~18.0.25",
|
||||||
"@types/react-dom": "^18.0.8",
|
"@types/react-dom": "~18.0.8",
|
||||||
"@types/react-native": "^0.69.5",
|
"@types/react-native": "~0.70.6",
|
||||||
"@types/react-native-base64": "^0.2.0",
|
"@types/react-native-base64": "^0.2.0",
|
||||||
"@types/react-native-share-menu": "^5.0.2",
|
"@types/react-native-share-menu": "^5.0.2",
|
||||||
"@types/react-timeago": "^4.1.3",
|
"@types/react-timeago": "^4.1.3",
|
||||||
@ -115,6 +115,7 @@
|
|||||||
"babel-plugin-transform-remove-console": "^6.9.4",
|
"babel-plugin-transform-remove-console": "^6.9.4",
|
||||||
"chalk": "^4.1.2",
|
"chalk": "^4.1.2",
|
||||||
"dotenv": "^16.0.3",
|
"dotenv": "^16.0.3",
|
||||||
|
"expo-cli": "^6.0.8",
|
||||||
"patch-package": "^6.5.0",
|
"patch-package": "^6.5.0",
|
||||||
"postinstall-postinstall": "^2.1.0",
|
"postinstall-postinstall": "^2.1.0",
|
||||||
"react-native-clean-project": "^4.0.1",
|
"react-native-clean-project": "^4.0.1",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
diff --git a/node_modules/react-native-fast-image/RNFastImage.podspec b/node_modules/react-native-fast-image/RNFastImage.podspec
|
diff --git a/node_modules/react-native-fast-image/RNFastImage.podspec b/node_modules/react-native-fast-image/RNFastImage.podspec
|
||||||
index db0fada..23770b6 100644
|
index db0fada..a752393 100644
|
||||||
--- a/node_modules/react-native-fast-image/RNFastImage.podspec
|
--- a/node_modules/react-native-fast-image/RNFastImage.podspec
|
||||||
+++ b/node_modules/react-native-fast-image/RNFastImage.podspec
|
+++ b/node_modules/react-native-fast-image/RNFastImage.podspec
|
||||||
@@ -16,6 +16,6 @@ Pod::Spec.new do |s|
|
@@ -16,6 +16,6 @@ Pod::Spec.new do |s|
|
||||||
@ -8,7 +8,7 @@ index db0fada..23770b6 100644
|
|||||||
s.dependency 'React-Core'
|
s.dependency 'React-Core'
|
||||||
- s.dependency 'SDWebImage', '~> 5.11.1'
|
- s.dependency 'SDWebImage', '~> 5.11.1'
|
||||||
- s.dependency 'SDWebImageWebPCoder', '~> 0.8.4'
|
- s.dependency 'SDWebImageWebPCoder', '~> 0.8.4'
|
||||||
+ s.dependency 'SDWebImage', '~> 5.13.5'
|
+ s.dependency 'SDWebImage', '~> 5.14.1'
|
||||||
+ s.dependency 'SDWebImageWebPCoder', '~> 0.9.1'
|
+ s.dependency 'SDWebImageWebPCoder', '~> 0.9.1'
|
||||||
end
|
end
|
||||||
diff --git a/node_modules/react-native-fast-image/android/build.gradle b/node_modules/react-native-fast-image/android/build.gradle
|
diff --git a/node_modules/react-native-fast-image/android/build.gradle b/node_modules/react-native-fast-image/android/build.gradle
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
diff --git a/node_modules/react-native-reanimated-zoom/lib/typescript/zoom.d.ts b/node_modules/react-native-reanimated-zoom/lib/typescript/zoom.d.ts
|
|
||||||
index 38fb6f1..e93c288 100644
|
|
||||||
--- a/node_modules/react-native-reanimated-zoom/lib/typescript/zoom.d.ts
|
|
||||||
+++ b/node_modules/react-native-reanimated-zoom/lib/typescript/zoom.d.ts
|
|
||||||
@@ -6,6 +6,7 @@ declare type Props = {
|
|
||||||
minimumZoomScale?: number;
|
|
||||||
maximumZoomScale?: number;
|
|
||||||
simultaneousGesture?: GestureType;
|
|
||||||
+ isZoomed?: SharedValue<boolean>;
|
|
||||||
} & ViewProps;
|
|
||||||
export declare function Zoom(props: Props): JSX.Element;
|
|
||||||
export {};
|
|
||||||
diff --git a/node_modules/react-native-reanimated-zoom/src/zoom.tsx b/node_modules/react-native-reanimated-zoom/src/zoom.tsx
|
|
||||||
index e07b415..d57a1eb 100644
|
|
||||||
--- a/node_modules/react-native-reanimated-zoom/src/zoom.tsx
|
|
||||||
+++ b/node_modules/react-native-reanimated-zoom/src/zoom.tsx
|
|
||||||
@@ -7,6 +7,7 @@ import Animated, {
|
|
||||||
withTiming,
|
|
||||||
cancelAnimation,
|
|
||||||
runOnJS,
|
|
||||||
+ SharedValue,
|
|
||||||
} from 'react-native-reanimated';
|
|
||||||
import {
|
|
||||||
Gesture,
|
|
||||||
@@ -20,6 +21,7 @@ type Props = {
|
|
||||||
minimumZoomScale?: number;
|
|
||||||
maximumZoomScale?: number;
|
|
||||||
simultaneousGesture?: GestureType;
|
|
||||||
+ isZoomed?: SharedValue<boolean>;
|
|
||||||
} & ViewProps;
|
|
||||||
|
|
||||||
export function Zoom(props: Props) {
|
|
||||||
@@ -39,7 +41,7 @@ export function Zoom(props: Props) {
|
|
||||||
const originY = useSharedValue(0);
|
|
||||||
const scale = useSharedValue(1);
|
|
||||||
const isPinching = useSharedValue(false);
|
|
||||||
- const isZoomed = useSharedValue(false);
|
|
||||||
+ const isZoomed = props.isZoomed || useSharedValue(false);
|
|
||||||
const viewHeight = useSharedValue(0);
|
|
||||||
const viewWidth = useSharedValue(0);
|
|
||||||
|
|
1
src/@types/mastodon.d.ts
vendored
1
src/@types/mastodon.d.ts
vendored
@ -29,6 +29,7 @@ declare namespace Mastodon {
|
|||||||
fields: Field[]
|
fields: Field[]
|
||||||
bot: boolean
|
bot: boolean
|
||||||
source?: Source
|
source?: Source
|
||||||
|
suspended?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
type Announcement = {
|
type Announcement = {
|
||||||
|
@ -34,9 +34,11 @@ const ComponentAccount: React.FC<Props> = ({
|
|||||||
<Pressable
|
<Pressable
|
||||||
accessibilityRole='button'
|
accessibilityRole='button'
|
||||||
style={{
|
style={{
|
||||||
|
flex: 1,
|
||||||
paddingHorizontal: StyleConstants.Spacing.Global.PagePadding,
|
paddingHorizontal: StyleConstants.Spacing.Global.PagePadding,
|
||||||
paddingVertical: StyleConstants.Spacing.M,
|
paddingVertical: StyleConstants.Spacing.M,
|
||||||
flexDirection: 'row',
|
flexDirection: 'row',
|
||||||
|
alignSelf: 'flex-start',
|
||||||
alignItems: 'center'
|
alignItems: 'center'
|
||||||
}}
|
}}
|
||||||
onPress={customOnPress || onPress}
|
onPress={customOnPress || onPress}
|
||||||
|
@ -207,6 +207,10 @@ const ParseHTML = React.memo(
|
|||||||
expandHint = t('HTML.defaultHint')
|
expandHint = t('HTML.defaultHint')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (disableDetails) {
|
||||||
|
numberOfLines = 4
|
||||||
|
}
|
||||||
|
|
||||||
const renderNodeCallback = useCallback(
|
const renderNodeCallback = useCallback(
|
||||||
(node: any, index: any) =>
|
(node: any, index: any) =>
|
||||||
renderNode({
|
renderNode({
|
||||||
@ -247,7 +251,7 @@ const ParseHTML = React.memo(
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<View style={{ overflow: 'hidden' }}>
|
<View style={{ overflow: 'hidden' }}>
|
||||||
{typeof totalLines === 'number' || numberOfLines === 1 ? (
|
{(!disableDetails && typeof totalLines === 'number') || numberOfLines === 1 ? (
|
||||||
<Pressable
|
<Pressable
|
||||||
accessibilityLabel={t('HTML.accessibilityHint')}
|
accessibilityLabel={t('HTML.accessibilityHint')}
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
|
@ -16,8 +16,8 @@ import { getInstanceAccount } from '@utils/slices/instancesSlice'
|
|||||||
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 { uniqBy } from 'lodash'
|
import { uniqBy } from 'lodash'
|
||||||
import React, { useCallback, useRef } from 'react'
|
import React, { useRef } from 'react'
|
||||||
import { Pressable, View } from 'react-native'
|
import { Pressable, StyleProp, View, ViewStyle } from 'react-native'
|
||||||
import { useSelector } from 'react-redux'
|
import { useSelector } from 'react-redux'
|
||||||
import TimelineContextMenu from './Shared/ContextMenu'
|
import TimelineContextMenu from './Shared/ContextMenu'
|
||||||
import TimelineFeedback from './Shared/Feedback'
|
import TimelineFeedback from './Shared/Feedback'
|
||||||
@ -45,6 +45,10 @@ const TimelineDefault: React.FC<Props> = ({
|
|||||||
disableDetails = false,
|
disableDetails = false,
|
||||||
disableOnPress = false
|
disableOnPress = false
|
||||||
}) => {
|
}) => {
|
||||||
|
if (highlighted) {
|
||||||
|
disableOnPress = true
|
||||||
|
}
|
||||||
|
|
||||||
const { colors } = useTheme()
|
const { colors } = useTheme()
|
||||||
const instanceAccount = useSelector(getInstanceAccount, () => true)
|
const instanceAccount = useSelector(getInstanceAccount, () => true)
|
||||||
const navigation = useNavigation<StackNavigationProp<TabLocalStackParamList>>()
|
const navigation = useNavigation<StackNavigationProp<TabLocalStackParamList>>()
|
||||||
@ -58,27 +62,105 @@ const TimelineDefault: React.FC<Props> = ({
|
|||||||
complete: false
|
complete: false
|
||||||
})
|
})
|
||||||
|
|
||||||
if (
|
const filtered = queryKey && shouldFilter({ copiableContent, status: actualStatus, queryKey })
|
||||||
queryKey &&
|
if (queryKey && filtered && !highlighted) {
|
||||||
shouldFilter({ copiableContent, status: actualStatus, queryKey }) &&
|
return <TimelineFiltered phrase={filtered} />
|
||||||
!highlighted
|
|
||||||
) {
|
|
||||||
return <TimelineFiltered />
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const onPress = useCallback(() => {
|
const onPress = () => {
|
||||||
analytics('timeline_default_press', {
|
analytics('timeline_default_press', {
|
||||||
page: queryKey ? queryKey[1].page : origin
|
page: queryKey ? queryKey[1].page : origin
|
||||||
})
|
})
|
||||||
!disableOnPress &&
|
navigation.push('Tab-Shared-Toot', {
|
||||||
!highlighted &&
|
toot: actualStatus,
|
||||||
navigation.push('Tab-Shared-Toot', {
|
rootQueryKey: queryKey
|
||||||
toot: actualStatus,
|
})
|
||||||
rootQueryKey: queryKey
|
}
|
||||||
})
|
|
||||||
}, [])
|
|
||||||
|
|
||||||
return (
|
const mainStyle: StyleProp<ViewStyle> = {
|
||||||
|
padding: StyleConstants.Spacing.Global.PagePadding,
|
||||||
|
backgroundColor: colors.backgroundDefault,
|
||||||
|
paddingBottom: disableDetails ? StyleConstants.Spacing.Global.PagePadding : 0
|
||||||
|
}
|
||||||
|
const main = () => (
|
||||||
|
<>
|
||||||
|
{item.reblog ? (
|
||||||
|
<TimelineActioned action='reblog' account={item.account} />
|
||||||
|
) : item._pinned ? (
|
||||||
|
<TimelineActioned action='pinned' account={item.account} />
|
||||||
|
) : null}
|
||||||
|
|
||||||
|
<View style={{ flex: 1, width: '100%', flexDirection: 'row' }}>
|
||||||
|
<TimelineAvatar
|
||||||
|
queryKey={disableOnPress ? undefined : queryKey}
|
||||||
|
account={actualStatus.account}
|
||||||
|
highlighted={highlighted}
|
||||||
|
/>
|
||||||
|
<TimelineHeaderDefault
|
||||||
|
queryKey={disableOnPress ? undefined : queryKey}
|
||||||
|
status={actualStatus}
|
||||||
|
highlighted={highlighted}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<View
|
||||||
|
style={{
|
||||||
|
paddingTop: highlighted ? StyleConstants.Spacing.S : 0,
|
||||||
|
paddingLeft: highlighted ? 0 : StyleConstants.Avatar.M + StyleConstants.Spacing.S
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{typeof actualStatus.content === 'string' && actualStatus.content.length > 0 ? (
|
||||||
|
<TimelineContent
|
||||||
|
status={actualStatus}
|
||||||
|
highlighted={highlighted}
|
||||||
|
disableDetails={disableDetails}
|
||||||
|
/>
|
||||||
|
) : null}
|
||||||
|
{queryKey && actualStatus.poll ? (
|
||||||
|
<TimelinePoll
|
||||||
|
queryKey={queryKey}
|
||||||
|
rootQueryKey={rootQueryKey}
|
||||||
|
statusId={actualStatus.id}
|
||||||
|
poll={actualStatus.poll}
|
||||||
|
reblog={item.reblog ? true : false}
|
||||||
|
sameAccount={ownAccount}
|
||||||
|
/>
|
||||||
|
) : null}
|
||||||
|
{!disableDetails &&
|
||||||
|
Array.isArray(actualStatus.media_attachments) &&
|
||||||
|
actualStatus.media_attachments.length ? (
|
||||||
|
<TimelineAttachment status={actualStatus} />
|
||||||
|
) : null}
|
||||||
|
{!disableDetails && actualStatus.card ? <TimelineCard card={actualStatus.card} /> : null}
|
||||||
|
{!disableDetails ? (
|
||||||
|
<TimelineFullConversation queryKey={queryKey} status={actualStatus} />
|
||||||
|
) : null}
|
||||||
|
<TimelineTranslate status={actualStatus} highlighted={highlighted} />
|
||||||
|
<TimelineFeedback status={actualStatus} highlighted={highlighted} />
|
||||||
|
</View>
|
||||||
|
|
||||||
|
{queryKey && !disableDetails ? (
|
||||||
|
<TimelineActions
|
||||||
|
queryKey={queryKey}
|
||||||
|
rootQueryKey={rootQueryKey}
|
||||||
|
highlighted={highlighted}
|
||||||
|
status={actualStatus}
|
||||||
|
ownAccount={ownAccount}
|
||||||
|
accts={uniqBy(
|
||||||
|
([actualStatus.account] as Mastodon.Account[] & Mastodon.Mention[])
|
||||||
|
.concat(actualStatus.mentions)
|
||||||
|
.filter(d => d?.id !== instanceAccount?.id),
|
||||||
|
d => d?.id
|
||||||
|
).map(d => d?.acct)}
|
||||||
|
reblog={item.reblog ? true : false}
|
||||||
|
/>
|
||||||
|
) : null}
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
|
||||||
|
return disableOnPress ? (
|
||||||
|
<View style={mainStyle}>{main()}</View>
|
||||||
|
) : (
|
||||||
<TimelineContextMenu
|
<TimelineContextMenu
|
||||||
copiableContent={copiableContent}
|
copiableContent={copiableContent}
|
||||||
status={actualStatus}
|
status={actualStatus}
|
||||||
@ -87,86 +169,11 @@ const TimelineDefault: React.FC<Props> = ({
|
|||||||
>
|
>
|
||||||
<Pressable
|
<Pressable
|
||||||
accessible={highlighted ? false : true}
|
accessible={highlighted ? false : true}
|
||||||
style={{
|
style={mainStyle}
|
||||||
padding: StyleConstants.Spacing.Global.PagePadding,
|
|
||||||
backgroundColor: colors.backgroundDefault,
|
|
||||||
paddingBottom:
|
|
||||||
disableDetails && disableOnPress ? StyleConstants.Spacing.Global.PagePadding : 0
|
|
||||||
}}
|
|
||||||
onPress={onPress}
|
onPress={onPress}
|
||||||
onLongPress={() => {}}
|
onLongPress={() => {}}
|
||||||
>
|
>
|
||||||
{item.reblog ? (
|
{main()}
|
||||||
<TimelineActioned action='reblog' account={item.account} />
|
|
||||||
) : item._pinned ? (
|
|
||||||
<TimelineActioned action='pinned' account={item.account} />
|
|
||||||
) : null}
|
|
||||||
|
|
||||||
<View style={{ flex: 1, width: '100%', flexDirection: 'row' }}>
|
|
||||||
<TimelineAvatar
|
|
||||||
queryKey={disableOnPress ? undefined : queryKey}
|
|
||||||
account={actualStatus.account}
|
|
||||||
highlighted={highlighted}
|
|
||||||
/>
|
|
||||||
<TimelineHeaderDefault
|
|
||||||
queryKey={disableOnPress ? undefined : queryKey}
|
|
||||||
status={actualStatus}
|
|
||||||
highlighted={highlighted}
|
|
||||||
/>
|
|
||||||
</View>
|
|
||||||
|
|
||||||
<View
|
|
||||||
style={{
|
|
||||||
paddingTop: highlighted ? StyleConstants.Spacing.S : 0,
|
|
||||||
paddingLeft: highlighted ? 0 : StyleConstants.Avatar.M + StyleConstants.Spacing.S
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{typeof actualStatus.content === 'string' && actualStatus.content.length > 0 ? (
|
|
||||||
<TimelineContent
|
|
||||||
status={actualStatus}
|
|
||||||
highlighted={highlighted}
|
|
||||||
disableDetails={disableDetails}
|
|
||||||
/>
|
|
||||||
) : null}
|
|
||||||
{queryKey && actualStatus.poll ? (
|
|
||||||
<TimelinePoll
|
|
||||||
queryKey={queryKey}
|
|
||||||
rootQueryKey={rootQueryKey}
|
|
||||||
statusId={actualStatus.id}
|
|
||||||
poll={actualStatus.poll}
|
|
||||||
reblog={item.reblog ? true : false}
|
|
||||||
sameAccount={ownAccount}
|
|
||||||
/>
|
|
||||||
) : null}
|
|
||||||
{!disableDetails &&
|
|
||||||
Array.isArray(actualStatus.media_attachments) &&
|
|
||||||
actualStatus.media_attachments.length ? (
|
|
||||||
<TimelineAttachment status={actualStatus} />
|
|
||||||
) : null}
|
|
||||||
{!disableDetails && actualStatus.card ? <TimelineCard card={actualStatus.card} /> : null}
|
|
||||||
{!disableDetails ? (
|
|
||||||
<TimelineFullConversation queryKey={queryKey} status={actualStatus} />
|
|
||||||
) : null}
|
|
||||||
<TimelineTranslate status={actualStatus} highlighted={highlighted} />
|
|
||||||
<TimelineFeedback status={actualStatus} highlighted={highlighted} />
|
|
||||||
</View>
|
|
||||||
|
|
||||||
{queryKey && !disableDetails ? (
|
|
||||||
<TimelineActions
|
|
||||||
queryKey={queryKey}
|
|
||||||
rootQueryKey={rootQueryKey}
|
|
||||||
highlighted={highlighted}
|
|
||||||
status={actualStatus}
|
|
||||||
ownAccount={ownAccount}
|
|
||||||
accts={uniqBy(
|
|
||||||
([actualStatus.account] as Mastodon.Account[] & Mastodon.Mention[])
|
|
||||||
.concat(actualStatus.mentions)
|
|
||||||
.filter(d => d?.id !== instanceAccount?.id),
|
|
||||||
d => d?.id
|
|
||||||
).map(d => d?.acct)}
|
|
||||||
reblog={item.reblog ? true : false}
|
|
||||||
/>
|
|
||||||
) : null}
|
|
||||||
</Pressable>
|
</Pressable>
|
||||||
</TimelineContextMenu>
|
</TimelineContextMenu>
|
||||||
)
|
)
|
||||||
|
@ -36,24 +36,22 @@ const TimelineNotifications = React.memo(
|
|||||||
complete: false
|
complete: false
|
||||||
})
|
})
|
||||||
|
|
||||||
if (
|
const filtered =
|
||||||
notification.status &&
|
notification.status &&
|
||||||
shouldFilter({ copiableContent, status: notification.status, queryKey })
|
shouldFilter({
|
||||||
) {
|
copiableContent,
|
||||||
return <TimelineFiltered />
|
status: notification.status,
|
||||||
|
queryKey
|
||||||
|
})
|
||||||
|
if (notification.status && filtered) {
|
||||||
|
return <TimelineFiltered phrase={filtered} />
|
||||||
}
|
}
|
||||||
|
|
||||||
const { colors } = useTheme()
|
const { colors } = useTheme()
|
||||||
const instanceAccount = useSelector(
|
const instanceAccount = useSelector(getInstanceAccount, (prev, next) => prev?.id === next?.id)
|
||||||
getInstanceAccount,
|
const navigation = useNavigation<StackNavigationProp<TabLocalStackParamList>>()
|
||||||
(prev, next) => prev?.id === next?.id
|
|
||||||
)
|
|
||||||
const navigation =
|
|
||||||
useNavigation<StackNavigationProp<TabLocalStackParamList>>()
|
|
||||||
|
|
||||||
const actualAccount = notification.status
|
const actualAccount = notification.status ? notification.status.account : notification.account
|
||||||
? notification.status.account
|
|
||||||
: notification.account
|
|
||||||
|
|
||||||
const onPress = useCallback(() => {
|
const onPress = useCallback(() => {
|
||||||
analytics('timeline_notification_press')
|
analytics('timeline_notification_press')
|
||||||
@ -74,9 +72,7 @@ const TimelineNotifications = React.memo(
|
|||||||
style={{
|
style={{
|
||||||
padding: StyleConstants.Spacing.Global.PagePadding,
|
padding: StyleConstants.Spacing.Global.PagePadding,
|
||||||
backgroundColor: colors.backgroundDefault,
|
backgroundColor: colors.backgroundDefault,
|
||||||
paddingBottom: notification.status
|
paddingBottom: notification.status ? 0 : StyleConstants.Spacing.Global.PagePadding
|
||||||
? 0
|
|
||||||
: StyleConstants.Spacing.Global.PagePadding
|
|
||||||
}}
|
}}
|
||||||
onPress={onPress}
|
onPress={onPress}
|
||||||
onLongPress={() => {}}
|
onLongPress={() => {}}
|
||||||
@ -106,26 +102,18 @@ const TimelineNotifications = React.memo(
|
|||||||
account={actualAccount}
|
account={actualAccount}
|
||||||
highlighted={highlighted}
|
highlighted={highlighted}
|
||||||
/>
|
/>
|
||||||
<TimelineHeaderNotification
|
<TimelineHeaderNotification queryKey={queryKey} notification={notification} />
|
||||||
queryKey={queryKey}
|
|
||||||
notification={notification}
|
|
||||||
/>
|
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
{notification.status ? (
|
{notification.status ? (
|
||||||
<View
|
<View
|
||||||
style={{
|
style={{
|
||||||
paddingTop: highlighted ? StyleConstants.Spacing.S : 0,
|
paddingTop: highlighted ? StyleConstants.Spacing.S : 0,
|
||||||
paddingLeft: highlighted
|
paddingLeft: highlighted ? 0 : StyleConstants.Avatar.M + StyleConstants.Spacing.S
|
||||||
? 0
|
|
||||||
: StyleConstants.Avatar.M + StyleConstants.Spacing.S
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{notification.status.content.length > 0 ? (
|
{notification.status.content.length > 0 ? (
|
||||||
<TimelineContent
|
<TimelineContent status={notification.status} highlighted={highlighted} />
|
||||||
status={notification.status}
|
|
||||||
highlighted={highlighted}
|
|
||||||
/>
|
|
||||||
) : null}
|
) : null}
|
||||||
{notification.status.poll ? (
|
{notification.status.poll ? (
|
||||||
<TimelinePoll
|
<TimelinePoll
|
||||||
@ -133,21 +121,14 @@ const TimelineNotifications = React.memo(
|
|||||||
statusId={notification.status.id}
|
statusId={notification.status.id}
|
||||||
poll={notification.status.poll}
|
poll={notification.status.poll}
|
||||||
reblog={false}
|
reblog={false}
|
||||||
sameAccount={
|
sameAccount={notification.account.id === instanceAccount?.id}
|
||||||
notification.account.id === instanceAccount?.id
|
|
||||||
}
|
|
||||||
/>
|
/>
|
||||||
) : null}
|
) : null}
|
||||||
{notification.status.media_attachments.length > 0 ? (
|
{notification.status.media_attachments.length > 0 ? (
|
||||||
<TimelineAttachment status={notification.status} />
|
<TimelineAttachment status={notification.status} />
|
||||||
) : null}
|
) : null}
|
||||||
{notification.status.card ? (
|
{notification.status.card ? <TimelineCard card={notification.status.card} /> : null}
|
||||||
<TimelineCard card={notification.status.card} />
|
<TimelineFullConversation queryKey={queryKey} status={notification.status} />
|
||||||
) : null}
|
|
||||||
<TimelineFullConversation
|
|
||||||
queryKey={queryKey}
|
|
||||||
status={notification.status}
|
|
||||||
/>
|
|
||||||
</View>
|
</View>
|
||||||
) : null}
|
) : null}
|
||||||
</View>
|
</View>
|
||||||
@ -158,10 +139,7 @@ const TimelineNotifications = React.memo(
|
|||||||
status={notification.status}
|
status={notification.status}
|
||||||
highlighted={highlighted}
|
highlighted={highlighted}
|
||||||
accts={uniqBy(
|
accts={uniqBy(
|
||||||
(
|
([notification.status.account] as Mastodon.Account[] & Mastodon.Mention[])
|
||||||
[notification.status.account] as Mastodon.Account[] &
|
|
||||||
Mastodon.Mention[]
|
|
||||||
)
|
|
||||||
.concat(notification.status.mentions)
|
.concat(notification.status.mentions)
|
||||||
.filter(d => d?.id !== instanceAccount?.id),
|
.filter(d => d?.id !== instanceAccount?.id),
|
||||||
d => d?.id
|
d => d?.id
|
||||||
|
@ -1,24 +1,184 @@
|
|||||||
|
import ComponentAccount from '@components/Account'
|
||||||
import analytics from '@components/analytics'
|
import analytics from '@components/analytics'
|
||||||
import GracefullyImage from '@components/GracefullyImage'
|
import GracefullyImage from '@components/GracefullyImage'
|
||||||
import openLink from '@components/openLink'
|
import openLink from '@components/openLink'
|
||||||
import CustomText from '@components/Text'
|
import CustomText from '@components/Text'
|
||||||
|
import { matchAccount, matchStatus } from '@helpers/urlMatcher'
|
||||||
import { useNavigation } from '@react-navigation/native'
|
import { useNavigation } from '@react-navigation/native'
|
||||||
|
import { useAccountQuery } from '@utils/queryHooks/account'
|
||||||
|
import { useSearchQuery } from '@utils/queryHooks/search'
|
||||||
|
import { useStatusQuery } from '@utils/queryHooks/status'
|
||||||
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 from 'react'
|
import React, { useEffect, useState } from 'react'
|
||||||
import { Pressable, StyleSheet, View } from 'react-native'
|
import { Pressable, StyleSheet, View } from 'react-native'
|
||||||
|
import { Circle } from 'react-native-animated-spinkit'
|
||||||
|
import TimelineDefault from '../Default'
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
card: Pick<
|
card: Pick<Mastodon.Card, 'url' | 'image' | 'blurhash' | 'title' | 'description'>
|
||||||
Mastodon.Card,
|
|
||||||
'url' | 'image' | 'blurhash' | 'title' | 'description'
|
|
||||||
>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const TimelineCard = React.memo(({ card }: Props) => {
|
const TimelineCard = React.memo(({ card }: Props) => {
|
||||||
const { colors } = useTheme()
|
const { colors } = useTheme()
|
||||||
const navigation = useNavigation()
|
const navigation = useNavigation()
|
||||||
|
|
||||||
|
const [loading, setLoading] = useState(false)
|
||||||
|
const isStatus = matchStatus(card.url)
|
||||||
|
const [foundStatus, setFoundStatus] = useState<Mastodon.Status>()
|
||||||
|
const isAccount = matchAccount(card.url)
|
||||||
|
const [foundAccount, setFoundAccount] = useState<Mastodon.Account>()
|
||||||
|
|
||||||
|
const searchQuery = useSearchQuery({
|
||||||
|
type: (() => {
|
||||||
|
if (isStatus) return 'statuses'
|
||||||
|
if (isAccount) return 'accounts'
|
||||||
|
})(),
|
||||||
|
term: (() => {
|
||||||
|
if (isStatus) {
|
||||||
|
if (isStatus.sameInstance) {
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
return card.url
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isAccount) {
|
||||||
|
if (isAccount.sameInstance) {
|
||||||
|
if (isAccount.style === 'default') {
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
return isAccount.username
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return card.url
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})(),
|
||||||
|
limit: 1,
|
||||||
|
options: { enabled: false }
|
||||||
|
})
|
||||||
|
|
||||||
|
const statusQuery = useStatusQuery({
|
||||||
|
id: isStatus?.id || '',
|
||||||
|
options: { enabled: false }
|
||||||
|
})
|
||||||
|
useEffect(() => {
|
||||||
|
if (isStatus) {
|
||||||
|
setLoading(true)
|
||||||
|
if (isStatus.sameInstance) {
|
||||||
|
statusQuery
|
||||||
|
.refetch()
|
||||||
|
.then(res => {
|
||||||
|
res.data && setFoundStatus(res.data)
|
||||||
|
setLoading(false)
|
||||||
|
})
|
||||||
|
.catch(() => setLoading(false))
|
||||||
|
} else {
|
||||||
|
searchQuery
|
||||||
|
.refetch()
|
||||||
|
.then(res => {
|
||||||
|
const status = (res.data as any)?.statuses?.[0]
|
||||||
|
status && setFoundStatus(status)
|
||||||
|
setLoading(false)
|
||||||
|
})
|
||||||
|
.catch(() => setLoading(false))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
const accountQuery = useAccountQuery({
|
||||||
|
id: isAccount?.style === 'default' ? isAccount.id : '',
|
||||||
|
options: { enabled: false }
|
||||||
|
})
|
||||||
|
useEffect(() => {
|
||||||
|
if (isAccount) {
|
||||||
|
setLoading(true)
|
||||||
|
if (isAccount.sameInstance && isAccount.style === 'default') {
|
||||||
|
accountQuery
|
||||||
|
.refetch()
|
||||||
|
.then(res => {
|
||||||
|
res.data && setFoundAccount(res.data)
|
||||||
|
setLoading(false)
|
||||||
|
})
|
||||||
|
.catch(() => setLoading(false))
|
||||||
|
} else {
|
||||||
|
searchQuery
|
||||||
|
.refetch()
|
||||||
|
.then(res => {
|
||||||
|
const account = (res.data as any)?.accounts?.[0]
|
||||||
|
account && setFoundAccount(account)
|
||||||
|
setLoading(false)
|
||||||
|
})
|
||||||
|
.catch(() => setLoading(false))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
const cardContent = () => {
|
||||||
|
if (loading) {
|
||||||
|
return (
|
||||||
|
<View
|
||||||
|
style={{
|
||||||
|
flex: 1,
|
||||||
|
justifyContent: 'center',
|
||||||
|
alignItems: 'center',
|
||||||
|
paddingVertical: StyleConstants.Spacing.M
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Circle size={StyleConstants.Font.Size.L} color={colors.secondary} />
|
||||||
|
</View>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
if (isStatus && foundStatus) {
|
||||||
|
return <TimelineDefault item={foundStatus} disableDetails disableOnPress origin='card' />
|
||||||
|
}
|
||||||
|
if (isAccount && foundAccount) {
|
||||||
|
return <ComponentAccount account={foundAccount} origin='card' />
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{card.image ? (
|
||||||
|
<GracefullyImage
|
||||||
|
uri={{ original: card.image }}
|
||||||
|
blurhash={card.blurhash}
|
||||||
|
style={{ flexBasis: StyleConstants.Font.LineHeight.M * 5 }}
|
||||||
|
imageStyle={{ borderTopLeftRadius: 6, borderBottomLeftRadius: 6 }}
|
||||||
|
/>
|
||||||
|
) : null}
|
||||||
|
<View style={{ flex: 1, padding: StyleConstants.Spacing.S }}>
|
||||||
|
<CustomText
|
||||||
|
fontStyle='S'
|
||||||
|
numberOfLines={2}
|
||||||
|
style={{
|
||||||
|
marginBottom: StyleConstants.Spacing.XS,
|
||||||
|
color: colors.primaryDefault
|
||||||
|
}}
|
||||||
|
fontWeight='Bold'
|
||||||
|
testID='title'
|
||||||
|
>
|
||||||
|
{card.title}
|
||||||
|
</CustomText>
|
||||||
|
{card.description ? (
|
||||||
|
<CustomText
|
||||||
|
fontStyle='S'
|
||||||
|
numberOfLines={1}
|
||||||
|
style={{
|
||||||
|
marginBottom: StyleConstants.Spacing.XS,
|
||||||
|
color: colors.primaryDefault
|
||||||
|
}}
|
||||||
|
testID='description'
|
||||||
|
>
|
||||||
|
{card.description}
|
||||||
|
</CustomText>
|
||||||
|
) : null}
|
||||||
|
<CustomText fontStyle='S' numberOfLines={1} style={{ color: colors.secondary }}>
|
||||||
|
{card.url}
|
||||||
|
</CustomText>
|
||||||
|
</View>
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Pressable
|
<Pressable
|
||||||
accessible
|
accessible
|
||||||
@ -26,10 +186,10 @@ const TimelineCard = React.memo(({ card }: Props) => {
|
|||||||
style={{
|
style={{
|
||||||
flex: 1,
|
flex: 1,
|
||||||
flexDirection: 'row',
|
flexDirection: 'row',
|
||||||
height: StyleConstants.Font.LineHeight.M * 5,
|
minHeight: isAccount && foundAccount ? undefined : StyleConstants.Font.LineHeight.M * 5,
|
||||||
marginTop: StyleConstants.Spacing.M,
|
marginTop: StyleConstants.Spacing.M,
|
||||||
borderWidth: StyleSheet.hairlineWidth,
|
borderWidth: StyleSheet.hairlineWidth,
|
||||||
borderRadius: 6,
|
borderRadius: StyleConstants.Spacing.S,
|
||||||
overflow: 'hidden',
|
overflow: 'hidden',
|
||||||
borderColor: colors.border
|
borderColor: colors.border
|
||||||
}}
|
}}
|
||||||
@ -37,51 +197,8 @@ const TimelineCard = React.memo(({ card }: Props) => {
|
|||||||
analytics('timeline_shared_card_press')
|
analytics('timeline_shared_card_press')
|
||||||
await openLink(card.url, navigation)
|
await openLink(card.url, navigation)
|
||||||
}}
|
}}
|
||||||
testID='base'
|
children={cardContent}
|
||||||
>
|
/>
|
||||||
{card.image ? (
|
|
||||||
<GracefullyImage
|
|
||||||
uri={{ original: card.image }}
|
|
||||||
blurhash={card.blurhash}
|
|
||||||
style={{ flexBasis: StyleConstants.Font.LineHeight.M * 5 }}
|
|
||||||
imageStyle={{ borderTopLeftRadius: 6, borderBottomLeftRadius: 6 }}
|
|
||||||
/>
|
|
||||||
) : null}
|
|
||||||
<View style={{ flex: 1, padding: StyleConstants.Spacing.S }}>
|
|
||||||
<CustomText
|
|
||||||
fontStyle='S'
|
|
||||||
numberOfLines={2}
|
|
||||||
style={{
|
|
||||||
marginBottom: StyleConstants.Spacing.XS,
|
|
||||||
color: colors.primaryDefault
|
|
||||||
}}
|
|
||||||
fontWeight='Bold'
|
|
||||||
testID='title'
|
|
||||||
>
|
|
||||||
{card.title}
|
|
||||||
</CustomText>
|
|
||||||
{card.description ? (
|
|
||||||
<CustomText
|
|
||||||
fontStyle='S'
|
|
||||||
numberOfLines={1}
|
|
||||||
style={{
|
|
||||||
marginBottom: StyleConstants.Spacing.XS,
|
|
||||||
color: colors.primaryDefault
|
|
||||||
}}
|
|
||||||
testID='description'
|
|
||||||
>
|
|
||||||
{card.description}
|
|
||||||
</CustomText>
|
|
||||||
) : null}
|
|
||||||
<CustomText
|
|
||||||
fontStyle='S'
|
|
||||||
numberOfLines={1}
|
|
||||||
style={{ color: colors.secondary }}
|
|
||||||
>
|
|
||||||
{card.url}
|
|
||||||
</CustomText>
|
|
||||||
</View>
|
|
||||||
</Pressable>
|
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ import { useTranslation } from 'react-i18next'
|
|||||||
import { View } from 'react-native'
|
import { View } from 'react-native'
|
||||||
|
|
||||||
const TimelineFiltered = React.memo(
|
const TimelineFiltered = React.memo(
|
||||||
() => {
|
({ phrase }: { phrase: string }) => {
|
||||||
const { colors } = useTheme()
|
const { colors } = useTheme()
|
||||||
const { t } = useTranslation('componentTimeline')
|
const { t } = useTranslation('componentTimeline')
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ const TimelineFiltered = React.memo(
|
|||||||
paddingLeft: StyleConstants.Avatar.M + StyleConstants.Spacing.S
|
paddingLeft: StyleConstants.Avatar.M + StyleConstants.Spacing.S
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{t('shared.filtered')}
|
{t('shared.filtered', { phrase })}
|
||||||
</CustomText>
|
</CustomText>
|
||||||
</View>
|
</View>
|
||||||
)
|
)
|
||||||
@ -44,34 +44,29 @@ export const shouldFilter = ({
|
|||||||
}>
|
}>
|
||||||
status: Mastodon.Status
|
status: Mastodon.Status
|
||||||
queryKey: QueryKeyTimeline
|
queryKey: QueryKeyTimeline
|
||||||
}) => {
|
}): string | null => {
|
||||||
const instance = getInstance(store.getState())
|
const instance = getInstance(store.getState())
|
||||||
const ownAccount =
|
const ownAccount = getInstanceAccount(store.getState())?.id === status.account?.id
|
||||||
getInstanceAccount(store.getState())?.id === status.account?.id
|
|
||||||
|
|
||||||
let shouldFilter = false
|
let shouldFilter: string | null = null
|
||||||
if (!ownAccount) {
|
if (!ownAccount) {
|
||||||
const parser = new htmlparser2.Parser({
|
const parser = new htmlparser2.Parser({
|
||||||
ontext: (text: string) => {
|
ontext: (text: string) => {
|
||||||
if (!copiableContent.current.complete) {
|
if (!copiableContent.current.complete) {
|
||||||
copiableContent.current.content =
|
copiableContent.current.content = copiableContent.current.content + text
|
||||||
copiableContent.current.content + text
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const checkFilter = (filter: Mastodon.Filter) => {
|
const checkFilter = (filter: Mastodon.Filter) => {
|
||||||
const escapedPhrase = filter.phrase.replace(
|
const escapedPhrase = filter.phrase.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string
|
||||||
/[.*+?^${}()|[\]\\]/g,
|
|
||||||
'\\$&'
|
|
||||||
) // $& means the whole matched string
|
|
||||||
switch (filter.whole_word) {
|
switch (filter.whole_word) {
|
||||||
case true:
|
case true:
|
||||||
if (new RegExp('\\b' + escapedPhrase + '\\b').test(text)) {
|
if (new RegExp('\\b' + escapedPhrase + '\\b').test(text)) {
|
||||||
shouldFilter = true
|
shouldFilter = filter.phrase
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
case false:
|
case false:
|
||||||
if (new RegExp(escapedPhrase).test(text)) {
|
if (new RegExp(escapedPhrase).test(text)) {
|
||||||
shouldFilter = true
|
shouldFilter = filter.phrase
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -81,23 +81,14 @@ const TimelineHeaderDefault = ({ queryKey, status, highlighted }: Props) => {
|
|||||||
{queryKey ? (
|
{queryKey ? (
|
||||||
<Pressable
|
<Pressable
|
||||||
accessibilityHint={t('accessibilityHint')}
|
accessibilityHint={t('accessibilityHint')}
|
||||||
style={{
|
style={{ flex: 1, flexBasis: StyleConstants.Font.Size.L }}
|
||||||
flex: 1,
|
|
||||||
flexDirection: 'row',
|
|
||||||
justifyContent: 'center',
|
|
||||||
marginBottom: StyleConstants.Spacing.L
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
<ContextMenu
|
<ContextMenu
|
||||||
|
style={{ flex: 1, alignItems: 'center' }}
|
||||||
dropdownMenuMode
|
dropdownMenuMode
|
||||||
actions={actions}
|
actions={actions}
|
||||||
onPress={({ nativeEvent: { index } }) => {
|
onPress={({ nativeEvent: { index } }) => {
|
||||||
for (const on of [
|
for (const on of [shareOnPress, statusOnPress, accountOnPress, instanceOnPress]) {
|
||||||
shareOnPress,
|
|
||||||
statusOnPress,
|
|
||||||
accountOnPress,
|
|
||||||
instanceOnPress
|
|
||||||
]) {
|
|
||||||
on && on(index)
|
on && on(index)
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
@ -108,7 +99,6 @@ const TimelineHeaderDefault = ({ queryKey, status, highlighted }: Props) => {
|
|||||||
size={StyleConstants.Font.Size.L}
|
size={StyleConstants.Font.Size.L}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
style={{ width: '100%', height: '100%' }}
|
|
||||||
/>
|
/>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
) : null}
|
) : null}
|
||||||
|
@ -51,14 +51,10 @@ const TimelineHeaderDefault = ({ queryKey, status, highlighted }: Props) => {
|
|||||||
{queryKey ? (
|
{queryKey ? (
|
||||||
<Pressable
|
<Pressable
|
||||||
accessibilityHint={t('accessibilityHint')}
|
accessibilityHint={t('accessibilityHint')}
|
||||||
style={{
|
style={{ flex: 1, flexBasis: StyleConstants.Font.Size.L }}
|
||||||
flex: 1,
|
|
||||||
flexDirection: 'row',
|
|
||||||
justifyContent: 'center',
|
|
||||||
marginBottom: StyleConstants.Spacing.L
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
<ContextMenu
|
<ContextMenu
|
||||||
|
style={{ flex: 1, alignItems: 'center' }}
|
||||||
dropdownMenuMode
|
dropdownMenuMode
|
||||||
actions={contextMenuContext}
|
actions={contextMenuContext}
|
||||||
onPress={() => {}}
|
onPress={() => {}}
|
||||||
|
@ -3,10 +3,7 @@ import contextMenuInstance from '@components/ContextMenu/instance'
|
|||||||
import contextMenuShare from '@components/ContextMenu/share'
|
import contextMenuShare from '@components/ContextMenu/share'
|
||||||
import contextMenuStatus from '@components/ContextMenu/status'
|
import contextMenuStatus from '@components/ContextMenu/status'
|
||||||
import Icon from '@components/Icon'
|
import Icon from '@components/Icon'
|
||||||
import {
|
import { RelationshipIncoming, RelationshipOutgoing } from '@components/Relationship'
|
||||||
RelationshipIncoming,
|
|
||||||
RelationshipOutgoing
|
|
||||||
} from '@components/Relationship'
|
|
||||||
import { QueryKeyTimeline } from '@utils/queryHooks/timeline'
|
import { QueryKeyTimeline } from '@utils/queryHooks/timeline'
|
||||||
import { StyleConstants } from '@utils/styles/constants'
|
import { StyleConstants } from '@utils/styles/constants'
|
||||||
import { useTheme } from '@utils/styles/ThemeManager'
|
import { useTheme } from '@utils/styles/ThemeManager'
|
||||||
@ -32,27 +29,33 @@ const TimelineHeaderNotification = ({ queryKey, notification }: Props) => {
|
|||||||
const shareOnPress =
|
const shareOnPress =
|
||||||
status && status?.visibility !== 'direct'
|
status && status?.visibility !== 'direct'
|
||||||
? contextMenuShare({
|
? contextMenuShare({
|
||||||
actions: contextMenuActions,
|
actions: contextMenuActions,
|
||||||
type: 'status',
|
type: 'status',
|
||||||
url: status.url || status.uri
|
url: status.url || status.uri
|
||||||
})
|
})
|
||||||
: null
|
: null
|
||||||
const statusOnPress = status && contextMenuStatus({
|
const statusOnPress =
|
||||||
actions: contextMenuActions,
|
status &&
|
||||||
status: status,
|
contextMenuStatus({
|
||||||
queryKey
|
actions: contextMenuActions,
|
||||||
})
|
status: status,
|
||||||
const accountOnPress = status && contextMenuAccount({
|
queryKey
|
||||||
actions: contextMenuActions,
|
})
|
||||||
type: 'status',
|
const accountOnPress =
|
||||||
queryKey,
|
status &&
|
||||||
id: status.account.id
|
contextMenuAccount({
|
||||||
})
|
actions: contextMenuActions,
|
||||||
const instanceOnPress = status && contextMenuInstance({
|
type: 'status',
|
||||||
actions: contextMenuActions,
|
queryKey,
|
||||||
status: status,
|
id: status.account.id
|
||||||
queryKey
|
})
|
||||||
})
|
const instanceOnPress =
|
||||||
|
status &&
|
||||||
|
contextMenuInstance({
|
||||||
|
actions: contextMenuActions,
|
||||||
|
status: status,
|
||||||
|
queryKey
|
||||||
|
})
|
||||||
|
|
||||||
const actions = useMemo(() => {
|
const actions = useMemo(() => {
|
||||||
switch (notification.type) {
|
switch (notification.type) {
|
||||||
@ -64,14 +67,10 @@ const TimelineHeaderNotification = ({ queryKey, notification }: Props) => {
|
|||||||
if (notification.status) {
|
if (notification.status) {
|
||||||
return (
|
return (
|
||||||
<Pressable
|
<Pressable
|
||||||
style={{
|
style={{ flex: 1, flexBasis: StyleConstants.Font.Size.L }}
|
||||||
flex: 1,
|
|
||||||
flexDirection: 'row',
|
|
||||||
justifyContent: 'center',
|
|
||||||
paddingBottom: StyleConstants.Spacing.S
|
|
||||||
}}
|
|
||||||
children={
|
children={
|
||||||
<ContextMenu
|
<ContextMenu
|
||||||
|
style={{ flex: 1, alignItems: 'center' }}
|
||||||
dropdownMenuMode
|
dropdownMenuMode
|
||||||
actions={contextMenuActions}
|
actions={contextMenuActions}
|
||||||
onPress={({ nativeEvent: { index } }) => {
|
onPress={({ nativeEvent: { index } }) => {
|
||||||
@ -91,7 +90,6 @@ const TimelineHeaderNotification = ({ queryKey, notification }: Props) => {
|
|||||||
size={StyleConstants.Font.Size.L}
|
size={StyleConstants.Font.Size.L}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
style={{ width: '100%', height: '100%' }}
|
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
@ -104,21 +102,14 @@ const TimelineHeaderNotification = ({ queryKey, notification }: Props) => {
|
|||||||
<View style={{ flex: 1, flexDirection: 'row' }}>
|
<View style={{ flex: 1, flexDirection: 'row' }}>
|
||||||
<View
|
<View
|
||||||
style={{
|
style={{
|
||||||
flex:
|
flex: notification.type === 'follow' || notification.type === 'follow_request' ? 1 : 4
|
||||||
notification.type === 'follow' ||
|
|
||||||
notification.type === 'follow_request'
|
|
||||||
? 1
|
|
||||||
: 4
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<HeaderSharedAccount
|
<HeaderSharedAccount
|
||||||
account={
|
account={notification.status ? notification.status.account : notification.account}
|
||||||
notification.status
|
{...((notification.type === 'follow' || notification.type === 'follow_request') && {
|
||||||
? notification.status.account
|
withoutName: true
|
||||||
: notification.account
|
})}
|
||||||
}
|
|
||||||
{...((notification.type === 'follow' ||
|
|
||||||
notification.type === 'follow_request') && { withoutName: true })}
|
|
||||||
/>
|
/>
|
||||||
<View
|
<View
|
||||||
style={{
|
style={{
|
||||||
@ -129,28 +120,21 @@ const TimelineHeaderNotification = ({ queryKey, notification }: Props) => {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<HeaderSharedCreated
|
<HeaderSharedCreated
|
||||||
created_at={
|
created_at={notification.status?.created_at || notification.created_at}
|
||||||
notification.status?.created_at || notification.created_at
|
|
||||||
}
|
|
||||||
edited_at={notification.status?.edited_at}
|
edited_at={notification.status?.edited_at}
|
||||||
/>
|
/>
|
||||||
{notification.status?.visibility ? (
|
{notification.status?.visibility ? (
|
||||||
<HeaderSharedVisibility
|
<HeaderSharedVisibility visibility={notification.status.visibility} />
|
||||||
visibility={notification.status.visibility}
|
|
||||||
/>
|
|
||||||
) : null}
|
) : null}
|
||||||
<HeaderSharedMuted muted={notification.status?.muted} />
|
<HeaderSharedMuted muted={notification.status?.muted} />
|
||||||
<HeaderSharedApplication
|
<HeaderSharedApplication application={notification.status?.application} />
|
||||||
application={notification.status?.application}
|
|
||||||
/>
|
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
<View
|
<View
|
||||||
style={[
|
style={[
|
||||||
{ marginLeft: StyleConstants.Spacing.M },
|
{ marginLeft: StyleConstants.Spacing.M },
|
||||||
notification.type === 'follow' ||
|
notification.type === 'follow' || notification.type === 'follow_request'
|
||||||
notification.type === 'follow_request'
|
|
||||||
? { flexShrink: 1 }
|
? { flexShrink: 1 }
|
||||||
: { flex: 1 }
|
: { flex: 1 }
|
||||||
]}
|
]}
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
import Icon from '@components/Icon'
|
import Icon from '@components/Icon'
|
||||||
import {
|
import { RelationshipIncoming, RelationshipOutgoing } from '@components/Relationship'
|
||||||
RelationshipIncoming,
|
|
||||||
RelationshipOutgoing
|
|
||||||
} from '@components/Relationship'
|
|
||||||
import { QueryKeyTimeline } from '@utils/queryHooks/timeline'
|
import { QueryKeyTimeline } from '@utils/queryHooks/timeline'
|
||||||
import { StyleConstants } from '@utils/styles/constants'
|
import { StyleConstants } from '@utils/styles/constants'
|
||||||
import { useTheme } from '@utils/styles/ThemeManager'
|
import { useTheme } from '@utils/styles/ThemeManager'
|
||||||
@ -36,14 +33,10 @@ const TimelineHeaderNotification = ({ notification }: Props) => {
|
|||||||
if (notification.status) {
|
if (notification.status) {
|
||||||
return (
|
return (
|
||||||
<Pressable
|
<Pressable
|
||||||
style={{
|
style={{ flex: 1, flexBasis: StyleConstants.Font.Size.L }}
|
||||||
flex: 1,
|
|
||||||
flexDirection: 'row',
|
|
||||||
justifyContent: 'center',
|
|
||||||
paddingBottom: StyleConstants.Spacing.S
|
|
||||||
}}
|
|
||||||
children={
|
children={
|
||||||
<ContextMenu
|
<ContextMenu
|
||||||
|
style={{ flex: 1, alignItems: 'center' }}
|
||||||
dropdownMenuMode
|
dropdownMenuMode
|
||||||
actions={contextMenuContext}
|
actions={contextMenuContext}
|
||||||
onPress={() => {}}
|
onPress={() => {}}
|
||||||
@ -66,21 +59,14 @@ const TimelineHeaderNotification = ({ notification }: Props) => {
|
|||||||
<View style={{ flex: 1, flexDirection: 'row' }}>
|
<View style={{ flex: 1, flexDirection: 'row' }}>
|
||||||
<View
|
<View
|
||||||
style={{
|
style={{
|
||||||
flex:
|
flex: notification.type === 'follow' || notification.type === 'follow_request' ? 1 : 4
|
||||||
notification.type === 'follow' ||
|
|
||||||
notification.type === 'follow_request'
|
|
||||||
? 1
|
|
||||||
: 4
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<HeaderSharedAccount
|
<HeaderSharedAccount
|
||||||
account={
|
account={notification.status ? notification.status.account : notification.account}
|
||||||
notification.status
|
{...((notification.type === 'follow' || notification.type === 'follow_request') && {
|
||||||
? notification.status.account
|
withoutName: true
|
||||||
: notification.account
|
})}
|
||||||
}
|
|
||||||
{...((notification.type === 'follow' ||
|
|
||||||
notification.type === 'follow_request') && { withoutName: true })}
|
|
||||||
/>
|
/>
|
||||||
<View
|
<View
|
||||||
style={{
|
style={{
|
||||||
@ -91,28 +77,21 @@ const TimelineHeaderNotification = ({ notification }: Props) => {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<HeaderSharedCreated
|
<HeaderSharedCreated
|
||||||
created_at={
|
created_at={notification.status?.created_at || notification.created_at}
|
||||||
notification.status?.created_at || notification.created_at
|
|
||||||
}
|
|
||||||
edited_at={notification.status?.edited_at}
|
edited_at={notification.status?.edited_at}
|
||||||
/>
|
/>
|
||||||
{notification.status?.visibility ? (
|
{notification.status?.visibility ? (
|
||||||
<HeaderSharedVisibility
|
<HeaderSharedVisibility visibility={notification.status.visibility} />
|
||||||
visibility={notification.status.visibility}
|
|
||||||
/>
|
|
||||||
) : null}
|
) : null}
|
||||||
<HeaderSharedMuted muted={notification.status?.muted} />
|
<HeaderSharedMuted muted={notification.status?.muted} />
|
||||||
<HeaderSharedApplication
|
<HeaderSharedApplication application={notification.status?.application} />
|
||||||
application={notification.status?.application}
|
|
||||||
/>
|
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
<View
|
<View
|
||||||
style={[
|
style={[
|
||||||
{ marginLeft: StyleConstants.Spacing.M },
|
{ marginLeft: StyleConstants.Spacing.M },
|
||||||
notification.type === 'follow' ||
|
notification.type === 'follow' || notification.type === 'follow_request'
|
||||||
notification.type === 'follow_request'
|
|
||||||
? { flexShrink: 1 }
|
? { flexShrink: 1 }
|
||||||
: { flex: 1 }
|
: { flex: 1 }
|
||||||
]}
|
]}
|
||||||
|
@ -1,24 +1,12 @@
|
|||||||
import apiInstance from '@api/instance'
|
import apiInstance from '@api/instance'
|
||||||
import navigationRef from '@helpers/navigationRef'
|
import navigationRef from '@helpers/navigationRef'
|
||||||
|
import { matchAccount, matchStatus } from '@helpers/urlMatcher'
|
||||||
import { store } from '@root/store'
|
import { store } from '@root/store'
|
||||||
import { SearchResult } from '@utils/queryHooks/search'
|
import { SearchResult } from '@utils/queryHooks/search'
|
||||||
import { getInstanceUrl } from '@utils/slices/instancesSlice'
|
|
||||||
import { getSettingsBrowser } from '@utils/slices/settingsSlice'
|
import { getSettingsBrowser } from '@utils/slices/settingsSlice'
|
||||||
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'
|
||||||
|
|
||||||
// https://social.xmflsct.com/web/statuses/105590085754428765 <- default
|
|
||||||
// https://social.xmflsct.com/@tooot/105590085754428765 <- pretty
|
|
||||||
const matcherStatus = new RegExp(
|
|
||||||
/http[s]?:\/\/(.*)\/(web\/statuses|@.*)\/([0-9]*)/
|
|
||||||
)
|
|
||||||
|
|
||||||
// https://social.xmflsct.com/web/accounts/14195 <- default
|
|
||||||
// https://social.xmflsct.com/@tooot <- pretty
|
|
||||||
const matcherAccount = new RegExp(
|
|
||||||
/http[s]?:\/\/(.*)\/(web\/accounts\/([0-9]*)|@.*)/
|
|
||||||
)
|
|
||||||
|
|
||||||
export let loadingLink = false
|
export let loadingLink = false
|
||||||
|
|
||||||
const openLink = async (url: string, navigation?: any) => {
|
const openLink = async (url: string, navigation?: any) => {
|
||||||
@ -26,10 +14,7 @@ const openLink = async (url: string, navigation?: any) => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleNavigation = (
|
const handleNavigation = (page: 'Tab-Shared-Toot' | 'Tab-Shared-Account', options: {}) => {
|
||||||
page: 'Tab-Shared-Toot' | 'Tab-Shared-Account',
|
|
||||||
options: {}
|
|
||||||
) => {
|
|
||||||
if (navigation) {
|
if (navigation) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
navigation.push(page, options)
|
navigation.push(page, options)
|
||||||
@ -40,14 +25,10 @@ const openLink = async (url: string, navigation?: any) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If a tooot can be found
|
// If a tooot can be found
|
||||||
const matchedStatus = url.match(matcherStatus)
|
const isStatus = matchStatus(url)
|
||||||
if (matchedStatus) {
|
if (isStatus) {
|
||||||
// If the link in current instance
|
if (isStatus.sameInstance) {
|
||||||
const instanceUrl = getInstanceUrl(store.getState())
|
handleNavigation('Tab-Shared-Toot', { toot: { id: isStatus.id } })
|
||||||
if (matchedStatus[1] === instanceUrl) {
|
|
||||||
handleNavigation('Tab-Shared-Toot', {
|
|
||||||
toot: { id: matchedStatus[3] }
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,15 +52,11 @@ const openLink = async (url: string, navigation?: any) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If an account can be found
|
// If an account can be found
|
||||||
const matchedAccount = url.match(matcherAccount)
|
const isAccount = matchAccount(url)
|
||||||
if (matchedAccount) {
|
if (isAccount) {
|
||||||
// If the link in current instance
|
if (isAccount.sameInstance) {
|
||||||
const instanceUrl = getInstanceUrl(store.getState())
|
if (isAccount.style === 'default' && isAccount.id) {
|
||||||
if (matchedAccount[1] === instanceUrl) {
|
handleNavigation('Tab-Shared-Account', { account: isAccount })
|
||||||
if (matchedAccount[3] && matchedAccount[3].match(/[0-9]*/)) {
|
|
||||||
handleNavigation('Tab-Shared-Account', {
|
|
||||||
account: { id: matchedAccount[3] }
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -91,7 +68,12 @@ const openLink = async (url: string, navigation?: any) => {
|
|||||||
version: 'v2',
|
version: 'v2',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
url: 'search',
|
url: 'search',
|
||||||
params: { type: 'accounts', q: url, limit: 1, resolve: true }
|
params: {
|
||||||
|
type: 'accounts',
|
||||||
|
q: isAccount.sameInstance && isAccount.style === 'pretty' ? isAccount.username : url,
|
||||||
|
limit: 1,
|
||||||
|
resolve: true
|
||||||
|
}
|
||||||
})
|
})
|
||||||
} catch {}
|
} catch {}
|
||||||
if (response && response.body && response.body.accounts.length) {
|
if (response && response.body && response.body.accounts.length) {
|
||||||
|
@ -1,4 +1,9 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"feature": "account_return_suspended",
|
||||||
|
"version": 3.3,
|
||||||
|
"reference": "https://github.com/mastodon/mastodon/releases/tag/v3.3.0"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"feature": "edit_post",
|
"feature": "edit_post",
|
||||||
"version": 3.5,
|
"version": 3.5,
|
||||||
@ -9,11 +14,6 @@
|
|||||||
"version": 3.5,
|
"version": 3.5,
|
||||||
"reference": "https://github.com/mastodon/mastodon/releases/tag/v3.5.0"
|
"reference": "https://github.com/mastodon/mastodon/releases/tag/v3.5.0"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"feature": "notification_type_status",
|
|
||||||
"version": 3.3,
|
|
||||||
"reference": "https://docs.joinmastodon.org/entities/notification/#required-attributes"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"feature": "notification_type_update",
|
"feature": "notification_type_update",
|
||||||
"version": 3.5,
|
"version": 3.5,
|
||||||
|
50
src/helpers/urlMatcher.ts
Normal file
50
src/helpers/urlMatcher.ts
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
import { store } from '@root/store'
|
||||||
|
import { getInstanceUrl } from '@utils/slices/instancesSlice'
|
||||||
|
|
||||||
|
const matchStatus = (
|
||||||
|
url: string
|
||||||
|
): { id: string; style: 'default' | 'pretty'; sameInstance: boolean } | null => {
|
||||||
|
// https://social.xmflsct.com/web/statuses/105590085754428765 <- default
|
||||||
|
// https://social.xmflsct.com/@tooot/105590085754428765 <- pretty
|
||||||
|
const matcherStatus = new RegExp(/(https?:\/\/)?([^\/]+)\/(web\/statuses|@.+)\/([0-9]+)/)
|
||||||
|
|
||||||
|
const matched = url.match(matcherStatus)
|
||||||
|
if (matched) {
|
||||||
|
const hostname = matched[2]
|
||||||
|
const style = matched[3] === 'web/statuses' ? 'default' : 'pretty'
|
||||||
|
const id = matched[4]
|
||||||
|
|
||||||
|
const instanceUrl = getInstanceUrl(store.getState())
|
||||||
|
return { id, style, sameInstance: hostname === instanceUrl }
|
||||||
|
}
|
||||||
|
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
const matchAccount = (
|
||||||
|
url: string
|
||||||
|
):
|
||||||
|
| { id: string; style: 'default'; sameInstance: boolean }
|
||||||
|
| { username: string; style: 'pretty'; sameInstance: boolean }
|
||||||
|
| null => {
|
||||||
|
// https://social.xmflsct.com/web/accounts/14195 <- default
|
||||||
|
// https://social.xmflsct.com/web/@tooot <- pretty ! cannot be searched on the same instance
|
||||||
|
// https://social.xmflsct.com/@tooot <- pretty
|
||||||
|
const matcherAccount = new RegExp(/(https?:\/\/)?([^\/]+)(\/web|\/web\/accounts)?\/([0-9]+|@.+)/)
|
||||||
|
|
||||||
|
const matched = url.match(matcherAccount)
|
||||||
|
if (matched) {
|
||||||
|
const hostname = matched[2]
|
||||||
|
const style = matched[4].startsWith('@') ? 'pretty' : 'default'
|
||||||
|
const account = matched[4]
|
||||||
|
|
||||||
|
const instanceUrl = getInstanceUrl(store.getState())
|
||||||
|
return style === 'default'
|
||||||
|
? { id: account, style, sameInstance: hostname === instanceUrl }
|
||||||
|
: { username: account, style, sameInstance: hostname === instanceUrl }
|
||||||
|
}
|
||||||
|
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
export { matchStatus, matchAccount }
|
@ -8,22 +8,22 @@
|
|||||||
},
|
},
|
||||||
"block": {
|
"block": {
|
||||||
"action_false": "Nutzer blockieren",
|
"action_false": "Nutzer blockieren",
|
||||||
"action_true": ""
|
"action_true": "User entblocken"
|
||||||
},
|
},
|
||||||
"reports": {
|
"reports": {
|
||||||
"action": "Melden und blockieren"
|
"action": "Melden und blockieren"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"copy": {
|
"copy": {
|
||||||
"action": "",
|
"action": "Tröt kopieren",
|
||||||
"succeed": "Kopiert"
|
"succeed": "Kopiert"
|
||||||
},
|
},
|
||||||
"instance": {
|
"instance": {
|
||||||
"title": "",
|
"title": "Instanz-Aktionen",
|
||||||
"block": {
|
"block": {
|
||||||
"action": "Instanz {{instance}} blockieren",
|
"action": "Instanz {{instance}} blockieren",
|
||||||
"alert": {
|
"alert": {
|
||||||
"title": "",
|
"title": "{{instance}} wirklich blockieren?",
|
||||||
"message": "Üblicherweise kannst du einen User stummschalten oder blockieren.\nBlockierst du hingegegen eine Instanz, wird deren gesamter Inhalt samt Usern, die dir von dieser Instanz folgen, entfernt!",
|
"message": "Üblicherweise kannst du einen User stummschalten oder blockieren.\nBlockierst du hingegegen eine Instanz, wird deren gesamter Inhalt samt Usern, die dir von dieser Instanz folgen, entfernt!",
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"confirm": "Bestätigen"
|
"confirm": "Bestätigen"
|
||||||
@ -40,7 +40,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"title": "",
|
"title": "Tröt-Befehle",
|
||||||
"edit": {
|
"edit": {
|
||||||
"action": "Tröt bearbeiten"
|
"action": "Tröt bearbeiten"
|
||||||
},
|
},
|
||||||
@ -48,17 +48,17 @@
|
|||||||
"action": "Tröt löschen",
|
"action": "Tröt löschen",
|
||||||
"alert": {
|
"alert": {
|
||||||
"title": "Löschen bestätigen?",
|
"title": "Löschen bestätigen?",
|
||||||
"message": "",
|
"message": "Alle Boosts, Sterne und Antworten werden entfernt.",
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"confirm": "Bestätigen"
|
"confirm": "Bestätigen"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"deleteEdit": {
|
"deleteEdit": {
|
||||||
"action": "",
|
"action": "Tröt und Boost entfernen",
|
||||||
"alert": {
|
"alert": {
|
||||||
"title": "",
|
"title": "Löschen und Boost bestätigen?",
|
||||||
"message": "",
|
"message": "Alle Boosts und Favoriten inklusive der Antworten werden gelöscht.",
|
||||||
"buttons": {
|
"buttons": {
|
||||||
"confirm": "Bestätigen"
|
"confirm": "Bestätigen"
|
||||||
}
|
}
|
||||||
@ -66,11 +66,11 @@
|
|||||||
},
|
},
|
||||||
"mute": {
|
"mute": {
|
||||||
"action_false": "Diesen Tröt sowie die Antworten stummschalten",
|
"action_false": "Diesen Tröt sowie die Antworten stummschalten",
|
||||||
"action_true": ""
|
"action_true": "Tröt und Antworten nicht mehr stummschalten"
|
||||||
},
|
},
|
||||||
"pin": {
|
"pin": {
|
||||||
"action_false": "",
|
"action_false": "Tröt anheften",
|
||||||
"action_true": ""
|
"action_true": "Tröt nicht mehr anheften"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1 +1,3 @@
|
|||||||
{}
|
{
|
||||||
|
"frequentUsed": "Häufig genutzt"
|
||||||
|
}
|
@ -14,7 +14,7 @@
|
|||||||
"base": "Der Login erfolgt über den Browser, so dass Ihre Kontoinformationen für die Toot-App nicht sichtbar sind."
|
"base": "Der Login erfolgt über den Browser, so dass Ihre Kontoinformationen für die Toot-App nicht sichtbar sind."
|
||||||
},
|
},
|
||||||
"terms": {
|
"terms": {
|
||||||
"base": ""
|
"base": "Mit dem Login stimmst du der <0>Datenschutzrichtlinie</0> und den <1>Nutzungsbedingungen</1> zu."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"update": {
|
"update": {
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"title": "Datenquelle auswählen",
|
"title": "Medienquelle wählen",
|
||||||
"message": "",
|
"message": "EXIF-Metadaten werden nicht hochgeladen",
|
||||||
"options": {
|
"options": {
|
||||||
"image": "",
|
"image": "Fotos hochladen",
|
||||||
"image_max": "",
|
"image_max": "Fotos hochladen (max {{max}})",
|
||||||
"video": "",
|
"video": "Video hochladen",
|
||||||
"video_max": ""
|
"video_max": "Video hochladen (max {{max}})"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"HTML": {
|
"HTML": {
|
||||||
"accessibilityHint": "",
|
"accessibilityHint": "Tippen, um Inhalt aus- oder einzuklappen",
|
||||||
"expanded": "{{hint}}{{moreLines}}",
|
"expanded": "{{hint}}{{moreLines}}",
|
||||||
"moreLines": "",
|
"moreLines": " ({{count}} weitere Zeilen)",
|
||||||
"defaultHint": ""
|
"defaultHint": "Langer Tröt"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -30,7 +30,7 @@
|
|||||||
"default": "{{name}} hat geboostet",
|
"default": "{{name}} hat geboostet",
|
||||||
"notification": "{{name}} hat deinen Tröt geboostet"
|
"notification": "{{name}} hat deinen Tröt geboostet"
|
||||||
},
|
},
|
||||||
"update": ""
|
"update": "Boost wurde bearbeitet"
|
||||||
},
|
},
|
||||||
"actions": {
|
"actions": {
|
||||||
"reply": {
|
"reply": {
|
||||||
@ -40,8 +40,8 @@
|
|||||||
"accessibilityLabel": "Tröt boosten",
|
"accessibilityLabel": "Tröt boosten",
|
||||||
"function": "Boost",
|
"function": "Boost",
|
||||||
"options": {
|
"options": {
|
||||||
"title": "",
|
"title": "Boost-Sichtbarkeit ändern",
|
||||||
"public": "",
|
"public": "Öffentlicher Boost",
|
||||||
"unlisted": ""
|
"unlisted": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -68,7 +68,7 @@
|
|||||||
"history": {
|
"history": {
|
||||||
"accessibilityLabel": "Dieser Tröt wurde {{count}} mal bearbeitet",
|
"accessibilityLabel": "Dieser Tröt wurde {{count}} mal bearbeitet",
|
||||||
"accessibilityHint": "Für den vollständigen Verlauf auswählen",
|
"accessibilityHint": "Für den vollständigen Verlauf auswählen",
|
||||||
"text_one": "{{count}} bearbeitet",
|
"text_one": "{{count}} Bearbeitung",
|
||||||
"text_other": "{{count}} mal bearbeitet"
|
"text_other": "{{count}} mal bearbeitet"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
"description": "Bitte Benachrichtigungsdienst in den Einstellungen erneut aktivieren"
|
"description": "Bitte Benachrichtigungsdienst in den Einstellungen erneut aktivieren"
|
||||||
},
|
},
|
||||||
"shareError": {
|
"shareError": {
|
||||||
"imageNotSupported": "",
|
"imageNotSupported": "Bildformat {{type}} wird nicht unterstützt",
|
||||||
"videoNotSupported": ""
|
"videoNotSupported": "Videoformat {{type}} wird nicht unterstützt"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"heading": "",
|
"heading": "Teilen mit...",
|
||||||
"content": {
|
"content": {
|
||||||
"select_account": ""
|
"select_account": "Konto auswählen"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"content": {
|
"content": {
|
||||||
"altText": {
|
"altText": {
|
||||||
"heading": ""
|
"heading": "Alternativtext"
|
||||||
},
|
},
|
||||||
"notificationsFilter": {
|
"notificationsFilter": {
|
||||||
"heading": "Benachrichtigungsart anzeigen",
|
"heading": "Benachrichtigungsart anzeigen",
|
||||||
@ -13,7 +13,7 @@
|
|||||||
"mention": "$t(screenTabs:me.push.mention.heading)",
|
"mention": "$t(screenTabs:me.push.mention.heading)",
|
||||||
"poll": "$t(screenTabs:me.push.poll.heading)",
|
"poll": "$t(screenTabs:me.push.poll.heading)",
|
||||||
"status": "",
|
"status": "",
|
||||||
"update": ""
|
"update": "Boost wurde bearbeitet"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
"placeholder": "Was geht in dir vor",
|
"placeholder": "Was geht in dir vor",
|
||||||
"keyboardImage": {
|
"keyboardImage": {
|
||||||
"exceedMaximum": {
|
"exceedMaximum": {
|
||||||
"title": "",
|
"title": "Maximale Anzahl von Anhängen erreicht",
|
||||||
"OK": "$t(common:buttons.OK)"
|
"OK": "$t(common:buttons.OK)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -82,7 +82,7 @@
|
|||||||
},
|
},
|
||||||
"increase": {
|
"increase": {
|
||||||
"accessibilityLabel": "Erhöhe Anzahl der Antwortmöglichkeiten auf {{amount}}",
|
"accessibilityLabel": "Erhöhe Anzahl der Antwortmöglichkeiten auf {{amount}}",
|
||||||
"accessibilityHint": ""
|
"accessibilityHint": "Maximale Anzahl der Auswahlmöglichkeiten erreicht, aktuell {{amount}}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"multiple": {
|
"multiple": {
|
||||||
@ -114,42 +114,42 @@
|
|||||||
"accessibilityHint": "Umfrage wird entfernt, wenn ein Anhang vorhanden ist",
|
"accessibilityHint": "Umfrage wird entfernt, wenn ein Anhang vorhanden ist",
|
||||||
"failed": {
|
"failed": {
|
||||||
"alert": {
|
"alert": {
|
||||||
"title": "",
|
"title": "Upload fehlgeschlagen",
|
||||||
"button": "Noch einmal versuchen"
|
"button": "Noch einmal versuchen"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"poll": {
|
"poll": {
|
||||||
"accessibilityLabel": "",
|
"accessibilityLabel": "Umfrage hinzufügen",
|
||||||
"accessibilityHint": ""
|
"accessibilityHint": "Anhang ist bei Umfragen nicht möglich"
|
||||||
},
|
},
|
||||||
"visibility": {
|
"visibility": {
|
||||||
"accessibilityLabel": "",
|
"accessibilityLabel": "Sichtbarkeit des Tröts ist {{visibility}}",
|
||||||
"title": "",
|
"title": "Sichtbarkeit des Tröts",
|
||||||
"options": {
|
"options": {
|
||||||
"public": "Öffentlich",
|
"public": "Öffentlich",
|
||||||
"unlisted": "Ungelistet",
|
"unlisted": "Ungelistet",
|
||||||
"private": "Nur für Folgende",
|
"private": "Nur für Folgende",
|
||||||
"direct": "",
|
"direct": "Direktnachricht",
|
||||||
"cancel": "$t(common:buttons.cancel)"
|
"cancel": "$t(common:buttons.cancel)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"spoiler": {
|
"spoiler": {
|
||||||
"accessibilityLabel": ""
|
"accessibilityLabel": "Spoiler"
|
||||||
},
|
},
|
||||||
"emoji": {
|
"emoji": {
|
||||||
"accessibilityLabel": "",
|
"accessibilityLabel": "Emoji hinzufügen",
|
||||||
"accessibilityHint": ""
|
"accessibilityHint": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"drafts_one": "",
|
"drafts_one": "Entwurf ({{count}})",
|
||||||
"drafts_other": ""
|
"drafts_other": "Entwürfe ({{count}})"
|
||||||
},
|
},
|
||||||
"editAttachment": {
|
"editAttachment": {
|
||||||
"header": {
|
"header": {
|
||||||
"title": "Anhang bearbeiten",
|
"title": "Anhang bearbeiten",
|
||||||
"right": {
|
"right": {
|
||||||
"accessibilityLabel": "",
|
"accessibilityLabel": "Anhang speichern",
|
||||||
"failed": {
|
"failed": {
|
||||||
"title": "Bearbeitung fehlgeschlagen",
|
"title": "Bearbeitung fehlgeschlagen",
|
||||||
"button": "Noch einmal versuchen"
|
"button": "Noch einmal versuchen"
|
||||||
@ -168,12 +168,12 @@
|
|||||||
"header": {
|
"header": {
|
||||||
"title": "Entwurf"
|
"title": "Entwurf"
|
||||||
},
|
},
|
||||||
"warning": "",
|
"warning": "Entwürfe werden nur lokal gespeichert und können bei Abstürzen verloren gehen. Diese Funktion bitte nicht für dauerhafte Entwürfe nutzen.",
|
||||||
"content": {
|
"content": {
|
||||||
"accessibilityHint": "Gespeicherter Entwurf, tippe, um diesen zu bearbeiten",
|
"accessibilityHint": "Gespeicherter Entwurf, tippe, um diesen zu bearbeiten",
|
||||||
"textEmpty": "Kein Inhalt"
|
"textEmpty": "Kein Inhalt"
|
||||||
},
|
},
|
||||||
"checkAttachment": ""
|
"checkAttachment": "Prüfe Anhänge auf dem Server..."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -146,7 +146,7 @@
|
|||||||
"label": "Kennzeichnung",
|
"label": "Kennzeichnung",
|
||||||
"content": "Inhalt"
|
"content": "Inhalt"
|
||||||
},
|
},
|
||||||
"mediaSelectionFailed": ""
|
"mediaSelectionFailed": "Verarbeitung des Bildes fehlgeschlagen. Bitte erneut versuchen."
|
||||||
},
|
},
|
||||||
"push": {
|
"push": {
|
||||||
"notAvailable": "Dein Gerät unterstützt keine Push-Benachrichtigung",
|
"notAvailable": "Dein Gerät unterstützt keine Push-Benachrichtigung",
|
||||||
@ -169,7 +169,7 @@
|
|||||||
"heading": "Neue Follower"
|
"heading": "Neue Follower"
|
||||||
},
|
},
|
||||||
"follow_request": {
|
"follow_request": {
|
||||||
"heading": ""
|
"heading": "Followeranfrage"
|
||||||
},
|
},
|
||||||
"favourite": {
|
"favourite": {
|
||||||
"heading": "Favoriten"
|
"heading": "Favoriten"
|
||||||
@ -260,8 +260,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"staticEmoji": {
|
"staticEmoji": {
|
||||||
"heading": "",
|
"heading": "System-Emojis verwenden",
|
||||||
"description": ""
|
"description": "Wenn du beim Betrachten der Emoji-Liste häufige App-Abstürze feststellst, kannst du stattdessen versuchen, statische Emoji zu verwenden."
|
||||||
},
|
},
|
||||||
"feedback": {
|
"feedback": {
|
||||||
"heading": "Neue Funktion vorschlagen"
|
"heading": "Neue Funktion vorschlagen"
|
||||||
@ -280,7 +280,7 @@
|
|||||||
"description": "Es werden ausschließlich Daten gesammelt, welche nicht nutzerbezogen sind"
|
"description": "Es werden ausschließlich Daten gesammelt, welche nicht nutzerbezogen sind"
|
||||||
},
|
},
|
||||||
"version": "Version v{{version}}",
|
"version": "Version v{{version}}",
|
||||||
"instanceVersion": ""
|
"instanceVersion": "Mastodon Version {{version}}"
|
||||||
},
|
},
|
||||||
"switch": {
|
"switch": {
|
||||||
"existing": "Wähle ein Konto aus",
|
"existing": "Wähle ein Konto aus",
|
||||||
@ -293,7 +293,7 @@
|
|||||||
"accessibilityLabel": "Aktionen für Benutzer {{user}}",
|
"accessibilityLabel": "Aktionen für Benutzer {{user}}",
|
||||||
"accessibilityHint": "Du kannst diesen Benutzer stummschalten, blockieren, melden oder teilen"
|
"accessibilityHint": "Du kannst diesen Benutzer stummschalten, blockieren, melden oder teilen"
|
||||||
},
|
},
|
||||||
"followed_by": "",
|
"followed_by": " folgt dir",
|
||||||
"moved": "Benutzer umgezogen",
|
"moved": "Benutzer umgezogen",
|
||||||
"created_at": "Registriert am: {{date}}",
|
"created_at": "Registriert am: {{date}}",
|
||||||
"summary": {
|
"summary": {
|
||||||
@ -304,7 +304,8 @@
|
|||||||
"toots": {
|
"toots": {
|
||||||
"default": "Tröts",
|
"default": "Tröts",
|
||||||
"all": "Tröts und DruTröts"
|
"all": "Tröts und DruTröts"
|
||||||
}
|
},
|
||||||
|
"suspended": "Konto wurde von den Instanzmoderation gesperrt"
|
||||||
},
|
},
|
||||||
"attachments": {
|
"attachments": {
|
||||||
"name": "<0 /><1>\"s Medien</1>"
|
"name": "<0 /><1>\"s Medien</1>"
|
||||||
@ -347,7 +348,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"history": {
|
"history": {
|
||||||
"name": ""
|
"name": "Bearbeitungsverlauf"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -88,7 +88,7 @@
|
|||||||
"content": {
|
"content": {
|
||||||
"expandHint": "Hidden content"
|
"expandHint": "Hidden content"
|
||||||
},
|
},
|
||||||
"filtered": "Filtered",
|
"filtered": "Filtered: {{phrase}}.",
|
||||||
"fullConversation": "Read conversations",
|
"fullConversation": "Read conversations",
|
||||||
"translate": {
|
"translate": {
|
||||||
"default": "Translate",
|
"default": "Translate",
|
||||||
|
@ -304,7 +304,8 @@
|
|||||||
"toots": {
|
"toots": {
|
||||||
"default": "Toots",
|
"default": "Toots",
|
||||||
"all": "Toots and replies"
|
"all": "Toots and replies"
|
||||||
}
|
},
|
||||||
|
"suspended": "Account suspended by the moderators of your server"
|
||||||
},
|
},
|
||||||
"attachments": {
|
"attachments": {
|
||||||
"name": "<0 /><1>\"s media</1>"
|
"name": "<0 /><1>\"s media</1>"
|
||||||
|
22
src/i18n/fr/common.json
Normal file
22
src/i18n/fr/common.json
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"buttons": {
|
||||||
|
"OK": "Ok",
|
||||||
|
"apply": "Confirmer",
|
||||||
|
"cancel": "Annuler"
|
||||||
|
},
|
||||||
|
"customEmoji": {
|
||||||
|
"accessibilityLabel": "Émoji personnalisé {{emoji}}"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"success": {
|
||||||
|
"message": "{{function}} succès"
|
||||||
|
},
|
||||||
|
"warning": {
|
||||||
|
"message": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"message": "Échec de la connexion, veuillez réessayer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"separator": ", "
|
||||||
|
}
|
76
src/i18n/fr/components/contextMenu.json
Normal file
76
src/i18n/fr/components/contextMenu.json
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
{
|
||||||
|
"accessibilityHint": "Actions pour ce toot, telles que son utilisateur affiché, le toot lui-même",
|
||||||
|
"account": {
|
||||||
|
"title": "Actions de l'utilisateur",
|
||||||
|
"mute": {
|
||||||
|
"action_false": "Rendre muet l'utilisateur",
|
||||||
|
"action_true": "Rendre la parole"
|
||||||
|
},
|
||||||
|
"block": {
|
||||||
|
"action_false": "Bloquer l'utilisateur",
|
||||||
|
"action_true": "Débloquer l'utilisateur"
|
||||||
|
},
|
||||||
|
"reports": {
|
||||||
|
"action": "Signaler et bloquer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"copy": {
|
||||||
|
"action": "Copier le pouet",
|
||||||
|
"succeed": "Copié"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"title": "Action de l'instance",
|
||||||
|
"block": {
|
||||||
|
"action": "Bloquer l'instance {{instance}}",
|
||||||
|
"alert": {
|
||||||
|
"title": "Confirmer le blocage de l'instance {{instance}}?",
|
||||||
|
"message": "Vous pouvez masquer ou bloquer certains utilisateurs.\n\nAprès avoir bloqué l'instance, tout son contenu, y compris les followers de cette instance, sera supprimé !",
|
||||||
|
"buttons": {
|
||||||
|
"confirm": "Confirmer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"share": {
|
||||||
|
"status": {
|
||||||
|
"action": "Partager le pouet"
|
||||||
|
},
|
||||||
|
"account": {
|
||||||
|
"action": "Partage l'utilisateur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"title": "Actions du pouet",
|
||||||
|
"edit": {
|
||||||
|
"action": "Editer le pouet"
|
||||||
|
},
|
||||||
|
"delete": {
|
||||||
|
"action": "Supprimer le pouet",
|
||||||
|
"alert": {
|
||||||
|
"title": "Confirmer la suppression ?",
|
||||||
|
"message": "Tous les boosts et favoris seront effacés, y compris toutes les réponses.",
|
||||||
|
"buttons": {
|
||||||
|
"confirm": "Confirmer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"deleteEdit": {
|
||||||
|
"action": "Supprimer le pouet et le repost",
|
||||||
|
"alert": {
|
||||||
|
"title": "Confirmer la suppression et le repost ?",
|
||||||
|
"message": "Tous les boosts et favoris seront effacés, y compris toutes les réponses.",
|
||||||
|
"buttons": {
|
||||||
|
"confirm": "Confirmer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mute": {
|
||||||
|
"action_false": "Couper le pouet et les réponses",
|
||||||
|
"action_true": "Couper le pouet et les réponses"
|
||||||
|
},
|
||||||
|
"pin": {
|
||||||
|
"action_false": "Pouet épinglé",
|
||||||
|
"action_true": "Détacher le pouet"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
3
src/i18n/fr/components/emojis.json
Normal file
3
src/i18n/fr/components/emojis.json
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"frequentUsed": "Fréquemment utilisés"
|
||||||
|
}
|
30
src/i18n/fr/components/instance.json
Normal file
30
src/i18n/fr/components/instance.json
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"server": {
|
||||||
|
"textInput": {
|
||||||
|
"placeholder": "Domaine d'instance"
|
||||||
|
},
|
||||||
|
"button": "Connexion",
|
||||||
|
"information": {
|
||||||
|
"name": "Nom",
|
||||||
|
"accounts": "Utilisateurs",
|
||||||
|
"statuses": "Pouets",
|
||||||
|
"domains": "Univers"
|
||||||
|
},
|
||||||
|
"disclaimer": {
|
||||||
|
"base": "Le processus de connexion utilise le navigateur du système. Les informations de votre compte ne seront pas visibles par l'application tooot."
|
||||||
|
},
|
||||||
|
"terms": {
|
||||||
|
"base": "En vous connectant, vous acceptez la <0>politique de confidentialité</0> et les <1>conditions de service</1>."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"update": {
|
||||||
|
"alert": {
|
||||||
|
"title": "Connecté à cette instance",
|
||||||
|
"message": "Vous pouvez vous connecter à un autre compte, en maintenant un compte connecté existant",
|
||||||
|
"buttons": {
|
||||||
|
"cancel": "$t(common:buttons.cancel)",
|
||||||
|
"continue": "Continuer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
10
src/i18n/fr/components/mediaSelector.json
Normal file
10
src/i18n/fr/components/mediaSelector.json
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"title": "Sélectionnez la source du média",
|
||||||
|
"message": "Les données Media EXIF ne sont pas téléchargées",
|
||||||
|
"options": {
|
||||||
|
"image": "Télécharger des photos",
|
||||||
|
"image_max": "Télécharger des photos (max {{max}})",
|
||||||
|
"video": "Télécharger une vidéo",
|
||||||
|
"video_max": "Télécharger une vidéo (max {{max}})"
|
||||||
|
}
|
||||||
|
}
|
8
src/i18n/fr/components/parse.json
Normal file
8
src/i18n/fr/components/parse.json
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"HTML": {
|
||||||
|
"accessibilityHint": "Appuyez pour agrandir ou réduire le contenu",
|
||||||
|
"expanded": "{{hint}}{{moreLines}}",
|
||||||
|
"moreLines": " ({{count}} lignes en plus)",
|
||||||
|
"defaultHint": "Pouet long"
|
||||||
|
}
|
||||||
|
}
|
16
src/i18n/fr/components/relationship.json
Normal file
16
src/i18n/fr/components/relationship.json
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"follow": {
|
||||||
|
"function": "Suivre l'utilisateur"
|
||||||
|
},
|
||||||
|
"block": {
|
||||||
|
"function": "Bloquer l'utilisateur"
|
||||||
|
},
|
||||||
|
"button": {
|
||||||
|
"error": "Erreur de chargement",
|
||||||
|
"blocked_by": "Bloqué par l'utilisateur",
|
||||||
|
"blocking": "Débloquer",
|
||||||
|
"following": "Ne plus suivre",
|
||||||
|
"requested": "Retirer la demande",
|
||||||
|
"default": "Suivre"
|
||||||
|
}
|
||||||
|
}
|
152
src/i18n/fr/components/timeline.json
Normal file
152
src/i18n/fr/components/timeline.json
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
{
|
||||||
|
"empty": {
|
||||||
|
"error": {
|
||||||
|
"message": "Erreur de chargement",
|
||||||
|
"button": "Réessayer"
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"message": "La chronologie est vide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"message": "Fin, qu'en est-il d'une tasse de <0 />"
|
||||||
|
},
|
||||||
|
"lookback": {
|
||||||
|
"message": "Dernière lecture à"
|
||||||
|
},
|
||||||
|
"refresh": {
|
||||||
|
"fetchPreviousPage": "Plus récent à partir d'ici",
|
||||||
|
"refetch": "À la dernière"
|
||||||
|
},
|
||||||
|
"shared": {
|
||||||
|
"actioned": {
|
||||||
|
"pinned": "Épinglé",
|
||||||
|
"favourite": "{{name}} a mis votre pouet en favoris",
|
||||||
|
"status": "{{name}} vient d'être posté",
|
||||||
|
"follow": "{{name}} vous suit",
|
||||||
|
"follow_request": "{{name}} a demandé à vous suivre",
|
||||||
|
"poll": "Un sondage auquel vous avez participé est maintenant terminé",
|
||||||
|
"reblog": {
|
||||||
|
"default": "{{name}} a partagé",
|
||||||
|
"notification": "{{name}} a partagé votre message"
|
||||||
|
},
|
||||||
|
"update": "Le reblog a été modifié"
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"reply": {
|
||||||
|
"accessibilityLabel": "Répondre à ce pouet"
|
||||||
|
},
|
||||||
|
"reblogged": {
|
||||||
|
"accessibilityLabel": "Partager ce pouet",
|
||||||
|
"function": "Pouet de Boost",
|
||||||
|
"options": {
|
||||||
|
"title": "Choisir la visibilité du boost",
|
||||||
|
"public": "Boost public",
|
||||||
|
"unlisted": "Retirer le boost"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"favourited": {
|
||||||
|
"accessibilityLabel": "Ajouter ce pouet aux favoris",
|
||||||
|
"function": "Mettre le pouet en favori"
|
||||||
|
},
|
||||||
|
"bookmarked": {
|
||||||
|
"accessibilityLabel": "Ajouter ce pouet aux signets",
|
||||||
|
"function": "Pouet de signet"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actionsUsers": {
|
||||||
|
"reblogged_by": {
|
||||||
|
"accessibilityLabel": "{{count}} utilisateurs ont boosté ce pouet",
|
||||||
|
"accessibilityHint": "Touchez pour connaître les utilisateurs",
|
||||||
|
"text": "$t(screenTabs:shared.users.statuses.reblogged_by)"
|
||||||
|
},
|
||||||
|
"favourited_by": {
|
||||||
|
"accessibilityLabel": "{{count}} utilisateurs ont boosté ce pouet",
|
||||||
|
"accessibilityHint": "Touchez pour connaître les utilisateurs",
|
||||||
|
"text": "$t(screenTabs:shared.users.statuses.favourited_by)"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"accessibilityLabel": "Ce pouet a été modifié {{count}} fois",
|
||||||
|
"accessibilityHint": "Appuyer pour afficher l'historique d'édition complet",
|
||||||
|
"text_one": "{{count}} modification",
|
||||||
|
"text_other": "{{count}} modifications"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"attachment": {
|
||||||
|
"sensitive": {
|
||||||
|
"button": "Afficher les médias sensibles"
|
||||||
|
},
|
||||||
|
"unsupported": {
|
||||||
|
"text": "Erreur de chargement",
|
||||||
|
"button": "Essayer le lien distant"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"avatar": {
|
||||||
|
"accessibilityLabel": "Avatar de {{name}}",
|
||||||
|
"accessibilityHint": "Appuyez pour accéder à la page de {{name}}"
|
||||||
|
},
|
||||||
|
"content": {
|
||||||
|
"expandHint": "Contenu masqué"
|
||||||
|
},
|
||||||
|
"filtered": "Filtré",
|
||||||
|
"fullConversation": "Conversations lues",
|
||||||
|
"translate": {
|
||||||
|
"default": "Traduire",
|
||||||
|
"succeed": "Traduit par {{provider}} de {{source}}",
|
||||||
|
"failed": "La traduction a échoué",
|
||||||
|
"source_not_supported": "cette langue n'est pas prise en charge",
|
||||||
|
"target_not_supported": "Cette langue n'est pas prise en charge"
|
||||||
|
},
|
||||||
|
"header": {
|
||||||
|
"shared": {
|
||||||
|
"account": {
|
||||||
|
"name": {
|
||||||
|
"accessibilityHint": "Nom de l'utilisateur"
|
||||||
|
},
|
||||||
|
"account": {
|
||||||
|
"accessibilityHint": "Compte de l'utilisateur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"application": "Poussée avec {{application}}",
|
||||||
|
"edited": {
|
||||||
|
"accessibilityLabel": "Pouet édité"
|
||||||
|
},
|
||||||
|
"muted": {
|
||||||
|
"accessibilityLabel": "Pouet rendu muet"
|
||||||
|
},
|
||||||
|
"visibility": {
|
||||||
|
"direct": {
|
||||||
|
"accessibilityLabel": "Envoyer un message direct"
|
||||||
|
},
|
||||||
|
"private": {
|
||||||
|
"accessibilityLabel": "Visible uniquement pour les abonné·e·s"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"conversation": {
|
||||||
|
"withAccounts": "Avec",
|
||||||
|
"delete": {
|
||||||
|
"function": "Supprimer le message direct"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"poll": {
|
||||||
|
"meta": {
|
||||||
|
"button": {
|
||||||
|
"vote": "Voter",
|
||||||
|
"refresh": "Actualiser"
|
||||||
|
},
|
||||||
|
"count": {
|
||||||
|
"voters_one": "{{count}} utilisateur a voté",
|
||||||
|
"voters_other": "{{count}} utilisateurs ont voté",
|
||||||
|
"votes_one": "{{count}} votes",
|
||||||
|
"votes_other": "{{count}} votes"
|
||||||
|
},
|
||||||
|
"expiration": {
|
||||||
|
"expired": "Le vote a expiré",
|
||||||
|
"until": "Expire <0 />"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
18
src/i18n/fr/screens.json
Normal file
18
src/i18n/fr/screens.json
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"screenshot": {
|
||||||
|
"title": "Protection de la confidentialité",
|
||||||
|
"message": "Veuillez ne pas divulguer l'identité d'un autre utilisateur, tel que le nom d'utilisateur, l'avatar, etc. Merci!",
|
||||||
|
"button": "Confirmer"
|
||||||
|
},
|
||||||
|
"localCorrupt": {
|
||||||
|
"message": "Session expirée, veuillez ré-essayer"
|
||||||
|
},
|
||||||
|
"pushError": {
|
||||||
|
"message": "Erreur des services push",
|
||||||
|
"description": "Veuillez réactiver la notification push dans les paramètres"
|
||||||
|
},
|
||||||
|
"shareError": {
|
||||||
|
"imageNotSupported": "Type d'image {{type}} non pris en charge",
|
||||||
|
"videoNotSupported": "Type de vidéo {{type}} non supporté"
|
||||||
|
}
|
||||||
|
}
|
6
src/i18n/fr/screens/accountSelection.json
Normal file
6
src/i18n/fr/screens/accountSelection.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"heading": "Partager avec...",
|
||||||
|
"content": {
|
||||||
|
"select_account": "Sélectionnez un compte"
|
||||||
|
}
|
||||||
|
}
|
20
src/i18n/fr/screens/actions.json
Normal file
20
src/i18n/fr/screens/actions.json
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"content": {
|
||||||
|
"altText": {
|
||||||
|
"heading": "Texte de remplacement"
|
||||||
|
},
|
||||||
|
"notificationsFilter": {
|
||||||
|
"heading": "Afficher les notifications",
|
||||||
|
"content": {
|
||||||
|
"follow": "$t(screenTabs:me.push.follow.heading)",
|
||||||
|
"follow_request": "Demande d'abonnement",
|
||||||
|
"favourite": "$t(screenTabs:me.push.favourite.heading)",
|
||||||
|
"reblog": "$t(screenTabs:me.push.reblog.heading)",
|
||||||
|
"mention": "$t(screenTabs:me.push.mention.heading)",
|
||||||
|
"poll": "$t(screenTabs:me.push.poll.heading)",
|
||||||
|
"status": "Pouet des utilisateurs abonnés",
|
||||||
|
"update": "Le reblog a été modifié"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
10
src/i18n/fr/screens/announcements.json
Normal file
10
src/i18n/fr/screens/announcements.json
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"heading": "Annonces",
|
||||||
|
"content": {
|
||||||
|
"published": "Publié <0 />",
|
||||||
|
"button": {
|
||||||
|
"read": "Lire",
|
||||||
|
"unread": "Marqué comme lu"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
179
src/i18n/fr/screens/compose.json
Normal file
179
src/i18n/fr/screens/compose.json
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
{
|
||||||
|
"heading": {
|
||||||
|
"left": {
|
||||||
|
"button": "Abandonner",
|
||||||
|
"alert": {
|
||||||
|
"title": "Annuler l’édition?",
|
||||||
|
"buttons": {
|
||||||
|
"save": "Enregistrer comme brouillon",
|
||||||
|
"delete": "Supprimer le brouillon",
|
||||||
|
"cancel": "Abandonner"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"right": {
|
||||||
|
"button": {
|
||||||
|
"default": "Pouet",
|
||||||
|
"conversation": "Pouet DM",
|
||||||
|
"reply": "Réponse de pouet",
|
||||||
|
"deleteEdit": "Pouet",
|
||||||
|
"edit": "Pouet",
|
||||||
|
"share": "Pouet"
|
||||||
|
},
|
||||||
|
"alert": {
|
||||||
|
"default": {
|
||||||
|
"title": "Échec du pouet",
|
||||||
|
"button": "Réessayer"
|
||||||
|
},
|
||||||
|
"removeReply": {
|
||||||
|
"title": "Le pouet répondu est introuvable",
|
||||||
|
"description": "Le pouet répondu a peut-être été supprimé. Voulez-vous le supprimer de votre référence ?",
|
||||||
|
"cancel": "$t(common:buttons.cancel)",
|
||||||
|
"confirm": "Supprimer la référence"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"content": {
|
||||||
|
"root": {
|
||||||
|
"header": {
|
||||||
|
"postingAs": "Pouet en tant que @{{acct}}@{{domain}}",
|
||||||
|
"spoilerInput": {
|
||||||
|
"placeholder": "Voir tous les messages d'avertissement"
|
||||||
|
},
|
||||||
|
"textInput": {
|
||||||
|
"placeholder": "Qu’avez-vous en tête",
|
||||||
|
"keyboardImage": {
|
||||||
|
"exceedMaximum": {
|
||||||
|
"title": "Nombre maximum de pièces jointes atteint",
|
||||||
|
"OK": "$t(common:buttons.OK)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"attachments": {
|
||||||
|
"sensitive": "Marquer les pièces jointes comme étant sensibles",
|
||||||
|
"remove": {
|
||||||
|
"accessibilityLabel": "Retirer la pièce jointe téléchargée, numéro {{attachment}}"
|
||||||
|
},
|
||||||
|
"edit": {
|
||||||
|
"accessibilityLabel": "Editer la pièce jointe téléchargée, numéro {{attachment}}"
|
||||||
|
},
|
||||||
|
"upload": {
|
||||||
|
"accessibilityLabel": "Télécharger plus de pièces jointes"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"emojis": {
|
||||||
|
"accessibilityHint": "Tapotez pour ajouter des émojis au pouet"
|
||||||
|
},
|
||||||
|
"poll": {
|
||||||
|
"option": {
|
||||||
|
"placeholder": {
|
||||||
|
"accessibilityLabel": "Option du sondage {{index}}",
|
||||||
|
"single": "Choix unique",
|
||||||
|
"multiple": "Choix multiple"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"quantity": {
|
||||||
|
"reduce": {
|
||||||
|
"accessibilityLabel": "Réduire les options du sondage à {{amount}}",
|
||||||
|
"accessibilityHint": "Quantité minimale d'options de sondage atteinte, actuellement {{amount}}"
|
||||||
|
},
|
||||||
|
"increase": {
|
||||||
|
"accessibilityLabel": "Augmentez les options du sondage à {{amount}}",
|
||||||
|
"accessibilityHint": "Quantité maximum d'options de sondage atteinte, actuellement {{amount}}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"multiple": {
|
||||||
|
"heading": "Type de choix",
|
||||||
|
"options": {
|
||||||
|
"single": "Choix unique",
|
||||||
|
"multiple": "Choix multiple",
|
||||||
|
"cancel": "$t(common:buttons.cancel)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expiration": {
|
||||||
|
"heading": "Validité",
|
||||||
|
"options": {
|
||||||
|
"300": "5 minutes",
|
||||||
|
"1800": "30 minutes",
|
||||||
|
"3600": "1 heure",
|
||||||
|
"21600": "6 heures",
|
||||||
|
"86400": "1 jour",
|
||||||
|
"259200": "3 jours",
|
||||||
|
"604800": "7 jours",
|
||||||
|
"cancel": "$t(common:buttons.cancel)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"attachment": {
|
||||||
|
"accessibilityLabel": "Téléchargez une pièce-jointe",
|
||||||
|
"accessibilityHint": "La fonction de sondage sera désactivée lorsqu'il y a une pièce jointe",
|
||||||
|
"failed": {
|
||||||
|
"alert": {
|
||||||
|
"title": "Le téléchargement a échoué",
|
||||||
|
"button": "Réessayer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"poll": {
|
||||||
|
"accessibilityLabel": "Ajouter un sondage",
|
||||||
|
"accessibilityHint": "La fonction d'attachement sera désactivée lorsque le sondage est actif"
|
||||||
|
},
|
||||||
|
"visibility": {
|
||||||
|
"accessibilityLabel": "La visibilité de pouet est {{visibility}}",
|
||||||
|
"title": "Visibilité de pouet",
|
||||||
|
"options": {
|
||||||
|
"public": "Public",
|
||||||
|
"unlisted": "Non listé",
|
||||||
|
"private": "Abonné·e·s uniquement",
|
||||||
|
"direct": "Message direct",
|
||||||
|
"cancel": "$t(common:buttons.cancel)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spoiler": {
|
||||||
|
"accessibilityLabel": "Divulgâchage"
|
||||||
|
},
|
||||||
|
"emoji": {
|
||||||
|
"accessibilityLabel": "Ajouter un émoji",
|
||||||
|
"accessibilityHint": "Ouvrir le panneau de sélection des émojis, glisser horizontalement pour changer de page"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"drafts_one": "Brouillon ({{count}})",
|
||||||
|
"drafts_other": "Brouillons ({{count}})"
|
||||||
|
},
|
||||||
|
"editAttachment": {
|
||||||
|
"header": {
|
||||||
|
"title": "Modifier la pièce jointe",
|
||||||
|
"right": {
|
||||||
|
"accessibilityLabel": "Enregistrement de la pièce jointe",
|
||||||
|
"failed": {
|
||||||
|
"title": "Impossible d'éditer",
|
||||||
|
"button": "Réessayer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"content": {
|
||||||
|
"altText": {
|
||||||
|
"heading": "Décrire cette photo pour les personnes malvoyantes",
|
||||||
|
"placeholder": "Vous pouvez ajouter une description, parfois appelée alt-text, à vos médias afin qu'ils soient accessibles à un plus grand nombre de personnes, y compris celles qui sont aveugles ou malvoyantes.\n\nLes bonnes descriptions sont concises, ou présentent ce qui est dans vos médias avec suffisamment de précision pour comprendre leur contexte."
|
||||||
|
},
|
||||||
|
"imageFocus": "Faites glisser le cercle de focus pour mettre à jour le point de focus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"draftsList": {
|
||||||
|
"header": {
|
||||||
|
"title": "Brouillon"
|
||||||
|
},
|
||||||
|
"warning": "Les brouillons ne sont stockés que localement, et peuvent être perdus dans des événements malheureux. Veuillez ne pas utiliser de brouillons pour un stockage à long terme.",
|
||||||
|
"content": {
|
||||||
|
"accessibilityHint": "Brouillon enregistré, appuyez pour modifier ce brouillon",
|
||||||
|
"textEmpty": "Le contenu est vide"
|
||||||
|
},
|
||||||
|
"checkAttachment": "Vérification des pièces jointes sur le serveur..."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
17
src/i18n/fr/screens/imageViewer.json
Normal file
17
src/i18n/fr/screens/imageViewer.json
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"content": {
|
||||||
|
"actions": {
|
||||||
|
"accessibilityLabel": "Plus d'actions pour cette image",
|
||||||
|
"accessibilityHint": "Vous pouvez enregistrer ou partager cette image"
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"save": "Enregistrer l'image",
|
||||||
|
"share": "Partager l'image",
|
||||||
|
"cancel": "$t(common:buttons.cancel)"
|
||||||
|
},
|
||||||
|
"save": {
|
||||||
|
"succeed": "Image enregistrée",
|
||||||
|
"failed": "L'enregistrement de l'image a échoué"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
354
src/i18n/fr/screens/tabs.json
Normal file
354
src/i18n/fr/screens/tabs.json
Normal file
@ -0,0 +1,354 @@
|
|||||||
|
{
|
||||||
|
"tabs": {
|
||||||
|
"local": {
|
||||||
|
"name": "Suit"
|
||||||
|
},
|
||||||
|
"public": {
|
||||||
|
"name": "",
|
||||||
|
"segments": {
|
||||||
|
"left": "Fédéré",
|
||||||
|
"right": "Local"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notifications": {
|
||||||
|
"name": "Notifications"
|
||||||
|
},
|
||||||
|
"me": {
|
||||||
|
"name": "À propos de moi"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"common": {
|
||||||
|
"search": {
|
||||||
|
"accessibilityLabel": "Rechercher",
|
||||||
|
"accessibilityHint": "Rechercher des hashtags, des utilisateurs ou des pouets"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notifications": {
|
||||||
|
"filter": {
|
||||||
|
"accessibilityLabel": "Filtrer",
|
||||||
|
"accessibilityHint": "Filtrer les types de notifications affichés"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"me": {
|
||||||
|
"stacks": {
|
||||||
|
"bookmarks": {
|
||||||
|
"name": "Signets"
|
||||||
|
},
|
||||||
|
"conversations": {
|
||||||
|
"name": "Messages directs"
|
||||||
|
},
|
||||||
|
"favourites": {
|
||||||
|
"name": "Favoris"
|
||||||
|
},
|
||||||
|
"fontSize": {
|
||||||
|
"name": "Taille de la police de Pouet"
|
||||||
|
},
|
||||||
|
"language": {
|
||||||
|
"name": "Langue"
|
||||||
|
},
|
||||||
|
"lists": {
|
||||||
|
"name": "Listes"
|
||||||
|
},
|
||||||
|
"list": {
|
||||||
|
"name": "Liste : {{list}}"
|
||||||
|
},
|
||||||
|
"push": {
|
||||||
|
"name": "Push de Notification"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"name": "Modifier le profil"
|
||||||
|
},
|
||||||
|
"profileName": {
|
||||||
|
"name": "Editer le nom d'affichage"
|
||||||
|
},
|
||||||
|
"profileNote": {
|
||||||
|
"name": "Éditer la description"
|
||||||
|
},
|
||||||
|
"profileFields": {
|
||||||
|
"name": "Éditer les métadonnées"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"name": "Paramètres de l'application"
|
||||||
|
},
|
||||||
|
"webSettings": {
|
||||||
|
"name": "Plus de paramètres de compte"
|
||||||
|
},
|
||||||
|
"switch": {
|
||||||
|
"name": "Passer sur un autre compte"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fontSize": {
|
||||||
|
"demo": "<p>Ceci est un pouet de démo😊. Vous pouvez choisir parmi plusieurs options ci-dessous.<br /><br />Ce paramètre n'affecte que le contenu principal des pouets, mais pas les autres tailles de police.</p>",
|
||||||
|
"sizes": {
|
||||||
|
"S": "S",
|
||||||
|
"M": "M - Par Défaut",
|
||||||
|
"L": "L",
|
||||||
|
"XL": "XL",
|
||||||
|
"XXL": "XXL"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"cancellation": {
|
||||||
|
"title": "Modifications non sauvegardées",
|
||||||
|
"message": "Votre modification n'a pas été enregistrée. Voulez-vous annuler l'enregistrement des modifications ?",
|
||||||
|
"buttons": {
|
||||||
|
"cancel": "$t(common:buttons.cancel)",
|
||||||
|
"discard": "Ne pas tenir compte"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"feedback": {
|
||||||
|
"succeed": "{{type}} mis à jour",
|
||||||
|
"failed": "{{type}} Échec de la mise à jour, veuillez ré-essayer"
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"name": {
|
||||||
|
"title": "Nom Affiché"
|
||||||
|
},
|
||||||
|
"avatar": {
|
||||||
|
"title": "Avatar",
|
||||||
|
"description": "Sera réduit à 400x400px"
|
||||||
|
},
|
||||||
|
"header": {
|
||||||
|
"title": "Bandeau",
|
||||||
|
"description": "Sera réduit à 1500x500px"
|
||||||
|
},
|
||||||
|
"note": {
|
||||||
|
"title": "Description"
|
||||||
|
},
|
||||||
|
"fields": {
|
||||||
|
"title": "Metadonnés",
|
||||||
|
"total_one": "Champ {{count}}",
|
||||||
|
"total_other": "Champ {{count}}"
|
||||||
|
},
|
||||||
|
"visibility": {
|
||||||
|
"title": "Visibilité de la publication",
|
||||||
|
"options": {
|
||||||
|
"public": "Public",
|
||||||
|
"unlisted": "Non listé",
|
||||||
|
"private": "Abonné·e·s uniquement",
|
||||||
|
"cancel": "$t(common:buttons.cancel)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sensitive": {
|
||||||
|
"title": "Publication de médias sensibles"
|
||||||
|
},
|
||||||
|
"lock": {
|
||||||
|
"title": "Verrouiller le compte",
|
||||||
|
"description": "Nécessite que vous approuviez manuellement chaque abonné·e"
|
||||||
|
},
|
||||||
|
"bot": {
|
||||||
|
"title": "Compte Bot",
|
||||||
|
"description": "Ce compte effectue principalement des actions automatisées et peut ne pas être surveillé"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fields": {
|
||||||
|
"group": "Groupe {{index}}",
|
||||||
|
"label": "Étiquette",
|
||||||
|
"content": "Contenu"
|
||||||
|
},
|
||||||
|
"mediaSelectionFailed": "Le traitement de l'image a échoué. Veuillez réessayer."
|
||||||
|
},
|
||||||
|
"push": {
|
||||||
|
"notAvailable": "Votre téléphone ne prend pas en charge la notification push de tooot",
|
||||||
|
"enable": {
|
||||||
|
"direct": "Activer les notifications push",
|
||||||
|
"settings": "Activer dans les paramètres"
|
||||||
|
},
|
||||||
|
"global": {
|
||||||
|
"heading": "Activer pour {{acct}}",
|
||||||
|
"description": "Les messages sont acheminés via le serveur de tooot"
|
||||||
|
},
|
||||||
|
"decode": {
|
||||||
|
"heading": "Détails du message",
|
||||||
|
"description": "Les messages acheminés par le serveur de tooot sont chiffrés, mais vous pouvez choisir de décoder le message sur le serveur. Le code source de notre serveur est open source et aucune politique de log."
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"heading": "Par défaut"
|
||||||
|
},
|
||||||
|
"follow": {
|
||||||
|
"heading": "Nouvel abonné"
|
||||||
|
},
|
||||||
|
"follow_request": {
|
||||||
|
"heading": "Demande d'abonnement"
|
||||||
|
},
|
||||||
|
"favourite": {
|
||||||
|
"heading": "Dans les favoris"
|
||||||
|
},
|
||||||
|
"reblog": {
|
||||||
|
"heading": "Boosté"
|
||||||
|
},
|
||||||
|
"mention": {
|
||||||
|
"heading": "Vous a mentionné(e)"
|
||||||
|
},
|
||||||
|
"poll": {
|
||||||
|
"heading": "Mise à jour du sondage"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"heading": "Pouet des utilisateurs inscrits"
|
||||||
|
},
|
||||||
|
"howitworks": "Apprenez comment cela fonctionne"
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"announcements": {
|
||||||
|
"content": {
|
||||||
|
"unread": "{{amount}} non lus",
|
||||||
|
"read": "Tout lu",
|
||||||
|
"empty": "Aucun"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"push": {
|
||||||
|
"content": {
|
||||||
|
"enabled": "Activé",
|
||||||
|
"disabled": "Désactivé"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"update": {
|
||||||
|
"title": "Mettre à jour vers la dernière version"
|
||||||
|
},
|
||||||
|
"logout": {
|
||||||
|
"button": "Se déconnecter",
|
||||||
|
"alert": {
|
||||||
|
"title": "Déconnexion?",
|
||||||
|
"message": "Après vous être déconnecté, vous devez vous reconnecter",
|
||||||
|
"buttons": {
|
||||||
|
"logout": "Déconnexion",
|
||||||
|
"cancel": "$t(common:buttons.cancel)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"fontsize": {
|
||||||
|
"heading": "$t(me.stacks.fontSize.name)",
|
||||||
|
"content": {
|
||||||
|
"S": "$t(me.fontSize.sizes.S)",
|
||||||
|
"M": "$t(me.fontSize.sizes.M)",
|
||||||
|
"L": "$t(me.fontSize.sizes.L)",
|
||||||
|
"XL": "$t(me.fontSize.sizes.XL)",
|
||||||
|
"XXL": "$t(me.fontSize.sizes.XXL)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"language": {
|
||||||
|
"heading": "$t(me.stacks.language.name)",
|
||||||
|
"options": {
|
||||||
|
"cancel": "$t(common:buttons.cancel)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"theme": {
|
||||||
|
"heading": "Apparence",
|
||||||
|
"options": {
|
||||||
|
"auto": "Comme le système",
|
||||||
|
"light": "Mode Clair",
|
||||||
|
"dark": "Mode sombre",
|
||||||
|
"cancel": "$t(common:buttons.cancel)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"darkTheme": {
|
||||||
|
"heading": "Thème sombre",
|
||||||
|
"options": {
|
||||||
|
"lighter": "Plus claire",
|
||||||
|
"darker": "Plus sombre",
|
||||||
|
"cancel": "$t(common:buttons.cancel)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"browser": {
|
||||||
|
"heading": "Ouverture du lien",
|
||||||
|
"options": {
|
||||||
|
"internal": "Dans l'application",
|
||||||
|
"external": "Ouvrir dans le navigateur système",
|
||||||
|
"cancel": "$t(common:buttons.cancel)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"staticEmoji": {
|
||||||
|
"heading": "Utiliser des émojis statiques",
|
||||||
|
"description": "Si vous rencontrez des plantages fréquents de l'application lors de l'affichage de la liste d'émojis, vous pouvez essayer d'utiliser des émojis statiques."
|
||||||
|
},
|
||||||
|
"feedback": {
|
||||||
|
"heading": "Demande de fonctionnalités"
|
||||||
|
},
|
||||||
|
"support": {
|
||||||
|
"heading": "Support de tooot"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"heading": "Examiner le tooot"
|
||||||
|
},
|
||||||
|
"contact": {
|
||||||
|
"heading": "Contacter tooot"
|
||||||
|
},
|
||||||
|
"analytics": {
|
||||||
|
"heading": "Aidez-nous à nous améliorer",
|
||||||
|
"description": "Collecte uniquement de l'usage relatif des non-utilisateurs"
|
||||||
|
},
|
||||||
|
"version": "Version {{version}}",
|
||||||
|
"instanceVersion": "Version de Mastodon v{{version}}"
|
||||||
|
},
|
||||||
|
"switch": {
|
||||||
|
"existing": "Choisir parmi les utilisateurs connectés",
|
||||||
|
"new": "Connectez-vous à une instance"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"shared": {
|
||||||
|
"account": {
|
||||||
|
"actions": {
|
||||||
|
"accessibilityLabel": "Actions pour l'utilisateur {{user}}",
|
||||||
|
"accessibilityHint": "Vous pouvez masquer, bloquer, signaler ou partager cet utilisateur"
|
||||||
|
},
|
||||||
|
"followed_by": " vous suit",
|
||||||
|
"moved": "Utilisateur déplacé",
|
||||||
|
"created_at": "Inscrit le : {{date}}",
|
||||||
|
"summary": {
|
||||||
|
"statuses_count": "{{count}} pouets",
|
||||||
|
"following_count": "$t(shared.users.accounts.following)",
|
||||||
|
"followers_count": "$t(shared.users.accounts.followers)"
|
||||||
|
},
|
||||||
|
"toots": {
|
||||||
|
"default": "Pouets",
|
||||||
|
"all": "Pouets et réponses"
|
||||||
|
},
|
||||||
|
"suspended": "Compte suspendu par les modérateurs de votre serveur"
|
||||||
|
},
|
||||||
|
"attachments": {
|
||||||
|
"name": "<0 /><1>\"s media</1>"
|
||||||
|
},
|
||||||
|
"search": {
|
||||||
|
"header": {
|
||||||
|
"prefix": "Recherche en cours",
|
||||||
|
"placeholder": "pour..."
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"general": "Entrez le mot clé pour rechercher <bold>$t(screenTabs:shared.search.sections.accounts)</bold><unk><bold>$t(screenTabs:shared.search.sections.hashtags)</bold> ou <bold>$t(screenTabs:shared.search.sections.statuses)</bold>",
|
||||||
|
"advanced": {
|
||||||
|
"header": "Recherche avancée",
|
||||||
|
"example": {
|
||||||
|
"account": "$t(shared.search.header.prefix) $t(shared.search.sections.accounts)",
|
||||||
|
"hashtag": "$t(shared.search.header.prefix) $t(shared.search.sections.hashtags)",
|
||||||
|
"statusLink": "$t(shared.search.header.prefix) $t(shared.search.sections.statuses)",
|
||||||
|
"accountLink": "$t(shared.search.header.prefix) $t(shared.search.sections.accounts)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sections": {
|
||||||
|
"accounts": "Utilisateur",
|
||||||
|
"hashtags": "Hashtag",
|
||||||
|
"statuses": "Pouet"
|
||||||
|
},
|
||||||
|
"notFound": "Impossible de trouver <bold>{{searchTerm}}</bold> lié à {{type}}"
|
||||||
|
},
|
||||||
|
"toot": {
|
||||||
|
"name": "Discussions"
|
||||||
|
},
|
||||||
|
"users": {
|
||||||
|
"accounts": {
|
||||||
|
"following": "Abonnements {{count}}",
|
||||||
|
"followers": "{{count}} abonnés"
|
||||||
|
},
|
||||||
|
"statuses": {
|
||||||
|
"reblogged_by": "{{count}} boosté",
|
||||||
|
"favourited_by": "{{count}} mis en favori"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"name": "Modifier l'historique"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,15 +1,16 @@
|
|||||||
import i18n from 'i18next'
|
import i18n from 'i18next'
|
||||||
import { initReactI18next } from 'react-i18next'
|
import { initReactI18next } from 'react-i18next'
|
||||||
|
|
||||||
import de from '@root/i18n/de/_all'
|
import de from '@root/i18n/de'
|
||||||
import en from '@root/i18n/en/_all'
|
import en from '@root/i18n/en'
|
||||||
import it from '@root/i18n/it/_all'
|
import fr from '@root/i18n/fr'
|
||||||
import ja from '@root/i18n/ja/_all'
|
import it from '@root/i18n/it'
|
||||||
import ko from '@root/i18n/ko/_all'
|
import ja from '@root/i18n/ja'
|
||||||
import pt_BR from '@root/i18n/pt_BR/_all'
|
import ko from '@root/i18n/ko'
|
||||||
import vi from '@root/i18n/vi/_all'
|
import pt_BR from '@root/i18n/pt_BR'
|
||||||
import zh_Hans from '@root/i18n/zh-Hans/_all'
|
import vi from '@root/i18n/vi'
|
||||||
import zh_Hant from '@root/i18n/zh-Hant/_all'
|
import zh_Hans from '@root/i18n/zh-Hans'
|
||||||
|
import zh_Hant from '@root/i18n/zh-Hant'
|
||||||
|
|
||||||
import '@formatjs/intl-getcanonicallocales/polyfill'
|
import '@formatjs/intl-getcanonicallocales/polyfill'
|
||||||
import '@formatjs/intl-locale/polyfill'
|
import '@formatjs/intl-locale/polyfill'
|
||||||
@ -17,6 +18,7 @@ import '@formatjs/intl-locale/polyfill'
|
|||||||
import '@formatjs/intl-pluralrules/polyfill'
|
import '@formatjs/intl-pluralrules/polyfill'
|
||||||
import '@formatjs/intl-pluralrules/locale-data/de'
|
import '@formatjs/intl-pluralrules/locale-data/de'
|
||||||
import '@formatjs/intl-pluralrules/locale-data/en'
|
import '@formatjs/intl-pluralrules/locale-data/en'
|
||||||
|
import '@formatjs/intl-pluralrules/locale-data/fr'
|
||||||
import '@formatjs/intl-pluralrules/locale-data/it'
|
import '@formatjs/intl-pluralrules/locale-data/it'
|
||||||
import '@formatjs/intl-pluralrules/locale-data/ja'
|
import '@formatjs/intl-pluralrules/locale-data/ja'
|
||||||
import '@formatjs/intl-pluralrules/locale-data/ko'
|
import '@formatjs/intl-pluralrules/locale-data/ko'
|
||||||
@ -27,6 +29,7 @@ import '@formatjs/intl-pluralrules/locale-data/zh'
|
|||||||
import '@formatjs/intl-numberformat/polyfill'
|
import '@formatjs/intl-numberformat/polyfill'
|
||||||
import '@formatjs/intl-numberformat/locale-data/de'
|
import '@formatjs/intl-numberformat/locale-data/de'
|
||||||
import '@formatjs/intl-numberformat/locale-data/en'
|
import '@formatjs/intl-numberformat/locale-data/en'
|
||||||
|
import '@formatjs/intl-numberformat/locale-data/fr'
|
||||||
import '@formatjs/intl-numberformat/locale-data/it'
|
import '@formatjs/intl-numberformat/locale-data/it'
|
||||||
import '@formatjs/intl-numberformat/locale-data/ja'
|
import '@formatjs/intl-numberformat/locale-data/ja'
|
||||||
import '@formatjs/intl-numberformat/locale-data/ko'
|
import '@formatjs/intl-numberformat/locale-data/ko'
|
||||||
@ -38,6 +41,7 @@ import '@formatjs/intl-numberformat/locale-data/zh-Hant'
|
|||||||
import '@formatjs/intl-datetimeformat/polyfill'
|
import '@formatjs/intl-datetimeformat/polyfill'
|
||||||
import '@formatjs/intl-datetimeformat/locale-data/de'
|
import '@formatjs/intl-datetimeformat/locale-data/de'
|
||||||
import '@formatjs/intl-datetimeformat/locale-data/en'
|
import '@formatjs/intl-datetimeformat/locale-data/en'
|
||||||
|
import '@formatjs/intl-datetimeformat/locale-data/fr'
|
||||||
import '@formatjs/intl-datetimeformat/locale-data/it'
|
import '@formatjs/intl-datetimeformat/locale-data/it'
|
||||||
import '@formatjs/intl-datetimeformat/locale-data/ja'
|
import '@formatjs/intl-datetimeformat/locale-data/ja'
|
||||||
import '@formatjs/intl-datetimeformat/locale-data/ko'
|
import '@formatjs/intl-datetimeformat/locale-data/ko'
|
||||||
@ -50,6 +54,7 @@ import '@formatjs/intl-datetimeformat/add-all-tz'
|
|||||||
import '@formatjs/intl-relativetimeformat/polyfill'
|
import '@formatjs/intl-relativetimeformat/polyfill'
|
||||||
import '@formatjs/intl-relativetimeformat/locale-data/de'
|
import '@formatjs/intl-relativetimeformat/locale-data/de'
|
||||||
import '@formatjs/intl-relativetimeformat/locale-data/en'
|
import '@formatjs/intl-relativetimeformat/locale-data/en'
|
||||||
|
import '@formatjs/intl-relativetimeformat/locale-data/fr'
|
||||||
import '@formatjs/intl-relativetimeformat/locale-data/it'
|
import '@formatjs/intl-relativetimeformat/locale-data/it'
|
||||||
import '@formatjs/intl-relativetimeformat/locale-data/ja'
|
import '@formatjs/intl-relativetimeformat/locale-data/ja'
|
||||||
import '@formatjs/intl-relativetimeformat/locale-data/ko'
|
import '@formatjs/intl-relativetimeformat/locale-data/ko'
|
||||||
@ -65,7 +70,7 @@ i18n.use(initReactI18next).init({
|
|||||||
ns: ['common'],
|
ns: ['common'],
|
||||||
defaultNS: 'common',
|
defaultNS: 'common',
|
||||||
|
|
||||||
resources: { de, en, it, ja, ko, 'pt-BR': pt_BR, vi, 'zh-Hans': zh_Hans, 'zh-Hant': zh_Hant },
|
resources: { de, en, fr, it, ja, ko, 'pt-BR': pt_BR, vi, 'zh-Hans': zh_Hans, 'zh-Hant': zh_Hant },
|
||||||
returnEmptyString: false,
|
returnEmptyString: false,
|
||||||
|
|
||||||
saveMissing: true,
|
saveMissing: true,
|
||||||
|
@ -304,7 +304,8 @@
|
|||||||
"toots": {
|
"toots": {
|
||||||
"default": "Toot",
|
"default": "Toot",
|
||||||
"all": "Toot e risposte"
|
"all": "Toot e risposte"
|
||||||
}
|
},
|
||||||
|
"suspended": ""
|
||||||
},
|
},
|
||||||
"attachments": {
|
"attachments": {
|
||||||
"name": "Media di <0 /><1>\"</1>"
|
"name": "Media di <0 /><1>\"</1>"
|
||||||
|
@ -304,7 +304,8 @@
|
|||||||
"toots": {
|
"toots": {
|
||||||
"default": "投稿",
|
"default": "投稿",
|
||||||
"all": "投稿と返信"
|
"all": "投稿と返信"
|
||||||
}
|
},
|
||||||
|
"suspended": ""
|
||||||
},
|
},
|
||||||
"attachments": {
|
"attachments": {
|
||||||
"name": "<0 /><1>\" のメディア</1>"
|
"name": "<0 /><1>\" のメディア</1>"
|
||||||
|
@ -304,7 +304,8 @@
|
|||||||
"toots": {
|
"toots": {
|
||||||
"default": "툿",
|
"default": "툿",
|
||||||
"all": "툿과 답장"
|
"all": "툿과 답장"
|
||||||
}
|
},
|
||||||
|
"suspended": ""
|
||||||
},
|
},
|
||||||
"attachments": {
|
"attachments": {
|
||||||
"name": "<0 /><1>\"의 미디어</1>"
|
"name": "<0 /><1>\"의 미디어</1>"
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
const LOCALES = {
|
const LOCALES = {
|
||||||
de: 'Deutsch',
|
de: 'Deutsch',
|
||||||
en: 'English',
|
en: 'English',
|
||||||
|
fr: 'Français',
|
||||||
it: 'Italiano',
|
it: 'Italiano',
|
||||||
ja: '日本語',
|
ja: '日本語',
|
||||||
ko: '한국어',
|
ko: '한국어',
|
||||||
|
@ -304,7 +304,8 @@
|
|||||||
"toots": {
|
"toots": {
|
||||||
"default": "Toots",
|
"default": "Toots",
|
||||||
"all": "Toots e respostas"
|
"all": "Toots e respostas"
|
||||||
}
|
},
|
||||||
|
"suspended": ""
|
||||||
},
|
},
|
||||||
"attachments": {
|
"attachments": {
|
||||||
"name": "<0 /><1>\"s mídia</1>"
|
"name": "<0 /><1>\"s mídia</1>"
|
||||||
|
@ -304,7 +304,8 @@
|
|||||||
"toots": {
|
"toots": {
|
||||||
"default": "Tút",
|
"default": "Tút",
|
||||||
"all": "Lượt trả lời"
|
"all": "Lượt trả lời"
|
||||||
}
|
},
|
||||||
|
"suspended": ""
|
||||||
},
|
},
|
||||||
"attachments": {
|
"attachments": {
|
||||||
"name": "<0 /><1>'s media</1>"
|
"name": "<0 /><1>'s media</1>"
|
||||||
|
@ -304,7 +304,8 @@
|
|||||||
"toots": {
|
"toots": {
|
||||||
"default": "嘟文",
|
"default": "嘟文",
|
||||||
"all": "嘟文和回复"
|
"all": "嘟文和回复"
|
||||||
}
|
},
|
||||||
|
"suspended": "此账户已被服务器管理员停用"
|
||||||
},
|
},
|
||||||
"attachments": {
|
"attachments": {
|
||||||
"name": "<0 /><1>的媒体</1>"
|
"name": "<0 /><1>的媒体</1>"
|
||||||
|
18
src/i18n/zh-Hant/index.ts
Normal file
18
src/i18n/zh-Hant/index.ts
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
export default {
|
||||||
|
common: require('./common'),
|
||||||
|
|
||||||
|
screens: require('./screens'),
|
||||||
|
screenActions: require('./screens/actions'),
|
||||||
|
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')
|
||||||
|
}
|
@ -304,7 +304,8 @@
|
|||||||
"toots": {
|
"toots": {
|
||||||
"default": "嘟文",
|
"default": "嘟文",
|
||||||
"all": "嘟文與回覆"
|
"all": "嘟文與回覆"
|
||||||
}
|
},
|
||||||
|
"suspended": ""
|
||||||
},
|
},
|
||||||
"attachments": {
|
"attachments": {
|
||||||
"name": "<0 /><1>的媒體</1>"
|
"name": "<0 /><1>的媒體</1>"
|
||||||
|
@ -28,7 +28,7 @@ const ActionsAccount: React.FC<Props> = ({
|
|||||||
const { t } = useTranslation('componentTimeline')
|
const { t } = useTranslation('componentTimeline')
|
||||||
|
|
||||||
const queryClient = useQueryClient()
|
const queryClient = useQueryClient()
|
||||||
const mutateion = useTimelineMutation({
|
const mutation = useTimelineMutation({
|
||||||
onSuccess: (_, params) => {
|
onSuccess: (_, params) => {
|
||||||
const theParams = params as MutationVarsTimelineUpdateAccountProperty
|
const theParams = params as MutationVarsTimelineUpdateAccountProperty
|
||||||
displayMessage({
|
displayMessage({
|
||||||
@ -78,7 +78,7 @@ const ActionsAccount: React.FC<Props> = ({
|
|||||||
page: queryKey && queryKey[1].page
|
page: queryKey && queryKey[1].page
|
||||||
})
|
})
|
||||||
dismiss()
|
dismiss()
|
||||||
mutateion.mutate({
|
mutation.mutate({
|
||||||
type: 'updateAccountProperty',
|
type: 'updateAccountProperty',
|
||||||
queryKey,
|
queryKey,
|
||||||
id: account.id,
|
id: account.id,
|
||||||
@ -96,7 +96,7 @@ const ActionsAccount: React.FC<Props> = ({
|
|||||||
page: queryKey && queryKey[1].page
|
page: queryKey && queryKey[1].page
|
||||||
})
|
})
|
||||||
dismiss()
|
dismiss()
|
||||||
mutateion.mutate({
|
mutation.mutate({
|
||||||
type: 'updateAccountProperty',
|
type: 'updateAccountProperty',
|
||||||
queryKey,
|
queryKey,
|
||||||
id: account.id,
|
id: account.id,
|
||||||
@ -114,7 +114,7 @@ const ActionsAccount: React.FC<Props> = ({
|
|||||||
page: queryKey && queryKey[1].page
|
page: queryKey && queryKey[1].page
|
||||||
})
|
})
|
||||||
dismiss()
|
dismiss()
|
||||||
mutateion.mutate({
|
mutation.mutate({
|
||||||
type: 'updateAccountProperty',
|
type: 'updateAccountProperty',
|
||||||
queryKey,
|
queryKey,
|
||||||
id: account.id,
|
id: account.id,
|
||||||
|
@ -144,7 +144,7 @@ const ScreenAnnouncements: React.FC<
|
|||||||
: colors.backgroundDefault
|
: colors.backgroundDefault
|
||||||
}}
|
}}
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
analytics('accnouncement_reaction_press', {
|
analytics('announcement_reaction_press', {
|
||||||
current: reaction.me
|
current: reaction.me
|
||||||
})
|
})
|
||||||
mutation.mutate({
|
mutation.mutate({
|
||||||
@ -203,7 +203,7 @@ const ScreenAnnouncements: React.FC<
|
|||||||
loading={mutation.isLoading}
|
loading={mutation.isLoading}
|
||||||
disabled={item.read}
|
disabled={item.read}
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
analytics('accnouncement_read_press')
|
analytics('announcement_read_press')
|
||||||
!item.read &&
|
!item.read &&
|
||||||
mutation.mutate({
|
mutation.mutate({
|
||||||
id: item.id,
|
id: item.id,
|
||||||
|
@ -5,8 +5,8 @@ import { HeaderLeft, HeaderRight } from '@components/Header'
|
|||||||
import { createNativeStackNavigator } from '@react-navigation/native-stack'
|
import { createNativeStackNavigator } from '@react-navigation/native-stack'
|
||||||
import haptics from '@root/components/haptics'
|
import haptics from '@root/components/haptics'
|
||||||
import { useAppDispatch } from '@root/store'
|
import { useAppDispatch } from '@root/store'
|
||||||
import formatText from '@screens/Compose/formatText'
|
|
||||||
import ComposeRoot from '@screens/Compose/Root'
|
import ComposeRoot from '@screens/Compose/Root'
|
||||||
|
import formatText from '@screens/Compose/utils/formatText'
|
||||||
import * as Sentry from '@sentry/react-native'
|
import * as Sentry from '@sentry/react-native'
|
||||||
import { RootStackScreenProps } from '@utils/navigation/navigators'
|
import { RootStackScreenProps } from '@utils/navigation/navigators'
|
||||||
import { useTimelineMutation } from '@utils/queryHooks/timeline'
|
import { useTimelineMutation } from '@utils/queryHooks/timeline'
|
||||||
|
@ -14,8 +14,8 @@ import { Dimensions, Image, Modal, Platform, Pressable, View } from 'react-nativ
|
|||||||
import { PanGestureHandler } from 'react-native-gesture-handler'
|
import { PanGestureHandler } from 'react-native-gesture-handler'
|
||||||
import { SwipeListView } from 'react-native-swipe-list-view'
|
import { SwipeListView } from 'react-native-swipe-list-view'
|
||||||
import { useSelector } from 'react-redux'
|
import { useSelector } from 'react-redux'
|
||||||
import formatText from '../formatText'
|
|
||||||
import ComposeContext from '../utils/createContext'
|
import ComposeContext from '../utils/createContext'
|
||||||
|
import formatText from '../utils/formatText'
|
||||||
import { ComposeStateDraft, ExtendedAttachment } from '../utils/types'
|
import { ComposeStateDraft, ExtendedAttachment } from '../utils/types'
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
|
@ -34,7 +34,7 @@ const ComposeEditAttachmentImage: React.FC<Props> = ({ index }) => {
|
|||||||
theAttachmentRemote?.meta?.original?.aspect < 1
|
theAttachmentRemote?.meta?.original?.aspect < 1
|
||||||
? windowWidth * theAttachmentRemote?.meta?.original?.aspect
|
? windowWidth * theAttachmentRemote?.meta?.original?.aspect
|
||||||
: windowWidth
|
: windowWidth
|
||||||
const imageDimensionis = {
|
const imageDimensions = {
|
||||||
width: imageWidthBase,
|
width: imageWidthBase,
|
||||||
height:
|
height:
|
||||||
imageWidthBase /
|
imageWidthBase /
|
||||||
@ -60,11 +60,11 @@ const ComposeEditAttachmentImage: React.FC<Props> = ({ index }) => {
|
|||||||
const pan = useSharedValue({
|
const pan = useSharedValue({
|
||||||
x:
|
x:
|
||||||
(((theAttachmentRemote as Mastodon.AttachmentImage)?.meta?.focus?.x || 0) *
|
(((theAttachmentRemote as Mastodon.AttachmentImage)?.meta?.focus?.x || 0) *
|
||||||
imageDimensionis.width) /
|
imageDimensions.width) /
|
||||||
2,
|
2,
|
||||||
y:
|
y:
|
||||||
(((theAttachmentRemote as Mastodon.AttachmentImage)?.meta?.focus?.y || 0) *
|
(((theAttachmentRemote as Mastodon.AttachmentImage)?.meta?.focus?.y || 0) *
|
||||||
imageDimensionis.height) /
|
imageDimensions.height) /
|
||||||
2
|
2
|
||||||
})
|
})
|
||||||
const start = useSharedValue({ x: 0, y: 0 })
|
const start = useSharedValue({ x: 0, y: 0 })
|
||||||
@ -80,8 +80,8 @@ const ComposeEditAttachmentImage: React.FC<Props> = ({ index }) => {
|
|||||||
})
|
})
|
||||||
.onEnd(() => {
|
.onEnd(() => {
|
||||||
runOnJS(updateFocus)({
|
runOnJS(updateFocus)({
|
||||||
x: pan.value.x / (imageDimensionis.width / 2),
|
x: pan.value.x / (imageDimensions.width / 2),
|
||||||
y: pan.value.y / (imageDimensionis.height / 2)
|
y: pan.value.y / (imageDimensions.height / 2)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.onFinalize(() => {
|
.onFinalize(() => {
|
||||||
@ -93,16 +93,16 @@ const ComposeEditAttachmentImage: React.FC<Props> = ({ index }) => {
|
|||||||
{
|
{
|
||||||
translateX: interpolate(
|
translateX: interpolate(
|
||||||
pan.value.x,
|
pan.value.x,
|
||||||
[-imageDimensionis.width / 2, imageDimensionis.width / 2],
|
[-imageDimensions.width / 2, imageDimensions.width / 2],
|
||||||
[-imageDimensionis.width / 2, imageDimensionis.width / 2],
|
[-imageDimensions.width / 2, imageDimensions.width / 2],
|
||||||
Extrapolate.CLAMP
|
Extrapolate.CLAMP
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
translateY: interpolate(
|
translateY: interpolate(
|
||||||
pan.value.y,
|
pan.value.y,
|
||||||
[-imageDimensionis.height / 2, imageDimensionis.height / 2],
|
[-imageDimensions.height / 2, imageDimensions.height / 2],
|
||||||
[-imageDimensionis.height / 2, imageDimensionis.height / 2],
|
[-imageDimensions.height / 2, imageDimensions.height / 2],
|
||||||
Extrapolate.CLAMP
|
Extrapolate.CLAMP
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -115,8 +115,8 @@ const ComposeEditAttachmentImage: React.FC<Props> = ({ index }) => {
|
|||||||
<View style={{ overflow: 'hidden', flex: 1, alignItems: 'center' }}>
|
<View style={{ overflow: 'hidden', flex: 1, alignItems: 'center' }}>
|
||||||
<Image
|
<Image
|
||||||
style={{
|
style={{
|
||||||
width: imageDimensionis.width,
|
width: imageDimensions.width,
|
||||||
height: imageDimensionis.height
|
height: imageDimensions.height
|
||||||
}}
|
}}
|
||||||
source={{
|
source={{
|
||||||
uri: theAttachmentLocal?.uri ? theAttachmentLocal.uri : theAttachmentRemote?.preview_url
|
uri: theAttachmentLocal?.uri ? theAttachmentLocal.uri : theAttachmentRemote?.preview_url
|
||||||
@ -128,10 +128,10 @@ const ComposeEditAttachmentImage: React.FC<Props> = ({ index }) => {
|
|||||||
styleTransform,
|
styleTransform,
|
||||||
{
|
{
|
||||||
width: windowWidth * 2,
|
width: windowWidth * 2,
|
||||||
height: imageDimensionis.height * 2,
|
height: imageDimensions.height * 2,
|
||||||
position: 'absolute',
|
position: 'absolute',
|
||||||
left: -windowWidth / 2,
|
left: -windowWidth / 2,
|
||||||
top: -imageDimensionis.height / 2,
|
top: -imageDimensions.height / 2,
|
||||||
backgroundColor: colors.backgroundOverlayInvert,
|
backgroundColor: colors.backgroundOverlayInvert,
|
||||||
flexDirection: 'row',
|
flexDirection: 'row',
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
|
@ -7,8 +7,8 @@ import React, { useContext } from 'react'
|
|||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import { TextInput } from 'react-native'
|
import { TextInput } from 'react-native'
|
||||||
import { useSelector } from 'react-redux'
|
import { useSelector } from 'react-redux'
|
||||||
import formatText from '../../formatText'
|
|
||||||
import ComposeContext from '../../utils/createContext'
|
import ComposeContext from '../../utils/createContext'
|
||||||
|
import formatText from '../../utils/formatText'
|
||||||
|
|
||||||
const ComposeSpoilerInput: React.FC = () => {
|
const ComposeSpoilerInput: React.FC = () => {
|
||||||
const { composeState, composeDispatch } = useContext(ComposeContext)
|
const { composeState, composeDispatch } = useContext(ComposeContext)
|
||||||
|
@ -9,8 +9,8 @@ import React, { useContext } from 'react'
|
|||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import { Alert } from 'react-native'
|
import { Alert } from 'react-native'
|
||||||
import { useSelector } from 'react-redux'
|
import { useSelector } from 'react-redux'
|
||||||
import formatText from '../../formatText'
|
|
||||||
import ComposeContext from '../../utils/createContext'
|
import ComposeContext from '../../utils/createContext'
|
||||||
|
import formatText from '../../utils/formatText'
|
||||||
import { uploadAttachment } from '../Footer/addAttachment'
|
import { uploadAttachment } from '../Footer/addAttachment'
|
||||||
|
|
||||||
const ComposeTextInput: React.FC = () => {
|
const ComposeTextInput: React.FC = () => {
|
||||||
|
@ -3,8 +3,8 @@ import analytics from '@components/analytics'
|
|||||||
import haptics from '@components/haptics'
|
import haptics from '@components/haptics'
|
||||||
import ComponentHashtag from '@components/Hashtag'
|
import ComponentHashtag from '@components/Hashtag'
|
||||||
import React, { useContext, useEffect } from 'react'
|
import React, { useContext, useEffect } from 'react'
|
||||||
import formatText from '../formatText'
|
|
||||||
import ComposeContext from '../utils/createContext'
|
import ComposeContext from '../utils/createContext'
|
||||||
|
import formatText from '../utils/formatText'
|
||||||
|
|
||||||
type Props = { item: Mastodon.Account & Mastodon.Tag }
|
type Props = { item: Mastodon.Account & Mastodon.Tag }
|
||||||
|
|
||||||
|
@ -3,8 +3,8 @@ import { debounce, differenceWith, isEqual } from 'lodash'
|
|||||||
import React, { Dispatch } from 'react'
|
import React, { Dispatch } from 'react'
|
||||||
import { FetchOptions } from 'react-query/types/core/query'
|
import { FetchOptions } from 'react-query/types/core/query'
|
||||||
import { useTheme } from '@utils/styles/ThemeManager'
|
import { useTheme } from '@utils/styles/ThemeManager'
|
||||||
import { ComposeAction, ComposeState } from './utils/types'
|
import { ComposeAction, ComposeState } from './types'
|
||||||
import { instanceConfigurationStatusCharsURL } from './Root'
|
import { instanceConfigurationStatusCharsURL } from '../Root'
|
||||||
import CustomText from '@components/Text'
|
import CustomText from '@components/Text'
|
||||||
import { emojis } from '@components/Emojis'
|
import { emojis } from '@components/Emojis'
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ linkify
|
|||||||
var tail = text.slice(pos)
|
var tail = text.slice(pos)
|
||||||
|
|
||||||
if (!self.re.hashtag) {
|
if (!self.re.hashtag) {
|
||||||
self.re.hashtag = new RegExp('^[A-Za-z0-9_]+')
|
self.re.hashtag = new RegExp('^[\\S]+')
|
||||||
}
|
}
|
||||||
if (self.re.hashtag.test(tail)) {
|
if (self.re.hashtag.test(tail)) {
|
||||||
return tail.match(self.re.hashtag)![0].length
|
return tail.match(self.re.hashtag)![0].length
|
@ -9,7 +9,6 @@ import { useTranslation } from 'react-i18next'
|
|||||||
import {
|
import {
|
||||||
Dimensions,
|
Dimensions,
|
||||||
FlatList,
|
FlatList,
|
||||||
Image,
|
|
||||||
PixelRatio,
|
PixelRatio,
|
||||||
Platform,
|
Platform,
|
||||||
Share,
|
Share,
|
||||||
@ -102,7 +101,8 @@ const ScreenImagesViewer = ({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Zoom
|
<Zoom
|
||||||
isZoomed={isZoomed}
|
onZoomBegin={() => (isZoomed.value = true)}
|
||||||
|
onZoomEnd={() => (isZoomed.value = false)}
|
||||||
maximumZoomScale={max > 8 ? 8 : max}
|
maximumZoomScale={max > 8 ? 8 : max}
|
||||||
simultaneousGesture={Gesture.Fling()
|
simultaneousGesture={Gesture.Fling()
|
||||||
.direction(Directions.DOWN)
|
.direction(Directions.DOWN)
|
||||||
|
@ -12,7 +12,7 @@ import {
|
|||||||
getInstanceAccount,
|
getInstanceAccount,
|
||||||
getInstanceActive
|
getInstanceActive
|
||||||
} from '@utils/slices/instancesSlice'
|
} from '@utils/slices/instancesSlice'
|
||||||
import { getVersionUpdate, retriveVersionLatest } from '@utils/slices/appSlice'
|
import { getVersionUpdate, retrieveVersionLatest } from '@utils/slices/appSlice'
|
||||||
import { useTheme } from '@utils/styles/ThemeManager'
|
import { useTheme } from '@utils/styles/ThemeManager'
|
||||||
import React, { useCallback, useEffect, useMemo } from 'react'
|
import React, { useCallback, useEffect, useMemo } from 'react'
|
||||||
import { Platform } from 'react-native'
|
import { Platform } from 'react-native'
|
||||||
@ -64,7 +64,7 @@ const ScreenTabs = React.memo(
|
|||||||
const versionUpdate = useSelector(getVersionUpdate)
|
const versionUpdate = useSelector(getVersionUpdate)
|
||||||
const dispatch = useAppDispatch()
|
const dispatch = useAppDispatch()
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
dispatch(retriveVersionLatest())
|
dispatch(retrieveVersionLatest())
|
||||||
}, [])
|
}, [])
|
||||||
const tabMeOptions = useMemo(() => {
|
const tabMeOptions = useMemo(() => {
|
||||||
if (versionUpdate) {
|
if (versionUpdate) {
|
||||||
|
@ -51,9 +51,9 @@ const TabLocal = React.memo(
|
|||||||
]
|
]
|
||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
onPress={({ nativeEvent: { id } }) => {
|
onPress={({ nativeEvent: { index } }) => {
|
||||||
id.length
|
lists && index
|
||||||
? setQueryKey(['Timeline', { page: 'List', list: id }])
|
? setQueryKey(['Timeline', { page: 'List', list: lists[index - 1].id }])
|
||||||
: setQueryKey(['Timeline', { page: 'Following' }])
|
: setQueryKey(['Timeline', { page: 'Following' }])
|
||||||
}}
|
}}
|
||||||
children={
|
children={
|
||||||
|
@ -6,9 +6,9 @@ import { useAccountQuery } from '@utils/queryHooks/account'
|
|||||||
import { QueryKeyTimeline } from '@utils/queryHooks/timeline'
|
import { QueryKeyTimeline } from '@utils/queryHooks/timeline'
|
||||||
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, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
import React, { useEffect, useMemo, useRef, useState } from 'react'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import { StyleSheet, View } from 'react-native'
|
import { StyleSheet, Text, View } from 'react-native'
|
||||||
import { useSharedValue } from 'react-native-reanimated'
|
import { useSharedValue } from 'react-native-reanimated'
|
||||||
import { useIsFetching } from 'react-query'
|
import { useIsFetching } from 'react-query'
|
||||||
import AccountAttachments from './Account/Attachments'
|
import AccountAttachments from './Account/Attachments'
|
||||||
@ -16,9 +16,7 @@ import AccountHeader from './Account/Header'
|
|||||||
import AccountInformation from './Account/Information'
|
import AccountInformation from './Account/Information'
|
||||||
import AccountNav from './Account/Nav'
|
import AccountNav from './Account/Nav'
|
||||||
|
|
||||||
const TabSharedAccount: React.FC<
|
const TabSharedAccount: React.FC<TabSharedStackScreenProps<'Tab-Shared-Account'>> = ({
|
||||||
TabSharedStackScreenProps<'Tab-Shared-Account'>
|
|
||||||
> = ({
|
|
||||||
route: {
|
route: {
|
||||||
params: { account }
|
params: { account }
|
||||||
}
|
}
|
||||||
@ -48,35 +46,42 @@ const TabSharedAccount: React.FC<
|
|||||||
<View style={[styles.header, { borderBottomColor: colors.border }]}>
|
<View style={[styles.header, { borderBottomColor: colors.border }]}>
|
||||||
<AccountHeader account={data} />
|
<AccountHeader account={data} />
|
||||||
<AccountInformation account={data} />
|
<AccountInformation account={data} />
|
||||||
{fetchedTimeline.current ? (
|
{!data?.suspended && fetchedTimeline.current ? (
|
||||||
<AccountAttachments account={data} />
|
<AccountAttachments account={data} />
|
||||||
) : null}
|
) : null}
|
||||||
</View>
|
</View>
|
||||||
<SegmentedControl
|
{!data?.suspended ? (
|
||||||
appearance={mode}
|
<SegmentedControl
|
||||||
values={[
|
appearance={mode}
|
||||||
t('shared.account.toots.default'),
|
values={[t('shared.account.toots.default'), t('shared.account.toots.all')]}
|
||||||
t('shared.account.toots.all')
|
selectedIndex={queryKey[1].page === 'Account_Default' ? 0 : 1}
|
||||||
]}
|
onChange={({ nativeEvent }) => {
|
||||||
selectedIndex={queryKey[1].page === 'Account_Default' ? 0 : 1}
|
switch (nativeEvent.selectedSegmentIndex) {
|
||||||
onChange={({ nativeEvent }) => {
|
case 0:
|
||||||
switch (nativeEvent.selectedSegmentIndex) {
|
setQueryKey([queryKey[0], { ...queryKey[1], page: 'Account_Default' }])
|
||||||
case 0:
|
break
|
||||||
setQueryKey([
|
case 1:
|
||||||
queryKey[0],
|
setQueryKey([queryKey[0], { ...queryKey[1], page: 'Account_All' }])
|
||||||
{ ...queryKey[1], page: 'Account_Default' }
|
break
|
||||||
])
|
}
|
||||||
break
|
}}
|
||||||
case 1:
|
style={styles.segmentsContainer}
|
||||||
setQueryKey([
|
/>
|
||||||
queryKey[0],
|
) : null}
|
||||||
{ ...queryKey[1], page: 'Account_All' }
|
{data?.suspended ? (
|
||||||
])
|
<View
|
||||||
break
|
style={{
|
||||||
}
|
flex: 1,
|
||||||
}}
|
justifyContent: 'center',
|
||||||
style={styles.segmentsContainer}
|
alignItems: 'center',
|
||||||
/>
|
paddingHorizontal: StyleConstants.Spacing.Global.PagePadding
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Text style={{ ...StyleConstants.FontStyle.M, color: colors.secondary, textAlign: 'center' }}>
|
||||||
|
{t('shared.account.suspended')}
|
||||||
|
</Text>
|
||||||
|
</View>
|
||||||
|
) : null}
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
}, [data, fetchedTimeline.current, queryKey[1].page, i18n.language, mode])
|
}, [data, fetchedTimeline.current, queryKey[1].page, i18n.language, mode])
|
||||||
@ -85,19 +90,20 @@ const TabSharedAccount: React.FC<
|
|||||||
<>
|
<>
|
||||||
<AccountNav scrollY={scrollY} account={data} />
|
<AccountNav scrollY={scrollY} account={data} />
|
||||||
|
|
||||||
<Timeline
|
{data?.suspended ? (
|
||||||
queryKey={queryKey}
|
ListHeaderComponent
|
||||||
disableRefresh
|
) : (
|
||||||
customProps={{
|
<Timeline
|
||||||
renderItem: ({ item }) => (
|
queryKey={queryKey}
|
||||||
<TimelineDefault item={item} queryKey={queryKey} />
|
disableRefresh
|
||||||
),
|
customProps={{
|
||||||
onScroll: ({ nativeEvent }) =>
|
renderItem: ({ item }) => <TimelineDefault item={item} queryKey={queryKey} />,
|
||||||
(scrollY.value = nativeEvent.contentOffset.y),
|
onScroll: ({ nativeEvent }) => (scrollY.value = nativeEvent.contentOffset.y),
|
||||||
ListHeaderComponent,
|
ListHeaderComponent,
|
||||||
maintainVisibleContentPosition: undefined
|
maintainVisibleContentPosition: undefined
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
)}
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ const AccountInformationAccount: React.FC<Props> = ({
|
|||||||
) : null}
|
) : null}
|
||||||
<CustomText
|
<CustomText
|
||||||
style={{
|
style={{
|
||||||
textDecorationLine: account?.moved ? 'line-through' : undefined
|
textDecorationLine: (account?.moved || account?.suspended) ? 'line-through' : undefined
|
||||||
}}
|
}}
|
||||||
selectable
|
selectable
|
||||||
>
|
>
|
||||||
|
@ -37,7 +37,7 @@ const Conversation = ({ account }: { account: Mastodon.Account }) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const AccountInformationActions: React.FC<Props> = ({ account, myInfo }) => {
|
const AccountInformationActions: React.FC<Props> = ({ account, myInfo }) => {
|
||||||
if (!account) {
|
if (!account || account.suspended) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ export interface Props {
|
|||||||
|
|
||||||
const AccountInformationFields = React.memo(
|
const AccountInformationFields = React.memo(
|
||||||
({ account, myInfo }: Props) => {
|
({ account, myInfo }: Props) => {
|
||||||
if (myInfo || !account?.fields || account.fields.length === 0) {
|
if (account?.suspended || myInfo || !account?.fields || account.fields.length === 0) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -21,13 +21,8 @@ const AccountInformationFields = React.memo(
|
|||||||
return (
|
return (
|
||||||
<View style={[styles.fields, { borderTopColor: colors.border }]}>
|
<View style={[styles.fields, { borderTopColor: colors.border }]}>
|
||||||
{account.fields.map((field, index) => (
|
{account.fields.map((field, index) => (
|
||||||
<View
|
<View key={index} style={[styles.field, { borderBottomColor: colors.border }]}>
|
||||||
key={index}
|
<View style={[styles.fieldLeft, { borderRightColor: colors.border }]}>
|
||||||
style={[styles.field, { borderBottomColor: colors.border }]}
|
|
||||||
>
|
|
||||||
<View
|
|
||||||
style={[styles.fieldLeft, { borderRightColor: colors.border }]}
|
|
||||||
>
|
|
||||||
<ParseHTML
|
<ParseHTML
|
||||||
content={field.name}
|
content={field.name}
|
||||||
size={'S'}
|
size={'S'}
|
||||||
|
@ -41,7 +41,7 @@ const AccountInformationName: React.FC<Props> = ({ account }) => {
|
|||||||
<>
|
<>
|
||||||
<CustomText
|
<CustomText
|
||||||
style={{
|
style={{
|
||||||
textDecorationLine: account?.moved ? 'line-through' : undefined
|
textDecorationLine: account?.moved || account.suspended ? 'line-through' : undefined
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<ParseEmojis
|
<ParseEmojis
|
||||||
|
@ -12,6 +12,7 @@ const AccountInformationNote = React.memo(
|
|||||||
({ account, myInfo }: Props) => {
|
({ account, myInfo }: Props) => {
|
||||||
const [note, setNote] = useState(account?.source?.note)
|
const [note, setNote] = useState(account?.source?.note)
|
||||||
if (
|
if (
|
||||||
|
account?.suspended ||
|
||||||
myInfo ||
|
myInfo ||
|
||||||
!account?.note ||
|
!account?.note ||
|
||||||
account.note.length === 0 ||
|
account.note.length === 0 ||
|
||||||
|
@ -16,8 +16,11 @@ export interface Props {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const AccountInformationStats: React.FC<Props> = ({ account, myInfo }) => {
|
const AccountInformationStats: React.FC<Props> = ({ account, myInfo }) => {
|
||||||
const navigation =
|
if (account?.suspended) {
|
||||||
useNavigation<StackNavigationProp<TabLocalStackParamList>>()
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
const navigation = useNavigation<StackNavigationProp<TabLocalStackParamList>>()
|
||||||
const { colors } = useTheme()
|
const { colors } = useTheme()
|
||||||
const { t } = useTranslation('screenTabs')
|
const { t } = useTranslation('screenTabs')
|
||||||
|
|
||||||
@ -31,9 +34,7 @@ const AccountInformationStats: React.FC<Props> = ({ account, myInfo }) => {
|
|||||||
})}
|
})}
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
analytics('account_stats_toots_press')
|
analytics('account_stats_toots_press')
|
||||||
myInfo &&
|
myInfo && account && navigation.push('Tab-Shared-Account', { account })
|
||||||
account &&
|
|
||||||
navigation.push('Tab-Shared-Account', { account })
|
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
@ -47,10 +48,7 @@ const AccountInformationStats: React.FC<Props> = ({ account, myInfo }) => {
|
|||||||
)}
|
)}
|
||||||
{account ? (
|
{account ? (
|
||||||
<CustomText
|
<CustomText
|
||||||
style={[
|
style={[styles.stat, { color: colors.primaryDefault, textAlign: 'right' }]}
|
||||||
styles.stat,
|
|
||||||
{ color: colors.primaryDefault, textAlign: 'right' }
|
|
||||||
]}
|
|
||||||
children={t('shared.account.summary.following_count', {
|
children={t('shared.account.summary.following_count', {
|
||||||
count: account.following_count
|
count: account.following_count
|
||||||
})}
|
})}
|
||||||
@ -77,10 +75,7 @@ const AccountInformationStats: React.FC<Props> = ({ account, myInfo }) => {
|
|||||||
)}
|
)}
|
||||||
{account ? (
|
{account ? (
|
||||||
<CustomText
|
<CustomText
|
||||||
style={[
|
style={[styles.stat, { color: colors.primaryDefault, textAlign: 'center' }]}
|
||||||
styles.stat,
|
|
||||||
{ color: colors.primaryDefault, textAlign: 'center' }
|
|
||||||
]}
|
|
||||||
children={t('shared.account.summary.followers_count', {
|
children={t('shared.account.summary.followers_count', {
|
||||||
count: account.followers_count
|
count: account.followers_count
|
||||||
})}
|
})}
|
||||||
|
@ -51,7 +51,7 @@ const netInfo = async (): Promise<{
|
|||||||
if (resVerify.id !== instance.account.id) {
|
if (resVerify.id !== instance.account.id) {
|
||||||
log('error', 'netInfo', 'local id does not match remote id')
|
log('error', 'netInfo', 'local id does not match remote id')
|
||||||
store.dispatch(removeInstance(instance))
|
store.dispatch(removeInstance(instance))
|
||||||
return Promise.resolve({ connected: true, corruputed: '' })
|
return Promise.resolve({ connected: true, corrupted: '' })
|
||||||
} else {
|
} else {
|
||||||
store.dispatch(
|
store.dispatch(
|
||||||
updateInstanceAccount({
|
updateInstanceAccount({
|
||||||
|
@ -4,7 +4,7 @@ import { displayMessage } from '@components/Message'
|
|||||||
import navigationRef from '@helpers/navigationRef'
|
import navigationRef from '@helpers/navigationRef'
|
||||||
import { useAppDispatch } from '@root/store'
|
import { useAppDispatch } from '@root/store'
|
||||||
import { InstanceLatest } from '@utils/migrations/instances/migration'
|
import { InstanceLatest } from '@utils/migrations/instances/migration'
|
||||||
import { getExpoToken, retriveExpoToken } from '@utils/slices/appSlice'
|
import { getExpoToken, retrieveExpoToken } from '@utils/slices/appSlice'
|
||||||
import { disableAllPushes } from '@utils/slices/instancesSlice'
|
import { disableAllPushes } from '@utils/slices/instancesSlice'
|
||||||
import { useTheme } from '@utils/styles/ThemeManager'
|
import { useTheme } from '@utils/styles/ThemeManager'
|
||||||
import * as Notifications from 'expo-notifications'
|
import * as Notifications from 'expo-notifications'
|
||||||
@ -22,7 +22,7 @@ const pushUseConnect = ({ t, instances }: Params) => {
|
|||||||
const dispatch = useAppDispatch()
|
const dispatch = useAppDispatch()
|
||||||
const { theme } = useTheme()
|
const { theme } = useTheme()
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
dispatch(retriveExpoToken())
|
dispatch(retrieveExpoToken())
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
const expoToken = useSelector(getExpoToken)
|
const expoToken = useSelector(getExpoToken)
|
||||||
|
26
src/utils/queryHooks/status.ts
Normal file
26
src/utils/queryHooks/status.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import apiInstance from '@api/instance'
|
||||||
|
import { AxiosError } from 'axios'
|
||||||
|
import { QueryFunctionContext, useQuery, UseQueryOptions } from 'react-query'
|
||||||
|
|
||||||
|
export type QueryKeyStatus = ['Status', { id: Mastodon.Status['id'] }]
|
||||||
|
|
||||||
|
const queryFunction = ({ queryKey }: QueryFunctionContext<QueryKeyStatus>) => {
|
||||||
|
const { id } = queryKey[1]
|
||||||
|
|
||||||
|
return apiInstance<Mastodon.Status>({
|
||||||
|
method: 'get',
|
||||||
|
url: `statuses/${id}`
|
||||||
|
}).then(res => res.body)
|
||||||
|
}
|
||||||
|
|
||||||
|
const useStatusQuery = ({
|
||||||
|
options,
|
||||||
|
...queryKeyParams
|
||||||
|
}: QueryKeyStatus[1] & {
|
||||||
|
options?: UseQueryOptions<Mastodon.Status, AxiosError>
|
||||||
|
}) => {
|
||||||
|
const queryKey: QueryKeyStatus = ['Status', { ...queryKeyParams }]
|
||||||
|
return useQuery(queryKey, queryFunction, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
export { useStatusQuery }
|
@ -54,7 +54,7 @@ const updateStatusProperty = ({
|
|||||||
const tootIndex = reblog
|
const tootIndex = reblog
|
||||||
? items.findIndex(({ reblog }) => reblog?.id === id)
|
? items.findIndex(({ reblog }) => reblog?.id === id)
|
||||||
: items.findIndex(toot => toot.id === id)
|
: items.findIndex(toot => toot.id === id)
|
||||||
// if favouriets page and notifications page, remove the item instead
|
// if favourites page and notifications page, remove the item instead
|
||||||
if (tootIndex >= 0) {
|
if (tootIndex >= 0) {
|
||||||
foundToot = true
|
foundToot = true
|
||||||
updateStatus({ item: items[tootIndex], reblog, payload })
|
updateStatus({ item: items[tootIndex], reblog, payload })
|
||||||
@ -111,7 +111,7 @@ const updateStatusProperty = ({
|
|||||||
const tootIndex = reblog
|
const tootIndex = reblog
|
||||||
? items.findIndex(({ reblog }) => reblog?.id === id)
|
? items.findIndex(({ reblog }) => reblog?.id === id)
|
||||||
: items.findIndex(toot => toot.id === id)
|
: items.findIndex(toot => toot.id === id)
|
||||||
// if favouriets page and notifications page, remove the item instead
|
// if favourites page and notifications page, remove the item instead
|
||||||
if (tootIndex >= 0) {
|
if (tootIndex >= 0) {
|
||||||
foundToot = true
|
foundToot = true
|
||||||
updateStatus({ item: items[tootIndex], reblog, payload })
|
updateStatus({ item: items[tootIndex], reblog, payload })
|
||||||
|
@ -5,7 +5,7 @@ import { isDevelopment } from '@utils/checkEnvironment'
|
|||||||
import Constants from 'expo-constants'
|
import Constants from 'expo-constants'
|
||||||
import * as Notifications from 'expo-notifications'
|
import * as Notifications from 'expo-notifications'
|
||||||
|
|
||||||
export const retriveExpoToken = createAsyncThunk(
|
export const retrieveExpoToken = createAsyncThunk(
|
||||||
'app/expoToken',
|
'app/expoToken',
|
||||||
async (): Promise<string> => {
|
async (): Promise<string> => {
|
||||||
if (isDevelopment) {
|
if (isDevelopment) {
|
||||||
@ -20,7 +20,7 @@ export const retriveExpoToken = createAsyncThunk(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
export const retriveVersionLatest = createAsyncThunk(
|
export const retrieveVersionLatest = createAsyncThunk(
|
||||||
'app/versionUpdate',
|
'app/versionUpdate',
|
||||||
async (): Promise<string> => {
|
async (): Promise<string> => {
|
||||||
const res = await apiGeneral<{ latest: string }>({
|
const res = await apiGeneral<{ latest: string }>({
|
||||||
@ -48,12 +48,12 @@ const appSlice = createSlice({
|
|||||||
reducers: {},
|
reducers: {},
|
||||||
extraReducers: builder => {
|
extraReducers: builder => {
|
||||||
builder
|
builder
|
||||||
.addCase(retriveExpoToken.fulfilled, (state, action) => {
|
.addCase(retrieveExpoToken.fulfilled, (state, action) => {
|
||||||
if (action.payload) {
|
if (action.payload) {
|
||||||
state.expoToken = action.payload
|
state.expoToken = action.payload
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.addCase(retriveVersionLatest.fulfilled, (state, action) => {
|
.addCase(retrieveVersionLatest.fulfilled, (state, action) => {
|
||||||
if (action.payload && Constants.expoConfig?.version) {
|
if (action.payload && Constants.expoConfig?.version) {
|
||||||
if (
|
if (
|
||||||
parseFloat(action.payload) > parseFloat(Constants.expoConfig?.version)
|
parseFloat(action.payload) > parseFloat(Constants.expoConfig?.version)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user