diff --git a/ios/OTL Watch App/Assets.xcassets/AccentColor.colorset/Contents.json b/ios/OTL Watch App/Assets.xcassets/AccentColor.colorset/Contents.json index e9f1af5f..eb878970 100644 --- a/ios/OTL Watch App/Assets.xcassets/AccentColor.colorset/Contents.json +++ b/ios/OTL Watch App/Assets.xcassets/AccentColor.colorset/Contents.json @@ -1,15 +1,6 @@ { "colors" : [ { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0.396", - "green" : "0.298", - "red" : "0.898" - } - }, "idiom" : "universal" } ], diff --git a/ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..49c81cd8 --- /dev/null +++ b/ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "watchos", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/OTL Watch App/ContentView.swift b/ios/OTL Watch App/ContentView.swift index c3750c35..61587f4a 100644 --- a/ios/OTL Watch App/ContentView.swift +++ b/ios/OTL Watch App/ContentView.swift @@ -1,26 +1,24 @@ // // ContentView.swift -// OTL Watch App +// otl Watch App // -// Created by Soongyu Kwon on 10/22/23. +// Created by Soongyu Kwon on 06/11/2024. // import SwiftUI -@available(iOS 17.0, *) struct ContentView: View { - @State private var loginState: Bool = true - var body: some View { - if loginState { - WeeklyTableView(loginState: self.$loginState) - } else { - LoginView() + VStack { + Image(systemName: "globe") + .imageScale(.large) + .foregroundStyle(.tint) + Text("Hello, world!") } + .padding() } } -@available(iOS 17.0, *) #Preview { ContentView() } diff --git a/ios/OTL Watch App/OTLAPI.swift b/ios/OTL Watch App/OTLAPI.swift index 46d3232f..63c37a24 100644 --- a/ios/OTL Watch App/OTLAPI.swift +++ b/ios/OTL Watch App/OTLAPI.swift @@ -3,24 +3,19 @@ // OTL Watch App // // Created by Soongyu Kwon on 11/16/23. -// Copyright © 2023 The Chromium Authors. All rights reserved. + // import Foundation import Alamofire import SwiftUI -struct urls { - static let BASE_URL = "https://otl.sparcs.org/" +struct URLs { + static let base = "https://otl.sparcs.org/" - static let SESSION_URL = "session/" - static let SESSION_INFO_URL = SESSION_URL + "info" - - static let API_URL = "api/" - static let API_TIMETABLE_URL = API_URL + "users/{user_id}/timetables" - static let API_SEMESTER_URL = API_URL + "semesters" - - + static var sessionInfo: String { base + "session/info" } + static var apiTimetable: String { base + "api/users/{user_id}/timetables" } + static var apiSemester: String { base + "api/semesters" } } enum Days: Int { @@ -195,125 +190,95 @@ func getColourForCourse(course: Int) -> Color { return Color(red: Double(colours[course % 16][0]/255), green:Double(colours[course % 16][1]/255), blue:Double(colours[course % 16][2]/255)) } -class OTLAPI { - func getTimetables(sessionID: String, userID: String, year: Int, semester: Int, completion: @escaping (Result<[Timetable], Error>) -> Void) { - let cookieProperties = [ - HTTPCookiePropertyKey.domain: "otl.sparcs.org", - HTTPCookiePropertyKey.path: "/", - HTTPCookiePropertyKey.name: "sessionid", - HTTPCookiePropertyKey.value: sessionID - ] - if let cookie = HTTPCookie(properties: cookieProperties) { - AF.session.configuration.httpCookieStorage?.setCookie(cookie) +class OTLAPI { + static let shared = OTLAPI() + + private var csrfToken: String? + private var refreshToken: String? + private var accessToken: String? + + private init(csrfToken: String? = nil, refreshToken: String? = nil, accessToken: String? = nil) { + self.csrfToken = csrfToken + self.refreshToken = refreshToken + self.accessToken = accessToken + + if (self.csrfToken != nil && self.refreshToken != nil && self.accessToken != nil) { + setSessionCookies() } + } + + func setTokens(csrfToken: String?, refreshToken: String?, accessToken: String?) { + self.csrfToken = csrfToken + self.refreshToken = refreshToken + self.accessToken = accessToken + setSessionCookies() + } + + private let jsonDecoder: JSONDecoder = { + let decoder = JSONDecoder() - AF.request(urls.BASE_URL + urls.API_TIMETABLE_URL.replacingOccurrences(of: "{user_id}", with: userID), method: .get, parameters: ["year": year, "semester": semester]).responseData { response in - switch response.result { - case .success(let data): - do { - let decoder = JSONDecoder() - let json = try decoder.decode([Timetable].self, from: data) - completion(.success(json)) - } catch { - print("getTimetables Error: \(error)") - completion(.failure(error)) - } - case .failure(let error): - print("getTimetables Error: \(error)") - completion(.failure(error)) - } + // Create a date formatter + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" // Replace this with the exact format you expect + decoder.dateDecodingStrategy = .formatted(dateFormatter) + + return decoder + }() + + func getTimetables(userID: String, year: Int, semester: Int, completion: @escaping (Result<[Timetable], Error>) -> Void) { + let url = URLs.apiTimetable.replacingOccurrences(of: "{user_id}", with: userID) + let parameters: [String: Any] = ["year": year, "semester": semester] + + AF.request(url, method: .get, parameters: parameters).responseData { response in + self.handleResponse(response, completion: completion) } } func getSemesters(completion: @escaping (Result<[Semester], Error>) -> Void) { - AF.request(urls.BASE_URL + urls.API_SEMESTER_URL, method: .get).responseData { response in - switch response.result { - case .success(let data): - do { - let decoder = JSONDecoder() - decoder.dateDecodingStrategy = .iso8601 - let json = try decoder.decode([Semester].self, from: data) - completion(.success(json)) - } catch { - print ("getSemesters Error \(error)") - completion(.failure(error)) - } - case .failure(let error): - print("getSemesters Error: \(error)") - completion(.failure(error)) - } + AF.request(URLs.apiSemester, method: .get).responseData { response in + self.handleResponse(response, completion: completion) } } - func getActualTimetable(sessionID: String, userID: String, year: Int, semester: Int, completion: @escaping (Result<[Timetable], Error>) -> Void) { - let cookieProperties = [ - HTTPCookiePropertyKey.domain: "otl.sparcs.org", - HTTPCookiePropertyKey.path: "/", - HTTPCookiePropertyKey.name: "sessionid", - HTTPCookiePropertyKey.value: sessionID - ] - - if let cookie = HTTPCookie(properties: cookieProperties) { - AF.session.configuration.httpCookieStorage?.setCookie(cookie) - } - - AF.request(urls.BASE_URL + urls.SESSION_INFO_URL, method: .get).responseData { response in + func getActualTimetable(userID: String, year: Int, semester: Int, completion: @escaping (Result<[Timetable], Error>) -> Void) { + AF.request(URLs.sessionInfo, method: .get).responseData { response in switch response.result { - case .success(let data) : + case .success(let data): do { - let decoder = JSONDecoder() - let json = try decoder.decode(UserInfo.self, from: data) - var timetable = Timetable(id: 0, lectures: []) - for lecture in json.my_timetable_lectures { - if lecture.year == year && lecture.semester == semester { - timetable.lectures.append(lecture) - } - } + let userInfo = try self.jsonDecoder.decode(UserInfo.self, from: data) + let lecturesForSemester = userInfo.my_timetable_lectures.filter { $0.year == year && $0.semester == semester } + let timetable = Timetable(id: 0, lectures: lecturesForSemester) completion(.success([timetable])) } catch { - print("getActualTimetable Error: \(error)") completion(.failure(error)) } case .failure(let error): - print("getActualTimetable Error: \(error)") completion(.failure(error)) } } } - func getActualSemesters(sessionID: String, userID: String, completion: @escaping (Result<[SemesterElement], Error>) -> Void) { - let cookieProperties = [ - HTTPCookiePropertyKey.domain: "otl.sparcs.org", - HTTPCookiePropertyKey.path: "/", - HTTPCookiePropertyKey.name: "sessionid", - HTTPCookiePropertyKey.value: sessionID - ] - - if let cookie = HTTPCookie(properties: cookieProperties) { - AF.session.configuration.httpCookieStorage?.setCookie(cookie) - } - - AF.request(urls.BASE_URL + urls.SESSION_INFO_URL, method: .get).responseData { response in + func getActualSemesters(userID: String, completion: @escaping (Result<[SemesterElement], Error>) -> Void) { + AF.request(URLs.sessionInfo, method: .get).responseData { response in switch response.result { - case .success(let data) : + case .success(let data): do { - let decoder = JSONDecoder() - let json = try decoder.decode(UserInfo.self, from: data) + let userInfo = try self.jsonDecoder.decode(UserInfo.self, from: data) var semesters = [SemesterElement]() - for lecture in json.my_timetable_lectures { + for lecture in userInfo.my_timetable_lectures { semesters.append(SemesterElement(year: lecture.year, semester: lecture.semester)) } semesters = Array(Set(semesters)) - semesters = semesters.sorted(by: { this, next in - if this.year > next.year { + semesters.sort { lhs, rhs in + if lhs.year > rhs.year { return true - } else if this.year == next.year { - return this.semester > next.semester + } else if lhs.year == rhs.year { + return lhs.semester > rhs.semester } else { return false } - }) + } completion(.success(semesters)) } catch { print("getActualSemesters Error: \(error)") @@ -325,5 +290,176 @@ class OTLAPI { } } } + + private func setSessionCookies() { + let cookies = [ + ("csrftoken", csrfToken), + ("refreshToken", refreshToken), + ("accessToken", accessToken) + ] + + for (name, value) in cookies { + if let value = value { // Only set the cookie if the value is not nil + let cookieProperties: [HTTPCookiePropertyKey: Any] = [ + .domain: "otl.sparcs.org", + .path: "/", + .name: name, + .value: value + ] + + if let cookie = HTTPCookie(properties: cookieProperties) { + AF.session.configuration.httpCookieStorage?.setCookie(cookie) + } + } + } + } + + private func handleResponse(_ response: AFDataResponse, completion: @escaping (Result) -> Void) { + switch response.result { + case .success(let data): + do { + let decodedData = try jsonDecoder.decode(T.self, from: data) + completion(.success(decodedData)) + } catch { + completion(.failure(error)) + } + case .failure(let error): + completion(.failure(error)) + } + } } + + +//class OTLAPI { +// func getTimetables(sessionID: String, userID: String, year: Int, semester: Int, completion: @escaping (Result<[Timetable], Error>) -> Void) { +// let cookieProperties = [ +// HTTPCookiePropertyKey.domain: "otl.sparcs.org", +// HTTPCookiePropertyKey.path: "/", +// HTTPCookiePropertyKey.name: "sessionid", +// HTTPCookiePropertyKey.value: sessionID +// ] +// +// if let cookie = HTTPCookie(properties: cookieProperties) { +// AF.session.configuration.httpCookieStorage?.setCookie(cookie) +// } +// +// AF.request(urls.BASE_URL + urls.API_TIMETABLE_URL.replacingOccurrences(of: "{user_id}", with: userID), method: .get, parameters: ["year": year, "semester": semester]).responseData { response in +// switch response.result { +// case .success(let data): +// do { +// let decoder = JSONDecoder() +// let json = try decoder.decode([Timetable].self, from: data) +// completion(.success(json)) +// } catch { +// print("getTimetables Error: \(error)") +// completion(.failure(error)) +// } +// case .failure(let error): +// print("getTimetables Error: \(error)") +// completion(.failure(error)) +// } +// } +// } +// +// func getSemesters(completion: @escaping (Result<[Semester], Error>) -> Void) { +// AF.request(urls.BASE_URL + urls.API_SEMESTER_URL, method: .get).responseData { response in +// switch response.result { +// case .success(let data): +// do { +// let decoder = JSONDecoder() +// decoder.dateDecodingStrategy = .iso8601 +// let json = try decoder.decode([Semester].self, from: data) +// completion(.success(json)) +// } catch { +// print ("getSemesters Error \(error)") +// completion(.failure(error)) +// } +// case .failure(let error): +// print("getSemesters Error: \(error)") +// completion(.failure(error)) +// } +// } +// } +// +// func getActualTimetable(sessionID: String, userID: String, year: Int, semester: Int, completion: @escaping (Result<[Timetable], Error>) -> Void) { +// let cookieProperties = [ +// HTTPCookiePropertyKey.domain: "otl.sparcs.org", +// HTTPCookiePropertyKey.path: "/", +// HTTPCookiePropertyKey.name: "sessionid", +// HTTPCookiePropertyKey.value: sessionID +// ] +// +// if let cookie = HTTPCookie(properties: cookieProperties) { +// AF.session.configuration.httpCookieStorage?.setCookie(cookie) +// } +// +// AF.request(urls.BASE_URL + urls.SESSION_INFO_URL, method: .get).responseData { response in +// switch response.result { +// case .success(let data) : +// do { +// let decoder = JSONDecoder() +// let json = try decoder.decode(UserInfo.self, from: data) +// var timetable = Timetable(id: 0, lectures: []) +// for lecture in json.my_timetable_lectures { +// if lecture.year == year && lecture.semester == semester { +// timetable.lectures.append(lecture) +// } +// } +// completion(.success([timetable])) +// } catch { +// print("getActualTimetable Error: \(error)") +// completion(.failure(error)) +// } +// case .failure(let error): +// print("getActualTimetable Error: \(error)") +// completion(.failure(error)) +// } +// } +// } +// +// func getActualSemesters(sessionID: String, userID: String, completion: @escaping (Result<[SemesterElement], Error>) -> Void) { +// let cookieProperties = [ +// HTTPCookiePropertyKey.domain: "otl.sparcs.org", +// HTTPCookiePropertyKey.path: "/", +// HTTPCookiePropertyKey.name: "sessionid", +// HTTPCookiePropertyKey.value: sessionID +// ] +// +// if let cookie = HTTPCookie(properties: cookieProperties) { +// AF.session.configuration.httpCookieStorage?.setCookie(cookie) +// } +// +// AF.request(urls.BASE_URL + urls.SESSION_INFO_URL, method: .get).responseData { response in +// switch response.result { +// case .success(let data) : +// do { +// let decoder = JSONDecoder() +// let json = try decoder.decode(UserInfo.self, from: data) +// var semesters = [SemesterElement]() +// for lecture in json.my_timetable_lectures { +// semesters.append(SemesterElement(year: lecture.year, semester: lecture.semester)) +// } +// semesters = Array(Set(semesters)) +// semesters = semesters.sorted(by: { this, next in +// if this.year > next.year { +// return true +// } else if this.year == next.year { +// return this.semester > next.semester +// } else { +// return false +// } +// }) +// completion(.success(semesters)) +// } catch { +// print("getActualSemesters Error: \(error)") +// completion(.failure(error)) +// } +// case .failure(let error): +// print("getActualSemesters Error: \(error)") +// completion(.failure(error)) +// } +// } +// } +//} +// diff --git a/ios/OTL Watch App/OTLApp.swift b/ios/OTL Watch App/OTLApp.swift index 69b2e380..392ab054 100644 --- a/ios/OTL Watch App/OTLApp.swift +++ b/ios/OTL Watch App/OTLApp.swift @@ -1,16 +1,14 @@ // -// OTLApp.swift -// OTL Watch App +// otlApp.swift +// otl Watch App // -// Created by Soongyu Kwon on 10/22/23. -// Copyright © 2023 The Chromium Authors. All rights reserved. +// Created by Soongyu Kwon on 06/11/2024. // import SwiftUI -@available(iOS 17.0, *) @main -struct OTL_Watch_AppApp: App { +struct otl_Watch_AppApp: App { var body: some Scene { WindowGroup { ContentView() diff --git a/ios/OTL Watch App/Pages/DailyTableView.swift b/ios/OTL Watch App/Pages/DailyTableView.swift index aba578c1..3591d65f 100644 --- a/ios/OTL Watch App/Pages/DailyTableView.swift +++ b/ios/OTL Watch App/Pages/DailyTableView.swift @@ -3,7 +3,6 @@ // OTL Watch App // // Created by Soongyu Kwon on 11/9/23. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import SwiftUI diff --git a/ios/OTL Watch App/Pages/LectureDetailView.swift b/ios/OTL Watch App/Pages/LectureDetailView.swift index e56cc8fb..a5c6003e 100644 --- a/ios/OTL Watch App/Pages/LectureDetailView.swift +++ b/ios/OTL Watch App/Pages/LectureDetailView.swift @@ -3,7 +3,6 @@ // OTL Watch App // // Created by Soongyu Kwon on 11/21/23. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import SwiftUI diff --git a/ios/OTL Watch App/Pages/LoginView.swift b/ios/OTL Watch App/Pages/LoginView.swift index 5d50a49a..190725c3 100644 --- a/ios/OTL Watch App/Pages/LoginView.swift +++ b/ios/OTL Watch App/Pages/LoginView.swift @@ -3,7 +3,6 @@ // OTL Watch App // // Created by Soongyu Kwon on 12/18/23. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import SwiftUI diff --git a/ios/OTL Watch App/Pages/SettingsView.swift b/ios/OTL Watch App/Pages/SettingsView.swift index 55acc692..4a007ca6 100644 --- a/ios/OTL Watch App/Pages/SettingsView.swift +++ b/ios/OTL Watch App/Pages/SettingsView.swift @@ -3,7 +3,6 @@ // OTL Watch App // // Created by Soongyu Kwon on 11/16/23. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import SwiftUI @@ -14,7 +13,9 @@ struct SettingsView: View { @Binding var selectedTimetable: Int @ObservedObject var viewModel = WatchViewModel() - @AppStorage("sessionID") var sessionID: String = "" + @AppStorage("refreshToken") var refreshToken: String = "" + @AppStorage("csrftoken") var csrfToken: String = "" + @AppStorage("accessToken") var accessToken: String = "" @AppStorage("userID") var userID: String = "" @State private var availableSemesters: [SemesterElement] = [SemesterElement]() @@ -78,7 +79,10 @@ struct SettingsView: View { } } - OTLAPI().getActualSemesters(sessionID: self.sessionID, userID: self.userID) { results in + let API: OTLAPI = OTLAPI.shared + API.setTokens(csrfToken: csrfToken, refreshToken: refreshToken, accessToken: accessToken) + + API.getActualSemesters(userID: self.userID) { results in switch results { case .success(let data): self.availableSemesters = data @@ -98,7 +102,10 @@ struct SettingsView: View { self.availableTimetables = defaults.integer(forKey: "availableTimetables") if (self.selectedSemester != nil) { - OTLAPI().getTimetables(sessionID: self.sessionID, userID: self.userID, year: self.selectedSemester!.year, semester: self.selectedSemester!.semester) { results in + let API: OTLAPI = OTLAPI.shared + API.setTokens(csrfToken: csrfToken, refreshToken: refreshToken, accessToken: accessToken) + + API.getTimetables(userID: self.userID, year: self.selectedSemester!.year, semester: self.selectedSemester!.semester) { results in switch results { case .success(let data): self.availableTimetables = data.count diff --git a/ios/OTL Watch App/Pages/WeeklyTableView.swift b/ios/OTL Watch App/Pages/WeeklyTableView.swift index 99fc132a..fe9aec87 100644 --- a/ios/OTL Watch App/Pages/WeeklyTableView.swift +++ b/ios/OTL Watch App/Pages/WeeklyTableView.swift @@ -3,7 +3,6 @@ // OTL Watch App // // Created by Soongyu Kwon on 11/9/23. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import SwiftUI @@ -15,7 +14,9 @@ struct WeeklyTableView: View { @ObservedObject var viewModel = WatchViewModel() - @AppStorage("sessionID") var sessionID: String = "" + @AppStorage("refreshToken") var refreshToken: String = "" + @AppStorage("csrftoken") var csrfToken: String = "" + @AppStorage("accessToken") var accessToken: String = "" @AppStorage("userID") var userID: String = "" @State private var scrollOffset: CGFloat = CGFloat.zero @@ -129,7 +130,10 @@ struct WeeklyTableView: View { self.selectedTimetable = defaults.integer(forKey: "selectedTimetable") if (self.selectedSemester == nil) { - OTLAPI().getActualSemesters(sessionID: self.sessionID, userID: self.userID) { results in + let API: OTLAPI = OTLAPI.shared + API.setTokens(csrfToken: csrfToken, refreshToken: refreshToken, accessToken: accessToken) + + API.getActualSemesters(userID: self.userID) { results in switch results { case .success(let data): self.selectedSemester = data.first @@ -149,12 +153,15 @@ struct WeeklyTableView: View { } } if (self.selectedSemester != nil) { - OTLAPI().getActualTimetable(sessionID: self.sessionID, userID: self.userID, year: self.selectedSemester!.year, semester: self.selectedSemester!.semester) { results in + let API: OTLAPI = OTLAPI.shared + API.setTokens(csrfToken: csrfToken, refreshToken: refreshToken, accessToken: accessToken) + + API.getActualTimetable(userID: self.userID, year: self.selectedSemester!.year, semester: self.selectedSemester!.semester) { results in switch results { case .success(let data): var table = [Timetable]() table.append(data.first!) - OTLAPI().getTimetables(sessionID: self.sessionID, userID: self.userID, year: self.selectedSemester!.year, semester: self.selectedSemester!.semester) { results in + API.getTimetables(userID: self.userID, year: self.selectedSemester!.year, semester: self.selectedSemester!.semester) { results in switch results { case .success(let timetableData): for timetable in timetableData { diff --git a/ios/OTL Watch App/Subviews/DailyDayView.swift b/ios/OTL Watch App/Subviews/DailyDayView.swift index 0d973c94..e5444189 100644 --- a/ios/OTL Watch App/Subviews/DailyDayView.swift +++ b/ios/OTL Watch App/Subviews/DailyDayView.swift @@ -3,7 +3,6 @@ // OTL Watch App // // Created by Soongyu Kwon on 11/17/23. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import SwiftUI diff --git a/ios/OTL Watch App/Subviews/DayLabelView.swift b/ios/OTL Watch App/Subviews/DayLabelView.swift index 29e6dbae..60378532 100644 --- a/ios/OTL Watch App/Subviews/DayLabelView.swift +++ b/ios/OTL Watch App/Subviews/DayLabelView.swift @@ -3,7 +3,6 @@ // OTL Watch App // // Created by Soongyu Kwon on 11/9/23. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import SwiftUI @@ -28,7 +27,7 @@ struct DayLabelView: View { ZStack { if isHighlighted { RoundedRectangle(cornerRadius: 4) - .foregroundStyle(.accent) +// .foregroundStyle(.accent) } Text(day.rawValue) .fontWeight(.medium) diff --git a/ios/OTL Watch App/Subviews/HorizontalLine.swift b/ios/OTL Watch App/Subviews/HorizontalLine.swift index 6587e7fe..2150be1d 100644 --- a/ios/OTL Watch App/Subviews/HorizontalLine.swift +++ b/ios/OTL Watch App/Subviews/HorizontalLine.swift @@ -3,7 +3,6 @@ // OTL Watch App // // Created by Soongyu Kwon on 11/9/23. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import SwiftUI diff --git a/ios/OTL Watch App/Subviews/TimelineLabelView.swift b/ios/OTL Watch App/Subviews/TimelineLabelView.swift index 0719e65f..e2958700 100644 --- a/ios/OTL Watch App/Subviews/TimelineLabelView.swift +++ b/ios/OTL Watch App/Subviews/TimelineLabelView.swift @@ -3,7 +3,6 @@ // OTL Watch App // // Created by Soongyu Kwon on 11/9/23. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import SwiftUI diff --git a/ios/OTL Watch App/Subviews/WeeklyDayView.swift b/ios/OTL Watch App/Subviews/WeeklyDayView.swift index be9db3b7..f52b2c46 100644 --- a/ios/OTL Watch App/Subviews/WeeklyDayView.swift +++ b/ios/OTL Watch App/Subviews/WeeklyDayView.swift @@ -3,7 +3,6 @@ // OTL Watch App // // Created by Soongyu Kwon on 11/16/23. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import SwiftUI diff --git a/ios/OTL Watch App/WatchViewModel.swift b/ios/OTL Watch App/WatchViewModel.swift index aa5fe5f9..b84512b9 100644 --- a/ios/OTL Watch App/WatchViewModel.swift +++ b/ios/OTL Watch App/WatchViewModel.swift @@ -3,7 +3,6 @@ // OTL Watch App // // Created by Soongyu Kwon on 11/8/23. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import Foundation @@ -12,11 +11,15 @@ import WatchConnectivity @available(iOS 13.0, *) class WatchViewModel: NSObject, ObservableObject { var session: WCSession - @Published var sessionID: String = "" + @Published var refreshToken: String = "" + @Published var csrftoken: String = "" + @Published var accessToken: String = "" @Published var userID: String = "" enum WatchReceiveMethod: String { - case sendSessionID + case sendRefreshToken + case sendCSRFToken + case sendAccessToken case sendUserID } @@ -45,9 +48,15 @@ extension WatchViewModel: WCSessionDelegate { } switch method { - case .sendSessionID: - self.sessionID = userInfo["data"] as? String ?? "" - UserDefaults.standard.set(userInfo["data"] as? String ?? "", forKey: "sessionID") + case .sendRefreshToken: + self.refreshToken = userInfo["data"] as? String ?? "" + UserDefaults.standard.set(userInfo["data"] as? String ?? "", forKey: "refreshToken") + case .sendCSRFToken: + self.csrftoken = userInfo["data"] as? String ?? "" + UserDefaults.standard.set(userInfo["data"] as? String ?? "", forKey: "csrftoken") + case .sendAccessToken: + self.accessToken = userInfo["data"] as? String ?? "" + UserDefaults.standard.set(userInfo["data"] as? String ?? "", forKey: "accessToken") case .sendUserID: self.userID = userInfo["data"] as? String ?? "" UserDefaults.standard.set(userInfo["data"] as? String ?? "", forKey: "userID") diff --git a/ios/OTLPlusIntents/IntentHandler.swift b/ios/OTLPlusIntents/IntentHandler.swift index 6c51806c..5d8115c8 100644 --- a/ios/OTLPlusIntents/IntentHandler.swift +++ b/ios/OTLPlusIntents/IntentHandler.swift @@ -3,7 +3,6 @@ // OTLPlusIntents // // Created by Soongyu Kwon on 02/05/2023. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import Intents diff --git a/ios/OTLWidgets/LocationInlineAccessory.swift b/ios/OTLWidgets/LocationInlineAccessory.swift index 19508cb8..a8a8fda4 100644 --- a/ios/OTLWidgets/LocationInlineAccessory.swift +++ b/ios/OTLWidgets/LocationInlineAccessory.swift @@ -3,7 +3,6 @@ // OTLWidgetsExtension // // Created by Soongyu Kwon on 28/07/2023. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import WidgetKit diff --git a/ios/OTLWidgets/NextClassAccessory.swift b/ios/OTLWidgets/NextClassAccessory.swift index 480915c5..43ec054e 100644 --- a/ios/OTLWidgets/NextClassAccessory.swift +++ b/ios/OTLWidgets/NextClassAccessory.swift @@ -3,7 +3,6 @@ // OTLWidgetsExtension // // Created by Soongyu Kwon on 22/07/2023. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import WidgetKit diff --git a/ios/OTLWidgets/NextClassWidget.swift b/ios/OTLWidgets/NextClassWidget.swift index 11ed07ec..71cdc4b6 100644 --- a/ios/OTLWidgets/NextClassWidget.swift +++ b/ios/OTLWidgets/NextClassWidget.swift @@ -3,7 +3,6 @@ // OTLWidgetsExtension // // Created by Soongyu Kwon on 28/03/2023. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import WidgetKit diff --git a/ios/OTLWidgets/OTLAPI.swift b/ios/OTLWidgets/OTLAPI.swift index c4bef717..5d9341f8 100644 --- a/ios/OTLWidgets/OTLAPI.swift +++ b/ios/OTLWidgets/OTLAPI.swift @@ -3,7 +3,6 @@ // OTLWidgetsExtension // // Created by Soongyu Kwon on 17/08/2023. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import Foundation diff --git a/ios/OTLWidgets/OTLWidgetBundle.swift b/ios/OTLWidgets/OTLWidgetBundle.swift index 05656c40..5d60fb67 100644 --- a/ios/OTLWidgets/OTLWidgetBundle.swift +++ b/ios/OTLWidgets/OTLWidgetBundle.swift @@ -3,7 +3,6 @@ // OTLWidgetsExtension // // Created by Soongyu Kwon on 28/03/2023. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import WidgetKit diff --git a/ios/OTLWidgets/TimeInlineAccessory.swift b/ios/OTLWidgets/TimeInlineAccessory.swift index 3e10df68..238e6cb8 100644 --- a/ios/OTLWidgets/TimeInlineAccessory.swift +++ b/ios/OTLWidgets/TimeInlineAccessory.swift @@ -3,7 +3,6 @@ // OTLWidgetsExtension // // Created by Soongyu Kwon on 28/07/2023. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import WidgetKit diff --git a/ios/OTLWidgets/TodayClassesWidget.swift b/ios/OTLWidgets/TodayClassesWidget.swift index 7125f14e..1283b597 100644 --- a/ios/OTLWidgets/TodayClassesWidget.swift +++ b/ios/OTLWidgets/TodayClassesWidget.swift @@ -3,7 +3,6 @@ // OTLWidgetsExtension // // Created by Soongyu Kwon on 12/05/2023. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import WidgetKit diff --git a/ios/OTLWidgets/WeekClassesWidget.swift b/ios/OTLWidgets/WeekClassesWidget.swift index 1700adb1..595de5e6 100644 --- a/ios/OTLWidgets/WeekClassesWidget.swift +++ b/ios/OTLWidgets/WeekClassesWidget.swift @@ -3,7 +3,6 @@ // OTLWidgetsExtension // // Created by Soongyu Kwon on 14/05/2023. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import WidgetKit diff --git a/ios/OTLWidgets/WidgetBase.swift b/ios/OTLWidgets/WidgetBase.swift index 5a5236e0..a017866c 100644 --- a/ios/OTLWidgets/WidgetBase.swift +++ b/ios/OTLWidgets/WidgetBase.swift @@ -3,7 +3,6 @@ // OTLWidgetsExtension // // Created by Soongyu Kwon on 12/05/2023. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import Foundation diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 5aca7c80..4de26fe1 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -284,4 +284,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: b34ba01b6d31eabe4d020b5ccb7ac5cba06d49cf -COCOAPODS: 1.16.1 +COCOAPODS: 1.15.2 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index f5977fc0..4d7ba692 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 70; objects = { /* Begin PBXBuildFile section */ @@ -17,6 +17,8 @@ 8B643C832A6BC16500BF6DAA /* NextClassAccessory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B643C822A6BC16500BF6DAA /* NextClassAccessory.swift */; }; 8B76C8E42A0E834A007E1947 /* TodayClassesWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B76C8E32A0E834A007E1947 /* TodayClassesWidget.swift */; }; 8B76C8E62A0E837F007E1947 /* WidgetBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B76C8E52A0E837F007E1947 /* WidgetBase.swift */; }; + 8B8DFCFB2CDB7A4F00AB82CC /* otl Watch App.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = 8B8DFCD82CDB7A4D00AB82CC /* otl Watch App.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 8B8DFD292CDB7CA600AB82CC /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 8B8DFD282CDB7CA600AB82CC /* Alamofire */; }; 8B949A0629FF4CD0009D4750 /* NotoSansKR-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 8B949A0529FF4CD0009D4750 /* NotoSansKR-Bold.otf */; }; 8B949A0729FF4CD0009D4750 /* NotoSansKR-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 8B949A0529FF4CD0009D4750 /* NotoSansKR-Bold.otf */; }; 8B949A1029FF4CDF009D4750 /* NotoSansKR-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = 8B949A0F29FF4CDF009D4750 /* NotoSansKR-Medium.otf */; }; @@ -45,6 +47,13 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 8B8DFCF92CDB7A4F00AB82CC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8B8DFCD72CDB7A4D00AB82CC; + remoteInfo = "otl Watch App"; + }; 8BB345872A012C99008A0E30 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 97C146E61CF9000F007C117D /* Project object */; @@ -62,6 +71,17 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ + 8B8DFCFC2CDB7A4F00AB82CC /* Embed Watch Content */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "$(CONTENTS_FOLDER_PATH)/Watch"; + dstSubfolderSpec = 16; + files = ( + 8B8DFCFB2CDB7A4F00AB82CC /* otl Watch App.app in Embed Watch Content */, + ); + name = "Embed Watch Content"; + runOnlyForDeploymentPostprocessing = 0; + }; 8BB3DE1029D1F25B001AD191 /* Embed Foundation Extensions */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -100,6 +120,7 @@ 8B643C822A6BC16500BF6DAA /* NextClassAccessory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NextClassAccessory.swift; sourceTree = ""; }; 8B76C8E32A0E834A007E1947 /* TodayClassesWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodayClassesWidget.swift; sourceTree = ""; }; 8B76C8E52A0E837F007E1947 /* WidgetBase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetBase.swift; sourceTree = ""; }; + 8B8DFCD82CDB7A4D00AB82CC /* otl Watch App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "otl Watch App.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 8B949A0529FF4CD0009D4750 /* NotoSansKR-Bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "NotoSansKR-Bold.otf"; sourceTree = ""; }; 8B949A0F29FF4CDF009D4750 /* NotoSansKR-Medium.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "NotoSansKR-Medium.otf"; sourceTree = ""; }; 8B949A1429FF4CE6009D4750 /* NotoSansKR-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "NotoSansKR-Regular.otf"; sourceTree = ""; }; @@ -134,7 +155,19 @@ E7988E49910FBD984BD7A127 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 8B8DFCD92CDB7A4D00AB82CC /* otl Watch App */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = "otl Watch App"; sourceTree = ""; }; +/* End PBXFileSystemSynchronizedRootGroup section */ + /* Begin PBXFrameworksBuildPhase section */ + 8B8DFCD52CDB7A4D00AB82CC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8B8DFD292CDB7CA600AB82CC /* Alamofire in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8BB3457D2A012C99008A0E30 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -233,6 +266,7 @@ 97C146F01CF9000F007C117D /* Runner */, 8BB3DE0229D1F25B001AD191 /* OTLWidgets */, 8BB345832A012C99008A0E30 /* OTLPlusIntents */, + 8B8DFCD92CDB7A4D00AB82CC /* otl Watch App */, 97C146EF1CF9000F007C117D /* Products */, 39D0B0698705DDCE085402CF /* Pods */, DF1CE87D051FAC522C3E69CB /* Frameworks */, @@ -245,6 +279,7 @@ 97C146EE1CF9000F007C117D /* Runner.app */, 8BB3DDFD29D1F25A001AD191 /* OTLWidgetsExtension.appex */, 8BB345802A012C99008A0E30 /* OTLPlusIntents.appex */, + 8B8DFCD82CDB7A4D00AB82CC /* otl Watch App.app */, ); name = Products; sourceTree = ""; @@ -288,6 +323,29 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 8B8DFCD72CDB7A4D00AB82CC /* otl Watch App */ = { + isa = PBXNativeTarget; + buildConfigurationList = 8B8DFD062CDB7A4F00AB82CC /* Build configuration list for PBXNativeTarget "otl Watch App" */; + buildPhases = ( + 8B8DFCD42CDB7A4D00AB82CC /* Sources */, + 8B8DFCD52CDB7A4D00AB82CC /* Frameworks */, + 8B8DFCD62CDB7A4D00AB82CC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 8B8DFCD92CDB7A4D00AB82CC /* otl Watch App */, + ); + name = "otl Watch App"; + packageProductDependencies = ( + 8B8DFD282CDB7CA600AB82CC /* Alamofire */, + ); + productName = "otl Watch App"; + productReference = 8B8DFCD82CDB7A4D00AB82CC /* otl Watch App.app */; + productType = "com.apple.product-type.application"; + }; 8BB3457F2A012C99008A0E30 /* OTLPlusIntents */ = { isa = PBXNativeTarget; buildConfigurationList = 8BB3458A2A012C99008A0E30 /* Build configuration list for PBXNativeTarget "OTLPlusIntents" */; @@ -340,12 +398,14 @@ 894C64DD28C8F8FC006549F9 /* ShellScript */, 15CBF360D6B4E9B07E2BDD87 /* [CP] Embed Pods Frameworks */, 5C2D6AB38132B2D5EE10E87E /* [CP] Copy Pods Resources */, + 8B8DFCFC2CDB7A4F00AB82CC /* Embed Watch Content */, ); buildRules = ( ); dependencies = ( 8BB3DE0E29D1F25B001AD191 /* PBXTargetDependency */, 8BB345882A012C99008A0E30 /* PBXTargetDependency */, + 8B8DFCFA2CDB7A4F00AB82CC /* PBXTargetDependency */, ); name = Runner; productName = Runner; @@ -358,10 +418,13 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1430; + LastSwiftUpdateCheck = 1600; LastUpgradeCheck = 1510; ORGANIZATIONNAME = "The Chromium Authors"; TargetAttributes = { + 8B8DFCD72CDB7A4D00AB82CC = { + CreatedOnToolsVersion = 16.0; + }; 8BB3457F2A012C99008A0E30 = { CreatedOnToolsVersion = 14.3; }; @@ -394,11 +457,19 @@ 97C146ED1CF9000F007C117D /* Runner */, 8BB3DDFC29D1F25A001AD191 /* OTLWidgetsExtension */, 8BB3457F2A012C99008A0E30 /* OTLPlusIntents */, + 8B8DFCD72CDB7A4D00AB82CC /* otl Watch App */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 8B8DFCD62CDB7A4D00AB82CC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8BB3457E2A012C99008A0E30 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -594,6 +665,13 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 8B8DFCD42CDB7A4D00AB82CC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8BB3457C2A012C99008A0E30 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -634,6 +712,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 8B8DFCFA2CDB7A4F00AB82CC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8B8DFCD72CDB7A4D00AB82CC /* otl Watch App */; + targetProxy = 8B8DFCF92CDB7A4F00AB82CC /* PBXContainerItemProxy */; + }; 8BB345882A012C99008A0E30 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 8BB3457F2A012C99008A0E30 /* OTLPlusIntents */; @@ -765,6 +848,138 @@ }; name = Profile; }; + 8B8DFCFD2CDB7A4F00AB82CC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_ASSET_PATHS = "\"otl Watch App/Preview Content\""; + DEVELOPMENT_TEAM = N5V8W52U3U; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = otl; + INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + INFOPLIST_KEY_WKCompanionAppBundleIdentifier = org.sparcs.otlplus; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = org.sparcs.otlplus.watchkitapp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = watchos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 11.0; + }; + name = Debug; + }; + 8B8DFCFE2CDB7A4F00AB82CC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"otl Watch App/Preview Content\""; + DEVELOPMENT_TEAM = N5V8W52U3U; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = otl; + INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + INFOPLIST_KEY_WKCompanionAppBundleIdentifier = org.sparcs.otlplus; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = org.sparcs.otlplus.watchkitapp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = watchos; + SKIP_INSTALL = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 11.0; + }; + name = Release; + }; + 8B8DFCFF2CDB7A4F00AB82CC /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"otl Watch App/Preview Content\""; + DEVELOPMENT_TEAM = N5V8W52U3U; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = otl; + INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + INFOPLIST_KEY_WKCompanionAppBundleIdentifier = org.sparcs.otlplus; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = org.sparcs.otlplus.watchkitapp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = watchos; + SKIP_INSTALL = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 11.0; + }; + name = Profile; + }; 8BB3458B2A012C99008A0E30 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -784,7 +999,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = OTLPlusIntents/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = OTLPlusIntents; - INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 The Chromium Authors. All rights reserved."; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2024 SPARCS. All rights reserved."; IPHONEOS_DEPLOYMENT_TARGET = 16.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -823,7 +1038,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = OTLPlusIntents/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = OTLPlusIntents; - INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 The Chromium Authors. All rights reserved."; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2024 SPARCS. All rights reserved."; IPHONEOS_DEPLOYMENT_TARGET = 16.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -861,7 +1076,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = OTLPlusIntents/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = OTLPlusIntents; - INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 The Chromium Authors. All rights reserved."; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2024 SPARCS. All rights reserved."; IPHONEOS_DEPLOYMENT_TARGET = 16.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -902,7 +1117,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = OTLWidgets/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = "next class widget"; - INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 The Chromium Authors. All rights reserved."; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2024 SPARCS. All rights reserved."; IPHONEOS_DEPLOYMENT_TARGET = 16.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -943,7 +1158,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = OTLWidgets/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = "next class widget"; - INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 The Chromium Authors. All rights reserved."; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2024 SPARCS. All rights reserved."; IPHONEOS_DEPLOYMENT_TARGET = 16.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -983,7 +1198,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = OTLWidgets/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = "next class widget"; - INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 The Chromium Authors. All rights reserved."; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2024 SPARCS. All rights reserved."; IPHONEOS_DEPLOYMENT_TARGET = 16.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -1192,6 +1407,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 8B8DFD062CDB7A4F00AB82CC /* Build configuration list for PBXNativeTarget "otl Watch App" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8B8DFCFD2CDB7A4F00AB82CC /* Debug */, + 8B8DFCFE2CDB7A4F00AB82CC /* Release */, + 8B8DFCFF2CDB7A4F00AB82CC /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 8BB3458A2A012C99008A0E30 /* Build configuration list for PBXNativeTarget "OTLPlusIntents" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -1246,6 +1471,11 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ + 8B8DFD282CDB7CA600AB82CC /* Alamofire */ = { + isa = XCSwiftPackageProductDependency; + package = 8BB397432A8E003300DD352E /* XCRemoteSwiftPackageReference "Alamofire" */; + productName = Alamofire; + }; 8BB397442A8E003300DD352E /* Alamofire */ = { isa = XCSwiftPackageProductDependency; package = 8BB397432A8E003300DD352E /* XCRemoteSwiftPackageReference "Alamofire" */; diff --git a/lib/pages/main_page.dart b/lib/pages/main_page.dart index 0a876744..b0c5d4b1 100644 --- a/lib/pages/main_page.dart +++ b/lib/pages/main_page.dart @@ -86,9 +86,19 @@ class _MainPageState extends State { final cookieManager = WebviewCookieManager(); final cookies = await cookieManager.getCookies('https://otl.sparcs.org'); for (var cookie in cookies) { - if (cookie.name == 'sessionid') { + if (cookie.name == 'refreshToken') { + await channel.invokeMethod("flutterToWatch", + {"method": "sendRefreshToken", "data": cookie.value}); + } + + if (cookie.name == 'csrftoken') { + await channel.invokeMethod("flutterToWatch", + {"method": "sendCSRFToken", "data": cookie.value}); + } + + if (cookie.name == 'accessToken') { await channel.invokeMethod("flutterToWatch", - {"method": "sendSessionID", "data": cookie.value}); + {"method": "sendAccessToken", "data": cookie.value}); } } final infoModel = InfoModel(); diff --git a/pubspec.lock b/pubspec.lock index 358ae97c..14c09a27 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,50 +5,55 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a + sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834 url: "https://pub.dev" source: hosted - version: "61.0.0" + version: "72.0.0" _flutterfire_internals: dependency: transitive description: name: _flutterfire_internals - sha256: dd68ecea9f1e3556d385521bd21c7bafd6311a8c1e11abe2595ca27974f468ee + sha256: "5534e701a2c505fed1f0799e652dd6ae23bd4d2c4cf797220e5ced5764a7c1c2" url: "https://pub.dev" source: hosted - version: "1.3.13" + version: "1.3.44" + _macros: + dependency: transitive + description: dart + source: sdk + version: "0.3.2" analyzer: dependency: transitive description: name: analyzer - sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 + sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139 url: "https://pub.dev" source: hosted - version: "5.13.0" + version: "6.7.0" ansicolor: dependency: transitive description: name: ansicolor - sha256: "8bf17a8ff6ea17499e40a2d2542c2f481cd7615760c6d34065cb22bfd22e6880" + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" archive: dependency: transitive description: name: archive - sha256: "7b875fd4a20b165a3084bd2d210439b22ebc653f21cea4842729c0c30c82596b" + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d url: "https://pub.dev" source: hosted - version: "3.4.9" + version: "3.6.1" args: dependency: transitive description: name: args - sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6 url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.6.0" async: dependency: transitive description: @@ -65,6 +70,15 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + channel_talk_flutter: + dependency: "direct main" + description: + path: "." + ref: main + resolved-ref: "6090bc7f6b2ca047b69a85b213e9a81004e2c923" + url: "https://github.com/happycastle114/channel_talk_flutter" + source: git + version: "3.1.3" characters: dependency: transitive description: @@ -93,42 +107,50 @@ packages: dependency: transitive description: name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" coverage: dependency: transitive description: name: coverage - sha256: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097" + sha256: "88b0fddbe4c92910fefc09cc0248f5e7f0cd23e450ded4c28f16ab8ee8f83268" url: "https://pub.dev" source: hosted - version: "1.6.3" + version: "1.10.0" crypto: dependency: transitive description: name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.6" csslib: dependency: transitive description: name: csslib - sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.2" dio: dependency: "direct main" description: name: dio - sha256: "01870acd87986f768e0c09cc4d7a19a59d814af7b34cbeb0b437d2c33bdfea4c" + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" + url: "https://pub.dev" + source: hosted + version: "5.7.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8" url: "https://pub.dev" source: hosted - version: "5.3.4" + version: "2.0.0" dotted_border: dependency: "direct main" description: @@ -141,18 +163,18 @@ packages: dependency: "direct main" description: name: dropdown_button2 - sha256: cbf05433833cfb77730e05c678b0b055547d488a8ce05280d62fb07f269cc03d + sha256: cb589893f90bade7452abd8ccffa3d811071febcfa8a1e5bb6d6eb593cdb3fa9 url: "https://pub.dev" source: hosted - version: "3.0.0-beta.7" + version: "3.0.0-beta.19" easy_localization: dependency: "direct main" description: name: easy_localization - sha256: de63e3b422adfc97f256cbb3f8cf12739b6a4993d390f3cadb3f51837afaefe5 + sha256: fa59bcdbbb911a764aa6acf96bbb6fa7a5cf8234354fc45ec1a43a0349ef0201 url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.7" easy_logger: dependency: transitive description: @@ -181,82 +203,106 @@ packages: dependency: transitive description: name: ffi - sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99 + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.1.3" file: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "7.0.0" firebase_analytics: dependency: "direct main" description: name: firebase_analytics - sha256: de3d73b5c5618bf31004308b017b4067b7d9156b96e97b62d59ae5eab71081ec + sha256: "2c4e7b548d41b46e8aa08bc3bd1163146be7e6d48f678f2e6dd3114994e42458" url: "https://pub.dev" source: hosted - version: "10.7.1" + version: "11.3.3" firebase_analytics_platform_interface: dependency: transitive description: name: firebase_analytics_platform_interface - sha256: ffc59c0b00a572cd1fbf915a1d50cb4ccdc61e429614aa6ae9a598ee5723b96a + sha256: c259ae890c7d4c5d1675d35936be0b1fcd587fce9645948982cd87ad08df6222 url: "https://pub.dev" source: hosted - version: "3.8.1" + version: "4.2.5" firebase_analytics_web: dependency: transitive description: name: firebase_analytics_web - sha256: "0e725a7dcdeb0a59e44d93d1d45dfec94efe54329ac9d6aa145e24d31429100c" + sha256: "5988d1fd022e55515c2a14811c9b5104c32acde115874a9a69ff7c77c4c05cd9" url: "https://pub.dev" source: hosted - version: "0.5.5+8" + version: "0.5.10+2" firebase_core: dependency: "direct main" description: name: firebase_core - sha256: "471b46ea6a9af503184d4de691566887daedd312aec5baac5baa42d819f56446" + sha256: "51dfe2fbf3a984787a2e7b8592f2f05c986bfedd6fdacea3f9e0a7beb334de96" url: "https://pub.dev" source: hosted - version: "2.23.0" + version: "3.6.0" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface - sha256: c437ae5d17e6b5cc7981cf6fd458a5db4d12979905f9aafd1fea930428a9fe63 + sha256: e30da58198a6d4b49d5bce4e852f985c32cb10db329ebef9473db2b9f09ce810 url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.3.0" firebase_core_web: dependency: transitive description: name: firebase_core_web - sha256: "0631a2ec971dbc540275e2fa00c3a8a2676f0a7adbc3c197d6fba569db689d97" + sha256: f967a7138f5d2ffb1ce15950e2a382924239eaa521150a8f144af34e68b3b3e5 url: "https://pub.dev" source: hosted - version: "2.8.1" + version: "2.18.1" firebase_crashlytics: dependency: "direct main" description: name: firebase_crashlytics - sha256: "27f78b1fdad2a7f557abea17c3e0ba882bd0430ddffb7844634d41e51422e43e" + sha256: "6899800fff1af819955aef740f18c4c8600f8b952a2a1ea97bc0872ebb257387" url: "https://pub.dev" source: hosted - version: "3.4.5" + version: "4.1.3" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface - sha256: "48b6cfb3e2fe3955ce1dfe16a0cceacb7d293277fda77eb47c058bfff94268e0" + sha256: "97c47b0a1779a3d4118416a3f0c6c564cc59ad89095e899893204d4b2ad08f4c" + url: "https://pub.dev" + source: hosted + version: "3.6.44" + firebase_messaging: + dependency: "direct main" + description: + name: firebase_messaging + sha256: eb6e28a3a35deda61fe8634967c84215efc19133ba58d8e0fc6c9a2af2cba05e + url: "https://pub.dev" + source: hosted + version: "15.1.3" + firebase_messaging_platform_interface: + dependency: transitive + description: + name: firebase_messaging_platform_interface + sha256: b316c4ee10d93d32c033644207afc282d9b2b4372f3cf9c6022f3558b3873d2d url: "https://pub.dev" source: hosted - version: "3.6.13" + version: "4.5.46" + firebase_messaging_web: + dependency: transitive + description: + name: firebase_messaging_web + sha256: d7f0147a1a9fe4313168e20154a01fd5cf332898de1527d3930ff77b8c7f5387 + url: "https://pub.dev" + source: hosted + version: "3.9.2" flutter: dependency: "direct main" description: flutter @@ -276,18 +322,18 @@ packages: dependency: "direct main" description: name: flutter_native_splash - sha256: c4d899312b36e7454bedfd0a4740275837b99e532d81c8477579d8183db1de6c + sha256: ee5c9bd2b74ea8676442fd4ab876b5d41681df49276488854d6c81a5377c0ef1 url: "https://pub.dev" source: hosted - version: "2.3.6" + version: "2.4.2" flutter_svg: dependency: "direct main" description: name: flutter_svg - sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c + sha256: de82e6bf958cec7190fbc1c5298282c851228e35ae2b14e2b103e7f777818c64 url: "https://pub.dev" source: hosted - version: "2.0.9" + version: "2.0.13" flutter_test: dependency: "direct dev" description: flutter @@ -318,10 +364,10 @@ packages: dependency: transitive description: name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "4.0.0" fuchsia_remote_debug_protocol: dependency: transitive description: flutter @@ -339,18 +385,18 @@ packages: dependency: transitive description: name: html - sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" + sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" url: "https://pub.dev" source: hosted - version: "0.15.4" + version: "0.15.5" http: dependency: "direct dev" description: name: http - sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525" + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -371,18 +417,18 @@ packages: dependency: transitive description: name: image - sha256: "028f61960d56f26414eb616b48b04eb37d700cbe477b7fb09bf1d7ce57fd9271" + sha256: f31d52537dc417fdcde36088fdf11d191026fd5e4fae742491ebd40e5a8bea7d url: "https://pub.dev" source: hosted - version: "4.1.3" + version: "4.3.0" intl: dependency: transitive description: name: intl - sha256: a3715e3bc90294e971cb7dc063fbf3cd9ee0ebf8604ffeafabd9e6f16abbdbe6 + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.0" + version: "0.19.0" io: dependency: transitive description: @@ -395,18 +441,50 @@ packages: dependency: transitive description: name: js - sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf + url: "https://pub.dev" + source: hosted + version: "0.7.1" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" + url: "https://pub.dev" + source: hosted + version: "10.0.5" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" + url: "https://pub.dev" + source: hosted + version: "3.0.5" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" url: "https://pub.dev" source: hosted - version: "0.6.7" + version: "3.0.1" logging: dependency: transitive description: name: logging - sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.3.0" + macros: + dependency: transitive + description: + name: macros + sha256: "0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536" + url: "https://pub.dev" + source: hosted + version: "0.1.2-main.4" mailto: dependency: "direct main" description: @@ -419,34 +497,34 @@ packages: dependency: transitive description: name: matcher - sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.15" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.15.0" mime: dependency: transitive description: name: mime - sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "2.0.0" nested: dependency: transitive description: @@ -483,10 +561,10 @@ packages: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_drawing: dependency: transitive description: @@ -499,34 +577,34 @@ packages: dependency: transitive description: name: path_parsing - sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.1.0" path_provider: dependency: "direct main" description: name: path_provider - sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa + sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.5" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: e595b98692943b4881b219f0a9e3945118d3c16bd7e2813f98ec6e532d905f72 + sha256: c464428172cb986b758c6d1724c603097febb8fb855aa265aeecc9280c294d4a url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.2.12" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "19314d595120f82aca0ba62787d58dde2cc6b5df7d2f0daf72489e38d1b57f2d" + sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.4.0" path_provider_linux: dependency: transitive description: @@ -539,98 +617,90 @@ packages: dependency: transitive description: name: path_provider_platform_interface - sha256: bced5679c7df11190e1ddc35f3222c858f328fff85c3942e46e7f5589bf9eb84 + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.2" path_provider_windows: dependency: transitive description: name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.0" permission_handler: dependency: "direct main" description: name: permission_handler - sha256: "860c6b871c94c78e202dc69546d4d8fd84bd59faeb36f8fb9888668a53ff4f78" + sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb" url: "https://pub.dev" source: hosted - version: "11.1.0" + version: "11.3.1" permission_handler_android: dependency: transitive description: name: permission_handler_android - sha256: "2f1bec180ee2f5665c22faada971a8f024761f632e93ddc23310487df52dcfa6" + sha256: "71bbecfee799e65aff7c744761a57e817e73b738fedf62ab7afd5593da21f9f1" url: "https://pub.dev" source: hosted - version: "12.0.1" + version: "12.0.13" permission_handler_apple: dependency: transitive description: name: permission_handler_apple - sha256: "1a816084338ada8d574b1cb48390e6e8b19305d5120fe3a37c98825bacc78306" + sha256: e6f6d73b12438ef13e648c4ae56bd106ec60d17e90a59c4545db6781229082a0 url: "https://pub.dev" source: hosted - version: "9.2.0" + version: "9.4.5" permission_handler_html: dependency: transitive description: name: permission_handler_html - sha256: d96ff56a757b7f04fa825c469d296c5aebc55f743e87bd639fef91a466a24da8 + sha256: af26edbbb1f2674af65a8f4b56e1a6f526156bc273d0e65dd8075fab51c78851 url: "https://pub.dev" source: hosted - version: "0.1.0+1" + version: "0.1.3+2" permission_handler_platform_interface: dependency: transitive description: name: permission_handler_platform_interface - sha256: d87349312f7eaf6ce0adaf668daf700ac5b06af84338bd8b8574dfbd93ffe1a1 + sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9 url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "4.2.3" permission_handler_windows: dependency: transitive description: name: permission_handler_windows - sha256: "1e8640c1e39121128da6b816d236e714d2cf17fac5a105dd6acdd3403a628004" + sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e" url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.2.1" petitparser: dependency: transitive description: name: petitparser - sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 url: "https://pub.dev" source: hosted - version: "5.4.0" + version: "6.0.2" platform: dependency: transitive description: name: platform - sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102 + sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "3.1.5" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: "43798d895c929056255600343db8f049921cbec94d31ec87f1dc5c16c01935dd" - url: "https://pub.dev" - source: hosted - version: "2.1.5" - pointycastle: - dependency: transitive - description: - name: pointycastle - sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" url: "https://pub.dev" source: hosted - version: "3.7.3" + version: "2.1.8" pool: dependency: transitive description: @@ -643,18 +713,18 @@ packages: dependency: transitive description: name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32" url: "https://pub.dev" source: hosted - version: "4.2.4" + version: "5.0.2" provider: dependency: "direct main" description: name: provider - sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096" + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c url: "https://pub.dev" source: hosted - version: "6.1.1" + version: "6.1.2" pub_semver: dependency: transitive description: @@ -667,58 +737,58 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" + sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051" url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.3.2" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: fe8401ec5b6dcd739a0fe9588802069e608c3fdbfd3c3c93e546cf2f90438076 + sha256: "3b9febd815c9ca29c9e3520d50ec32f49157711e143b7a4ca039eb87e8ade5ab" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.3" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: f39696b83e844923b642ce9dd4bd31736c17e697f6731a5adf445b1274cf3cd4 + sha256: "07e050c7cd39bad516f8d64c455f04508d09df104be326d8c02551590a0d513d" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.5.3" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "71d6806d1449b0a9d4e85e0c7a917771e672a3d5dc61149cc9fac871115018e1" + sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.4.1" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "23b052f17a25b90ff2b61aad4cc962154da76fb62848a9ce088efe30d7c50ab1" + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.4.1" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: "7347b194fb0bbeb4058e6a4e87ee70350b6b2b90f8ac5f8bd5b3a01548f6d33a" + sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.4.2" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: f95e6a43162bce43c9c3405f3eb6f39e5b5d11f65fab19196cf8225e2777624d + sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.4.1" shelf: dependency: transitive description: @@ -739,18 +809,18 @@ packages: dependency: transitive description: name: shelf_static - sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e + sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.1.3" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "2.0.0" sky_engine: dependency: transitive description: flutter @@ -760,10 +830,10 @@ packages: dependency: transitive description: name: source_map_stack_trace - sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" source_maps: dependency: transitive description: @@ -776,10 +846,10 @@ packages: dependency: transitive description: name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" stack_trace: dependency: transitive description: @@ -824,34 +894,34 @@ packages: dependency: "direct dev" description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "7ee44229615f8f642b68120165ae4c2a75fe77ae2065b1e55ae4711f6cf0899e" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.7" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.2" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "55ea5a652e38a1dfb32943a7973f3681a60f872f8c3a05a14664ad54ef9c6696" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.4" typed_data: dependency: transitive description: name: typed_data - sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.4.0" universal_io: dependency: transitive description: @@ -864,90 +934,90 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: b1c9e98774adf8820c96fbc7ae3601231d324a7d5ebd8babe27b6dfac91357ba + sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" url: "https://pub.dev" source: hosted - version: "6.2.1" + version: "6.3.1" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "31222ffb0063171b526d3e569079cf1f8b294075ba323443fdc690842bfd4def" + sha256: "6fc2f56536ee873eeb867ad176ae15f304ccccc357848b351f6f0d8d4a40d193" url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "6.3.14" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: bba3373219b7abb6b5e0d071b0fe66dfbe005d07517a68e38d4fc3638f35c6d3 + sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e url: "https://pub.dev" source: hosted - version: "6.2.1" + version: "6.3.1" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "9f2d390e096fdbe1e6e6256f97851e51afc2d9c423d3432f1d6a02a8a9a8b9fd" + sha256: e2b9622b4007f97f504cd64c0128309dfb978ae66adbe944125ed9e1750f06af url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.2.0" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: b7244901ea3cf489c5335bdacda07264a6e960b1c1b1a9f91e4bc371d9e68234 + sha256: "769549c999acdb42b8bcfa7c43d72bf79a382ca7441ab18a808e101149daf672" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.2.1" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - sha256: "980e8d9af422f477be6948bdfb68df8433be71f5743a188968b0c1b887807e50" + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.2" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: "7fd2f55fe86cea2897b963e864dc01a7eb0719ecc65fcef4c1cc3d686d718bb2" + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.3" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "7754a1ad30ee896b265f8d14078b0513a4dba28d358eabb9d5f339886f4a1adc" + sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.3" vector_graphics: dependency: transitive description: name: vector_graphics - sha256: "0f0c746dd2d6254a0057218ff980fc7f5670fd0fcf5e4db38a490d31eed4ad43" + sha256: "773c9522d66d523e1c7b25dfb95cc91c26a1e17b107039cfe147285e92de7878" url: "https://pub.dev" source: hosted - version: "1.1.9+1" + version: "1.1.14" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: "0edf6d630d1bfd5589114138ed8fada3234deacc37966bec033d3047c29248b7" + sha256: "2430b973a4ca3c4dbc9999b62b8c719a160100dcbae5c819bae0cacce32c9cdb" url: "https://pub.dev" source: hosted - version: "1.1.9+1" + version: "1.1.12" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: d24333727332d9bd20990f1483af4e09abdb9b1fc7c3db940b56ab5c42790c26 + sha256: "26d520739b7c6b5d2a2b3274427874a8390831fd4cd5bb8cfbd7d913477d3a2e" url: "https://pub.dev" source: hosted - version: "1.1.9+1" + version: "1.1.14" vector_math: dependency: transitive description: @@ -960,10 +1030,10 @@ packages: dependency: transitive description: name: vm_service - sha256: c538be99af830f478718b51630ec1b6bee5e74e52c8a802d328d9e71d35d2583 + sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" url: "https://pub.dev" source: hosted - version: "11.10.0" + version: "14.2.5" watcher: dependency: transitive description: @@ -976,34 +1046,42 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "1.1.0" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" + url: "https://pub.dev" + source: hosted + version: "0.1.6" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "3.0.1" webdriver: dependency: transitive description: name: webdriver - sha256: "3c923e918918feeb90c4c9fdf1fe39220fa4c0e8e2c0fffaded174498ef86c49" + sha256: "003d7da9519e1e5f329422b36c4dcdf18d7d2978d1ba099ea4e45ba490ed845e" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" webkit_inspection_protocol: dependency: transitive description: name: webkit_inspection_protocol - sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d" + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" webview_cookie_manager: dependency: "direct main" description: @@ -1016,58 +1094,50 @@ packages: dependency: "direct main" description: name: webview_flutter - sha256: "392c1d83b70fe2495de3ea2c84531268d5b8de2de3f01086a53334d8b6030a88" + sha256: "889a0a678e7c793c308c68739996227c9661590605e70b1f6cf6b9a6634f7aec" url: "https://pub.dev" source: hosted - version: "3.0.4" + version: "4.10.0" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - sha256: "8b3b2450e98876c70bfcead876d9390573b34b9418c19e28168b74f6cb252dbd" + sha256: dec83a8da0a2dcd8a25418534cc59348dbc2855fa1dd0cc929c62b6029fde392 url: "https://pub.dev" source: hosted - version: "2.10.4" + version: "4.0.1" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - sha256: "812165e4e34ca677bdfbfa58c01e33b27fd03ab5fa75b70832d4b7d4ca1fa8cf" + sha256: d937581d6e558908d7ae3dc1989c4f87b786891ab47bb9df7de548a151779d8d url: "https://pub.dev" source: hosted - version: "1.9.5" + version: "2.10.0" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - sha256: a5364369c758892aa487cbf59ea41d9edd10f9d9baf06a94e80f1bd1b4c7bbc0 + sha256: f14ee08021772fed913da8daebcfdeb46be457081e521e93e9918fe6cd1ce9e8 url: "https://pub.dev" source: hosted - version: "2.9.5" - win32: - dependency: transitive - description: - name: win32 - sha256: f2add6fa510d3ae152903412227bda57d0d5a8da61d2c39c1fb022c9429a41c0 - url: "https://pub.dev" - source: hosted - version: "5.0.6" + version: "3.16.1" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: e0b1147eec179d3911f1f19b59206448f78195ca1d20514134e10641b7d7fbff + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.1.0" xml: dependency: transitive description: name: xml - sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84" + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 url: "https://pub.dev" source: hosted - version: "6.3.0" + version: "6.5.0" yaml: dependency: transitive description: @@ -1077,5 +1147,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0-194.0.dev <4.0.0" - flutter: ">=3.16.0" + dart: ">=3.5.0 <4.0.0" + flutter: ">=3.24.3"