mirror of
https://github.com/tooot-app/app
synced 2025-06-05 22:19:13 +02:00
Merge branch 'main' into candidate
This commit is contained in:
11
.gitignore
vendored
11
.gitignore
vendored
@ -43,6 +43,8 @@ local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
.cxx/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# node.js
|
||||
#
|
||||
@ -50,12 +52,6 @@ node_modules/
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# BUCK
|
||||
buck-out/
|
||||
\.buckd/
|
||||
*.keystore
|
||||
!debug.keystore
|
||||
|
||||
# Bundle artifacts
|
||||
*.jsbundle
|
||||
|
||||
@ -67,6 +63,9 @@ buck-out/
|
||||
web-build/
|
||||
dist/
|
||||
|
||||
# Temporary files created by Metro to check the health of the file watcher
|
||||
.metro-health-check*
|
||||
|
||||
# @end expo-cli
|
||||
|
||||
# yarn 3
|
||||
|
@ -1,55 +0,0 @@
|
||||
# To learn about Buck see [Docs](https://buckbuild.com/).
|
||||
# To run your application with Buck:
|
||||
# - install Buck
|
||||
# - `npm start` - to start the packager
|
||||
# - `cd android`
|
||||
# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"`
|
||||
# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck
|
||||
# - `buck install -r android/app` - compile, install and run application
|
||||
#
|
||||
|
||||
load(":build_defs.bzl", "create_aar_targets", "create_jar_targets")
|
||||
|
||||
lib_deps = []
|
||||
|
||||
create_aar_targets(glob(["libs/*.aar"]))
|
||||
|
||||
create_jar_targets(glob(["libs/*.jar"]))
|
||||
|
||||
android_library(
|
||||
name = "all-libs",
|
||||
exported_deps = lib_deps,
|
||||
)
|
||||
|
||||
android_library(
|
||||
name = "app-code",
|
||||
srcs = glob([
|
||||
"src/main/java/**/*.java",
|
||||
]),
|
||||
deps = [
|
||||
":all-libs",
|
||||
":build_config",
|
||||
":res",
|
||||
],
|
||||
)
|
||||
|
||||
android_build_config(
|
||||
name = "build_config",
|
||||
package = "com.xmflsct.app.tooot",
|
||||
)
|
||||
|
||||
android_resource(
|
||||
name = "res",
|
||||
package = "com.xmflsct.app.tooot",
|
||||
res = "src/main/res",
|
||||
)
|
||||
|
||||
android_binary(
|
||||
name = "app",
|
||||
keystore = "//android/keystores:debug",
|
||||
manifest = "src/main/AndroidManifest.xml",
|
||||
package_type = "debug",
|
||||
deps = [
|
||||
":app-code",
|
||||
],
|
||||
)
|
@ -1,129 +1,86 @@
|
||||
apply plugin: "com.android.application"
|
||||
apply plugin: "com.facebook.react"
|
||||
apply plugin: 'com.google.gms.google-services'
|
||||
|
||||
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
|
||||
* and bundleReleaseJsAndAssets).
|
||||
* These basically call `react-native bundle` with the correct arguments during the Android build
|
||||
* cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
|
||||
* bundle directly from the development server. Below you can see all the possible configurations
|
||||
* and their defaults. If you decide to add a configuration block, make sure to add it before the
|
||||
* `apply from: "../../node_modules/react-native/react.gradle"` line.
|
||||
*
|
||||
* project.ext.react = [
|
||||
* // the name of the generated asset file containing your JS bundle
|
||||
* bundleAssetName: "index.android.bundle",
|
||||
*
|
||||
* // the entry file for bundle generation. If none specified and
|
||||
* // "index.android.js" exists, it will be used. Otherwise "index.js" is
|
||||
* // default. Can be overridden with ENTRY_FILE environment variable.
|
||||
* entryFile: "index.android.js",
|
||||
*
|
||||
* // https://reactnative.dev/docs/performance#enable-the-ram-format
|
||||
* bundleCommand: "ram-bundle",
|
||||
*
|
||||
* // whether to bundle JS and assets in debug mode
|
||||
* bundleInDebug: false,
|
||||
*
|
||||
* // whether to bundle JS and assets in release mode
|
||||
* bundleInRelease: true,
|
||||
*
|
||||
* // whether to bundle JS and assets in another build variant (if configured).
|
||||
* // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
|
||||
* // The configuration property can be in the following formats
|
||||
* // 'bundleIn${productFlavor}${buildType}'
|
||||
* // 'bundleIn${buildType}'
|
||||
* // bundleInFreeDebug: true,
|
||||
* // bundleInPaidRelease: true,
|
||||
* // bundleInBeta: true,
|
||||
*
|
||||
* // whether to disable dev mode in custom build variants (by default only disabled in release)
|
||||
* // for example: to disable dev mode in the staging build type (if configured)
|
||||
* devDisabledInStaging: true,
|
||||
* // The configuration property can be in the following formats
|
||||
* // 'devDisabledIn${productFlavor}${buildType}'
|
||||
* // 'devDisabledIn${buildType}'
|
||||
*
|
||||
* // the root of your project, i.e. where "package.json" lives
|
||||
* root: "../../",
|
||||
*
|
||||
* // where to put the JS bundle asset in debug mode
|
||||
* jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
|
||||
*
|
||||
* // where to put the JS bundle asset in release mode
|
||||
* jsBundleDirRelease: "$buildDir/intermediates/assets/release",
|
||||
*
|
||||
* // where to put drawable resources / React Native assets, e.g. the ones you use via
|
||||
* // require('./image.png')), in debug mode
|
||||
* resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
|
||||
*
|
||||
* // where to put drawable resources / React Native assets, e.g. the ones you use via
|
||||
* // require('./image.png')), in release mode
|
||||
* resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
|
||||
*
|
||||
* // by default the gradle tasks are skipped if none of the JS files or assets change; this means
|
||||
* // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
|
||||
* // date; if you have any other folders that you want to ignore for performance reasons (gradle
|
||||
* // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
|
||||
* // for example, you might want to remove it from here.
|
||||
* inputExcludes: ["android/**", "ios/**"],
|
||||
*
|
||||
* // override which node gets called and with what additional arguments
|
||||
* nodeExecutableAndArgs: ["node"],
|
||||
*
|
||||
* // supply additional arguments to the packager
|
||||
* extraPackagerArgs: []
|
||||
* ]
|
||||
* This is the configuration block to customize your React Native Android app.
|
||||
* By default you don't need to apply any configuration, just uncomment the lines you need.
|
||||
*/
|
||||
|
||||
project.ext.react = [
|
||||
enableHermes: true,
|
||||
]
|
||||
|
||||
apply from: new File(["node", "--print", "require.resolve('react-native/package.json')"].execute().text.trim(), "../react.gradle")
|
||||
react {
|
||||
/* Folders */
|
||||
// The root of your project, i.e. where "package.json" lives. Default is '..'
|
||||
// root = file("../")
|
||||
// The folder where the react-native NPM package is. Default is ../node_modules/react-native
|
||||
// reactNativeDir = file("../node_modules/react-native")
|
||||
// The folder where the react-native Codegen package is. Default is ../node_modules/react-native-codegen
|
||||
// codegenDir = file("../node_modules/react-native-codegen")
|
||||
// The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js
|
||||
// cliFile = file("../node_modules/react-native/cli.js")
|
||||
/* Variants */
|
||||
// The list of variants to that are debuggable. For those we're going to
|
||||
// skip the bundling of the JS bundle and the assets. By default is just 'debug'.
|
||||
// If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants.
|
||||
// debuggableVariants = ["liteDebug", "prodDebug"]
|
||||
/* Bundling */
|
||||
// A list containing the node command and its flags. Default is just 'node'.
|
||||
// nodeExecutableAndArgs = ["node"]
|
||||
//
|
||||
// The command to run when bundling. By default is 'bundle'
|
||||
// bundleCommand = "ram-bundle"
|
||||
//
|
||||
// The path to the CLI configuration file. Default is empty.
|
||||
// bundleConfig = file(../rn-cli.config.js)
|
||||
//
|
||||
// The name of the generated asset file containing your JS bundle
|
||||
// bundleAssetName = "MyApplication.android.bundle"
|
||||
//
|
||||
// The entry file for bundle generation. Default is 'index.android.js' or 'index.js'
|
||||
// entryFile = file("../js/MyApplication.android.js")
|
||||
//
|
||||
// A list of extra flags to pass to the 'bundle' commands.
|
||||
// See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle
|
||||
// extraPackagerArgs = []
|
||||
/* Hermes Commands */
|
||||
// The hermes compiler command to run. By default it is 'hermesc'
|
||||
// hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc"
|
||||
//
|
||||
// The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
|
||||
// hermesFlags = ["-O", "-output-source-map"]
|
||||
}
|
||||
|
||||
/**
|
||||
* Set this to true to create two separate APKs instead of one:
|
||||
* - An APK that only works on ARM devices
|
||||
* - An APK that only works on x86 devices
|
||||
* The advantage is the size of the APK is reduced by about 4MB.
|
||||
* Upload all the APKs to the Play Store and people will download
|
||||
* the correct one based on the CPU architecture of their device.
|
||||
* Set this to true to create four separate APKs instead of one,
|
||||
* one for each native architecture. This is useful if you don't
|
||||
* use App Bundles (https://developer.android.com/guide/app-bundle/)
|
||||
* and want to have separate APKs to upload to the Play Store.
|
||||
*/
|
||||
def enableSeparateBuildPerCPUArchitecture = false
|
||||
|
||||
/**
|
||||
* Run Proguard to shrink the Java bytecode in release builds.
|
||||
* Set this to true to Run Proguard on Release builds to minify the Java bytecode.
|
||||
*/
|
||||
def enableProguardInReleaseBuilds = false
|
||||
|
||||
/**
|
||||
* The preferred build flavor of JavaScriptCore.
|
||||
* The preferred build flavor of JavaScriptCore (JSC)
|
||||
*
|
||||
* For example, to use the international variant, you can use:
|
||||
* `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
|
||||
*
|
||||
* The international variant includes ICU i18n library and necessary data
|
||||
* allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
|
||||
* give correct results when using with locales other than en-US. Note that
|
||||
* give correct results when using with locales other than en-US. Note that
|
||||
* this variant is about 6MiB larger per architecture than default.
|
||||
*/
|
||||
def jscFlavor = 'org.webkit:android-jsc:+'
|
||||
|
||||
/**
|
||||
* Whether to enable the Hermes VM.
|
||||
*
|
||||
* This should be set on project.ext.react and mirrored here. If it is not set
|
||||
* on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
|
||||
* and the benefits of using Hermes will therefore be sharply reduced.
|
||||
*/
|
||||
def enableHermes = project.ext.react.get("enableHermes", true);
|
||||
|
||||
/**
|
||||
* Architectures to build native code for.
|
||||
* Private function to get the list of Native Architectures you want to build.
|
||||
* This reads the value from reactNativeArchitectures in your gradle.properties
|
||||
* file and works together with the --active-arch-only flag of react-native run-android.
|
||||
*/
|
||||
def reactNativeArchitectures() {
|
||||
def value = project.getProperties().get("reactNativeArchitectures")
|
||||
@ -140,69 +97,13 @@ android {
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
namespace "com.xmflsct.app.tooot"
|
||||
defaultConfig {
|
||||
applicationId 'com.xmflsct.app.tooot'
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 50
|
||||
versionName "0.2"
|
||||
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
|
||||
if (isNewArchitectureEnabled()) {
|
||||
// We configure the CMake build only if you decide to opt-in for the New Architecture.
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
arguments "-DPROJECT_BUILD_DIR=$buildDir",
|
||||
"-DREACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid",
|
||||
"-DREACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build",
|
||||
"-DNODE_MODULES_DIR=$rootDir/../node_modules",
|
||||
"-DANDROID_STL=c++_shared"
|
||||
}
|
||||
}
|
||||
if (!enableSeparateBuildPerCPUArchitecture) {
|
||||
ndk {
|
||||
abiFilters (*reactNativeArchitectures())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isNewArchitectureEnabled()) {
|
||||
// We configure the CMake build only if you decide to opt-in for the New Architecture.
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
path "$projectDir/src/main/jni/CMakeLists.txt"
|
||||
}
|
||||
}
|
||||
def reactAndroidProjectDir = project(':ReactAndroid').projectDir
|
||||
def packageReactNdkDebugLibs = tasks.register("packageReactNdkDebugLibs", Copy) {
|
||||
dependsOn(":ReactAndroid:packageReactNdkDebugLibsForBuck")
|
||||
from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib")
|
||||
into("$buildDir/react-ndk/exported")
|
||||
}
|
||||
def packageReactNdkReleaseLibs = tasks.register("packageReactNdkReleaseLibs", Copy) {
|
||||
dependsOn(":ReactAndroid:packageReactNdkReleaseLibsForBuck")
|
||||
from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib")
|
||||
into("$buildDir/react-ndk/exported")
|
||||
}
|
||||
afterEvaluate {
|
||||
// If you wish to add a custom TurboModule or component locally,
|
||||
// you should uncomment this line.
|
||||
// preBuild.dependsOn("generateCodegenArtifactsFromSchema")
|
||||
preDebugBuild.dependsOn(packageReactNdkDebugLibs)
|
||||
preReleaseBuild.dependsOn(packageReactNdkReleaseLibs)
|
||||
// Due to a bug inside AGP, we have to explicitly set a dependency
|
||||
// between configureCMakeDebug* tasks and the preBuild tasks.
|
||||
// This can be removed once this is solved: https://issuetracker.google.com/issues/207403732
|
||||
configureCMakeRelWithDebInfo.dependsOn(preReleaseBuild)
|
||||
configureCMakeDebug.dependsOn(preDebugBuild)
|
||||
reactNativeArchitectures().each { architecture ->
|
||||
tasks.findByName("configureCMakeDebug[${architecture}]")?.configure {
|
||||
dependsOn("preDebugBuild")
|
||||
}
|
||||
tasks.findByName("configureCMakeRelWithDebInfo[${architecture}]")?.configure {
|
||||
dependsOn("preReleaseBuild")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
splits {
|
||||
abi {
|
||||
@ -232,7 +133,6 @@ android {
|
||||
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
|
||||
}
|
||||
}
|
||||
namespace 'com.xmflsct.app.tooot'
|
||||
|
||||
// applicationVariants are e.g. debug, release
|
||||
applicationVariants.all { variant ->
|
||||
@ -255,10 +155,6 @@ dependencies {
|
||||
force = true
|
||||
}
|
||||
|
||||
implementation fileTree(dir: "libs", include: ["*.jar"])
|
||||
//noinspection GradleDynamicVersion
|
||||
implementation "com.facebook.react:react-native:+" // From node_modules
|
||||
|
||||
def isGifEnabled = (findProperty('expo.gif.enabled') ?: "") == "true";
|
||||
def isWebpEnabled = (findProperty('expo.webp.enabled') ?: "") == "true";
|
||||
def isWebpAnimatedEnabled = (findProperty('expo.webp.animated') ?: "") == "true";
|
||||
@ -284,58 +180,21 @@ dependencies {
|
||||
}
|
||||
}
|
||||
|
||||
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
|
||||
debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
|
||||
exclude group:'com.facebook.fbjni'
|
||||
}
|
||||
// The version of react-native is set by the React Native Gradle Plugin
|
||||
implementation("com.facebook.react:react-android")
|
||||
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.0.0")
|
||||
debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}")
|
||||
debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
|
||||
exclude group:'com.facebook.flipper'
|
||||
exclude group:'com.squareup.okhttp3', module:'okhttp'
|
||||
}
|
||||
debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") {
|
||||
exclude group:'com.facebook.flipper'
|
||||
}
|
||||
|
||||
if (enableHermes) {
|
||||
//noinspection GradleDynamicVersion
|
||||
implementation("com.facebook.react:hermes-engine:+") { // From node_modules
|
||||
exclude group:'com.facebook.fbjni'
|
||||
}
|
||||
debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}")
|
||||
if (hermesEnabled.toBoolean()) {
|
||||
implementation("com.facebook.react:hermes-android")
|
||||
} else {
|
||||
implementation jscFlavor
|
||||
}
|
||||
}
|
||||
|
||||
if (isNewArchitectureEnabled()) {
|
||||
// If new architecture is enabled, we let you build RN from source
|
||||
// Otherwise we fallback to a prebuilt .aar bundled in the NPM package.
|
||||
// This will be applied to all the imported transitive dependency.
|
||||
configurations.all {
|
||||
resolutionStrategy.dependencySubstitution {
|
||||
substitute(module("com.facebook.react:react-native"))
|
||||
.using(project(":ReactAndroid"))
|
||||
.because("On New Architecture we're building React Native from source")
|
||||
substitute(module("com.facebook.react:hermes-engine"))
|
||||
.using(project(":ReactAndroid:hermes-engine"))
|
||||
.because("On New Architecture we're building Hermes from source")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Run this once to be able to run the application with BUCK
|
||||
// puts all compile dependencies into folder libs for BUCK to use
|
||||
task copyDownloadableDepsToLibs(type: Copy) {
|
||||
from configurations.implementation
|
||||
into 'libs'
|
||||
}
|
||||
|
||||
apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json')"].execute().text.trim(), "../native_modules.gradle");
|
||||
applyNativeModulesAppBuildGradle(project)
|
||||
|
||||
def isNewArchitectureEnabled() {
|
||||
// To opt-in for the New Architecture, you can either:
|
||||
// - Set `newArchEnabled` to true inside the `gradle.properties` file
|
||||
// - Invoke gradle with `-newArchEnabled=true`
|
||||
// - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true`
|
||||
return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true"
|
||||
}
|
||||
|
@ -1,19 +0,0 @@
|
||||
"""Helper definitions to glob .aar and .jar targets"""
|
||||
|
||||
def create_aar_targets(aarfiles):
|
||||
for aarfile in aarfiles:
|
||||
name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")]
|
||||
lib_deps.append(":" + name)
|
||||
android_prebuilt_aar(
|
||||
name = name,
|
||||
aar = aarfile,
|
||||
)
|
||||
|
||||
def create_jar_targets(jarfiles):
|
||||
for jarfile in jarfiles:
|
||||
name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")]
|
||||
lib_deps.append(":" + name)
|
||||
prebuilt_jar(
|
||||
name = name,
|
||||
binary_jar = jarfile,
|
||||
)
|
@ -17,7 +17,6 @@ import com.facebook.flipper.plugins.inspector.DescriptorMapping;
|
||||
import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
|
||||
import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
|
||||
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
|
||||
import com.facebook.flipper.plugins.react.ReactFlipperPlugin;
|
||||
import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
|
||||
import com.facebook.react.ReactInstanceEventListener;
|
||||
import com.facebook.react.ReactInstanceManager;
|
||||
@ -25,12 +24,15 @@ import com.facebook.react.bridge.ReactContext;
|
||||
import com.facebook.react.modules.network.NetworkingModule;
|
||||
import okhttp3.OkHttpClient;
|
||||
|
||||
/**
|
||||
* Class responsible of loading Flipper inside your React Native application. This is the debug
|
||||
* flavor of it. Here you can add your own plugins and customize the Flipper setup.
|
||||
*/
|
||||
public class ReactNativeFlipper {
|
||||
public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
|
||||
if (FlipperUtils.shouldEnableFlipper(context)) {
|
||||
final FlipperClient client = AndroidFlipperClient.getInstance(context);
|
||||
client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
|
||||
client.addPlugin(new ReactFlipperPlugin());
|
||||
client.addPlugin(new DatabasesFlipperPlugin(context));
|
||||
client.addPlugin(new SharedPreferencesFlipperPlugin(context));
|
||||
client.addPlugin(CrashReporterPlugin.getInstance());
|
||||
|
@ -1,6 +1,4 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="com.xmflsct.app.tooot">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
|
||||
|
@ -3,7 +3,8 @@ import android.os.Bundle;
|
||||
|
||||
import com.facebook.react.ReactActivity;
|
||||
import com.facebook.react.ReactActivityDelegate;
|
||||
import com.facebook.react.ReactRootView;
|
||||
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
|
||||
import com.facebook.react.defaults.DefaultReactActivityDelegate;
|
||||
|
||||
import expo.modules.ReactActivityDelegateWrapper;
|
||||
|
||||
@ -23,31 +24,19 @@ public class MainActivity extends ReactActivity {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the instance of the {@link ReactActivityDelegate}. There the RootView is created and
|
||||
* you can specify the renderer you wish to use - the new renderer (Fabric) or the old renderer
|
||||
* (Paper).
|
||||
* Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link
|
||||
* DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React
|
||||
* (aka React 18) with two boolean flags.
|
||||
*/
|
||||
@Override
|
||||
protected ReactActivityDelegate createReactActivityDelegate() {
|
||||
return new ReactActivityDelegateWrapper(this, new MainActivityDelegate(this, getMainComponentName()));
|
||||
}
|
||||
public static class MainActivityDelegate extends ReactActivityDelegate {
|
||||
public MainActivityDelegate(ReactActivity activity, String mainComponentName) {
|
||||
super(activity, mainComponentName);
|
||||
}
|
||||
@Override
|
||||
protected ReactRootView createRootView() {
|
||||
ReactRootView reactRootView = new ReactRootView(getContext());
|
||||
// If you opted-in for the New Architecture, we enable the Fabric Renderer.
|
||||
reactRootView.setIsFabric(BuildConfig.IS_NEW_ARCHITECTURE_ENABLED);
|
||||
return reactRootView;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isConcurrentRootEnabled() {
|
||||
// If you opted-in for the New Architecture, we enable Concurrent Root (i.e. React 18).
|
||||
// More on this on https://reactjs.org/blog/2022/03/29/react-v18.html
|
||||
return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
|
||||
}
|
||||
return new DefaultReactActivityDelegate(
|
||||
this,
|
||||
getMainComponentName(),
|
||||
// If you opted-in for the New Architecture, we enable the Fabric Renderer.
|
||||
DefaultNewArchitectureEntryPoint.getFabricEnabled(), // fabricEnabled
|
||||
// If you opted-in for the New Architecture, we enable Concurrent React (i.e. React 18).
|
||||
DefaultNewArchitectureEntryPoint.getConcurrentReactEnabled() // concurrentRootEnabled
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1,23 +1,20 @@
|
||||
package com.xmflsct.app.tooot;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.facebook.react.PackageList;
|
||||
import com.facebook.react.ReactApplication;
|
||||
import com.facebook.react.ReactInstanceManager;
|
||||
import com.facebook.react.ReactNativeHost;
|
||||
import com.facebook.react.ReactPackage;
|
||||
import com.facebook.react.config.ReactFeatureFlags;
|
||||
import com.facebook.react.shell.MainReactPackage;
|
||||
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
|
||||
import com.facebook.react.defaults.DefaultReactNativeHost;
|
||||
import com.facebook.soloader.SoLoader;
|
||||
|
||||
import expo.modules.ApplicationLifecycleDispatcher;
|
||||
import expo.modules.ReactNativeHostWrapper;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.List;
|
||||
|
||||
import com.facebook.react.bridge.JSIModulePackage; // <- react-native-reanimated-v2
|
||||
@ -26,7 +23,7 @@ import com.swmansion.reanimated.ReanimatedJSIModulePackage; // <- react-native-r
|
||||
public class MainApplication extends Application implements ReactApplication {
|
||||
private final ReactNativeHost mReactNativeHost = new ReactNativeHostWrapper(
|
||||
this,
|
||||
new ReactNativeHost(this) {
|
||||
new DefaultReactNativeHost(this) {
|
||||
@Override
|
||||
public boolean getUseDeveloperSupport() {
|
||||
return BuildConfig.DEBUG;
|
||||
@ -46,6 +43,15 @@ public class MainApplication extends Application implements ReactApplication {
|
||||
return "index";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isNewArchEnabled() {
|
||||
return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
|
||||
}
|
||||
@Override
|
||||
protected Boolean isHermesEnabled() {
|
||||
return BuildConfig.IS_HERMES_ENABLED;
|
||||
}
|
||||
|
||||
@Override // <- react-native-reanimated-v2
|
||||
protected JSIModulePackage getJSIModulePackage() {
|
||||
return new ReanimatedJSIModulePackage();
|
||||
@ -54,59 +60,18 @@ public class MainApplication extends Application implements ReactApplication {
|
||||
|
||||
@Override
|
||||
public ReactNativeHost getReactNativeHost() {
|
||||
// if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
|
||||
// return mNewArchitectureNativeHost;
|
||||
// } else {
|
||||
// return mReactNativeHost;
|
||||
// }
|
||||
return mReactNativeHost;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
// If you opted-in for the New Architecture, we enable the TurboModule system
|
||||
ReactFeatureFlags.useTurboModules = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
|
||||
SoLoader.init(this, /* native exopackage */ false);
|
||||
|
||||
initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
|
||||
ApplicationLifecycleDispatcher.onApplicationCreate(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConfigurationChanged(@NonNull Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads Flipper in React Native templates. Call this in the onCreate method with something like
|
||||
* initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
|
||||
*
|
||||
* @param context
|
||||
* @param reactInstanceManager
|
||||
*/
|
||||
private static void initializeFlipper(
|
||||
Context context, ReactInstanceManager reactInstanceManager) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
try {
|
||||
/*
|
||||
We use reflection here to pick up the class that initializes Flipper,
|
||||
since Flipper library is not available in release mode
|
||||
*/
|
||||
Class<?> aClass = Class.forName("com.xmflsct.app.tooot.ReactNativeFlipper");
|
||||
aClass
|
||||
.getMethod("initializeFlipper", Context.class, ReactInstanceManager.class)
|
||||
.invoke(null, context, reactInstanceManager);
|
||||
} catch (ClassNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
} catch (NoSuchMethodException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
} catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
|
||||
// If you opted-in for the New Architecture, we load the native entry point for this app.
|
||||
DefaultNewArchitectureEntryPoint.load();
|
||||
}
|
||||
// ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,20 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* <p>This source code is licensed under the MIT license found in the LICENSE file in the root
|
||||
* directory of this source tree.
|
||||
*/
|
||||
package com.rndiffapp;
|
||||
|
||||
import android.content.Context;
|
||||
import com.facebook.react.ReactInstanceManager;
|
||||
|
||||
/**
|
||||
* Class responsible of loading Flipper inside your React Native application. This is the release
|
||||
* flavor of it so it's empty as we don't want to load Flipper.
|
||||
*/
|
||||
public class ReactNativeFlipper {
|
||||
public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
|
||||
// Do nothing as we don't want to initialize Flipper on Release.
|
||||
}
|
||||
}
|
@ -2,19 +2,14 @@
|
||||
|
||||
buildscript {
|
||||
ext {
|
||||
buildToolsVersion = "31.0.0"
|
||||
buildToolsVersion = "33.0.0"
|
||||
minSdkVersion = 21
|
||||
compileSdkVersion = 31
|
||||
targetSdkVersion = 31
|
||||
kotlinVersion = '1.6.10'
|
||||
compileSdkVersion = 33
|
||||
targetSdkVersion = 33
|
||||
kotlinVersion = '1.8.10'
|
||||
|
||||
if (System.properties['os.arch'] == "aarch64") {
|
||||
// For M1 Users we need to use the NDK 24 which added support for aarch64
|
||||
ndkVersion = "24.0.8215888"
|
||||
} else {
|
||||
// Otherwise we default to the side-by-side NDK version from AGP.
|
||||
ndkVersion = "21.4.7075529"
|
||||
}
|
||||
// We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP.
|
||||
ndkVersion = "23.1.7779620"
|
||||
}
|
||||
repositories {
|
||||
google()
|
||||
@ -22,31 +17,8 @@ buildscript {
|
||||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath('com.android.tools.build:gradle:7.2.2')
|
||||
classpath("com.android.tools.build:gradle:7.3.1")
|
||||
classpath("com.facebook.react:react-native-gradle-plugin")
|
||||
classpath("de.undercouch:gradle-download-task:5.0.1")
|
||||
classpath 'com.google.gms:google-services:4.3.14'
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
mavenLocal()
|
||||
maven {
|
||||
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
|
||||
url(new File(["node", "--print", "require.resolve('react-native/package.json')"].execute().text.trim(), "../android"))
|
||||
}
|
||||
maven {
|
||||
// Android JSC is installed from npm
|
||||
url(new File(["node", "--print", "require.resolve('jsc-android/package.json')"].execute().text.trim(), "../dist"))
|
||||
}
|
||||
|
||||
google()
|
||||
mavenCentral()
|
||||
jcenter()
|
||||
maven { url 'https://www.jitpack.io' }
|
||||
}
|
||||
}
|
||||
|
@ -39,6 +39,10 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
|
||||
# are providing them.
|
||||
newArchEnabled=false
|
||||
|
||||
# Use this property to enable or disable the Hermes JS engine.
|
||||
# If set to false, you will be using JSC instead.
|
||||
hermesEnabled=true
|
||||
|
||||
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError
|
||||
org.gradle.daemon=true
|
||||
org.gradle.parallel=true
|
||||
|
@ -9,9 +9,3 @@ applyNativeModulesSettingsGradle(settings)
|
||||
include ':app'
|
||||
|
||||
includeBuild('../node_modules/react-native-gradle-plugin')
|
||||
if (settings.hasProperty("newArchEnabled") && settings.newArchEnabled == "true") {
|
||||
include(":ReactAndroid")
|
||||
project(":ReactAndroid").projectDir = file('../node_modules/react-native/ReactAndroid')
|
||||
include(":ReactAndroid:hermes-engine")
|
||||
project(":ReactAndroid:hermes-engine").projectDir = file('../node_modules/react-native/ReactAndroid/hermes-engine')
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ export default (): ExpoConfig => ({
|
||||
slug: 'tooot',
|
||||
scheme: 'tooot',
|
||||
version,
|
||||
// @ts-ignore
|
||||
extra: { environment: process.env.ENVIRONMENT },
|
||||
privacy: 'hidden',
|
||||
ios: {
|
||||
|
@ -3,7 +3,13 @@ require File.join(File.dirname(`node --print "require.resolve('react-native/pack
|
||||
require File.join(File.dirname(`node --print "require.resolve('@react-native-community/cli-platform-ios/package.json')"`), "native_modules")
|
||||
|
||||
platform :ios, '13.0'
|
||||
install! 'cocoapods', :deterministic_uuids => false
|
||||
prepare_react_native_project!
|
||||
flipper_config = ENV['NO_FLIPPER'] == "1" ? FlipperConfiguration.disabled : FlipperConfiguration.enabled
|
||||
linkage = ENV['USE_FRAMEWORKS']
|
||||
if linkage != nil
|
||||
Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green
|
||||
use_frameworks! :linkage => linkage.to_sym
|
||||
end
|
||||
|
||||
require 'json'
|
||||
podfile_properties = JSON.parse(File.read('./Podfile.properties.json')) rescue {}
|
||||
@ -19,7 +25,6 @@ target 'tooot' do
|
||||
:path => config[:reactNativePath],
|
||||
:hermes_enabled => true,
|
||||
:fabric_enabled => flags[:fabric_enabled],
|
||||
# :flipper_configuration => FlipperConfiguration.enabled(["Debug"], { 'Flipper' => '0.159.0' }),
|
||||
:flipper_configuration => FlipperConfiguration.disabled,
|
||||
# An absolute path to your application root.
|
||||
:app_path => "#{Pod::Config.instance.installation_root}/.."
|
||||
|
628
ios/Podfile.lock
628
ios/Podfile.lock
@ -1,69 +1,72 @@
|
||||
PODS:
|
||||
- boost (1.76.0)
|
||||
- DoubleConversion (1.1.6)
|
||||
- EXApplication (5.0.1):
|
||||
- EXApplication (5.1.1):
|
||||
- ExpoModulesCore
|
||||
- EXAV (13.2.0):
|
||||
- EXAV (13.2.1):
|
||||
- ExpoModulesCore
|
||||
- ReactCommon/turbomodule/core
|
||||
- EXConstants (14.2.0):
|
||||
- EXConstants (14.2.1):
|
||||
- ExpoModulesCore
|
||||
- EXErrorRecovery (4.0.1):
|
||||
- EXErrorRecovery (4.1.1):
|
||||
- ExpoModulesCore
|
||||
- EXFileSystem (15.2.0):
|
||||
- EXFileSystem (15.2.2):
|
||||
- ExpoModulesCore
|
||||
- EXFont (11.0.1):
|
||||
- EXFont (11.1.1):
|
||||
- ExpoModulesCore
|
||||
- EXNotifications (0.17.0):
|
||||
- ExpoModulesCore
|
||||
- Expo (47.0.13):
|
||||
- Expo (48.0.0-beta.2):
|
||||
- ExpoModulesCore
|
||||
- ExpoCrypto (12.2.0):
|
||||
- ExpoCrypto (12.2.1):
|
||||
- ExpoModulesCore
|
||||
- ExpoHaptics (12.2.0):
|
||||
- ExpoHaptics (12.2.1):
|
||||
- ExpoModulesCore
|
||||
- ExpoImage (1.0.0-beta.6):
|
||||
- ExpoImage (1.0.0-rc.0):
|
||||
- ExpoModulesCore
|
||||
- SDWebImage (~> 5.15.0)
|
||||
- SDWebImageAVIFCoder (~> 0.9.4)
|
||||
- SDWebImageSVGCoder (~> 1.6.1)
|
||||
- SDWebImageWebPCoder (~> 0.9.1)
|
||||
- ExpoKeepAwake (11.0.1):
|
||||
- ExpoKeepAwake (12.0.1):
|
||||
- ExpoModulesCore
|
||||
- ExpoLocalization (14.1.0):
|
||||
- ExpoLocalization (14.1.1):
|
||||
- ExpoModulesCore
|
||||
- ExpoModulesCore (1.1.1):
|
||||
- ExpoModulesCore (1.2.1):
|
||||
- React-Core
|
||||
- React-RCTAppDelegate
|
||||
- ReactCommon/turbomodule/core
|
||||
- ExpoRandom (13.1.0):
|
||||
- ExpoRandom (13.1.1):
|
||||
- ExpoModulesCore
|
||||
- ExpoStoreReview (6.2.0):
|
||||
- ExpoStoreReview (6.2.1):
|
||||
- ExpoModulesCore
|
||||
- ExpoVideoThumbnails (7.2.0):
|
||||
- ExpoVideoThumbnails (7.2.1):
|
||||
- ExpoModulesCore
|
||||
- ExpoWebBrowser (12.0.0):
|
||||
- ExpoModulesCore
|
||||
- EXScreenCapture (5.1.0):
|
||||
- EXScreenCapture (5.1.1):
|
||||
- ExpoModulesCore
|
||||
- EXScreenOrientation (5.1.0):
|
||||
- EXScreenOrientation (5.1.1):
|
||||
- ExpoModulesCore
|
||||
- React-Core
|
||||
- EXSecureStore (12.1.0):
|
||||
- EXSecureStore (12.1.1):
|
||||
- ExpoModulesCore
|
||||
- EXSplashScreen (0.17.5):
|
||||
- ExpoModulesCore
|
||||
- React-Core
|
||||
- FBLazyVector (0.70.7)
|
||||
- FBReactNativeSpec (0.70.7):
|
||||
- FBLazyVector (0.71.2)
|
||||
- FBReactNativeSpec (0.71.2):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- RCTRequired (= 0.70.7)
|
||||
- RCTTypeSafety (= 0.70.7)
|
||||
- React-Core (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- ReactCommon/turbomodule/core (= 0.70.7)
|
||||
- RCTRequired (= 0.71.2)
|
||||
- RCTTypeSafety (= 0.71.2)
|
||||
- React-Core (= 0.71.2)
|
||||
- React-jsi (= 0.71.2)
|
||||
- ReactCommon/turbomodule/core (= 0.71.2)
|
||||
- fmt (6.2.1)
|
||||
- glog (0.3.5)
|
||||
- hermes-engine (0.70.7)
|
||||
- hermes-engine (0.71.2):
|
||||
- hermes-engine/Pre-built (= 0.71.2)
|
||||
- hermes-engine/Pre-built (0.71.2)
|
||||
- libaom (2.0.2):
|
||||
- libvmaf
|
||||
- libavif (0.10.1):
|
||||
@ -103,214 +106,239 @@ PODS:
|
||||
- fmt (~> 6.2.1)
|
||||
- glog
|
||||
- libevent
|
||||
- RCTRequired (0.70.7)
|
||||
- RCTTypeSafety (0.70.7):
|
||||
- FBLazyVector (= 0.70.7)
|
||||
- RCTRequired (= 0.70.7)
|
||||
- React-Core (= 0.70.7)
|
||||
- React (0.70.7):
|
||||
- React-Core (= 0.70.7)
|
||||
- React-Core/DevSupport (= 0.70.7)
|
||||
- React-Core/RCTWebSocket (= 0.70.7)
|
||||
- React-RCTActionSheet (= 0.70.7)
|
||||
- React-RCTAnimation (= 0.70.7)
|
||||
- React-RCTBlob (= 0.70.7)
|
||||
- React-RCTImage (= 0.70.7)
|
||||
- React-RCTLinking (= 0.70.7)
|
||||
- React-RCTNetwork (= 0.70.7)
|
||||
- React-RCTSettings (= 0.70.7)
|
||||
- React-RCTText (= 0.70.7)
|
||||
- React-RCTVibration (= 0.70.7)
|
||||
- React-bridging (0.70.7):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-callinvoker (0.70.7)
|
||||
- React-Codegen (0.70.7):
|
||||
- FBReactNativeSpec (= 0.70.7)
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- RCTRequired (= 0.70.7)
|
||||
- RCTTypeSafety (= 0.70.7)
|
||||
- React-Core (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-jsiexecutor (= 0.70.7)
|
||||
- ReactCommon/turbomodule/core (= 0.70.7)
|
||||
- React-Core (0.70.7):
|
||||
- RCTRequired (0.71.2)
|
||||
- RCTTypeSafety (0.71.2):
|
||||
- FBLazyVector (= 0.71.2)
|
||||
- RCTRequired (= 0.71.2)
|
||||
- React-Core (= 0.71.2)
|
||||
- React (0.71.2):
|
||||
- React-Core (= 0.71.2)
|
||||
- React-Core/DevSupport (= 0.71.2)
|
||||
- React-Core/RCTWebSocket (= 0.71.2)
|
||||
- React-RCTActionSheet (= 0.71.2)
|
||||
- React-RCTAnimation (= 0.71.2)
|
||||
- React-RCTBlob (= 0.71.2)
|
||||
- React-RCTImage (= 0.71.2)
|
||||
- React-RCTLinking (= 0.71.2)
|
||||
- React-RCTNetwork (= 0.71.2)
|
||||
- React-RCTSettings (= 0.71.2)
|
||||
- React-RCTText (= 0.71.2)
|
||||
- React-RCTVibration (= 0.71.2)
|
||||
- React-callinvoker (0.71.2)
|
||||
- React-Codegen (0.71.2):
|
||||
- FBReactNativeSpec
|
||||
- hermes-engine
|
||||
- RCT-Folly
|
||||
- RCTRequired
|
||||
- RCTTypeSafety
|
||||
- React-Core
|
||||
- React-jsi
|
||||
- React-jsiexecutor
|
||||
- ReactCommon/turbomodule/bridging
|
||||
- ReactCommon/turbomodule/core
|
||||
- React-Core (0.71.2):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default (= 0.70.7)
|
||||
- React-cxxreact (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-jsiexecutor (= 0.70.7)
|
||||
- React-perflogger (= 0.70.7)
|
||||
- React-Core/Default (= 0.71.2)
|
||||
- React-cxxreact (= 0.71.2)
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-jsiexecutor (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- Yoga
|
||||
- React-Core/CoreModulesHeaders (0.70.7):
|
||||
- React-Core/CoreModulesHeaders (0.71.2):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-jsiexecutor (= 0.70.7)
|
||||
- React-perflogger (= 0.70.7)
|
||||
- React-cxxreact (= 0.71.2)
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-jsiexecutor (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- Yoga
|
||||
- React-Core/Default (0.70.7):
|
||||
- React-Core/Default (0.71.2):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-cxxreact (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-jsiexecutor (= 0.70.7)
|
||||
- React-perflogger (= 0.70.7)
|
||||
- React-cxxreact (= 0.71.2)
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-jsiexecutor (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- Yoga
|
||||
- React-Core/DevSupport (0.70.7):
|
||||
- React-Core/DevSupport (0.71.2):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default (= 0.70.7)
|
||||
- React-Core/RCTWebSocket (= 0.70.7)
|
||||
- React-cxxreact (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-jsiexecutor (= 0.70.7)
|
||||
- React-jsinspector (= 0.70.7)
|
||||
- React-perflogger (= 0.70.7)
|
||||
- React-Core/Default (= 0.71.2)
|
||||
- React-Core/RCTWebSocket (= 0.71.2)
|
||||
- React-cxxreact (= 0.71.2)
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-jsiexecutor (= 0.71.2)
|
||||
- React-jsinspector (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- Yoga
|
||||
- React-Core/RCTActionSheetHeaders (0.70.7):
|
||||
- React-Core/RCTActionSheetHeaders (0.71.2):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-jsiexecutor (= 0.70.7)
|
||||
- React-perflogger (= 0.70.7)
|
||||
- React-cxxreact (= 0.71.2)
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-jsiexecutor (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- Yoga
|
||||
- React-Core/RCTAnimationHeaders (0.70.7):
|
||||
- React-Core/RCTAnimationHeaders (0.71.2):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-jsiexecutor (= 0.70.7)
|
||||
- React-perflogger (= 0.70.7)
|
||||
- React-cxxreact (= 0.71.2)
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-jsiexecutor (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- Yoga
|
||||
- React-Core/RCTBlobHeaders (0.70.7):
|
||||
- React-Core/RCTBlobHeaders (0.71.2):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-jsiexecutor (= 0.70.7)
|
||||
- React-perflogger (= 0.70.7)
|
||||
- React-cxxreact (= 0.71.2)
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-jsiexecutor (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- Yoga
|
||||
- React-Core/RCTImageHeaders (0.70.7):
|
||||
- React-Core/RCTImageHeaders (0.71.2):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-jsiexecutor (= 0.70.7)
|
||||
- React-perflogger (= 0.70.7)
|
||||
- React-cxxreact (= 0.71.2)
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-jsiexecutor (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- Yoga
|
||||
- React-Core/RCTLinkingHeaders (0.70.7):
|
||||
- React-Core/RCTLinkingHeaders (0.71.2):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-jsiexecutor (= 0.70.7)
|
||||
- React-perflogger (= 0.70.7)
|
||||
- React-cxxreact (= 0.71.2)
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-jsiexecutor (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- Yoga
|
||||
- React-Core/RCTNetworkHeaders (0.70.7):
|
||||
- React-Core/RCTNetworkHeaders (0.71.2):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-jsiexecutor (= 0.70.7)
|
||||
- React-perflogger (= 0.70.7)
|
||||
- React-cxxreact (= 0.71.2)
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-jsiexecutor (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- Yoga
|
||||
- React-Core/RCTSettingsHeaders (0.70.7):
|
||||
- React-Core/RCTSettingsHeaders (0.71.2):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-jsiexecutor (= 0.70.7)
|
||||
- React-perflogger (= 0.70.7)
|
||||
- React-cxxreact (= 0.71.2)
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-jsiexecutor (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- Yoga
|
||||
- React-Core/RCTTextHeaders (0.70.7):
|
||||
- React-Core/RCTTextHeaders (0.71.2):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-jsiexecutor (= 0.70.7)
|
||||
- React-perflogger (= 0.70.7)
|
||||
- React-cxxreact (= 0.71.2)
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-jsiexecutor (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- Yoga
|
||||
- React-Core/RCTVibrationHeaders (0.70.7):
|
||||
- React-Core/RCTVibrationHeaders (0.71.2):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-jsiexecutor (= 0.70.7)
|
||||
- React-perflogger (= 0.70.7)
|
||||
- React-cxxreact (= 0.71.2)
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-jsiexecutor (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- Yoga
|
||||
- React-Core/RCTWebSocket (0.70.7):
|
||||
- React-Core/RCTWebSocket (0.71.2):
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Core/Default (= 0.70.7)
|
||||
- React-cxxreact (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-jsiexecutor (= 0.70.7)
|
||||
- React-perflogger (= 0.70.7)
|
||||
- React-Core/Default (= 0.71.2)
|
||||
- React-cxxreact (= 0.71.2)
|
||||
- React-hermes
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-jsiexecutor (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- Yoga
|
||||
- React-CoreModules (0.70.7):
|
||||
- React-CoreModules (0.71.2):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- RCTTypeSafety (= 0.70.7)
|
||||
- React-Codegen (= 0.70.7)
|
||||
- React-Core/CoreModulesHeaders (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-RCTImage (= 0.70.7)
|
||||
- ReactCommon/turbomodule/core (= 0.70.7)
|
||||
- React-cxxreact (0.70.7):
|
||||
- RCTTypeSafety (= 0.71.2)
|
||||
- React-Codegen (= 0.71.2)
|
||||
- React-Core/CoreModulesHeaders (= 0.71.2)
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-RCTBlob
|
||||
- React-RCTImage (= 0.71.2)
|
||||
- ReactCommon/turbomodule/core (= 0.71.2)
|
||||
- React-cxxreact (0.71.2):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-callinvoker (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-jsinspector (= 0.70.7)
|
||||
- React-logger (= 0.70.7)
|
||||
- React-perflogger (= 0.70.7)
|
||||
- React-runtimeexecutor (= 0.70.7)
|
||||
- React-hermes (0.70.7):
|
||||
- React-callinvoker (= 0.71.2)
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-jsinspector (= 0.71.2)
|
||||
- React-logger (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- React-runtimeexecutor (= 0.71.2)
|
||||
- React-hermes (0.71.2):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- RCT-Folly/Futures (= 2021.07.22.00)
|
||||
- React-cxxreact (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-jsiexecutor (= 0.70.7)
|
||||
- React-jsinspector (= 0.70.7)
|
||||
- React-perflogger (= 0.70.7)
|
||||
- React-jsi (0.70.7):
|
||||
- React-cxxreact (= 0.71.2)
|
||||
- React-jsi
|
||||
- React-jsiexecutor (= 0.71.2)
|
||||
- React-jsinspector (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- React-jsi (0.71.2):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-jsi/Default (= 0.70.7)
|
||||
- React-jsi/Default (0.70.7):
|
||||
- boost (= 1.76.0)
|
||||
- React-jsiexecutor (0.71.2):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-jsiexecutor (0.70.7):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-cxxreact (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-perflogger (= 0.70.7)
|
||||
- React-jsinspector (0.70.7)
|
||||
- React-logger (0.70.7):
|
||||
- React-cxxreact (= 0.71.2)
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- React-jsinspector (0.71.2)
|
||||
- React-logger (0.71.2):
|
||||
- glog
|
||||
- react-native-blur (4.3.0):
|
||||
- React-Core
|
||||
@ -324,7 +352,7 @@ PODS:
|
||||
- React
|
||||
- react-native-menu (0.7.3):
|
||||
- React
|
||||
- react-native-mmkv (2.5.1):
|
||||
- react-native-mmkv (2.6.1):
|
||||
- MMKV (>= 1.2.13)
|
||||
- React-Core
|
||||
- react-native-netinfo (9.3.7):
|
||||
@ -342,74 +370,92 @@ PODS:
|
||||
- RCTTypeSafety
|
||||
- React-Core
|
||||
- ReactCommon/turbomodule/core
|
||||
- react-native-segmented-control (2.2.2):
|
||||
- react-native-segmented-control (2.4.0):
|
||||
- React-Core
|
||||
- React-perflogger (0.70.7)
|
||||
- React-RCTActionSheet (0.70.7):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.70.7)
|
||||
- React-RCTAnimation (0.70.7):
|
||||
- React-perflogger (0.71.2)
|
||||
- React-RCTActionSheet (0.71.2):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.71.2)
|
||||
- React-RCTAnimation (0.71.2):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- RCTTypeSafety (= 0.70.7)
|
||||
- React-Codegen (= 0.70.7)
|
||||
- React-Core/RCTAnimationHeaders (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- ReactCommon/turbomodule/core (= 0.70.7)
|
||||
- React-RCTBlob (0.70.7):
|
||||
- RCTTypeSafety (= 0.71.2)
|
||||
- React-Codegen (= 0.71.2)
|
||||
- React-Core/RCTAnimationHeaders (= 0.71.2)
|
||||
- React-jsi (= 0.71.2)
|
||||
- ReactCommon/turbomodule/core (= 0.71.2)
|
||||
- React-RCTAppDelegate (0.71.2):
|
||||
- RCT-Folly
|
||||
- RCTRequired
|
||||
- RCTTypeSafety
|
||||
- React-Core
|
||||
- ReactCommon/turbomodule/core
|
||||
- React-RCTBlob (0.71.2):
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Codegen (= 0.70.7)
|
||||
- React-Core/RCTBlobHeaders (= 0.70.7)
|
||||
- React-Core/RCTWebSocket (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-RCTNetwork (= 0.70.7)
|
||||
- ReactCommon/turbomodule/core (= 0.70.7)
|
||||
- React-RCTImage (0.70.7):
|
||||
- React-Codegen (= 0.71.2)
|
||||
- React-Core/RCTBlobHeaders (= 0.71.2)
|
||||
- React-Core/RCTWebSocket (= 0.71.2)
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-RCTNetwork (= 0.71.2)
|
||||
- ReactCommon/turbomodule/core (= 0.71.2)
|
||||
- React-RCTImage (0.71.2):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- RCTTypeSafety (= 0.70.7)
|
||||
- React-Codegen (= 0.70.7)
|
||||
- React-Core/RCTImageHeaders (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-RCTNetwork (= 0.70.7)
|
||||
- ReactCommon/turbomodule/core (= 0.70.7)
|
||||
- React-RCTLinking (0.70.7):
|
||||
- React-Codegen (= 0.70.7)
|
||||
- React-Core/RCTLinkingHeaders (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- ReactCommon/turbomodule/core (= 0.70.7)
|
||||
- React-RCTNetwork (0.70.7):
|
||||
- RCTTypeSafety (= 0.71.2)
|
||||
- React-Codegen (= 0.71.2)
|
||||
- React-Core/RCTImageHeaders (= 0.71.2)
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-RCTNetwork (= 0.71.2)
|
||||
- ReactCommon/turbomodule/core (= 0.71.2)
|
||||
- React-RCTLinking (0.71.2):
|
||||
- React-Codegen (= 0.71.2)
|
||||
- React-Core/RCTLinkingHeaders (= 0.71.2)
|
||||
- React-jsi (= 0.71.2)
|
||||
- ReactCommon/turbomodule/core (= 0.71.2)
|
||||
- React-RCTNetwork (0.71.2):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- RCTTypeSafety (= 0.70.7)
|
||||
- React-Codegen (= 0.70.7)
|
||||
- React-Core/RCTNetworkHeaders (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- ReactCommon/turbomodule/core (= 0.70.7)
|
||||
- React-RCTSettings (0.70.7):
|
||||
- RCTTypeSafety (= 0.71.2)
|
||||
- React-Codegen (= 0.71.2)
|
||||
- React-Core/RCTNetworkHeaders (= 0.71.2)
|
||||
- React-jsi (= 0.71.2)
|
||||
- ReactCommon/turbomodule/core (= 0.71.2)
|
||||
- React-RCTSettings (0.71.2):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- RCTTypeSafety (= 0.70.7)
|
||||
- React-Codegen (= 0.70.7)
|
||||
- React-Core/RCTSettingsHeaders (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- ReactCommon/turbomodule/core (= 0.70.7)
|
||||
- React-RCTText (0.70.7):
|
||||
- React-Core/RCTTextHeaders (= 0.70.7)
|
||||
- React-RCTVibration (0.70.7):
|
||||
- RCTTypeSafety (= 0.71.2)
|
||||
- React-Codegen (= 0.71.2)
|
||||
- React-Core/RCTSettingsHeaders (= 0.71.2)
|
||||
- React-jsi (= 0.71.2)
|
||||
- ReactCommon/turbomodule/core (= 0.71.2)
|
||||
- React-RCTText (0.71.2):
|
||||
- React-Core/RCTTextHeaders (= 0.71.2)
|
||||
- React-RCTVibration (0.71.2):
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-Codegen (= 0.70.7)
|
||||
- React-Core/RCTVibrationHeaders (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- ReactCommon/turbomodule/core (= 0.70.7)
|
||||
- React-runtimeexecutor (0.70.7):
|
||||
- React-jsi (= 0.70.7)
|
||||
- ReactCommon/turbomodule/core (0.70.7):
|
||||
- React-Codegen (= 0.71.2)
|
||||
- React-Core/RCTVibrationHeaders (= 0.71.2)
|
||||
- React-jsi (= 0.71.2)
|
||||
- ReactCommon/turbomodule/core (= 0.71.2)
|
||||
- React-runtimeexecutor (0.71.2):
|
||||
- React-jsi (= 0.71.2)
|
||||
- ReactCommon/turbomodule/bridging (0.71.2):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-bridging (= 0.70.7)
|
||||
- React-callinvoker (= 0.70.7)
|
||||
- React-Core (= 0.70.7)
|
||||
- React-cxxreact (= 0.70.7)
|
||||
- React-jsi (= 0.70.7)
|
||||
- React-logger (= 0.70.7)
|
||||
- React-perflogger (= 0.70.7)
|
||||
- React-callinvoker (= 0.71.2)
|
||||
- React-Core (= 0.71.2)
|
||||
- React-cxxreact (= 0.71.2)
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-logger (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- ReactCommon/turbomodule/core (0.71.2):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- hermes-engine
|
||||
- RCT-Folly (= 2021.07.22.00)
|
||||
- React-callinvoker (= 0.71.2)
|
||||
- React-Core (= 0.71.2)
|
||||
- React-cxxreact (= 0.71.2)
|
||||
- React-jsi (= 0.71.2)
|
||||
- React-logger (= 0.71.2)
|
||||
- React-perflogger (= 0.71.2)
|
||||
- RNCAsyncStorage (1.17.11):
|
||||
- React-Core
|
||||
- RNCClipboard (1.11.1):
|
||||
@ -453,9 +499,9 @@ PODS:
|
||||
- React
|
||||
- RNSVG (13.8.0):
|
||||
- React-Core
|
||||
- SDWebImage (5.15.0):
|
||||
- SDWebImage/Core (= 5.15.0)
|
||||
- SDWebImage/Core (5.15.0)
|
||||
- SDWebImage (5.15.2):
|
||||
- SDWebImage/Core (= 5.15.2)
|
||||
- SDWebImage/Core (5.15.2)
|
||||
- SDWebImageAVIFCoder (0.9.5):
|
||||
- libavif (>= 0.9.1)
|
||||
- SDWebImage (~> 5.10)
|
||||
@ -496,13 +542,12 @@ DEPENDENCIES:
|
||||
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
|
||||
- FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
|
||||
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
|
||||
- hermes-engine (from `../node_modules/react-native/sdks/hermes/hermes-engine.podspec`)
|
||||
- hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
|
||||
- libevent (~> 2.1.12)
|
||||
- RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
|
||||
- RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
|
||||
- RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
|
||||
- React (from `../node_modules/react-native/`)
|
||||
- React-bridging (from `../node_modules/react-native/ReactCommon`)
|
||||
- React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
|
||||
- React-Codegen (from `build/generated/ios`)
|
||||
- React-Core (from `../node_modules/react-native/`)
|
||||
@ -526,10 +571,11 @@ DEPENDENCIES:
|
||||
- "react-native-paste-input (from `../node_modules/@mattermost/react-native-paste-input`)"
|
||||
- react-native-quick-base64 (from `../node_modules/react-native-quick-base64`)
|
||||
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
|
||||
- "react-native-segmented-control (from `../node_modules/@react-native-community/segmented-control`)"
|
||||
- "react-native-segmented-control (from `../node_modules/@react-native-segmented-control/segmented-control`)"
|
||||
- React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
|
||||
- React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
|
||||
- React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
|
||||
- React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`)
|
||||
- React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
|
||||
- React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
|
||||
- React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
|
||||
@ -622,7 +668,7 @@ EXTERNAL SOURCES:
|
||||
glog:
|
||||
:podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
|
||||
hermes-engine:
|
||||
:podspec: "../node_modules/react-native/sdks/hermes/hermes-engine.podspec"
|
||||
:podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
|
||||
RCT-Folly:
|
||||
:podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec"
|
||||
RCTRequired:
|
||||
@ -631,8 +677,6 @@ EXTERNAL SOURCES:
|
||||
:path: "../node_modules/react-native/Libraries/TypeSafety"
|
||||
React:
|
||||
:path: "../node_modules/react-native/"
|
||||
React-bridging:
|
||||
:path: "../node_modules/react-native/ReactCommon"
|
||||
React-callinvoker:
|
||||
:path: "../node_modules/react-native/ReactCommon/callinvoker"
|
||||
React-Codegen:
|
||||
@ -678,13 +722,15 @@ EXTERNAL SOURCES:
|
||||
react-native-safe-area-context:
|
||||
:path: "../node_modules/react-native-safe-area-context"
|
||||
react-native-segmented-control:
|
||||
:path: "../node_modules/@react-native-community/segmented-control"
|
||||
:path: "../node_modules/@react-native-segmented-control/segmented-control"
|
||||
React-perflogger:
|
||||
:path: "../node_modules/react-native/ReactCommon/reactperflogger"
|
||||
React-RCTActionSheet:
|
||||
:path: "../node_modules/react-native/Libraries/ActionSheetIOS"
|
||||
React-RCTAnimation:
|
||||
:path: "../node_modules/react-native/Libraries/NativeAnimation"
|
||||
React-RCTAppDelegate:
|
||||
:path: "../node_modules/react-native/Libraries/AppDelegate"
|
||||
React-RCTBlob:
|
||||
:path: "../node_modules/react-native/Libraries/Blob"
|
||||
React-RCTImage:
|
||||
@ -723,35 +769,35 @@ EXTERNAL SOURCES:
|
||||
:path: "../node_modules/react-native/ReactCommon/yoga"
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
boost: a7c83b31436843459a1961bfd74b96033dc77234
|
||||
boost: 57d2868c099736d80fcd648bf211b4431e51a558
|
||||
DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
|
||||
EXApplication: 034b1c40a8e9fe1bff76a1e511ee90dff64ad834
|
||||
EXAV: 1242c4c206fc522058a2749019064e979a4c0b76
|
||||
EXConstants: 397186c7e312c33eb1ab85fa1f434dc123778136
|
||||
EXErrorRecovery: ae43433feb0608a64dc5b1c8363b3e7769a9ea24
|
||||
EXFileSystem: d9fea7fe7a4390a0ef226cac33958de9178388b9
|
||||
EXFont: 319606bfe48c33b5b5063fb0994afdc496befe80
|
||||
EXApplication: d8f53a7eee90a870a75656280e8d4b85726ea903
|
||||
EXAV: f1f69397ecdcf44cfacd4ff5d338cd1b96891e87
|
||||
EXConstants: f348da07e21b23d2b085e270d7b74f282df1a7d9
|
||||
EXErrorRecovery: ebb57ae947ff94667f1cbc12f403bb5a043d734d
|
||||
EXFileSystem: 844e86ca9b5375486ecc4ef06d3838d5597d895d
|
||||
EXFont: 6ea3800df746be7233208d80fe379b8ed74f4272
|
||||
EXNotifications: babce2a87b7922051354fcfe7a74dd279b7e272a
|
||||
Expo: b9fa98bf260992312ee3c424400819fb9beadafe
|
||||
ExpoCrypto: 98c71864077c4d0fe798a6a5aee1a8c1294cef85
|
||||
ExpoHaptics: 97c532f311c3e638c14a6134f23564d007b76de4
|
||||
ExpoImage: 748f2b8d3974f1d51c7706fd61057b93241738aa
|
||||
ExpoKeepAwake: 69b59d0a8d2b24de9f82759c39b3821fec030318
|
||||
ExpoLocalization: 28ce7cfa174a752f7ace84189710f1385373655b
|
||||
ExpoModulesCore: 485dff3a59b036a33b6050c0a5aea3cf1037fdd1
|
||||
ExpoRandom: d8fc05d0d071485b06a97ab2a78cb7f8082052cd
|
||||
ExpoStoreReview: e96ba0690ea21dc5d341cfafd0b26bac7bc974f5
|
||||
ExpoVideoThumbnails: 865fa65f2b4f006ff02ef9e3e9c10370d9442d0a
|
||||
Expo: 1b7b4ec09bd939db6d98985231a0789aa3f6670a
|
||||
ExpoCrypto: 477dfe89c81527b376f2c344ca1d2a01244b243c
|
||||
ExpoHaptics: 5156bc5160d8e04c170dd6e645a71154951a2ad9
|
||||
ExpoImage: 817b31855fdb817e21f962e8e8ccf5cbc35e1191
|
||||
ExpoKeepAwake: 69f5f627670d62318410392d03e0b5db0f85759a
|
||||
ExpoLocalization: f26cd431ad9ea3533c5b08c4fabd879176a794bb
|
||||
ExpoModulesCore: 2f4bd2ae0cd03d30c3c286f5d843e22f72ccdb55
|
||||
ExpoRandom: 7ee07d62e7003b74d0536e0495e3a653fe1b2a74
|
||||
ExpoStoreReview: d057dcca4b9c95f3c9db11bd2e168dab9cba59f3
|
||||
ExpoVideoThumbnails: 0021303b614a89fcc5df8b59d9d37ddf14a7d4cf
|
||||
ExpoWebBrowser: 073e50f16669d498fb49063b9b7fe780b24f7fda
|
||||
EXScreenCapture: bcf94c8199cd1876166e384b2398ff519a8ef7ee
|
||||
EXScreenOrientation: d43067a93e75234a7ce5154e2759fff2238dbfd5
|
||||
EXSecureStore: ec150f49b22269022c6184f1711abb05fe98d72d
|
||||
EXScreenCapture: d9284f4a6508c86d0d463805b93672397d18de0f
|
||||
EXScreenOrientation: 52220f8f2477ed25a37e3b2cdbbaa8635d250256
|
||||
EXSecureStore: e8923258361cc406d0401af380f12bd05b2b720f
|
||||
EXSplashScreen: 3e989924f61a8dd07ee4ea584c6ba14be9b51949
|
||||
FBLazyVector: a6454570f573a0f6f1d397e5a95c13e8e45d1700
|
||||
FBReactNativeSpec: 09e8dfba44487e5dc4882a9f5318cde67549549c
|
||||
FBLazyVector: d58428b28fe1f5070fe993495b0e2eaf701d3820
|
||||
FBReactNativeSpec: 225fb0f0ab00493ce0731f954da3658638d9b191
|
||||
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
|
||||
glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
|
||||
hermes-engine: 566e656aa95456a3f3f739fd76ea9a9656f2633f
|
||||
hermes-engine: 6351580c827b3b03e5f25aadcf989f582d0b0a86
|
||||
libaom: 9bb51e0f8f9192245e3ca2a1c9e4375d9cbccc52
|
||||
libavif: e242998ccec1c83bcba0bbdc256f460ad5077348
|
||||
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
|
||||
@ -759,62 +805,62 @@ SPEC CHECKSUMS:
|
||||
libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef
|
||||
MMKV: 7f34558bbb5a33b0eaefae2de4b6a20a2ffdad6f
|
||||
MMKVCore: ddf41b9d9262f058419f9ba7598719af56c02cd3
|
||||
RCT-Folly: 0080d0a6ebf2577475bda044aa59e2ca1f909cda
|
||||
RCTRequired: 837880d26ec119e105317dc28a456f3016bf16d1
|
||||
RCTTypeSafety: 5c854c04c3383cab04f404e25d408ed52124b300
|
||||
React: ec6efc54c0fbb7c2e7147624c78065be80753082
|
||||
React-bridging: 7dd96a58f896a1a7422a491d17ec644e87277953
|
||||
React-callinvoker: f348d204f7bbe6020d4fd0dd57303f5b48a28003
|
||||
React-Codegen: 73350192a09163a640c23baf795464474be0d793
|
||||
React-Core: c57b11fd672421049038ef36881372da2605a0cd
|
||||
React-CoreModules: 2d91acffc3924adac6b508e3fc44121aa719ec40
|
||||
React-cxxreact: ee2ab13a1db086dc152421aa42dc94cc68f412a1
|
||||
React-hermes: be9d64f5019238ce22ae4e7d242c4f2e96d60595
|
||||
React-jsi: 04031a830f9714e95d517153817ba7bfc15bfdf8
|
||||
React-jsiexecutor: e95cdd036e7947ddf87f3049319ac3064deb76b5
|
||||
React-jsinspector: 1c34fea1868136ecde647bc11fae9266d4143693
|
||||
React-logger: e9f407f9fdf3f3ce7749ae6f88affe63e8446019
|
||||
RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1
|
||||
RCTRequired: c154ebcfbf41d6fef86c52674fc1aa08837ff538
|
||||
RCTTypeSafety: 3063e5a1e5b1dc2cbeda5c8f8926c0ad1a6b0871
|
||||
React: 0a1a36e8e81cfaac244ed88b97f23ab56e5434f0
|
||||
React-callinvoker: 679a09fbfe1a8bbf0c8588b588bf3ef85e7e4922
|
||||
React-Codegen: 78f8966839f22b54d3303a6aca2679bce5723c3f
|
||||
React-Core: 679e5ff1eb0e3122463976d0b2049bebcb7b33d6
|
||||
React-CoreModules: 06cbf15185e6daf9fb3aec02c963f4807bd794b3
|
||||
React-cxxreact: 645dc75c9deba4c15698b1b5902236d6a766461f
|
||||
React-hermes: bc7bcfeaaa7cb98dc9f9252f2f3eca66f06f01e2
|
||||
React-jsi: 82625f9f1f8d7abf716d897612a9ea06ecf6db6e
|
||||
React-jsiexecutor: c7e028406112db456ac3cf5720d266bc7bc20938
|
||||
React-jsinspector: ea8101acf525ec08b2d87ddf0637d45f8e3b4148
|
||||
React-logger: 97987f46779d8dd24656474ad0c43a5b459f31d6
|
||||
react-native-blur: 50c9feabacbc5f49b61337ebc32192c6be7ec3c3
|
||||
react-native-cameraroll: 5b25d0be40185d02e522bf2abf8a1ba4e8faa107
|
||||
react-native-image-picker: 8cb4280e2c1efc3daeb2d9d597f9429a60472e40
|
||||
react-native-ios-context-menu: e529171ba760a1af7f2ef0729f5a7f4d226171c5
|
||||
react-native-language-detection: f414937fa715108ab50a6269a3de0bcb95e4ceb0
|
||||
react-native-menu: 9d7d6f819cc7fa14a15cf86888c53f3240d86f1b
|
||||
react-native-mmkv: 69b9c003f10afdd01addf7c6ee784ce42ee2eff3
|
||||
react-native-mmkv: 28af0c2a3dc9495c2cea80f9d41444e096c2a1ef
|
||||
react-native-netinfo: 2517ad504b3d303e90d7a431b0fcaef76d207983
|
||||
react-native-pager-view: 54bed894cecebe28cede54c01038d9d1e122de43
|
||||
react-native-paste-input: fb7156dc75960c9895ddd9b9d68eeb874c9f323a
|
||||
react-native-quick-base64: e657e9197e61b60a9dec49807843052b830da254
|
||||
react-native-safe-area-context: 39c2d8be3328df5d437ac1700f4f3a4f75716acc
|
||||
react-native-segmented-control: 65df6cd0619b780b3843d574a72d4c7cec396097
|
||||
React-perflogger: 52a94f38c19a518d05726624b49bfc192639374d
|
||||
React-RCTActionSheet: 7b89fe64a852bc3ae39b91dbd142ef09931ef3f7
|
||||
React-RCTAnimation: ad84bfbf8c5f6f77e65092d0c2b0506b80b5cf99
|
||||
React-RCTBlob: e4ee3ab649459329f5aa59d903762bfbd6164220
|
||||
React-RCTImage: aeb508f6ac80a94904a646dde61b0f67ea757ea7
|
||||
React-RCTLinking: 1171b3fdc265c479b7039069ce7e8fef68ca70aa
|
||||
React-RCTNetwork: 5d87cc4afd1fcef86fb2f804f26366f0314769fe
|
||||
React-RCTSettings: 644545854880b7d03c49f620664a307fd4613a1d
|
||||
React-RCTText: f8e4a283be2290a76b89f4a83ba2277faf90930d
|
||||
React-RCTVibration: eb7837d55b87c7a4ead3ab7632ad70dca87c65dc
|
||||
React-runtimeexecutor: 7cec9ed92ebde8309902530bb566819645c84ee5
|
||||
ReactCommon: 0253d197eaa7f6689dcd3e7d5360449ab93e10df
|
||||
react-native-segmented-control: 06607462630512ff8eef652ec560e6235a30cc3e
|
||||
React-perflogger: c7ccda3d1d1da837f7ff4e54e816022a6803ee87
|
||||
React-RCTActionSheet: 01c125aebbad462a24228f68c584c7a921d6c28e
|
||||
React-RCTAnimation: 5277a9440acffc4a5b7baa6ae3880fe467277ae6
|
||||
React-RCTAppDelegate: 3977201606125157aa94872b4171ca316478939b
|
||||
React-RCTBlob: 8e15fc9091d8947f406ba706f11505b38b1b5e40
|
||||
React-RCTImage: 65319acfe82b85219b2d410725a593abe19ac795
|
||||
React-RCTLinking: a5fc2b9d7a346d6e7d34de8093bb5d1064042508
|
||||
React-RCTNetwork: 5d1efcd01ca7f08ebf286d68be544f747a5d315a
|
||||
React-RCTSettings: fa760b0add819ac3ad73b06715f9547316acdf20
|
||||
React-RCTText: 05c244b135d75d4395eb35c012949a5326f8ab70
|
||||
React-RCTVibration: 0af3babdeee1b2d052811a2f86977d1e1c81ebd1
|
||||
React-runtimeexecutor: 4bf9a9086d27f74065fce1dddac274aa95216952
|
||||
ReactCommon: f697c0ac52e999aa818e43e2b6f277787c735e2d
|
||||
RNCAsyncStorage: 8616bd5a58af409453ea4e1b246521bb76578d60
|
||||
RNCClipboard: 2834e1c4af68697089cdd455ee4a4cdd198fa7dd
|
||||
RNGestureHandler: 071d7a9ad81e8b83fe7663b303d132406a7d8f39
|
||||
RNReanimated: 6668b0587bebd4b15dd849b99e5a9c70fc12ed95
|
||||
RNReanimated: cc5e3aa479cb9170bcccf8204291a6950a3be128
|
||||
RNScreens: ea4cd3a853063cda19a4e3c28d2e52180c80f4eb
|
||||
RNSentry: 7e90aec2633d2fdad8aeb839c9915e4376fd27d1
|
||||
RNShareMenu: cb9dac548c8bf147d06f0bf07296ad51ea9f5fc3
|
||||
RNSVG: c1e76b81c76cdcd34b4e1188852892dc280eb902
|
||||
SDWebImage: 9bec4c5cdd9579e1f57104735ee0c37df274d593
|
||||
SDWebImage: 8ab87d4b3e5cc4927bd47f78db6ceb0b94442577
|
||||
SDWebImageAVIFCoder: d759e21cf4efb640cc97250566aa556ad8bb877c
|
||||
SDWebImageSVGCoder: 6fc109f9c2a82ab44510fff410b88b1a6c271ee8
|
||||
SDWebImageWebPCoder: 18503de6621dd2c420d680e33d46bf8e1d5169b0
|
||||
Sentry: 4c9babff9034785067c896fd580b1f7de44da020
|
||||
Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b
|
||||
Yoga: 92d086bb705a41cc588599b51db726ba7b1d341c
|
||||
Yoga: 5b0304b3dbef2b52e078052138e23a19c7dacaef
|
||||
|
||||
PODFILE CHECKSUM: 08742f25aa1cdb93d6d5d5efeafd8803ba02b689
|
||||
PODFILE CHECKSUM: 61a84f1ad8a466fbbbf09e0f8bb3ed30b2d5e301
|
||||
|
||||
COCOAPODS: 1.11.3
|
||||
|
@ -382,7 +382,7 @@
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-tooot/Pods-tooot-frameworks.sh",
|
||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/hermes.framework/hermes",
|
||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes",
|
||||
);
|
||||
name = "[CP] Embed Pods Frameworks";
|
||||
outputPaths = (
|
||||
@ -573,8 +573,9 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.xmflsct.app.tooot;
|
||||
PRODUCT_NAME = tooot;
|
||||
PROVISIONING_PROFILE_SPECIFIER = "match AdHoc com.xmflsct.app.tooot";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "tooot-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_PRECOMPILE_BRIDGING_HEADER = YES;
|
||||
@ -612,8 +613,9 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.xmflsct.app.tooot;
|
||||
PRODUCT_NAME = tooot;
|
||||
PROVISIONING_PROFILE_SPECIFIER = "match AppStore com.xmflsct.app.tooot";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "tooot-Bridging-Header.h";
|
||||
SWIFT_PRECOMPILE_BRIDGING_HEADER = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
|
@ -1,9 +1,9 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <React/RCTBridgeDelegate.h>
|
||||
#import <RCTAppDelegate.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
#import <Expo/Expo.h>
|
||||
|
||||
@interface AppDelegate : EXAppDelegateWrapper <UIApplicationDelegate, RCTBridgeDelegate>
|
||||
@interface AppDelegate : RCTAppDelegate
|
||||
|
||||
@end
|
||||
|
@ -1,88 +1,16 @@
|
||||
#import "AppDelegate.h"
|
||||
|
||||
#import <React/RCTBridge.h>
|
||||
#import <React/RCTBundleURLProvider.h>
|
||||
#import <React/RCTRootView.h>
|
||||
|
||||
#import <React/RCTAppSetupUtils.h>
|
||||
|
||||
#import <React/RCTLinkingManager.h>
|
||||
#import <RNShareMenu/ShareMenuManager.h>
|
||||
|
||||
#if RCT_NEW_ARCH_ENABLED
|
||||
#import <React/CoreModulesPlugins.h>
|
||||
#import <React/RCTCxxBridgeDelegate.h>
|
||||
#import <React/RCTFabricSurfaceHostingProxyRootView.h>
|
||||
#import <React/RCTSurfacePresenter.h>
|
||||
#import <React/RCTSurfacePresenterBridgeAdapter.h>
|
||||
#import <ReactCommon/RCTTurboModuleManager.h>
|
||||
|
||||
#import <react/config/ReactNativeConfig.h>
|
||||
|
||||
static NSString *const kRNConcurrentRoot = @"concurrentRoot";
|
||||
|
||||
@interface AppDelegate () <RCTCxxBridgeDelegate, RCTTurboModuleManagerDelegate> {
|
||||
RCTTurboModuleManager *_turboModuleManager;
|
||||
RCTSurfacePresenterBridgeAdapter *_bridgeAdapter;
|
||||
std::shared_ptr<const facebook::react::ReactNativeConfig> _reactNativeConfig;
|
||||
facebook::react::ContextContainer::Shared _contextContainer;
|
||||
}
|
||||
@end
|
||||
#endif
|
||||
|
||||
@implementation AppDelegate
|
||||
|
||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
||||
{
|
||||
RCTAppSetupPrepareApp(application);
|
||||
|
||||
RCTBridge *bridge = [self.reactDelegate createBridgeWithDelegate:self launchOptions:launchOptions];
|
||||
|
||||
#if RCT_NEW_ARCH_ENABLED
|
||||
_contextContainer = std::make_shared<facebook::react::ContextContainer const>();
|
||||
_reactNativeConfig = std::make_shared<facebook::react::EmptyReactNativeConfig const>();
|
||||
_contextContainer->insert("ReactNativeConfig", _reactNativeConfig);
|
||||
_bridgeAdapter = [[RCTSurfacePresenterBridgeAdapter alloc] initWithBridge:bridge contextContainer:_contextContainer];
|
||||
bridge.surfacePresenter = _bridgeAdapter.surfacePresenter;
|
||||
#endif
|
||||
|
||||
UIView *rootView = [self.reactDelegate createRootViewWithBridge:bridge moduleName:@"main" initialProperties:nil];
|
||||
|
||||
// NSDictionary *initProps = [self prepareInitialProps];
|
||||
// UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"tooot", initProps);
|
||||
|
||||
if (@available(iOS 13.0, *)) {
|
||||
rootView.backgroundColor = [UIColor colorNamed:@"SplashScreenBackgroundColor"];
|
||||
} else {
|
||||
rootView.backgroundColor = [UIColor whiteColor];
|
||||
}
|
||||
|
||||
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
|
||||
UIViewController *rootViewController = [self.reactDelegate createRootViewController];
|
||||
rootViewController.view = rootView;
|
||||
self.window.rootViewController = rootViewController;
|
||||
[self.window makeKeyAndVisible];
|
||||
[super application:application didFinishLaunchingWithOptions:launchOptions];
|
||||
return YES;
|
||||
}
|
||||
|
||||
/// This method controls whether the `concurrentRoot`feature of React18 is turned on or off.
|
||||
///
|
||||
/// @see: https://reactjs.org/blog/2022/03/29/react-v18.html
|
||||
/// @note: This requires to be rendering on Fabric (i.e. on the New Architecture).
|
||||
/// @return: `true` if the `concurrentRoot` feture is enabled. Otherwise, it returns `false`.
|
||||
- (BOOL)concurrentRootEnabled
|
||||
{
|
||||
// Switch this bool to turn on and off the concurrent root
|
||||
return false;
|
||||
}
|
||||
- (NSDictionary *)prepareInitialProps
|
||||
{
|
||||
NSMutableDictionary *initProps = [NSMutableDictionary new];
|
||||
#ifdef RCT_NEW_ARCH_ENABLED
|
||||
initProps[kRNConcurrentRoot] = @([self concurrentRootEnabled]);
|
||||
#endif
|
||||
return initProps;
|
||||
self.moduleName = @"main";
|
||||
return [super application:application didFinishLaunchingWithOptions:launchOptions];
|
||||
}
|
||||
|
||||
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
|
||||
@ -94,40 +22,16 @@ static NSString *const kRNConcurrentRoot = @"concurrentRoot";
|
||||
#endif
|
||||
}
|
||||
|
||||
#if RCT_NEW_ARCH_ENABLED
|
||||
|
||||
#pragma mark - RCTCxxBridgeDelegate
|
||||
|
||||
- (std::unique_ptr<facebook::react::JSExecutorFactory>)jsExecutorFactoryForBridge:(RCTBridge *)bridge
|
||||
/// This method controls whether the `concurrentRoot`feature of React18 is turned on or off.
|
||||
///
|
||||
/// @see: https://reactjs.org/blog/2022/03/29/react-v18.html
|
||||
/// @note: This requires to be rendering on Fabric (i.e. on the New Architecture).
|
||||
/// @return: `true` if the `concurrentRoot` feature is enabled. Otherwise, it returns `false`.
|
||||
- (BOOL)concurrentRootEnabled
|
||||
{
|
||||
_turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridge:bridge delegate:self jsInvoker:bridge.jsCallInvoker];
|
||||
return RCTAppSetupDefaultJsExecutorFactory(bridge, _turboModuleManager);
|
||||
return true;
|
||||
}
|
||||
|
||||
#pragma mark RCTTurboModuleManagerDelegate
|
||||
|
||||
- (Class)getModuleClassFromName:(const char *)name
|
||||
{
|
||||
return RCTCoreModulesClassProvider(name);
|
||||
}
|
||||
|
||||
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const std::string &)name jsInvoker:(std::shared_ptr<facebook::react::CallInvoker>)jsInvoker
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const std::string &)name initParams: (const facebook::react::ObjCTurboModule::InitParams &)params
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
- (id<RCTTurboModule>)getModuleInstanceFromClass:(Class)moduleClass
|
||||
{
|
||||
return RCTAppSetupDefaultModuleFromClass(moduleClass);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// Linking API
|
||||
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
|
||||
NSString *urlString = url.absoluteString;
|
||||
|
@ -1,92 +1,92 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleAllowMixedLocalizations</key>
|
||||
<true/>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>tooot</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.2</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>CFBundleURLName</key>
|
||||
<string>com.xmflsct.app.tooot</string>
|
||||
<key>CFBundleURLSchemes</key>
|
||||
<array>
|
||||
<string>tooot-share</string>
|
||||
<string>tooot</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2102022230</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.social-networking</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSExceptionDomains</key>
|
||||
<dict>
|
||||
<key>localhost</key>
|
||||
<dict>
|
||||
<key>NSExceptionAllowsInsecureHTTPLoads</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>NSLocationWhenInUseUsageDescription</key>
|
||||
<string></string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>NSMicrophoneUsageDescription</key>
|
||||
<string>$(PRODUCT_NAME) DOES NOT need microphone permission. Please reject this request.</string>
|
||||
<key>NSPhotoLibraryAddUsageDescription</key>
|
||||
<string>Allow $(PRODUCT_NAME) to save an image to your camera roll</string>
|
||||
<key>NSPhotoLibraryUsageDescription</key>
|
||||
<string>Allow $(PRODUCT_NAME) to access your camera roll to attach photos or videos to your toot</string>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>SplashScreen</string>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
</array>
|
||||
<key>UIRequiresFullScreen</key>
|
||||
<false/>
|
||||
<key>UIStatusBarHidden</key>
|
||||
<true/>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UIUserInterfaceStyle</key>
|
||||
<string>Automatic</string>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false/>
|
||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<key>CFBundleAllowMixedLocalizations</key>
|
||||
<true/>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>tooot</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.2</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>CFBundleURLName</key>
|
||||
<string>com.xmflsct.app.tooot</string>
|
||||
<key>CFBundleURLSchemes</key>
|
||||
<array>
|
||||
<string>tooot-share</string>
|
||||
<string>tooot</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2102022230</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.social-networking</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSExceptionDomains</key>
|
||||
<dict>
|
||||
<key>localhost</key>
|
||||
<dict>
|
||||
<key>NSExceptionAllowsInsecureHTTPLoads</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>NSLocationWhenInUseUsageDescription</key>
|
||||
<string></string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>NSMicrophoneUsageDescription</key>
|
||||
<string>$(PRODUCT_NAME) DOES NOT need microphone permission. Please reject this request.</string>
|
||||
<key>NSPhotoLibraryAddUsageDescription</key>
|
||||
<string>Allow $(PRODUCT_NAME) to save an image to your camera roll</string>
|
||||
<key>NSPhotoLibraryUsageDescription</key>
|
||||
<string>Allow $(PRODUCT_NAME) to access your camera roll to attach photos or videos to your toot</string>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>SplashScreen.storyboard</string>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
</array>
|
||||
<key>UIRequiresFullScreen</key>
|
||||
<false/>
|
||||
<key>UIStatusBarHidden</key>
|
||||
<true/>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UIUserInterfaceStyle</key>
|
||||
<string>Automatic</string>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
47
package.json
47
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "tooot",
|
||||
"version": "4.8.8",
|
||||
"version": "4.8.9",
|
||||
"description": "tooot for Mastodon",
|
||||
"author": "xmflsct <me@xmflsct.com>",
|
||||
"license": "GPL-3.0-or-later",
|
||||
@ -31,9 +31,9 @@
|
||||
"@react-native-clipboard/clipboard": "^1.11.1",
|
||||
"@react-native-community/blur": "^4.3.0",
|
||||
"@react-native-community/netinfo": "9.3.7",
|
||||
"@react-native-community/segmented-control": "^2.2.2",
|
||||
"@react-native-firebase/app": "^16.7.0",
|
||||
"@react-native-firebase/app": "^17.1.0",
|
||||
"@react-native-menu/menu": "^0.7.3",
|
||||
"@react-native-segmented-control/segmented-control": "^2.4.0",
|
||||
"@react-navigation/bottom-tabs": "^6.5.4",
|
||||
"@react-navigation/native": "^6.1.3",
|
||||
"@react-navigation/native-stack": "^6.9.9",
|
||||
@ -41,26 +41,26 @@
|
||||
"@sentry/react-native": "4.14.0",
|
||||
"@sharcoux/slider": "^6.1.1",
|
||||
"@tanstack/react-query": "^4.24.4",
|
||||
"axios": "^1.2.4",
|
||||
"axios": "^1.3.2",
|
||||
"diff": "^5.1.0",
|
||||
"expo": "^47.0.13",
|
||||
"expo": "^48.0.0-beta",
|
||||
"expo-auth-session": "^3.8.0",
|
||||
"expo-av": "^13.1.0",
|
||||
"expo-constants": "^14.1.0",
|
||||
"expo-crypto": "^12.1.0",
|
||||
"expo-file-system": "^15.1.1",
|
||||
"expo-haptics": "^12.1.0",
|
||||
"expo-image": "^1.0.0-beta.6",
|
||||
"expo-av": "^13.2.1",
|
||||
"expo-constants": "^14.2.1",
|
||||
"expo-crypto": "^12.2.1",
|
||||
"expo-file-system": "^15.2.2",
|
||||
"expo-haptics": "^12.2.1",
|
||||
"expo-image": "^1.0.0-rc.0",
|
||||
"expo-linking": "^3.3.0",
|
||||
"expo-localization": "^14.0.0",
|
||||
"expo-localization": "^14.1.1",
|
||||
"expo-notifications": "^0.17.0",
|
||||
"expo-random": "^13.0.0",
|
||||
"expo-screen-capture": "^5.0.0",
|
||||
"expo-screen-orientation": "^5.0.1",
|
||||
"expo-secure-store": "^12.0.0",
|
||||
"expo-random": "^13.1.1",
|
||||
"expo-screen-capture": "^5.1.1",
|
||||
"expo-screen-orientation": "^5.1.1",
|
||||
"expo-secure-store": "^12.1.1",
|
||||
"expo-splash-screen": "^0.17.5",
|
||||
"expo-store-review": "^6.1.0",
|
||||
"expo-video-thumbnails": "^7.1.0",
|
||||
"expo-store-review": "^6.2.1",
|
||||
"expo-video-thumbnails": "^7.2.1",
|
||||
"expo-web-browser": "~12.0.0",
|
||||
"htmlparser2": "^8.0.1",
|
||||
"i18next": "^22.4.9",
|
||||
@ -68,15 +68,15 @@
|
||||
"lodash": "^4.17.21",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-i18next": "^12.1.4",
|
||||
"react-intl": "^6.2.7",
|
||||
"react-native": "^0.70.7",
|
||||
"react-i18next": "^12.1.5",
|
||||
"react-intl": "^6.2.8",
|
||||
"react-native": "^0.71.2",
|
||||
"react-native-flash-message": "^0.4.0",
|
||||
"react-native-gesture-handler": "~2.9.0",
|
||||
"react-native-image-picker": "^5.0.1",
|
||||
"react-native-ios-context-menu": "^1.15.3",
|
||||
"react-native-language-detection": "^0.2.2",
|
||||
"react-native-mmkv": "~2.5.1",
|
||||
"react-native-mmkv": "~2.6.1",
|
||||
"react-native-pager-view": "^6.1.2",
|
||||
"react-native-quick-base64": "^2.0.5",
|
||||
"react-native-reanimated": "^2.14.4",
|
||||
@ -100,9 +100,8 @@
|
||||
"@types/diff": "^5.0.2",
|
||||
"@types/linkify-it": "^3.0.2",
|
||||
"@types/lodash": "^4.14.191",
|
||||
"@types/react": "^18.0.27",
|
||||
"@types/react": "^18.0.28",
|
||||
"@types/react-dom": "^18.0.10",
|
||||
"@types/react-native": "^0.70.10",
|
||||
"@types/react-native-share-menu": "^5.0.2",
|
||||
"@types/url-parse": "^1.4.8",
|
||||
"babel-plugin-module-resolver": "^5.0.0",
|
||||
|
10
src/App.tsx
10
src/App.tsx
@ -18,16 +18,15 @@ import ThemeManager from '@utils/styles/ThemeManager'
|
||||
import * as Localization from 'expo-localization'
|
||||
import * as SplashScreen from 'expo-splash-screen'
|
||||
import React, { useCallback, useEffect, useState } from 'react'
|
||||
import { LogBox, Platform } from 'react-native'
|
||||
import { Platform } from 'react-native'
|
||||
import { GestureHandlerRootView } from 'react-native-gesture-handler'
|
||||
import { SafeAreaProvider } from 'react-native-safe-area-context'
|
||||
import { enableFreeze } from 'react-native-screens'
|
||||
import i18n from './i18n'
|
||||
import Screens from './screens'
|
||||
|
||||
Platform.select({
|
||||
android: LogBox.ignoreLogs(['Setting a timer for a long period of time'])
|
||||
})
|
||||
log('log', 'App', 'delay splash')
|
||||
SplashScreen.preventAutoHideAsync()
|
||||
|
||||
dev()
|
||||
sentry()
|
||||
@ -36,9 +35,6 @@ audio()
|
||||
push()
|
||||
enableFreeze(true)
|
||||
|
||||
log('log', 'App', 'delay splash')
|
||||
SplashScreen.preventAutoHideAsync()
|
||||
|
||||
const App: React.FC = () => {
|
||||
log('log', 'App', 'rendering App')
|
||||
const [appIsReady, setAppIsReady] = useState(false)
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { StyleConstants } from '@utils/styles/constants'
|
||||
import { useTheme } from '@utils/styles/ThemeManager'
|
||||
import React, { forwardRef, RefObject } from 'react'
|
||||
import React, { ForwardedRef, forwardRef } from 'react'
|
||||
import { Platform, TextInput, TextInputProps, View } from 'react-native'
|
||||
import Animated, { useAnimatedStyle, withTiming } from 'react-native-reanimated'
|
||||
import { EmojisState } from './Emojis/Context'
|
||||
@ -35,7 +35,7 @@ const ComponentInput = forwardRef(
|
||||
isFocused,
|
||||
...props
|
||||
}: Props,
|
||||
ref: RefObject<TextInput>
|
||||
ref: ForwardedRef<TextInput>
|
||||
) => {
|
||||
const { colors, mode } = useTheme()
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { useHeaderHeight } from '@react-navigation/elements'
|
||||
import { StyleConstants } from '@utils/styles/constants'
|
||||
import { forwardRef, PropsWithChildren, RefObject } from 'react'
|
||||
import { ForwardedRef, forwardRef, PropsWithChildren } from 'react'
|
||||
import { KeyboardAvoidingView, Platform, ScrollView } from 'react-native'
|
||||
import { SafeAreaView } from 'react-native-safe-area-context'
|
||||
|
||||
export const ModalScrollView = forwardRef(
|
||||
({ children }: PropsWithChildren, ref: RefObject<ScrollView>) => {
|
||||
({ children }: PropsWithChildren, ref: ForwardedRef<ScrollView>) => {
|
||||
const headerHeight = useHeaderHeight()
|
||||
|
||||
return (
|
||||
|
@ -177,7 +177,7 @@ const TimelineRefresh: React.FC<Props> = ({
|
||||
flRef.current?.scrollToOffset({ offset: scrollY.value - 15, animated: true })
|
||||
}
|
||||
|
||||
await new Promise(promise => setTimeout(promise, 64))
|
||||
await new Promise<void>(promise => setTimeout(promise, 64))
|
||||
queryClient.setQueryData<
|
||||
InfiniteData<
|
||||
PagedResponse<(Mastodon.Status | Mastodon.Notification | Mastodon.Conversation)[]>
|
||||
|
@ -103,7 +103,7 @@ const TimelineActions: React.FC = () => {
|
||||
cancelButtonIndex: 2,
|
||||
...androidActionSheetStyles(colors)
|
||||
},
|
||||
(selectedIndex: number) => {
|
||||
selectedIndex => {
|
||||
switch (selectedIndex) {
|
||||
case 0:
|
||||
mutation.mutate({
|
||||
|
@ -6,7 +6,7 @@ import { StyleConstants } from '@utils/styles/constants'
|
||||
import { useTheme } from '@utils/styles/ThemeManager'
|
||||
import { Audio } from 'expo-av'
|
||||
import React, { useCallback, useEffect, useRef, useState } from 'react'
|
||||
import { AppState, AppStateStatus, StyleSheet, View } from 'react-native'
|
||||
import { AppState, AppStateStatus, View } from 'react-native'
|
||||
import AttachmentAltText from './AltText'
|
||||
import { aspectRatio } from './dimensions'
|
||||
|
||||
@ -60,15 +60,23 @@ const AttachmentAudio: React.FC<Props> = ({ total, index, sensitiveShown, audio
|
||||
return (
|
||||
<View
|
||||
accessibilityLabel={audio.description}
|
||||
style={[
|
||||
styles.base,
|
||||
{
|
||||
backgroundColor: colors.disabled,
|
||||
aspectRatio: aspectRatio({ total, index, ...audio.meta?.original })
|
||||
}
|
||||
]}
|
||||
style={{
|
||||
flex: 1,
|
||||
flexDirection: 'row',
|
||||
backgroundColor: colors.shimmerDefault,
|
||||
aspectRatio: aspectRatio({ total, index, ...audio.meta?.original })
|
||||
}}
|
||||
>
|
||||
<View style={styles.overlay}>
|
||||
<View
|
||||
style={{
|
||||
position: 'absolute',
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
flex: 1,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center'
|
||||
}}
|
||||
>
|
||||
{sensitiveShown ? (
|
||||
audio.blurhash ? (
|
||||
<GracefullyImage
|
||||
@ -88,7 +96,7 @@ const AttachmentAudio: React.FC<Props> = ({ total, index, sensitiveShown, audio
|
||||
default: { uri: audio.preview_url },
|
||||
remote: { uri: audio.preview_remote_url }
|
||||
}}
|
||||
style={styles.background}
|
||||
style={{ position: 'absolute', width: '100%', height: '100%' }}
|
||||
dim
|
||||
/>
|
||||
) : null}
|
||||
@ -109,7 +117,6 @@ const AttachmentAudio: React.FC<Props> = ({ total, index, sensitiveShown, audio
|
||||
alignSelf: 'flex-end',
|
||||
width: '100%',
|
||||
height: StyleConstants.Spacing.M + StyleConstants.Spacing.S * 2,
|
||||
backgroundColor: colors.backgroundOverlayInvert,
|
||||
paddingHorizontal: StyleConstants.Spacing.Global.PagePadding,
|
||||
borderRadius: 100,
|
||||
opacity: sensitiveShown ? 0.35 : undefined
|
||||
@ -121,14 +128,14 @@ const AttachmentAudio: React.FC<Props> = ({ total, index, sensitiveShown, audio
|
||||
value={audioPosition}
|
||||
minimumTrackTintColor={colors.secondary}
|
||||
maximumTrackTintColor={colors.disabled}
|
||||
// onSlidingStart={() => {
|
||||
// audioPlayer?.pauseAsync()
|
||||
// setAudioPlaying(false)
|
||||
// }}
|
||||
// onSlidingComplete={value => {
|
||||
// setAudioPosition(value)
|
||||
// }}
|
||||
enabled={false} // Bug in above sliding actions
|
||||
onSlidingStart={() => {
|
||||
audioPlayer?.pauseAsync()
|
||||
setAudioPlaying(false)
|
||||
}}
|
||||
onSlidingComplete={value => {
|
||||
setAudioPosition(value)
|
||||
}}
|
||||
enabled={true}
|
||||
thumbSize={StyleConstants.Spacing.M}
|
||||
thumbTintColor={colors.primaryOverlay}
|
||||
/>
|
||||
@ -139,22 +146,4 @@ const AttachmentAudio: React.FC<Props> = ({ total, index, sensitiveShown, audio
|
||||
)
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
base: {
|
||||
flex: 1,
|
||||
flexBasis: '50%',
|
||||
padding: StyleConstants.Spacing.XS / 2,
|
||||
flexDirection: 'row'
|
||||
},
|
||||
background: { position: 'absolute', width: '100%', height: '100%' },
|
||||
overlay: {
|
||||
position: 'absolute',
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
flex: 1,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center'
|
||||
}
|
||||
})
|
||||
|
||||
export default AttachmentAudio
|
||||
|
@ -1,5 +1,4 @@
|
||||
import GracefullyImage from '@components/GracefullyImage'
|
||||
import { StyleConstants } from '@utils/styles/constants'
|
||||
import { useTheme } from '@utils/styles/ThemeManager'
|
||||
import React from 'react'
|
||||
import { View } from 'react-native'
|
||||
@ -24,27 +23,19 @@ const AttachmentImage = ({
|
||||
const { colors } = useTheme()
|
||||
|
||||
return (
|
||||
<View
|
||||
style={{
|
||||
flex: 1,
|
||||
flexBasis: '50%',
|
||||
padding: StyleConstants.Spacing.XS / 2
|
||||
}}
|
||||
>
|
||||
<View style={{ flex: 1, backgroundColor: colors.shimmerDefault }}>
|
||||
<GracefullyImage
|
||||
accessibilityLabel={image.description}
|
||||
hidden={sensitiveShown}
|
||||
sources={{
|
||||
default: { uri: image.preview_url },
|
||||
remote: { uri: image.remote_url },
|
||||
blurhash: image.blurhash
|
||||
}}
|
||||
onPress={() => navigateToImagesViewer(image.id)}
|
||||
style={{ aspectRatio: aspectRatio({ total, index, ...image.meta?.original }) }}
|
||||
dim
|
||||
/>
|
||||
</View>
|
||||
<View style={{ flex: 1, backgroundColor: colors.shimmerDefault, alignContent: 'center', justifyContent: 'center' }}>
|
||||
<GracefullyImage
|
||||
accessibilityLabel={image.description}
|
||||
hidden={sensitiveShown}
|
||||
sources={{
|
||||
default: { uri: image.preview_url },
|
||||
remote: { uri: image.remote_url },
|
||||
blurhash: image.blurhash
|
||||
}}
|
||||
onPress={() => navigateToImagesViewer(image.id)}
|
||||
style={{ aspectRatio: aspectRatio({ total, index, ...image.meta?.original }) }}
|
||||
dim
|
||||
/>
|
||||
<AttachmentAltText sensitiveShown={sensitiveShown} text={image.description} />
|
||||
</View>
|
||||
)
|
||||
|
@ -25,21 +25,15 @@ const AttachmentUnsupported: React.FC<Props> = ({ total, index, sensitiveShown,
|
||||
<View
|
||||
style={{
|
||||
flex: 1,
|
||||
flexBasis: '50%',
|
||||
padding: StyleConstants.Spacing.XS / 2,
|
||||
aspectRatio: aspectRatio({ total, index, ...attachment.meta?.original }),
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
aspectRatio: aspectRatio({ total, index, ...attachment.meta?.original })
|
||||
alignItems: 'center'
|
||||
}}
|
||||
>
|
||||
{attachment.blurhash ? (
|
||||
<GracefullyImage
|
||||
sources={{ blurhash: attachment.blurhash }}
|
||||
style={{
|
||||
position: 'absolute',
|
||||
width: '100%',
|
||||
height: '100%'
|
||||
}}
|
||||
style={{ position: 'absolute', width: '100%', height: '100%' }}
|
||||
/>
|
||||
) : null}
|
||||
{!sensitiveShown ? (
|
||||
|
@ -2,8 +2,9 @@ import Button from '@components/Button'
|
||||
import GracefullyImage from '@components/GracefullyImage'
|
||||
import { useAccessibility } from '@utils/accessibility/AccessibilityManager'
|
||||
import { connectMedia } from '@utils/api/helpers/connect'
|
||||
import { useAccountStorage, useGlobalStorage } from '@utils/storage/actions'
|
||||
import { useGlobalStorage } from '@utils/storage/actions'
|
||||
import { StyleConstants } from '@utils/styles/constants'
|
||||
import { useTheme } from '@utils/styles/ThemeManager'
|
||||
import { ResizeMode, Video, VideoFullscreenUpdate } from 'expo-av'
|
||||
import { Platform } from 'expo-modules-core'
|
||||
import * as ScreenOrientation from 'expo-screen-orientation'
|
||||
@ -27,13 +28,9 @@ const AttachmentVideo: React.FC<Props> = ({
|
||||
video,
|
||||
gifv = false
|
||||
}) => {
|
||||
const { colors } = useTheme()
|
||||
const { reduceMotionEnabled } = useAccessibility()
|
||||
const [autoplayGifv] = useGlobalStorage.boolean('app.auto_play_gifv')
|
||||
const [preferences] = useAccountStorage.object('preferences')
|
||||
const shouldAutoplayGifv =
|
||||
preferences?.['reading:autoplay:gifs'] !== undefined
|
||||
? preferences['reading:autoplay:gifs']
|
||||
: autoplayGifv
|
||||
const [shouldAutoplayGifv] = useGlobalStorage.boolean('app.auto_play_gifv')
|
||||
|
||||
const videoPlayer = useRef<Video>(null)
|
||||
const [videoLoading, setVideoLoading] = useState(false)
|
||||
@ -56,9 +53,10 @@ const AttachmentVideo: React.FC<Props> = ({
|
||||
<View
|
||||
style={{
|
||||
flex: 1,
|
||||
flexBasis: '50%',
|
||||
padding: StyleConstants.Spacing.XS / 2,
|
||||
aspectRatio: aspectRatio({ total, index, ...video.meta?.original })
|
||||
backgroundColor: colors.shimmerDefault,
|
||||
aspectRatio: aspectRatio({ total, index, ...video.meta?.original }),
|
||||
alignContent: 'center',
|
||||
justifyContent: 'center'
|
||||
}}
|
||||
>
|
||||
<Video
|
||||
|
@ -10,11 +10,13 @@ export const aspectRatio = ({
|
||||
height?: number
|
||||
}): number => {
|
||||
const defaultCrop =
|
||||
(height || 1) / (width || 1) > 3 / 2
|
||||
? 2 / 3
|
||||
: (width || 1) / (height || 1) > 4
|
||||
? 4
|
||||
: (width || 1) / (height || 1)
|
||||
height && width
|
||||
? height / width > 3 / 2
|
||||
? 2 / 3
|
||||
: width / height > 4
|
||||
? 4
|
||||
: width / height
|
||||
: 16 / 9
|
||||
|
||||
const isEven = total % 2 == 0
|
||||
if (total > 5) {
|
||||
|
@ -9,10 +9,11 @@ import { StackNavigationProp } from '@react-navigation/stack'
|
||||
import { RootStackParamList } from '@utils/navigation/navigators'
|
||||
import { usePreferencesQuery } from '@utils/queryHooks/preferences'
|
||||
import { StyleConstants } from '@utils/styles/constants'
|
||||
import { chunk } from 'lodash'
|
||||
import React, { useContext, useState } from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import { Pressable, View } from 'react-native'
|
||||
import StatusContext from './Context'
|
||||
import StatusContext from '../Context'
|
||||
|
||||
const TimelineAttachment = () => {
|
||||
const { status, disableDetails } = useContext(StatusContext)
|
||||
@ -96,98 +97,105 @@ const TimelineAttachment = () => {
|
||||
navigation.navigate('Screen-ImagesViewer', { imageUrls, id })
|
||||
}
|
||||
|
||||
const mapAttachmentType = (attachment: Mastodon.Attachment, index: number) => {
|
||||
switch (attachment.type) {
|
||||
case 'image':
|
||||
return (
|
||||
<AttachmentImage
|
||||
total={status.media_attachments.length}
|
||||
index={index}
|
||||
sensitiveShown={sensitiveShown}
|
||||
image={attachment}
|
||||
navigateToImagesViewer={navigateToImagesViewer}
|
||||
/>
|
||||
)
|
||||
case 'video':
|
||||
return (
|
||||
<AttachmentVideo
|
||||
total={status.media_attachments.length}
|
||||
index={index}
|
||||
sensitiveShown={sensitiveShown}
|
||||
video={attachment}
|
||||
/>
|
||||
)
|
||||
case 'gifv':
|
||||
return (
|
||||
<AttachmentVideo
|
||||
total={status.media_attachments.length}
|
||||
index={index}
|
||||
sensitiveShown={sensitiveShown}
|
||||
video={attachment}
|
||||
gifv
|
||||
/>
|
||||
)
|
||||
case 'audio':
|
||||
return (
|
||||
<AttachmentAudio
|
||||
total={status.media_attachments.length}
|
||||
index={index}
|
||||
sensitiveShown={sensitiveShown}
|
||||
audio={attachment}
|
||||
/>
|
||||
)
|
||||
default:
|
||||
if (
|
||||
// https://docs.expo.dev/versions/unversioned/sdk/image/#supported-image-formats
|
||||
attachment.preview_url?.match(/.(?:a?png|jpe?g|webp|avif|heic|gif|svg|ico|icns)$/i) ||
|
||||
attachment.remote_url?.match(/.(?:a?png|jpe?g|webp|avif|heic|gif|svg|ico|icns)$/i)
|
||||
) {
|
||||
return (
|
||||
<AttachmentImage
|
||||
total={status.media_attachments.length}
|
||||
index={index}
|
||||
sensitiveShown={sensitiveShown}
|
||||
image={attachment as unknown as Mastodon.AttachmentImage}
|
||||
navigateToImagesViewer={navigateToImagesViewer}
|
||||
/>
|
||||
)
|
||||
} else if (attachment.remote_url?.match(/.(?:mp4|mkv)$/i)) {
|
||||
return (
|
||||
<AttachmentVideo
|
||||
total={status.media_attachments.length}
|
||||
index={index}
|
||||
sensitiveShown={sensitiveShown}
|
||||
video={attachment as unknown as Mastodon.AttachmentVideo}
|
||||
/>
|
||||
)
|
||||
} else {
|
||||
return (
|
||||
<AttachmentUnsupported
|
||||
total={status.media_attachments.length}
|
||||
index={index}
|
||||
sensitiveShown={sensitiveShown}
|
||||
attachment={attachment}
|
||||
/>
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<View>
|
||||
<View
|
||||
style={{
|
||||
marginTop: StyleConstants.Spacing.S,
|
||||
flex: 1,
|
||||
flexDirection: 'row',
|
||||
flexWrap: 'wrap',
|
||||
justifyContent: 'center',
|
||||
alignContent: 'stretch'
|
||||
}}
|
||||
>
|
||||
{status.media_attachments.map((attachment, index) => {
|
||||
switch (attachment.type) {
|
||||
case 'image':
|
||||
return (
|
||||
<AttachmentImage
|
||||
key={index}
|
||||
total={status.media_attachments.length}
|
||||
index={index}
|
||||
sensitiveShown={sensitiveShown}
|
||||
image={attachment}
|
||||
navigateToImagesViewer={navigateToImagesViewer}
|
||||
/>
|
||||
)
|
||||
case 'video':
|
||||
return (
|
||||
<AttachmentVideo
|
||||
key={index}
|
||||
total={status.media_attachments.length}
|
||||
index={index}
|
||||
sensitiveShown={sensitiveShown}
|
||||
video={attachment}
|
||||
/>
|
||||
)
|
||||
case 'gifv':
|
||||
return (
|
||||
<AttachmentVideo
|
||||
key={index}
|
||||
total={status.media_attachments.length}
|
||||
index={index}
|
||||
sensitiveShown={sensitiveShown}
|
||||
video={attachment}
|
||||
gifv
|
||||
/>
|
||||
)
|
||||
case 'audio':
|
||||
return (
|
||||
<AttachmentAudio
|
||||
key={index}
|
||||
total={status.media_attachments.length}
|
||||
index={index}
|
||||
sensitiveShown={sensitiveShown}
|
||||
audio={attachment}
|
||||
/>
|
||||
)
|
||||
default:
|
||||
if (
|
||||
attachment.preview_url?.endsWith('.jpg') ||
|
||||
attachment.preview_url?.endsWith('.jpeg') ||
|
||||
attachment.preview_url?.endsWith('.png') ||
|
||||
attachment.preview_url?.endsWith('.gif') ||
|
||||
attachment.remote_url?.endsWith('.jpg') ||
|
||||
attachment.remote_url?.endsWith('.jpeg') ||
|
||||
attachment.remote_url?.endsWith('.png') ||
|
||||
attachment.remote_url?.endsWith('.gif')
|
||||
) {
|
||||
return (
|
||||
<AttachmentImage
|
||||
key={index}
|
||||
total={status.media_attachments.length}
|
||||
index={index}
|
||||
sensitiveShown={sensitiveShown}
|
||||
// @ts-ignore
|
||||
image={attachment}
|
||||
navigateToImagesViewer={navigateToImagesViewer}
|
||||
/>
|
||||
)
|
||||
} else {
|
||||
return (
|
||||
<AttachmentUnsupported
|
||||
key={index}
|
||||
total={status.media_attachments.length}
|
||||
index={index}
|
||||
sensitiveShown={sensitiveShown}
|
||||
attachment={attachment}
|
||||
/>
|
||||
)
|
||||
}
|
||||
}
|
||||
})}
|
||||
</View>
|
||||
<View
|
||||
style={{
|
||||
marginTop: StyleConstants.Spacing.M,
|
||||
flex: 1,
|
||||
gap: StyleConstants.Spacing.XS
|
||||
}}
|
||||
>
|
||||
{chunk(status.media_attachments, 2).map((chunk, chunkIndex) => (
|
||||
<View
|
||||
style={{
|
||||
flex: 1,
|
||||
flexDirection: 'row',
|
||||
flexWrap: 'wrap',
|
||||
justifyContent: 'center',
|
||||
alignContent: 'stretch',
|
||||
gap: StyleConstants.Spacing.XS
|
||||
}}
|
||||
>
|
||||
{chunk.map((a, aIndex) => mapAttachmentType(a, chunkIndex * 2 + aIndex))}
|
||||
</View>
|
||||
))}
|
||||
|
||||
{defaultSensitive() &&
|
||||
(sensitiveShown ? (
|
@ -33,7 +33,7 @@
|
||||
"poll": "S'ha acabat una enquesta en què havies participat",
|
||||
"reblog": {
|
||||
"default": "{{name}} ha impulsat",
|
||||
"myself": "",
|
||||
"myself": "He impulsat",
|
||||
"notification": "{{name}} ha impulsat la teva publicació"
|
||||
},
|
||||
"update": "L'impuls ha sigut editat",
|
||||
|
@ -33,7 +33,7 @@
|
||||
"poll": "Eine Umfrage, an der du teilgenommen hast, ist beendet",
|
||||
"reblog": {
|
||||
"default": "{{name}} hat geboostet",
|
||||
"myself": "",
|
||||
"myself": "Von mir geboosted",
|
||||
"notification": "{{name}} hat deinen Tröt geboostet"
|
||||
},
|
||||
"update": "Boost wurde bearbeitet",
|
||||
|
@ -33,7 +33,7 @@
|
||||
"poll": "Una encuesta en la que has votado ha terminado",
|
||||
"reblog": {
|
||||
"default": "{{name}} ha impulsado",
|
||||
"myself": "",
|
||||
"myself": "He impulsado",
|
||||
"notification": "{{name}} ha impulsado tu toot"
|
||||
},
|
||||
"update": "El impulso ha sido editado",
|
||||
|
@ -33,7 +33,7 @@
|
||||
"poll": "Erantzun zenuen inkesta bat amaitu da",
|
||||
"reblog": {
|
||||
"default": "{{name}}-(e)k bultzatu du",
|
||||
"myself": "",
|
||||
"myself": "Bultzatu dut",
|
||||
"notification": "{{name}}-(e)k zure tuta bultzatu du"
|
||||
},
|
||||
"update": "Bultzada editatua izan da",
|
||||
|
@ -19,8 +19,8 @@
|
||||
"refetch": "更新",
|
||||
"fetching": "新しいトゥートを取得しています...",
|
||||
"fetched": {
|
||||
"none": "",
|
||||
"found": ""
|
||||
"none": "新しいトゥートはありません",
|
||||
"found": "{{count}}トゥートを取得"
|
||||
}
|
||||
},
|
||||
"shared": {
|
||||
@ -33,7 +33,7 @@
|
||||
"poll": "アンケートが終了しました",
|
||||
"reblog": {
|
||||
"default": "{{name}}さんがブースト",
|
||||
"myself": "",
|
||||
"myself": "ブーストしました",
|
||||
"notification": "{{name}}さんがあなたのトゥートをブーストしました"
|
||||
},
|
||||
"update": "ブーストしたトゥートが編集されました",
|
||||
|
@ -73,13 +73,13 @@
|
||||
"name": "設定"
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"name": ""
|
||||
"name": "すべてのコンテンツフィルター"
|
||||
},
|
||||
"preferencesFilterAdd": {
|
||||
"name": "フィルターを作成"
|
||||
},
|
||||
"preferencesFilterEdit": {
|
||||
"name": ""
|
||||
"name": "フィルターを編集"
|
||||
},
|
||||
"profile": {
|
||||
"name": "プロフィールを編集"
|
||||
@ -136,7 +136,7 @@
|
||||
},
|
||||
"preferences": {
|
||||
"visibility": {
|
||||
"title": "",
|
||||
"title": "デフォルトの投稿の表示",
|
||||
"options": {
|
||||
"public": "公開",
|
||||
"unlisted": "未収載",
|
||||
@ -144,40 +144,40 @@
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": ""
|
||||
"title": "メディアを常に閲覧注意としてマークする"
|
||||
},
|
||||
"media": {
|
||||
"title": "",
|
||||
"title": "メディアの表示",
|
||||
"options": {
|
||||
"default": "",
|
||||
"show_all": "",
|
||||
"hide_all": ""
|
||||
"default": "閲覧注意としてマークされたメディアを隠す",
|
||||
"show_all": "メディアを常に表示する",
|
||||
"hide_all": "メディアを常に隠す"
|
||||
}
|
||||
},
|
||||
"spoilers": {
|
||||
"title": ""
|
||||
"title": "閲覧注意としてマークされたトゥートを常に展開する"
|
||||
},
|
||||
"autoplay_gifs": {
|
||||
"title": ""
|
||||
"title": "トゥートでGIFを自動再生"
|
||||
},
|
||||
"filters": {
|
||||
"title": "",
|
||||
"content": ""
|
||||
"title": "コンテンツフィルター",
|
||||
"content": "{{count}} がアクティブです"
|
||||
},
|
||||
"web_only": {
|
||||
"title": "",
|
||||
"description": ""
|
||||
"title": "アップデート設定",
|
||||
"description": "以下の設定は、web UI を使用してのみ更新できます"
|
||||
}
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"expired": "期限切れ",
|
||||
"keywords_one": "",
|
||||
"keywords_other": "",
|
||||
"statuses_one": "",
|
||||
"statuses_other": "",
|
||||
"context": "",
|
||||
"keywords_one": "{{count}}件のキーワード",
|
||||
"keywords_other": "{{count}}件のキーワード",
|
||||
"statuses_one": "{{count}}トゥート",
|
||||
"statuses_other": "{{count}}トゥート",
|
||||
"context": "<0 />で適用",
|
||||
"contexts": {
|
||||
"home": "",
|
||||
"home": "フォロー中とリスト",
|
||||
"notifications": "通知",
|
||||
"public": "連合",
|
||||
"thread": "会話",
|
||||
@ -196,22 +196,22 @@
|
||||
"604800": "1週間後",
|
||||
"18144000": "1ヶ月後"
|
||||
},
|
||||
"context": "",
|
||||
"context": "適用:",
|
||||
"contexts": {
|
||||
"home": "",
|
||||
"home": "フォロー中とリスト",
|
||||
"notifications": "通知",
|
||||
"public": "連合タイムライン",
|
||||
"thread": "",
|
||||
"account": ""
|
||||
"thread": "会話表示",
|
||||
"account": "プロフィール表示"
|
||||
},
|
||||
"action": "",
|
||||
"action": "一致した時",
|
||||
"actions": {
|
||||
"warn": "",
|
||||
"hide": ""
|
||||
"hide": "完全に非表示にする"
|
||||
},
|
||||
"keywords": "",
|
||||
"keywords": "これらのキーワードと一致",
|
||||
"keyword": "キーワード",
|
||||
"statuses": ""
|
||||
"statuses": "これらのトゥートと一致"
|
||||
},
|
||||
"profile": {
|
||||
"feedback": {
|
||||
@ -401,7 +401,7 @@
|
||||
},
|
||||
"filter": {
|
||||
"name": "フィルターに追加",
|
||||
"existed": ""
|
||||
"existed": "フィルター内に存在"
|
||||
},
|
||||
"history": {
|
||||
"name": "編集履歴"
|
||||
|
@ -6,7 +6,7 @@
|
||||
"action_false": "사용자 팔로우",
|
||||
"action_true": "사용자 팔로우 해제"
|
||||
},
|
||||
"inLists": "",
|
||||
"inLists": "사용자를 포함한 리스트 ...",
|
||||
"showBoosts": {
|
||||
"action_false": "사용자의 부스트 보이기",
|
||||
"action_true": "사용자의 부스트 숨기기"
|
||||
@ -16,12 +16,12 @@
|
||||
"action_true": "사용자 뮤트 해제"
|
||||
},
|
||||
"followAs": {
|
||||
"trigger": "",
|
||||
"trigger": "특정 계정에서 팔로우 ...",
|
||||
"succeed_default": "@{{source}} 계정에서 @{{target}} 계정을 팔로우 했어요.",
|
||||
"succeed_locked": "@{{source}} 계정에서 @{{target}} 계정의 팔로우 승인을 요청했어요.",
|
||||
"failed": "특정 계정에서 팔로우"
|
||||
},
|
||||
"blockReport": "",
|
||||
"blockReport": "차단 및 신고",
|
||||
"block": {
|
||||
"action_false": "사용자 차단",
|
||||
"action_true": "사용자 차단 해제",
|
||||
@ -56,11 +56,11 @@
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
"action_false": "팔로우",
|
||||
"action_true": "팔로우 해제"
|
||||
},
|
||||
"filter": {
|
||||
"action": ""
|
||||
"action": "해시태그 필터 ..."
|
||||
}
|
||||
},
|
||||
"share": {
|
||||
@ -99,8 +99,8 @@
|
||||
"action_true": "툿 고정 해제"
|
||||
},
|
||||
"filter": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
"action_false": "툿 필터 ...",
|
||||
"action_true": "필터 관리 ..."
|
||||
}
|
||||
}
|
||||
}
|
@ -17,10 +17,10 @@
|
||||
"refresh": {
|
||||
"fetchPreviousPage": "이 시점에 이어서 불러오기",
|
||||
"refetch": "최신 내용 불러오기",
|
||||
"fetching": "",
|
||||
"fetching": "새로운 툿 불러오는 중 ...",
|
||||
"fetched": {
|
||||
"none": "",
|
||||
"found": ""
|
||||
"none": "새로운 툿이 없어요",
|
||||
"found": "새로운 툿 {{count}}개를 불러왔어요"
|
||||
}
|
||||
},
|
||||
"shared": {
|
||||
@ -33,7 +33,7 @@
|
||||
"poll": "내가 참여한 투표가 끝났어요",
|
||||
"reblog": {
|
||||
"default": "{{name}} 님이 부스트했어요",
|
||||
"myself": "",
|
||||
"myself": "내가 부스트함",
|
||||
"notification": "{{name}} 님이 내 툿을 부스트했어요"
|
||||
},
|
||||
"update": "부스트한 툿이 수정됨",
|
||||
|
@ -5,7 +5,7 @@
|
||||
"title": "작성을 취소할까요?",
|
||||
"buttons": {
|
||||
"save": "임시 저장",
|
||||
"delete": "임시 저장한 내용 삭제"
|
||||
"delete": "작성중인 내용 삭제"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -70,16 +70,16 @@
|
||||
"name": "푸시 알림"
|
||||
},
|
||||
"preferences": {
|
||||
"name": ""
|
||||
"name": "설정"
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"name": ""
|
||||
"name": "콘텐츠 필터"
|
||||
},
|
||||
"preferencesFilterAdd": {
|
||||
"name": ""
|
||||
"name": "필터 만들기"
|
||||
},
|
||||
"preferencesFilterEdit": {
|
||||
"name": ""
|
||||
"name": "필터 편집"
|
||||
},
|
||||
"profile": {
|
||||
"name": "프로필 편집"
|
||||
@ -136,81 +136,81 @@
|
||||
},
|
||||
"preferences": {
|
||||
"visibility": {
|
||||
"title": "",
|
||||
"title": "공개 범위 기본값",
|
||||
"options": {
|
||||
"public": "",
|
||||
"unlisted": "",
|
||||
"private": ""
|
||||
"public": "공개",
|
||||
"unlisted": "공개 타임라인에 비표시",
|
||||
"private": "팔로워만"
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": ""
|
||||
"title": "민감한 미디어 표시를 기본값으로 사용"
|
||||
},
|
||||
"media": {
|
||||
"title": "",
|
||||
"title": "미디어 표시",
|
||||
"options": {
|
||||
"default": "",
|
||||
"show_all": "",
|
||||
"hide_all": ""
|
||||
"default": "민감한 미디어 숨기기",
|
||||
"show_all": "모든 미디어 표시",
|
||||
"hide_all": "모든 미디어 숨기기"
|
||||
}
|
||||
},
|
||||
"spoilers": {
|
||||
"title": ""
|
||||
"title": "스포일러 경고가 있는 툿 자동으로 펼치기"
|
||||
},
|
||||
"autoplay_gifs": {
|
||||
"title": ""
|
||||
"title": "툿에 포함된 GIF 자동 재생"
|
||||
},
|
||||
"filters": {
|
||||
"title": "",
|
||||
"content": ""
|
||||
"title": "콘텐츠 필터",
|
||||
"content": "{{count}}개 활성화"
|
||||
},
|
||||
"web_only": {
|
||||
"title": "",
|
||||
"description": ""
|
||||
"title": "추가 설정",
|
||||
"description": "일부 설정은 웹 UI에서만 변경할 수 있어요"
|
||||
}
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"expired": "",
|
||||
"keywords_one": "",
|
||||
"keywords_other": "",
|
||||
"statuses_one": "",
|
||||
"statuses_other": "",
|
||||
"context": "",
|
||||
"expired": "만료됨",
|
||||
"keywords_one": "{{count}}개의 단어",
|
||||
"keywords_other": "{{count}}개의 단어",
|
||||
"statuses_one": "{{count}}개의 툿",
|
||||
"statuses_other": "{{count}}개의 툿",
|
||||
"context": "<0 />에 적용됨",
|
||||
"contexts": {
|
||||
"home": "",
|
||||
"notifications": "",
|
||||
"public": "",
|
||||
"thread": "",
|
||||
"account": ""
|
||||
"home": "팔로우와 리스트",
|
||||
"notifications": "알림",
|
||||
"public": "연합",
|
||||
"thread": "대화",
|
||||
"account": "프로필"
|
||||
}
|
||||
},
|
||||
"preferencesFilter": {
|
||||
"name": "",
|
||||
"expiration": "",
|
||||
"name": "이름",
|
||||
"expiration": "만료일",
|
||||
"expirationOptions": {
|
||||
"0": "",
|
||||
"1800": "",
|
||||
"3600": "",
|
||||
"43200": "",
|
||||
"86400": "",
|
||||
"604800": "",
|
||||
"18144000": ""
|
||||
"0": "만료하지 않음",
|
||||
"1800": "30분 후",
|
||||
"3600": "1시간 후",
|
||||
"43200": "12시간 후",
|
||||
"86400": "1일 후",
|
||||
"604800": "1주일 후",
|
||||
"18144000": "1개월 후"
|
||||
},
|
||||
"context": "",
|
||||
"context": "적용할 대상",
|
||||
"contexts": {
|
||||
"home": "",
|
||||
"notifications": "",
|
||||
"public": "",
|
||||
"thread": "",
|
||||
"account": ""
|
||||
"home": "팔로우와 리스트",
|
||||
"notifications": "알림",
|
||||
"public": "연합 타임라인",
|
||||
"thread": "대화 내용",
|
||||
"account": "프로필 내용"
|
||||
},
|
||||
"action": "",
|
||||
"action": "필터 동작",
|
||||
"actions": {
|
||||
"warn": "",
|
||||
"hide": ""
|
||||
"warn": "내용만 가리고 펼쳐볼 수 있게 하기",
|
||||
"hide": "완전히 숨기기"
|
||||
},
|
||||
"keywords": "",
|
||||
"keyword": "",
|
||||
"keywords": "필터할 단어",
|
||||
"keyword": "단어",
|
||||
"statuses": ""
|
||||
},
|
||||
"profile": {
|
||||
@ -400,7 +400,7 @@
|
||||
"name": "<0 /><1>의 미디어</1>"
|
||||
},
|
||||
"filter": {
|
||||
"name": "",
|
||||
"name": "필터에 추가",
|
||||
"existed": ""
|
||||
},
|
||||
"history": {
|
||||
|
32
src/i18n/no/common.json
Normal file
32
src/i18n/no/common.json
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"buttons": {
|
||||
"OK": "OK",
|
||||
"apply": "Bruk",
|
||||
"cancel": "Avbryt",
|
||||
"discard": "Forkast",
|
||||
"continue": "Fortsett",
|
||||
"create": "Opprett",
|
||||
"delete": "Slett",
|
||||
"done": "Fullført",
|
||||
"confirm": "Bekreft"
|
||||
},
|
||||
"customEmoji": {
|
||||
"accessibilityLabel": "Tilpasset emoji {{emoji}}"
|
||||
},
|
||||
"message": {
|
||||
"success": {
|
||||
"message": "{{function}} var vellykket"
|
||||
},
|
||||
"warning": {
|
||||
"message": ""
|
||||
},
|
||||
"error": {
|
||||
"message": "{{function}} feilet, vennligst prøv igjen"
|
||||
}
|
||||
},
|
||||
"separator": ", ",
|
||||
"discard": {
|
||||
"title": "Endringene er ikke lagret",
|
||||
"message": "Dine endringer er ikke lagret. Angrer du på endringene?"
|
||||
}
|
||||
}
|
106
src/i18n/no/components/contextMenu.json
Normal file
106
src/i18n/no/components/contextMenu.json
Normal file
@ -0,0 +1,106 @@
|
||||
{
|
||||
"accessibilityHint": "Handlinger for tut, for eksempel dens bruker, tut selv",
|
||||
"account": {
|
||||
"title": "Brukerhandlinger",
|
||||
"following": {
|
||||
"action_false": "Følg bruker",
|
||||
"action_true": "Slutt å følge"
|
||||
},
|
||||
"inLists": "Lister som inneholder bruker ...",
|
||||
"showBoosts": {
|
||||
"action_false": "Vis brukerens booster",
|
||||
"action_true": "Skjul brukernes booster"
|
||||
},
|
||||
"mute": {
|
||||
"action_false": "Demp bruker",
|
||||
"action_true": "Opphev demping av bruker"
|
||||
},
|
||||
"followAs": {
|
||||
"trigger": "Følg som ...",
|
||||
"succeed_default": "Følger nå @{{target}} med @{{source}}",
|
||||
"succeed_locked": "Sendt følge forespørsel til @{{target}} med {{source}}, venter på godkjenning",
|
||||
"failed": "Følg som"
|
||||
},
|
||||
"blockReport": "Blokker og rapporter",
|
||||
"block": {
|
||||
"action_false": "Blokker bruker",
|
||||
"action_true": "Fjern blokkering av brukker",
|
||||
"alert": {
|
||||
"title": "Bekreft blokkering av @{{username}}?"
|
||||
}
|
||||
},
|
||||
"reports": {
|
||||
"action": "Rapporter og blokker bruker",
|
||||
"alert": {
|
||||
"title": "Bekreft blokkering av @{{username}}?"
|
||||
}
|
||||
}
|
||||
},
|
||||
"at": {
|
||||
"direct": "Direktemelding",
|
||||
"public": "Offentlig melding"
|
||||
},
|
||||
"copy": {
|
||||
"action": "Kopier tut",
|
||||
"succeed": "Kopiert"
|
||||
},
|
||||
"instance": {
|
||||
"title": "Instansaktivitet",
|
||||
"block": {
|
||||
"action": "Blokker instans {{instance}}",
|
||||
"alert": {
|
||||
"title": "Bekreft blokkering av @{{instance}}?",
|
||||
"message": "For det meste kan du dempe eller blokkere visse brukere.\n\nEtter at du har blokkert, vil alt innholdet fra denne forekomsten bli fjernet!"
|
||||
}
|
||||
}
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": {
|
||||
"action_false": "Følg",
|
||||
"action_true": "Slutt å følge"
|
||||
},
|
||||
"filter": {
|
||||
"action": "Filtrer emnet ..."
|
||||
}
|
||||
},
|
||||
"share": {
|
||||
"status": {
|
||||
"action": "Del tut"
|
||||
},
|
||||
"account": {
|
||||
"action": "Del bruker"
|
||||
}
|
||||
},
|
||||
"status": {
|
||||
"title": "Tut handlinger",
|
||||
"edit": {
|
||||
"action": "Rediger tut"
|
||||
},
|
||||
"delete": {
|
||||
"action": "Slett tut",
|
||||
"alert": {
|
||||
"title": "Bekreft sletting?",
|
||||
"message": "Alle booster og favoritter blir slettet, inkludert alle svar."
|
||||
}
|
||||
},
|
||||
"deleteEdit": {
|
||||
"action": "Slett tut og repost",
|
||||
"alert": {
|
||||
"title": "Bekreft sletting og repost?",
|
||||
"message": "Alle booster og favoritter blir slettet, inkludert alle svar."
|
||||
}
|
||||
},
|
||||
"mute": {
|
||||
"action_false": "Demp tut og svar",
|
||||
"action_true": "Avdemp tut og svar"
|
||||
},
|
||||
"pin": {
|
||||
"action_false": "Fest tut",
|
||||
"action_true": "Avfest tut"
|
||||
},
|
||||
"filter": {
|
||||
"action_false": "Filtrer tut...",
|
||||
"action_true": "Behandle filtere..."
|
||||
}
|
||||
}
|
||||
}
|
3
src/i18n/no/components/emojis.json
Normal file
3
src/i18n/no/components/emojis.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"frequentUsed": "Ofte brukt"
|
||||
}
|
27
src/i18n/no/components/instance.json
Normal file
27
src/i18n/no/components/instance.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"server": {
|
||||
"textInput": {
|
||||
"placeholder": "Instansens domene"
|
||||
},
|
||||
"whitelisted": "Dette kan være en hvitelistet forekomst som tooot ikke kan hente data fra før du logger inn.",
|
||||
"button": "Logg inn",
|
||||
"information": {
|
||||
"name": "Navn",
|
||||
"accounts": "Brukere",
|
||||
"statuses": "Tuter",
|
||||
"domains": "Universum"
|
||||
},
|
||||
"disclaimer": {
|
||||
"base": "Innlogging bruker systemnettleser mens du logger inn på, din kontoinformasjon vil ikke være synlig for toot-appen."
|
||||
},
|
||||
"terms": {
|
||||
"base": "Ved å logge inn godtar du <0>retningslinjer for personvern</0> og <1>vilkårene for bruk</1>."
|
||||
}
|
||||
},
|
||||
"update": {
|
||||
"alert": {
|
||||
"title": "Logget på denne instansen",
|
||||
"message": "Du kan logge inn på en annen konto, og beholde eksisterende pålogging"
|
||||
}
|
||||
}
|
||||
}
|
10
src/i18n/no/components/mediaSelector.json
Normal file
10
src/i18n/no/components/mediaSelector.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"title": "Velg mediekilde",
|
||||
"message": "Media EXIF-data er ikke lastet opp",
|
||||
"options": {
|
||||
"image": "Last opp bilder",
|
||||
"image_max": "Last opp bilder (maks {{max}})",
|
||||
"video": "Last opp video",
|
||||
"video_max": "Last opp video (maks {{max}})"
|
||||
}
|
||||
}
|
8
src/i18n/no/components/parse.json
Normal file
8
src/i18n/no/components/parse.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"HTML": {
|
||||
"accessibilityHint": "Trykk for å utvide eller skjule innhold",
|
||||
"expanded": "{{hint}}{{moreLines}}",
|
||||
"moreLines": " ({{count}} flere linjer)",
|
||||
"defaultHint": "Lang tut"
|
||||
}
|
||||
}
|
16
src/i18n/no/components/relationship.json
Normal file
16
src/i18n/no/components/relationship.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"follow": {
|
||||
"function": "Følg bruker"
|
||||
},
|
||||
"block": {
|
||||
"function": "Blokker bruker"
|
||||
},
|
||||
"button": {
|
||||
"error": "Feil med lasting",
|
||||
"blocked_by": "Blokkert av bruker",
|
||||
"blocking": "Fjern blokkering",
|
||||
"following": "Slutt å følge",
|
||||
"requested": "Avbryt forespørsel",
|
||||
"default": "Følg"
|
||||
}
|
||||
}
|
168
src/i18n/no/components/timeline.json
Normal file
168
src/i18n/no/components/timeline.json
Normal file
@ -0,0 +1,168 @@
|
||||
{
|
||||
"empty": {
|
||||
"error": {
|
||||
"message": "Lasting mislyktes",
|
||||
"button": "Prøv igjen"
|
||||
},
|
||||
"success": {
|
||||
"message": "Tidslinjen er tom"
|
||||
}
|
||||
},
|
||||
"end": {
|
||||
"message": "Slutt, hva med en kopp med <0 />"
|
||||
},
|
||||
"lookback": {
|
||||
"message": "Sist lest"
|
||||
},
|
||||
"refresh": {
|
||||
"fetchPreviousPage": "Nyere herfra",
|
||||
"refetch": "Til nyeste",
|
||||
"fetching": "Henter nyere tuter ...",
|
||||
"fetched": {
|
||||
"none": "Ingen nyere tut",
|
||||
"found": "Hentet {{count}} tuter"
|
||||
}
|
||||
},
|
||||
"shared": {
|
||||
"actioned": {
|
||||
"pinned": "Festet",
|
||||
"favourite": "{{name}} favoriserte din tut",
|
||||
"status": "{name} la nettopp ut",
|
||||
"follow": "{{name}} følger deg",
|
||||
"follow_request": "{{name}} ba om å følge deg",
|
||||
"poll": "En avstemming du har stemt på er avsluttet",
|
||||
"reblog": {
|
||||
"default": "{{name}} boostet",
|
||||
"myself": "Jeg boostet",
|
||||
"notification": "{{name}} boostet ditt tut"
|
||||
},
|
||||
"update": "Reblogg har blitt redigert",
|
||||
"admin.sign_up": "{{name}} ble med i instansen",
|
||||
"admin.report": "{{name}} rapportert:"
|
||||
},
|
||||
"actions": {
|
||||
"reply": {
|
||||
"accessibilityLabel": "Svar på tut"
|
||||
},
|
||||
"reblogged": {
|
||||
"accessibilityLabel": "Boost denne tut",
|
||||
"function": "Boost tut",
|
||||
"options": {
|
||||
"title": "Velg synlighet for boost",
|
||||
"public": "Offentlig boost",
|
||||
"unlisted": "Fjern boost"
|
||||
}
|
||||
},
|
||||
"favourited": {
|
||||
"accessibilityLabel": "Legge tut til dine favoritter",
|
||||
"function": "Favoritt tut"
|
||||
},
|
||||
"bookmarked": {
|
||||
"accessibilityLabel": "Legg tut til bokmerker",
|
||||
"function": "Bokmerk tut"
|
||||
},
|
||||
"openReport": "Åpne rapport"
|
||||
},
|
||||
"actionsUsers": {
|
||||
"reblogged_by": {
|
||||
"accessibilityLabel": "{{count}} brukere har boostet tuten",
|
||||
"accessibilityHint": "Trykk for å bli kjent med brukerne",
|
||||
"text": "$t(screenTabs:shared.users.statuses.reblogged_by)"
|
||||
},
|
||||
"favourited_by": {
|
||||
"accessibilityLabel": "{{count}} brukere har boostet tuten",
|
||||
"accessibilityHint": "Trykk for å bli kjent med brukerne",
|
||||
"text": "$t(screenTabs:shared.users.statuses.favourited_by)"
|
||||
},
|
||||
"history": {
|
||||
"accessibilityLabel": "Tut har blitt redigert {{count}} ganger",
|
||||
"accessibilityHint": "Trykk for å vise hele redigeringsloggen",
|
||||
"text_one": "{{count}} rediger",
|
||||
"text_other": "{{count}} redigeringer"
|
||||
}
|
||||
},
|
||||
"attachment": {
|
||||
"sensitive": {
|
||||
"button": "Vis sensitivt media"
|
||||
},
|
||||
"unsupported": {
|
||||
"text": "Feil med lasting",
|
||||
"button": "Prøv ekstern lenke"
|
||||
},
|
||||
"altText": "Alternativ tekst"
|
||||
},
|
||||
"avatar": {
|
||||
"accessibilityLabel": "Profilbilde av {{name}}",
|
||||
"accessibilityHint": "Trykk for å gå til {{name}} sin side"
|
||||
},
|
||||
"content": {
|
||||
"expandHint": "Skjult innhold"
|
||||
},
|
||||
"filtered": {
|
||||
"reveal": "Vis likevel",
|
||||
"match_v1": "Filtrert: {{phrase}}.",
|
||||
"match_v2_one": "Filtrert av {{filters}}.",
|
||||
"match_v2_other": "Filtrert med {{count}} filtre, {{filters}}."
|
||||
},
|
||||
"fullConversation": "Vis samtaler",
|
||||
"translate": {
|
||||
"default": "Oversett",
|
||||
"succeed": "Oversatt med {{provider}} fra {{source}}",
|
||||
"failed": "Oversettelse feilet",
|
||||
"source_not_supported": "dette språket er ikke støttet",
|
||||
"target_not_supported": "Dette språket er ikke støttet"
|
||||
},
|
||||
"header": {
|
||||
"shared": {
|
||||
"account": {
|
||||
"name": {
|
||||
"accessibilityHint": "Brukerens visningsnavn"
|
||||
},
|
||||
"account": {
|
||||
"accessibilityHint": "Brukerkonto"
|
||||
}
|
||||
},
|
||||
"application": "med {{application}}",
|
||||
"edited": {
|
||||
"accessibilityLabel": "Tut redigert"
|
||||
},
|
||||
"muted": {
|
||||
"accessibilityLabel": "Tut er dempet"
|
||||
},
|
||||
"replies": "Svar <0 />",
|
||||
"visibility": {
|
||||
"direct": {
|
||||
"accessibilityLabel": "Tut er en direkte melding"
|
||||
},
|
||||
"private": {
|
||||
"accessibilityLabel": "Tut er kun synlig for følgere"
|
||||
}
|
||||
}
|
||||
},
|
||||
"conversation": {
|
||||
"withAccounts": "Med",
|
||||
"delete": {
|
||||
"function": "Slett direkte melding"
|
||||
}
|
||||
}
|
||||
},
|
||||
"poll": {
|
||||
"meta": {
|
||||
"button": {
|
||||
"vote": "Stem",
|
||||
"refresh": "Oppdater"
|
||||
},
|
||||
"count": {
|
||||
"voters_one": "{{count}} bruker har stemt",
|
||||
"voters_other": "{{count}} bruker har stemt",
|
||||
"votes_one": "%{count} stemme",
|
||||
"votes_other": "%{count} stemmer"
|
||||
},
|
||||
"expiration": {
|
||||
"expired": "Avstemning utløpt",
|
||||
"until": "Utløper <0 />"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
17
src/i18n/no/screens.json
Normal file
17
src/i18n/no/screens.json
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"screenshot": {
|
||||
"title": "Personvernbeskyttelse",
|
||||
"message": "Vennligst ikke avslør brukerens identitet, som f. eks. brukernavn, profilbilde, osv. Tusen takk!"
|
||||
},
|
||||
"localCorrupt": {
|
||||
"message": "Din økt er utløpt, vennligst logg inn igjen"
|
||||
},
|
||||
"pushError": {
|
||||
"message": "Feil ved push-tjeneste",
|
||||
"description": "Vennligst aktiver push-varsling i innstillingene"
|
||||
},
|
||||
"shareError": {
|
||||
"imageNotSupported": "Bildetype {{type}} støttes ikke",
|
||||
"videoNotSupported": "Videotype {{type}} støttes ikke"
|
||||
}
|
||||
}
|
6
src/i18n/no/screens/accountSelection.json
Normal file
6
src/i18n/no/screens/accountSelection.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"heading": "Del tut...",
|
||||
"content": {
|
||||
"select_account": "Velg konto"
|
||||
}
|
||||
}
|
10
src/i18n/no/screens/announcements.json
Normal file
10
src/i18n/no/screens/announcements.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"heading": "Kunngjøringer",
|
||||
"content": {
|
||||
"published": "Publisert <0 />",
|
||||
"button": {
|
||||
"read": "Les",
|
||||
"unread": "Merk som lest"
|
||||
}
|
||||
}
|
||||
}
|
171
src/i18n/no/screens/compose.json
Normal file
171
src/i18n/no/screens/compose.json
Normal file
@ -0,0 +1,171 @@
|
||||
{
|
||||
"heading": {
|
||||
"left": {
|
||||
"alert": {
|
||||
"title": "Avbryte redigering?",
|
||||
"buttons": {
|
||||
"save": "Lagre utkast",
|
||||
"delete": "Slett utkast"
|
||||
}
|
||||
}
|
||||
},
|
||||
"right": {
|
||||
"button": {
|
||||
"default": "Tut",
|
||||
"conversation": "Tut DM",
|
||||
"reply": "Tut svar",
|
||||
"deleteEdit": "Tut",
|
||||
"edit": "Tut",
|
||||
"share": "Tut"
|
||||
},
|
||||
"alert": {
|
||||
"default": {
|
||||
"title": "Tut mislyktes",
|
||||
"button": "Prøv igjen"
|
||||
},
|
||||
"removeReply": {
|
||||
"title": "Svar på tut ble ikke funnet",
|
||||
"description": "Svarte tut kan ha blitt slettet. Vil du fjerne det fra din referanse?",
|
||||
"confirm": "Fjern referanse"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"content": {
|
||||
"root": {
|
||||
"header": {
|
||||
"postingAs": "Tuter som @{{acct}}@{{domain}}",
|
||||
"spoilerInput": {
|
||||
"placeholder": "Spoiler advarsel"
|
||||
},
|
||||
"textInput": {
|
||||
"placeholder": "Hva tenker du på",
|
||||
"keyboardImage": {
|
||||
"exceedMaximum": {
|
||||
"title": "Maksimalt antall vedlegg nådd"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"footer": {
|
||||
"attachments": {
|
||||
"sensitive": "Merk vedlegg som følsomt",
|
||||
"remove": {
|
||||
"accessibilityLabel": "Fjern opplastet vedlegg, nummer {{attachment}}"
|
||||
},
|
||||
"edit": {
|
||||
"accessibilityLabel": "Rediger opplastet vedlegg, nummer {{attachment}}"
|
||||
},
|
||||
"upload": {
|
||||
"accessibilityLabel": "Last opp flere vedlegg"
|
||||
}
|
||||
},
|
||||
"emojis": {
|
||||
"accessibilityHint": "Trykk for å legge til emoji"
|
||||
},
|
||||
"poll": {
|
||||
"option": {
|
||||
"placeholder": {
|
||||
"accessibilityLabel": "Avstemningsvalg {{index}}",
|
||||
"single": "Ett valg",
|
||||
"multiple": "Flere valg"
|
||||
}
|
||||
},
|
||||
"quantity": {
|
||||
"reduce": {
|
||||
"accessibilityLabel": "Reduser valg til {{amount}}",
|
||||
"accessibilityHint": "Minimum antall valg nådd, har {{amount}}"
|
||||
},
|
||||
"increase": {
|
||||
"accessibilityLabel": "Reduser valg til {{amount}}",
|
||||
"accessibilityHint": "Maksimum antall valg nådd, har {{amount}}"
|
||||
}
|
||||
},
|
||||
"multiple": {
|
||||
"heading": "Valg type",
|
||||
"options": {
|
||||
"single": "Ett valg",
|
||||
"multiple": "Flere valg"
|
||||
}
|
||||
},
|
||||
"expiration": {
|
||||
"heading": "Gyldighet",
|
||||
"options": {
|
||||
"300": "5 minutter",
|
||||
"1800": "30 minutter",
|
||||
"3600": "1 time",
|
||||
"21600": "6 timer",
|
||||
"86400": "1 dag",
|
||||
"259200": "3 dager",
|
||||
"604800": "7 dager"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"attachment": {
|
||||
"accessibilityLabel": "Last opp vedlegg",
|
||||
"accessibilityHint": "Avstemmingsfunksjonen blir deaktivert når der er noen vedlegg",
|
||||
"failed": {
|
||||
"alert": {
|
||||
"title": "Opplasting feilet",
|
||||
"button": "Prøv igjen"
|
||||
}
|
||||
}
|
||||
},
|
||||
"poll": {
|
||||
"accessibilityLabel": "Legg til avstemning",
|
||||
"accessibilityHint": "Vedlegg vil bli deaktivert når avstemningen er aktiv"
|
||||
},
|
||||
"visibility": {
|
||||
"accessibilityLabel": "Tut-synlighet er {{visibility}}",
|
||||
"title": "Tut-synlighet",
|
||||
"options": {
|
||||
"public": "Offentlig",
|
||||
"unlisted": "Uoppført",
|
||||
"private": "Kun følgere",
|
||||
"direct": "Direktemelding"
|
||||
}
|
||||
},
|
||||
"spoiler": {
|
||||
"accessibilityLabel": "Spoiler"
|
||||
},
|
||||
"emoji": {
|
||||
"accessibilityLabel": "Legg til emoji",
|
||||
"accessibilityHint": "Åpne emoji-valgpanel, sveip horisontalt for å endre side"
|
||||
}
|
||||
},
|
||||
"drafts_one": "Utkast ({{count}})",
|
||||
"drafts_other": "Utkast ({{count}})"
|
||||
},
|
||||
"editAttachment": {
|
||||
"header": {
|
||||
"title": "Rediger vedlegg",
|
||||
"right": {
|
||||
"accessibilityLabel": "Lagre redigering av vedlegg",
|
||||
"failed": {
|
||||
"title": "Redigering mislyktes",
|
||||
"button": "Prøv igjen"
|
||||
}
|
||||
}
|
||||
},
|
||||
"content": {
|
||||
"altText": {
|
||||
"heading": "Beskriv media for synshemmede",
|
||||
"placeholder": "Du kan legge til en beskrivelse, noen ganger kalt alt-tekst, på dine medier slik at de er tilgjengelige for enda flere mennesker, også for dem som er blinde eller svaksynte.\n\nGode beskrivelser er konkret, men presenterer hva som er i dine medier nøyaktig nok til å forstå konteksten."
|
||||
}
|
||||
}
|
||||
},
|
||||
"draftsList": {
|
||||
"header": {
|
||||
"title": "Utkast"
|
||||
},
|
||||
"warning": "Utkast lagres bare lokalt, og kan ved uhell gå tapt. Bruk ikke utkast til langtidslagring.",
|
||||
"content": {
|
||||
"accessibilityHint": "Lagret utkast, trykk for å redigere dette utkastet",
|
||||
"textEmpty": "Innhold er tomt"
|
||||
},
|
||||
"checkAttachment": "Sjekker vedlegg på serveren..."
|
||||
}
|
||||
}
|
||||
}
|
16
src/i18n/no/screens/imageViewer.json
Normal file
16
src/i18n/no/screens/imageViewer.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"content": {
|
||||
"actions": {
|
||||
"accessibilityLabel": "Flere handlinger med dette bildet",
|
||||
"accessibilityHint": "Du kan lagre eller dele dette bildet"
|
||||
},
|
||||
"options": {
|
||||
"save": "Lagre bilde",
|
||||
"share": "Del bilde"
|
||||
},
|
||||
"save": {
|
||||
"succeed": "Bilde lagret",
|
||||
"failed": "Lagring av bilde feilet"
|
||||
}
|
||||
}
|
||||
}
|
475
src/i18n/no/screens/tabs.json
Normal file
475
src/i18n/no/screens/tabs.json
Normal file
@ -0,0 +1,475 @@
|
||||
{
|
||||
"tabs": {
|
||||
"local": {
|
||||
"name": "Følger",
|
||||
"options": {
|
||||
"showBoosts": "Vis booster",
|
||||
"showReplies": "Vis svar"
|
||||
}
|
||||
},
|
||||
"public": {
|
||||
"segments": {
|
||||
"federated": "Føderert",
|
||||
"local": "Lokal",
|
||||
"trending": "Populært"
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"name": "Varsler"
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
"search": {
|
||||
"accessibilityLabel": "Søk",
|
||||
"accessibilityHint": "Søk etter emneknagger, brukere eller tuter"
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"filters": {
|
||||
"accessibilityLabel": "Filter",
|
||||
"accessibilityHint": "Filtrer viste varslingstyper",
|
||||
"title": "Vis varsler"
|
||||
}
|
||||
},
|
||||
"me": {
|
||||
"stacks": {
|
||||
"bookmarks": {
|
||||
"name": "Bokmerker"
|
||||
},
|
||||
"conversations": {
|
||||
"name": "Direktemeldinger"
|
||||
},
|
||||
"favourites": {
|
||||
"name": "Favoritter"
|
||||
},
|
||||
"followedTags": {
|
||||
"name": "Fulgte emneknagger"
|
||||
},
|
||||
"fontSize": {
|
||||
"name": "Skriftstørrelse for tut"
|
||||
},
|
||||
"language": {
|
||||
"name": "Språk"
|
||||
},
|
||||
"list": {
|
||||
"name": "Liste: {{list}}"
|
||||
},
|
||||
"listAccounts": {
|
||||
"name": "Brukere i listen: {{list}}"
|
||||
},
|
||||
"listAdd": {
|
||||
"name": "Opprett liste"
|
||||
},
|
||||
"listEdit": {
|
||||
"name": "Rediger detaljer"
|
||||
},
|
||||
"lists": {
|
||||
"name": "Lister"
|
||||
},
|
||||
"push": {
|
||||
"name": "Pushvarsling"
|
||||
},
|
||||
"preferences": {
|
||||
"name": "Brukervalg"
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"name": "Alle innholdsfiltre"
|
||||
},
|
||||
"preferencesFilterAdd": {
|
||||
"name": "Opprett Filter"
|
||||
},
|
||||
"preferencesFilterEdit": {
|
||||
"name": "Rediger Filter"
|
||||
},
|
||||
"profile": {
|
||||
"name": "Rediger Profil"
|
||||
},
|
||||
"profileName": {
|
||||
"name": "Rediger visningsnavn"
|
||||
},
|
||||
"profileNote": {
|
||||
"name": "Rediger beskrivelse"
|
||||
},
|
||||
"profileFields": {
|
||||
"name": "Rediger metadata"
|
||||
},
|
||||
"settings": {
|
||||
"name": "Appinnstillinger"
|
||||
},
|
||||
"switch": {
|
||||
"name": "Bytt konto"
|
||||
}
|
||||
},
|
||||
"fontSize": {
|
||||
"demo": "<p>Dette er en demotut😊. Du kan velge flere alternativer nedenfor.<br /><br />Denne innstillingen påvirker bare hovedinnholdet i tuter, men ikke andre skriftstørrelser.</p>",
|
||||
"sizes": {
|
||||
"S": "S",
|
||||
"M": "M - Standard",
|
||||
"L": "L",
|
||||
"XL": "XL",
|
||||
"XXL": "XXL"
|
||||
}
|
||||
},
|
||||
"listAccounts": {
|
||||
"heading": "Administrer brukere",
|
||||
"error": "Slett bruker fra listen",
|
||||
"empty": "Ingen bruker lagt til i denne listen"
|
||||
},
|
||||
"listEdit": {
|
||||
"heading": "Rediger detaljer",
|
||||
"title": "Emne",
|
||||
"repliesPolicy": {
|
||||
"heading": "Vis svar:",
|
||||
"options": {
|
||||
"none": "Ingen",
|
||||
"list": "Medlemmer fra listen",
|
||||
"followed": "Enhver fulgt bruker"
|
||||
}
|
||||
}
|
||||
},
|
||||
"listDelete": {
|
||||
"heading": "Slett liste",
|
||||
"confirm": {
|
||||
"title": "Slett listen \"{{list}}\"?",
|
||||
"message": "Denne handlingen kan ikke gjenopprettes."
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"visibility": {
|
||||
"title": "Standard synlighet for post",
|
||||
"options": {
|
||||
"public": "Offentlig",
|
||||
"unlisted": "Uoppført",
|
||||
"private": "Kun følgere"
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": "Marker alltid media som sensitivt"
|
||||
},
|
||||
"media": {
|
||||
"title": "Visning av media",
|
||||
"options": {
|
||||
"default": "Skjul media som er merket som sensitivt",
|
||||
"show_all": "Vis alltid media",
|
||||
"hide_all": "Skjul alltid media"
|
||||
}
|
||||
},
|
||||
"spoilers": {
|
||||
"title": "Utvid alltid tuter som er merket med innholdsadvarsler"
|
||||
},
|
||||
"autoplay_gifs": {
|
||||
"title": "Autostart GIF i tuter"
|
||||
},
|
||||
"filters": {
|
||||
"title": "Innholdsfiltre",
|
||||
"content": "{{count}} aktive"
|
||||
},
|
||||
"web_only": {
|
||||
"title": "Oppdater innstillinger",
|
||||
"description": "Innstillingene nedenfor kan kun oppdateres ved hjelp av web-grensesnittet"
|
||||
}
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"expired": "Utløpt",
|
||||
"keywords_one": "{{count}} nøkkelord",
|
||||
"keywords_other": "{{count}} nøkkelord",
|
||||
"statuses_one": "{{count}} tut",
|
||||
"statuses_other": "{{count}} tut",
|
||||
"context": "Gjelder i <0 />",
|
||||
"contexts": {
|
||||
"home": "følgende og lister",
|
||||
"notifications": "varsler",
|
||||
"public": "føderert",
|
||||
"thread": "samtale",
|
||||
"account": "profil"
|
||||
}
|
||||
},
|
||||
"preferencesFilter": {
|
||||
"name": "Navn",
|
||||
"expiration": "Utløper",
|
||||
"expirationOptions": {
|
||||
"0": "Aldri",
|
||||
"1800": "Etter 30 minutter",
|
||||
"3600": "Etter 1 time",
|
||||
"43200": "Etter 12 timer",
|
||||
"86400": "Etter 1 dag",
|
||||
"604800": "Etter 1 uke",
|
||||
"18144000": "Etter 1 måned"
|
||||
},
|
||||
"context": "Gjelder i",
|
||||
"contexts": {
|
||||
"home": "Følgende og lister",
|
||||
"notifications": "Varsel",
|
||||
"public": "Føderert tidlinje",
|
||||
"thread": "Samtalevisning",
|
||||
"account": "Profil visning"
|
||||
},
|
||||
"action": "Når samsvarende",
|
||||
"actions": {
|
||||
"warn": "Kollapset, men kan vises",
|
||||
"hide": "Skjult fullstendig"
|
||||
},
|
||||
"keywords": "Treff for disse nøkkelordene",
|
||||
"keyword": "Nøkkelord",
|
||||
"statuses": "Treff disse tutene"
|
||||
},
|
||||
"profile": {
|
||||
"feedback": {
|
||||
"succeed": "{{type}} oppdatert",
|
||||
"failed": "{{type}} oppdatering feilet, prøv igjen"
|
||||
},
|
||||
"root": {
|
||||
"name": {
|
||||
"title": "Visningsnavn"
|
||||
},
|
||||
"avatar": {
|
||||
"title": "Profilbilde",
|
||||
"description": "Vil bli nedskalert til 400 x 400 px"
|
||||
},
|
||||
"header": {
|
||||
"title": "Fane",
|
||||
"description": "Vil bli nedskalert til 1500x500px"
|
||||
},
|
||||
"note": {
|
||||
"title": "Beskrivelse"
|
||||
},
|
||||
"fields": {
|
||||
"title": "Metadata",
|
||||
"total_one": "{{count}} felt",
|
||||
"total_other": "{{count}} felt"
|
||||
},
|
||||
"lock": {
|
||||
"title": "Lås konto",
|
||||
"description": "Krever at du godkjenner følgere manuelt"
|
||||
},
|
||||
"bot": {
|
||||
"title": "Bot konto",
|
||||
"description": "Denne kontoen utfører i hovedsak automatiserte handlinger og blir kanskje ikke holdt øye med"
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"group": "Gruppe {{index}}",
|
||||
"label": "Etikett",
|
||||
"content": "Innhold"
|
||||
},
|
||||
"mediaSelectionFailed": "Bildebehandling mislyktes. Vennligst prøv igjen."
|
||||
},
|
||||
"push": {
|
||||
"notAvailable": "Din telefon støtter ikke tooot's push-varsling",
|
||||
"enable": {
|
||||
"direct": "Aktiver push-varsler",
|
||||
"settings": "Aktiver i innstillinger"
|
||||
},
|
||||
"missingServerKey": {
|
||||
"message": "Feil på tjener for push-tjeneste",
|
||||
"description": "Vennligst kontakt din serveradministrator for å konfigurere push-støtte"
|
||||
},
|
||||
"global": {
|
||||
"heading": "Aktiver for {{acct}}",
|
||||
"description": "Meldinger blir sendt gjennom toot's server"
|
||||
},
|
||||
"decode": {
|
||||
"heading": "Meldingsdetaljer",
|
||||
"description": "Meldinger sendt gjennom toots server er kryptert, men du kan velge å dekode meldingen på serveren. Vår server er åpen kildekode og har ingen logging."
|
||||
},
|
||||
"default": {
|
||||
"heading": "Standard"
|
||||
},
|
||||
"follow": {
|
||||
"heading": "Ny følger"
|
||||
},
|
||||
"follow_request": {
|
||||
"heading": "Følgerforespørsel"
|
||||
},
|
||||
"favourite": {
|
||||
"heading": "Favorisert"
|
||||
},
|
||||
"reblog": {
|
||||
"heading": "Boostet"
|
||||
},
|
||||
"mention": {
|
||||
"heading": "Nevnte deg"
|
||||
},
|
||||
"poll": {
|
||||
"heading": "Oppdateringer om avstemning"
|
||||
},
|
||||
"status": {
|
||||
"heading": "Tut fra påmeldte brukere"
|
||||
},
|
||||
"update": {
|
||||
"heading": "%s er redigert"
|
||||
},
|
||||
"admin.sign_up": {
|
||||
"heading": "Administrer: registrer deg"
|
||||
},
|
||||
"admin.report": {
|
||||
"heading": "Administrer: rapporter"
|
||||
},
|
||||
"howitworks": "Lær hvordan ruting virker"
|
||||
},
|
||||
"root": {
|
||||
"announcements": {
|
||||
"content": {
|
||||
"unread": "{{amount}} ulest",
|
||||
"read": "Alt lest",
|
||||
"empty": "Ingen"
|
||||
}
|
||||
},
|
||||
"push": {
|
||||
"content_true": "Aktivert",
|
||||
"content_false": "Deaktivert"
|
||||
},
|
||||
"logout": {
|
||||
"button": "Logg ut",
|
||||
"alert": {
|
||||
"title": "Logge ut?",
|
||||
"message": "Etter å ha logget ut, må du logge på igjen",
|
||||
"buttons": {
|
||||
"logout": "Logg ut"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"theme": {
|
||||
"heading": "Utseende",
|
||||
"options": {
|
||||
"auto": "Som system",
|
||||
"light": "Lyst tema",
|
||||
"dark": "Mørkt tema"
|
||||
}
|
||||
},
|
||||
"darkTheme": {
|
||||
"heading": "Mørkt tema",
|
||||
"options": {
|
||||
"lighter": "Standard",
|
||||
"darker": "Helt svart"
|
||||
}
|
||||
},
|
||||
"browser": {
|
||||
"heading": "Åpning av lenke",
|
||||
"options": {
|
||||
"internal": "I appen",
|
||||
"external": "Bruk nettleser"
|
||||
}
|
||||
},
|
||||
"autoplayGifv": {
|
||||
"heading": "Autostart GIF i tuter"
|
||||
},
|
||||
"feedback": {
|
||||
"heading": "Funksjonsforespørsler"
|
||||
},
|
||||
"support": {
|
||||
"heading": "Støtt tooot"
|
||||
},
|
||||
"contact": {
|
||||
"heading": "Kontakt tooot"
|
||||
},
|
||||
"version": "Versjon v{{version}}",
|
||||
"instanceVersion": "Mastodon versjon v{{version}}"
|
||||
},
|
||||
"switch": {
|
||||
"existing": "Velg fra innlogget",
|
||||
"new": "Logg inn på instans"
|
||||
}
|
||||
},
|
||||
"shared": {
|
||||
"account": {
|
||||
"actions": {
|
||||
"accessibilityLabel": "Handlinger for bruker {{user}}",
|
||||
"accessibilityHint": "Du kan dempe, blokkere, rapportere eller dele denne brukeren"
|
||||
},
|
||||
"followed_by": " følger deg",
|
||||
"moved": "Bruker flyttet",
|
||||
"created_at": "Ble med: {{date}}",
|
||||
"summary": {
|
||||
"statuses_count": "{{count}} tut"
|
||||
},
|
||||
"toots": {
|
||||
"default": "Tuter",
|
||||
"all": "Tuter og svar"
|
||||
},
|
||||
"suspended": "Konto suspendert av moderatorene på serveren din"
|
||||
},
|
||||
"accountInLists": {
|
||||
"name": "Lister av @{{username}}",
|
||||
"inLists": "I liste",
|
||||
"notInLists": "Andre lister"
|
||||
},
|
||||
"attachments": {
|
||||
"name": "<0 /><1>'s media</1>"
|
||||
},
|
||||
"filter": {
|
||||
"name": "Legg til filter",
|
||||
"existed": "Finnes i disse filtrene"
|
||||
},
|
||||
"history": {
|
||||
"name": "Rediger historikk"
|
||||
},
|
||||
"report": {
|
||||
"name": "Rapporter {{acct}}",
|
||||
"report": "Rapporter",
|
||||
"forward": {
|
||||
"heading": "Anonymt videresendt til ekstern server {{instance}}"
|
||||
},
|
||||
"reasons": {
|
||||
"heading": "Hva skjer med denne kontoen?",
|
||||
"spam": "Det er søppelpost",
|
||||
"other": "Det er noe annet",
|
||||
"violation": "Det bryter serverregler"
|
||||
},
|
||||
"comment": {
|
||||
"heading": "Noe annet du vil legge til?"
|
||||
},
|
||||
"violatedRules": {
|
||||
"heading": "Det bryter serverregler"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"header": {
|
||||
"prefix": "Søker",
|
||||
"placeholder": "etter..."
|
||||
},
|
||||
"empty": {
|
||||
"general": "Angi nøkkelord for å søke etter <bold>$t(screenTabs:shared.search.sections.accounts)</bold>、<bold>$t(screenTabs:shared.search.sections.hashtags)</bold> eller <bold>$t(screenTabs:shared.search.sections.statuses)</bold>",
|
||||
"advanced": {
|
||||
"header": "Avansert søk",
|
||||
"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)"
|
||||
}
|
||||
},
|
||||
"trending": {
|
||||
"tags": "Populære emner"
|
||||
}
|
||||
},
|
||||
"sections": {
|
||||
"accounts": "Bruker",
|
||||
"hashtags": "Emneknagg",
|
||||
"statuses": "Tut"
|
||||
},
|
||||
"notFound": "Finner ikke <bold>{{searchTerm}}</bold> relatert til {{type}}",
|
||||
"noResult": "Kan ikke finne noe, vennligst prøv et annet begrep"
|
||||
},
|
||||
"toot": {
|
||||
"name": "Diskusjoner",
|
||||
"remoteFetch": {
|
||||
"title": "Inneholder eksternt innhold",
|
||||
"message": "Føderert innhold er ikke alltid tilgjengelig på lokal forekomst. Dette innholdet hentes fra ekstern forekomst og merkes. Du kan samhandle med disse innholdet som vanlig."
|
||||
}
|
||||
},
|
||||
"users": {
|
||||
"accounts": {
|
||||
"following": "Følger {{count}}",
|
||||
"followers": "{{count}} følgere"
|
||||
},
|
||||
"statuses": {
|
||||
"reblogged_by": "{{count}} boostet",
|
||||
"favourited_by": "{{count}} som favoritt"
|
||||
},
|
||||
"resultIncomplete": "Resultater fra en ekstern instans er ufullstendig"
|
||||
}
|
||||
}
|
||||
}
|
@ -33,7 +33,7 @@
|
||||
"poll": "Опитування, у якому ви голосували, закінчилося",
|
||||
"reblog": {
|
||||
"default": "{{name}} передмухує",
|
||||
"myself": "",
|
||||
"myself": "Передмухнуто мною",
|
||||
"notification": "{{name}} передмухує ваш дмух"
|
||||
},
|
||||
"update": "Передмух був відредагований",
|
||||
|
@ -129,7 +129,7 @@ const chooseAndUploadAttachment = async ({
|
||||
for (const media of result) {
|
||||
const requiredMedia = media as Required<Asset>
|
||||
uploadAttachment({ composeDispatch, media: requiredMedia })
|
||||
await new Promise(res => setTimeout(res, 500))
|
||||
await new Promise<void>(res => setTimeout(res, 500))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { HeaderRight } from '@components/Header'
|
||||
import Timeline from '@components/Timeline'
|
||||
import SegmentedControl from '@react-native-community/segmented-control'
|
||||
import SegmentedControl from '@react-native-segmented-control/segmented-control'
|
||||
import { NativeStackScreenProps } from '@react-navigation/native-stack'
|
||||
import { TabPublicStackParamList } from '@utils/navigation/navigators'
|
||||
import { QueryKeyTimeline } from '@utils/queryHooks/timeline'
|
||||
@ -49,11 +49,12 @@ const Root: React.FC<NativeStackScreenProps<TabPublicStackParamList, 'Tab-Public
|
||||
useEffect(() => {
|
||||
navigation.setOptions({
|
||||
headerTitle: () => (
|
||||
// @ts-ignore
|
||||
<SegmentedControl
|
||||
appearance={mode}
|
||||
values={routes.map(({ title }) => title)}
|
||||
selectedIndex={segment}
|
||||
onChange={({ nativeEvent }) => {
|
||||
onChange={({ nativeEvent }: any) => {
|
||||
setSegment(nativeEvent.selectedSegmentIndex)
|
||||
setGlobalStorage('app.prev_public_segment', segments[nativeEvent.selectedSegmentIndex])
|
||||
}}
|
||||
|
@ -3,7 +3,7 @@ import menuShare from '@components/contextMenu/share'
|
||||
import { HeaderLeft, HeaderRight } from '@components/Header'
|
||||
import Timeline from '@components/Timeline'
|
||||
import TimelineDefault from '@components/Timeline/Default'
|
||||
import SegmentedControl from '@react-native-community/segmented-control'
|
||||
import SegmentedControl from '@react-native-segmented-control/segmented-control'
|
||||
import { useQueryClient } from '@tanstack/react-query'
|
||||
import { TabSharedStackScreenProps } from '@utils/navigation/navigators'
|
||||
import { useAccountQuery } from '@utils/queryHooks/account'
|
||||
@ -182,11 +182,12 @@ const TabSharedAccount: React.FC<TabSharedStackScreenProps<'Tab-Shared-Account'>
|
||||
<AccountAttachments />
|
||||
</View>
|
||||
{!data?.suspended ? (
|
||||
// @ts-ignore
|
||||
<SegmentedControl
|
||||
appearance={mode}
|
||||
values={[t('shared.account.toots.default'), t('shared.account.toots.all')]}
|
||||
selectedIndex={segment}
|
||||
onChange={({ nativeEvent }) => {
|
||||
onChange={({ nativeEvent }: any) => {
|
||||
setSegment(nativeEvent.selectedSegmentIndex)
|
||||
switch (nativeEvent.selectedSegmentIndex) {
|
||||
case 0:
|
||||
|
@ -85,7 +85,7 @@ const TabSharedToot: React.FC<TabSharedStackScreenProps<'Tab-Shared-Toot'>> = ({
|
||||
for (let [] of Array(
|
||||
Math.ceil(ancestorsCache.current.length / PREV_PER_BATCH)
|
||||
).entries()) {
|
||||
await new Promise(promise => setTimeout(promise, 64))
|
||||
await new Promise<void>(promise => setTimeout(promise, 64))
|
||||
queryClient.setQueryData<{ pages: { body: Mastodon.Status[] }[] }>(
|
||||
queryKey.local,
|
||||
old => {
|
||||
|
@ -1,4 +1,3 @@
|
||||
import { createNativeStackNavigator } from '@react-navigation/native-stack'
|
||||
import TabSharedAccount from '@screens/Tabs/Shared/Account'
|
||||
import TabSharedAccountInLists from '@screens/Tabs/Shared/AccountInLists'
|
||||
import TabSharedAttachments from '@screens/Tabs/Shared/Attachments'
|
||||
@ -11,7 +10,7 @@ import TabSharedUsers from '@screens/Tabs/Shared/Users'
|
||||
import React from 'react'
|
||||
import TabSharedFilter from './Filter'
|
||||
|
||||
const TabShared = ({ Stack }: { Stack: ReturnType<typeof createNativeStackNavigator> }) => {
|
||||
const TabShared = ({ Stack }: { Stack: any }) => {
|
||||
return (
|
||||
<Stack.Group>
|
||||
<Stack.Screen
|
||||
|
@ -221,9 +221,7 @@ const Screens: React.FC = () => {
|
||||
<IntlProvider locale={i18n.language}>
|
||||
<StatusBar
|
||||
backgroundColor={colors.backgroundDefault}
|
||||
{...(Platform.OS === 'android' && {
|
||||
barStyle: theme === 'light' ? 'dark-content' : 'light-content'
|
||||
})}
|
||||
barStyle={theme === 'light' ? 'dark-content' : 'light-content'}
|
||||
/>
|
||||
<NavigationContainer
|
||||
ref={navigationRef}
|
||||
|
@ -1,3 +1,3 @@
|
||||
import { AccountV0 } from "./v0";
|
||||
|
||||
export { AccountV0 as StorageAccount }
|
||||
export type { AccountV0 as StorageAccount }
|
||||
|
@ -1,3 +1,3 @@
|
||||
import { GlobalV0 } from "./v0";
|
||||
import { GlobalV0 } from './v0'
|
||||
|
||||
export { GlobalV0 as StorageGlobal }
|
||||
export type { GlobalV0 as StorageGlobal }
|
||||
|
@ -11,7 +11,6 @@ export const versionStorageGlobal = storage.global.getNumber('version.global')
|
||||
|
||||
export async function migrateFromAsyncStorage(): Promise<void> {
|
||||
log('log', 'Migration', 'Migrating...')
|
||||
const start = global.performance.now()
|
||||
|
||||
const unwrapPushData = (setting: { value: boolean } | boolean | undefined): boolean =>
|
||||
typeof setting === 'object' ? setting.value : typeof setting === 'boolean' ? setting : true
|
||||
@ -176,6 +175,5 @@ export async function migrateFromAsyncStorage(): Promise<void> {
|
||||
|
||||
storage.global.set('version.global', 0)
|
||||
|
||||
const end = global.performance.now()
|
||||
log('log', 'Migration', `Migrated in ${end - start}ms`)
|
||||
log('log', 'Migration', 'Migrated')
|
||||
}
|
||||
|
@ -1,22 +1,48 @@
|
||||
{
|
||||
"$schema": "https://json.schemastore.org/tsconfig",
|
||||
"display": "React Native",
|
||||
"_version": "2.0.3",
|
||||
"compilerOptions": {
|
||||
"target": "ES6",
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"target": "esnext",
|
||||
"module": "commonjs",
|
||||
"types": [
|
||||
"react-native"
|
||||
],
|
||||
"lib": [
|
||||
"esnext"
|
||||
],
|
||||
"allowJs": false,
|
||||
"jsx": "react-native",
|
||||
"lib": ["dom", "esnext"],
|
||||
"moduleResolution": "node",
|
||||
"noEmit": true,
|
||||
"skipLibCheck": true,
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"strict": true,
|
||||
"strictFunctionTypes": false,
|
||||
"moduleResolution": "node",
|
||||
"resolveJsonModule": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"traceResolution": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"esModuleInterop": true,
|
||||
"skipLibCheck": true,
|
||||
"baseUrl": "./",
|
||||
"paths": {
|
||||
"@components/*": ["./src/components/*"],
|
||||
"@i18n/*": ["./src/i18n/*"],
|
||||
"@screens/*": ["./src/screens/*"],
|
||||
"@utils/*": ["./src/utils/*"]
|
||||
"@components/*": [
|
||||
"./src/components/*"
|
||||
],
|
||||
"@i18n/*": [
|
||||
"./src/i18n/*"
|
||||
],
|
||||
"@screens/*": [
|
||||
"./src/screens/*"
|
||||
],
|
||||
"@utils/*": [
|
||||
"./src/utils/*"
|
||||
]
|
||||
}
|
||||
},
|
||||
"exclude": ["node_modules"]
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"babel.config.js",
|
||||
"metro.config.js"
|
||||
]
|
||||
}
|
Reference in New Issue
Block a user