mirror of
https://github.com/morgan9e/macos-stats
synced 2026-04-14 00:04:15 +09:00
feat: removed all logic from the Telemetry plugin since it's not used anyway. The toggle leaves for now since I have not decided what to do with that.
This commit is contained in:
@@ -11,83 +11,13 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
private struct Report: Codable {
|
||||
let id: UUID
|
||||
|
||||
let version: String?
|
||||
let modules: [String]
|
||||
|
||||
let device: String?
|
||||
let os: String?
|
||||
let language: String?
|
||||
}
|
||||
|
||||
public class Telemetry {
|
||||
public static let shared = Telemetry()
|
||||
|
||||
public var isEnabled: Bool {
|
||||
get {
|
||||
self._isEnabled
|
||||
}
|
||||
set {
|
||||
self.toggle(newValue)
|
||||
}
|
||||
get { Store.shared.bool(key: "telemetry", defaultValue: true) }
|
||||
set { Store.shared.set(key: "telemetry", value: newValue) }
|
||||
}
|
||||
|
||||
private var url: URL = URL(string: "https://api.mac-stats.com/telemetry")!
|
||||
|
||||
private var _isEnabled: Bool = true
|
||||
|
||||
private let id: UUID
|
||||
private let repeater = NSBackgroundActivityScheduler(identifier: "eu.exelban.Stats.Telemetry")
|
||||
private var modules: UnsafePointer<[Module]>
|
||||
|
||||
public init(_ modules: UnsafePointer<[Module]>) {
|
||||
self._isEnabled = Store.shared.bool(key: "telemetry", defaultValue: true)
|
||||
self.id = UUID(uuidString: Store.shared.string(key: "telemetry_id", defaultValue: UUID().uuidString)) ?? UUID()
|
||||
self.modules = modules
|
||||
|
||||
if !Store.shared.exist(key: "telemetry_id") {
|
||||
Store.shared.set(key: "telemetry_id", value: self.id.uuidString)
|
||||
self.toggle(self.isEnabled)
|
||||
}
|
||||
|
||||
self.report()
|
||||
}
|
||||
|
||||
@objc public func report() {
|
||||
guard self.isEnabled else { return }
|
||||
|
||||
let obj: Report = Report(
|
||||
id: self.id,
|
||||
version: Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String,
|
||||
modules: self.modules.pointee.filter({ $0.available && $0.enabled }).compactMap({ $0.name }),
|
||||
device: SystemKit.shared.device.model.id,
|
||||
os: SystemKit.shared.device.os?.version.getFullVersion(),
|
||||
language: Locale.current.languageCode
|
||||
)
|
||||
let jsonData = try? JSONEncoder().encode(obj)
|
||||
|
||||
var request = URLRequest(url: self.url)
|
||||
request.httpMethod = "POST"
|
||||
request.httpBody = jsonData
|
||||
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
|
||||
|
||||
let task = URLSession.shared.dataTask(with: request)
|
||||
task.resume()
|
||||
}
|
||||
|
||||
private func toggle(_ newValue: Bool) {
|
||||
self._isEnabled = newValue
|
||||
Store.shared.set(key: "telemetry", value: newValue)
|
||||
|
||||
self.repeater.invalidate()
|
||||
|
||||
if newValue {
|
||||
self.repeater.repeats = true
|
||||
self.repeater.interval = 60 * 60 * 24
|
||||
self.repeater.schedule { (completion: @escaping NSBackgroundActivityScheduler.CompletionHandler) in
|
||||
self.report()
|
||||
completion(NSBackgroundActivityScheduler.Result.finished)
|
||||
}
|
||||
}
|
||||
}
|
||||
public init() {}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,6 @@ var modules: [Module] = [
|
||||
Bluetooth(),
|
||||
Clock()
|
||||
]
|
||||
let telemetry: Telemetry = Telemetry(&modules)
|
||||
|
||||
@main
|
||||
class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDelegate {
|
||||
|
||||
@@ -83,7 +83,7 @@ class ApplicationSettings: NSStackView {
|
||||
)
|
||||
self.telemetryBtn = switchView(
|
||||
action: #selector(self.toggleTelemetry),
|
||||
state: telemetry.isEnabled
|
||||
state: Telemetry.shared.isEnabled
|
||||
)
|
||||
|
||||
scrollView.stackView.addArrangedSubview(PreferencesSection([
|
||||
@@ -182,7 +182,7 @@ class ApplicationSettings: NSStackView {
|
||||
|
||||
internal func viewWillAppear() {
|
||||
self.startAtLoginBtn?.state = LaunchAtLogin.isEnabled ? .on : .off
|
||||
self.telemetryBtn?.state = telemetry.isEnabled ? .on : .off
|
||||
self.telemetryBtn?.state = Telemetry.shared.isEnabled ? .on : .off
|
||||
|
||||
var idx = self.updateSelector?.indexOfSelectedItem ?? 0
|
||||
if let items = self.updateSelector?.menu?.items {
|
||||
@@ -296,7 +296,7 @@ class ApplicationSettings: NSStackView {
|
||||
}
|
||||
|
||||
@objc private func toggleTelemetry(_ sender: NSButton) {
|
||||
telemetry.isEnabled = sender.state == NSControl.StateValue.on
|
||||
Telemetry.shared.isEnabled = sender.state == NSControl.StateValue.on
|
||||
}
|
||||
|
||||
@objc private func toggleCombinedModules(_ sender: NSButton) {
|
||||
|
||||
@@ -400,12 +400,12 @@ private class SetupView_4: NSStackView {
|
||||
|
||||
container.addRow(with: [self.option(
|
||||
tag: 1,
|
||||
state: telemetry.isEnabled,
|
||||
state: Telemetry.shared.isEnabled,
|
||||
text: localizedString("Share anonymous telemetry data")
|
||||
)])
|
||||
container.addRow(with: [self.option(
|
||||
tag: 2,
|
||||
state: !telemetry.isEnabled,
|
||||
state: !Telemetry.shared.isEnabled,
|
||||
text: localizedString("Do not share anonymous telemetry data")
|
||||
)])
|
||||
|
||||
@@ -427,7 +427,7 @@ private class SetupView_4: NSStackView {
|
||||
}
|
||||
|
||||
@objc private func toggle(_ sender: NSButton) {
|
||||
telemetry.isEnabled = sender.tag == 1
|
||||
Telemetry.shared.isEnabled = sender.tag == 1
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user