Skip to content

Commit 0b717b6

Browse files
authored
V5.1.0 (#45)
* scout app 5.1.0 * fix one-off error * data viewer explicit failure * shit * data dump endpoint * fix data dump * rustfmt
1 parent ecb6b02 commit 0b717b6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+2389
-1009
lines changed

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "bear_tracks"
3-
version = "5.0.5"
3+
version = "5.1.0"
44
edition = "2021"
55
authors = ["Jayen Agrawal"]
66
description = "a scouting app for frc"
@@ -35,7 +35,7 @@ r2d2 = "0.8"
3535
r2d2_sqlite = "0.22"
3636
rand = "0.8.5"
3737
regex = "1.10.3"
38-
reqwest = "0.11.22"
38+
reqwest = { version = "0.11.22", features = ["blocking"] }
3939
serde = { version = "1.0", features = ["derive"] }
4040
serde_cbor_2 = { version = "0.12.0-dev" }
4141
serde_json = "1.0"

build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ use static_files::resource_dir;
33
fn main() -> std::io::Result<()> {
44
// include files in ./static/public in binary
55
resource_dir("./static/public").build()
6-
}
6+
}

ios/beartracks/bearTracks.xcodeproj/project.pbxproj

Lines changed: 198 additions & 4 deletions
Large diffs are not rendered by default.

ios/beartracks/bearTracks/AppState.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,19 @@ import Combine
1111
class AppState: ObservableObject {
1212
#if targetEnvironment(macCatalyst)
1313
@Published public var selectedTab: Tab? = .teams
14+
#elseif os(watchOS)
1415
#else
1516
@Published public var selectedTab: Tab = .teams
1617
#endif
1718
@Published public var loginRequired: Bool = false
1819
private var cancellables: Set<AnyCancellable> = []
1920

21+
#if !os(watchOS)
2022
init() {
2123
$selectedTab
2224
.receive(on: DispatchQueue.main)
2325
.sink { _ in }
2426
.store(in: &cancellables)
2527
}
28+
#endif
2629
}

