feat(ios): implement getContentCache and clearContentCache methods

Implemented content cache management methods matching Android functionality:

getContentCache():
- Retrieves latest cached content from Core Data
- Returns id, fetchedAt, ttlSeconds, payload, and meta
- Returns empty object if no cache exists
- Uses async Task for Core Data access

clearContentCache():
- Deletes all content cache entries from Core Data
- Uses NSBatchDeleteRequest for efficient deletion
- Saves context after deletion

iOS Adaptations:
- Uses Core Data (ContentCache entity) instead of SQLite
- Async/await pattern for Core Data operations
- JSON deserialization for payload
- Timestamp conversion (Date to milliseconds)

Progress: 21/52 methods implemented (40% complete)
This commit is contained in:
Matthew Raymer
2025-11-11 02:08:41 -08:00
parent ebab224916
commit d2b1ab07cd

View File

@@ -839,6 +839,89 @@ public class DailyNotificationPlugin: CAPPlugin {
call.resolve()
}
// MARK: - Content Management Methods
/**
* Get content cache
*
* Returns the latest cached content from Core Data.
*
* Equivalent to Android's getContentCache method.
*/
@objc func getContentCache(_ call: CAPPluginCall) {
print("DNP-PLUGIN: Getting content cache")
Task {
do {
let context = persistenceController.container.viewContext
let request: NSFetchRequest<ContentCache> = ContentCache.fetchRequest()
request.sortDescriptors = [NSSortDescriptor(keyPath: \ContentCache.fetchedAt, ascending: false)]
request.fetchLimit = 1
let results = try context.fetch(request)
if let latest = results.first {
let payload = try JSONSerialization.jsonObject(with: latest.payload!) as? [String: Any] ?? [:]
let result: [String: Any] = [
"id": latest.id ?? "",
"fetchedAt": Int64((latest.fetchedAt?.timeIntervalSince1970 ?? 0) * 1000),
"ttlSeconds": latest.ttlSeconds,
"payload": payload,
"meta": latest.meta ?? ""
]
DispatchQueue.main.async {
call.resolve(result)
}
} else {
// Return empty result if no cache
DispatchQueue.main.async {
call.resolve([:])
}
}
} catch {
print("DNP-PLUGIN: Failed to get content cache: \(error)")
DispatchQueue.main.async {
call.reject("Content cache retrieval failed: \(error.localizedDescription)")
}
}
}
}
/**
* Clear content cache
*
* Clears all content cache entries from Core Data.
*
* Equivalent to Android's clearContentCache method.
*/
@objc func clearContentCache(_ call: CAPPluginCall) {
print("DNP-PLUGIN: Clearing content cache")
Task {
do {
let context = persistenceController.container.viewContext
let request: NSFetchRequest<NSFetchRequestResult> = ContentCache.fetchRequest()
let deleteRequest = NSBatchDeleteRequest(fetchRequest: request)
try context.execute(deleteRequest)
try context.save()
print("DNP-PLUGIN: Content cache cleared successfully")
DispatchQueue.main.async {
call.resolve()
}
} catch {
print("DNP-PLUGIN: Failed to clear content cache: \(error)")
DispatchQueue.main.async {
call.reject("Failed to clear content cache: \(error.localizedDescription)")
}
}
}
}
// MARK: - Private Implementation Methods
private func setupBackgroundTasks() {