Skip to content

Commit 0ff4449

Browse files
authored
Merge pull request #33 from menubar-apps/add-sequoia-support
Fix TabView in Preferences
2 parents 00fe133 + 21800f6 commit 0ff4449

File tree

3 files changed

+31
-51
lines changed

3 files changed

+31
-51
lines changed

pullBar/AppDelegate.swift

+16-28
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,7 @@ import KeychainAccess
1313

1414
@main
1515
class AppDelegate: NSObject, NSApplicationDelegate {
16-
17-
@Default(.showAssigned) var showAssigned
18-
@Default(.showCreated) var showCreated
19-
@Default(.showRequested) var showRequested
20-
21-
@Default(.showAvatar) var showAvatar
22-
@Default(.showLabels) var showLabels
23-
24-
@Default(.refreshRate) var refreshRate
25-
@Default(.buildType) var buildType
26-
@Default(.counterType) var counterType
27-
28-
@Default(.githubUsername) var githubUsername
16+
2917
@FromKeychain(.githubToken) var githubToken
3018

3119
let ghClient = GitHubClient()
@@ -51,7 +39,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
5139
statusBarItem.menu = menu
5240

5341
timer = Timer.scheduledTimer(
54-
timeInterval: Double(refreshRate * 60),
42+
timeInterval: Double(Defaults[.refreshRate] * 60),
5543
target: self,
5644
selector: #selector(refreshMenu),
5745
userInfo: nil,
@@ -86,7 +74,7 @@ extension AppDelegate {
8674
NSLog("Refreshing menu")
8775
self.menu.removeAllItems()
8876

89-
if (githubUsername == "" || githubToken == "") {
77+
if (Defaults[.githubUsername] == "" || githubToken == "") {
9078
addMenuFooterItems()
9179
return
9280
}
@@ -99,23 +87,23 @@ extension AppDelegate {
9987

10088
let group = DispatchGroup()
10189

102-
if showAssigned {
90+
if Defaults[.showAssigned] {
10391
group.enter()
10492
ghClient.getAssignedPulls() { pulls in
10593
assignedPulls?.append(contentsOf: pulls)
10694
group.leave()
10795
}
10896
}
10997

110-
if showCreated {
98+
if Defaults[.showCreated] {
11199
group.enter()
112100
ghClient.getCreatedPulls() { pulls in
113101
createdPulls?.append(contentsOf: pulls)
114102
group.leave()
115103
}
116104
}
117105

118-
if showRequested {
106+
if Defaults[.showRequested] {
119107
group.enter()
120108
ghClient.getReviewRequestedPulls() { pulls in
121109
reviewRequestedPulls?.append(contentsOf: pulls)
@@ -128,8 +116,8 @@ extension AppDelegate {
128116
if let assignedPulls = assignedPulls, let createdPulls = createdPulls, let reviewRequestedPulls = reviewRequestedPulls {
129117
self.statusBarItem.button?.title = ""
130118

131-
if self.showAssigned && !assignedPulls.isEmpty {
132-
if self.counterType == .assigned {
119+
if Defaults[.showAssigned] && !assignedPulls.isEmpty {
120+
if Defaults[.counterType] == .assigned {
133121
self.statusBarItem.button?.title = String(assignedPulls.count)
134122
}
135123

@@ -140,8 +128,8 @@ extension AppDelegate {
140128
self.menu.addItem(.separator())
141129
}
142130

143-
if self.showCreated && !createdPulls.isEmpty {
144-
if self.counterType == .created {
131+
if Defaults[.showCreated] && !createdPulls.isEmpty {
132+
if Defaults[.counterType] == .created {
145133
self.statusBarItem.button?.title = String(createdPulls.count)
146134
}
147135

@@ -152,8 +140,8 @@ extension AppDelegate {
152140
self.menu.addItem(.separator())
153141
}
154142

155-
if self.showRequested && !reviewRequestedPulls.isEmpty {
156-
if self.counterType == .reviewRequested {
143+
if Defaults[.showRequested] && !reviewRequestedPulls.isEmpty {
144+
if Defaults[.counterType] == .reviewRequested {
157145
self.statusBarItem.button?.title = String(reviewRequestedPulls.count)
158146
}
159147

@@ -195,7 +183,7 @@ extension AppDelegate {
195183
.appendIcon(iconName: "person")
196184
.appendString(string: pull.node.author.login)
197185

198-
if !pull.node.labels.nodes.isEmpty && self.showLabels {
186+
if !pull.node.labels.nodes.isEmpty && Defaults[.showLabels] {
199187
issueItemTitle
200188
.appendNewLine()
201189
.appendIcon(iconName: "tag", color: NSColor(.secondary))
@@ -208,7 +196,7 @@ extension AppDelegate {
208196

209197
issueItemTitle.appendNewLine()
210198

211-
let approvedByMe = pull.node.reviews.edges.contains{ $0.node.author.login == githubUsername }
199+
let approvedByMe = pull.node.reviews.edges.contains{ $0.node.author.login == Defaults[.githubUsername] }
212200
issueItemTitle
213201
.appendIcon(iconName: "check-circle", color: approvedByMe ? NSColor(named: "green")! : NSColor.secondaryLabelColor)
214202
.appendString(string: " " + String(pull.node.reviews.totalCount))
@@ -219,7 +207,7 @@ extension AppDelegate {
219207
.appendIcon(iconName: "calendar")
220208
.appendString(string: pull.node.createdAt.getElapsedInterval())
221209

222-
if showAvatar {
210+
if Defaults[.showAvatar] {
223211
var image = NSImage()
224212
if let imageURL = pull.node.author.avatarUrl {
225213
image = NSImage.imageFromUrl(fromURL: imageURL) ?? NSImage(named: "person")!
@@ -400,7 +388,7 @@ extension AppDelegate {
400388
if (windowTitle == "Preferences") {
401389
timer?.invalidate()
402390
timer = Timer.scheduledTimer(
403-
timeInterval: Double(refreshRate * 60),
391+
timeInterval: Double(Defaults[.refreshRate] * 60),
404392
target: self,
405393
selector: #selector(refreshMenu),
406394
userInfo: nil,

pullBar/GitHub/GitHubClient.swift

+12-17
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,11 @@ import KeychainAccess
1212

1313
public class GitHubClient {
1414

15-
@Default(.githubApiBaseUrl) var githubApiBaseUrl
16-
@Default(.githubUsername) var githubUsername
17-
@Default(.githubAdditionalQuery) var githubAdditionalQuery
1815
@FromKeychain(.githubToken) var githubToken
19-
20-
@Default(.buildType) var buildType
2116

2217
func getAssignedPulls(completion:@escaping (([Edge]) -> Void)) -> Void {
2318

24-
if (githubUsername == "" || githubToken == "") {
19+
if (Defaults[.githubUsername] == "" || githubToken == "") {
2520
completion([Edge]())
2621
}
2722

@@ -30,14 +25,14 @@ public class GitHubClient {
3025
.accept("application/json")
3126
]
3227

33-
let graphQlQuery = buildGraphQlQuery(queryString: "is:open is:pr assignee:\(githubUsername) archived:false \(githubAdditionalQuery)")
28+
let graphQlQuery = buildGraphQlQuery(queryString: "is:open is:pr assignee:\(Defaults[.githubUsername]) archived:false \(Defaults[.githubAdditionalQuery])")
3429

3530
let parameters = [
3631
"query": graphQlQuery,
3732
"variables":[]
3833
] as [String: Any]
3934

40-
AF.request(githubApiBaseUrl + "/graphql", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers)
35+
AF.request(Defaults[.githubApiBaseUrl] + "/graphql", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers)
4136
.validate(statusCode: 200..<300)
4237
.responseDecodable(of: GraphQlSearchResp.self, decoder: GithubDecoder()) { response in
4338
switch response.result {
@@ -53,22 +48,22 @@ public class GitHubClient {
5348

5449
func getCreatedPulls(completion:@escaping (([Edge]) -> Void)) -> Void {
5550

56-
if (githubUsername == "" || githubToken == "") {
51+
if (Defaults[.githubUsername] == "" || githubToken == "") {
5752
completion([Edge]())
5853
}
5954

6055
let headers: HTTPHeaders = [
6156
.authorization(bearerToken: githubToken),
6257
.accept("application/json")
6358
]
64-
let graphQlQuery = buildGraphQlQuery(queryString: "is:open is:pr author:\(githubUsername) archived:false \(githubAdditionalQuery)")
59+
let graphQlQuery = buildGraphQlQuery(queryString: "is:open is:pr author:\(Defaults[.githubUsername]) archived:false \(Defaults[.githubAdditionalQuery])")
6560

6661
let parameters = [
6762
"query": graphQlQuery,
6863
"variables":[]
6964
] as [String: Any]
7065

71-
AF.request(githubApiBaseUrl + "/graphql", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers)
66+
AF.request(Defaults[.githubApiBaseUrl] + "/graphql", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers)
7267
.validate(statusCode: 200..<300)
7368
.responseDecodable(of: GraphQlSearchResp.self, decoder: GithubDecoder()) { response in
7469
switch response.result {
@@ -83,22 +78,22 @@ public class GitHubClient {
8378
}
8479

8580
func getReviewRequestedPulls(completion:@escaping (([Edge]) -> Void)) -> Void {
86-
if (githubUsername == "" || githubToken == "") {
81+
if (Defaults[.githubUsername] == "" || githubToken == "") {
8782
completion([Edge]())
8883
}
8984

9085
let headers: HTTPHeaders = [
9186
.authorization(bearerToken: githubToken),
9287
.accept("application/json")
9388
]
94-
let graphQlQuery = buildGraphQlQuery(queryString: "is:open is:pr review-requested:\(githubUsername) archived:false \(githubAdditionalQuery)")
89+
let graphQlQuery = buildGraphQlQuery(queryString: "is:open is:pr review-requested:\(Defaults[.githubUsername]) archived:false \(Defaults[.githubAdditionalQuery])")
9590

9691
let parameters = [
9792
"query": graphQlQuery,
9893
"variables":[]
9994
] as [String: Any]
10095

101-
AF.request(githubApiBaseUrl + "/graphql", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers)
96+
AF.request(Defaults[.githubApiBaseUrl] + "/graphql", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers)
10297
.validate(statusCode: 200..<300)
10398
.responseDecodable(of: GraphQlSearchResp.self, decoder: GithubDecoder()) { response in
10499
switch response.result {
@@ -115,7 +110,7 @@ public class GitHubClient {
115110

116111
var build = ""
117112

118-
switch buildType {
113+
switch Defaults[.buildType] {
119114
case .checks:
120115
build = """
121116
commits(last: 1) {
@@ -233,7 +228,7 @@ public class GitHubClient {
233228
.accept("application/json")
234229
]
235230

236-
AF.request(githubApiBaseUrl + "/user",
231+
AF.request(Defaults[.githubApiBaseUrl] + "/user",
237232
method: .get,
238233
headers: headers)
239234
.validate(statusCode: 200..<300)
@@ -251,7 +246,7 @@ public class GitHubClient {
251246

252247
func getLatestRelease(completion:@escaping (((LatestRelease?) -> Void))) -> Void {
253248
let headers: HTTPHeaders = [
254-
.authorization(username: githubUsername, password: githubToken),
249+
.authorization(username: Defaults[.githubUsername], password: githubToken),
255250
.contentType("application/json"),
256251
.accept("application/json")
257252
]

pullBar/Views/PreferencesView.swift

+3-6
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ struct PreferencesView: View {
2929
@Default(.counterType) var counterType
3030

3131
@State private var showGhAlert = false
32-
33-
@State private var selectedTab: Int = 1
3432

3533
@StateObject private var githubTokenValidator = GithubTokenValidator()
3634
@ObservedObject private var launchAtLogin = LaunchAtLogin.observable
@@ -39,7 +37,7 @@ struct PreferencesView: View {
3937

4038
var body: some View {
4139

42-
TabView (selection: $selectedTab) {
40+
TabView {
4341
Form {
4442
HStack(alignment: .center) {
4543
Text("Pull Requests:").frame(width: 120, alignment: .trailing)
@@ -88,14 +86,13 @@ struct PreferencesView: View {
8886
HStack(alignment: .center) {
8987
Text("Launch at login:").frame(width: 120, alignment: .trailing)
9088
Toggle("", isOn: $launchAtLogin.isEnabled)
91-
9289
}
9390

9491
}
9592
.padding(8)
9693
.frame(maxWidth: .infinity)
9794
.tabItem{Text("General")}
98-
95+
9996
Form {
10097
HStack(alignment: .center) {
10198
Text("API Base URL:").frame(width: 120, alignment: .trailing)
@@ -149,7 +146,6 @@ struct PreferencesView: View {
149146
githubTokenValidator.validate()
150147
}
151148
.tabItem{Text("Authentication")}
152-
.tag(1)
153149

154150
Form {
155151
HStack(alignment: .center) {
@@ -191,6 +187,7 @@ struct PreferencesView: View {
191187
.tabItem{Text("Advanced")}
192188

193189
}
190+
.frame(width: 600)
194191
.padding()
195192

196193
}

0 commit comments

Comments
 (0)