react-native-update 10.59.2 → 10.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README-CN.md +13 -7
- package/README.md +15 -6
- package/android/build.gradle +25 -33
- package/android/jni/Android.mk +18 -24
- package/android/jni/Application.mk +3 -1
- package/android/lib/arm64-v8a/librnpushy.so +0 -0
- package/android/lib/armeabi-v7a/librnpushy.so +0 -0
- package/android/lib/x86/librnpushy.so +0 -0
- package/android/lib/x86_64/librnpushy.so +0 -0
- package/android/proguard.pro +9 -7
- package/android/src/main/java/cn/reactnative/modules/update/ApkInstaller.java +3 -8
- package/android/src/main/java/cn/reactnative/modules/update/ArchiveLimits.java +24 -6
- package/android/src/main/java/cn/reactnative/modules/update/BundlePreparationResult.java +2 -0
- package/android/src/main/java/cn/reactnative/modules/update/BundledResourceCopier.java +50 -51
- package/android/src/main/java/cn/reactnative/modules/update/CleanupKeepNames.java +12 -13
- package/android/src/main/java/cn/reactnative/modules/update/CopyGroupResult.java +3 -0
- package/android/src/main/java/cn/reactnative/modules/update/CrashHold.java +22 -30
- package/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java +284 -452
- package/android/src/main/java/cn/reactnative/modules/update/DownloadTaskParams.java +8 -4
- package/android/src/main/java/cn/reactnative/modules/update/ErrorCodes.java +32 -3
- package/android/src/main/java/cn/reactnative/modules/update/FileOperationException.java +1 -1
- package/android/src/main/java/cn/reactnative/modules/update/FlowBridge.java +39 -8
- package/android/src/main/java/cn/reactnative/modules/update/HttpClients.java +63 -0
- package/android/src/main/java/cn/reactnative/modules/update/HttpUtils.java +0 -45
- package/android/src/main/java/cn/reactnative/modules/update/InstallRecord.java +68 -116
- package/android/src/main/java/cn/reactnative/modules/update/NativeCore.java +10 -2
- package/android/src/main/java/cn/reactnative/modules/update/PatchFailedException.java +1 -1
- package/android/src/main/java/cn/reactnative/modules/update/PushyRuntime.java +53 -62
- package/android/src/main/java/cn/reactnative/modules/update/ReactReloadManager.java +9 -24
- package/android/src/main/java/cn/reactnative/modules/update/ResumePlan.java +31 -0
- package/android/src/main/java/cn/reactnative/modules/update/SafeZipFile.java +42 -80
- package/android/src/main/java/cn/reactnative/modules/update/StateSerialRunner.java +22 -39
- package/android/src/main/java/cn/reactnative/modules/update/SyncCoordinator.java +474 -500
- package/android/src/main/java/cn/reactnative/modules/update/Texts.java +15 -1
- package/android/src/main/java/cn/reactnative/modules/update/Threads.java +44 -0
- package/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java +265 -188
- package/android/src/main/java/cn/reactnative/modules/update/UpdateEventEmitter.java +1 -1
- package/android/src/main/java/cn/reactnative/modules/update/UpdateFileUtils.java +75 -17
- package/android/src/main/java/cn/reactnative/modules/update/{UpdateModuleImpl.java → UpdateModule.java} +114 -96
- package/android/src/main/java/cn/reactnative/modules/update/UpdatePackage.java +16 -19
- package/android/src/main/java/cn/reactnative/modules/update/VersionScopedKeys.java +64 -0
- package/android/src/oldarch/cn/reactnative/modules/update/NativePushySpec.java +71 -0
- package/cpp/android_jni/archive_limits_jni.cpp +83 -0
- package/cpp/android_jni/install_record_jni.cpp +89 -0
- package/cpp/android_jni/jni_log.h +30 -0
- package/cpp/android_jni/jni_natives.h +46 -0
- package/cpp/android_jni/jni_registration.cpp +146 -0
- package/cpp/android_jni/jni_util.h +160 -0
- package/cpp/android_jni/resume_plan_jni.cpp +58 -0
- package/cpp/android_jni/update_core_android.cpp +448 -0
- package/cpp/android_jni/update_flow_jni.cpp +150 -0
- package/{android/jni → cpp/hpatch}/hpatch.c +5 -5
- package/{android/jni → cpp/hpatch}/hpatch.h +4 -1
- package/cpp/patch_core/archive_limits.cpp +194 -0
- package/cpp/patch_core/archive_limits.h +101 -10
- package/cpp/patch_core/archive_patch_core.cpp +98 -15
- package/cpp/patch_core/archive_patch_core.h +51 -0
- package/cpp/patch_core/digest.h +5 -4
- package/cpp/patch_core/error_codes.h +15 -11
- package/cpp/patch_core/install_record.cpp +430 -0
- package/cpp/patch_core/install_record.h +165 -9
- package/cpp/patch_core/native_texts.h +102 -0
- package/cpp/patch_core/patch_core.cpp +62 -16
- package/cpp/patch_core/patch_core.h +27 -7
- package/cpp/patch_core/patch_manifest.cpp +201 -0
- package/cpp/patch_core/patch_manifest.h +74 -0
- package/cpp/patch_core/resume_plan.cpp +226 -0
- package/cpp/patch_core/resume_plan.h +88 -0
- package/cpp/patch_core/state_ops.h +5 -3
- package/cpp/update_flow_core/flow_json.cpp +82 -8
- package/cpp/update_flow_core/flow_json.h +21 -0
- package/cpp/update_flow_core/native_config.cpp +436 -0
- package/cpp/update_flow_core/native_config.h +84 -0
- package/cpp/update_flow_core/native_round.cpp +321 -0
- package/cpp/update_flow_core/native_round.h +94 -0
- package/cpp/update_flow_core/round_engine.cpp +456 -0
- package/cpp/update_flow_core/round_engine.h +106 -0
- package/cpp/update_flow_core/update_flow_core.cpp +5 -14
- package/cpp/update_flow_core/update_flow_core.h +2 -2
- package/harmony/hvigor-plugin.ts +11 -19
- package/harmony/pushy/src/main/cpp/CMakeLists.txt +19 -26
- package/harmony/pushy/src/main/cpp/PushyPackage.h +2 -2
- package/harmony/pushy/src/main/cpp/PushyTurboModule.cpp +57 -94
- package/harmony/pushy/src/main/cpp/pushy.cpp +817 -518
- package/harmony/pushy/src/main/ets/ArchiveLimits.ts +55 -75
- package/harmony/pushy/src/main/ets/DownloadTask.ts +279 -539
- package/harmony/pushy/src/main/ets/DownloadTaskParams.ts +6 -6
- package/harmony/pushy/src/main/ets/ErrorCodes.ts +3 -15
- package/harmony/pushy/src/main/ets/EventHub.ts +1 -1
- package/harmony/pushy/src/main/ets/InstallRecord.ts +54 -151
- package/harmony/pushy/src/main/ets/Logger.ts +20 -34
- package/harmony/pushy/src/main/ets/NativePatchCore.ts +150 -41
- package/harmony/pushy/src/main/ets/PushyConfiguration.ts +8 -85
- package/harmony/pushy/src/main/ets/PushyFileJSBundleProvider.ets +8 -3
- package/harmony/pushy/src/main/ets/PushyTurboModule.ts +11 -25
- package/harmony/pushy/src/main/ets/SaveFile.ts +99 -18
- package/harmony/pushy/src/main/ets/SyncCoordinator.ts +291 -543
- package/harmony/pushy/src/main/ets/Texts.ts +8 -7
- package/harmony/pushy/src/main/ets/UpdateContext.ts +245 -152
- package/harmony/pushy.har +0 -0
- package/ios/RCTPushy/RCTPushy+Launch.mm +190 -0
- package/ios/RCTPushy/RCTPushy.h +12 -0
- package/ios/RCTPushy/RCTPushy.mm +135 -2666
- package/ios/RCTPushy/RCTPushyCommon.h +28 -0
- package/ios/RCTPushy/RCTPushyConfiguration.h +0 -8
- package/ios/RCTPushy/RCTPushyConfiguration.mm +40 -123
- package/ios/RCTPushy/RCTPushyDownloader.mm +152 -198
- package/ios/RCTPushy/RCTPushyInstallRecord.mm +101 -0
- package/ios/RCTPushy/RCTPushyInstaller.mm +732 -0
- package/ios/RCTPushy/RCTPushyInternal.h +185 -0
- package/ios/RCTPushy/RCTPushyOrchestrator.mm +969 -0
- package/ios/RCTPushy/RCTPushyState.mm +382 -0
- package/package.json +46 -25
- package/react-native-update.podspec +73 -82
- package/src/client.ts +126 -1633
- package/src/clientActivation.ts +324 -0
- package/src/clientCheck.ts +405 -0
- package/src/clientDownload.ts +448 -0
- package/src/clientNativeConfig.ts +171 -0
- package/src/clientReporter.ts +398 -0
- package/src/clientState.ts +51 -0
- package/src/context.ts +1 -1
- package/src/core.ts +39 -10
- package/src/endpoint.ts +22 -8
- package/src/error.ts +18 -35
- package/src/i18n.ts +18 -83
- package/src/locales/en.ts +1 -5
- package/src/locales/zh.ts +1 -5
- package/src/provider.tsx +86 -67
- package/src/telemetry.ts +0 -13
- package/src/type.ts +0 -15
- package/src/updateFlowCore.ts +116 -10
- package/src/utils.ts +49 -42
- package/android/jni/HDiffPatch/.travis.yml +0 -33
- package/android/jni/HDiffPatch/CHANGELOG.md +0 -153
- package/android/jni/HDiffPatch/Makefile +0 -157
- package/android/jni/HDiffPatch/_atosize.h +0 -83
- package/android/jni/HDiffPatch/_clock_for_demo.h +0 -47
- package/android/jni/HDiffPatch/_dir_ignore.h +0 -191
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/Android.mk +0 -37
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/Application.mk +0 -7
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/build_libs.bat +0 -1
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/build_libs.sh +0 -1
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch.c +0 -18
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch.h +0 -20
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch_jni.c +0 -28
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/java/com/github/sisong/HPatch.java +0 -8
- package/android/jni/HDiffPatch/builds/codeblocks/HDiffPatch.workspace +0 -8
- package/android/jni/HDiffPatch/builds/codeblocks/HDiffZ.cbp +0 -219
- package/android/jni/HDiffPatch/builds/codeblocks/HPatchZ.cbp +0 -156
- package/android/jni/HDiffPatch/builds/codeblocks/unitTest.cbp +0 -65
- package/android/jni/HDiffPatch/builds/vc/HDiffPatch.sln +0 -105
- package/android/jni/HDiffPatch/builds/vc/HDiffZ.vcxproj +0 -237
- package/android/jni/HDiffPatch/builds/vc/HDiffZ.vcxproj.user +0 -3
- package/android/jni/HDiffPatch/builds/vc/HPatchZ.vcxproj +0 -318
- package/android/jni/HDiffPatch/builds/vc/HPatchZ.vcxproj.user +0 -3
- package/android/jni/HDiffPatch/builds/vc/unitTest.vcxproj +0 -182
- package/android/jni/HDiffPatch/builds/vc/unitTest.vcxproj.user +0 -3
- package/android/jni/HDiffPatch/builds/xcode/HDiffPatch.xcworkspace/contents.xcworkspacedata +0 -30
- package/android/jni/HDiffPatch/builds/xcode/HDiffPatch.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/android/jni/HDiffPatch/builds/xcode/bestParams.xcodeproj/project.pbxproj +0 -408
- package/android/jni/HDiffPatch/builds/xcode/bestParams.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.pbxproj +0 -573
- package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/android/jni/HDiffPatch/builds/xcode/hpatchz.xcodeproj/project.pbxproj +0 -396
- package/android/jni/HDiffPatch/builds/xcode/hpatchz.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/android/jni/HDiffPatch/builds/xcode/lz4.xcodeproj/project.pbxproj +0 -268
- package/android/jni/HDiffPatch/builds/xcode/lz4.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/android/jni/HDiffPatch/builds/xcode/lzma.xcodeproj/project.pbxproj +0 -361
- package/android/jni/HDiffPatch/builds/xcode/lzma.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.pbxproj +0 -301
- package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/android/jni/HDiffPatch/builds/xcode/unitTest.xcodeproj/project.pbxproj +0 -411
- package/android/jni/HDiffPatch/builds/xcode/unitTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/android/jni/HDiffPatch/builds/xcode/zstd.xcodeproj/project.pbxproj +0 -504
- package/android/jni/HDiffPatch/builds/xcode/zstd.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/android/jni/HDiffPatch/checksum_plugin_demo.h +0 -344
- package/android/jni/HDiffPatch/compress_parallel.cpp +0 -166
- package/android/jni/HDiffPatch/compress_parallel.h +0 -59
- package/android/jni/HDiffPatch/compress_plugin_demo.h +0 -1152
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff.cpp +0 -797
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff.h +0 -65
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff_tools.cpp +0 -200
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff_tools.h +0 -178
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_manifest.cpp +0 -357
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_manifest.h +0 -87
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/file_for_dirDiff.h +0 -151
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch.c +0 -770
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch.h +0 -236
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_private.h +0 -47
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_tools.c +0 -112
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_tools.h +0 -53
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_dir_output.c +0 -331
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_dir_output.h +0 -144
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_stream.c +0 -176
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_stream.h +0 -84
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/ref_stream.c +0 -146
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/ref_stream.h +0 -61
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/res_handle_limit.c +0 -152
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/res_handle_limit.h +0 -76
- package/android/jni/HDiffPatch/hdiffz.cpp +0 -1570
- package/android/jni/HDiffPatch/hpatch_dir_listener.h +0 -290
- package/android/jni/HDiffPatch/hpatchz.c +0 -1221
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff.cpp +0 -1025
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff.h +0 -116
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff_types.h +0 -72
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/bytes_rle.cpp +0 -213
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/bytes_rle.h +0 -63
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/compress_detect.cpp +0 -170
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/compress_detect.h +0 -86
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/config.h +0 -89
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.c +0 -13
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.c.inc.h +0 -398
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.h +0 -194
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort64.c +0 -13
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort64.h +0 -204
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort_private.h +0 -207
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/sssort.c.inc.h +0 -815
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/trsort.c.inc.h +0 -586
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/utils.c.inc.h +0 -381
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/adler_roll.c +0 -352
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/adler_roll.h +0 -137
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/bloom_filter.h +0 -137
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/covers.h +0 -70
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/digest_matcher.cpp +0 -628
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/digest_matcher.h +0 -87
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/stream_serialize.cpp +0 -363
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/stream_serialize.h +0 -139
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/mem_buf.h +0 -68
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/pack_uint.h +0 -115
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/suffix_string.cpp +0 -342
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/suffix_string.h +0 -94
- package/android/jni/HDiffPatch/libHDiffPatch/HPatch/checksum_plugin.h +0 -52
- package/android/jni/HDiffPatch/libParallel/parallel_channel.cpp +0 -174
- package/android/jni/HDiffPatch/libParallel/parallel_channel.h +0 -73
- package/android/jni/HDiffPatch/libParallel/parallel_import.cpp +0 -367
- package/android/jni/HDiffPatch/libParallel/parallel_import.h +0 -92
- package/android/jni/lzma/Asm/arm/7zCrcOpt.asm +0 -100
- package/android/jni/lzma/Asm/x86/7zAsm.asm +0 -147
- package/android/jni/lzma/Asm/x86/7zCrcOpt.asm +0 -147
- package/android/jni/lzma/Asm/x86/AesOpt.asm +0 -237
- package/android/jni/lzma/Asm/x86/LzmaDecOpt.asm +0 -1258
- package/android/jni/lzma/Asm/x86/XzCrc64Opt.asm +0 -205
- package/android/jni/lzma/C/7z.h +0 -202
- package/android/jni/lzma/C/7zAlloc.c +0 -80
- package/android/jni/lzma/C/7zAlloc.h +0 -19
- package/android/jni/lzma/C/7zArcIn.c +0 -1771
- package/android/jni/lzma/C/7zBuf.c +0 -36
- package/android/jni/lzma/C/7zBuf.h +0 -35
- package/android/jni/lzma/C/7zBuf2.c +0 -52
- package/android/jni/lzma/C/7zCrc.c +0 -128
- package/android/jni/lzma/C/7zCrc.h +0 -25
- package/android/jni/lzma/C/7zCrcOpt.c +0 -115
- package/android/jni/lzma/C/7zDec.c +0 -591
- package/android/jni/lzma/C/7zFile.c +0 -286
- package/android/jni/lzma/C/7zFile.h +0 -83
- package/android/jni/lzma/C/7zStream.c +0 -176
- package/android/jni/lzma/C/7zVersion.h +0 -27
- package/android/jni/lzma/C/7zVersion.rc +0 -55
- package/android/jni/lzma/C/Aes.c +0 -306
- package/android/jni/lzma/C/Aes.h +0 -38
- package/android/jni/lzma/C/AesOpt.c +0 -184
- package/android/jni/lzma/C/Alloc.c +0 -455
- package/android/jni/lzma/C/Alloc.h +0 -51
- package/android/jni/lzma/C/Bcj2.c +0 -257
- package/android/jni/lzma/C/Bcj2.h +0 -146
- package/android/jni/lzma/C/Bcj2Enc.c +0 -311
- package/android/jni/lzma/C/Bra.c +0 -230
- package/android/jni/lzma/C/Bra.h +0 -64
- package/android/jni/lzma/C/Bra86.c +0 -82
- package/android/jni/lzma/C/BraIA64.c +0 -53
- package/android/jni/lzma/C/CpuArch.c +0 -218
- package/android/jni/lzma/C/CpuArch.h +0 -336
- package/android/jni/lzma/C/Delta.c +0 -64
- package/android/jni/lzma/C/Delta.h +0 -19
- package/android/jni/lzma/C/DllSecur.c +0 -108
- package/android/jni/lzma/C/DllSecur.h +0 -20
- package/android/jni/lzma/C/LzFind.c +0 -1127
- package/android/jni/lzma/C/LzFind.h +0 -121
- package/android/jni/lzma/C/LzFindMt.c +0 -853
- package/android/jni/lzma/C/LzFindMt.h +0 -101
- package/android/jni/lzma/C/LzHash.h +0 -57
- package/android/jni/lzma/C/Lzma2DecMt.c +0 -1082
- package/android/jni/lzma/C/Lzma2DecMt.h +0 -79
- package/android/jni/lzma/C/Lzma2Enc.c +0 -803
- package/android/jni/lzma/C/Lzma2Enc.h +0 -55
- package/android/jni/lzma/C/Lzma86.h +0 -111
- package/android/jni/lzma/C/Lzma86Dec.c +0 -54
- package/android/jni/lzma/C/Lzma86Enc.c +0 -106
- package/android/jni/lzma/C/LzmaEnc.c +0 -2976
- package/android/jni/lzma/C/LzmaEnc.h +0 -76
- package/android/jni/lzma/C/LzmaLib.c +0 -40
- package/android/jni/lzma/C/LzmaLib.h +0 -131
- package/android/jni/lzma/C/MtCoder.c +0 -601
- package/android/jni/lzma/C/MtCoder.h +0 -141
- package/android/jni/lzma/C/MtDec.c +0 -1138
- package/android/jni/lzma/C/MtDec.h +0 -201
- package/android/jni/lzma/C/Ppmd.h +0 -85
- package/android/jni/lzma/C/Ppmd7.c +0 -712
- package/android/jni/lzma/C/Ppmd7.h +0 -142
- package/android/jni/lzma/C/Ppmd7Dec.c +0 -191
- package/android/jni/lzma/C/Ppmd7Enc.c +0 -187
- package/android/jni/lzma/C/RotateDefs.h +0 -30
- package/android/jni/lzma/C/Sha256.c +0 -248
- package/android/jni/lzma/C/Sha256.h +0 -26
- package/android/jni/lzma/C/Sort.c +0 -141
- package/android/jni/lzma/C/Sort.h +0 -18
- package/android/jni/lzma/C/Threads.c +0 -95
- package/android/jni/lzma/C/Threads.h +0 -70
- package/android/jni/lzma/C/ThreadsP.c +0 -396
- package/android/jni/lzma/C/ThreadsP.h +0 -31
- package/android/jni/lzma/C/Util/7z/7z.dsp +0 -241
- package/android/jni/lzma/C/Util/7z/7z.dsw +0 -29
- package/android/jni/lzma/C/Util/7z/7zMain.c +0 -686
- package/android/jni/lzma/C/Util/7z/Precomp.c +0 -4
- package/android/jni/lzma/C/Util/7z/Precomp.h +0 -10
- package/android/jni/lzma/C/Util/7z/makefile +0 -40
- package/android/jni/lzma/C/Util/7z/makefile.gcc +0 -75
- package/android/jni/lzma/C/Util/Lzma/LzmaUtil.c +0 -258
- package/android/jni/lzma/C/Util/Lzma/LzmaUtil.dsp +0 -168
- package/android/jni/lzma/C/Util/Lzma/LzmaUtil.dsw +0 -29
- package/android/jni/lzma/C/Util/Lzma/makefile +0 -28
- package/android/jni/lzma/C/Util/Lzma/makefile.gcc +0 -44
- package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.def +0 -4
- package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.dsp +0 -178
- package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.dsw +0 -29
- package/android/jni/lzma/C/Util/LzmaLib/LzmaLibExports.c +0 -14
- package/android/jni/lzma/C/Util/LzmaLib/makefile +0 -34
- package/android/jni/lzma/C/Util/LzmaLib/resource.rc +0 -3
- package/android/jni/lzma/C/Util/SfxSetup/Precomp.c +0 -4
- package/android/jni/lzma/C/Util/SfxSetup/Precomp.h +0 -10
- package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.c +0 -640
- package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.dsp +0 -231
- package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.dsw +0 -29
- package/android/jni/lzma/C/Util/SfxSetup/makefile +0 -37
- package/android/jni/lzma/C/Util/SfxSetup/makefile_con +0 -38
- package/android/jni/lzma/C/Util/SfxSetup/resource.rc +0 -5
- package/android/jni/lzma/C/Util/SfxSetup/setup.ico +0 -0
- package/android/jni/lzma/C/Xz.c +0 -90
- package/android/jni/lzma/C/Xz.h +0 -460
- package/android/jni/lzma/C/XzCrc64.c +0 -86
- package/android/jni/lzma/C/XzCrc64.h +0 -26
- package/android/jni/lzma/C/XzCrc64Opt.c +0 -69
- package/android/jni/lzma/C/XzDec.c +0 -2766
- package/android/jni/lzma/C/XzEnc.c +0 -1329
- package/android/jni/lzma/C/XzEnc.h +0 -60
- package/android/jni/lzma/C/XzIn.c +0 -319
- package/android/jni/lzma/CPP/7zip/7zip.mak +0 -240
- package/android/jni/lzma/CPP/7zip/Aes.mak +0 -7
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zCompressionMode.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zCompressionMode.h +0 -76
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zDecode.cpp +0 -569
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zDecode.h +0 -70
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zEncode.cpp +0 -678
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zEncode.h +0 -92
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zExtract.cpp +0 -423
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zFolderInStream.cpp +0 -139
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zFolderInStream.h +0 -61
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandler.cpp +0 -763
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandler.h +0 -181
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandlerOut.cpp +0 -942
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zHeader.cpp +0 -19
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zHeader.h +0 -148
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zIn.cpp +0 -1666
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zIn.h +0 -445
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zItem.h +0 -202
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zOut.cpp +0 -901
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zOut.h +0 -335
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zProperties.cpp +0 -174
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zProperties.h +0 -22
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zRegister.cpp +0 -21
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zSpecStream.cpp +0 -22
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zSpecStream.h +0 -35
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zUpdate.cpp +0 -2500
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zUpdate.h +0 -139
- package/android/jni/lzma/CPP/7zip/Archive/7z/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Archive/7z/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Archive/Archive.def +0 -12
- package/android/jni/lzma/CPP/7zip/Archive/Archive2.def +0 -19
- package/android/jni/lzma/CPP/7zip/Archive/ArchiveExports.cpp +0 -151
- package/android/jni/lzma/CPP/7zip/Archive/Common/CoderMixer2.cpp +0 -1125
- package/android/jni/lzma/CPP/7zip/Archive/Common/CoderMixer2.h +0 -447
- package/android/jni/lzma/CPP/7zip/Archive/Common/DummyOutStream.cpp +0 -17
- package/android/jni/lzma/CPP/7zip/Archive/Common/DummyOutStream.h +0 -25
- package/android/jni/lzma/CPP/7zip/Archive/Common/HandlerOut.cpp +0 -232
- package/android/jni/lzma/CPP/7zip/Archive/Common/HandlerOut.h +0 -110
- package/android/jni/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.cpp +0 -46
- package/android/jni/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.h +0 -67
- package/android/jni/lzma/CPP/7zip/Archive/Common/ItemNameUtils.cpp +0 -88
- package/android/jni/lzma/CPP/7zip/Archive/Common/ItemNameUtils.h +0 -28
- package/android/jni/lzma/CPP/7zip/Archive/Common/MultiStream.cpp +0 -191
- package/android/jni/lzma/CPP/7zip/Archive/Common/MultiStream.h +0 -89
- package/android/jni/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp +0 -18
- package/android/jni/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.h +0 -37
- package/android/jni/lzma/CPP/7zip/Archive/Common/ParseProperties.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Archive/Common/ParseProperties.h +0 -6
- package/android/jni/lzma/CPP/7zip/Archive/Common/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Archive/DllExports2.cpp +0 -122
- package/android/jni/lzma/CPP/7zip/Archive/IArchive.h +0 -608
- package/android/jni/lzma/CPP/7zip/Archive/Icons/7z.ico +0 -0
- package/android/jni/lzma/CPP/7zip/Archive/LzmaHandler.cpp +0 -629
- package/android/jni/lzma/CPP/7zip/Archive/SplitHandler.cpp +0 -359
- package/android/jni/lzma/CPP/7zip/Archive/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Archive/XzHandler.cpp +0 -1308
- package/android/jni/lzma/CPP/7zip/Archive/XzHandler.h +0 -11
- package/android/jni/lzma/CPP/7zip/Asm.mak +0 -9
- package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsp +0 -1910
- package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsw +0 -29
- package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/makefile +0 -154
- package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/resource.rc +0 -7
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/makefile +0 -96
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/resource.rc +0 -5
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/makefile +0 -116
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/resource.rc +0 -5
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaAlone.cpp +0 -799
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsp +0 -477
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsw +0 -29
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/makefile +0 -59
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/makefile.gcc +0 -195
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/resource.rc +0 -3
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaSpec/LzmaSpec.cpp +0 -715
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/7z.ico +0 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsp +0 -912
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsw +0 -29
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SfxCon.cpp +0 -482
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/makefile +0 -134
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/resource.rc +0 -5
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.cpp +0 -246
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.h +0 -86
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.cpp +0 -137
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.h +0 -11
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsp +0 -803
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsw +0 -29
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp +0 -364
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.h +0 -13
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/makefile +0 -117
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/resource.h +0 -6
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/resource.rc +0 -16
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/setup.ico +0 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/7z.ico +0 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsp +0 -988
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsw +0 -29
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SfxWin.cpp +0 -241
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.h +0 -14
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/makefile +0 -153
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/resource.h +0 -1
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/resource.rc +0 -50
- package/android/jni/lzma/CPP/7zip/Common/CWrappers.cpp +0 -250
- package/android/jni/lzma/CPP/7zip/Common/CWrappers.h +0 -120
- package/android/jni/lzma/CPP/7zip/Common/CreateCoder.cpp +0 -536
- package/android/jni/lzma/CPP/7zip/Common/CreateCoder.h +0 -192
- package/android/jni/lzma/CPP/7zip/Common/FilePathAutoRename.cpp +0 -46
- package/android/jni/lzma/CPP/7zip/Common/FilePathAutoRename.h +0 -10
- package/android/jni/lzma/CPP/7zip/Common/FileStreams.cpp +0 -475
- package/android/jni/lzma/CPP/7zip/Common/FileStreams.h +0 -166
- package/android/jni/lzma/CPP/7zip/Common/FilterCoder.cpp +0 -435
- package/android/jni/lzma/CPP/7zip/Common/FilterCoder.h +0 -205
- package/android/jni/lzma/CPP/7zip/Common/InBuffer.cpp +0 -163
- package/android/jni/lzma/CPP/7zip/Common/InBuffer.h +0 -92
- package/android/jni/lzma/CPP/7zip/Common/InOutTempBuffer.cpp +0 -127
- package/android/jni/lzma/CPP/7zip/Common/InOutTempBuffer.h +0 -48
- package/android/jni/lzma/CPP/7zip/Common/LimitedStreams.cpp +0 -367
- package/android/jni/lzma/CPP/7zip/Common/LimitedStreams.h +0 -252
- package/android/jni/lzma/CPP/7zip/Common/LockedStream.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Common/LockedStream.h +0 -6
- package/android/jni/lzma/CPP/7zip/Common/MethodId.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Common/MethodId.h +0 -10
- package/android/jni/lzma/CPP/7zip/Common/MethodProps.cpp +0 -509
- package/android/jni/lzma/CPP/7zip/Common/MethodProps.h +0 -264
- package/android/jni/lzma/CPP/7zip/Common/OffsetStream.cpp +0 -39
- package/android/jni/lzma/CPP/7zip/Common/OffsetStream.h +0 -26
- package/android/jni/lzma/CPP/7zip/Common/OutBuffer.cpp +0 -111
- package/android/jni/lzma/CPP/7zip/Common/OutBuffer.h +0 -66
- package/android/jni/lzma/CPP/7zip/Common/ProgressUtils.cpp +0 -51
- package/android/jni/lzma/CPP/7zip/Common/ProgressUtils.h +0 -35
- package/android/jni/lzma/CPP/7zip/Common/PropId.cpp +0 -108
- package/android/jni/lzma/CPP/7zip/Common/RegisterArc.h +0 -78
- package/android/jni/lzma/CPP/7zip/Common/RegisterCodec.h +0 -106
- package/android/jni/lzma/CPP/7zip/Common/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Common/StreamBinder.cpp +0 -156
- package/android/jni/lzma/CPP/7zip/Common/StreamBinder.h +0 -60
- package/android/jni/lzma/CPP/7zip/Common/StreamObjects.cpp +0 -285
- package/android/jni/lzma/CPP/7zip/Common/StreamObjects.h +0 -157
- package/android/jni/lzma/CPP/7zip/Common/StreamUtils.cpp +0 -56
- package/android/jni/lzma/CPP/7zip/Common/StreamUtils.h +0 -13
- package/android/jni/lzma/CPP/7zip/Common/UniqBlocks.cpp +0 -57
- package/android/jni/lzma/CPP/7zip/Common/UniqBlocks.h +0 -26
- package/android/jni/lzma/CPP/7zip/Common/VirtThread.cpp +0 -48
- package/android/jni/lzma/CPP/7zip/Common/VirtThread.h +0 -24
- package/android/jni/lzma/CPP/7zip/Compress/Bcj2Coder.cpp +0 -666
- package/android/jni/lzma/CPP/7zip/Compress/Bcj2Coder.h +0 -120
- package/android/jni/lzma/CPP/7zip/Compress/Bcj2Register.cpp +0 -24
- package/android/jni/lzma/CPP/7zip/Compress/BcjCoder.cpp +0 -24
- package/android/jni/lzma/CPP/7zip/Compress/BcjCoder.h +0 -31
- package/android/jni/lzma/CPP/7zip/Compress/BcjRegister.cpp +0 -17
- package/android/jni/lzma/CPP/7zip/Compress/BranchMisc.cpp +0 -23
- package/android/jni/lzma/CPP/7zip/Compress/BranchMisc.h +0 -35
- package/android/jni/lzma/CPP/7zip/Compress/BranchRegister.cpp +0 -41
- package/android/jni/lzma/CPP/7zip/Compress/ByteSwap.cpp +0 -92
- package/android/jni/lzma/CPP/7zip/Compress/CodecExports.cpp +0 -344
- package/android/jni/lzma/CPP/7zip/Compress/CopyCoder.cpp +0 -120
- package/android/jni/lzma/CPP/7zip/Compress/CopyCoder.h +0 -49
- package/android/jni/lzma/CPP/7zip/Compress/CopyRegister.cpp +0 -15
- package/android/jni/lzma/CPP/7zip/Compress/DeltaFilter.cpp +0 -128
- package/android/jni/lzma/CPP/7zip/Compress/Lzma2Decoder.cpp +0 -265
- package/android/jni/lzma/CPP/7zip/Compress/Lzma2Decoder.h +0 -96
- package/android/jni/lzma/CPP/7zip/Compress/Lzma2Encoder.cpp +0 -122
- package/android/jni/lzma/CPP/7zip/Compress/Lzma2Encoder.h +0 -42
- package/android/jni/lzma/CPP/7zip/Compress/Lzma2Register.cpp +0 -22
- package/android/jni/lzma/CPP/7zip/Compress/LzmaDecoder.cpp +0 -343
- package/android/jni/lzma/CPP/7zip/Compress/LzmaDecoder.h +0 -113
- package/android/jni/lzma/CPP/7zip/Compress/LzmaEncoder.cpp +0 -182
- package/android/jni/lzma/CPP/7zip/Compress/LzmaEncoder.h +0 -46
- package/android/jni/lzma/CPP/7zip/Compress/LzmaRegister.cpp +0 -22
- package/android/jni/lzma/CPP/7zip/Compress/PpmdDecoder.cpp +0 -170
- package/android/jni/lzma/CPP/7zip/Compress/PpmdDecoder.h +0 -86
- package/android/jni/lzma/CPP/7zip/Compress/PpmdEncoder.cpp +0 -152
- package/android/jni/lzma/CPP/7zip/Compress/PpmdEncoder.h +0 -58
- package/android/jni/lzma/CPP/7zip/Compress/PpmdRegister.cpp +0 -22
- package/android/jni/lzma/CPP/7zip/Compress/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Compress/XzDecoder.cpp +0 -150
- package/android/jni/lzma/CPP/7zip/Compress/XzDecoder.h +0 -92
- package/android/jni/lzma/CPP/7zip/Compress/XzEncoder.cpp +0 -245
- package/android/jni/lzma/CPP/7zip/Compress/XzEncoder.h +0 -46
- package/android/jni/lzma/CPP/7zip/Crc.mak +0 -8
- package/android/jni/lzma/CPP/7zip/Crc64.mak +0 -8
- package/android/jni/lzma/CPP/7zip/Crypto/7zAes.cpp +0 -280
- package/android/jni/lzma/CPP/7zip/Crypto/7zAes.h +0 -118
- package/android/jni/lzma/CPP/7zip/Crypto/7zAesRegister.cpp +0 -17
- package/android/jni/lzma/CPP/7zip/Crypto/MyAes.cpp +0 -112
- package/android/jni/lzma/CPP/7zip/Crypto/MyAes.h +0 -57
- package/android/jni/lzma/CPP/7zip/Crypto/MyAesReg.cpp +0 -16
- package/android/jni/lzma/CPP/7zip/Crypto/RandGen.cpp +0 -233
- package/android/jni/lzma/CPP/7zip/Crypto/RandGen.h +0 -40
- package/android/jni/lzma/CPP/7zip/Crypto/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/GuiCommon.rc +0 -84
- package/android/jni/lzma/CPP/7zip/Guid.txt +0 -220
- package/android/jni/lzma/CPP/7zip/ICoder.h +0 -399
- package/android/jni/lzma/CPP/7zip/IDecl.h +0 -28
- package/android/jni/lzma/CPP/7zip/IPassword.h +0 -23
- package/android/jni/lzma/CPP/7zip/IProgress.h +0 -19
- package/android/jni/lzma/CPP/7zip/IStream.h +0 -127
- package/android/jni/lzma/CPP/7zip/LzmaDec.mak +0 -5
- package/android/jni/lzma/CPP/7zip/MyVersion.h +0 -2
- package/android/jni/lzma/CPP/7zip/MyVersionInfo.rc +0 -2
- package/android/jni/lzma/CPP/7zip/PropID.h +0 -127
- package/android/jni/lzma/CPP/7zip/SubBuild.mak +0 -3
- package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.cpp +0 -993
- package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.dsp +0 -235
- package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.dsw +0 -29
- package/android/jni/lzma/CPP/7zip/UI/Client7z/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/UI/Client7z/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/UI/Client7z/makefile +0 -28
- package/android/jni/lzma/CPP/7zip/UI/Client7z/resource.rc +0 -3
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.cpp +0 -1295
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.h +0 -136
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp +0 -1715
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h +0 -403
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveName.cpp +0 -155
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveName.h +0 -10
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp +0 -161
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.h +0 -112
- package/android/jni/lzma/CPP/7zip/UI/Common/Bench.cpp +0 -3618
- package/android/jni/lzma/CPP/7zip/UI/Common/Bench.h +0 -77
- package/android/jni/lzma/CPP/7zip/UI/Common/DefaultName.cpp +0 -37
- package/android/jni/lzma/CPP/7zip/UI/Common/DefaultName.h +0 -11
- package/android/jni/lzma/CPP/7zip/UI/Common/DirItem.h +0 -190
- package/android/jni/lzma/CPP/7zip/UI/Common/EnumDirItems.cpp +0 -1096
- package/android/jni/lzma/CPP/7zip/UI/Common/EnumDirItems.h +0 -42
- package/android/jni/lzma/CPP/7zip/UI/Common/ExitCode.h +0 -27
- package/android/jni/lzma/CPP/7zip/UI/Common/Extract.cpp +0 -482
- package/android/jni/lzma/CPP/7zip/UI/Common/Extract.h +0 -94
- package/android/jni/lzma/CPP/7zip/UI/Common/ExtractMode.h +0 -34
- package/android/jni/lzma/CPP/7zip/UI/Common/ExtractingFilePath.cpp +0 -280
- package/android/jni/lzma/CPP/7zip/UI/Common/ExtractingFilePath.h +0 -31
- package/android/jni/lzma/CPP/7zip/UI/Common/HashCalc.cpp +0 -347
- package/android/jni/lzma/CPP/7zip/UI/Common/HashCalc.h +0 -110
- package/android/jni/lzma/CPP/7zip/UI/Common/IFileExtractCallback.h +0 -114
- package/android/jni/lzma/CPP/7zip/UI/Common/LoadCodecs.cpp +0 -1074
- package/android/jni/lzma/CPP/7zip/UI/Common/LoadCodecs.h +0 -424
- package/android/jni/lzma/CPP/7zip/UI/Common/OpenArchive.cpp +0 -3553
- package/android/jni/lzma/CPP/7zip/UI/Common/OpenArchive.h +0 -436
- package/android/jni/lzma/CPP/7zip/UI/Common/PropIDUtils.cpp +0 -668
- package/android/jni/lzma/CPP/7zip/UI/Common/PropIDUtils.h +0 -18
- package/android/jni/lzma/CPP/7zip/UI/Common/Property.h +0 -14
- package/android/jni/lzma/CPP/7zip/UI/Common/SetProperties.cpp +0 -80
- package/android/jni/lzma/CPP/7zip/UI/Common/SetProperties.h +0 -10
- package/android/jni/lzma/CPP/7zip/UI/Common/SortUtils.cpp +0 -25
- package/android/jni/lzma/CPP/7zip/UI/Common/SortUtils.h +0 -10
- package/android/jni/lzma/CPP/7zip/UI/Common/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/UI/Common/TempFiles.cpp +0 -19
- package/android/jni/lzma/CPP/7zip/UI/Common/TempFiles.h +0 -16
- package/android/jni/lzma/CPP/7zip/UI/Common/Update.cpp +0 -1704
- package/android/jni/lzma/CPP/7zip/UI/Common/Update.h +0 -200
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdateAction.cpp +0 -64
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdateAction.h +0 -66
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdateCallback.cpp +0 -771
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdateCallback.h +0 -162
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdatePair.cpp +0 -233
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdatePair.h +0 -27
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdateProduce.cpp +0 -70
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdateProduce.h +0 -55
- package/android/jni/lzma/CPP/7zip/UI/Common/WorkDir.cpp +0 -94
- package/android/jni/lzma/CPP/7zip/UI/Common/WorkDir.h +0 -26
- package/android/jni/lzma/CPP/7zip/UI/Common/ZipRegistry.h +0 -130
- package/android/jni/lzma/CPP/7zip/UI/Console/BenchCon.cpp +0 -41
- package/android/jni/lzma/CPP/7zip/UI/Console/BenchCon.h +0 -14
- package/android/jni/lzma/CPP/7zip/UI/Console/Console.mak +0 -43
- package/android/jni/lzma/CPP/7zip/UI/Console/Console.manifest +0 -13
- package/android/jni/lzma/CPP/7zip/UI/Console/ConsoleClose.cpp +0 -69
- package/android/jni/lzma/CPP/7zip/UI/Console/ConsoleClose.h +0 -33
- package/android/jni/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp +0 -825
- package/android/jni/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.h +0 -164
- package/android/jni/lzma/CPP/7zip/UI/Console/HashCon.cpp +0 -367
- package/android/jni/lzma/CPP/7zip/UI/Console/HashCon.h +0 -48
- package/android/jni/lzma/CPP/7zip/UI/Console/List.cpp +0 -1359
- package/android/jni/lzma/CPP/7zip/UI/Console/List.h +0 -27
- package/android/jni/lzma/CPP/7zip/UI/Console/Main.cpp +0 -1154
- package/android/jni/lzma/CPP/7zip/UI/Console/MainAr.cpp +0 -175
- package/android/jni/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.cpp +0 -115
- package/android/jni/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.h +0 -66
- package/android/jni/lzma/CPP/7zip/UI/Console/PercentPrinter.cpp +0 -183
- package/android/jni/lzma/CPP/7zip/UI/Console/PercentPrinter.h +0 -62
- package/android/jni/lzma/CPP/7zip/UI/Console/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/UI/Console/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp +0 -702
- package/android/jni/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.h +0 -124
- package/android/jni/lzma/CPP/7zip/UI/Console/UserInputUtils.cpp +0 -110
- package/android/jni/lzma/CPP/7zip/UI/Console/UserInputUtils.h +0 -27
- package/android/jni/lzma/CPP/7zip/UI/Console/makefile +0 -64
- package/android/jni/lzma/CPP/7zip/UI/Console/resource.rc +0 -7
- package/android/jni/lzma/CPP/7zip/UI/Explorer/MyMessages.cpp +0 -37
- package/android/jni/lzma/CPP/7zip/UI/Explorer/MyMessages.h +0 -16
- package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialog.cpp +0 -1025
- package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialog.h +0 -21
- package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialogRes.h +0 -9
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialog.cpp +0 -64
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialog.h +0 -28
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialogRes.h +0 -4
- package/android/jni/lzma/CPP/7zip/UI/FileManager/DialogSize.h +0 -16
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ExtractCallback.cpp +0 -1037
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ExtractCallback.h +0 -328
- package/android/jni/lzma/CPP/7zip/UI/FileManager/FormatUtils.cpp +0 -28
- package/android/jni/lzma/CPP/7zip/UI/FileManager/FormatUtils.h +0 -14
- package/android/jni/lzma/CPP/7zip/UI/FileManager/LangUtils.h +0 -40
- package/android/jni/lzma/CPP/7zip/UI/FileManager/MyWindowsNew.h +0 -76
- package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.cpp +0 -122
- package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.h +0 -69
- package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.rc +0 -91
- package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialogRes.h +0 -17
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.cpp +0 -58
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.h +0 -28
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.rc +0 -14
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialogRes.h +0 -5
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.cpp +0 -196
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.h +0 -170
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.rc +0 -12
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.cpp +0 -1337
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.h +0 -351
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.rc +0 -40
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2Res.h +0 -48
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2a.rc +0 -80
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialogRes.h +0 -3
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyName.cpp +0 -23
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyName.h +0 -10
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyNameRes.h +0 -95
- package/android/jni/lzma/CPP/7zip/UI/FileManager/SysIconUtils.cpp +0 -255
- package/android/jni/lzma/CPP/7zip/UI/FileManager/SysIconUtils.h +0 -62
- package/android/jni/lzma/CPP/7zip/UI/FileManager/resource.h +0 -177
- package/android/jni/lzma/CPP/7zip/UI/FileManager/resourceGui.h +0 -15
- package/android/jni/lzma/CPP/7zip/UI/GUI/Extract.rc +0 -59
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.cpp +0 -418
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.h +0 -113
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.rc +0 -98
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialogRes.h +0 -24
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractGUI.cpp +0 -280
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractGUI.h +0 -38
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractRes.h +0 -51
- package/android/jni/lzma/CPP/7zip/UI/GUI/HashGUI.h +0 -27
- package/android/jni/lzma/CPP/7zip/UI/GUI/resource2.h +0 -2
- package/android/jni/lzma/CPP/Build.mak +0 -156
- package/android/jni/lzma/CPP/Common/AutoPtr.h +0 -35
- package/android/jni/lzma/CPP/Common/CRC.cpp +0 -7
- package/android/jni/lzma/CPP/Common/C_FileIO.cpp +0 -92
- package/android/jni/lzma/CPP/Common/C_FileIO.h +0 -53
- package/android/jni/lzma/CPP/Common/ComTry.h +0 -21
- package/android/jni/lzma/CPP/Common/CommandLineParser.cpp +0 -197
- package/android/jni/lzma/CPP/Common/CommandLineParser.h +0 -63
- package/android/jni/lzma/CPP/Common/Common.h +0 -43
- package/android/jni/lzma/CPP/Common/CrcReg.cpp +0 -98
- package/android/jni/lzma/CPP/Common/Defs.h +0 -15
- package/android/jni/lzma/CPP/Common/DynamicBuffer.h +0 -64
- package/android/jni/lzma/CPP/Common/IntToString.cpp +0 -193
- package/android/jni/lzma/CPP/Common/IntToString.h +0 -28
- package/android/jni/lzma/CPP/Common/Lang.h +0 -23
- package/android/jni/lzma/CPP/Common/ListFileUtils.cpp +0 -132
- package/android/jni/lzma/CPP/Common/ListFileUtils.h +0 -18
- package/android/jni/lzma/CPP/Common/MyBuffer.h +0 -259
- package/android/jni/lzma/CPP/Common/MyBuffer2.h +0 -100
- package/android/jni/lzma/CPP/Common/MyCom.h +0 -277
- package/android/jni/lzma/CPP/Common/MyException.h +0 -14
- package/android/jni/lzma/CPP/Common/MyGuidDef.h +0 -54
- package/android/jni/lzma/CPP/Common/MyInitGuid.h +0 -45
- package/android/jni/lzma/CPP/Common/MyLinux.h +0 -42
- package/android/jni/lzma/CPP/Common/MyString.cpp +0 -1659
- package/android/jni/lzma/CPP/Common/MyString.h +0 -868
- package/android/jni/lzma/CPP/Common/MyTypes.h +0 -35
- package/android/jni/lzma/CPP/Common/MyUnknown.h +0 -17
- package/android/jni/lzma/CPP/Common/MyVector.cpp +0 -3
- package/android/jni/lzma/CPP/Common/MyVector.h +0 -634
- package/android/jni/lzma/CPP/Common/MyWindows.cpp +0 -145
- package/android/jni/lzma/CPP/Common/MyWindows.h +0 -231
- package/android/jni/lzma/CPP/Common/NewHandler.cpp +0 -163
- package/android/jni/lzma/CPP/Common/NewHandler.h +0 -88
- package/android/jni/lzma/CPP/Common/Sha256Reg.cpp +0 -40
- package/android/jni/lzma/CPP/Common/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/Common/StdInStream.cpp +0 -89
- package/android/jni/lzma/CPP/Common/StdInStream.h +0 -38
- package/android/jni/lzma/CPP/Common/StdOutStream.cpp +0 -163
- package/android/jni/lzma/CPP/Common/StdOutStream.h +0 -71
- package/android/jni/lzma/CPP/Common/StringConvert.cpp +0 -319
- package/android/jni/lzma/CPP/Common/StringConvert.h +0 -88
- package/android/jni/lzma/CPP/Common/StringToInt.cpp +0 -144
- package/android/jni/lzma/CPP/Common/StringToInt.h +0 -21
- package/android/jni/lzma/CPP/Common/TextConfig.cpp +0 -124
- package/android/jni/lzma/CPP/Common/TextConfig.h +0 -19
- package/android/jni/lzma/CPP/Common/UTFConvert.cpp +0 -288
- package/android/jni/lzma/CPP/Common/UTFConvert.h +0 -12
- package/android/jni/lzma/CPP/Common/Wildcard.cpp +0 -676
- package/android/jni/lzma/CPP/Common/Wildcard.h +0 -149
- package/android/jni/lzma/CPP/Common/XzCrc64Init.cpp +0 -7
- package/android/jni/lzma/CPP/Common/XzCrc64Reg.cpp +0 -42
- package/android/jni/lzma/CPP/Windows/COM.h +0 -70
- package/android/jni/lzma/CPP/Windows/CommonDialog.cpp +0 -185
- package/android/jni/lzma/CPP/Windows/CommonDialog.h +0 -23
- package/android/jni/lzma/CPP/Windows/Control/ComboBox.cpp +0 -66
- package/android/jni/lzma/CPP/Windows/Control/ComboBox.h +0 -65
- package/android/jni/lzma/CPP/Windows/Control/CommandBar.h +0 -52
- package/android/jni/lzma/CPP/Windows/Control/Dialog.cpp +0 -251
- package/android/jni/lzma/CPP/Windows/Control/Dialog.h +0 -170
- package/android/jni/lzma/CPP/Windows/Control/Edit.h +0 -19
- package/android/jni/lzma/CPP/Windows/Control/ImageList.cpp +0 -10
- package/android/jni/lzma/CPP/Windows/Control/ImageList.h +0 -87
- package/android/jni/lzma/CPP/Windows/Control/ListView.cpp +0 -155
- package/android/jni/lzma/CPP/Windows/Control/ListView.h +0 -146
- package/android/jni/lzma/CPP/Windows/Control/ProgressBar.h +0 -35
- package/android/jni/lzma/CPP/Windows/Control/PropertyPage.cpp +0 -143
- package/android/jni/lzma/CPP/Windows/Control/PropertyPage.h +0 -50
- package/android/jni/lzma/CPP/Windows/Control/ReBar.h +0 -34
- package/android/jni/lzma/CPP/Windows/Control/Static.h +0 -28
- package/android/jni/lzma/CPP/Windows/Control/StatusBar.h +0 -42
- package/android/jni/lzma/CPP/Windows/Control/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/Windows/Control/ToolBar.h +0 -43
- package/android/jni/lzma/CPP/Windows/Control/Trackbar.h +0 -27
- package/android/jni/lzma/CPP/Windows/Control/Window2.cpp +0 -200
- package/android/jni/lzma/CPP/Windows/Control/Window2.h +0 -51
- package/android/jni/lzma/CPP/Windows/DLL.cpp +0 -109
- package/android/jni/lzma/CPP/Windows/DLL.h +0 -58
- package/android/jni/lzma/CPP/Windows/Defs.h +0 -17
- package/android/jni/lzma/CPP/Windows/ErrorMsg.cpp +0 -66
- package/android/jni/lzma/CPP/Windows/ErrorMsg.h +0 -15
- package/android/jni/lzma/CPP/Windows/FileDir.cpp +0 -714
- package/android/jni/lzma/CPP/Windows/FileDir.h +0 -117
- package/android/jni/lzma/CPP/Windows/FileFind.cpp +0 -749
- package/android/jni/lzma/CPP/Windows/FileFind.h +0 -161
- package/android/jni/lzma/CPP/Windows/FileIO.cpp +0 -432
- package/android/jni/lzma/CPP/Windows/FileIO.h +0 -212
- package/android/jni/lzma/CPP/Windows/FileLink.cpp +0 -440
- package/android/jni/lzma/CPP/Windows/FileMapping.cpp +0 -12
- package/android/jni/lzma/CPP/Windows/FileMapping.h +0 -66
- package/android/jni/lzma/CPP/Windows/FileName.cpp +0 -839
- package/android/jni/lzma/CPP/Windows/FileName.h +0 -115
- package/android/jni/lzma/CPP/Windows/FileSystem.cpp +0 -131
- package/android/jni/lzma/CPP/Windows/FileSystem.h +0 -27
- package/android/jni/lzma/CPP/Windows/Handle.h +0 -37
- package/android/jni/lzma/CPP/Windows/MemoryLock.cpp +0 -112
- package/android/jni/lzma/CPP/Windows/MemoryLock.h +0 -40
- package/android/jni/lzma/CPP/Windows/NtCheck.h +0 -46
- package/android/jni/lzma/CPP/Windows/PropVariant.cpp +0 -347
- package/android/jni/lzma/CPP/Windows/PropVariant.h +0 -114
- package/android/jni/lzma/CPP/Windows/PropVariantConv.cpp +0 -138
- package/android/jni/lzma/CPP/Windows/PropVariantConv.h +0 -37
- package/android/jni/lzma/CPP/Windows/Registry.cpp +0 -390
- package/android/jni/lzma/CPP/Windows/Registry.h +0 -84
- package/android/jni/lzma/CPP/Windows/ResourceString.cpp +0 -103
- package/android/jni/lzma/CPP/Windows/ResourceString.h +0 -16
- package/android/jni/lzma/CPP/Windows/SecurityUtils.cpp +0 -181
- package/android/jni/lzma/CPP/Windows/SecurityUtils.h +0 -167
- package/android/jni/lzma/CPP/Windows/Shell.cpp +0 -358
- package/android/jni/lzma/CPP/Windows/Shell.h +0 -94
- package/android/jni/lzma/CPP/Windows/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/Windows/Synchronization.cpp +0 -10
- package/android/jni/lzma/CPP/Windows/Synchronization.h +0 -164
- package/android/jni/lzma/CPP/Windows/System.cpp +0 -142
- package/android/jni/lzma/CPP/Windows/System.h +0 -40
- package/android/jni/lzma/CPP/Windows/Thread.h +0 -38
- package/android/jni/lzma/CPP/Windows/TimeUtils.cpp +0 -213
- package/android/jni/lzma/CPP/Windows/TimeUtils.h +0 -32
- package/android/jni/lzma/CPP/Windows/Window.cpp +0 -179
- package/android/jni/lzma/CPP/Windows/Window.h +0 -284
- package/android/jni/lzma/CS/7zip/Common/CRC.cs +0 -55
- package/android/jni/lzma/CS/7zip/Common/CommandLineParser.cs +0 -274
- package/android/jni/lzma/CS/7zip/Common/InBuffer.cs +0 -72
- package/android/jni/lzma/CS/7zip/Common/OutBuffer.cs +0 -47
- package/android/jni/lzma/CS/7zip/Compress/LZ/IMatchFinder.cs +0 -24
- package/android/jni/lzma/CS/7zip/Compress/LZ/LzBinTree.cs +0 -367
- package/android/jni/lzma/CS/7zip/Compress/LZ/LzInWindow.cs +0 -132
- package/android/jni/lzma/CS/7zip/Compress/LZ/LzOutWindow.cs +0 -110
- package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaBase.cs +0 -76
- package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaDecoder.cs +0 -398
- package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaEncoder.cs +0 -1480
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.cs +0 -364
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.csproj +0 -90
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.sln +0 -20
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaBench.cs +0 -340
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/AssemblyInfo.cs +0 -29
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/Resources.cs +0 -70
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/Settings.cs +0 -42
- package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoder.cs +0 -234
- package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBit.cs +0 -117
- package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBitTree.cs +0 -157
- package/android/jni/lzma/CS/7zip/ICoder.cs +0 -157
- package/android/jni/lzma/DOC/7zC.txt +0 -187
- package/android/jni/lzma/DOC/7zFormat.txt +0 -469
- package/android/jni/lzma/DOC/Methods.txt +0 -173
- package/android/jni/lzma/DOC/installer.txt +0 -166
- package/android/jni/lzma/DOC/lzma-history.txt +0 -446
- package/android/jni/lzma/DOC/lzma-specification.txt +0 -1176
- package/android/jni/lzma/DOC/lzma.txt +0 -328
- package/android/jni/lzma/Java/SevenZip/CRC.java +0 -52
- package/android/jni/lzma/Java/SevenZip/Compression/LZ/BinTree.java +0 -382
- package/android/jni/lzma/Java/SevenZip/Compression/LZ/InWindow.java +0 -131
- package/android/jni/lzma/Java/SevenZip/Compression/LZ/OutWindow.java +0 -85
- package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Base.java +0 -88
- package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Decoder.java +0 -329
- package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Encoder.java +0 -1416
- package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java +0 -55
- package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeEncoder.java +0 -99
- package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/Decoder.java +0 -88
- package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/Encoder.java +0 -151
- package/android/jni/lzma/Java/SevenZip/ICodeProgress.java +0 -6
- package/android/jni/lzma/Java/SevenZip/LzmaAlone.java +0 -253
- package/android/jni/lzma/Java/SevenZip/LzmaBench.java +0 -392
- package/android/jni/lzma/bin/7zS2.sfx +0 -0
- package/android/jni/lzma/bin/7zS2con.sfx +0 -0
- package/android/jni/lzma/bin/7zSD.sfx +0 -0
- package/android/jni/lzma/bin/7zdec.exe +0 -0
- package/android/jni/lzma/bin/7zr.exe +0 -0
- package/android/jni/lzma/bin/installer/config.txt +0 -5
- package/android/jni/lzma/bin/installer/cr.bat +0 -5
- package/android/jni/lzma/bin/lzma.exe +0 -0
- package/android/jni/lzma/bin/x64/7zr.exe +0 -0
- package/android/src/main/java/cn/reactnative/modules/update/ArchivePatchPlanResult.java +0 -6
- package/android/src/main/java/cn/reactnative/modules/update/PushyConfiguration.java +0 -104
- package/android/src/main/java/cn/reactnative/modules/update/UiThreadRunner.java +0 -37
- package/android/src/newarch/cn/reactnative/modules/update/UpdateModule.java +0 -121
- package/android/src/oldarch/cn/reactnative/modules/update/UpdateModule.java +0 -125
- package/cpp/patch_core/jni_natives.h +0 -27
- package/cpp/patch_core/jni_registration.cpp +0 -103
- package/cpp/patch_core/jni_util.h +0 -60
- package/cpp/patch_core/patch_core_android.cpp +0 -97
- package/cpp/patch_core/update_core_android.cpp +0 -485
- package/cpp/update_flow_core/update_flow_jni.cpp +0 -150
|
@@ -1,23 +1,30 @@
|
|
|
1
1
|
#include <napi/native_api.h>
|
|
2
2
|
|
|
3
3
|
#include "flow_json.h"
|
|
4
|
-
#include "
|
|
4
|
+
#include "native_config.h"
|
|
5
|
+
#include "native_round.h"
|
|
6
|
+
#include "round_engine.h"
|
|
5
7
|
#include <js_native_api.h>
|
|
6
8
|
#include <js_native_api_types.h>
|
|
7
9
|
|
|
10
|
+
#include <cerrno>
|
|
11
|
+
#include <exception>
|
|
12
|
+
#include <cstdint>
|
|
8
13
|
#include <string>
|
|
14
|
+
#include <unistd.h>
|
|
15
|
+
#include <utility>
|
|
9
16
|
#include <vector>
|
|
10
17
|
|
|
18
|
+
#include "archive_limits.h"
|
|
11
19
|
#include "archive_patch_core.h"
|
|
12
20
|
#include "digest.h"
|
|
21
|
+
#include "install_record.h"
|
|
13
22
|
#include "hbc_transform_wire.h"
|
|
14
23
|
#include "patch_core.h"
|
|
24
|
+
#include "resume_plan.h"
|
|
15
25
|
#include "state_core.h"
|
|
16
26
|
#include "state_ops.h"
|
|
17
27
|
|
|
18
|
-
extern "C" {
|
|
19
|
-
}
|
|
20
|
-
|
|
21
28
|
namespace {
|
|
22
29
|
|
|
23
30
|
using pushy::state_ops::StateOperation;
|
|
@@ -314,7 +321,11 @@ napi_value NewBoolean(napi_env env, bool value) {
|
|
|
314
321
|
|
|
315
322
|
napi_value NewString(napi_env env, const std::string& value) {
|
|
316
323
|
napi_value result = nullptr;
|
|
317
|
-
napi_create_string_utf8(env, value.c_str(), value.size(), &result)
|
|
324
|
+
if (napi_create_string_utf8(env, value.c_str(), value.size(), &result) !=
|
|
325
|
+
napi_ok) {
|
|
326
|
+
ThrowError(env, "Failed to create string");
|
|
327
|
+
return nullptr;
|
|
328
|
+
}
|
|
318
329
|
return result;
|
|
319
330
|
}
|
|
320
331
|
|
|
@@ -337,14 +348,19 @@ void SetBoolProperty(
|
|
|
337
348
|
napi_set_named_property(env, object, name, NewBoolean(env, value));
|
|
338
349
|
}
|
|
339
350
|
|
|
351
|
+
// Per-operation outputs reported next to the state; all default to "nothing".
|
|
352
|
+
struct StateResultExtras {
|
|
353
|
+
bool changed = false;
|
|
354
|
+
std::string stale_version_to_delete;
|
|
355
|
+
std::string load_version;
|
|
356
|
+
bool did_rollback = false;
|
|
357
|
+
bool consumed_first_time = false;
|
|
358
|
+
};
|
|
359
|
+
|
|
340
360
|
napi_value NewStateResult(
|
|
341
361
|
napi_env env,
|
|
342
362
|
const pushy::state::State& state,
|
|
343
|
-
|
|
344
|
-
const std::string& stale_version_to_delete,
|
|
345
|
-
const std::string& load_version,
|
|
346
|
-
bool did_rollback,
|
|
347
|
-
bool consumed_first_time) {
|
|
363
|
+
const StateResultExtras& extras = StateResultExtras()) {
|
|
348
364
|
napi_value result = nullptr;
|
|
349
365
|
napi_create_object(env, &result);
|
|
350
366
|
|
|
@@ -355,21 +371,12 @@ napi_value NewStateResult(
|
|
|
355
371
|
SetBoolProperty(env, result, "firstTime", state.first_time);
|
|
356
372
|
SetBoolProperty(env, result, "firstTimeOk", state.first_time_ok);
|
|
357
373
|
SetStringProperty(env, result, "rolledBackVersion", state.rolled_back_version);
|
|
358
|
-
SetBoolProperty(env, result, "changed", changed);
|
|
359
|
-
SetStringProperty(
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
SetBoolProperty(env, result, "
|
|
363
|
-
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
napi_value NewArchivePatchPlanResult(
|
|
367
|
-
napi_env env,
|
|
368
|
-
const pushy::archive_patch::ArchivePatchPlan& plan) {
|
|
369
|
-
napi_value result = nullptr;
|
|
370
|
-
napi_create_object(env, &result);
|
|
371
|
-
SetStringProperty(env, result, "mergeSourceSubdir", plan.merge_source_subdir);
|
|
372
|
-
SetBoolProperty(env, result, "enableMerge", plan.enable_merge);
|
|
374
|
+
SetBoolProperty(env, result, "changed", extras.changed);
|
|
375
|
+
SetStringProperty(
|
|
376
|
+
env, result, "staleVersionToDelete", extras.stale_version_to_delete);
|
|
377
|
+
SetStringProperty(env, result, "loadVersion", extras.load_version);
|
|
378
|
+
SetBoolProperty(env, result, "didRollback", extras.did_rollback);
|
|
379
|
+
SetBoolProperty(env, result, "consumedFirstTime", extras.consumed_first_time);
|
|
373
380
|
return result;
|
|
374
381
|
}
|
|
375
382
|
|
|
@@ -394,24 +401,18 @@ napi_value NewCopyGroupArray(
|
|
|
394
401
|
NewString(env, groups[index].to_paths[target_index]));
|
|
395
402
|
}
|
|
396
403
|
napi_set_named_property(env, group, "toPaths", to_paths);
|
|
404
|
+
if (groups[index].has_expected_crc) {
|
|
405
|
+
// A CRC32 fits a double exactly, like the manifest's JSON number.
|
|
406
|
+
napi_value crc = nullptr;
|
|
407
|
+
napi_create_double(
|
|
408
|
+
env, static_cast<double>(groups[index].expected_crc), &crc);
|
|
409
|
+
napi_set_named_property(env, group, "expectedCrc", crc);
|
|
410
|
+
}
|
|
397
411
|
napi_set_element(env, result, index, group);
|
|
398
412
|
}
|
|
399
413
|
return result;
|
|
400
414
|
}
|
|
401
415
|
|
|
402
|
-
pushy::delta::PatchManifest BuildManifest(
|
|
403
|
-
const std::vector<std::string>& copy_froms,
|
|
404
|
-
const std::vector<std::string>& copy_tos,
|
|
405
|
-
const std::vector<std::string>& deletes) {
|
|
406
|
-
pushy::delta::PatchManifest manifest;
|
|
407
|
-
for (size_t index = 0; index < copy_froms.size(); ++index) {
|
|
408
|
-
manifest.copies.push_back(
|
|
409
|
-
pushy::delta::CopyOperation{copy_froms[index], copy_tos[index]});
|
|
410
|
-
}
|
|
411
|
-
manifest.deletes = deletes;
|
|
412
|
-
return manifest;
|
|
413
|
-
}
|
|
414
|
-
|
|
415
416
|
napi_value SyncStateWithBinaryVersion(napi_env env, napi_callback_info info) {
|
|
416
417
|
napi_value args[3] = {nullptr, nullptr, nullptr};
|
|
417
418
|
size_t argc = 3;
|
|
@@ -436,7 +437,9 @@ napi_value SyncStateWithBinaryVersion(napi_env env, napi_callback_info info) {
|
|
|
436
437
|
|
|
437
438
|
const pushy::state::BinaryVersionSyncResult result =
|
|
438
439
|
pushy::state::SyncBinaryVersion(state, package_version, build_time);
|
|
439
|
-
|
|
440
|
+
StateResultExtras extras;
|
|
441
|
+
extras.changed = result.changed;
|
|
442
|
+
return NewStateResult(env, result.state, extras);
|
|
440
443
|
}
|
|
441
444
|
|
|
442
445
|
napi_value RunStateCore(napi_env env, napi_callback_info info) {
|
|
@@ -477,59 +480,32 @@ napi_value RunStateCore(napi_env env, napi_callback_info info) {
|
|
|
477
480
|
|
|
478
481
|
switch (static_cast<StateOperation>(operation)) {
|
|
479
482
|
case StateOperation::kSwitchVersion:
|
|
480
|
-
return NewStateResult(
|
|
481
|
-
env,
|
|
482
|
-
pushy::state::SwitchVersion(state, string_arg),
|
|
483
|
-
false,
|
|
484
|
-
std::string(),
|
|
485
|
-
std::string(),
|
|
486
|
-
false,
|
|
487
|
-
false);
|
|
483
|
+
return NewStateResult(env, pushy::state::SwitchVersion(state, string_arg));
|
|
488
484
|
case StateOperation::kMarkSuccess: {
|
|
489
485
|
const pushy::state::MarkSuccessResult result = pushy::state::MarkSuccess(state);
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
false,
|
|
494
|
-
result.stale_version_to_delete,
|
|
495
|
-
std::string(),
|
|
496
|
-
false,
|
|
497
|
-
false);
|
|
486
|
+
StateResultExtras extras;
|
|
487
|
+
extras.stale_version_to_delete = result.stale_version_to_delete;
|
|
488
|
+
return NewStateResult(env, result.state, extras);
|
|
498
489
|
}
|
|
499
490
|
case StateOperation::kRollback: {
|
|
500
491
|
const pushy::state::State next = pushy::state::Rollback(state);
|
|
501
|
-
|
|
502
|
-
|
|
492
|
+
StateResultExtras extras;
|
|
493
|
+
extras.load_version = next.current_version;
|
|
494
|
+
extras.did_rollback = true;
|
|
495
|
+
return NewStateResult(env, next, extras);
|
|
503
496
|
}
|
|
504
497
|
case StateOperation::kClearFirstTime:
|
|
505
|
-
return NewStateResult(
|
|
506
|
-
env,
|
|
507
|
-
pushy::state::ClearFirstTime(state),
|
|
508
|
-
false,
|
|
509
|
-
std::string(),
|
|
510
|
-
std::string(),
|
|
511
|
-
false,
|
|
512
|
-
false);
|
|
498
|
+
return NewStateResult(env, pushy::state::ClearFirstTime(state));
|
|
513
499
|
case StateOperation::kClearRollbackMark:
|
|
514
|
-
return NewStateResult(
|
|
515
|
-
env,
|
|
516
|
-
pushy::state::ClearRollbackMark(state),
|
|
517
|
-
false,
|
|
518
|
-
std::string(),
|
|
519
|
-
std::string(),
|
|
520
|
-
false,
|
|
521
|
-
false);
|
|
500
|
+
return NewStateResult(env, pushy::state::ClearRollbackMark(state));
|
|
522
501
|
case StateOperation::kResolveLaunch: {
|
|
523
502
|
const pushy::state::LaunchDecision decision =
|
|
524
503
|
pushy::state::ResolveLaunchState(state, flag_a, flag_b);
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
decision.load_version,
|
|
531
|
-
decision.did_rollback,
|
|
532
|
-
decision.consumed_first_time);
|
|
504
|
+
StateResultExtras extras;
|
|
505
|
+
extras.load_version = decision.load_version;
|
|
506
|
+
extras.did_rollback = decision.did_rollback;
|
|
507
|
+
extras.consumed_first_time = decision.consumed_first_time;
|
|
508
|
+
return NewStateResult(env, decision.state, extras);
|
|
533
509
|
}
|
|
534
510
|
}
|
|
535
511
|
|
|
@@ -537,105 +513,10 @@ napi_value RunStateCore(napi_env env, napi_callback_info info) {
|
|
|
537
513
|
return nullptr;
|
|
538
514
|
}
|
|
539
515
|
|
|
540
|
-
napi_value BuildArchivePatchPlan(napi_env env, napi_callback_info info) {
|
|
541
|
-
napi_value args[6] = {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr};
|
|
542
|
-
size_t argc = 6;
|
|
543
|
-
if (!GetArgCount(env, info, &argc, args) || argc < 5) {
|
|
544
|
-
ThrowError(env, "Wrong number of arguments");
|
|
545
|
-
return nullptr;
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
int32_t patch_type = 0;
|
|
549
|
-
if (!GetInt32(env, args[0], &patch_type)) {
|
|
550
|
-
return nullptr;
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
std::vector<std::string> entry_names;
|
|
554
|
-
std::vector<std::string> copy_froms;
|
|
555
|
-
std::vector<std::string> copy_tos;
|
|
556
|
-
std::vector<std::string> deletes;
|
|
557
|
-
if (!GetStringArray(env, args[1], &entry_names) ||
|
|
558
|
-
!GetStringArray(env, args[2], ©_froms) ||
|
|
559
|
-
!GetStringArray(env, args[3], ©_tos) ||
|
|
560
|
-
!GetStringArray(env, args[4], &deletes)) {
|
|
561
|
-
return nullptr;
|
|
562
|
-
}
|
|
563
|
-
if (copy_froms.size() != copy_tos.size()) {
|
|
564
|
-
ThrowError(env, "copyFroms and copyTos length mismatch");
|
|
565
|
-
return nullptr;
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
std::string bundle_patch_entry_name =
|
|
569
|
-
pushy::archive_patch::DefaultBundleDeltaEntryName();
|
|
570
|
-
if (argc >= 6) {
|
|
571
|
-
bool ok = false;
|
|
572
|
-
const std::string candidate = GetString(env, args[5], &ok);
|
|
573
|
-
if (!ok) {
|
|
574
|
-
return nullptr;
|
|
575
|
-
}
|
|
576
|
-
if (!candidate.empty()) {
|
|
577
|
-
bundle_patch_entry_name = candidate;
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
|
|
581
|
-
const pushy::delta::PatchManifest manifest =
|
|
582
|
-
BuildManifest(copy_froms, copy_tos, deletes);
|
|
583
|
-
pushy::archive_patch::ArchivePatchType archive_type;
|
|
584
|
-
if (!pushy::archive_patch::TryParseArchivePatchType(patch_type, &archive_type)) {
|
|
585
|
-
ThrowError(env, "Unknown archive delta type");
|
|
586
|
-
return nullptr;
|
|
587
|
-
}
|
|
588
|
-
pushy::archive_patch::ArchivePatchPlan plan;
|
|
589
|
-
const pushy::delta::Status status = pushy::archive_patch::BuildArchivePatchPlan(
|
|
590
|
-
archive_type,
|
|
591
|
-
manifest,
|
|
592
|
-
entry_names,
|
|
593
|
-
&plan,
|
|
594
|
-
bundle_patch_entry_name);
|
|
595
|
-
if (!status.ok) {
|
|
596
|
-
ThrowError(env, status.message);
|
|
597
|
-
return nullptr;
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
return NewArchivePatchPlanResult(env, plan);
|
|
601
|
-
}
|
|
602
|
-
|
|
603
|
-
napi_value BuildCopyGroups(napi_env env, napi_callback_info info) {
|
|
604
|
-
napi_value args[2] = {nullptr, nullptr};
|
|
605
|
-
size_t argc = 2;
|
|
606
|
-
if (!GetArgCount(env, info, &argc, args) || argc < 2) {
|
|
607
|
-
ThrowError(env, "Wrong number of arguments");
|
|
608
|
-
return nullptr;
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
std::vector<std::string> copy_froms;
|
|
612
|
-
std::vector<std::string> copy_tos;
|
|
613
|
-
if (!GetStringArray(env, args[0], ©_froms) ||
|
|
614
|
-
!GetStringArray(env, args[1], ©_tos)) {
|
|
615
|
-
return nullptr;
|
|
616
|
-
}
|
|
617
|
-
if (copy_froms.size() != copy_tos.size()) {
|
|
618
|
-
ThrowError(env, "copyFroms and copyTos length mismatch");
|
|
619
|
-
return nullptr;
|
|
620
|
-
}
|
|
621
|
-
|
|
622
|
-
const pushy::delta::PatchManifest manifest =
|
|
623
|
-
BuildManifest(copy_froms, copy_tos, std::vector<std::string>());
|
|
624
|
-
std::vector<pushy::archive_patch::CopyGroup> groups;
|
|
625
|
-
const pushy::delta::Status status =
|
|
626
|
-
pushy::archive_patch::BuildCopyGroups(manifest, &groups);
|
|
627
|
-
if (!status.ok) {
|
|
628
|
-
ThrowError(env, status.message);
|
|
629
|
-
return nullptr;
|
|
630
|
-
}
|
|
631
|
-
|
|
632
|
-
return NewCopyGroupArray(env, groups);
|
|
633
|
-
}
|
|
634
|
-
|
|
635
516
|
// ---------------------------------------------------------------------------
|
|
636
517
|
// Async work plumbing for the heavy patch operations.
|
|
637
518
|
//
|
|
638
|
-
//
|
|
519
|
+
// applyArchiveDelta and cleanupOldEntries run hdiff / recursive file IO
|
|
639
520
|
// that can take hundreds of ms to seconds. The Pushy TurboModule executes on
|
|
640
521
|
// the UI thread, so running these synchronously froze the UI. These are now
|
|
641
522
|
// wrapped in napi_create_async_work: arguments are parsed on the JS thread, the
|
|
@@ -643,8 +524,7 @@ napi_value BuildCopyGroups(napi_env env, napi_callback_info info) {
|
|
|
643
524
|
// back on the JS thread.
|
|
644
525
|
// ---------------------------------------------------------------------------
|
|
645
526
|
|
|
646
|
-
// Reject an already-created deferred with an Error(message).
|
|
647
|
-
// work fails to be created/queued, so the Promise never hangs pending.
|
|
527
|
+
// Reject an already-created deferred with an Error(message).
|
|
648
528
|
void RejectDeferredWithMessage(
|
|
649
529
|
napi_env env,
|
|
650
530
|
napi_deferred deferred,
|
|
@@ -656,16 +536,134 @@ void RejectDeferredWithMessage(
|
|
|
656
536
|
napi_reject_deferred(env, deferred, error);
|
|
657
537
|
}
|
|
658
538
|
|
|
659
|
-
|
|
539
|
+
void ResolveDeferredWithUndefined(napi_env env, napi_deferred deferred) {
|
|
540
|
+
napi_value undefined_value = nullptr;
|
|
541
|
+
napi_get_undefined(env, &undefined_value);
|
|
542
|
+
napi_resolve_deferred(env, deferred, undefined_value);
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
// Resolves with undefined, or rejects with the status message.
|
|
546
|
+
void SettleWithStatus(
|
|
547
|
+
napi_env env,
|
|
548
|
+
napi_deferred deferred,
|
|
549
|
+
const pushy::delta::Status& status) {
|
|
550
|
+
if (status.ok) {
|
|
551
|
+
ResolveDeferredWithUndefined(env, deferred);
|
|
552
|
+
} else {
|
|
553
|
+
RejectDeferredWithMessage(env, deferred, status.message.c_str());
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
template <typename W>
|
|
558
|
+
struct AsyncCall {
|
|
660
559
|
napi_async_work work = nullptr;
|
|
661
560
|
napi_deferred deferred = nullptr;
|
|
662
|
-
|
|
561
|
+
W data;
|
|
562
|
+
void (*execute)(W&) = nullptr;
|
|
563
|
+
void (*settle)(napi_env, napi_deferred, const W&) = nullptr;
|
|
564
|
+
// Set when execute threw: the promise rejects with it instead of settling
|
|
565
|
+
// from half-written results.
|
|
566
|
+
bool threw = false;
|
|
567
|
+
std::string failure;
|
|
568
|
+
};
|
|
569
|
+
|
|
570
|
+
// The message of the exception being handled, without throwing again.
|
|
571
|
+
void RecordFailure(std::string* failure) noexcept {
|
|
572
|
+
try {
|
|
573
|
+
throw;
|
|
574
|
+
} catch (const std::exception& error) {
|
|
575
|
+
try {
|
|
576
|
+
*failure = error.what();
|
|
577
|
+
} catch (...) {
|
|
578
|
+
}
|
|
579
|
+
} catch (...) {
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
// Runs execute(data) on a libuv worker thread and returns a Promise that
|
|
584
|
+
// settle(env, deferred, data) settles back on the JS thread. Every path
|
|
585
|
+
// settles the promise exactly once and frees the call: a creation or queue
|
|
586
|
+
// failure rejects immediately, and work that was cancelled or aborted before
|
|
587
|
+
// it ran is rejected instead of settled from meaningless results.
|
|
588
|
+
template <typename W>
|
|
589
|
+
napi_value QueueWork(
|
|
590
|
+
napi_env env,
|
|
591
|
+
const char* name,
|
|
592
|
+
W data,
|
|
593
|
+
void (*execute)(W&),
|
|
594
|
+
void (*settle)(napi_env, napi_deferred, const W&)) {
|
|
595
|
+
auto* call = new AsyncCall<W>();
|
|
596
|
+
call->data = std::move(data);
|
|
597
|
+
call->execute = execute;
|
|
598
|
+
call->settle = settle;
|
|
599
|
+
|
|
600
|
+
napi_value promise = nullptr;
|
|
601
|
+
if (napi_create_promise(env, &call->deferred, &promise) != napi_ok) {
|
|
602
|
+
delete call;
|
|
603
|
+
ThrowError(env, "Unable to create promise");
|
|
604
|
+
return nullptr;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
napi_value resource_name = nullptr;
|
|
608
|
+
napi_create_string_utf8(env, name, NAPI_AUTO_LENGTH, &resource_name);
|
|
609
|
+
if (napi_create_async_work(
|
|
610
|
+
env,
|
|
611
|
+
nullptr,
|
|
612
|
+
resource_name,
|
|
613
|
+
[](napi_env, void* raw) {
|
|
614
|
+
// A worker thread: an exception escaping here terminates the
|
|
615
|
+
// process (CODE_AUDIT 4.4).
|
|
616
|
+
auto* c = static_cast<AsyncCall<W>*>(raw);
|
|
617
|
+
try {
|
|
618
|
+
c->execute(c->data);
|
|
619
|
+
} catch (...) {
|
|
620
|
+
c->threw = true;
|
|
621
|
+
RecordFailure(&c->failure);
|
|
622
|
+
}
|
|
623
|
+
},
|
|
624
|
+
[](napi_env cb_env, napi_status status, void* raw) {
|
|
625
|
+
auto* c = static_cast<AsyncCall<W>*>(raw);
|
|
626
|
+
if (status != napi_ok) {
|
|
627
|
+
RejectDeferredWithMessage(cb_env, c->deferred, "async work aborted");
|
|
628
|
+
} else if (c->threw) {
|
|
629
|
+
RejectDeferredWithMessage(
|
|
630
|
+
cb_env, c->deferred,
|
|
631
|
+
c->failure.empty() ? "native error" : c->failure.c_str());
|
|
632
|
+
} else {
|
|
633
|
+
try {
|
|
634
|
+
c->settle(cb_env, c->deferred, c->data);
|
|
635
|
+
} catch (...) {
|
|
636
|
+
RejectDeferredWithMessage(cb_env, c->deferred, "native error");
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
napi_delete_async_work(cb_env, c->work);
|
|
640
|
+
delete c;
|
|
641
|
+
},
|
|
642
|
+
call,
|
|
643
|
+
&call->work) != napi_ok) {
|
|
644
|
+
// Work was never created: settle the promise and free the call so it
|
|
645
|
+
// neither leaks nor hangs pending forever.
|
|
646
|
+
RejectDeferredWithMessage(env, call->deferred, "Unable to create async work");
|
|
647
|
+
delete call;
|
|
648
|
+
return promise;
|
|
649
|
+
}
|
|
650
|
+
if (napi_queue_async_work(env, call->work) != napi_ok) {
|
|
651
|
+
// Queueing failed: the complete callback will never run, so clean up here.
|
|
652
|
+
napi_delete_async_work(env, call->work);
|
|
653
|
+
RejectDeferredWithMessage(env, call->deferred, "Unable to queue async work");
|
|
654
|
+
delete call;
|
|
655
|
+
return promise;
|
|
656
|
+
}
|
|
657
|
+
return promise;
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
struct ApplyArchiveDeltaWork {
|
|
661
|
+
pushy::archive_patch::ArchivePatchRequest request;
|
|
662
|
+
std::vector<pushy::archive_patch::CopyGroup> host_copies;
|
|
663
663
|
pushy::delta::Status status{false, ""};
|
|
664
664
|
};
|
|
665
665
|
|
|
666
666
|
struct CleanupWork {
|
|
667
|
-
napi_async_work work = nullptr;
|
|
668
|
-
napi_deferred deferred = nullptr;
|
|
669
667
|
std::string root_dir;
|
|
670
668
|
// Every version that may still be in use: persisted current/last AND the
|
|
671
669
|
// version this process booted from (two switches without a restart must not
|
|
@@ -679,13 +677,76 @@ struct CleanupWork {
|
|
|
679
677
|
// of MB; hashing it synchronously on the UI thread (where the TurboModule
|
|
680
678
|
// runs) froze the app for hundreds of ms per archive/bundle/activation.
|
|
681
679
|
struct Sha256FileWork {
|
|
682
|
-
napi_async_work work = nullptr;
|
|
683
|
-
napi_deferred deferred = nullptr;
|
|
684
680
|
std::string path;
|
|
685
681
|
std::string hex;
|
|
686
682
|
};
|
|
687
683
|
|
|
688
|
-
|
|
684
|
+
// Digest of a byte range of an fd the caller keeps open (rawfile
|
|
685
|
+
// descriptors: the embedded bundle lives at [offset, offset + length) inside
|
|
686
|
+
// the HAP). The fd is never closed here; JS closes it after the promise
|
|
687
|
+
// settles.
|
|
688
|
+
struct Sha256RangeWork {
|
|
689
|
+
int fd = -1;
|
|
690
|
+
int64_t offset = 0;
|
|
691
|
+
int64_t length = 0;
|
|
692
|
+
std::string hex;
|
|
693
|
+
std::string error;
|
|
694
|
+
};
|
|
695
|
+
|
|
696
|
+
// pread loop (positioned: never moves a file offset the caller may share).
|
|
697
|
+
// A short read before `length` bytes is an error, not EOF.
|
|
698
|
+
void HashFdRange(Sha256RangeWork& w) {
|
|
699
|
+
pushy::digest::Sha256 hasher;
|
|
700
|
+
std::vector<uint8_t> buffer(256 * 1024);
|
|
701
|
+
int64_t position = w.offset;
|
|
702
|
+
int64_t remaining = w.length;
|
|
703
|
+
while (remaining > 0) {
|
|
704
|
+
const size_t want = static_cast<size_t>(
|
|
705
|
+
remaining < static_cast<int64_t>(buffer.size())
|
|
706
|
+
? remaining
|
|
707
|
+
: static_cast<int64_t>(buffer.size()));
|
|
708
|
+
const ssize_t read = pread(w.fd, buffer.data(), want, static_cast<off_t>(position));
|
|
709
|
+
if (read < 0) {
|
|
710
|
+
if (errno == EINTR) {
|
|
711
|
+
continue;
|
|
712
|
+
}
|
|
713
|
+
w.error = "sha256HexRawFdAsync: read failed (errno " +
|
|
714
|
+
std::to_string(errno) + ")";
|
|
715
|
+
return;
|
|
716
|
+
}
|
|
717
|
+
if (read == 0) {
|
|
718
|
+
w.error = "sha256HexRawFdAsync: unexpected end of file";
|
|
719
|
+
return;
|
|
720
|
+
}
|
|
721
|
+
hasher.Update(buffer.data(), static_cast<size_t>(read));
|
|
722
|
+
position += read;
|
|
723
|
+
remaining -= read;
|
|
724
|
+
}
|
|
725
|
+
w.hex = hasher.HexDigest();
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
bool GetNonNegativeInt64(
|
|
729
|
+
napi_env env,
|
|
730
|
+
napi_value value,
|
|
731
|
+
const char* name,
|
|
732
|
+
int64_t* out_value) {
|
|
733
|
+
napi_valuetype type = napi_undefined;
|
|
734
|
+
if (value == nullptr || !GetValueType(env, value, &type) ||
|
|
735
|
+
type != napi_number ||
|
|
736
|
+
napi_get_value_int64(env, value, out_value) != napi_ok ||
|
|
737
|
+
*out_value < 0) {
|
|
738
|
+
ThrowError(env, std::string("sha256HexRawFdAsync: ") + name +
|
|
739
|
+
" must be a non-negative number");
|
|
740
|
+
return false;
|
|
741
|
+
}
|
|
742
|
+
return true;
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
// applyArchiveDelta(request) -> Promise<CopyGroupResult[]>. The manifest
|
|
746
|
+
// text is parsed (with the rest of the patch) on the worker thread; the
|
|
747
|
+
// promise resolves with the copies the caller still owes (empty unless
|
|
748
|
+
// hostCopiesResources) and rejects with the core's message.
|
|
749
|
+
napi_value ApplyArchiveDelta(napi_env env, napi_callback_info info) {
|
|
689
750
|
napi_value args[1] = {nullptr};
|
|
690
751
|
size_t argc = 1;
|
|
691
752
|
if (!GetArgCount(env, info, &argc, args) || argc < 1) {
|
|
@@ -696,105 +757,60 @@ napi_value ApplyPatchFromFileSource(napi_env env, napi_callback_info info) {
|
|
|
696
757
|
return nullptr;
|
|
697
758
|
}
|
|
698
759
|
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
std::string
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
!GetOptionalStringArrayProperty(env, args[0], "copyTos", ©_tos) ||
|
|
713
|
-
!GetOptionalStringArrayProperty(env, args[0], "deletes", &deletes) ||
|
|
714
|
-
!GetOptionalStringProperty(env, args[0], "sourceRoot", &source_root) ||
|
|
715
|
-
!GetOptionalStringProperty(env, args[0], "targetRoot", &target_root) ||
|
|
716
|
-
!GetOptionalStringProperty(env, args[0], "originBundlePath", &origin_bundle_path) ||
|
|
717
|
-
!GetOptionalStringProperty(env, args[0], "bundleDeltaPath", &bundle_patch_path) ||
|
|
718
|
-
!GetOptionalStringProperty(env, args[0], "bundleOutputPath", &bundle_output_path) ||
|
|
719
|
-
!GetOptionalStringProperty(env, args[0], "mergeSourceSubdir", &merge_source_subdir) ||
|
|
760
|
+
ApplyArchiveDeltaWork work;
|
|
761
|
+
pushy::archive_patch::ArchivePatchRequest& request = work.request;
|
|
762
|
+
napi_value patch_type_value = nullptr;
|
|
763
|
+
int32_t patch_type = 0;
|
|
764
|
+
std::string bundle_patch_entry_name;
|
|
765
|
+
if (!GetNamedProperty(env, args[0], "archiveType", &patch_type_value) ||
|
|
766
|
+
!GetInt32(env, patch_type_value, &patch_type) ||
|
|
767
|
+
!GetOptionalStringArrayProperty(
|
|
768
|
+
env, args[0], "entryNames", &request.archive.entry_names) ||
|
|
769
|
+
!GetOptionalStringProperty(
|
|
770
|
+
env, args[0], "manifestJson", &request.archive.manifest_json) ||
|
|
771
|
+
!GetOptionalStringProperty(
|
|
772
|
+
env, args[0], "bundleDeltaEntry", &bundle_patch_entry_name) ||
|
|
720
773
|
!GetOptionalStringProperty(
|
|
721
|
-
env, args[0], "
|
|
722
|
-
!
|
|
774
|
+
env, args[0], "copySourcePrefix", &request.archive.copy_source_prefix) ||
|
|
775
|
+
!GetOptionalStringProperty(env, args[0], "sourceRoot", &request.source_root) ||
|
|
776
|
+
!GetOptionalStringProperty(env, args[0], "targetRoot", &request.target_root) ||
|
|
777
|
+
!GetOptionalStringProperty(
|
|
778
|
+
env, args[0], "originBundlePath", &request.origin_bundle_path) ||
|
|
779
|
+
!GetOptionalStringProperty(
|
|
780
|
+
env, args[0], "bundleDeltaPath", &request.bundle_patch_path) ||
|
|
781
|
+
!GetOptionalStringProperty(
|
|
782
|
+
env, args[0], "bundleOutputPath", &request.bundle_output_path) ||
|
|
783
|
+
!GetOptionalBoolProperty(
|
|
784
|
+
env, args[0], "hostCopiesResources", false,
|
|
785
|
+
&request.host_copies_resources)) {
|
|
723
786
|
return nullptr;
|
|
724
787
|
}
|
|
725
|
-
|
|
726
|
-
|
|
788
|
+
// The shared parser keeps Android and HarmonyOS in agreement on which
|
|
789
|
+
// integer values are valid; neither silently falls back to kFull.
|
|
790
|
+
if (!pushy::archive_patch::TryParseArchivePatchType(
|
|
791
|
+
patch_type, &request.archive.type)) {
|
|
792
|
+
ThrowError(env, "Unknown archive delta type");
|
|
727
793
|
return nullptr;
|
|
728
794
|
}
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
work_data->options.manifest = BuildManifest(copy_froms, copy_tos, deletes);
|
|
732
|
-
work_data->options.source_root = source_root;
|
|
733
|
-
work_data->options.target_root = target_root;
|
|
734
|
-
work_data->options.origin_bundle_path = origin_bundle_path;
|
|
735
|
-
work_data->options.bundle_patch_path = bundle_patch_path;
|
|
736
|
-
work_data->options.bundle_output_path = bundle_output_path;
|
|
737
|
-
work_data->options.merge_source_subdir = merge_source_subdir;
|
|
738
|
-
work_data->options.bundle_hbc_transform_meta = bundle_hbc_transform_meta;
|
|
739
|
-
work_data->options.enable_merge = enable_merge;
|
|
740
|
-
|
|
741
|
-
napi_value promise = nullptr;
|
|
742
|
-
if (napi_create_promise(env, &work_data->deferred, &promise) != napi_ok) {
|
|
743
|
-
delete work_data;
|
|
744
|
-
ThrowError(env, "Unable to create promise");
|
|
745
|
-
return nullptr;
|
|
795
|
+
if (!bundle_patch_entry_name.empty()) {
|
|
796
|
+
request.archive.bundle_patch_entry_name = bundle_patch_entry_name;
|
|
746
797
|
}
|
|
747
798
|
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
// meaningless; still settle the promise so it never hangs.
|
|
764
|
-
RejectDeferredWithMessage(cb_env, w->deferred, "async work aborted");
|
|
765
|
-
} else if (w->status.ok) {
|
|
766
|
-
napi_value undefined_value = nullptr;
|
|
767
|
-
napi_get_undefined(cb_env, &undefined_value);
|
|
768
|
-
napi_resolve_deferred(cb_env, w->deferred, undefined_value);
|
|
769
|
-
} else {
|
|
770
|
-
napi_value error = nullptr;
|
|
771
|
-
napi_value message = nullptr;
|
|
772
|
-
napi_create_string_utf8(
|
|
773
|
-
cb_env, w->status.message.c_str(), NAPI_AUTO_LENGTH, &message);
|
|
774
|
-
napi_create_error(cb_env, nullptr, message, &error);
|
|
775
|
-
napi_reject_deferred(cb_env, w->deferred, error);
|
|
776
|
-
}
|
|
777
|
-
napi_delete_async_work(cb_env, w->work);
|
|
778
|
-
delete w;
|
|
779
|
-
},
|
|
780
|
-
work_data,
|
|
781
|
-
&work_data->work) != napi_ok) {
|
|
782
|
-
// Work was never created: settle the promise and free the data so it does
|
|
783
|
-
// not leak / hang pending forever.
|
|
784
|
-
RejectDeferredWithMessage(
|
|
785
|
-
env, work_data->deferred, "Unable to create async work");
|
|
786
|
-
delete work_data;
|
|
787
|
-
return promise;
|
|
788
|
-
}
|
|
789
|
-
if (napi_queue_async_work(env, work_data->work) != napi_ok) {
|
|
790
|
-
// Queued failed: the complete callback will never run, so clean up here.
|
|
791
|
-
napi_delete_async_work(env, work_data->work);
|
|
792
|
-
RejectDeferredWithMessage(
|
|
793
|
-
env, work_data->deferred, "Unable to queue async work");
|
|
794
|
-
delete work_data;
|
|
795
|
-
return promise;
|
|
796
|
-
}
|
|
797
|
-
return promise;
|
|
799
|
+
return QueueWork<ApplyArchiveDeltaWork>(
|
|
800
|
+
env,
|
|
801
|
+
"applyArchiveDelta",
|
|
802
|
+
std::move(work),
|
|
803
|
+
[](ApplyArchiveDeltaWork& w) {
|
|
804
|
+
w.status =
|
|
805
|
+
pushy::archive_patch::ApplyArchivePatch(w.request, &w.host_copies);
|
|
806
|
+
},
|
|
807
|
+
[](napi_env cb_env, napi_deferred deferred, const ApplyArchiveDeltaWork& w) {
|
|
808
|
+
if (!w.status.ok) {
|
|
809
|
+
RejectDeferredWithMessage(cb_env, deferred, w.status.message.c_str());
|
|
810
|
+
return;
|
|
811
|
+
}
|
|
812
|
+
napi_resolve_deferred(cb_env, deferred, NewCopyGroupArray(cb_env, w.host_copies));
|
|
813
|
+
});
|
|
798
814
|
}
|
|
799
815
|
|
|
800
816
|
// cleanupOldEntries(rootDir, keepNames: string[], maxAgeDays)
|
|
@@ -820,64 +836,22 @@ napi_value CleanupOldEntries(napi_env env, napi_callback_info info) {
|
|
|
820
836
|
return nullptr;
|
|
821
837
|
}
|
|
822
838
|
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
839
|
+
CleanupWork work;
|
|
840
|
+
work.root_dir = root_dir;
|
|
841
|
+
work.keep_names = std::move(keep_names);
|
|
842
|
+
work.max_age_days = max_age_days;
|
|
827
843
|
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
env,
|
|
840
|
-
nullptr,
|
|
841
|
-
resource_name,
|
|
842
|
-
[](napi_env, void* data) {
|
|
843
|
-
auto* w = static_cast<CleanupWork*>(data);
|
|
844
|
-
w->status = pushy::delta::CleanupOldEntries(
|
|
845
|
-
w->root_dir, w->keep_names, w->max_age_days);
|
|
846
|
-
},
|
|
847
|
-
[](napi_env cb_env, napi_status status, void* data) {
|
|
848
|
-
auto* w = static_cast<CleanupWork*>(data);
|
|
849
|
-
if (status != napi_ok) {
|
|
850
|
-
RejectDeferredWithMessage(cb_env, w->deferred, "async work aborted");
|
|
851
|
-
} else if (w->status.ok) {
|
|
852
|
-
napi_value undefined_value = nullptr;
|
|
853
|
-
napi_get_undefined(cb_env, &undefined_value);
|
|
854
|
-
napi_resolve_deferred(cb_env, w->deferred, undefined_value);
|
|
855
|
-
} else {
|
|
856
|
-
napi_value error = nullptr;
|
|
857
|
-
napi_value message = nullptr;
|
|
858
|
-
napi_create_string_utf8(
|
|
859
|
-
cb_env, w->status.message.c_str(), NAPI_AUTO_LENGTH, &message);
|
|
860
|
-
napi_create_error(cb_env, nullptr, message, &error);
|
|
861
|
-
napi_reject_deferred(cb_env, w->deferred, error);
|
|
862
|
-
}
|
|
863
|
-
napi_delete_async_work(cb_env, w->work);
|
|
864
|
-
delete w;
|
|
865
|
-
},
|
|
866
|
-
work_data,
|
|
867
|
-
&work_data->work) != napi_ok) {
|
|
868
|
-
RejectDeferredWithMessage(
|
|
869
|
-
env, work_data->deferred, "Unable to create async work");
|
|
870
|
-
delete work_data;
|
|
871
|
-
return promise;
|
|
872
|
-
}
|
|
873
|
-
if (napi_queue_async_work(env, work_data->work) != napi_ok) {
|
|
874
|
-
napi_delete_async_work(env, work_data->work);
|
|
875
|
-
RejectDeferredWithMessage(
|
|
876
|
-
env, work_data->deferred, "Unable to queue async work");
|
|
877
|
-
delete work_data;
|
|
878
|
-
return promise;
|
|
879
|
-
}
|
|
880
|
-
return promise;
|
|
844
|
+
return QueueWork<CleanupWork>(
|
|
845
|
+
env,
|
|
846
|
+
"cleanupOldEntries",
|
|
847
|
+
std::move(work),
|
|
848
|
+
[](CleanupWork& w) {
|
|
849
|
+
w.status = pushy::delta::CleanupOldEntries(
|
|
850
|
+
w.root_dir, w.keep_names, w.max_age_days);
|
|
851
|
+
},
|
|
852
|
+
[](napi_env cb_env, napi_deferred deferred, const CleanupWork& w) {
|
|
853
|
+
SettleWithStatus(cb_env, deferred, w.status);
|
|
854
|
+
});
|
|
881
855
|
}
|
|
882
856
|
|
|
883
857
|
// sha256HexFileAsync(path) -> Promise<hex>. Rejects when the file cannot be
|
|
@@ -899,144 +873,350 @@ napi_value Sha256HexFileAsync(napi_env env, napi_callback_info info) {
|
|
|
899
873
|
return nullptr;
|
|
900
874
|
}
|
|
901
875
|
|
|
902
|
-
|
|
903
|
-
|
|
876
|
+
Sha256FileWork work;
|
|
877
|
+
work.path = std::move(path);
|
|
904
878
|
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
879
|
+
return QueueWork<Sha256FileWork>(
|
|
880
|
+
env,
|
|
881
|
+
"sha256HexFileAsync",
|
|
882
|
+
std::move(work),
|
|
883
|
+
[](Sha256FileWork& w) { w.hex = pushy::digest::Sha256File(w.path); },
|
|
884
|
+
[](napi_env cb_env, napi_deferred deferred, const Sha256FileWork& w) {
|
|
885
|
+
if (w.hex.empty()) {
|
|
886
|
+
RejectDeferredWithMessage(
|
|
887
|
+
cb_env, deferred, "sha256HexFileAsync: cannot read file");
|
|
888
|
+
} else {
|
|
889
|
+
napi_resolve_deferred(cb_env, deferred, NewString(cb_env, w.hex));
|
|
890
|
+
}
|
|
891
|
+
});
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
// sha256HexRawFdAsync(fd, offset, length) -> Promise<hex>, hashed on a libuv
|
|
895
|
+
// worker thread. Used for the embedded bundle (resourceManager.getRawFd): the
|
|
896
|
+
// UI thread neither reads the multi-MB bundle into memory nor hashes it.
|
|
897
|
+
// Rejects on any read failure or short read.
|
|
898
|
+
napi_value Sha256HexRawFdAsync(napi_env env, napi_callback_info info) {
|
|
899
|
+
napi_value args[3] = {nullptr, nullptr, nullptr};
|
|
900
|
+
size_t argc = 3;
|
|
901
|
+
if (!GetArgCount(env, info, &argc, args) || argc < 3) {
|
|
902
|
+
ThrowError(env, "sha256HexRawFdAsync: expected (fd, offset, length)");
|
|
909
903
|
return nullptr;
|
|
910
904
|
}
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
env, "sha256HexFileAsync", NAPI_AUTO_LENGTH, &resource_name);
|
|
915
|
-
if (napi_create_async_work(
|
|
916
|
-
env,
|
|
917
|
-
nullptr,
|
|
918
|
-
resource_name,
|
|
919
|
-
[](napi_env, void* data) {
|
|
920
|
-
auto* w = static_cast<Sha256FileWork*>(data);
|
|
921
|
-
w->hex = pushy::digest::Sha256File(w->path);
|
|
922
|
-
},
|
|
923
|
-
[](napi_env cb_env, napi_status status, void* data) {
|
|
924
|
-
auto* w = static_cast<Sha256FileWork*>(data);
|
|
925
|
-
if (status != napi_ok) {
|
|
926
|
-
RejectDeferredWithMessage(cb_env, w->deferred, "async work aborted");
|
|
927
|
-
} else if (w->hex.empty()) {
|
|
928
|
-
RejectDeferredWithMessage(
|
|
929
|
-
cb_env, w->deferred, "sha256HexFileAsync: cannot read file");
|
|
930
|
-
} else {
|
|
931
|
-
napi_resolve_deferred(cb_env, w->deferred, NewString(cb_env, w->hex));
|
|
932
|
-
}
|
|
933
|
-
napi_delete_async_work(cb_env, w->work);
|
|
934
|
-
delete w;
|
|
935
|
-
},
|
|
936
|
-
work_data,
|
|
937
|
-
&work_data->work) != napi_ok) {
|
|
938
|
-
RejectDeferredWithMessage(
|
|
939
|
-
env, work_data->deferred, "Unable to create async work");
|
|
940
|
-
delete work_data;
|
|
941
|
-
return promise;
|
|
905
|
+
int32_t fd = -1;
|
|
906
|
+
if (!GetInt32(env, args[0], &fd)) {
|
|
907
|
+
return nullptr;
|
|
942
908
|
}
|
|
943
|
-
if (
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
env, work_data->deferred, "Unable to queue async work");
|
|
947
|
-
delete work_data;
|
|
948
|
-
return promise;
|
|
909
|
+
if (fd < 0) {
|
|
910
|
+
ThrowError(env, "sha256HexRawFdAsync: fd must be non-negative");
|
|
911
|
+
return nullptr;
|
|
949
912
|
}
|
|
950
|
-
|
|
913
|
+
int64_t offset = 0;
|
|
914
|
+
int64_t length = 0;
|
|
915
|
+
if (!GetNonNegativeInt64(env, args[1], "offset", &offset) ||
|
|
916
|
+
!GetNonNegativeInt64(env, args[2], "length", &length)) {
|
|
917
|
+
return nullptr;
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
Sha256RangeWork work;
|
|
921
|
+
work.fd = fd;
|
|
922
|
+
work.offset = offset;
|
|
923
|
+
work.length = length;
|
|
924
|
+
|
|
925
|
+
return QueueWork<Sha256RangeWork>(
|
|
926
|
+
env,
|
|
927
|
+
"sha256HexRawFdAsync",
|
|
928
|
+
std::move(work),
|
|
929
|
+
HashFdRange,
|
|
930
|
+
[](napi_env cb_env, napi_deferred deferred, const Sha256RangeWork& w) {
|
|
931
|
+
if (!w.error.empty() || w.hex.empty()) {
|
|
932
|
+
RejectDeferredWithMessage(
|
|
933
|
+
cb_env,
|
|
934
|
+
deferred,
|
|
935
|
+
w.error.empty() ? "sha256HexRawFdAsync: no digest"
|
|
936
|
+
: w.error.c_str());
|
|
937
|
+
} else {
|
|
938
|
+
napi_resolve_deferred(cb_env, deferred, NewString(cb_env, w.hex));
|
|
939
|
+
}
|
|
940
|
+
});
|
|
951
941
|
}
|
|
952
942
|
|
|
953
|
-
|
|
943
|
+
// ---- Completion records (cpp/patch_core/install_record.h) ----
|
|
944
|
+
|
|
945
|
+
// Reads the first `count` arguments as strings, of which the first
|
|
946
|
+
// `non_empty` must not be empty; throws and returns false otherwise.
|
|
947
|
+
bool GetStringArgs(
|
|
954
948
|
napi_env env,
|
|
955
|
-
|
|
949
|
+
napi_callback_info info,
|
|
956
950
|
const char* name,
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
951
|
+
size_t count,
|
|
952
|
+
size_t non_empty,
|
|
953
|
+
std::string* out) {
|
|
954
|
+
napi_value args[5] = {nullptr, nullptr, nullptr, nullptr, nullptr};
|
|
955
|
+
size_t argc = count;
|
|
956
|
+
if (count > 5 || !GetArgCount(env, info, &argc, args) || argc < count) {
|
|
957
|
+
ThrowError(env, std::string(name) + ": wrong number of arguments");
|
|
962
958
|
return false;
|
|
963
959
|
}
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
960
|
+
for (size_t i = 0; i < count; i++) {
|
|
961
|
+
bool ok = false;
|
|
962
|
+
out[i] = GetString(env, args[i], &ok);
|
|
963
|
+
if (!ok) {
|
|
964
|
+
return false;
|
|
965
|
+
}
|
|
966
|
+
if (i < non_empty && out[i].empty()) {
|
|
967
|
+
ThrowError(env, std::string(name) + ": argument " + std::to_string(i) +
|
|
968
|
+
" must be a non-empty string");
|
|
969
|
+
return false;
|
|
970
|
+
}
|
|
968
971
|
}
|
|
969
972
|
return true;
|
|
970
973
|
}
|
|
971
974
|
|
|
972
|
-
|
|
975
|
+
// isInstallComplete(versionDir, versionHash, bundleFileName) -> boolean.
|
|
976
|
+
// Synchronous: a stat and a read of the (at most 64 KB) record, no digest.
|
|
977
|
+
napi_value InstallRecordIsComplete(napi_env env, napi_callback_info info) {
|
|
978
|
+
std::string args[3];
|
|
979
|
+
if (!GetStringArgs(env, info, "isInstallComplete", 3, 3, args)) {
|
|
980
|
+
return nullptr;
|
|
981
|
+
}
|
|
982
|
+
return NewBoolean(env, pushy::install_record::IsComplete(args[0], args[1], args[2]));
|
|
983
|
+
}
|
|
973
984
|
|
|
985
|
+
// recordedBundleSha256(versionDir) -> string; "" when the record has none.
|
|
986
|
+
// Synchronous like isInstallComplete.
|
|
987
|
+
napi_value InstallRecordBundleSha256(napi_env env, napi_callback_info info) {
|
|
988
|
+
std::string args[1];
|
|
989
|
+
if (!GetStringArgs(env, info, "recordedBundleSha256", 1, 1, args)) {
|
|
990
|
+
return nullptr;
|
|
991
|
+
}
|
|
992
|
+
return NewString(env, pushy::install_record::RecordedBundleSha256(args[0]));
|
|
993
|
+
}
|
|
974
994
|
|
|
975
|
-
//
|
|
976
|
-
//
|
|
977
|
-
|
|
995
|
+
// One install_record call on a libuv worker thread: hashing a bundle (tens
|
|
996
|
+
// of MB) or fsyncing must not block the JS thread.
|
|
997
|
+
struct InstallRecordWork {
|
|
998
|
+
std::string args[4];
|
|
999
|
+
bool grandfathered = false;
|
|
1000
|
+
pushy::delta::Status status{false, ""};
|
|
1001
|
+
};
|
|
978
1002
|
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
1003
|
+
void SettleInstallRecordWork(
|
|
1004
|
+
napi_env env,
|
|
1005
|
+
napi_deferred deferred,
|
|
1006
|
+
const InstallRecordWork& w) {
|
|
1007
|
+
SettleWithStatus(env, deferred, w.status);
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
// sealInstallRecord(stagingDir, versionHash, bundleFileName, artifactSha256)
|
|
1011
|
+
// -> Promise<void>: hashes the staged bundle and writes the record.
|
|
1012
|
+
napi_value SealInstallRecord(napi_env env, napi_callback_info info) {
|
|
1013
|
+
InstallRecordWork work;
|
|
1014
|
+
if (!GetStringArgs(env, info, "sealInstallRecord", 4, 3, work.args)) {
|
|
986
1015
|
return nullptr;
|
|
987
1016
|
}
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
1017
|
+
return QueueWork<InstallRecordWork>(
|
|
1018
|
+
env,
|
|
1019
|
+
"sealInstallRecord",
|
|
1020
|
+
std::move(work),
|
|
1021
|
+
[](InstallRecordWork& w) {
|
|
1022
|
+
w.status = pushy::install_record::Seal(
|
|
1023
|
+
w.args[0], w.args[1], w.args[2], w.args[3], std::string())
|
|
1024
|
+
.status;
|
|
1025
|
+
},
|
|
1026
|
+
SettleInstallRecordWork);
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
// promoteStaging(stagingDir, versionDir) -> Promise<void>: renames the sealed
|
|
1030
|
+
// staging directory to the (removed) version directory.
|
|
1031
|
+
napi_value PromoteStaging(napi_env env, napi_callback_info info) {
|
|
1032
|
+
InstallRecordWork work;
|
|
1033
|
+
if (!GetStringArgs(env, info, "promoteStaging", 2, 2, work.args)) {
|
|
992
1034
|
return nullptr;
|
|
993
1035
|
}
|
|
994
|
-
return
|
|
1036
|
+
return QueueWork<InstallRecordWork>(
|
|
1037
|
+
env,
|
|
1038
|
+
"promoteStaging",
|
|
1039
|
+
std::move(work),
|
|
1040
|
+
[](InstallRecordWork& w) {
|
|
1041
|
+
w.status = pushy::install_record::Promote(w.args[0], w.args[1]);
|
|
1042
|
+
},
|
|
1043
|
+
SettleInstallRecordWork);
|
|
995
1044
|
}
|
|
996
1045
|
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1046
|
+
// checkActivation(versionDir, versionHash, bundleFileName, grandfathered)
|
|
1047
|
+
// -> Promise<void>, rejected with the reason the version must not be
|
|
1048
|
+
// activated.
|
|
1049
|
+
napi_value CheckActivation(napi_env env, napi_callback_info info) {
|
|
1050
|
+
InstallRecordWork work;
|
|
1051
|
+
if (!GetStringArgs(env, info, "checkActivation", 3, 3, work.args)) {
|
|
1052
|
+
return nullptr;
|
|
1053
|
+
}
|
|
1054
|
+
napi_value args[4] = {nullptr, nullptr, nullptr, nullptr};
|
|
1055
|
+
size_t argc = 4;
|
|
1056
|
+
if (!GetArgCount(env, info, &argc, args) || argc < 4) {
|
|
1057
|
+
ThrowError(env, "checkActivation: wrong number of arguments");
|
|
1002
1058
|
return nullptr;
|
|
1003
1059
|
}
|
|
1060
|
+
if (!GetBoolean(env, args[3], &work.grandfathered)) {
|
|
1061
|
+
return nullptr;
|
|
1062
|
+
}
|
|
1063
|
+
return QueueWork<InstallRecordWork>(
|
|
1064
|
+
env,
|
|
1065
|
+
"checkActivation",
|
|
1066
|
+
std::move(work),
|
|
1067
|
+
[](InstallRecordWork& w) {
|
|
1068
|
+
pushy::install_record::Activation activation;
|
|
1069
|
+
w.status = pushy::install_record::CheckActivation(
|
|
1070
|
+
w.args[0], w.args[1], w.args[2], w.grandfathered, &activation);
|
|
1071
|
+
},
|
|
1072
|
+
SettleInstallRecordWork);
|
|
1073
|
+
}
|
|
1004
1074
|
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
size_t
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
}
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
if (!
|
|
1023
|
-
|
|
1024
|
-
ThrowError(env, "
|
|
1025
|
-
|
|
1075
|
+
// ---- Archive extraction limits (cpp/patch_core/archive_limits.h) ----
|
|
1076
|
+
|
|
1077
|
+
// Reads `count` number arguments (byte counts: integers below 2^53).
|
|
1078
|
+
bool GetInt64Args(
|
|
1079
|
+
napi_env env,
|
|
1080
|
+
napi_callback_info info,
|
|
1081
|
+
const char* name,
|
|
1082
|
+
size_t count,
|
|
1083
|
+
int64_t* out) {
|
|
1084
|
+
napi_value args[4] = {nullptr, nullptr, nullptr, nullptr};
|
|
1085
|
+
size_t argc = count;
|
|
1086
|
+
if (count > 4 || !GetArgCount(env, info, &argc, args) || argc < count) {
|
|
1087
|
+
ThrowError(env, std::string(name) + ": wrong number of arguments");
|
|
1088
|
+
return false;
|
|
1089
|
+
}
|
|
1090
|
+
for (size_t i = 0; i < count; i++) {
|
|
1091
|
+
napi_valuetype type = napi_undefined;
|
|
1092
|
+
if (!GetValueType(env, args[i], &type) || type != napi_number ||
|
|
1093
|
+
napi_get_value_int64(env, args[i], &out[i]) != napi_ok) {
|
|
1094
|
+
ThrowError(env, std::string(name) + ": argument " + std::to_string(i) +
|
|
1095
|
+
" must be a number");
|
|
1096
|
+
return false;
|
|
1026
1097
|
}
|
|
1027
1098
|
}
|
|
1099
|
+
return true;
|
|
1100
|
+
}
|
|
1028
1101
|
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1102
|
+
// checkUncompressedSize(archiveBytes, uncompressedBytes) -> string | undefined:
|
|
1103
|
+
// the reason the whole archive's expansion is refused.
|
|
1104
|
+
napi_value CheckUncompressedSize(napi_env env, napi_callback_info info) {
|
|
1105
|
+
int64_t args[2] = {0, 0};
|
|
1106
|
+
if (!GetInt64Args(env, info, "checkUncompressedSize", 2, args)) {
|
|
1107
|
+
return nullptr;
|
|
1032
1108
|
}
|
|
1033
|
-
const
|
|
1109
|
+
const pushy::delta::Status status =
|
|
1110
|
+
pushy::archive_limits::CheckUncompressedSize(args[0], args[1]);
|
|
1111
|
+
return status.ok ? nullptr : NewString(env, status.message);
|
|
1112
|
+
}
|
|
1034
1113
|
|
|
1114
|
+
// planFreeSpaceProbe(knownTotal, writtenBefore, chunkBytes, reservedUntil)
|
|
1115
|
+
// -> {probe, reserve, reservedUntil}, before one chunk of a download is
|
|
1116
|
+
// written.
|
|
1117
|
+
napi_value PlanFreeSpaceProbe(napi_env env, napi_callback_info info) {
|
|
1118
|
+
int64_t args[4] = {0, 0, 0, 0};
|
|
1119
|
+
if (!GetInt64Args(env, info, "planFreeSpaceProbe", 4, args)) {
|
|
1120
|
+
return nullptr;
|
|
1121
|
+
}
|
|
1122
|
+
const pushy::archive_limits::FreeSpaceProbe plan =
|
|
1123
|
+
pushy::archive_limits::PlanUnknownLengthFreeSpaceProbe(
|
|
1124
|
+
args[0], args[1], args[2], args[3]);
|
|
1035
1125
|
napi_value result = nullptr;
|
|
1036
|
-
|
|
1126
|
+
napi_value reserve = nullptr;
|
|
1127
|
+
napi_value reserved_until = nullptr;
|
|
1128
|
+
if (napi_create_object(env, &result) != napi_ok ||
|
|
1129
|
+
napi_create_int64(env, plan.reserve, &reserve) != napi_ok ||
|
|
1130
|
+
napi_create_int64(env, plan.reserved_until, &reserved_until) != napi_ok) {
|
|
1131
|
+
ThrowError(env, "planFreeSpaceProbe: cannot create the result");
|
|
1132
|
+
return nullptr;
|
|
1133
|
+
}
|
|
1134
|
+
SetBoolProperty(env, result, "probe", plan.probe);
|
|
1135
|
+
napi_set_named_property(env, result, "reserve", reserve);
|
|
1136
|
+
napi_set_named_property(env, result, "reservedUntil", reserved_until);
|
|
1037
1137
|
return result;
|
|
1038
1138
|
}
|
|
1039
1139
|
|
|
1140
|
+
struct ExtractedDirectoryWork {
|
|
1141
|
+
std::string directory;
|
|
1142
|
+
int64_t archive_bytes = 0;
|
|
1143
|
+
pushy::delta::Status status{false, ""};
|
|
1144
|
+
};
|
|
1145
|
+
|
|
1146
|
+
// checkExtractedDirectory(directory, archiveBytes) -> Promise<void>: walks
|
|
1147
|
+
// the freshly unpacked tree on a libuv worker thread and rejects with the
|
|
1148
|
+
// first violation.
|
|
1149
|
+
napi_value CheckExtractedDirectory(napi_env env, napi_callback_info info) {
|
|
1150
|
+
napi_value args[2] = {nullptr, nullptr};
|
|
1151
|
+
size_t argc = 2;
|
|
1152
|
+
if (!GetArgCount(env, info, &argc, args) || argc < 2) {
|
|
1153
|
+
ThrowError(env, "checkExtractedDirectory: wrong number of arguments");
|
|
1154
|
+
return nullptr;
|
|
1155
|
+
}
|
|
1156
|
+
ExtractedDirectoryWork work;
|
|
1157
|
+
bool ok = false;
|
|
1158
|
+
work.directory = GetString(env, args[0], &ok);
|
|
1159
|
+
if (!ok) {
|
|
1160
|
+
return nullptr;
|
|
1161
|
+
}
|
|
1162
|
+
napi_valuetype type = napi_undefined;
|
|
1163
|
+
if (work.directory.empty() || !GetValueType(env, args[1], &type) ||
|
|
1164
|
+
type != napi_number ||
|
|
1165
|
+
napi_get_value_int64(env, args[1], &work.archive_bytes) != napi_ok) {
|
|
1166
|
+
ThrowError(env, "checkExtractedDirectory: expected a directory and a size");
|
|
1167
|
+
return nullptr;
|
|
1168
|
+
}
|
|
1169
|
+
return QueueWork<ExtractedDirectoryWork>(
|
|
1170
|
+
env,
|
|
1171
|
+
"checkExtractedDirectory",
|
|
1172
|
+
std::move(work),
|
|
1173
|
+
[](ExtractedDirectoryWork& w) {
|
|
1174
|
+
w.status = pushy::archive_limits::CheckExtractedDirectory(
|
|
1175
|
+
w.directory, w.archive_bytes);
|
|
1176
|
+
},
|
|
1177
|
+
[](napi_env cb_env, napi_deferred deferred, const ExtractedDirectoryWork& w) {
|
|
1178
|
+
SettleWithStatus(cb_env, deferred, w.status);
|
|
1179
|
+
});
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
// Every exported callback runs through Guarded: a C++ exception from the
|
|
1183
|
+
// shared cores (std::bad_alloc, std::length_error) must not unwind into NAPI,
|
|
1184
|
+
// so it becomes a JS Error instead (CODE_AUDIT 4.4).
|
|
1185
|
+
template <napi_value (*Callback)(napi_env, napi_callback_info)>
|
|
1186
|
+
napi_value Guarded(napi_env env, napi_callback_info info) {
|
|
1187
|
+
try {
|
|
1188
|
+
return Callback(env, info);
|
|
1189
|
+
} catch (...) {
|
|
1190
|
+
std::string failure;
|
|
1191
|
+
RecordFailure(&failure);
|
|
1192
|
+
napi_throw_error(env, nullptr,
|
|
1193
|
+
failure.empty() ? "native error" : failure.c_str());
|
|
1194
|
+
}
|
|
1195
|
+
return nullptr;
|
|
1196
|
+
}
|
|
1197
|
+
|
|
1198
|
+
bool ExportFunction(
|
|
1199
|
+
napi_env env,
|
|
1200
|
+
napi_value exports,
|
|
1201
|
+
const char* name,
|
|
1202
|
+
napi_callback callback) {
|
|
1203
|
+
napi_value fn = nullptr;
|
|
1204
|
+
if (napi_create_function(env, name, NAPI_AUTO_LENGTH, callback, nullptr, &fn) !=
|
|
1205
|
+
napi_ok) {
|
|
1206
|
+
ThrowError(env, std::string("Unable to create function ") + name);
|
|
1207
|
+
return false;
|
|
1208
|
+
}
|
|
1209
|
+
|
|
1210
|
+
if (napi_set_named_property(env, exports, name, fn) != napi_ok) {
|
|
1211
|
+
ThrowError(env, std::string("Unable to export function ") + name);
|
|
1212
|
+
return false;
|
|
1213
|
+
}
|
|
1214
|
+
return true;
|
|
1215
|
+
}
|
|
1216
|
+
|
|
1217
|
+
} // namespace
|
|
1218
|
+
|
|
1219
|
+
|
|
1040
1220
|
// CRC32(zip/zlib 多项式)。同步:输入是已在内存的 rawfile 资源字节,用于
|
|
1041
1221
|
// pdiff 拷贝前与 __diff.json copiesCrc 比对(不符则整次 patch 失败落 full)。
|
|
1042
1222
|
static napi_value Crc32(napi_env env, napi_callback_info info) {
|
|
@@ -1093,139 +1273,258 @@ static napi_value GetSupportedDiffVersion(napi_env env, napi_callback_info) {
|
|
|
1093
1273
|
return result;
|
|
1094
1274
|
}
|
|
1095
1275
|
|
|
1096
|
-
// ----
|
|
1097
|
-
//
|
|
1098
|
-
//
|
|
1099
|
-
//
|
|
1276
|
+
// ---- native round (update_flow_core/native_round.h) ----
|
|
1277
|
+
// JSON text in and out. Returning undefined (nullptr without a pending
|
|
1278
|
+
// exception) means the core rejected the input; the ArkTS orchestrator fails
|
|
1279
|
+
// the round.
|
|
1280
|
+
|
|
1281
|
+
// Reads the first `count` arguments (at most 5) into `args`, and those of
|
|
1282
|
+
// them flagged in `strings` (bit i = argument i) as strings into `out[i]`
|
|
1283
|
+
// (null/undefined read as ""). False with an exception pending otherwise.
|
|
1284
|
+
bool GetFlowArgs(napi_env env, napi_callback_info info, const char* name,
|
|
1285
|
+
size_t count, unsigned strings, napi_value* args,
|
|
1286
|
+
std::string* out) {
|
|
1287
|
+
size_t argc = count;
|
|
1288
|
+
if (!GetArgCount(env, info, &argc, args) || argc < count) {
|
|
1289
|
+
ThrowError(env, std::string(name) + ": missing arguments");
|
|
1290
|
+
return false;
|
|
1291
|
+
}
|
|
1292
|
+
for (size_t i = 0; i < count; i++) {
|
|
1293
|
+
bool ok = true;
|
|
1294
|
+
if ((strings >> i) & 1u) {
|
|
1295
|
+
out[i] = GetString(env, args[i], &ok);
|
|
1296
|
+
}
|
|
1297
|
+
if (!ok) {
|
|
1298
|
+
return false;
|
|
1299
|
+
}
|
|
1300
|
+
}
|
|
1301
|
+
return true;
|
|
1302
|
+
}
|
|
1100
1303
|
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
if (
|
|
1104
|
-
|
|
1105
|
-
|
|
1304
|
+
bool GetFlowNumber(napi_env env, napi_value value, const char* name,
|
|
1305
|
+
double* out) {
|
|
1306
|
+
if (napi_get_value_double(env, value, out) != napi_ok) {
|
|
1307
|
+
ThrowError(env, std::string(name) + ": expected number");
|
|
1308
|
+
return false;
|
|
1309
|
+
}
|
|
1310
|
+
return true;
|
|
1311
|
+
}
|
|
1312
|
+
|
|
1313
|
+
// The parsed object, or Undefined (which the core rejects).
|
|
1314
|
+
flowjson::Value ParseFlowObject(const std::string& json) {
|
|
1315
|
+
bool ok = false;
|
|
1316
|
+
flowjson::Value value = flowjson::Parse(json, &ok);
|
|
1317
|
+
return ok && value.IsObject() ? value : flowjson::Value::Undefined();
|
|
1318
|
+
}
|
|
1319
|
+
|
|
1320
|
+
napi_value FlowJsonOrUndefined(napi_env env, const flowjson::Value& value) {
|
|
1321
|
+
return value.IsUndefined() ? nullptr
|
|
1322
|
+
: NewString(env, flowjson::Stringify(value));
|
|
1323
|
+
}
|
|
1324
|
+
|
|
1325
|
+
// prepareRound(configJson, envJson, randomSample)
|
|
1326
|
+
static napi_value FlowPrepareRound(napi_env env, napi_callback_info info) {
|
|
1327
|
+
napi_value args[3] = {nullptr, nullptr, nullptr};
|
|
1328
|
+
std::string text[3];
|
|
1329
|
+
double sample = 0;
|
|
1330
|
+
if (!GetFlowArgs(env, info, "prepareRound", 3, 0b011, args, text) ||
|
|
1331
|
+
!GetFlowNumber(env, args[2], "prepareRound", &sample)) {
|
|
1106
1332
|
return nullptr;
|
|
1107
1333
|
}
|
|
1108
|
-
return
|
|
1334
|
+
return FlowJsonOrUndefined(
|
|
1335
|
+
env, flowcore::PrepareRound(text[0], ParseFlowObject(text[1]), sample));
|
|
1109
1336
|
}
|
|
1110
1337
|
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1338
|
+
// stepRound(stateJson?, eventJson) — one step of the round driver
|
|
1339
|
+
// (round_engine.h); stateJson undefined/null starts fresh. Synchronous and
|
|
1340
|
+
// cheap: the round's IO stays in ArkTS.
|
|
1341
|
+
static napi_value FlowStepRound(napi_env env, napi_callback_info info) {
|
|
1342
|
+
napi_value args[2] = {nullptr, nullptr};
|
|
1343
|
+
std::string text[2];
|
|
1344
|
+
if (!GetFlowArgs(env, info, "stepRound", 2, 0b11, args, text)) {
|
|
1117
1345
|
return nullptr;
|
|
1118
1346
|
}
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1347
|
+
return NewString(env, flowcore::StepRoundJson(text[0], text[1]));
|
|
1348
|
+
}
|
|
1349
|
+
|
|
1350
|
+
// nextQueryStep(stateJson, responseText?) — responseText undefined/null for
|
|
1351
|
+
// a failed (or no) request.
|
|
1352
|
+
static napi_value FlowNextQueryStep(napi_env env, napi_callback_info info) {
|
|
1353
|
+
napi_value args[2] = {nullptr, nullptr};
|
|
1354
|
+
std::string text[2];
|
|
1355
|
+
if (!GetFlowArgs(env, info, "nextQueryStep", 2, 0b11, args, text)) {
|
|
1122
1356
|
return nullptr;
|
|
1123
1357
|
}
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1358
|
+
return FlowJsonOrUndefined(
|
|
1359
|
+
env, flowcore::NextQueryStep(
|
|
1360
|
+
ParseFlowObject(text[0]),
|
|
1361
|
+
IsNullOrUndefined(env, args[1])
|
|
1362
|
+
? flowjson::Value::Undefined()
|
|
1363
|
+
: flowjson::Value::String(std::move(text[1]))));
|
|
1364
|
+
}
|
|
1365
|
+
|
|
1366
|
+
// handleResponse(responseText, configJson, envJson, requestBody,
|
|
1367
|
+
// responseAtSeconds)
|
|
1368
|
+
static napi_value FlowHandleResponse(napi_env env, napi_callback_info info) {
|
|
1369
|
+
napi_value args[5] = {nullptr, nullptr, nullptr, nullptr, nullptr};
|
|
1370
|
+
std::string text[5];
|
|
1371
|
+
double responseAt = 0;
|
|
1372
|
+
if (!GetFlowArgs(env, info, "handleResponse", 5, 0b01111, args, text) ||
|
|
1373
|
+
!GetFlowNumber(env, args[4], "handleResponse", &responseAt)) {
|
|
1127
1374
|
return nullptr;
|
|
1128
1375
|
}
|
|
1129
|
-
return
|
|
1130
|
-
env,
|
|
1376
|
+
return FlowJsonOrUndefined(
|
|
1377
|
+
env, flowcore::HandleRoundResponse(text[0], text[1],
|
|
1378
|
+
ParseFlowObject(text[2]), text[3],
|
|
1379
|
+
responseAt));
|
|
1131
1380
|
}
|
|
1132
1381
|
|
|
1133
|
-
|
|
1134
|
-
|
|
1382
|
+
// ---- persisted native config (update_flow_core/native_config.h) ----
|
|
1383
|
+
// null/undefined arguments read as "" (an absent config): never equivalent,
|
|
1384
|
+
// not_configured at the gate, not an object for the normalizer.
|
|
1385
|
+
|
|
1386
|
+
static napi_value FlowConfigsEquivalent(napi_env env, napi_callback_info info) {
|
|
1135
1387
|
size_t argc = 2;
|
|
1136
1388
|
napi_value args[2] = {nullptr, nullptr};
|
|
1137
1389
|
if (!GetArgCount(env, info, &argc, args) || argc < 2) {
|
|
1138
|
-
ThrowError(env, "
|
|
1390
|
+
ThrowError(env, "configsEquivalent: missing arguments");
|
|
1139
1391
|
return nullptr;
|
|
1140
1392
|
}
|
|
1141
1393
|
bool ok = false;
|
|
1142
|
-
std::string
|
|
1394
|
+
std::string a = GetString(env, args[0], &ok);
|
|
1143
1395
|
if (!ok) {
|
|
1144
1396
|
return nullptr;
|
|
1145
1397
|
}
|
|
1146
|
-
|
|
1147
|
-
if (
|
|
1148
|
-
ThrowError(env, "orderEndpointCandidates: expected number sample");
|
|
1149
|
-
return nullptr;
|
|
1150
|
-
}
|
|
1151
|
-
bool parsed = false;
|
|
1152
|
-
flowjson::Value endpoints = flowjson::Parse(endpoints_json, &parsed);
|
|
1153
|
-
if (!parsed || !endpoints.IsArray()) {
|
|
1398
|
+
std::string b = GetString(env, args[1], &ok);
|
|
1399
|
+
if (!ok) {
|
|
1154
1400
|
return nullptr;
|
|
1155
1401
|
}
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1402
|
+
napi_value result = nullptr;
|
|
1403
|
+
napi_get_boolean(env, flowcore::ConfigsEquivalent(a, b), &result);
|
|
1404
|
+
return result;
|
|
1159
1405
|
}
|
|
1160
1406
|
|
|
1161
|
-
static napi_value
|
|
1162
|
-
napi_callback_info info) {
|
|
1407
|
+
static napi_value FlowRunnableConfig(napi_env env, napi_callback_info info) {
|
|
1163
1408
|
size_t argc = 1;
|
|
1164
1409
|
napi_value args[1] = {nullptr};
|
|
1165
1410
|
if (!GetArgCount(env, info, &argc, args) || argc < 1) {
|
|
1166
|
-
ThrowError(env, "
|
|
1411
|
+
ThrowError(env, "runnableConfig: missing argument");
|
|
1167
1412
|
return nullptr;
|
|
1168
1413
|
}
|
|
1169
1414
|
bool ok = false;
|
|
1170
|
-
std::string
|
|
1415
|
+
std::string config_json = GetString(env, args[0], &ok);
|
|
1171
1416
|
if (!ok) {
|
|
1172
|
-
// Exception pending (non-string argument): propagate it as a throw
|
|
1173
|
-
// instead of a boolean that the caller would treat as a verdict.
|
|
1174
1417
|
return nullptr;
|
|
1175
1418
|
}
|
|
1176
|
-
|
|
1177
|
-
napi_get_boolean(env, flowcore::IsValidResponse(response_text),
|
|
1178
|
-
&result);
|
|
1179
|
-
return result;
|
|
1419
|
+
return NewString(env, flowcore::RunnableConfigJson(config_json));
|
|
1180
1420
|
}
|
|
1181
1421
|
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1422
|
+
// Throws Error("Invalid native configuration: ...") for options the host
|
|
1423
|
+
// must fix.
|
|
1424
|
+
static napi_value FlowNormalizeConfiguration(napi_env env,
|
|
1425
|
+
napi_callback_info info) {
|
|
1426
|
+
size_t argc = 1;
|
|
1427
|
+
napi_value args[1] = {nullptr};
|
|
1428
|
+
if (!GetArgCount(env, info, &argc, args) || argc < 1) {
|
|
1429
|
+
ThrowError(env, "normalizeConfiguration: missing argument");
|
|
1188
1430
|
return nullptr;
|
|
1189
1431
|
}
|
|
1190
1432
|
bool ok = false;
|
|
1191
|
-
std::string
|
|
1433
|
+
std::string options_json = GetString(env, args[0], &ok);
|
|
1192
1434
|
if (!ok) {
|
|
1193
1435
|
return nullptr;
|
|
1194
1436
|
}
|
|
1195
|
-
std::string
|
|
1196
|
-
|
|
1437
|
+
std::string config;
|
|
1438
|
+
std::string error;
|
|
1439
|
+
if (!flowcore::NormalizeConfiguration(options_json, &config, &error)) {
|
|
1440
|
+
ThrowError(env, error);
|
|
1197
1441
|
return nullptr;
|
|
1198
1442
|
}
|
|
1199
|
-
|
|
1200
|
-
|
|
1443
|
+
return NewString(env, config);
|
|
1444
|
+
}
|
|
1445
|
+
|
|
1446
|
+
// ---- resumable download (patch_core/resume_plan.h) ----
|
|
1447
|
+
// Strings in (null/undefined read as ""), JSON text out; DownloadTask.ts
|
|
1448
|
+
// keeps the IO.
|
|
1449
|
+
|
|
1450
|
+
// planRequest(sidecar, url, partialSize)
|
|
1451
|
+
static napi_value ResumePlanRequest(napi_env env, napi_callback_info info) {
|
|
1452
|
+
napi_value args[3] = {nullptr, nullptr, nullptr};
|
|
1453
|
+
std::string text[3];
|
|
1454
|
+
double partial_size = 0;
|
|
1455
|
+
if (!GetFlowArgs(env, info, "resumePlanRequest", 3, 0b011, args, text) ||
|
|
1456
|
+
!GetFlowNumber(env, args[2], "resumePlanRequest", &partial_size)) {
|
|
1201
1457
|
return nullptr;
|
|
1202
1458
|
}
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1459
|
+
return NewString(env, pushy::resume::PlanRequestJson(
|
|
1460
|
+
text[0], text[1], static_cast<long long>(partial_size)));
|
|
1461
|
+
}
|
|
1462
|
+
|
|
1463
|
+
// classifyResponse(status, resumeOffset, contentRange, contentEncoding,
|
|
1464
|
+
// contentLength, sidecar, url, partialSize)
|
|
1465
|
+
static napi_value ResumeClassifyResponse(napi_env env, napi_callback_info info) {
|
|
1466
|
+
napi_value args[8] = {};
|
|
1467
|
+
std::string text[8];
|
|
1468
|
+
double status = 0;
|
|
1469
|
+
double resume_offset = 0;
|
|
1470
|
+
double content_length = 0;
|
|
1471
|
+
double partial_size = 0;
|
|
1472
|
+
if (!GetFlowArgs(env, info, "resumeClassifyResponse", 8, 0b01101100, args, text) ||
|
|
1473
|
+
!GetFlowNumber(env, args[0], "resumeClassifyResponse", &status) ||
|
|
1474
|
+
!GetFlowNumber(env, args[1], "resumeClassifyResponse", &resume_offset) ||
|
|
1475
|
+
!GetFlowNumber(env, args[4], "resumeClassifyResponse", &content_length) ||
|
|
1476
|
+
!GetFlowNumber(env, args[7], "resumeClassifyResponse", &partial_size)) {
|
|
1477
|
+
return nullptr;
|
|
1478
|
+
}
|
|
1479
|
+
return NewString(env, pushy::resume::ClassifyResponseJson(
|
|
1480
|
+
static_cast<int>(status),
|
|
1481
|
+
static_cast<long long>(resume_offset), text[2], text[3],
|
|
1482
|
+
static_cast<long long>(content_length), text[5], text[6],
|
|
1483
|
+
static_cast<long long>(partial_size)));
|
|
1484
|
+
}
|
|
1485
|
+
|
|
1486
|
+
// sidecar(url, etag, lastModified, previousSidecar, total)
|
|
1487
|
+
static napi_value ResumeSidecar(napi_env env, napi_callback_info info) {
|
|
1488
|
+
napi_value args[5] = {};
|
|
1489
|
+
std::string text[5];
|
|
1490
|
+
double total = 0;
|
|
1491
|
+
if (!GetFlowArgs(env, info, "resumeSidecar", 5, 0b01111, args, text) ||
|
|
1492
|
+
!GetFlowNumber(env, args[4], "resumeSidecar", &total)) {
|
|
1206
1493
|
return nullptr;
|
|
1207
1494
|
}
|
|
1208
|
-
return
|
|
1209
|
-
|
|
1210
|
-
response_text, identity, false, after_download)));
|
|
1495
|
+
return NewString(env, pushy::resume::SidecarJson(text[0], text[1], text[2], text[3],
|
|
1496
|
+
static_cast<long long>(total)));
|
|
1211
1497
|
}
|
|
1212
1498
|
|
|
1213
1499
|
napi_value Init(napi_env env, napi_value exports) {
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
!ExportFunction(env, exports, "
|
|
1217
|
-
!ExportFunction(env, exports, "
|
|
1218
|
-
!ExportFunction(env, exports, "
|
|
1219
|
-
!ExportFunction(env, exports, "
|
|
1220
|
-
!ExportFunction(env, exports, "
|
|
1221
|
-
!ExportFunction(env, exports, "
|
|
1222
|
-
!ExportFunction(env, exports, "
|
|
1223
|
-
!ExportFunction(env, exports, "
|
|
1224
|
-
!ExportFunction(env, exports, "
|
|
1225
|
-
!ExportFunction(env, exports, "
|
|
1226
|
-
!ExportFunction(env, exports, "
|
|
1227
|
-
!ExportFunction(env, exports, "
|
|
1228
|
-
!ExportFunction(env, exports, "
|
|
1500
|
+
// <generated:exports> (scripts/contract.ts; bun scripts/generate-contract.ts)
|
|
1501
|
+
if (!ExportFunction(env, exports, "syncStateWithBinaryVersion", Guarded<SyncStateWithBinaryVersion>) ||
|
|
1502
|
+
!ExportFunction(env, exports, "runStateCore", Guarded<RunStateCore>) ||
|
|
1503
|
+
!ExportFunction(env, exports, "applyArchiveDelta", Guarded<ApplyArchiveDelta>) ||
|
|
1504
|
+
!ExportFunction(env, exports, "cleanupOldEntries", Guarded<CleanupOldEntries>) ||
|
|
1505
|
+
!ExportFunction(env, exports, "sha256HexFileAsync", Guarded<Sha256HexFileAsync>) ||
|
|
1506
|
+
!ExportFunction(env, exports, "sha256HexRawFdAsync", Guarded<Sha256HexRawFdAsync>) ||
|
|
1507
|
+
!ExportFunction(env, exports, "isInstallComplete", Guarded<InstallRecordIsComplete>) ||
|
|
1508
|
+
!ExportFunction(env, exports, "recordedBundleSha256", Guarded<InstallRecordBundleSha256>) ||
|
|
1509
|
+
!ExportFunction(env, exports, "sealInstallRecord", Guarded<SealInstallRecord>) ||
|
|
1510
|
+
!ExportFunction(env, exports, "promoteStaging", Guarded<PromoteStaging>) ||
|
|
1511
|
+
!ExportFunction(env, exports, "checkActivation", Guarded<CheckActivation>) ||
|
|
1512
|
+
!ExportFunction(env, exports, "checkUncompressedSize", Guarded<CheckUncompressedSize>) ||
|
|
1513
|
+
!ExportFunction(env, exports, "checkExtractedDirectory", Guarded<CheckExtractedDirectory>) ||
|
|
1514
|
+
!ExportFunction(env, exports, "planFreeSpaceProbe", Guarded<PlanFreeSpaceProbe>) ||
|
|
1515
|
+
!ExportFunction(env, exports, "crc32", Guarded<Crc32>) ||
|
|
1516
|
+
!ExportFunction(env, exports, "getSupportedDiffVersion", Guarded<GetSupportedDiffVersion>) ||
|
|
1517
|
+
!ExportFunction(env, exports, "prepareRound", Guarded<FlowPrepareRound>) ||
|
|
1518
|
+
!ExportFunction(env, exports, "nextQueryStep", Guarded<FlowNextQueryStep>) ||
|
|
1519
|
+
!ExportFunction(env, exports, "stepRound", Guarded<FlowStepRound>) ||
|
|
1520
|
+
!ExportFunction(env, exports, "handleResponse", Guarded<FlowHandleResponse>) ||
|
|
1521
|
+
!ExportFunction(env, exports, "configsEquivalent", Guarded<FlowConfigsEquivalent>) ||
|
|
1522
|
+
!ExportFunction(env, exports, "runnableConfig", Guarded<FlowRunnableConfig>) ||
|
|
1523
|
+
!ExportFunction(env, exports, "normalizeConfiguration", Guarded<FlowNormalizeConfiguration>) ||
|
|
1524
|
+
!ExportFunction(env, exports, "resumePlanRequest", Guarded<ResumePlanRequest>) ||
|
|
1525
|
+
!ExportFunction(env, exports, "resumeClassifyResponse", Guarded<ResumeClassifyResponse>) ||
|
|
1526
|
+
!ExportFunction(env, exports, "resumeSidecar", Guarded<ResumeSidecar>)) {
|
|
1527
|
+
// </generated:exports>
|
|
1229
1528
|
return nullptr;
|
|
1230
1529
|
}
|
|
1231
1530
|
return exports;
|