pulse-updates 1.0.8 → 1.0.9
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.
|
@@ -541,8 +541,18 @@ class PulseController private constructor() {
|
|
|
541
541
|
result.fold(
|
|
542
542
|
onSuccess = { checkResult ->
|
|
543
543
|
if (checkResult.isAvailable && checkResult.manifest != null) {
|
|
544
|
+
// Compare commitTime: if embedded is newer, don't show update
|
|
545
|
+
val embeddedCommitTime = embeddedManifest?.commitTime ?: 0L
|
|
546
|
+
val otaCommitTime = checkResult.manifest.commitTime?.time ?: 0L
|
|
547
|
+
|
|
548
|
+
if (embeddedCommitTime > 0 && otaCommitTime > 0 && embeddedCommitTime >= otaCommitTime) {
|
|
549
|
+
pulseLog(TAG, "checkForUpdate: embedded is newer or same (embedded=$embeddedCommitTime >= ota=$otaCommitTime), no update needed")
|
|
550
|
+
callback(Result.success(CheckResult(isAvailable = false)))
|
|
551
|
+
return@checkForUpdate
|
|
552
|
+
}
|
|
553
|
+
|
|
544
554
|
lastCheckManifest = checkResult.manifest
|
|
545
|
-
pulseLog(TAG, "checkForUpdate: cached manifest for fetch")
|
|
555
|
+
pulseLog(TAG, "checkForUpdate: cached manifest for fetch (ota=$otaCommitTime > embedded=$embeddedCommitTime)")
|
|
546
556
|
}
|
|
547
557
|
},
|
|
548
558
|
onFailure = { }
|
|
@@ -749,6 +759,11 @@ class PulseController private constructor() {
|
|
|
749
759
|
bundleHash = update.bundleHash,
|
|
750
760
|
scopeKey = update.scopeKey
|
|
751
761
|
)
|
|
762
|
+
|
|
763
|
+
// Load manifest from database for metadata (build number, etc.)
|
|
764
|
+
update.manifest?.let { manifest ->
|
|
765
|
+
launchedManifestJson = manifest.toString()
|
|
766
|
+
}
|
|
752
767
|
}
|
|
753
768
|
}
|
|
754
769
|
|
|
@@ -517,9 +517,25 @@ public final class PulseController {
|
|
|
517
517
|
config: config,
|
|
518
518
|
currentUpdateId: launchedUpdate?.updateId
|
|
519
519
|
) { [weak self] (result: Result<PulseCheckResult, Error>) in
|
|
520
|
+
guard let self = self else {
|
|
521
|
+
completion(result)
|
|
522
|
+
return
|
|
523
|
+
}
|
|
524
|
+
|
|
520
525
|
// Cache the manifest for subsequent fetchUpdate call
|
|
521
|
-
if case .success(let checkResult) = result, checkResult.isAvailable {
|
|
522
|
-
|
|
526
|
+
if case .success(let checkResult) = result, checkResult.isAvailable, let otaManifest = checkResult.manifest {
|
|
527
|
+
// Compare commitTime: if embedded is newer, don't show update
|
|
528
|
+
let embeddedCommitTime = self.embeddedManifest?.commitTime ?? Date.distantPast
|
|
529
|
+
let otaCommitTime = otaManifest.commitTime ?? Date.distantPast
|
|
530
|
+
|
|
531
|
+
if embeddedCommitTime >= otaCommitTime {
|
|
532
|
+
pulseLog("checkForUpdate: embedded is newer or same (embedded=\(embeddedCommitTime) >= ota=\(otaCommitTime)), no update needed")
|
|
533
|
+
completion(.success(PulseCheckResult(isAvailable: false)))
|
|
534
|
+
return
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
self.lastCheckManifest = otaManifest
|
|
538
|
+
pulseLog("checkForUpdate: cached manifest for fetch (ota=\(otaCommitTime) > embedded=\(embeddedCommitTime))")
|
|
523
539
|
}
|
|
524
540
|
completion(result)
|
|
525
541
|
}
|
|
@@ -805,6 +821,13 @@ public final class PulseController {
|
|
|
805
821
|
bundleHash: update.bundleHash,
|
|
806
822
|
scopeKey: update.scopeKey
|
|
807
823
|
)
|
|
824
|
+
|
|
825
|
+
// Load manifest from database for metadata (build number, etc.)
|
|
826
|
+
if let manifest = update.manifest,
|
|
827
|
+
let data = try? JSONSerialization.data(withJSONObject: manifest, options: []),
|
|
828
|
+
let jsonString = String(data: data, encoding: .utf8) {
|
|
829
|
+
self.launchedManifestJson = jsonString
|
|
830
|
+
}
|
|
808
831
|
}
|
|
809
832
|
}
|
|
810
833
|
|
package/package.json
CHANGED
|
@@ -226,6 +226,13 @@ async function main() {
|
|
|
226
226
|
const isDrawable = ['png', 'jpg', 'jpeg', 'gif', 'webp', 'svg'].includes(type);
|
|
227
227
|
assetInfo.resourcesFolder = isDrawable ? 'drawable' : 'raw';
|
|
228
228
|
assetInfo.resourcesFilename = getAndroidResourceIdentifier(relative, name);
|
|
229
|
+
// Also set mainBundleDir/mainBundleFilename for Kotlin code compatibility
|
|
230
|
+
// Assets are copied to pulse/assets/<relative_path> in the APK
|
|
231
|
+
const relativeDir = path.dirname(relative);
|
|
232
|
+
assetInfo.mainBundleDir = relativeDir && relativeDir !== '.'
|
|
233
|
+
? `pulse/assets/${relativeDir}`
|
|
234
|
+
: 'pulse/assets';
|
|
235
|
+
assetInfo.mainBundleFilename = path.basename(relative);
|
|
229
236
|
}
|
|
230
237
|
|
|
231
238
|
assets.push(assetInfo);
|