diff --git a/WakaTime/Extensions/AXUIElementExtension.swift b/WakaTime/Extensions/AXUIElementExtension.swift index 0cd4eb9..ad7fe2b 100644 --- a/WakaTime/Extensions/AXUIElementExtension.swift +++ b/WakaTime/Extensions/AXUIElementExtension.swift @@ -39,13 +39,38 @@ extension AXUIElement { func title(for app: MonitoredApp) -> String? { switch app { + case .arcbrowser: + guard + let title = extractPrefix(rawTitle, separator: " - "), + title != "Arc" + else { return nil } + return title + case .canva: + guard + let title = extractPrefix(rawTitle, separator: " - ", minCount: 2), + title != "Canva", + title != "Home" + else { return nil } + return title + case .chrome: + guard + let title = extractPrefix(rawTitle, separator: " - "), + title != "Chrome", + title != "New Tab" + else { return nil } + return title case .figma: guard let title = extractPrefix(rawTitle, separator: " – "), title != "Figma", title != "Drafts" else { return nil } - + return title + case .imessage: + guard let title = extractPrefix(rawTitle, separator: " - ") else { return nil } + return title + case .iterm2: + guard let title = extractPrefix(rawTitle, separator: " - ") else { return nil } return title case .postman: guard @@ -53,12 +78,6 @@ extension AXUIElement { title != "Postman" else { return nil } - return title - case .warp: - guard - let title = extractPrefix(rawTitle, separator: " - "), - title != "Warp" - else { return nil } return title case .slack: guard let title = extractPrefix(rawTitle, separator: " - ") else { return nil } @@ -76,37 +95,20 @@ extension AXUIElement { title != "Safari Technology Preview" else { return nil } return title - case .imessage: - guard let title = extractPrefix(rawTitle, separator: " - ") else { return nil } - return title - case .iterm2: + case .terminal: guard let title = extractPrefix(rawTitle, separator: " - ") else { return nil } return title - case .canva: - guard - let title = extractPrefix(rawTitle, separator: " - ", minCount: 2), - title != "Canva", - title != "Home" - else { return nil } - return title - case .xcode: - fatalError("Xcode should never use window title as entity") - case .chrome: - guard - let title = extractPrefix(rawTitle, separator: " - "), - title != "Chrome", - title != "New Tab" - else { return nil } - return title - case .arcbrowser: + case .warp: guard let title = extractPrefix(rawTitle, separator: " - "), - title != "Arc" + title != "Warp" else { return nil } return title case .whatsapp: guard let title = extractPrefix(rawTitle, separator: " - ") else { return nil } return title + case .xcode: + fatalError("Xcode should never use window title as entity") case .zoom: guard let title = extractPrefix(rawTitle, separator: " - ") else { return nil } return title diff --git a/WakaTime/Extensions/NSRunningApplicationExtension.swift b/WakaTime/Extensions/NSRunningApplicationExtension.swift index b829757..a69cb2a 100644 --- a/WakaTime/Extensions/NSRunningApplicationExtension.swift +++ b/WakaTime/Extensions/NSRunningApplicationExtension.swift @@ -11,6 +11,7 @@ enum MonitoredApp: String, CaseIterable { case safari = "com.apple.Safari" case safaripreview = "com.apple.SafariTechnologyPreview" case slack = "com.tinyspeck.slackmacgap" + case terminal = "com.apple.Terminal" case warp = "dev.warp.Warp-Stable" case whatsapp = "net.whatsapp.WhatsApp" case xcode = "com.apple.dt.Xcode" @@ -29,17 +30,18 @@ enum MonitoredApp: String, CaseIterable { } static let electronAppIds = [ - MonitoredApp.postman.rawValue, - MonitoredApp.figma.rawValue, + MonitoredApp.arcbrowser.rawValue, MonitoredApp.canva.rawValue, - MonitoredApp.warp.rawValue, + MonitoredApp.chrome.rawValue, + MonitoredApp.figma.rawValue, + MonitoredApp.imessage.rawValue, + MonitoredApp.iterm2.rawValue, + MonitoredApp.postman.rawValue, MonitoredApp.slack.rawValue, MonitoredApp.safari.rawValue, MonitoredApp.safaripreview.rawValue, - MonitoredApp.imessage.rawValue, - MonitoredApp.iterm2.rawValue, - MonitoredApp.chrome.rawValue, - MonitoredApp.arcbrowser.rawValue, + MonitoredApp.terminal.rawValue, + MonitoredApp.warp.rawValue, ] } diff --git a/WakaTime/Helpers/MonitoringManager.swift b/WakaTime/Helpers/MonitoringManager.swift index 14876f9..60c565e 100644 --- a/WakaTime/Helpers/MonitoringManager.swift +++ b/WakaTime/Helpers/MonitoringManager.swift @@ -51,20 +51,37 @@ class MonitoringManager { else { return nil } switch monitoredApp { + case .arcbrowser: + return HeartbeatData( + entity: title, + category: .browsing) + case .canva: + return HeartbeatData( + entity: title, + language: "Canva Design", + category: .designing) + case .chrome: + return HeartbeatData( + entity: title, + category: .browsing) case .figma: return HeartbeatData( entity: title, language: "Figma Design", category: .designing) - case .postman: + case .imessage: return HeartbeatData( entity: title, - language: "HTTP Request", - category: .debugging) - case .warp: + category: .communicating) + case .iterm2: return HeartbeatData( entity: title, category: .coding) + case .postman: + return HeartbeatData( + entity: title, + language: "HTTP Request", + category: .debugging) case .slack: return HeartbeatData( entity: title, @@ -77,37 +94,24 @@ class MonitoringManager { return HeartbeatData( entity: title, category: .browsing) - case .chrome: - return HeartbeatData( - entity: title, - category: .browsing) - case .arcbrowser: - return HeartbeatData( - entity: title, - category: .browsing) - case .imessage: - return HeartbeatData( - entity: title, - category: .communicating) - case .iterm2: + case .terminal: return HeartbeatData( entity: title, category: .coding) - case .canva: + case .warp: return HeartbeatData( entity: title, - language: "Canva Design", - category: .designing) + category: .coding) case .whatsapp: return HeartbeatData( entity: title, category: .meeting) + case .xcode: + fatalError("Xcode should never use window title") case .zoom: return HeartbeatData( entity: title, category: .meeting) - case .xcode: - fatalError("Xcode should never use window title") } } diff --git a/WakaTime/WakaTime.swift b/WakaTime/WakaTime.swift index d0bbc54..3620a5a 100644 --- a/WakaTime/WakaTime.swift +++ b/WakaTime/WakaTime.swift @@ -125,7 +125,7 @@ class WakaTime: HeartbeatEventHandler { "--entity-type", entityType.rawValue, "--category", - category.rawValue, + category.rawValue.replacingOccurrences(of: "_", with: " "), "--plugin", "\(appName)/\(appVersion) macos-wakatime/" + Bundle.main.version, ] @@ -167,11 +167,21 @@ enum EntityType: String { enum Category: String { case browsing case building + case codereviewing = "code reviewing" case coding case communicating case debugging case designing + case indexing + case learning + case manualtesting = "manual testing" case meeting + case planning + case researching + case runningtests = "running tests" + case translating + case writingdocs = "writing docs" + case writingtests = "writing tests" } protocol StatusBarDelegate: AnyObject {