ios/beartracks/bearTracks/Assets.xcassets/AccentColor.colorset/Contents.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
{
22
"colors" : [
33
{
4+
"color" : {
5+
"color-space" : "srgb",
6+
"components" : {
7+
"alpha" : "1.000",
8+
"blue" : "0x96",
9+
"green" : "0x93",
10+
"red" : "0x0A"
11+
}
12+
},
413
"idiom" : "universal"
514
}
615
],

ios/beartracks/bearTracks/DataViewModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class DataViewModel: ObservableObject {
1919
}
2020

2121
func fetchEventJson(completionBlock: @escaping ([DataEntry]) -> Void) -> Void {
22-
guard let url = URL(string: "https://beartracks.io/api/v1/data/brief/event/\(UserDefaults.standard.string(forKey: "season") ?? "2024")/\(UserDefaults.standard.string(forKey: "eventCode") ?? "CAFR")") else {
22+
guard let url = URL(string: "https://beartracks.io/api/v1/data/brief/event/\(UserDefaults(suiteName: "group.com.jayagra.beartracks")?.string(forKey: "season") ?? "2024")/\(UserDefaults(suiteName: "group.com.jayagra.beartracks")?.string(forKey: "eventCode") ?? "CAFR")") else {
2323
return
2424
}
2525

ios/beartracks/bearTracks/DetailedView.swift

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,19 @@ struct DetailedView: View {
2424
if detailData[0].FullMain.season == 2024 {
2525
ScrollView {
2626
Text("Team \(String(detailData[0].FullMain.team))")
27+
#if !os(watchOS)
2728
.font(.largeTitle)
29+
#else
30+
.font(.title3)
31+
#endif
2832
.padding([.top, .leading])
2933
.frame(maxWidth: .infinity, alignment: .leading)
3034
Text("\(detailData[0].FullMain.level) \(String(detailData[0].FullMain.match_num)) @ \(detailData[0].FullMain.event) \(String(detailData[0].FullMain.season))")
35+
#if !os(watchOS)
3136
.font(.title2)
37+
#else
38+
.font(.body)
39+
#endif
3240
.padding(.leading)
3341
.frame(maxWidth: .infinity, alignment: .leading)
3442
VStack {
@@ -43,19 +51,31 @@ struct DetailedView: View {
4351
HStack {
4452
VStack {
4553
Text("\(String(detailData[0].FullMain.analysis.split(separator: ",")[3]))s")
54+
#if !os(watchOS)
4655
.font(.title)
56+
#else
57+
.font(.title3)
58+
#endif
4759
Text("intake")
4860
}
4961
.frame(maxWidth: .infinity)
5062
VStack {
5163
Text("\(String(detailData[0].FullMain.analysis.split(separator: ",")[4]))s")
64+
#if !os(watchOS)
5265
.font(.title)
66+
#else
67+
.font(.title3)
68+
#endif
5369
Text("travel")
5470
}
5571
.frame(maxWidth: .infinity)
5672
VStack {
5773
Text("\(String(detailData[0].FullMain.analysis.split(separator: ",")[5]))s")
74+
#if !os(watchOS)
5875
.font(.title)
76+
#else
77+
.font(.title3)
78+
#endif
5979
Text("outtake")
6080
}
6181
.frame(maxWidth: .infinity)
@@ -67,13 +87,21 @@ struct DetailedView: View {
6787
HStack {
6888
VStack {
6989
Text(String(detailData[0].FullMain.analysis.split(separator: ",")[6]))
90+
#if !os(watchOS)
7091
.font(.title)
92+
#else
93+
.font(.title3)
94+
#endif
7195
Text("speaker")
7296
}
7397
.frame(maxWidth: .infinity)
7498
VStack {
7599
Text(String(detailData[0].FullMain.analysis.split(separator: ",")[7]))
100+
#if !os(watchOS)
76101
.font(.title)
102+
#else
103+
.font(.title3)
104+
#endif
77105
Text("amplifier")
78106
}
79107
.frame(maxWidth: .infinity)
@@ -87,7 +115,7 @@ struct DetailedView: View {
87115
.frame(maxWidth: .infinity, alignment: .leading)
88116
VStack {
89117
Divider()
90-
ForEach(gameData, id: \.id) { matchTime in
118+
ForEach(gameData) { matchTime in
91119
VStack {
92120
HStack {
93121
switch matchTime.score_type {
@@ -159,10 +187,19 @@ struct DetailedView: View {
159187
HStack {
160188
Spacer()
161189
Label(String(format: "%.1f", matchTime.intake), systemImage: "tray.and.arrow.down")
190+
#if os(watchOS)
191+
.labelStyle(.titleOnly)
192+
#endif
162193
Spacer()
163194
Label(String(format: "%.1f", matchTime.travel), systemImage: "arrow.up.and.down.and.arrow.left.and.right")
195+
#if os(watchOS)
196+
.labelStyle(.titleOnly)
197+
#endif
164198
Spacer()
165199
Label(String(format: "%.1f", matchTime.outtake), systemImage: "tray.and.arrow.up")
200+
#if os(watchOS)
201+
.labelStyle(.titleOnly)
202+
#endif
166203
Spacer()
167204
}
168205
.padding(.top)
@@ -294,10 +331,17 @@ struct FullMainData: Codable {
294331
}
295332

296333
/// 2024 season specific data structure for deocding the `game` key of `FullMainData`
297-
struct MatchTime2024: Codable {
298-
let id: Int
334+
struct MatchTime2024: Codable, Identifiable {
335+
var id = UUID()
299336
let score_type: Int
300337
let intake: Float
301338
let outtake: Float
302339
let travel: Float
340+
341+
enum CodingKeys: CodingKey {
342+
case score_type
343+
case intake
344+
case outtake
345+
case travel
346+
}
303347
}

ios/beartracks/bearTracks/LoginView.swift

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,36 +18,49 @@ struct LoginView: View {
1818

1919
var body: some View {
2020
VStack {
21+
#if !os(watchOS)
2122
Text("bearTracks")
2223
.font(.title)
23-
Text("v5.0.5 • 2024")
24+
Text("v5.1.0 • 2024")
25+
#endif
2426
if !loading {
2527
if !create {
28+
#if !os(watchOS)
2629
Text("log in")
2730
.font(.title3)
2831
.padding(.top)
32+
#endif
2933
TextField("username", text: $authData[0])
34+
#if !os(watchOS)
3035
.padding([.leading, .trailing, .bottom])
3136
.textFieldStyle(RoundedBorderTextFieldStyle())
37+
#endif
3238
.autocorrectionDisabled(true)
3339
.textInputAutocapitalization(.never)
3440
.textContentType(.username)
3541
SecureField("password", text: $authData[1])
42+
#if !os(watchOS)
3643
.padding()
3744
.textFieldStyle(RoundedBorderTextFieldStyle())
45+
#endif
3846
.autocorrectionDisabled(true)
3947
.textInputAutocapitalization(.never)
4048
.textContentType(.password)
4149
Button("login") {
4250
authAction(type: "login", data: ["username": authData[0], "password": authData[1]])
4351
}
52+
#if !os(watchOS)
4453
.padding()
54+
#endif
4555
.font(.title3)
4656
.buttonStyle(.bordered)
57+
#if !os(watchOS)
4758
Button("create") {
4859
self.create = true
4960
}
61+
#endif
5062
} else {
63+
#if !os(watchOS)
5164
Text("create account")
5265
.font(.title3)
5366
.padding(.top)
@@ -83,6 +96,7 @@ struct LoginView: View {
8396
Button("login") {
8497
self.create = false
8598
}
99+
#endif
86100
}
87101
} else {
88102
Spacer()

ios/beartracks/bearTracks/MatchList.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ struct MatchList: View {
139139
}
140140

141141
func fetchMatchJson() {
142-
guard let url = URL(string: "https://beartracks.io/api/v1/events/matches/\(UserDefaults.standard.string(forKey: "season") ?? "2024")/\(UserDefaults.standard.string(forKey: "eventCode") ?? "CAFR")/qualification/\( UserDefaults.standard.string(forKey: "teamNumber") ?? "766")") else {
142+
guard let url = URL(string: "https://beartracks.io/api/v1/events/matches/\(UserDefaults(suiteName: "group.com.jayagra.beartracks")?.string(forKey: "season") ?? "2024")/\(UserDefaults(suiteName: "group.com.jayagra.beartracks")?.string(forKey: "eventCode") ?? "CAFR")/qualification/\(UserDefaults(suiteName: "group.com.jayagra.beartracks")?.string(forKey: "teamNumber") ?? "766")") else {
143143
return
144144
}
145145

ios/beartracks/bearTracks/SettingsManager.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,6 @@ class SettingsManager {
1818
"season": "2024",
1919
"darkMode": true,
2020
]
21-
UserDefaults.standard.register(defaults: defaults)
21+
UserDefaults(suiteName: "group.com.jayagra.beartracks")?.register(defaults: defaults)
2222
}
2323
}

0 commit comments

Comments
 (0)