Tusker/Tusker/BackgroundManager.swift

46 lines
1.5 KiB
Swift

//
// BackgroundManager.swift
// Tusker
//
// Created by Shadowfacts on 5/15/23.
// Copyright © 2023 Shadowfacts. All rights reserved.
//
import Foundation
import BackgroundTasks
import OSLog
import ComposeUI
private let logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "BackgroundManager")
struct BackgroundManager {
static let shared = BackgroundManager()
private init() {}
static let cleanupAttachmentsIdentifier = "\(Bundle.main.bundleIdentifier!).cleanup-attachments"
func scheduleTasks() {
BGTaskScheduler.shared.getPendingTaskRequests { requests in
if !requests.contains(where: { $0.identifier == Self.cleanupAttachmentsIdentifier }) {
let request = BGProcessingTaskRequest(identifier: Self.cleanupAttachmentsIdentifier)
do {
try BGTaskScheduler.shared.submit(request)
} catch {
logger.error("Failed to schedule cleanup attachments: \(String(describing: error), privacy: .public)")
}
}
}
}
func registerHandlers() {
BGTaskScheduler.shared.register(forTaskWithIdentifier: Self.cleanupAttachmentsIdentifier, using: nil, launchHandler: handleCleanupAttachments(_:))
}
private func handleCleanupAttachments(_ task: BGTask) {
DraftsPersistentContainer.shared.removeOrphanedAttachments() {
task.setTaskCompleted(success: true)
}
}
}