Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Bitkit/Models/BackupPayloads.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ struct WalletBackupV1: Codable {
struct MetadataBackupV1: Codable {
let version: Int
let createdAt: UInt64
let tagMetadata: [ActivityTagsMetadata]
let tagMetadata: [PreActivityMetadata]
Copy link
Collaborator

@ovitrif ovitrif Nov 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we name it preActivityMetadata? I can do the same in Android ;)

Or even activityMetadata, since we won't likely have a different activity metadata soon 🤷🏻

let cache: AppCacheData
}

Expand Down Expand Up @@ -47,5 +47,6 @@ struct ActivityBackupV1: Codable {
let version: Int
let createdAt: UInt64
let activities: [Activity]
let activityTags: [ActivityTags]
let closedChannels: [ClosedChannelDetails]
}
31 changes: 20 additions & 11 deletions Bitkit/Services/BackupService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -202,26 +202,23 @@ class BackupService {
let payload = try JSONDecoder().decode(ActivityBackupV1.self, from: dataBytes)

try await CoreService.shared.activity.upsertList(payload.activities)
try await CoreService.shared.activity.upsertTags(payload.activityTags)
try await CoreService.shared.activity.upsertClosedChannelList(payload.closedChannels)

Logger.debug(
"Restored \(payload.activities.count) activities, \(payload.closedChannels.count) closed channels",
"Restored \(payload.activities.count) activities, \(payload.activityTags.count) activity tags, \(payload.closedChannels.count) closed channels",
context: "BackupService"
)
}

try await performRestore(category: .metadata) { dataBytes in
let payload = try JSONDecoder().decode(MetadataBackupV1.self, from: dataBytes)

let activityTags = payload.tagMetadata.map { item in
ActivityTags(activityId: item.id, tags: item.tags)
}

try await CoreService.shared.activity.upsertTags(activityTags)
try await CoreService.shared.activity.upsertPreActivityMetadata(payload.tagMetadata)

await SettingsViewModel.shared.restoreAppCacheData(payload.cache)

Logger.debug("Restored caches and \(payload.tagMetadata.count) tags metadata records", context: "BackupService")
Logger.debug("Restored caches, \(payload.tagMetadata.count) pre-activity metadata", context: "BackupService")
}

try await performRestore(category: .blocktank) { dataBytes in
Expand Down Expand Up @@ -306,16 +303,25 @@ class BackupService {
}
.store(in: &cancellables)

// ACTIVITIES (triggers both metadata and activity backups)
// ACTIVITIES
CoreService.shared.activity.activitiesChangedPublisher
.debounce(for: .milliseconds(500), scheduler: DispatchQueue.main)
.sink { [weak self] _ in
guard let self, !self.isRestoring else { return }
markBackupRequired(category: .metadata)
markBackupRequired(category: .activity)
}
.store(in: &cancellables)

// METADATA (from ActivityService)
CoreService.shared.activity.metadataChangedPublisher
.debounce(for: .milliseconds(500), scheduler: DispatchQueue.main)
.sink { [weak self] _ in
guard let self, !self.isRestoring else { return }
markBackupRequired(category: .metadata)
}
.store(in: &cancellables)

// APP STATE (UserDefaults changes, etc.)
SettingsViewModel.shared.appStatePublisher
.debounce(for: .milliseconds(500), scheduler: DispatchQueue.main)
.sink { [weak self] _ in
Expand Down Expand Up @@ -585,13 +591,14 @@ class BackupService {

case .metadata:
let currentTime = UInt64(Date().timeIntervalSince1970)
let tagMetadata = try await CoreService.shared.activity.getAllTagMetadata()
let cache = await SettingsViewModel.shared.getAppCacheData()

let preActivityMetadata = try await CoreService.shared.activity.getAllPreActivityMetadata()

let payload = MetadataBackupV1(
version: 1,
createdAt: currentTime,
tagMetadata: tagMetadata,
tagMetadata: preActivityMetadata,
cache: cache
)
return try JSONEncoder().encode(payload)
Expand All @@ -614,11 +621,13 @@ class BackupService {
case .activity:
let activities = try await CoreService.shared.activity.get()
let closedChannels = try await CoreService.shared.activity.closedChannels()
let activityTags = try await CoreService.shared.activity.getAllActivitiesTags()

let payload = ActivityBackupV1(
version: 1,
createdAt: UInt64(Date().timeIntervalSince1970),
activities: activities,
activityTags: activityTags,
closedChannels: closedChannels
)

Expand Down
Loading
Loading