Skip to content

Commit 75de33c

Browse files
committed
feat: observe mouse move to update app
1 parent ddaf3b3 commit 75de33c

File tree

5 files changed

+46
-3
lines changed

5 files changed

+46
-3
lines changed

ProcessReporter.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
1F6FE2DE2A46F5CA00D646CE /* Reporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6FE2DD2A46F5CA00D646CE /* Reporter.swift */; };
3434
1FAAEC482A66702100C086FF /* Application.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FAAEC472A66702100C086FF /* Application.swift */; };
3535
1FBAFA042A815AA200425224 /* RelativeTimeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FBAFA032A815AA200425224 /* RelativeTimeView.swift */; };
36+
1FD1ADC12BAD41B0001904BB /* MouseMove.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD1ADC02BAD41B0001904BB /* MouseMove.swift */; };
3637
1FF3ED2B2A8692A900EEF21D /* IntergrationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FF3ED2A2A8692A900EEF21D /* IntergrationView.swift */; };
3738
1FF3ED2E2A8732AA00EEF21D /* ApiIntegrationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FF3ED2D2A8732AA00EEF21D /* ApiIntegrationView.swift */; };
3839
1FF3ED302A8732C600EEF21D /* SlackIntegrationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FF3ED2F2A8732C600EEF21D /* SlackIntegrationView.swift */; };
@@ -73,6 +74,7 @@
7374
1FAAEC462A666ED800C086FF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
7475
1FAAEC472A66702100C086FF /* Application.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Application.swift; sourceTree = "<group>"; };
7576
1FBAFA032A815AA200425224 /* RelativeTimeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelativeTimeView.swift; sourceTree = "<group>"; };
77+
1FD1ADC02BAD41B0001904BB /* MouseMove.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MouseMove.swift; sourceTree = "<group>"; };
7678
1FF3ED2A2A8692A900EEF21D /* IntergrationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntergrationView.swift; sourceTree = "<group>"; };
7779
1FF3ED2D2A8732AA00EEF21D /* ApiIntegrationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApiIntegrationView.swift; sourceTree = "<group>"; };
7880
1FF3ED2F2A8732C600EEF21D /* SlackIntegrationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SlackIntegrationView.swift; sourceTree = "<group>"; };
@@ -110,6 +112,7 @@
110112
1FAAEC472A66702100C086FF /* Application.swift */,
111113
1F1DA6BD2A875EDE0076B77F /* NotificationManager.swift */,
112114
1FFC0FC42A5AE4FE00F67585 /* ActiveApplicationObserver.swift */,
115+
1FD1ADC02BAD41B0001904BB /* MouseMove.swift */,
113116
1F3BE35E2A62F13D0059A818 /* Agent.swift */,
114117
1F3BE36E2A63B3220059A818 /* Request.swift */,
115118
1F6FE2D72A469A8300D646CE /* Store.swift */,
@@ -354,6 +357,7 @@
354357
1FFC0FC52A5AE4FE00F67585 /* ActiveApplicationObserver.swift in Sources */,
355358
1F3BE35F2A62F13D0059A818 /* Agent.swift in Sources */,
356359
1F3BE3692A62FB220059A818 /* Persisted+Modifier.swift in Sources */,
360+
1FD1ADC12BAD41B0001904BB /* MouseMove.swift in Sources */,
357361
1F04C2262A63CBED002FE62F /* ReportInfoView.swift in Sources */,
358362
1F04C21C2A63C068002FE62F /* Atoms.swift in Sources */,
359363
1F6FE2DA2A469B7500D646CE /* SettingView.swift in Sources */,

ProcessReporter/ProcessReporterApp.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,15 @@ struct swiftui_menu_barApp: App {
3333

3434
if JotaiStore.shared.get(Atoms.isReportingAtom) {
3535
reporter.startReporting()
36+
3637
} else {
3738
Application.openSetting()
3839
}
3940

4041
ActiveApplicationObserver.shared.observe { name in
4142
JotaiStore.shared.set(Atoms.currentFrontAppAtom, value: name)
4243
}
44+
monitorMouseMove()
4345
}
4446

4547
var menuIcon: String {

ProcessReporter/Utils/ActiveApplicationObserver.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ class ActiveApplicationObserver {
6464
}
6565
}
6666

67-
struct ActiveApplicationInfo {
67+
struct ActiveApplicationInfo: Equatable {
6868
var title: String?
69+
70+
static func ==(lhs: ActiveApplicationInfo, rhs: ActiveApplicationInfo) -> Bool {
71+
return lhs.title == rhs.title
72+
}
6973
}

ProcessReporter/Utils/MouseMove.swift

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,37 @@
55
// Created by Innei on 2024/3/22.
66
//
77

8-
import Foundation
8+
import Cocoa
9+
import AppKit
10+
import Accessibility
11+
12+
func monitorMouseMove() {
13+
14+
15+
var lastSelectedText = ""
16+
var info : ActiveApplicationInfo = ActiveApplicationObserver.shared.getActiveApplicationInfo()
17+
NSEvent.addGlobalMonitorForEvents(matching:
18+
[.leftMouseUp, .keyDown]
19+
) { (event) in
20+
21+
switch event.type {
22+
case .leftMouseUp, .keyDown:
23+
24+
var currentInfo = ActiveApplicationObserver.shared.getActiveApplicationInfo()
25+
26+
if currentInfo != info {
27+
28+
DispatchQueue.main.async {
29+
Reporter.shared.report()
30+
}
31+
}
32+
info = currentInfo
33+
break
34+
35+
default:
36+
break
37+
}
38+
39+
}
40+
41+
}

ProcessReporter/Utils/Reporter/Reporter.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ class Reporter {
174174
timer = nil
175175
}
176176

177-
private func report() {
177+
public func report() {
178178
let shouldReport = JotaiStore.shared.get(Atoms.isReportingAtom)
179179
if !shouldReport {
180180
debugPrint("Report is disabled.")

0 commit comments

Comments
 (0)