react-native-update 10.37.20 → 10.38.0-beta.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 +4 -4
- package/README.md +2 -12
- package/android/bin/.settings/org.eclipse.buildship.core.prefs +13 -0
- package/android/build.gradle +4 -0
- package/android/jni/Android.mk +14 -1
- package/android/jni/Application.mk +5 -2
- package/android/lib/arm64-v8a/librnupdate.so +0 -0
- package/android/lib/armeabi-v7a/librnupdate.so +0 -0
- package/android/lib/x86/librnupdate.so +0 -0
- package/android/lib/x86_64/librnupdate.so +0 -0
- package/android/src/main/java/cn/reactnative/modules/update/ArchivePatchPlanResult.java +6 -0
- package/android/src/main/java/cn/reactnative/modules/update/CopyGroupResult.java +6 -0
- package/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java +136 -136
- package/android/src/main/java/cn/reactnative/modules/update/NativeUpdateCore.java +34 -0
- package/android/src/main/java/cn/reactnative/modules/update/StateCoreResult.java +16 -0
- package/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java +131 -48
- package/cpp/patch_core/archive_patch_core.cpp +125 -0
- package/cpp/patch_core/archive_patch_core.h +59 -0
- package/cpp/patch_core/patch_core.cpp +533 -0
- package/cpp/patch_core/patch_core.h +68 -0
- package/cpp/patch_core/patch_core_android.cpp +112 -0
- package/cpp/patch_core/state_core.cpp +110 -0
- package/cpp/patch_core/state_core.h +58 -0
- package/cpp/patch_core/tests/patch_core_test.cpp +473 -0
- package/cpp/patch_core/update_core_android.cpp +469 -0
- package/harmony/pushy.har +0 -0
- package/ios/RCTPushy/RCTPushy.mm +233 -143
- package/package.json +17 -15
- package/react-native-update.podspec +3 -0
- package/scripts/build-harmony-har.js +12 -0
- package/scripts/prepublish.ts +49 -3
- package/scripts/prune-host-stl.sh +6 -0
- package/scripts/test-patch-core.sh +39 -0
- package/src/client.ts +129 -76
- package/src/core.ts +2 -1
- package/src/endpoint.ts +171 -0
- package/src/utils.ts +40 -27
- 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-sdk.txt +0 -357
- package/android/jni/lzma/DOC/lzma-specification.txt +0 -1176
- package/android/jni/lzma/DOC/lzma.txt +0 -328
- 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/error.js +0 -1609
- package/harmony/har-wrapper/AppScope/app.json5 +0 -8
- package/harmony/har-wrapper/build-profile.json5 +0 -35
- package/harmony/har-wrapper/hvigor/hvigor-config.json5 +0 -5
- package/harmony/har-wrapper/hvigorfile.ts +0 -6
- package/harmony/har-wrapper/oh-package.json5 +0 -4
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/.cmake/api/v1/reply/cache-v2-77b153ce45aba0ed28ef.json +0 -1415
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/.cmake/api/v1/reply/cmakeFiles-v1-b65a07793384e0ce3e08.json +0 -809
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/.cmake/api/v1/reply/codemodel-v2-ce0e89410afd8bf3a057.json +0 -60
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/.cmake/api/v1/reply/directory-.-Release-f5ebdc15457944623624.json +0 -14
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/.cmake/api/v1/reply/index-2026-03-18T12-50-36-0050.json +0 -89
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/.cmake/api/v1/reply/target-rnupdate-Release-267153624504c9c3ffdd.json +0 -222
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/.ninja_deps +0 -0
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/.ninja_log +0 -8
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeCache.txt +0 -415
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/3.28.2/CMakeCCompiler.cmake +0 -74
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/3.28.2/CMakeCXXCompiler.cmake +0 -85
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/3.28.2/CMakeDetermineCompilerABI_C.bin +0 -0
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/3.28.2/CMakeDetermineCompilerABI_CXX.bin +0 -0
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/3.28.2/CMakeSystem.cmake +0 -15
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/3.28.2/CompilerIdC/CMakeCCompilerId.c +0 -880
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/3.28.2/CompilerIdC/CMakeCCompilerId.o +0 -0
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/3.28.2/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -869
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/3.28.2/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/CMakeConfigureLog.yaml +0 -388
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/TargetDirectories.txt +0 -3
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/cmake.check_cache +0 -1
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/rnupdate.dir/__w/react-native-update/react-native-update/android/jni/HDiffPatch/file_for_patch.c.o +0 -0
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/rnupdate.dir/__w/react-native-update/react-native-update/android/jni/HDiffPatch/libHDiffPatch/HPatch/patch.c.o +0 -0
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/rnupdate.dir/__w/react-native-update/react-native-update/android/jni/hpatch.c.o +0 -0
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/rnupdate.dir/__w/react-native-update/react-native-update/android/jni/lzma/C/Lzma2Dec.c.o +0 -0
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/rnupdate.dir/__w/react-native-update/react-native-update/android/jni/lzma/C/LzmaDec.c.o +0 -0
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/rnupdate.dir/pushy.c.o +0 -0
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/CMakeFiles/rules.ninja +0 -64
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/additional_project_files.txt +0 -0
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/build.ninja +0 -206
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/build_file_index.txt +0 -1
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/cmake_install.cmake +0 -54
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/compile_commands.json +0 -38
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/configure_fingerprint.json +0 -1
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/hvigor_native_config.json +0 -1
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/metadata_generation_command.txt +0 -17
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/native_work_dir.txt +0 -1
- package/harmony/pushy/.cxx/default/default/release/arm64-v8a/output.log +0 -14
- package/harmony/pushy/.cxx/default/default/release/hvigor/arm64-v8a/summary.cmake +0 -0
- package/harmony/pushy/BuildProfile.ets +0 -17
- package/harmony/pushy/OAT.xml +0 -38
- package/harmony/pushy/README.md +0 -0
- package/harmony/pushy/build-profile.json5 +0 -15
- package/harmony/pushy/hvigor-plugin.ts +0 -34
- package/harmony/pushy/hvigorfile.ts +0 -1
- package/harmony/pushy/index.ets +0 -2
- package/harmony/pushy/oh-package-lock.json5 +0 -20
- package/harmony/pushy/oh-package.json5 +0 -13
- package/harmony/pushy/src/main/cpp/CMakeLists.txt +0 -51
- package/harmony/pushy/src/main/cpp/PushyPackage.h +0 -55
- package/harmony/pushy/src/main/cpp/PushyTurboModule.cpp +0 -142
- package/harmony/pushy/src/main/cpp/PushyTurboModule.h +0 -38
- package/harmony/pushy/src/main/cpp/pushy.c +0 -117
- package/harmony/pushy/src/main/cpp/pushy.h +0 -8
- package/harmony/pushy/src/main/ets/DownloadTask.ts +0 -570
- package/harmony/pushy/src/main/ets/DownloadTaskParams.ts +0 -19
- package/harmony/pushy/src/main/ets/EventHub.ts +0 -39
- package/harmony/pushy/src/main/ets/Logger.ts +0 -52
- package/harmony/pushy/src/main/ets/PushyFileJSBundleProvider.ets +0 -50
- package/harmony/pushy/src/main/ets/PushyPackage.ts +0 -22
- package/harmony/pushy/src/main/ets/PushyTurboModule.ts +0 -171
- package/harmony/pushy/src/main/ets/SaveFile.ts +0 -34
- package/harmony/pushy/src/main/ets/UpdateContext.ts +0 -262
- package/harmony/pushy/src/main/ets/UpdateModuleImpl.ts +0 -123
- package/harmony/pushy/src/main/module.json5 +0 -7
- package/harmony/pushy/src/main/resources/base/element/string.json +0 -8
- package/harmony/pushy/src/main/resources/en_US/element/string.json +0 -8
- package/harmony/pushy/src/main/resources/zh_CN/element/string.json +0 -8
- package/harmony/pushy/ts.ts +0 -3
- package/src/__tests__/core.test.ts +0 -103
- package/src/__tests__/utils.test.ts +0 -36
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
#include <jni.h>
|
|
2
|
+
|
|
3
|
+
#include <string>
|
|
4
|
+
#include <vector>
|
|
5
|
+
|
|
6
|
+
#include "archive_patch_core.h"
|
|
7
|
+
#include "state_core.h"
|
|
8
|
+
|
|
9
|
+
namespace {
|
|
10
|
+
|
|
11
|
+
enum class StateOperation {
|
|
12
|
+
kSwitchVersion = 1,
|
|
13
|
+
kMarkSuccess = 2,
|
|
14
|
+
kRollback = 3,
|
|
15
|
+
kClearFirstTime = 4,
|
|
16
|
+
kClearRollbackMark = 5,
|
|
17
|
+
kResolveLaunch = 6,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
std::string JStringToString(JNIEnv* env, jstring value) {
|
|
21
|
+
if (value == nullptr) {
|
|
22
|
+
return std::string();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const char* chars = env->GetStringUTFChars(value, nullptr);
|
|
26
|
+
if (chars == nullptr) {
|
|
27
|
+
return std::string();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
std::string result(chars);
|
|
31
|
+
env->ReleaseStringUTFChars(value, chars);
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
std::vector<std::string> JArrayToVector(JNIEnv* env, jobjectArray values) {
|
|
36
|
+
std::vector<std::string> result;
|
|
37
|
+
if (values == nullptr) {
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const jsize size = env->GetArrayLength(values);
|
|
42
|
+
result.reserve(static_cast<size_t>(size));
|
|
43
|
+
for (jsize index = 0; index < size; ++index) {
|
|
44
|
+
auto* item = static_cast<jstring>(env->GetObjectArrayElement(values, index));
|
|
45
|
+
result.push_back(JStringToString(env, item));
|
|
46
|
+
env->DeleteLocalRef(item);
|
|
47
|
+
}
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
void ThrowRuntimeException(JNIEnv* env, const std::string& message) {
|
|
52
|
+
jclass exception = env->FindClass("java/lang/RuntimeException");
|
|
53
|
+
if (exception != nullptr) {
|
|
54
|
+
env->ThrowNew(exception, message.c_str());
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
void SetStringField(
|
|
59
|
+
JNIEnv* env,
|
|
60
|
+
jobject target,
|
|
61
|
+
jclass target_class,
|
|
62
|
+
const char* field_name,
|
|
63
|
+
const std::string& value) {
|
|
64
|
+
jfieldID field =
|
|
65
|
+
env->GetFieldID(target_class, field_name, "Ljava/lang/String;");
|
|
66
|
+
if (field == nullptr) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (value.empty()) {
|
|
70
|
+
env->SetObjectField(target, field, nullptr);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
jstring java_value = env->NewStringUTF(value.c_str());
|
|
75
|
+
env->SetObjectField(target, field, java_value);
|
|
76
|
+
env->DeleteLocalRef(java_value);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
void SetBooleanField(
|
|
80
|
+
JNIEnv* env,
|
|
81
|
+
jobject target,
|
|
82
|
+
jclass target_class,
|
|
83
|
+
const char* field_name,
|
|
84
|
+
bool value) {
|
|
85
|
+
jfieldID field = env->GetFieldID(target_class, field_name, "Z");
|
|
86
|
+
if (field != nullptr) {
|
|
87
|
+
env->SetBooleanField(target, field, value ? JNI_TRUE : JNI_FALSE);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
std::string GetStringField(
|
|
92
|
+
JNIEnv* env,
|
|
93
|
+
jobject target,
|
|
94
|
+
jclass target_class,
|
|
95
|
+
const char* field_name) {
|
|
96
|
+
jfieldID field =
|
|
97
|
+
env->GetFieldID(target_class, field_name, "Ljava/lang/String;");
|
|
98
|
+
if (field == nullptr) {
|
|
99
|
+
return std::string();
|
|
100
|
+
}
|
|
101
|
+
auto* value = static_cast<jstring>(env->GetObjectField(target, field));
|
|
102
|
+
std::string result = JStringToString(env, value);
|
|
103
|
+
if (value != nullptr) {
|
|
104
|
+
env->DeleteLocalRef(value);
|
|
105
|
+
}
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
bool GetBooleanField(
|
|
110
|
+
JNIEnv* env,
|
|
111
|
+
jobject target,
|
|
112
|
+
jclass target_class,
|
|
113
|
+
const char* field_name) {
|
|
114
|
+
jfieldID field = env->GetFieldID(target_class, field_name, "Z");
|
|
115
|
+
return field != nullptr && env->GetBooleanField(target, field) == JNI_TRUE;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
pushy::state::State ReadState(
|
|
119
|
+
const std::string& package_version,
|
|
120
|
+
const std::string& build_time,
|
|
121
|
+
const std::string& current_version,
|
|
122
|
+
const std::string& last_version,
|
|
123
|
+
bool first_time,
|
|
124
|
+
bool first_time_ok,
|
|
125
|
+
const std::string& rolled_back_version) {
|
|
126
|
+
pushy::state::State state;
|
|
127
|
+
state.package_version = package_version;
|
|
128
|
+
state.build_time = build_time;
|
|
129
|
+
state.current_version = current_version;
|
|
130
|
+
state.last_version = last_version;
|
|
131
|
+
state.first_time = first_time;
|
|
132
|
+
state.first_time_ok = first_time_ok;
|
|
133
|
+
state.rolled_back_version = rolled_back_version;
|
|
134
|
+
return state;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
pushy::state::State ReadStateFromResult(JNIEnv* env, jobject state_result) {
|
|
138
|
+
if (state_result == nullptr) {
|
|
139
|
+
return pushy::state::State();
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
jclass state_class = env->GetObjectClass(state_result);
|
|
143
|
+
if (state_class == nullptr) {
|
|
144
|
+
return pushy::state::State();
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
pushy::state::State state = ReadState(
|
|
148
|
+
GetStringField(env, state_result, state_class, "packageVersion"),
|
|
149
|
+
GetStringField(env, state_result, state_class, "buildTime"),
|
|
150
|
+
GetStringField(env, state_result, state_class, "currentVersion"),
|
|
151
|
+
GetStringField(env, state_result, state_class, "lastVersion"),
|
|
152
|
+
GetBooleanField(env, state_result, state_class, "firstTime"),
|
|
153
|
+
GetBooleanField(env, state_result, state_class, "firstTimeOk"),
|
|
154
|
+
GetStringField(env, state_result, state_class, "rolledBackVersion"));
|
|
155
|
+
env->DeleteLocalRef(state_class);
|
|
156
|
+
return state;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
jobject NewStateCoreResult(
|
|
160
|
+
JNIEnv* env,
|
|
161
|
+
const pushy::state::State& state,
|
|
162
|
+
bool changed,
|
|
163
|
+
const std::string& stale_version_to_delete,
|
|
164
|
+
const std::string& load_version,
|
|
165
|
+
bool did_rollback,
|
|
166
|
+
bool consumed_first_time) {
|
|
167
|
+
jclass result_class =
|
|
168
|
+
env->FindClass("cn/reactnative/modules/update/StateCoreResult");
|
|
169
|
+
if (result_class == nullptr) {
|
|
170
|
+
return nullptr;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
jmethodID constructor = env->GetMethodID(result_class, "<init>", "()V");
|
|
174
|
+
if (constructor == nullptr) {
|
|
175
|
+
return nullptr;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
jobject result = env->NewObject(result_class, constructor);
|
|
179
|
+
if (result == nullptr) {
|
|
180
|
+
return nullptr;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
SetStringField(env, result, result_class, "packageVersion", state.package_version);
|
|
184
|
+
SetStringField(env, result, result_class, "buildTime", state.build_time);
|
|
185
|
+
SetStringField(env, result, result_class, "currentVersion", state.current_version);
|
|
186
|
+
SetStringField(env, result, result_class, "lastVersion", state.last_version);
|
|
187
|
+
SetBooleanField(env, result, result_class, "firstTime", state.first_time);
|
|
188
|
+
SetBooleanField(env, result, result_class, "firstTimeOk", state.first_time_ok);
|
|
189
|
+
SetStringField(
|
|
190
|
+
env,
|
|
191
|
+
result,
|
|
192
|
+
result_class,
|
|
193
|
+
"rolledBackVersion",
|
|
194
|
+
state.rolled_back_version);
|
|
195
|
+
SetBooleanField(env, result, result_class, "changed", changed);
|
|
196
|
+
SetStringField(
|
|
197
|
+
env,
|
|
198
|
+
result,
|
|
199
|
+
result_class,
|
|
200
|
+
"staleVersionToDelete",
|
|
201
|
+
stale_version_to_delete);
|
|
202
|
+
SetStringField(env, result, result_class, "loadVersion", load_version);
|
|
203
|
+
SetBooleanField(env, result, result_class, "didRollback", did_rollback);
|
|
204
|
+
SetBooleanField(
|
|
205
|
+
env,
|
|
206
|
+
result,
|
|
207
|
+
result_class,
|
|
208
|
+
"consumedFirstTime",
|
|
209
|
+
consumed_first_time);
|
|
210
|
+
return result;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
jobject NewArchivePatchPlanResult(
|
|
214
|
+
JNIEnv* env,
|
|
215
|
+
const pushy::archive_patch::ArchivePatchPlan& plan) {
|
|
216
|
+
jclass result_class =
|
|
217
|
+
env->FindClass("cn/reactnative/modules/update/ArchivePatchPlanResult");
|
|
218
|
+
if (result_class == nullptr) {
|
|
219
|
+
return nullptr;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
jmethodID constructor = env->GetMethodID(result_class, "<init>", "()V");
|
|
223
|
+
if (constructor == nullptr) {
|
|
224
|
+
return nullptr;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
jobject result = env->NewObject(result_class, constructor);
|
|
228
|
+
if (result == nullptr) {
|
|
229
|
+
return nullptr;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
SetStringField(
|
|
233
|
+
env,
|
|
234
|
+
result,
|
|
235
|
+
result_class,
|
|
236
|
+
"mergeSourceSubdir",
|
|
237
|
+
plan.merge_source_subdir);
|
|
238
|
+
SetBooleanField(env, result, result_class, "enableMerge", plan.enable_merge);
|
|
239
|
+
return result;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
jobject NewCopyGroupResult(
|
|
243
|
+
JNIEnv* env,
|
|
244
|
+
const pushy::archive_patch::CopyGroup& group) {
|
|
245
|
+
jclass result_class =
|
|
246
|
+
env->FindClass("cn/reactnative/modules/update/CopyGroupResult");
|
|
247
|
+
if (result_class == nullptr) {
|
|
248
|
+
return nullptr;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
jmethodID constructor = env->GetMethodID(result_class, "<init>", "()V");
|
|
252
|
+
if (constructor == nullptr) {
|
|
253
|
+
return nullptr;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
jobject result = env->NewObject(result_class, constructor);
|
|
257
|
+
if (result == nullptr) {
|
|
258
|
+
return nullptr;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
SetStringField(env, result, result_class, "from", group.from);
|
|
262
|
+
jfieldID to_paths_field =
|
|
263
|
+
env->GetFieldID(result_class, "toPaths", "[Ljava/lang/String;");
|
|
264
|
+
if (to_paths_field != nullptr) {
|
|
265
|
+
jclass string_class = env->FindClass("java/lang/String");
|
|
266
|
+
jobjectArray to_paths = env->NewObjectArray(
|
|
267
|
+
static_cast<jsize>(group.to_paths.size()), string_class, nullptr);
|
|
268
|
+
if (to_paths != nullptr) {
|
|
269
|
+
for (jsize index = 0; index < static_cast<jsize>(group.to_paths.size());
|
|
270
|
+
++index) {
|
|
271
|
+
jstring value = env->NewStringUTF(group.to_paths[index].c_str());
|
|
272
|
+
env->SetObjectArrayElement(to_paths, index, value);
|
|
273
|
+
env->DeleteLocalRef(value);
|
|
274
|
+
}
|
|
275
|
+
env->SetObjectField(result, to_paths_field, to_paths);
|
|
276
|
+
env->DeleteLocalRef(to_paths);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
return result;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
pushy::archive_patch::ArchivePatchType ToArchivePatchType(jint patch_type) {
|
|
284
|
+
switch (patch_type) {
|
|
285
|
+
case 1:
|
|
286
|
+
return pushy::archive_patch::ArchivePatchType::kFull;
|
|
287
|
+
case 2:
|
|
288
|
+
return pushy::archive_patch::ArchivePatchType::kPatchFromPackage;
|
|
289
|
+
case 3:
|
|
290
|
+
return pushy::archive_patch::ArchivePatchType::kPatchFromPpk;
|
|
291
|
+
default:
|
|
292
|
+
return pushy::archive_patch::ArchivePatchType::kFull;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
pushy::patch::PatchManifest BuildManifest(
|
|
297
|
+
const std::vector<std::string>& copy_froms,
|
|
298
|
+
const std::vector<std::string>& copy_tos,
|
|
299
|
+
const std::vector<std::string>& deletes) {
|
|
300
|
+
pushy::patch::PatchManifest manifest;
|
|
301
|
+
for (size_t index = 0; index < copy_froms.size(); ++index) {
|
|
302
|
+
manifest.copies.push_back(
|
|
303
|
+
pushy::patch::CopyOperation{copy_froms[index], copy_tos[index]});
|
|
304
|
+
}
|
|
305
|
+
manifest.deletes = deletes;
|
|
306
|
+
return manifest;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
jobject MakeStateResult(
|
|
310
|
+
JNIEnv* env,
|
|
311
|
+
const pushy::state::State& state,
|
|
312
|
+
bool changed = false,
|
|
313
|
+
const std::string& stale_version_to_delete = std::string(),
|
|
314
|
+
const std::string& load_version = std::string(),
|
|
315
|
+
bool did_rollback = false,
|
|
316
|
+
bool consumed_first_time = false) {
|
|
317
|
+
return NewStateCoreResult(
|
|
318
|
+
env,
|
|
319
|
+
state,
|
|
320
|
+
changed,
|
|
321
|
+
stale_version_to_delete,
|
|
322
|
+
load_version,
|
|
323
|
+
did_rollback,
|
|
324
|
+
consumed_first_time);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
} // namespace
|
|
328
|
+
|
|
329
|
+
extern "C" JNIEXPORT jobject JNICALL
|
|
330
|
+
Java_cn_reactnative_modules_update_UpdateContext_syncStateWithBinaryVersion(
|
|
331
|
+
JNIEnv* env,
|
|
332
|
+
jclass,
|
|
333
|
+
jstring package_version,
|
|
334
|
+
jstring build_time,
|
|
335
|
+
jobject state_result) {
|
|
336
|
+
pushy::state::State state = ReadStateFromResult(env, state_result);
|
|
337
|
+
pushy::state::BinaryVersionSyncResult result = pushy::state::SyncBinaryVersion(
|
|
338
|
+
state,
|
|
339
|
+
JStringToString(env, package_version),
|
|
340
|
+
JStringToString(env, build_time));
|
|
341
|
+
return MakeStateResult(env, result.state, result.changed);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
extern "C" JNIEXPORT jobject JNICALL
|
|
345
|
+
Java_cn_reactnative_modules_update_UpdateContext_runStateCore(
|
|
346
|
+
JNIEnv* env,
|
|
347
|
+
jclass,
|
|
348
|
+
jint operation,
|
|
349
|
+
jobject state_result,
|
|
350
|
+
jstring string_arg,
|
|
351
|
+
jboolean flag_a,
|
|
352
|
+
jboolean flag_b) {
|
|
353
|
+
const pushy::state::State state = ReadStateFromResult(env, state_result);
|
|
354
|
+
switch (static_cast<StateOperation>(operation)) {
|
|
355
|
+
case StateOperation::kSwitchVersion:
|
|
356
|
+
return MakeStateResult(
|
|
357
|
+
env,
|
|
358
|
+
pushy::state::SwitchVersion(state, JStringToString(env, string_arg)));
|
|
359
|
+
case StateOperation::kMarkSuccess: {
|
|
360
|
+
const pushy::state::MarkSuccessResult result =
|
|
361
|
+
pushy::state::MarkSuccess(state);
|
|
362
|
+
return MakeStateResult(
|
|
363
|
+
env,
|
|
364
|
+
result.state,
|
|
365
|
+
false,
|
|
366
|
+
result.stale_version_to_delete);
|
|
367
|
+
}
|
|
368
|
+
case StateOperation::kRollback: {
|
|
369
|
+
const pushy::state::State next = pushy::state::Rollback(state);
|
|
370
|
+
return MakeStateResult(
|
|
371
|
+
env, next, false, std::string(), next.current_version, true);
|
|
372
|
+
}
|
|
373
|
+
case StateOperation::kClearFirstTime:
|
|
374
|
+
return MakeStateResult(env, pushy::state::ClearFirstTime(state));
|
|
375
|
+
case StateOperation::kClearRollbackMark:
|
|
376
|
+
return MakeStateResult(env, pushy::state::ClearRollbackMark(state));
|
|
377
|
+
case StateOperation::kResolveLaunch: {
|
|
378
|
+
const pushy::state::LaunchDecision decision =
|
|
379
|
+
pushy::state::ResolveLaunchState(
|
|
380
|
+
state, flag_a == JNI_TRUE, flag_b == JNI_TRUE);
|
|
381
|
+
return MakeStateResult(
|
|
382
|
+
env,
|
|
383
|
+
decision.state,
|
|
384
|
+
false,
|
|
385
|
+
std::string(),
|
|
386
|
+
decision.load_version,
|
|
387
|
+
decision.did_rollback,
|
|
388
|
+
decision.consumed_first_time);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
ThrowRuntimeException(env, "Unknown state operation");
|
|
393
|
+
return nullptr;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
extern "C" JNIEXPORT jobject JNICALL
|
|
397
|
+
Java_cn_reactnative_modules_update_DownloadTask_buildArchivePatchPlan(
|
|
398
|
+
JNIEnv* env,
|
|
399
|
+
jclass,
|
|
400
|
+
jint patch_type,
|
|
401
|
+
jobjectArray entry_names,
|
|
402
|
+
jobjectArray copy_froms,
|
|
403
|
+
jobjectArray copy_tos,
|
|
404
|
+
jobjectArray deletes) {
|
|
405
|
+
const std::vector<std::string> from_values = JArrayToVector(env, copy_froms);
|
|
406
|
+
const std::vector<std::string> to_values = JArrayToVector(env, copy_tos);
|
|
407
|
+
if (from_values.size() != to_values.size()) {
|
|
408
|
+
ThrowRuntimeException(env, "copy_froms and copy_tos length mismatch");
|
|
409
|
+
return nullptr;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
pushy::patch::PatchManifest manifest =
|
|
413
|
+
BuildManifest(from_values, to_values, JArrayToVector(env, deletes));
|
|
414
|
+
pushy::archive_patch::ArchivePatchPlan plan;
|
|
415
|
+
pushy::patch::Status status = pushy::archive_patch::BuildArchivePatchPlan(
|
|
416
|
+
ToArchivePatchType(patch_type),
|
|
417
|
+
manifest,
|
|
418
|
+
JArrayToVector(env, entry_names),
|
|
419
|
+
&plan);
|
|
420
|
+
if (!status.ok) {
|
|
421
|
+
ThrowRuntimeException(env, status.message);
|
|
422
|
+
return nullptr;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
return NewArchivePatchPlanResult(env, plan);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
extern "C" JNIEXPORT jobjectArray JNICALL
|
|
429
|
+
Java_cn_reactnative_modules_update_DownloadTask_buildCopyGroups(
|
|
430
|
+
JNIEnv* env,
|
|
431
|
+
jclass,
|
|
432
|
+
jobjectArray copy_froms,
|
|
433
|
+
jobjectArray copy_tos) {
|
|
434
|
+
const std::vector<std::string> from_values = JArrayToVector(env, copy_froms);
|
|
435
|
+
const std::vector<std::string> to_values = JArrayToVector(env, copy_tos);
|
|
436
|
+
if (from_values.size() != to_values.size()) {
|
|
437
|
+
ThrowRuntimeException(env, "copy_froms and copy_tos length mismatch");
|
|
438
|
+
return nullptr;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
pushy::patch::PatchManifest manifest = BuildManifest(
|
|
442
|
+
from_values, to_values, std::vector<std::string>());
|
|
443
|
+
std::vector<pushy::archive_patch::CopyGroup> groups;
|
|
444
|
+
pushy::patch::Status status =
|
|
445
|
+
pushy::archive_patch::BuildCopyGroups(manifest, &groups);
|
|
446
|
+
if (!status.ok) {
|
|
447
|
+
ThrowRuntimeException(env, status.message);
|
|
448
|
+
return nullptr;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
jclass result_class =
|
|
452
|
+
env->FindClass("cn/reactnative/modules/update/CopyGroupResult");
|
|
453
|
+
if (result_class == nullptr) {
|
|
454
|
+
return nullptr;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
jobjectArray result = env->NewObjectArray(
|
|
458
|
+
static_cast<jsize>(groups.size()), result_class, nullptr);
|
|
459
|
+
if (result == nullptr) {
|
|
460
|
+
return nullptr;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
for (jsize index = 0; index < static_cast<jsize>(groups.size()); ++index) {
|
|
464
|
+
jobject group = NewCopyGroupResult(env, groups[index]);
|
|
465
|
+
env->SetObjectArrayElement(result, index, group);
|
|
466
|
+
env->DeleteLocalRef(group);
|
|
467
|
+
}
|
|
468
|
+
return result;
|
|
469
|
+
}
|
package/harmony/pushy.har
CHANGED
|
Binary file
|