Skip to content

Commit 1bbfd47

Browse files
committed
Fix browser duplicate tracker notification
1 parent c69ad06 commit 1bbfd47

File tree

4 files changed

+39
-15
lines changed

4 files changed

+39
-15
lines changed

WakaTime/AppDelegate.swift

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import AppUpdater
22
import Cocoa
33
import UserNotifications
44

5-
class AppDelegate: NSObject, NSApplicationDelegate, StatusBarDelegate {
5+
class AppDelegate: NSObject, NSApplicationDelegate, StatusBarDelegate, UNUserNotificationCenterDelegate {
66
var window: NSWindow!
77
var statusBarItem: NSStatusItem!
88
let menu = NSMenu()
@@ -15,6 +15,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, StatusBarDelegate {
1515

1616
@Atomic var lastTodayTime = 0
1717
@Atomic var lastTodayText = ""
18+
@Atomic var lastBrowserWarningTime = 0
1819

1920
let updater = AppUpdater(owner: "wakatime", repo: "macos-wakatime")
2021

@@ -175,6 +176,21 @@ class AppDelegate: NSObject, NSApplicationDelegate, StatusBarDelegate {
175176
statusBarA11ySeparator.isHidden = hasPermission
176177
}
177178

179+
private func checkBrowserDuplicateTracking() {
180+
// Warn about using both Browser extension and Mac app tracking a browser at same time, once per 12 hrs
181+
let time = Int(NSDate().timeIntervalSince1970)
182+
if time - lastBrowserWarningTime > Dependencies.twelveHours && MonitoringManager.isMonitoringBrowsing {
183+
Task {
184+
if let browser = await Dependencies.recentBrowserExtension() {
185+
lastBrowserWarningTime = time
186+
delegate.toastNotification("Warning: WakaTime \(browser) extension detected. " +
187+
"It’s recommended to only track browsing activity with the \(browser) " +
188+
"extension or Mac Desktop app, but not both.")
189+
}
190+
}
191+
}
192+
}
193+
178194
private func showSettings() {
179195
NSApp.activate(ignoringOtherApps: true)
180196
settingsWindowController.settingsView.setBrowserVisibility()
@@ -189,20 +205,31 @@ class AppDelegate: NSObject, NSApplicationDelegate, StatusBarDelegate {
189205
internal func toastNotification(_ title: String) {
190206
let content = UNMutableNotificationContent()
191207
content.title = title
208+
content.body = " "
192209

193210
let uuidString = UUID().uuidString
194211
let request = UNNotificationRequest(
195212
identifier: uuidString,
196213
content: content, trigger: nil)
197214

198215
let notificationCenter = UNUserNotificationCenter.current()
216+
notificationCenter.delegate = self
217+
199218
notificationCenter.requestAuthorization(options: [.alert, .sound]) { granted, _ in
200219
guard granted else { return }
201220

202-
notificationCenter.add(request)
221+
DispatchQueue.main.async {
222+
notificationCenter.add(request)
223+
}
203224
}
204225
}
205226

227+
func userNotificationCenter(_ center: UNUserNotificationCenter,
228+
willPresent notification: UNNotification,
229+
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
230+
completionHandler([.banner, .sound])
231+
}
232+
206233
private func setText(_ text: String) {
207234
DispatchQueue.main.async {
208235
Logging.default.log("Set status bar text: \(text)")
@@ -248,12 +275,15 @@ class AppDelegate: NSObject, NSApplicationDelegate, StatusBarDelegate {
248275
try process.execute()
249276
} catch {
250277
Logging.default.log("Failed to run wakatime-cli fetching Today coding activity: \(error)")
278+
return
251279
}
252280

253281
let handle = pipe.fileHandleForReading
254282
let data = handle.readDataToEndOfFile()
255283
let text = (String(data: data, encoding: String.Encoding.utf8) ?? "").trimmingCharacters(in: .whitespacesAndNewlines)
256284
lastTodayText = text
257285
setText(text)
286+
287+
checkBrowserDuplicateTracking()
258288
}
259289
}

WakaTime/Helpers/Dependencies.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import Foundation
33
// swiftlint:disable force_unwrapping
44
// swiftlint:disable force_try
55
class Dependencies {
6+
public static var twelveHours = 43200
7+
68
public static func installDependencies() {
79
Task {
810
if !(await isCLILatest()) {
@@ -57,7 +59,7 @@ class Dependencies {
5759
isoDateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
5860
isoDateFormatter.formatOptions = [.withInternetDateTime]
5961
if let lastSeen = isoDateFormatter.date(from: lastSeenAt) {
60-
if now.timeIntervalSince(lastSeen) > 600 {
62+
if Int(now.timeIntervalSince(lastSeen)) > twelveHours {
6163
break
6264
}
6365
}

WakaTime/WakaTime.entitlements

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
33
<plist version="1.0">
44
<dict>
5-
<key>com.apple.security.app-sandbox</key>
6-
<false/>
5+
<key>com.apple.security.app-sandbox</key>
6+
<false/>
7+
<key>com.apple.security.notifications</key>
8+
<true/>
79
</dict>
810
</plist>

WakaTime/WakaTime.swift

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,6 @@ class WakaTime: HeartbeatEventHandler {
3939
}
4040
PropertiesManager.hasLaunchedBefore = true
4141
}
42-
43-
if MonitoringManager.isMonitoringBrowsing {
44-
Task {
45-
if let browser = await Dependencies.recentBrowserExtension() {
46-
delegate.toastNotification("Warning: WakaTime \(browser) extension detected. " +
47-
"It’s recommended to only track browsing activity with the \(browser) " +
48-
"extension or Mac Desktop app, but not both.")
49-
}
50-
}
51-
}
5242
}
5343

5444
private func configureFirebase() {

0 commit comments

Comments
 (0)