mirror of
https://github.com/maxgoedjen/secretive.git
synced 2026-03-07 02:07:22 +01:00
.
This commit is contained in:
@@ -1,27 +0,0 @@
|
||||
import Foundation
|
||||
import Brief
|
||||
|
||||
final class ReleasesDownloader: NSObject, ReleasesDownloaderProtocol {
|
||||
|
||||
@objc func downloadReleases(with reply: @escaping (Data?, (any Error)?) -> Void) {
|
||||
Task {
|
||||
do {
|
||||
let (data, _) = try await URLSession.shared.data(from: Constants.updateURL)
|
||||
let releases = try JSONDecoder().decode([Release].self, from: data)
|
||||
print(releases)
|
||||
let jsonOut = try JSONEncoder().encode(releases)
|
||||
reply(jsonOut, nil)
|
||||
} catch {
|
||||
reply(nil, error)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension ReleasesDownloader {
|
||||
|
||||
enum Constants {
|
||||
static let updateURL = URL(string: "https://api.github.com/repos/maxgoedjen/secretive/releases")!
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,18 +1,44 @@
|
||||
import Foundation
|
||||
import XPC
|
||||
import OSLog
|
||||
import Brief
|
||||
|
||||
class ServiceDelegate: NSObject, NSXPCListenerDelegate {
|
||||
|
||||
func listener(_ listener: NSXPCListener, shouldAcceptNewConnection newConnection: NSXPCConnection) -> Bool {
|
||||
newConnection.exportedInterface = NSXPCInterface(with: (any ReleasesDownloaderProtocol).self)
|
||||
let exportedObject = ReleasesDownloader()
|
||||
newConnection.exportedObject = exportedObject
|
||||
newConnection.resume()
|
||||
return true
|
||||
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])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let delegate = ServiceDelegate()
|
||||
let listener = NSXPCListener.service()
|
||||
listener.delegate = delegate
|
||||
listener.resume()
|
||||
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)")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user