mirror of
https://github.com/maxgoedjen/secretive.git
synced 2025-09-15 08:50:57 +00:00
* XPC updater POC * WIP * obo * WIP * Working * . * . * . * Cleanup * Cleanup * Throw restrict * Remove dead protocol. * . * Fix ECDSA test. * Scripts
45 lines
1.6 KiB
Swift
45 lines
1.6 KiB
Swift
import XPC
|
|
import OSLog
|
|
import Brief
|
|
|
|
private let logger = Logger(subsystem: "com.maxgoedjen.secretive.ReleasesDownloader", category: "ReleasesDownloader")
|
|
|
|
enum Constants {
|
|
static let updateURL = URL(string: "https://api.github.com/repos/maxgoedjen/secretive/releases")!
|
|
}
|
|
|
|
func handleRequest(_ request: XPCListener.IncomingSessionRequest) -> XPCListener.IncomingSessionRequest.Decision {
|
|
logger.log("ReleasesDownloader received inbound request")
|
|
return request.accept { xpcDictionary in
|
|
xpcDictionary.handoffReply(to: .global(qos: .userInteractive)) {
|
|
logger.log("ReleasesDownloader accepted inbound request")
|
|
Task {
|
|
do {
|
|
let (data, _) = try await URLSession.shared.data(from: Constants.updateURL)
|
|
let releases = try JSONDecoder().decode([Release].self, from: data)
|
|
xpcDictionary.reply(releases)
|
|
} catch {
|
|
logger.error("ReleasesDownloader failed with unknown error \(error)")
|
|
xpcDictionary.reply([] as [Release])
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
do {
|
|
if #available(macOS 26.0, *) {
|
|
_ = try XPCListener(
|
|
service: "com.maxgoedjen.Secretive.ReleasesDownloader",
|
|
requirement: .isFromSameTeam(),
|
|
incomingSessionHandler: handleRequest(_:)
|
|
)
|
|
} else {
|
|
_ = try XPCListener(service: "com.maxgoedjen.Secretive.ReleasesDownloader", incomingSessionHandler: handleRequest(_:))
|
|
}
|
|
logger.log("ReleasesDownloader initialized")
|
|
dispatchMain()
|
|
} catch {
|
|
logger.error("Failed to create ReleasesDownloader, error: \(error)")
|
|
}
|