Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UI/general #52

Merged
merged 6 commits into from
Apr 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file removed Assets/.DS_Store
Binary file not shown.
10 changes: 5 additions & 5 deletions Assets/sv.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -392,19 +392,19 @@

"Save schedules"="Spara scheman";

"Search for schedules from the search page and download them locally. View them as a list or a in a dedicated calendar."="Sök efter scheman från söksidan och ladda ner dem lokalt. visa dem som en lista eller i en särskild kalender.";
"Search for schedules from the search page and download them locally. View them as a list or a in a dedicated calendar."="Sök efter scheman från söksidan och ladda ner dem lokalt. Visa dem som en lista eller i en särskild kalender.";

"Set notifications"="Ställ in aviseringar";

"Get notified before important events and dates. Just press an event and set notifications for either a course or a single event."="Få aviseringar innan viktiga händelser och datum. tryck bara på en händelse och ställ in aviseringar för antingen en kurs eller en enskild händelse.";
"Get notified before important events and dates. Just press an event and set notifications for either a course or a single event."="Få aviseringar innan viktiga händelser och datum. Tryck bara på en händelse och ställ in aviseringar för antingen en kurs eller en enskild händelse.";

"Be creative"="Vara kreativ";
"Be creative"="Var kreativ";

"Set custom colors for the courses in your schedules. Just press an event and modify the color to your liking."="Ställ in anpassade färger för kurserna i dina scheman. tryck bara på en händelse och ändra färgen efter eget tycke.";
"Set custom colors for the courses in your schedules. Just press an event and modify the color to your liking."="Ställ in anpassade färger för kurserna i dina scheman. Tryck bara på en händelse och ändra färgen efter eget tycke.";

"Booking"="Bokning";

"Log in to your KronoX account and book resources and exams. Booking is easy, and notifications remind you to confirm the bookings you've created."="Logga in på ditt kronox-konto och boka resurser och tentor. det är enkelt att boka och aviseringar påminner dig om att bekräfta bokningarna du har skapat.";
"Log in to your KronoX account and book resources and exams. Booking is easy, and notifications remind you to confirm the bookings you've created."="Logga in på ditt kronox-konto och boka resurser och tentor. Det är enkelt att boka och aviseringar påminner dig om att bekräfta bokningarna du har skapat.";

"Select university"="Välj universitet";

Expand Down
2 changes: 1 addition & 1 deletion Sources/Domain/Enums/Types/NetworkResult.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import Foundation

