46 lines
1.5 KiB
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)
|
|
}
|
|
}
|
|
}
|