diff --git a/Kit/plugins/Telemetry.swift b/Kit/plugins/Telemetry.swift index d4084cd7..477859d9 100644 --- a/Kit/plugins/Telemetry.swift +++ b/Kit/plugins/Telemetry.swift @@ -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() {} } diff --git a/Stats/AppDelegate.swift b/Stats/AppDelegate.swift index d8e10b48..17453f2a 100755 --- a/Stats/AppDelegate.swift +++ b/Stats/AppDelegate.swift @@ -33,7 +33,6 @@ var modules: [Module] = [ Bluetooth(), Clock() ] -let telemetry: Telemetry = Telemetry(&modules) @main class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDelegate { diff --git a/Stats/Views/AppSettings.swift b/Stats/Views/AppSettings.swift index ca05c168..94c42c3f 100644 --- a/Stats/Views/AppSettings.swift +++ b/Stats/Views/AppSettings.swift @@ -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) { diff --git a/Stats/Views/Setup.swift b/Stats/Views/Setup.swift index dbbe5361..134e46c8 100644 --- a/Stats/Views/Setup.swift +++ b/Stats/Views/Setup.swift @@ -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 } }