enum NetworkResult<Success, Failure> where Failure : Swift.Error {
enum NetworkResult<Success, Failure> where Failure: Swift.Error {
case success(Success)
case failure(Failure)
case demo
Expand Down
30 changes: 15 additions & 15 deletions Sources/Extensions/Observables/AccountViewModelExtension.swift
Original file line number Diff line number Diff line change
Expand Up @@ -50,21 +50,21 @@ extension AccountViewModel {
case .success((let schoolId, let refreshToken)):
let request = Endpoint.registerAllEvents(schoolId: String(schoolId))
_ = kronoxManager.put(request, refreshToken: refreshToken, body: Request.Empty(),
then: { (result: Result<Response.KronoxEventRegistration?, Response.ErrorMessage>) in
DispatchQueue.main.async {
switch result {
case .success(let eventRegistrations):
if let eventRegistrations = eventRegistrations {
AppLogger.shared.debug("Successful registrations: \(String(describing: eventRegistrations.successfulRegistrations?.count))")
AppLogger.shared.debug("Failed registrations: \(String(describing: eventRegistrations.failedRegistrations?.count))")
completion(.success(()))
}
case .failure(let failure):
AppLogger.shared.critical("Failed to automatically sign up for exams: \(failure)")
completion(.failure(.generic(reason: "\(failure)")))
}
}
})
then: { (result: Result<Response.KronoxEventRegistration?, Response.ErrorMessage>) in
DispatchQueue.main.async {
switch result {
case .success(let eventRegistrations):
if let eventRegistrations = eventRegistrations {
AppLogger.shared.debug("Successful registrations: \(String(describing: eventRegistrations.successfulRegistrations?.count))")
AppLogger.shared.debug("Failed registrations: \(String(describing: eventRegistrations.failedRegistrations?.count))")
completion(.success(()))
}
case .failure(let failure):
AppLogger.shared.critical("Failed to automatically sign up for exams: \(failure)")
completion(.failure(.generic(reason: "\(failure)")))
}
}
})
case .failure(let failure):
AppLogger.shared.critical("Could not log in to register for available events")
completion(.failure(.generic(reason: "\(failure)")))
Expand Down
15 changes: 7 additions & 8 deletions Sources/Extensions/Observables/UserControllerExtension.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import Foundation
extension UserController {
func logOutDemo() {
preferenceService.setInAppReview(value: false)
self.user = nil
self.authStatus = .unAuthorized
user = nil
authStatus = .unAuthorized
}

func logOut(completion: ((Bool) -> Void)? = nil) {
Expand All @@ -37,15 +37,14 @@ extension UserController {
}

func loginDemo(
username: String,
password: String
) -> Bool {
self.user = TumbleUser(username: username, password: password, name: "App Review Team")
self.authStatus = .authorized
username: String,
password: String
) -> Bool {
user = TumbleUser(username: username, password: password, name: "App Review Team")
authStatus = .authorized
return true
}


func logIn(
authSchoolId: Int,
username: String,
Expand Down
2 changes: 1 addition & 1 deletion Sources/Extensions/Presentation/View/ImageExtensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ extension Image {

func actionIcon() -> some View {
font(.system(size: 17, weight: .medium))
.foregroundColor(.onBackground)
.foregroundColor(.primary)
}

func featureIcon() -> some View {
Expand Down
3 changes: 1 addition & 2 deletions Sources/Observables/Controllers/UserController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class UserController: ObservableObject {
let authSchoolId = preferenceService.getDefaultAuthSchool() ?? -1
let inAppReview = preferenceService.isInAppReview()
if inAppReview {
self.authStatus = .authorized
authStatus = .authorized
return
}
autoLogin(authSchoolId: authSchoolId, completion: {
Expand Down Expand Up @@ -53,7 +53,6 @@ class UserController: ObservableObject {
refreshToken: Token?,
execute: @escaping (NetworkResult<(Int, String), Error>) -> Void
) {

// Check if in review by apple
if preferenceService.inAppReview {
execute(.demo)
Expand Down
79 changes: 39 additions & 40 deletions Sources/Observables/ViewModels/AccountViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import Foundation
// for KronoX events, and booking and unbooking of resources.
final class AccountViewModel: ObservableObject {
let viewModelFactory: ViewModelFactory = .shared
let dummyDataFactory: DummyDataFactory = DummyDataFactory()
let dummyDataFactory: DummyDataFactory = .init()

@Inject var userController: UserController
@Inject var kronoxManager: KronoxManager
Expand Down Expand Up @@ -72,7 +72,7 @@ final class AccountViewModel: ObservableObject {

Publishers.CombineLatest3(authStatusPublisher, schoolIdPublisher, inAppReviewPublisher)
.receive(on: DispatchQueue.main)
.sink { authStatus, authSchoolId, inAppReview in
.sink { authStatus, authSchoolId, _ in
switch authStatus {
case .authorized:
self.status = .authenticated
Expand Down Expand Up @@ -137,7 +137,6 @@ final class AccountViewModel: ObservableObject {
password: String,
createToast: @escaping (Bool) -> Void
) {

// Check if matching demo user
let (demoUsername, demoPassword) = getDemoUserCredentials()
if username == demoUsername && password == demoPassword {
Expand Down Expand Up @@ -180,16 +179,16 @@ final class AccountViewModel: ObservableObject {
let request = Endpoint.userEvents(schoolId: String(schoolId))
self.eventSectionDataTask =
self.kronoxManager.get(request, refreshToken: refreshToken,
then: { (result: Result<Response.KronoxCompleteUserEvent?, Response.ErrorMessage>) in
switch result {
case .success(let events):
self.completeUserEvent = events
self.registeredEventSectionState = .loaded
case .failure(let failure):
AppLogger.shared.critical("Could not get user events: \(failure)")
self.registeredEventSectionState = .error
}
})
then: { (result: Result<Response.KronoxCompleteUserEvent?, Response.ErrorMessage>) in
switch result {
case .success(let events):
self.completeUserEvent = events
self.registeredEventSectionState = .loaded
case .failure(let failure):
AppLogger.shared.critical("Could not get user events: \(failure)")
self.registeredEventSectionState = .error
}
})
case .failure:
DispatchQueue.main.async {
self.registeredEventSectionState = .error
Expand Down Expand Up @@ -218,22 +217,22 @@ final class AccountViewModel: ObservableObject {
case .success((let schoolId, let refreshToken)):
let request = Endpoint.userBookings(schoolId: String(schoolId))
self.resourceSectionDataTask = self.kronoxManager.get(request, refreshToken: refreshToken,
then: { [weak self] (result: Result<Response.KronoxUserBookings, Response.ErrorMessage>) in
guard let self = self else { return }
switch result {
case .success(let bookings):
DispatchQueue.main.async {
self.bookingSectionState = .loaded
self.userBookings = bookings
}
self.checkNotificationsForUserBookings(bookings: bookings)
case .failure(let failure):
AppLogger.shared.debug("\(failure)")
DispatchQueue.main.async {
self.bookingSectionState = .error
}
}
})
then: { [weak self] (result: Result<Response.KronoxUserBookings, Response.ErrorMessage>) in
guard let self = self else { return }
switch result {
case .success(let bookings):
DispatchQueue.main.async {
self.bookingSectionState = .loaded
self.userBookings = bookings
}
self.checkNotificationsForUserBookings(bookings: bookings)
case .failure(let failure):
AppLogger.shared.debug("\(failure)")
DispatchQueue.main.async {
self.bookingSectionState = .error
}
}
})
case .failure:
DispatchQueue.main.async {
self.bookingSectionState = .error
Expand Down Expand Up @@ -317,17 +316,17 @@ final class AccountViewModel: ObservableObject {
case .success((let schoolId, let refreshToken)):
let request = Endpoint.userBookings(schoolId: String(schoolId))
self.resourceSectionDataTask = self.kronoxManager.get(request, refreshToken: refreshToken,
then: { (result: Result<Response.KronoxUserBookings, Response.ErrorMessage>) in
switch result {
case .success(let bookings):
self.scheduleBookingNotifications(for: bookings)
case .failure(let failure):
AppLogger.shared.debug("\(failure)")
DispatchQueue.main.async {
self.bookingSectionState = .error
}
}
})
then: { (result: Result<Response.KronoxUserBookings, Response.ErrorMessage>) in
switch result {
case .success(let bookings):
self.scheduleBookingNotifications(for: bookings)
case .failure(let failure):
AppLogger.shared.debug("\(failure)")
DispatchQueue.main.async {
self.bookingSectionState = .error
}
}
})
case .failure:
DispatchQueue.main.async {
self.bookingSectionState = .error
Expand Down
Loading