@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.
Files changed (56) hide show
  1. package/CapawesomeCapacitorLiveUpdate.podspec +2 -2
  2. package/README.md +429 -20
  3. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdate.java +894 -279
  4. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdateConfig.java +35 -0
  5. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdateHttpClient.java +56 -11
  6. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdatePlugin.java +274 -38
  7. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/LiveUpdatePreferences.java +52 -3
  8. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/api/GetChannelsResponseItem.java +28 -0
  9. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/api/GetLatestBundleResponse.java +11 -2
  10. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/events/DownloadBundleProgressEvent.java +32 -0
  11. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/events/NextBundleSetEvent.java +26 -0
  12. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/options/FetchChannelsOptions.java +38 -0
  13. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/options/SetConfigOptions.java +19 -0
  14. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/options/SyncOptions.java +4 -0
  15. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/ChannelResult.java +28 -0
  16. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/FetchChannelsResult.java +28 -0
  17. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/FetchLatestBundleResult.java +8 -0
  18. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/GetBlockedBundlesResult.java +27 -0
  19. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/GetConfigResult.java +40 -0
  20. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/GetDownloadedBundlesResult.java +27 -0
  21. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/IsSyncingResult.java +26 -0
  22. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/classes/results/ReadyResult.java +32 -0
  23. package/android/src/main/java/io/capawesome/capacitorjs/plugins/liveupdate/interfaces/DownloadProgressCallback.java +5 -0
  24. package/dist/docs.json +853 -50
  25. package/dist/esm/definitions.d.ts +411 -1
  26. package/dist/esm/definitions.js.map +1 -1
  27. package/dist/esm/web.d.ts +10 -2
  28. package/dist/esm/web.js +24 -0
  29. package/dist/esm/web.js.map +1 -1
  30. package/dist/plugin.cjs.js +24 -0
  31. package/dist/plugin.cjs.js.map +1 -1
  32. package/dist/plugin.js +24 -0
  33. package/dist/plugin.js.map +1 -1
  34. package/ios/Plugin/Classes/Events/DownloadBundleProgressEvent.swift +25 -0
  35. package/ios/Plugin/Classes/Events/NextBundleSetEvent.swift +16 -0
  36. package/ios/Plugin/Classes/Options/FetchChannelsOptions.swift +26 -0
  37. package/ios/Plugin/Classes/Options/SetConfigOptions.swift +14 -0
  38. package/ios/Plugin/Classes/Options/SyncOptions.swift +4 -0
  39. package/ios/Plugin/Classes/Results/ChannelResult.swift +19 -0
  40. package/ios/Plugin/Classes/Results/FetchChannelsResult.swift +16 -0
  41. package/ios/Plugin/Classes/Results/{FetchLatestBundle.swift → FetchLatestBundleResult.swift} +6 -1
  42. package/ios/Plugin/Classes/Results/GetBlockedBundlesResult.swift +16 -0
  43. package/ios/Plugin/Classes/Results/GetConfigResult.swift +19 -0
  44. package/ios/Plugin/Classes/Results/GetDownloadedBundlesResult.swift +16 -0
  45. package/ios/Plugin/Classes/Results/IsSyncingResult.swift +16 -0
  46. package/ios/Plugin/Classes/Results/ReadyResult.swift +22 -0
  47. package/ios/Plugin/LiveUpdate.swift +456 -152
  48. package/ios/Plugin/LiveUpdateConfig.swift +3 -0
  49. package/ios/Plugin/LiveUpdateHttpClient.swift +21 -4
  50. package/ios/Plugin/LiveUpdatePlugin.swift +174 -14
  51. package/ios/Plugin/LiveUpdatePreferences.swift +54 -12
  52. package/ios/Plugin/Protocols/Api/GetChannelsResponseItem.swift +4 -0
  53. package/ios/Plugin/Protocols/Api/GetLatestBundleResponse.swift +1 -0
  54. package/package.json +5 -5
  55. package/ios/Plugin/LiveUpdatePlugin.h +0 -10
  56. package/ios/Plugin/LiveUpdatePlugin.m +0 -27
@@ -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
  }
@@ -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 Response execute(String url) throws IOException {
45
- int httpTimeout = config.getHttpTimeout();
46
- OkHttpClient okHttpClient = new OkHttpClient.Builder()
47
- .connectTimeout(httpTimeout, TimeUnit.MILLISECONDS)
48
- .readTimeout(httpTimeout, TimeUnit.MILLISECONDS)
49
- .writeTimeout(httpTimeout, TimeUnit.MILLISECONDS)
50
- .build();
51
- Request request = new Request.Builder().url(url).build();
52
- return okHttpClient.newCall(request).execute();
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) throws IOException {
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
- int progress = (int) ((totalBytesRead * 100) / contentLength);
108
+ if (callback != null) {
109
+ callback.onProgress(totalBytesRead, contentLength);
110
+ }
66
111
  }
67
112
  sink.flush();
68
113
  sink.close();