@@ -499,14 +499,53 @@ class BackupService {
499499 return statuses [ category] ?? BackupItemStatus ( )
500500 }
501501
502- func getLatestBackupTime( ) -> UInt64 ? {
503- let statuses = getAllBackupStatuses ( )
504- let syncedTimestamps = BackupCategory . allCases. compactMap { category -> UInt64 ? in
505- let status = statuses [ category] ?? BackupItemStatus ( )
506- return status. synced > 0 ? status. synced : nil
502+ func getLatestBackupTime( ) async -> UInt64 ? {
503+ do {
504+ try await vssBackupClient. setup ( )
505+
506+ let timestamps = await withTaskGroup ( of: UInt64 ? . self) { group in
507+ for category in BackupCategory . allCases where category != . lightningConnections {
508+ group. addTask {
509+ await self . getRemoteBackupTimestamp ( category: category)
510+ }
511+ }
512+
513+ var results : [ UInt64 ] = [ ]
514+ for await timestamp in group {
515+ if let ts = timestamp, ts > 0 {
516+ results. append ( ts)
517+ }
518+ }
519+ return results
520+ }
521+
522+ return timestamps. max ( )
523+ } catch {
524+ Logger . warn ( " Failed to get VSS backup timestamp: \( error) " , context: " BackupService " )
525+ return nil
507526 }
527+ }
528+
529+ private func getRemoteBackupTimestamp( category: BackupCategory ) async -> UInt64 ? {
530+ do {
531+ guard let item = try await vssBackupClient. getObject ( key: category. rawValue) else {
532+ return nil
533+ }
508534
509- return syncedTimestamps. max ( )
535+ struct BackupWithCreatedAt : Codable {
536+ let createdAt : UInt64 ?
537+ }
538+
539+ let backup = try JSONDecoder ( ) . decode ( BackupWithCreatedAt . self, from: item. value)
540+ guard let createdAtMillis = backup. createdAt, createdAtMillis > 0 else {
541+ return nil
542+ }
543+ // Convert from milliseconds to seconds (matching Android behavior)
544+ return createdAtMillis / 1000
545+ } catch {
546+ Logger . debug ( " Failed to get remote backup timestamp for \( category. rawValue) : \( error) " , context: " BackupService " )
547+ return nil
548+ }
510549 }
511550
512551 func scheduleFullBackup( ) async {
@@ -576,7 +615,7 @@ class BackupService {
576615 let settingsDict = await SettingsViewModel . shared. getSettingsDictionary ( )
577616 let payload = SettingsBackupV1 (
578617 version: 1 ,
579- createdAt: UInt64 ( Date ( ) . timeIntervalSince1970) ,
618+ createdAt: UInt64 ( Date ( ) . timeIntervalSince1970 * 1000 ) ,
580619 settings: settingsDict
581620 )
582621 return try payload. encode ( )
@@ -592,7 +631,7 @@ class BackupService {
592631
593632 let payload = WidgetsBackupV1 (
594633 version: 1 ,
595- createdAt: UInt64 ( Date ( ) . timeIntervalSince1970) ,
634+ createdAt: UInt64 ( Date ( ) . timeIntervalSince1970 * 1000 ) ,
596635 widgets: androidWidgetsDict
597636 )
598637 let encoded = try payload. encode ( )
@@ -603,13 +642,13 @@ class BackupService {
603642 let transfers = try TransferStorage . shared. getAll ( )
604643 let payload = WalletBackupV1 (
605644 version: 1 ,
606- createdAt: UInt64 ( Date ( ) . timeIntervalSince1970) ,
645+ createdAt: UInt64 ( Date ( ) . timeIntervalSince1970 * 1000 ) ,
607646 transfers: transfers
608647 )
609648 return try JSONEncoder ( ) . encode ( payload)
610649
611650 case . metadata:
612- let currentTime = UInt64 ( Date ( ) . timeIntervalSince1970)
651+ let currentTime = UInt64 ( Date ( ) . timeIntervalSince1970 * 1000 )
613652 let cache = await SettingsViewModel . shared. getAppCacheData ( )
614653
615654 let preActivityMetadata = try await CoreService . shared. activity. getAllPreActivityMetadata ( )
@@ -629,7 +668,7 @@ class BackupService {
629668
630669 let payload = BlocktankBackupV1 (
631670 version: 1 ,
632- createdAt: UInt64 ( Date ( ) . timeIntervalSince1970) ,
671+ createdAt: UInt64 ( Date ( ) . timeIntervalSince1970 * 1000 ) ,
633672 orders: orders,
634673 cjitEntries: cjitEntries,
635674 info: info
@@ -644,7 +683,7 @@ class BackupService {
644683
645684 let payload = ActivityBackupV1 (
646685 version: 1 ,
647- createdAt: UInt64 ( Date ( ) . timeIntervalSince1970) ,
686+ createdAt: UInt64 ( Date ( ) . timeIntervalSince1970 * 1000 ) ,
648687 activities: activities,
649688 activityTags: activityTags,
650689 closedChannels: closedChannels
0 commit comments