Skip to content

Commit

Permalink
Merge pull request #201 from wakatime/feature/terminal
Browse files Browse the repository at this point in the history
Support for mac Terminal app
  • Loading branch information
alanhamlett authored Feb 11, 2024
2 parents f9f694b + f32b144 commit 82aff71
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 59 deletions.
60 changes: 31 additions & 29 deletions WakaTime/Extensions/AXUIElementExtension.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,26 +39,45 @@ 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
let title = extractPrefix(rawTitle, separator: " - ", fullTitle: true),
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 }
Expand All @@ -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
Expand Down
16 changes: 9 additions & 7 deletions WakaTime/Extensions/NSRunningApplicationExtension.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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,
]
}

Expand Down
48 changes: 26 additions & 22 deletions WakaTime/Helpers/MonitoringManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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")
}
}

Expand Down
12 changes: 11 additions & 1 deletion WakaTime/WakaTime.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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,
]
Expand Down Expand Up @@ -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 {
Expand Down

0 comments on commit 82aff71

Please sign in to comment.