@capawesome/capacitor-live-update 6.8.0 → 6.9.1
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/CapawesomeCapacitorLiveUpdate.podspec +2 -2
- package/README.md +429 -20
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdate.java +894 -279
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdateConfig.java +35 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdateHttpClient.java +56 -11
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdatePlugin.java +274 -38
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdatePreferences.java +52 -3
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/api/GetChannelsResponseItem.java +28 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/api/GetLatestBundleResponse.java +11 -2
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/events/DownloadBundleProgressEvent.java +32 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/events/NextBundleSetEvent.java +26 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/options/FetchChannelsOptions.java +38 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/options/SetConfigOptions.java +19 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/options/SyncOptions.java +4 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/ChannelResult.java +28 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/FetchChannelsResult.java +28 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/FetchLatestBundleResult.java +8 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/GetBlockedBundlesResult.java +27 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/GetConfigResult.java +40 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/GetDownloadedBundlesResult.java +27 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/IsSyncingResult.java +26 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/ReadyResult.java +32 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/interfaces/DownloadProgressCallback.java +5 -0
- package/dist/docs.json +853 -50
- package/dist/esm/definitions.d.ts +411 -1
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/web.d.ts +10 -2
- package/dist/esm/web.js +24 -0
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +24 -0
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +24 -0
- package/dist/plugin.js.map +1 -1
- package/ios/Plugin/Classes/Events/DownloadBundleProgressEvent.swift +25 -0
- package/ios/Plugin/Classes/Events/NextBundleSetEvent.swift +16 -0
- package/ios/Plugin/Classes/Options/FetchChannelsOptions.swift +26 -0
- package/ios/Plugin/Classes/Options/SetConfigOptions.swift +14 -0
- package/ios/Plugin/Classes/Options/SyncOptions.swift +4 -0
- package/ios/Plugin/Classes/Results/ChannelResult.swift +19 -0
- package/ios/Plugin/Classes/Results/FetchChannelsResult.swift +16 -0
- package/ios/Plugin/Classes/Results/{FetchLatestBundle.swift → FetchLatestBundleResult.swift} +6 -1
- package/ios/Plugin/Classes/Results/GetBlockedBundlesResult.swift +16 -0
- package/ios/Plugin/Classes/Results/GetConfigResult.swift +19 -0
- package/ios/Plugin/Classes/Results/GetDownloadedBundlesResult.swift +16 -0
- package/ios/Plugin/Classes/Results/IsSyncingResult.swift +16 -0
- package/ios/Plugin/Classes/Results/ReadyResult.swift +22 -0
- package/ios/Plugin/LiveUpdate.swift +456 -152
- package/ios/Plugin/LiveUpdateConfig.swift +3 -0
- package/ios/Plugin/LiveUpdateHttpClient.swift +21 -4
- package/ios/Plugin/LiveUpdatePlugin.swift +174 -14
- package/ios/Plugin/LiveUpdatePreferences.swift +54 -12
- package/ios/Plugin/Protocols/Api/GetChannelsResponseItem.swift +4 -0
- package/ios/Plugin/Protocols/Api/GetLatestBundleResponse.swift +1 -0
- package/package.json +5 -5
- package/ios/Plugin/LiveUpdatePlugin.h +0 -10
- package/ios/Plugin/LiveUpdatePlugin.m +0 -27
package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdateConfig.java
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
package io.capawesome.capacitorjs.plugins.liveupdate;
|
|
2
2
|
|
|
3
|
+
import androidx.annotation.NonNull;
|
|
3
4
|
import androidx.annotation.Nullable;
|
|
4
5
|
import java.security.Key;
|
|
5
6
|
|
|
@@ -8,8 +9,13 @@ public class LiveUpdateConfig {
|
|
|
8
9
|
@Nullable
|
|
9
10
|
private String appId = null;
|
|
10
11
|
|
|
12
|
+
private boolean autoBlockRolledBackBundles = false;
|
|
13
|
+
|
|
11
14
|
private boolean autoDeleteBundles = false;
|
|
12
15
|
|
|
16
|
+
@NonNull
|
|
17
|
+
private String autoUpdateStrategy = "none";
|
|
18
|
+
|
|
13
19
|
@Nullable
|
|
14
20
|
private String defaultChannel = null;
|
|
15
21
|
|
|
@@ -25,15 +31,27 @@ public class LiveUpdateConfig {
|
|
|
25
31
|
private int readyTimeout = 10000;
|
|
26
32
|
private boolean resetOnUpdate = true;
|
|
27
33
|
|
|
34
|
+
@NonNull
|
|
35
|
+
private String serverDomain = "api.cloud.capawesome.io";
|
|
36
|
+
|
|
28
37
|
@Nullable
|
|
29
38
|
public String getAppId() {
|
|
30
39
|
return appId;
|
|
31
40
|
}
|
|
32
41
|
|
|
42
|
+
public boolean getAutoBlockRolledBackBundles() {
|
|
43
|
+
return autoBlockRolledBackBundles;
|
|
44
|
+
}
|
|
45
|
+
|
|
33
46
|
public boolean getAutoDeleteBundles() {
|
|
34
47
|
return autoDeleteBundles;
|
|
35
48
|
}
|
|
36
49
|
|
|
50
|
+
@NonNull
|
|
51
|
+
public String getAutoUpdateStrategy() {
|
|
52
|
+
return autoUpdateStrategy;
|
|
53
|
+
}
|
|
54
|
+
|
|
37
55
|
@Nullable
|
|
38
56
|
public String getDefaultChannel() {
|
|
39
57
|
return defaultChannel;
|
|
@@ -65,14 +83,27 @@ public class LiveUpdateConfig {
|
|
|
65
83
|
return resetOnUpdate;
|
|
66
84
|
}
|
|
67
85
|
|
|
86
|
+
@NonNull
|
|
87
|
+
public String getServerDomain() {
|
|
88
|
+
return serverDomain;
|
|
89
|
+
}
|
|
90
|
+
|
|
68
91
|
public void setAppId(@Nullable String appId) {
|
|
69
92
|
this.appId = appId;
|
|
70
93
|
}
|
|
71
94
|
|
|
95
|
+
public void setAutoBlockRolledBackBundles(boolean autoBlockRolledBackBundles) {
|
|
96
|
+
this.autoBlockRolledBackBundles = autoBlockRolledBackBundles;
|
|
97
|
+
}
|
|
98
|
+
|
|
72
99
|
public void setAutoDeleteBundles(boolean autoDeleteBundles) {
|
|
73
100
|
this.autoDeleteBundles = autoDeleteBundles;
|
|
74
101
|
}
|
|
75
102
|
|
|
103
|
+
public void setAutoUpdateStrategy(@NonNull String autoUpdateStrategy) {
|
|
104
|
+
this.autoUpdateStrategy = autoUpdateStrategy;
|
|
105
|
+
}
|
|
106
|
+
|
|
76
107
|
public void setDefaultChannel(@Nullable String defaultChannel) {
|
|
77
108
|
this.defaultChannel = defaultChannel;
|
|
78
109
|
}
|
|
@@ -100,4 +131,8 @@ public class LiveUpdateConfig {
|
|
|
100
131
|
public void setResetOnUpdate(boolean resetOnUpdate) {
|
|
101
132
|
this.resetOnUpdate = resetOnUpdate;
|
|
102
133
|
}
|
|
134
|
+
|
|
135
|
+
public void setServerDomain(@NonNull String serverDomain) {
|
|
136
|
+
this.serverDomain = serverDomain;
|
|
137
|
+
}
|
|
103
138
|
}
|
package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdateHttpClient.java
CHANGED
|
@@ -2,9 +2,15 @@ package io.capawesome.capacitorjs.plugins.liveupdate;
|
|
|
2
2
|
|
|
3
3
|
import androidx.annotation.NonNull;
|
|
4
4
|
import androidx.annotation.Nullable;
|
|
5
|
+
import com.getcapacitor.Logger;
|
|
6
|
+
import io.capawesome.capacitorjs.plugins.liveupdate.interfaces.DownloadProgressCallback;
|
|
7
|
+
import io.capawesome.capacitorjs.plugins.liveupdate.interfaces.EmptyCallback;
|
|
8
|
+
import io.capawesome.capacitorjs.plugins.liveupdate.interfaces.NonEmptyCallback;
|
|
5
9
|
import java.io.File;
|
|
6
10
|
import java.io.IOException;
|
|
7
11
|
import java.util.concurrent.TimeUnit;
|
|
12
|
+
import okhttp3.Call;
|
|
13
|
+
import okhttp3.Callback;
|
|
8
14
|
import okhttp3.OkHttpClient;
|
|
9
15
|
import okhttp3.Request;
|
|
10
16
|
import okhttp3.Response;
|
|
@@ -19,6 +25,12 @@ public class LiveUpdateHttpClient {
|
|
|
19
25
|
@NonNull
|
|
20
26
|
private final LiveUpdateConfig config;
|
|
21
27
|
|
|
28
|
+
@NonNull
|
|
29
|
+
private final OkHttpClient okHttpClient;
|
|
30
|
+
|
|
31
|
+
@Nullable
|
|
32
|
+
private String deviceId;
|
|
33
|
+
|
|
22
34
|
@Nullable
|
|
23
35
|
public static String getChecksumFromResponse(Response response) {
|
|
24
36
|
String checksum = response.header("X-Checksum");
|
|
@@ -39,20 +51,51 @@ public class LiveUpdateHttpClient {
|
|
|
39
51
|
|
|
40
52
|
public LiveUpdateHttpClient(@NonNull LiveUpdateConfig config) {
|
|
41
53
|
this.config = config;
|
|
54
|
+
int httpTimeout = config.getHttpTimeout();
|
|
55
|
+
|
|
56
|
+
// Increase max requests per host to allow multiple parallel downloads from the same host
|
|
57
|
+
okhttp3.Dispatcher dispatcher = new okhttp3.Dispatcher();
|
|
58
|
+
dispatcher.setMaxRequestsPerHost(30);
|
|
59
|
+
|
|
60
|
+
this.okHttpClient =
|
|
61
|
+
new OkHttpClient.Builder()
|
|
62
|
+
.dispatcher(dispatcher)
|
|
63
|
+
.connectTimeout(httpTimeout, TimeUnit.MILLISECONDS)
|
|
64
|
+
.readTimeout(httpTimeout, TimeUnit.MILLISECONDS)
|
|
65
|
+
.writeTimeout(httpTimeout, TimeUnit.MILLISECONDS)
|
|
66
|
+
.build();
|
|
42
67
|
}
|
|
43
68
|
|
|
44
|
-
public
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
69
|
+
public void setDeviceId(@NonNull String deviceId) {
|
|
70
|
+
this.deviceId = deviceId;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
public Call enqueue(String url, NonEmptyCallback<Response> callback) {
|
|
74
|
+
Request.Builder builder = new Request.Builder().url(url);
|
|
75
|
+
if (deviceId != null) {
|
|
76
|
+
builder.addHeader("X-Device-Id", deviceId);
|
|
77
|
+
}
|
|
78
|
+
Request request = builder.build();
|
|
79
|
+
|
|
80
|
+
Call call = okHttpClient.newCall(request);
|
|
81
|
+
call.enqueue(
|
|
82
|
+
new Callback() {
|
|
83
|
+
@Override
|
|
84
|
+
public void onResponse(@NonNull Call call, @NonNull Response response) {
|
|
85
|
+
callback.success(response);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@Override
|
|
89
|
+
public void onFailure(@NonNull Call call, @NonNull IOException e) {
|
|
90
|
+
callback.error(new Exception(e));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
);
|
|
94
|
+
return call;
|
|
53
95
|
}
|
|
54
96
|
|
|
55
|
-
public static void writeResponseBodyToFile(ResponseBody body, File file
|
|
97
|
+
public static void writeResponseBodyToFile(ResponseBody body, File file, @Nullable DownloadProgressCallback callback)
|
|
98
|
+
throws IOException {
|
|
56
99
|
long contentLength = body.contentLength();
|
|
57
100
|
BufferedSource source = body.source();
|
|
58
101
|
BufferedSink sink = Okio.buffer(Okio.sink(file));
|
|
@@ -62,7 +105,9 @@ public class LiveUpdateHttpClient {
|
|
|
62
105
|
for (long bytesRead; (bytesRead = source.read(sinkBuffer, bufferSize)) != -1;) {
|
|
63
106
|
sink.emit();
|
|
64
107
|
totalBytesRead += bytesRead;
|
|
65
|
-
|
|
108
|
+
if (callback != null) {
|
|
109
|
+
callback.onProgress(totalBytesRead, contentLength);
|
|
110
|
+
}
|
|
66
111
|
}
|
|
67
112
|
sink.flush();
|
|
68
113
|
sink.close();
|