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:
Serhiy Mytrovtsiy
2025-03-20 20:34:13 +01:00
parent 531b0cf282
commit f342b08e05
4 changed files with 11 additions and 82 deletions

View File

@@ -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() {}
}

View File

@@ -33,7 +33,6 @@ var modules: [Module] = [
Bluetooth(),
Clock()
]
let telemetry: Telemetry = Telemetry(&modules)
@main
class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDelegate {

View File

@@ -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) {

View File

@@ -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
}
}