diff --git a/android/app/build.gradle b/android/app/build.gradle index 6a300537..3f19d606 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -119,8 +119,8 @@ android { applicationId "io.filen.app" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 2071 - versionName "2.0.70" + versionCode 2072 + versionName "2.0.72" } splits { diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index a261840e..10208bb3 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -41,7 +41,8 @@ android:allowBackup="false" android:theme="@style/AppTheme" android:requestLegacyExternalStorage="true" - android:hardwareAccelerated="true"> + android:hardwareAccelerated="true" + android:largeHeap="true"> =14.14" } }, - "node_modules/@filen/filen-sdk/node_modules/uuid": { + "node_modules/@filen/sdk/node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", diff --git a/nodejs-assets/nodejs-project/package.json b/nodejs-assets/nodejs-project/package.json index 98b9445c..510e185d 100644 --- a/nodejs-assets/nodejs-project/package.json +++ b/nodejs-assets/nodejs-project/package.json @@ -9,7 +9,7 @@ "author": "", "license": "ISC", "dependencies": { - "@filen/filen-sdk": "^1.0.8", + "@filen/sdk": "^0.1.12", "await-semaphore": "^0.1.3", "axios": "^0.26.0", "crypto-api-v1": "^1.0.0", diff --git a/package-lock.json b/package-lock.json index 733d58c5..289b97cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,14 @@ { "name": "filen-mobile", - "version": "2.0.70", + "version": "2.0.72", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "filen-mobile", - "version": "2.0.70", + "version": "2.0.72", "hasInstallScript": true, "dependencies": { - "@filen/filen-sdk": "^1.0.8", "@notifee/react-native": "^7.8.0", "@openspacelabs/react-native-zoomable-view": "^2.1.5", "@react-native-community/hooks": "^3.0.0", @@ -4020,73 +4019,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@filen/filen-sdk": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@filen/filen-sdk/-/filen-sdk-1.0.8.tgz", - "integrity": "sha512-+FZ3ZwIgbP40NDZtbV4PYuXNaOm2iESvwYBUqjvUKy40FVWk4Qq4Kpv57ios29NrSgyb24wo8xiAV05ZifXiog==", - "dependencies": { - "axios": "^1.6.7", - "crypto-api-v1": "^1.0.0", - "crypto-js": "^4.2.0", - "fs-extra": "^11.2.0", - "js-crypto-key-utils": "^1.0.7", - "mime-types": "^2.1.35", - "progress-stream": "^2.0.0", - "uuid": "^9.0.1" - }, - "engines": { - "node": "^18" - } - }, - "node_modules/@filen/filen-sdk/node_modules/crypto-js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", - "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" - }, - "node_modules/@filen/filen-sdk/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@filen/filen-sdk/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@filen/filen-sdk/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@filen/filen-sdk/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -8532,17 +8464,6 @@ "safer-buffer": "~2.1.0" } }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -9588,11 +9509,6 @@ "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==" }, - "node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, "node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -9682,11 +9598,6 @@ "node": ">=8" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, "node_modules/browserslist": { "version": "4.21.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", @@ -10616,11 +10527,6 @@ "node": "*" } }, - "node_modules/crypto-api-v1": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-api-v1/-/crypto-api-v1-1.0.0.tgz", - "integrity": "sha512-QiInrmxO/sf37Cx8EYK11Y002oU6jNiJI1AY81Y8LJS09NeY16oo3pV+lDfJX12G8WvvZ9NqaFt0NKZ68SGnoA==" - }, "node_modules/crypto-js": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", @@ -10971,15 +10877,6 @@ "prop-types": "*" } }, - "node_modules/des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -11246,20 +11143,6 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.299.tgz", "integrity": "sha512-lQ7ijJghH6pCGbfWXr6EY+KYCMaRSjgsY925r1p/TlpSfVM1VjHTcn1gAc15VM4uwti283X6QtjPTXdpoSGiZQ==" }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "node_modules/emitter-listener": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", @@ -13998,15 +13881,6 @@ "node": ">=0.10.0" } }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -14039,16 +13913,6 @@ "node": ">=8" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -18233,126 +18097,6 @@ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" }, - "node_modules/js-crypto-aes": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/js-crypto-aes/-/js-crypto-aes-1.0.6.tgz", - "integrity": "sha512-E2hu9z5+YtpDg9Un/bDfmH+I5dv/8aN+ozxv9L0ybZldcQ9T5iYDbBKdlKGBUKI3IvzoWSBSdnZnhwZaRIN46w==", - "dependencies": { - "js-crypto-env": "^1.0.5" - } - }, - "node_modules/js-crypto-env": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/js-crypto-env/-/js-crypto-env-1.0.5.tgz", - "integrity": "sha512-8/UNN3sG8J+yMzqwSNVaobaWhIz4MqZFoOg5OB0DFXqS8eFjj2YvdmLJqIWXPl57Yw10SvYx0DQOtkfsWIV9Aw==" - }, - "node_modules/js-crypto-hash": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/js-crypto-hash/-/js-crypto-hash-1.0.7.tgz", - "integrity": "sha512-GdbcVKjplbXJdR9oF2ks8+sBCLD7BUZ144Bc+Ie8OJuBHSIiHyMzdg2eD+ZYf87awTsKckNn1xIv+31+V2ewcA==", - "dependencies": { - "buffer": "~6.0.0", - "hash.js": "~1.1.7", - "js-crypto-env": "^1.0.5", - "md5": "~2.3.0", - "sha3": "~2.1.0" - } - }, - "node_modules/js-crypto-hash/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/js-crypto-hmac": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/js-crypto-hmac/-/js-crypto-hmac-1.0.7.tgz", - "integrity": "sha512-OVn2wjAuOV7ToQYvRKY2VoElCHoRW7BepycPPuH73xbLygDczkef41YsXMpKLnVAyS5kdwMJQy9qlMR9touHTg==", - "dependencies": { - "js-crypto-env": "^1.0.5", - "js-crypto-hash": "^1.0.7" - } - }, - "node_modules/js-crypto-key-utils": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/js-crypto-key-utils/-/js-crypto-key-utils-1.0.7.tgz", - "integrity": "sha512-8/y/hpKevnAgr5EXz2x4IXMfqjzYZAzzXXc9OnAyI5JNdUtAufJkGfwlmZ+o40lTHv3k1egCiP/6pG/dZiqiEA==", - "dependencies": { - "asn1.js": "~5.4.1", - "buffer": "~6.0.0", - "des.js": "~1.1.0", - "elliptic": "~6.5.0", - "js-crypto-aes": "^1.0.6", - "js-crypto-hash": "^1.0.7", - "js-crypto-pbkdf": "^1.0.7", - "js-crypto-random": "^1.0.5", - "js-encoding-utils": "0.7.3", - "lodash.clonedeep": "~4.5.0" - } - }, - "node_modules/js-crypto-key-utils/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/js-crypto-pbkdf": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/js-crypto-pbkdf/-/js-crypto-pbkdf-1.0.7.tgz", - "integrity": "sha512-FGs1PZeqGWM8k8k5JlAhHbBhLYtls+iVmeJEC22DUJ98Q3qo9Ki4cu3i0oxhjA2VpZ8V4MmV1DJHDTFYY4iOwg==", - "dependencies": { - "js-crypto-hash": "^1.0.7", - "js-crypto-hmac": "^1.0.7", - "js-encoding-utils": "0.7.3" - } - }, - "node_modules/js-crypto-random": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/js-crypto-random/-/js-crypto-random-1.0.5.tgz", - "integrity": "sha512-WydEQ5rrWLzgSkX1QNsuGinkv7z57UkYnDGo5f5oGtBe9QeUWUehdmPNNG4a4Sf8xGkjZBOhKaZqT1ACnyYCBA==", - "dependencies": { - "js-crypto-env": "^1.0.5" - } - }, - "node_modules/js-encoding-utils": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/js-encoding-utils/-/js-encoding-utils-0.7.3.tgz", - "integrity": "sha512-cfjcyPOzkZ2esMAi6eAjuto7GiT6YpPan5xIeQyN/CFqFHTt1sdqP0PJPgzi3HqAqXKN9j9hduynkgwk+AAJOw==" - }, "node_modules/js-levenshtein": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", @@ -18820,11 +18564,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" - }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -19607,16 +19346,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -21408,15 +21137,6 @@ "node": ">=0.4.0" } }, - "node_modules/progress-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-2.0.0.tgz", - "integrity": "sha512-xJwOWR46jcXUq6EH9yYyqp+I52skPySOeHfkxOZ2IY1AiBi/sFJhbhAKHoV3OTw/omQ45KTio9215dRJ2Yxd3Q==", - "dependencies": { - "speedometer": "~1.0.0", - "through2": "~2.0.3" - } - }, "node_modules/promise": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", @@ -23640,37 +23360,6 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, - "node_modules/sha3": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/sha3/-/sha3-2.1.4.tgz", - "integrity": "sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==", - "dependencies": { - "buffer": "6.0.3" - } - }, - "node_modules/sha3/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -24206,11 +23895,6 @@ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "deprecated": "Please use @jridgewell/sourcemap-codec instead" }, - "node_modules/speedometer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-1.0.0.tgz", - "integrity": "sha512-lgxErLl/7A5+vgIIXsh9MbeukOaCb2axgQ+bKCdIE+ibNT4XNYGNCR1qFEGq6F+YDASXK3Fh/c5FgtZchFolxw==" - }, "node_modules/split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", diff --git a/package.json b/package.json index 0a17ce9f..592d9c23 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "filen-mobile", - "version": "2.0.70", + "version": "2.0.72", "private": true, "scripts": { "android": "react-native run-android", @@ -25,7 +25,6 @@ "tsc:check": "tsc --noEmit" }, "dependencies": { - "@filen/filen-sdk": "^1.0.8", "@notifee/react-native": "^7.8.0", "@openspacelabs/react-native-zoomable-view": "^2.1.5", "@react-native-community/hooks": "^3.0.0", diff --git a/src/components/ActionSheets/ActionSheets.tsx b/src/components/ActionSheets/ActionSheets.tsx index 8f9fa281..76df7fad 100644 --- a/src/components/ActionSheets/ActionSheets.tsx +++ b/src/components/ActionSheets/ActionSheets.tsx @@ -1,5 +1,5 @@ import React, { memo, useEffect, useState } from "react" -import { View, Text, TouchableHighlight, TouchableOpacity } from "react-native" +import { View, Text, TouchableHighlight, TouchableOpacity, Image } from "react-native" import { SheetManager } from "react-native-actions-sheet" import storage from "../../lib/storage" import { useMMKVBoolean, useMMKVNumber } from "react-native-mmkv" @@ -13,7 +13,6 @@ import { THUMBNAIL_BASE_PATH } from "../../lib/constants" import useDarkMode from "../../lib/hooks/useDarkMode" import useLang from "../../lib/hooks/useLang" import * as db from "../../lib/db" -import Image from "react-native-fast-image" export const ActionButton = memo( ({ @@ -191,7 +190,7 @@ export const ItemActionSheetItemHeader = memo(() => { hideThumbnails ? getImageForItem(currentActionSheetItem) : typeof currentActionSheetItem.thumbnail !== "undefined" - ? { uri: "file://" + THUMBNAIL_BASE_PATH + currentActionSheetItem.uuid + ".jpg", priority: "high" } + ? { uri: "file://" + THUMBNAIL_BASE_PATH + currentActionSheetItem.uuid + ".jpg" } : getImageForItem(currentActionSheetItem) } style={{ diff --git a/src/components/AuthContainer/AuthContainer.tsx b/src/components/AuthContainer/AuthContainer.tsx index e10e95f8..64de5adf 100644 --- a/src/components/AuthContainer/AuthContainer.tsx +++ b/src/components/AuthContainer/AuthContainer.tsx @@ -1,9 +1,8 @@ import React, { memo } from "react" -import { TouchableOpacity, KeyboardAvoidingView, Platform } from "react-native" +import { TouchableOpacity, KeyboardAvoidingView, Platform, Image } from "react-native" import { getColor } from "../../style" import useDarkMode from "../../lib/hooks/useDarkMode" import storage from "../../lib/storage" -import Image from "react-native-fast-image" import useKeyboardOffset from "../../lib/hooks/useKeyboardOffset" const AuthContainer = memo(({ children }: { children: React.ReactNode[] }) => { diff --git a/src/components/Item/Item.tsx b/src/components/Item/Item.tsx index 7c624260..b13036aa 100644 --- a/src/components/Item/Item.tsx +++ b/src/components/Item/Item.tsx @@ -19,9 +19,9 @@ import { Item } from "../../types" import { fetchFolderSize } from "../../lib/api" import memoryCache from "../../lib/memoryCache" import { THUMBNAIL_BASE_PATH } from "../../lib/constants" -import Image from "react-native-fast-image" import * as db from "../../lib/db" import { checkItemThumbnail } from "../../lib/services/thumbnails" +import Image from "react-native-fast-image" export interface ItemBaseProps { item: Item diff --git a/src/components/Toasts/UploadToast/UploadToast.tsx b/src/components/Toasts/UploadToast/UploadToast.tsx index 14173ea2..48e832a7 100644 --- a/src/components/Toasts/UploadToast/UploadToast.tsx +++ b/src/components/Toasts/UploadToast/UploadToast.tsx @@ -111,9 +111,9 @@ const UploadToast = memo(() => { if (stat.isDirectory) { foldersToUpload.push(uri) } else { - const fileName = pathModule.parse(uri).name + const fileName = pathModule.basename(uri) - if (!fileName || fileName.length <= 0) { + if (!fileName || fileName.length <= 0 || fileName === "." || fileName === "/") { resolve() return diff --git a/src/lib/fs/fs.ts b/src/lib/fs/fs.ts index e7333af4..c90ad66b 100644 --- a/src/lib/fs/fs.ts +++ b/src/lib/fs/fs.ts @@ -528,15 +528,21 @@ export const saf = { throw new Error(uri + " does not exist.") } + const fileName = pathModule.basename(stat.uri) + + if (fileName.length <= 0 || fileName === "." || fileName === "/") { + throw new Error("Could not parse file name.") + } + return { - name: pathModule.parse(stat.uri).name || (await global.nodeThread.uuidv4()), + name: fileName || (await global.nodeThread.uuidv4()), size: stat.size || 0, lastModified: convertTimestampToMs(stat.modificationTime || Date.now()), isDirectory: stat.isDirectory, type: stat.isDirectory ? "directory" : "file", uri, path: uri, - mime: mimeTypes.lookup(pathModule.parse(stat.uri).name || (await global.nodeThread.uuidv4())) || "application/octet-stream", + mime: mimeTypes.lookup(fileName || (await global.nodeThread.uuidv4())) || "application/octet-stream", lib: "expo-filesystem" } } diff --git a/src/lib/services/setup/setup.ts b/src/lib/services/setup/setup.ts index d2b4202d..ee58f9a2 100644 --- a/src/lib/services/setup/setup.ts +++ b/src/lib/services/setup/setup.ts @@ -249,7 +249,7 @@ export const setup = async ({ navigation }: { navigation: NavigationContainerRef .then(() => checkOfflineItems() .then(() => - clearCacheDirectories(300000) + clearCacheDirectories(60000) .then(() => { if (Platform.OS === "ios") { fs.deleteOldIOSDocumentDirs().catch(console.error) diff --git a/src/lib/services/upload/upload.ts b/src/lib/services/upload/upload.ts index 927b0fd9..30a75f6f 100644 --- a/src/lib/services/upload/upload.ts +++ b/src/lib/services/upload/upload.ts @@ -319,9 +319,9 @@ export const uploadFolder = async ({ path: stat.name }) } else { - const name = pathModule.parse(uri).name + const name = pathModule.basename(uri) - if (!name || name.length <= 0) { + if (!name || name.length <= 0 || name === "." || name === "/") { return } diff --git a/src/screens/CameraUploadAlbumsScreen/CameraUploadAlbumsScreen.tsx b/src/screens/CameraUploadAlbumsScreen/CameraUploadAlbumsScreen.tsx index 20342096..3d200be0 100644 --- a/src/screens/CameraUploadAlbumsScreen/CameraUploadAlbumsScreen.tsx +++ b/src/screens/CameraUploadAlbumsScreen/CameraUploadAlbumsScreen.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useState, memo, useCallback } from "react" -import { View, Text, Switch, Platform, ScrollView, ActivityIndicator } from "react-native" +import { View, Text, Switch, Platform, ScrollView, ActivityIndicator, Image } from "react-native" import storage from "../../lib/storage" import { useMMKVString, useMMKVNumber } from "react-native-mmkv" import { i18n } from "../../i18n" @@ -14,9 +14,8 @@ import DefaultTopBar from "../../components/TopBar/DefaultTopBar" import useDarkMode from "../../lib/hooks/useDarkMode" import useLang from "../../lib/hooks/useLang" import { getLastImageOfAlbum } from "../SelectMediaScreen/SelectMediaScreen" -import Image from "react-native-fast-image" -const fetchAssetsSemaphore = new Semaphore(3) +const fetchAssetsSemaphore = new Semaphore(5) export interface CameraUploadAlbumsScreenProps { navigation: any @@ -68,8 +67,7 @@ export const AlbumItem = memo(({ index, darkMode, album, hasPermissions, exclude {image.length > 0 ? ( @@ -112,8 +112,7 @@ const Item = memo( {typeof participant.avatar === "string" && participant.avatar.indexOf("https://") !== -1 ? ( ; route: any }) => { const darkMode = useDarkMode() @@ -621,8 +621,7 @@ const ChatScreen = memo(({ navigation, route }: { navigation: NavigationContaine conversationParticipantsFilteredWithoutMe[0].avatar.indexOf("https://") !== -1 ? ( { return ( diff --git a/src/screens/ChatsScreen/Embeds/TwitterEmbed.tsx b/src/screens/ChatsScreen/Embeds/TwitterEmbed.tsx index 60f53732..d5e0b3e9 100644 --- a/src/screens/ChatsScreen/Embeds/TwitterEmbed.tsx +++ b/src/screens/ChatsScreen/Embeds/TwitterEmbed.tsx @@ -1,7 +1,6 @@ import { memo } from "react" import { getColor } from "../../../style" -import { Text, Linking, Pressable } from "react-native" -import Image from "react-native-fast-image" +import { Text, Linking, Pressable, Image } from "react-native" const TwitterEmbed = memo(({ darkMode, link }: { darkMode: boolean; link: string }) => { return ( diff --git a/src/screens/ChatsScreen/Input.tsx b/src/screens/ChatsScreen/Input.tsx index cf75281a..764d3a66 100644 --- a/src/screens/ChatsScreen/Input.tsx +++ b/src/screens/ChatsScreen/Input.tsx @@ -8,7 +8,6 @@ import { TextInputSelectionChangeEventData, Text, ScrollView, - Image, Keyboard, Platform } from "react-native" @@ -45,6 +44,7 @@ import mimeTypes from "mime-types" import { getLastModified } from "../../lib/services/cameraUpload" import FastImage from "react-native-fast-image" import useDimensions from "../../lib/hooks/useDimensions" +import Image from "react-native-fast-image" const Input = memo( ({ @@ -734,7 +734,8 @@ const Input = memo( > { storage.set("lang", "pt")} - borderBottomRadius={10} + withBottomBorder={true} + /> + storage.set("lang", "hu")} + withBottomBorder={true} /> = items.length ? 250 : 12, + marginBottom: index + 1 >= items.length ? 250 : Platform.OS === "ios" ? 15 : 3, paddingLeft: 25, paddingRight: 25 }} @@ -189,9 +189,6 @@ const Item = memo( multiline={true} scrollEnabled={false} autoFocus={false} - //autoCapitalize="none" - //autoComplete="off" - //autoCorrect={false} editable={!readOnly && editorEnabled} style={{ color: getColor(darkMode, "textPrimary"), @@ -199,7 +196,8 @@ const Item = memo( fontSize: 16, paddingRight: 50, alignSelf: "flex-start", - width: "100%" + width: "100%", + marginTop: Platform.OS === "ios" ? 1 : -9 }} onChangeText={text => { if (readOnly) { @@ -208,7 +206,7 @@ const Item = memo( setItems(prev => prev.map(prevItem => - prevItem.id === item.id ? { ...prevItem, text: text.split("\n").join("").split("\r").join("") } : prevItem + prevItem.id === item.id ? { ...prevItem, text: text.replace(/\r|\n/g, "").trim() } : prevItem ) ) }} @@ -218,6 +216,9 @@ const Item = memo( } if (e.nativeEvent.key === "Backspace" && item.text.length <= 0 && items.length - 1 > 0) { + e.preventDefault() + e.stopPropagation() + const indexToRemove = items.findIndex(i => i.id === item.id) if (indexToRemove === -1 || !items[indexToRemove - 1]) { @@ -234,17 +235,15 @@ const Item = memo( return copied }) - setTimeout(() => setIdToFocus(newId), 250) + if (newId.length > 0) { + setIdToFocus(newId) + } + + return } }} - blurOnSubmit={true} - returnKeyType="next" onSubmitEditing={e => { - if (readOnly) { - return - } - - if (item.text.length > 0) { + if (item.text.length > 0 && itemIndex !== -1) { e.preventDefault() e.stopPropagation() @@ -262,9 +261,11 @@ const Item = memo( return copied }) - setTimeout(() => setIdToFocus(newId), 250) + setIdToFocus(newId) } }} + blurOnSubmit={true} + returnKeyType="next" onFocus={() => eventListener.emit("scrollToChecklistIndex", index)} hitSlop={{ top: 15, @@ -346,7 +347,7 @@ const Checklist = memo( const index = items.findIndex(item => item.id === id) - if (index !== 1) { + if (index !== 1 && index !== -1) { eventListener.emit("scrollToChecklistIndex", index) } } diff --git a/src/screens/SelectMediaScreen/SelectMediaScreen.tsx b/src/screens/SelectMediaScreen/SelectMediaScreen.tsx index 5f10656c..6dad8399 100644 --- a/src/screens/SelectMediaScreen/SelectMediaScreen.tsx +++ b/src/screens/SelectMediaScreen/SelectMediaScreen.tsx @@ -29,9 +29,9 @@ import { getAssetURI } from "../../lib/services/cameraUpload" import * as fs from "../../lib/fs" import { FlashList } from "@shopify/flash-list" import storage, { sharedStorage } from "../../lib/storage/storage" -import Image from "react-native-fast-image" +import { ActivityIndicator, Image } from "react-native" -const videoThumbnailSemaphore = new Semaphore(8) +const videoThumbnailSemaphore = new Semaphore(10) const ALBUM_ROW_HEIGHT = 70 const FETCH_ASSETS_LIMIT = 256 @@ -228,8 +228,7 @@ export const AssetItem = memo( ) : ( 0 ? ( (false) const canPaginate = useRef(true) const [containerWidth, setContainerWidth] = useState(dimensions.width - insets.left - insets.right) + const [loading, setLoading] = useState(true) const [selectedAssets, photoCount, videoCount] = useMemo(() => { const selectedAssets = assets.filter(asset => asset.selected) @@ -487,7 +486,9 @@ const SelectMediaScreen = memo(({ route, navigation }: SelectMediaScreenProps) = [containerWidth] ) - useEffect(() => { + const fetchItems = useCallback(() => { + setLoading(true) + if (typeof params !== "undefined" && isFocused) { if (typeof params.album == "undefined") { fetchAlbums() @@ -499,6 +500,9 @@ const SelectMediaScreen = memo(({ route, navigation }: SelectMediaScreenProps) = showToast({ message: err.toString() }) }) + .finally(() => { + setLoading(false) + }) } else { fetchAssets(params.album, FETCH_ASSETS_LIMIT, currentAssetsAfter.current) .then(fetched => { @@ -517,8 +521,15 @@ const SelectMediaScreen = memo(({ route, navigation }: SelectMediaScreenProps) = showToast({ message: err.toString() }) }) + .finally(() => { + setLoading(false) + }) } } + }, [params]) + + useEffect(() => { + fetchItems() return () => { if (typeof params.album == "undefined") { @@ -809,27 +820,47 @@ const SelectMediaScreen = memo(({ route, navigation }: SelectMediaScreenProps) = } }} numColumns={4} + ListEmptyComponent={ + loading ? ( + + + + ) : null + } ListFooterComponent={ - - - {photoCount} {i18n(lang, "photos")}, {videoCount} {i18n(lang, "videos")} - - + + {photoCount} {i18n(lang, "photos")}, {videoCount} {i18n(lang, "videos")} + + + ) } /> diff --git a/src/screens/SettingsAdvancedScreen/SettingsAdvancedScreen.tsx b/src/screens/SettingsAdvancedScreen/SettingsAdvancedScreen.tsx index 72311ce9..69a90cb4 100644 --- a/src/screens/SettingsAdvancedScreen/SettingsAdvancedScreen.tsx +++ b/src/screens/SettingsAdvancedScreen/SettingsAdvancedScreen.tsx @@ -223,7 +223,7 @@ export const SettingsAdvancedScreen = memo(({ navigation }: SettingsAdvancedScre onPress: async () => { useStore.setState({ fullscreenLoadingModalVisible: true }) - await clearCacheDirectories(300000).catch(console.error) + await clearCacheDirectories(60000).catch(console.error) showToast({ message: i18n(lang, "clearCachesDirectoryCleared") diff --git a/src/screens/SetupScreen/SetupScreen.tsx b/src/screens/SetupScreen/SetupScreen.tsx index fb90b1bb..1bc1489e 100644 --- a/src/screens/SetupScreen/SetupScreen.tsx +++ b/src/screens/SetupScreen/SetupScreen.tsx @@ -1,8 +1,7 @@ import React, { memo } from "react" -import { View } from "react-native" +import { View, Image } from "react-native" import useDarkMode from "../../lib/hooks/useDarkMode" import { getColor } from "../../style" -import Image from "react-native-fast-image" export const SetupScreen = memo(() => { const darkMode = useDarkMode()