From 5fd523b8370f4c56ae7dc12f7f8d16a37cb3581f Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Sun, 22 Oct 2023 21:03:30 +0900 Subject: [PATCH 01/30] feat: add support watchOS --- .../AccentColor.colorset/Contents.json | 11 ++++++++ .../AppIcon.appiconset/Contents.json | 13 ++++++++++ .../Assets.xcassets/Contents.json | 6 +++++ ios/OTL Watch App/ContentView.swift | 25 +++++++++++++++++++ ios/OTL Watch App/OTL Watch App.entitlements | 10 ++++++++ ios/OTL Watch App/OTLApp.swift | 18 +++++++++++++ .../Preview Assets.xcassets/Contents.json | 6 +++++ 7 files changed, 89 insertions(+) create mode 100644 ios/OTL Watch App/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/OTL Watch App/Assets.xcassets/Contents.json create mode 100644 ios/OTL Watch App/ContentView.swift create mode 100644 ios/OTL Watch App/OTL Watch App.entitlements create mode 100644 ios/OTL Watch App/OTLApp.swift create mode 100644 ios/OTL Watch App/Preview Content/Preview Assets.xcassets/Contents.json diff --git a/ios/OTL Watch App/Assets.xcassets/AccentColor.colorset/Contents.json b/ios/OTL Watch App/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 00000000..eb878970 --- /dev/null +++ b/ios/OTL Watch App/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} 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/Assets.xcassets/Contents.json b/ios/OTL Watch App/Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/ios/OTL Watch App/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/OTL Watch App/ContentView.swift b/ios/OTL Watch App/ContentView.swift new file mode 100644 index 00000000..5b902d1e --- /dev/null +++ b/ios/OTL Watch App/ContentView.swift @@ -0,0 +1,25 @@ +// +// ContentView.swift +// OTL Watch App +// +// Created by Soongyu Kwon on 10/22/23. +// Copyright © 2023 The Chromium Authors. All rights reserved. +// + +import SwiftUI + +struct ContentView: View { + var body: some View { + VStack { + Image(systemName: "globe") + .imageScale(.large) + .foregroundStyle(.tint) + Text("Hello OTL!") + } + .padding() + } +} + +#Preview { + ContentView() +} diff --git a/ios/OTL Watch App/OTL Watch App.entitlements b/ios/OTL Watch App/OTL Watch App.entitlements new file mode 100644 index 00000000..fa0dd1e1 --- /dev/null +++ b/ios/OTL Watch App/OTL Watch App.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.application-groups + + group.org.sparcs.otl + + + diff --git a/ios/OTL Watch App/OTLApp.swift b/ios/OTL Watch App/OTLApp.swift new file mode 100644 index 00000000..ab04ba43 --- /dev/null +++ b/ios/OTL Watch App/OTLApp.swift @@ -0,0 +1,18 @@ +// +// OTLApp.swift +// OTL Watch App +// +// Created by Soongyu Kwon on 10/22/23. +// Copyright © 2023 The Chromium Authors. All rights reserved. +// + +import SwiftUI + +@main +struct OTL_Watch_AppApp: App { + var body: some Scene { + WindowGroup { + ContentView() + } + } +} diff --git a/ios/OTL Watch App/Preview Content/Preview Assets.xcassets/Contents.json b/ios/OTL Watch App/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/ios/OTL Watch App/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} From 2268159d974dcc033005d0066a6ebf3f07a5bd73 Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Thu, 9 Nov 2023 06:28:43 +0900 Subject: [PATCH 02/30] chore: update packages --- pubspec.lock | 405 ++++++++++++++++++++++----------------------------- 1 file changed, 178 insertions(+), 227 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index a92bf862..358ae97c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,50 +5,50 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" + sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a url: "https://pub.dev" source: hosted - version: "67.0.0" + version: "61.0.0" _flutterfire_internals: dependency: transitive description: name: _flutterfire_internals - sha256: "5534e701a2c505fed1f0799e652dd6ae23bd4d2c4cf797220e5ced5764a7c1c2" + sha256: dd68ecea9f1e3556d385521bd21c7bafd6311a8c1e11abe2595ca27974f468ee url: "https://pub.dev" source: hosted - version: "1.3.44" + version: "1.3.13" analyzer: dependency: transitive description: name: analyzer - sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" + sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 url: "https://pub.dev" source: hosted - version: "6.4.1" + version: "5.13.0" ansicolor: dependency: transitive description: name: ansicolor - sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + sha256: "8bf17a8ff6ea17499e40a2d2542c2f481cd7615760c6d34065cb22bfd22e6880" url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "2.0.2" archive: dependency: transitive description: name: archive - sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + sha256: "7b875fd4a20b165a3084bd2d210439b22ebc653f21cea4842729c0c30c82596b" url: "https://pub.dev" source: hosted - version: "3.6.1" + version: "3.4.9" args: dependency: transitive description: name: args - sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6 + sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 url: "https://pub.dev" source: hosted - version: "2.6.0" + version: "2.4.2" async: dependency: transitive description: @@ -65,15 +65,6 @@ 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: @@ -110,10 +101,10 @@ packages: dependency: transitive description: name: coverage - sha256: "576aaab8b1abdd452e0f656c3e73da9ead9d7880e15bdc494189d9c1a1baf0db" + sha256: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.6.3" crypto: dependency: transitive description: @@ -134,18 +125,10 @@ packages: dependency: "direct main" description: name: dio - sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" + sha256: "01870acd87986f768e0c09cc4d7a19a59d814af7b34cbeb0b437d2c33bdfea4c" 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: "2.0.0" + version: "5.3.4" dotted_border: dependency: "direct main" description: @@ -158,18 +141,18 @@ packages: dependency: "direct main" description: name: dropdown_button2 - sha256: cb589893f90bade7452abd8ccffa3d811071febcfa8a1e5bb6d6eb593cdb3fa9 + sha256: cbf05433833cfb77730e05c678b0b055547d488a8ce05280d62fb07f269cc03d url: "https://pub.dev" source: hosted - version: "3.0.0-beta.19" + version: "3.0.0-beta.7" easy_localization: dependency: "direct main" description: name: easy_localization - sha256: fa59bcdbbb911a764aa6acf96bbb6fa7a5cf8234354fc45ec1a43a0349ef0201 + sha256: de63e3b422adfc97f256cbb3f8cf12739b6a4993d390f3cadb3f51837afaefe5 url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "3.0.3" easy_logger: dependency: transitive description: @@ -198,106 +181,82 @@ packages: dependency: transitive description: name: ffi - sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" + sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99 url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.0.2" file: dependency: transitive description: name: file - sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "6.1.4" firebase_analytics: dependency: "direct main" description: name: firebase_analytics - sha256: "2c4e7b548d41b46e8aa08bc3bd1163146be7e6d48f678f2e6dd3114994e42458" + sha256: de3d73b5c5618bf31004308b017b4067b7d9156b96e97b62d59ae5eab71081ec url: "https://pub.dev" source: hosted - version: "11.3.3" + version: "10.7.1" firebase_analytics_platform_interface: dependency: transitive description: name: firebase_analytics_platform_interface - sha256: c259ae890c7d4c5d1675d35936be0b1fcd587fce9645948982cd87ad08df6222 + sha256: ffc59c0b00a572cd1fbf915a1d50cb4ccdc61e429614aa6ae9a598ee5723b96a url: "https://pub.dev" source: hosted - version: "4.2.5" + version: "3.8.1" firebase_analytics_web: dependency: transitive description: name: firebase_analytics_web - sha256: "5988d1fd022e55515c2a14811c9b5104c32acde115874a9a69ff7c77c4c05cd9" + sha256: "0e725a7dcdeb0a59e44d93d1d45dfec94efe54329ac9d6aa145e24d31429100c" url: "https://pub.dev" source: hosted - version: "0.5.10+2" + version: "0.5.5+8" firebase_core: dependency: "direct main" description: name: firebase_core - sha256: "51dfe2fbf3a984787a2e7b8592f2f05c986bfedd6fdacea3f9e0a7beb334de96" + sha256: "471b46ea6a9af503184d4de691566887daedd312aec5baac5baa42d819f56446" url: "https://pub.dev" source: hosted - version: "3.6.0" + version: "2.23.0" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface - sha256: e30da58198a6d4b49d5bce4e852f985c32cb10db329ebef9473db2b9f09ce810 + sha256: c437ae5d17e6b5cc7981cf6fd458a5db4d12979905f9aafd1fea930428a9fe63 url: "https://pub.dev" source: hosted - version: "5.3.0" + version: "5.0.0" firebase_core_web: dependency: transitive description: name: firebase_core_web - sha256: f967a7138f5d2ffb1ce15950e2a382924239eaa521150a8f144af34e68b3b3e5 + sha256: "0631a2ec971dbc540275e2fa00c3a8a2676f0a7adbc3c197d6fba569db689d97" url: "https://pub.dev" source: hosted - version: "2.18.1" + version: "2.8.1" firebase_crashlytics: dependency: "direct main" description: name: firebase_crashlytics - sha256: "6899800fff1af819955aef740f18c4c8600f8b952a2a1ea97bc0872ebb257387" + sha256: "27f78b1fdad2a7f557abea17c3e0ba882bd0430ddffb7844634d41e51422e43e" url: "https://pub.dev" source: hosted - version: "4.1.3" + version: "3.4.5" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface - sha256: "97c47b0a1779a3d4118416a3f0c6c564cc59ad89095e899893204d4b2ad08f4c" - url: "https://pub.dev" - source: hosted - version: "3.6.44" - firebase_messaging: - dependency: "direct main" - description: - name: firebase_messaging - sha256: eb6e28a3a35deda61fe8634967c84215efc19133ba58d8e0fc6c9a2af2cba05e + sha256: "48b6cfb3e2fe3955ce1dfe16a0cceacb7d293277fda77eb47c058bfff94268e0" 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: "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" + version: "3.6.13" flutter: dependency: "direct main" description: flutter @@ -317,18 +276,18 @@ packages: dependency: "direct main" description: name: flutter_native_splash - sha256: ee5c9bd2b74ea8676442fd4ab876b5d41681df49276488854d6c81a5377c0ef1 + sha256: c4d899312b36e7454bedfd0a4740275837b99e532d81c8477579d8183db1de6c url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.3.6" flutter_svg: dependency: "direct main" description: name: flutter_svg - sha256: "1b7723a814d84fb65869ea7115cdb3ee7c3be5a27a755c1ec60e049f6b9fcbb2" + sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c url: "https://pub.dev" source: hosted - version: "2.0.11" + version: "2.0.9" flutter_test: dependency: "direct dev" description: flutter @@ -359,10 +318,10 @@ packages: dependency: transitive description: name: frontend_server_client - sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "3.2.0" fuchsia_remote_debug_protocol: dependency: transitive description: flutter @@ -388,10 +347,10 @@ packages: dependency: "direct dev" description: name: http - sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 + sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525" url: "https://pub.dev" source: hosted - version: "1.2.2" + version: "1.1.0" http_multi_server: dependency: transitive description: @@ -412,18 +371,18 @@ packages: dependency: transitive description: name: image - sha256: f31d52537dc417fdcde36088fdf11d191026fd5e4fae742491ebd40e5a8bea7d + sha256: "028f61960d56f26414eb616b48b04eb37d700cbe477b7fb09bf1d7ce57fd9271" url: "https://pub.dev" source: hosted - version: "4.3.0" + version: "4.1.3" intl: dependency: transitive description: name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + sha256: a3715e3bc90294e971cb7dc063fbf3cd9ee0ebf8604ffeafabd9e6f16abbdbe6 url: "https://pub.dev" source: hosted - version: "0.19.0" + version: "0.18.0" io: dependency: transitive description: @@ -436,34 +395,10 @@ packages: dependency: transitive description: name: js - 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" + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 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: "3.0.1" + version: "0.6.7" logging: dependency: transitive description: @@ -484,34 +419,34 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.15" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 url: "https://pub.dev" source: hosted - version: "0.11.1" + version: "0.2.0" meta: dependency: transitive description: name: meta - sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.15.0" + version: "1.10.0" mime: dependency: transitive description: name: mime - sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.4" nested: dependency: transitive description: @@ -548,10 +483,10 @@ packages: dependency: transitive description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.8.3" path_drawing: dependency: transitive description: @@ -572,26 +507,26 @@ packages: dependency: "direct main" description: name: path_provider - sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" + sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.1.1" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7" + sha256: e595b98692943b4881b219f0a9e3945118d3c16bd7e2813f98ec6e532d905f72 url: "https://pub.dev" source: hosted - version: "2.2.10" + version: "2.2.1" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 + sha256: "19314d595120f82aca0ba62787d58dde2cc6b5df7d2f0daf72489e38d1b57f2d" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.3.1" path_provider_linux: dependency: transitive description: @@ -604,90 +539,98 @@ packages: dependency: transitive description: name: path_provider_platform_interface - sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + sha256: bced5679c7df11190e1ddc35f3222c858f328fff85c3942e46e7f5589bf9eb84 url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.0" path_provider_windows: dependency: transitive description: name: path_provider_windows - sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.2.1" permission_handler: dependency: "direct main" description: name: permission_handler - sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb" + sha256: "860c6b871c94c78e202dc69546d4d8fd84bd59faeb36f8fb9888668a53ff4f78" url: "https://pub.dev" source: hosted - version: "11.3.1" + version: "11.1.0" permission_handler_android: dependency: transitive description: name: permission_handler_android - sha256: eaf2a1ec4472775451e88ca6a7b86559ef2f1d1ed903942ed135e38ea0097dca + sha256: "2f1bec180ee2f5665c22faada971a8f024761f632e93ddc23310487df52dcfa6" url: "https://pub.dev" source: hosted - version: "12.0.8" + version: "12.0.1" permission_handler_apple: dependency: transitive description: name: permission_handler_apple - sha256: e6f6d73b12438ef13e648c4ae56bd106ec60d17e90a59c4545db6781229082a0 + sha256: "1a816084338ada8d574b1cb48390e6e8b19305d5120fe3a37c98825bacc78306" url: "https://pub.dev" source: hosted - version: "9.4.5" + version: "9.2.0" permission_handler_html: dependency: transitive description: name: permission_handler_html - sha256: af26edbbb1f2674af65a8f4b56e1a6f526156bc273d0e65dd8075fab51c78851 + sha256: d96ff56a757b7f04fa825c469d296c5aebc55f743e87bd639fef91a466a24da8 url: "https://pub.dev" source: hosted - version: "0.1.3+2" + version: "0.1.0+1" permission_handler_platform_interface: dependency: transitive description: name: permission_handler_platform_interface - sha256: fe0ffe274d665be8e34f9c59705441a7d248edebbe5d9e3ec2665f88b79358ea + sha256: d87349312f7eaf6ce0adaf668daf700ac5b06af84338bd8b8574dfbd93ffe1a1 url: "https://pub.dev" source: hosted - version: "4.2.2" + version: "4.0.2" permission_handler_windows: dependency: transitive description: name: permission_handler_windows - sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e" + sha256: "1e8640c1e39121128da6b816d236e714d2cf17fac5a105dd6acdd3403a628004" url: "https://pub.dev" source: hosted - version: "0.2.1" + version: "0.2.0" petitparser: dependency: transitive description: name: petitparser - sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 url: "https://pub.dev" source: hosted - version: "6.0.2" + version: "5.4.0" platform: dependency: transitive description: name: platform - sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" + sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102 url: "https://pub.dev" source: hosted - version: "3.1.5" + version: "3.1.2" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + sha256: "43798d895c929056255600343db8f049921cbec94d31ec87f1dc5c16c01935dd" + url: "https://pub.dev" + source: hosted + version: "2.1.5" + pointycastle: + dependency: transitive + description: + name: pointycastle + sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" url: "https://pub.dev" source: hosted - version: "2.1.8" + version: "3.7.3" pool: dependency: transitive description: @@ -700,18 +643,18 @@ packages: dependency: transitive description: name: process - sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32" + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "4.2.4" provider: dependency: "direct main" description: name: provider - sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c + sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096" url: "https://pub.dev" source: hosted - version: "6.1.2" + version: "6.1.1" pub_semver: dependency: transitive description: @@ -724,58 +667,58 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051" + sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.2.2" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: a7e8467e9181cef109f601e3f65765685786c1a738a83d7fbbde377589c0d974 + sha256: fe8401ec5b6dcd739a0fe9588802069e608c3fdbfd3c3c93e546cf2f90438076 url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.2.0" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: c4b35f6cb8f63c147312c054ce7c2254c8066745125264f0c88739c417fc9d9f + sha256: f39696b83e844923b642ce9dd4bd31736c17e697f6731a5adf445b1274cf3cd4 url: "https://pub.dev" source: hosted - version: "2.5.2" + version: "2.3.2" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" + sha256: "71d6806d1449b0a9d4e85e0c7a917771e672a3d5dc61149cc9fac871115018e1" url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.3.0" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" + sha256: "23b052f17a25b90ff2b61aad4cc962154da76fb62848a9ce088efe30d7c50ab1" url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.3.0" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e + sha256: "7347b194fb0bbeb4058e6a4e87ee70350b6b2b90f8ac5f8bd5b3a01548f6d33a" url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.2.0" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" + sha256: f95e6a43162bce43c9c3405f3eb6f39e5b5d11f65fab19196cf8225e2777624d url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.3.0" shelf: dependency: transitive description: @@ -833,10 +776,10 @@ packages: dependency: transitive description: name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.9.1" stack_trace: dependency: transitive description: @@ -881,26 +824,26 @@ packages: dependency: "direct dev" description: name: test - sha256: "7ee44229615f8f642b68120165ae4c2a75fe77ae2065b1e55ae4711f6cf0899e" + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f url: "https://pub.dev" source: hosted - version: "1.25.7" + version: "1.24.9" test_api: dependency: transitive description: name: test_api - sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.7.2" + version: "0.6.1" test_core: dependency: transitive description: name: test_core - sha256: "55ea5a652e38a1dfb32943a7973f3681a60f872f8c3a05a14664ad54ef9c6696" + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a url: "https://pub.dev" source: hosted - version: "0.6.4" + version: "0.5.9" typed_data: dependency: transitive description: @@ -921,90 +864,90 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" + sha256: b1c9e98774adf8820c96fbc7ae3601231d324a7d5ebd8babe27b6dfac91357ba url: "https://pub.dev" source: hosted - version: "6.3.1" + version: "6.2.1" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "94d8ad05f44c6d4e2ffe5567ab4d741b82d62e3c8e288cc1fcea45965edf47c9" + sha256: "31222ffb0063171b526d3e569079cf1f8b294075ba323443fdc690842bfd4def" url: "https://pub.dev" source: hosted - version: "6.3.8" + version: "6.2.0" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e + sha256: bba3373219b7abb6b5e0d071b0fe66dfbe005d07517a68e38d4fc3638f35c6d3 url: "https://pub.dev" source: hosted - version: "6.3.1" + version: "6.2.1" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: e2b9622b4007f97f504cd64c0128309dfb978ae66adbe944125ed9e1750f06af + sha256: "9f2d390e096fdbe1e6e6256f97851e51afc2d9c423d3432f1d6a02a8a9a8b9fd" url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "3.1.0" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" + sha256: b7244901ea3cf489c5335bdacda07264a6e960b1c1b1a9f91e4bc371d9e68234 url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "3.1.0" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + sha256: "980e8d9af422f477be6948bdfb68df8433be71f5743a188968b0c1b887807e50" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.2.0" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" + sha256: "7fd2f55fe86cea2897b963e864dc01a7eb0719ecc65fcef4c1cc3d686d718bb2" url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.2.0" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" + sha256: "7754a1ad30ee896b265f8d14078b0513a4dba28d358eabb9d5f339886f4a1adc" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "3.1.0" vector_graphics: dependency: transitive description: name: vector_graphics - sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" + sha256: "0f0c746dd2d6254a0057218ff980fc7f5670fd0fcf5e4db38a490d31eed4ad43" url: "https://pub.dev" source: hosted - version: "1.1.11+1" + version: "1.1.9+1" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da + sha256: "0edf6d630d1bfd5589114138ed8fada3234deacc37966bec033d3047c29248b7" url: "https://pub.dev" source: hosted - version: "1.1.11+1" + version: "1.1.9+1" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" + sha256: d24333727332d9bd20990f1483af4e09abdb9b1fc7c3db940b56ab5c42790c26 url: "https://pub.dev" source: hosted - version: "1.1.11+1" + version: "1.1.9+1" vector_math: dependency: transitive description: @@ -1017,10 +960,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" + sha256: c538be99af830f478718b51630ec1b6bee5e74e52c8a802d328d9e71d35d2583 url: "https://pub.dev" source: hosted - version: "14.2.5" + version: "11.10.0" watcher: dependency: transitive description: @@ -1033,10 +976,10 @@ packages: dependency: transitive description: name: web - sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "0.3.0" web_socket_channel: dependency: transitive description: @@ -1049,18 +992,18 @@ packages: dependency: transitive description: name: webdriver - sha256: "003d7da9519e1e5f329422b36c4dcdf18d7d2978d1ba099ea4e45ba490ed845e" + sha256: "3c923e918918feeb90c4c9fdf1fe39220fa4c0e8e2c0fffaded174498ef86c49" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.2" webkit_inspection_protocol: dependency: transitive description: name: webkit_inspection_protocol - sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" + sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.0" webview_cookie_manager: dependency: "direct main" description: @@ -1073,50 +1016,58 @@ packages: dependency: "direct main" description: name: webview_flutter - sha256: "889a0a678e7c793c308c68739996227c9661590605e70b1f6cf6b9a6634f7aec" + sha256: "392c1d83b70fe2495de3ea2c84531268d5b8de2de3f01086a53334d8b6030a88" url: "https://pub.dev" source: hosted - version: "4.10.0" + version: "3.0.4" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - sha256: "74693a212d990b32e0b7055d27db973a18abf31c53942063948cdfaaef9787ba" + sha256: "8b3b2450e98876c70bfcead876d9390573b34b9418c19e28168b74f6cb252dbd" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "2.10.4" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - sha256: d937581d6e558908d7ae3dc1989c4f87b786891ab47bb9df7de548a151779d8d + sha256: "812165e4e34ca677bdfbfa58c01e33b27fd03ab5fa75b70832d4b7d4ca1fa8cf" url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "1.9.5" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - sha256: d4034901d96357beb1b6717ebf7d583c88e40cfc6eb85fe76dd1bf0979a9f251 + sha256: a5364369c758892aa487cbf59ea41d9edd10f9d9baf06a94e80f1bd1b4c7bbc0 + 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: "3.16.0" + version: "5.0.6" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d + sha256: e0b1147eec179d3911f1f19b59206448f78195ca1d20514134e10641b7d7fbff url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "1.0.1" xml: dependency: transitive description: name: xml - sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84" url: "https://pub.dev" source: hosted - version: "6.5.0" + version: "6.3.0" yaml: dependency: transitive description: @@ -1126,5 +1077,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.5.0 <4.0.0" - flutter: ">=3.24.3" + dart: ">=3.2.0-194.0.dev <4.0.0" + flutter: ">=3.16.0" From 4af68c540113f5a064cdd1d6a9f6bdf034c66cae Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Thu, 9 Nov 2023 06:29:40 +0900 Subject: [PATCH 03/30] feat: Flutter-iOS-watchOS communication --- ios/OTL Watch App/ContentView.swift | 6 +- ios/OTL Watch App/WatchViewModel.swift | 66 +++++++++++++++++++++ ios/Runner/AppDelegate.swift | 80 +++++++++++++++++++++++--- lib/pages/main_page.dart | 23 ++++++++ 4 files changed, 165 insertions(+), 10 deletions(-) create mode 100644 ios/OTL Watch App/WatchViewModel.swift diff --git a/ios/OTL Watch App/ContentView.swift b/ios/OTL Watch App/ContentView.swift index 5b902d1e..ead8aa8f 100644 --- a/ios/OTL Watch App/ContentView.swift +++ b/ios/OTL Watch App/ContentView.swift @@ -3,18 +3,20 @@ // OTL Watch App // // Created by Soongyu Kwon on 10/22/23. -// Copyright © 2023 The Chromium Authors. All rights reserved. // import SwiftUI struct ContentView: View { + @ObservedObject var viewModel = WatchViewModel() + @AppStorage("sessionID") var sessionID: String = "" + var body: some View { VStack { Image(systemName: "globe") .imageScale(.large) .foregroundStyle(.tint) - Text("Hello OTL!") + Text(sessionID) } .padding() } diff --git a/ios/OTL Watch App/WatchViewModel.swift b/ios/OTL Watch App/WatchViewModel.swift new file mode 100644 index 00000000..23c378b8 --- /dev/null +++ b/ios/OTL Watch App/WatchViewModel.swift @@ -0,0 +1,66 @@ +// +// WatchViewModel.swift +// OTL Watch App +// +// Created by Soongyu Kwon on 11/8/23. +// Copyright © 2023 The Chromium Authors. All rights reserved. +// + +import Foundation +import WatchConnectivity + +class WatchViewModel: NSObject, ObservableObject { + var session: WCSession + @Published var sessionID: String = "" + @Published var userID: String = "" + + enum WatchReceiveMethod: String { + case sendSessionID + case sendUserID + } + + init(session: WCSession = .default) { + self.session = session + super.init() + self.session.delegate = self + session.activate() + } +} + +extension WatchViewModel: WCSessionDelegate { + func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { } + + func session(_ session: WCSession, didReceiveMessage message: [String: Any]) { + DispatchQueue.main.async { + guard let rawMethod = message["method"] as? String, let method = WatchReceiveMethod(rawValue: rawMethod) else { + return + } + + switch method { + case .sendSessionID: + self.sessionID = message["data"] as? String ?? "" + UserDefaults.standard.set(message["data"] as? String ?? "", forKey: "sessionID") + case .sendUserID: + self.userID = message["data"] as? String ?? "" + UserDefaults.standard.set(message["data"] as? String ?? "", forKey: "userID") + } + } + } + + func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) { + DispatchQueue.main.async { + guard let rawMethod = userInfo["method"] as? String, let method = WatchReceiveMethod(rawValue: rawMethod) else { + return + } + + switch method { + case .sendSessionID: + self.sessionID = userInfo["data"] as? String ?? "" + UserDefaults.standard.set(userInfo["data"] as? String ?? "", forKey: "sessionID") + case .sendUserID: + self.userID = userInfo["data"] as? String ?? "" + UserDefaults.standard.set(userInfo["data"] as? String ?? "", forKey: "userID") + } + } + } +} diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 959abbbe..f62c6ddd 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -1,15 +1,79 @@ import UIKit import Flutter import ChannelIOFront +import WatchConnectivity @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? - ) -> Bool { - ChannelIO.initialize(application) - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } + var session: WCSession? + + override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + ChannelIO.initialize(application) + GeneratedPluginRegistrant.register(with: self) + initFlutterChannel() + if WCSession.isSupported() { + session = WCSession.default + session?.delegate = self + session?.activate() + } + + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } + + private func initFlutterChannel() { + print("AppDelegate") + if let controller = window?.rootViewController as? FlutterViewController { + let channel = FlutterMethodChannel( + name: "org.sparcs.otlplus.watchkitapp", + binaryMessenger: controller.binaryMessenger) + + channel.setMethodCallHandler({ [weak self] ( + call: FlutterMethodCall, + result: @escaping FlutterResult) -> Void in + switch call.method { + case "flutterToWatch": + guard let watchSession = self?.session, + watchSession.isPaired, + let methodData = call.arguments as? [String: Any], + let method = methodData["method"], + let data = methodData["data"] else { + print("failllllllll") + print(self?.session?.isPaired) + print("llllllllllll") + result(false) + return + } + print("watchData Start") + let watchData: [String: Any] = ["method": method, "data": data] + print(watchData) + print("watchData End") + watchSession.transferUserInfo(watchData) +// watchSession.sendMessage(watchData, replyHandler: nil, errorHandler: nil) + result(true) + default: + result(FlutterMethodNotImplemented) + } + }) + } + } +} + +extension AppDelegate: WCSessionDelegate { + func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { } + + func sessionDidBecomeInactive(_ session: WCSession) { } + + func sessionDidDeactivate(_ session: WCSession) { } + + func session(_ session: WCSession, didReceiveMessage message: [String: Any]) { + DispatchQueue.main.async { + if let method = message["method"] as? String, let controller = self.window?.rootViewController as? FlutterViewController { + let channel = FlutterMethodChannel( + name: "org.sparcs.otlplus.watchkitapp", + binaryMessenger: controller.binaryMessenger) + channel.invokeMethod(method, arguments: message) + } + } + } } diff --git a/lib/pages/main_page.dart b/lib/pages/main_page.dart index 665f87c5..78252bf3 100644 --- a/lib/pages/main_page.dart +++ b/lib/pages/main_page.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:otlplus/constants/text_styles.dart'; import 'package:otlplus/extensions/semester.dart'; @@ -37,10 +38,13 @@ class MainPage extends StatefulWidget { } class _MainPageState extends State { + final channel = MethodChannel('org.sparcs.otlplus.watchkitapp'); + @override void initState() { super.initState(); initWidgetKitData(); + initWatchOSData(); } Future initWidgetKitData() async { @@ -77,6 +81,25 @@ class _MainPageState extends State { } } + Future initWatchOSData() async { + try { + final cookieManager = WebviewCookieManager(); + final cookies = await cookieManager.getCookies('https://otl.sparcs.org'); + for (var cookie in cookies) { + if (cookie.name == 'sessionid') { + await channel.invokeMethod("flutterToWatch", {"method": "sendSessionID", "data": cookie.value}); + } + } + final infoModel = InfoModel(); + await infoModel.getInfo(); + if (infoModel.hasData) { + await channel.invokeMethod("flutterToWatch", {"method": "sendUserID", "data": infoModel.user.id.toString()}); + } + } catch (exception) { + print(exception); + } + } + @override Widget build(BuildContext context) { final now = DateTime.now(); From 3b888dedeec21bcf5dda69c73e72a929fe7d7088 Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Thu, 9 Nov 2023 06:29:52 +0900 Subject: [PATCH 04/30] add: you got this --- .../AppIcon.appiconset/Contents.json | 1 + .../AppIcon.appiconset/Untitled-1.png | Bin 0 -> 60244 bytes 2 files changed, 1 insertion(+) create mode 100644 ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Untitled-1.png diff --git a/ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json index 49c81cd8..20c1fb3a 100644 --- a/ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,6 +1,7 @@ { "images" : [ { + "filename" : "Untitled-1.png", "idiom" : "universal", "platform" : "watchos", "size" : "1024x1024" diff --git a/ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Untitled-1.png b/ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Untitled-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c8b0fded69e3db3f1fa03b4ab8eadb42d099c758 GIT binary patch literal 60244 zcmeFZDe{*?0&&%gO_`W#TIu~p1HOHLu9%I}irlCj;m1{)wL=XgBdvIS-8-nn_|KdRe zxZttv*DwMegpT(OogwHdCHx-_^f84Ng4V7)P?XbsowEMhJ;hk>9J|wBd!#WL|9fAa zkb{HFlkmd_q{5ccCn7i9k@Su5Oti1Psn=yCC8Xj?W6<^c_gPq_@P@p`?PgLvCo$)x zAt+flH|xW`R1Ya;NpHkvPm_+@QA59!(!zuUERU?^?YAW038Aq__~B0^j{`q>2rk2q zJQgbWfqwgcFaK{7{tpTNKk5)d?E?0uD{QxNSL(+BYJ+=>x}UO0NfE^wpU<9C#b=+? zWb-`xEy-0hg%%jNOu1k?T=hN@RdF-BQf(r3cgX3%WQ;S%QrJ>>ZtLz2&Fa1fgP9gSWw z@=FL6SZ=qzuEhw>wfV(dOXpyVDVD4erG}HmhhLy5_zB1l`S*MNsi&FfWoks&&P#`gEPsyW~<8OMn6i=NRK`Q6_ z8m@}cJ}J@%1RD6bA842uaUqsL{)bLjI}gWao%|%SWmHq-e@1&D^1n;(zHJ~q{k>V3~KET@7)Mh^s*RSLgb+4-ZSE8wa^`R$Jt0O50B#X>-I8iWB*3w{y!v{;HoUB6}XQ%6K9_cH6di_dLfeQ!RZE zoVXJZiHlZ*VGxI?b4WJE3XD$~W>)(gyvwkdxK}&>$a>0Q>N@eC^GCRNP~JWLo4mpa z-G{|O4Cn4%ZrR?8qaFO3iq+MyD4l-^0rbicMeOAX-I~nt@pc1-VVy`ewz(^vaqS+l zT(1Z354?d;M8M0U%M`0cx?SBn>JH0NFZ{R^LNn%n3GTiVUjG~LR^t+y;|m@Egp@-q zbvEdgReIB48-hz($Aru)y^o5Q-|ETb;vgviD*TBk#s?7YeK8R?Tt4`YJaLWR`cU$l zuF)%K_q+ETj=ww_ER5&f-@3A=m3MLjNQSoR(l6B*Ii!(ee*c)FBi6kK%cA}0vC(`} z?SkWm!IsOIKmK((nZ|_E@BXUF0H3;e*_C`Vh==*;0KCs$Vgu#8KVLG3y6GOiyo~$? zix5U;vx2I(HrU+9PS#0$jqP3tc2~ObI6&hP3j`mq<)cQuD)-BbnRi@DE`My4^L2T- zUm2$#$&VvzSqi&z*}v_wAr>l)YVj_BS__zbiH3Y;E z@*;Ec@%$S0gR8w9KDS<_*0?R&`%ICpxn2q_zI+D?3+Ds}P4uPofzhwMlW%o)hGkEh zoJ-F3Fw3(d`ZsU5us}+RU_~gg1x(qqU=BlUIWNGhh-Ptfcg@kla?nQCQrB&?WGTG$ zi)^Vj2M5iaYZ7lsD0u3}Iz@)}pUtI+-@O7Y1aX073*}CTXTSF<*{#Ue@!kGX=WgX9 z+)9WLg_m4wyZWKncz{(NvDUd!zA%XmyJeEq5Y{Y%gJA#PdlWda5XarhLWj7m-#3!Z z#m6o~mH`0m2?{2H z^=jq)kH4v8mtg=es4p0IYC%M-b6x3a22oA)4+e4k9kaljuB0-?PHl*YW1*{8cx0nr z85|FQ{ZS$M5(FXDS5oGG;TYd57I1I8Sx~K_DW=Hm?ynO^AWr7r0Dst0&4&L*l^VXa z|8-Q!LM5=21t05$#BEHI?)5q3T@$DDmvp4O4WT6s4JTilXPxb{jt_A*k%()E387ll zlf;!H8MtB(%hzn*lHj3LV9Yp~*A!QlYFRaMV?VM#Nii|C2#N{hZjVZsBiSaMX@9R0 zK!W#_1|C^PVZZqyA--$IT2(ms=RUi_16Rd93EjSX-^YFO^m&$LA!#yTtdKVgQ_T6E zaQS(w>Q{YP{-;evGhm!840bD=G0K4{G)x%^yPIQ5bRPFKIWxii@!2cLGdDaOZ zu-MZB1>U}X3-=Nf7_;KJm@>A2Pg=g*?1C|xDBE4*Vh{Su;0!TB2y$<3TsU<;W+>ERrEwk@}K@#9ndCGe@imA!{!SH-U(SKuYz4t21N_p&Nm6ZQ7y-w?yJ z&Mis_XFjy&!^g#Kfz9VY2*>bhxGN~r9!@A6&Or^ zz`uT(5wEpWguD5*{HCX1omGLE4-L{=64vm#=jH|8i`Q-X@W7CfMzP}pYmeZ_12%my zjZ+&4U}PWYqzMSe-#!uWYl?rEy88pa$C}2-Ceq__SO~0yHqjgWPN#)v9dvVr#ln~- z9Z;u@`m(hi6KMTd~m&O{^OmDAw1-#e%_dcw`UGUsAv@C5( zS}pC57=)yP|4jI}Ok?5^iAgl@a^h+^{nj!N(h+_UT2@xoP{X%OMW8Vn+uZQHp=QKo z3Y`U6zJrC)QZ_G;Y~}%Pb-SWvq|I*`_nt$tIPjilzgY2nb&ghGdCqT$`Dq?q`8c2t z2So~73Mxaf#}}Q4rXe96@wYrYCB4JYE@cB$0^YlX=3@ zcM38XFd5Q2FaNT*g!2}wx7(XrBpIW6ud4IWF1!uA1E=x@eM%AgB@MNT{@&Lo_8i(B3Y=b@D9< zP9QBj)(ACP_I8+Q=bLsUpUF#0XE5paFnCgatG;-y>-ed-*&A=hB8qzDg8#o4ZDGAb zee<`Zbsy`GZan3^{f{%r5^ALh2nf)mzhRUH_N_@wU;Ks(2@49AlY+vqQHjY^9_MSZ z{R&cIA^=QI0Z-1OJ{C(8{|^Cyaw-~CRaY2s2{_?>*G;@ZzYyB0j?GdrHf2h(6?YgA z^WV;ZxBcyqk%{M%y2J~WC=s`ho$3Ru|9c_-sZ@{2`=Oo8G7CY}D9Xi&^Y#Z(_+xh@ zn|15%ol|0#%d!D+o9`tOhx{FpM&WC!H*<##Q@fTel*`0A#o00+Dk!Okw(CBW|Ec@H z)p%C0^!V_tq@uWv&`XhFY)90FnwQWrne6d4CH+@??KG|@+ta*%!m1m0bzgk0__n9)O)K&;n{NVO zA#h+%?dQm)%1(D$7E%C(t+~3PU$eIi?F9^DldC7Xe~H`MP7a&&TUlS@Wb2zS{Nmfj9iqtm~C4Y@Ofu z)N--%r?0_izjz~EEXGK&;(2P>If`F-Vtn`W&WL>ZEhd>4#&)y5i!FrOkDnax6Y!gl zizihE4a*GPNJ`n2jJ^*J;Wjt~vW3%&MP=)@?<4FbH5=SA8&pn+McbWL&Be2d4apOu z)g;cHP;)cl^Lv`-@2VyGiIgB8rq27tjoTq!~5WmtLpz&tFNpfMB z>CG7u^6$$2IO){iw{db5ZsKLM)Npay(llx~Ha!%NA;eR>C&zO4#X3)c5>C=)5W>5+h0$aIlS0!W8!O8CXW-me4NjI zihdSIwOVf$eH_U9-l$fO$q<|x1lwZt?)vl2sRO&!PK=4l-DCTNrb8XKlUC7n%Nw8j zC52vf-eJ0|OTwER>rud=)AP<6;iXFWIMiQK3rL-rP^59O5!%xrGQpj#SKj3IcqrAq z*QNT7fvHa&eYw}bn*rvC-rn7>wsN_$9ZKrObU3>pF5`K(>vNhfmg?s{V*dbNW(Vur zG+LG5`7CKBtx($Uv+H+q1~T1g;;~pI+fTzJ;so-y99BSPr-Kx1H35&cHTJ+|DOLE) zf-tJuo4?6ov83AIWy$0qed97m=`oXDRbf0yt+U1eH<@o}p4ArF2QJ?l+y%{S;iP8C zA8}-v@XL$@t)QU4_7TTYBU^Z- zS!&c{X5BI3q8>BRe~;06R#BxE0 zn%exuWnj~8d-JDKK`bu;fTj?W56(AAr)GNr9Y>g!l@#_~>~ZfjfX^Rgu2q4cE|hW6 z(gq2K^sKh`%ZZWg?}H9wzril>gM`eD2eo@jhF@x@E}Yn8 zo34+EGI9ZT)d7@bx2&;t?WJa**W4EVPG!1tOtlQRJs%zs^8#k~4}-_%LuD-D_L#8H zLfI7gvH%dw8&OnF+Jt&MNbB+;bBDA3dBFK{x7?EKG}}uD)ahba0XGDGkl=C`7{q@Q zWEi|$ud~({BmLrCB$fK{;^TA;|1zROp@NIe^C$o?5|p+(gsQ0s(k!l$CY3?V2zdl%>TTjg?>NsZQu z+m|rO9t310gZ8~bd)G>Rh@dce+gJA(h+&K)@Vmy6f=z~MyNCnUiefTtFY7 zK~84sq;^;JhBZ#yCxdBJ#pBTaoPl&=&Ych%b3(EY%tR2G!*tjCS^ZVo?y-r329e}| zzBfl@LWW70oEkfR)DLMHagy6kij^o9<4;)HPIbFH_|~ zglcZg3}ET7dL(+JHJX_Zu)h5i*T+ADcFC5$#QgxAI&%d6r_Xz$Kj<9YTH%M7p8IFjOnP2RQm=GP@H3+IAnW9VmLaAElWokc#5MAu``majJ4(`JR_Hq~h{~14ers9M7Y5mD3Cn654zhax#J_hURqP=d!?aBEjynF1lL=L?Us$ zH{8qc5cgGW0SS<-3kkpu`mJU93NED#al;M5@Q55m()yX;r)Zk1CVdgb0JZ2YHZxYS-gzEgc zV;qCnEr6B~0DUr@()$DCs&CC09c9(qhNtg1`w9dQlKSq7@2^;@Quk zZ(6#`DnH3b>KIe4kx~y`K@{m9rA4vk^O^-9;bC)zh$5{058!nR9T_VHG3#WPdZ!N9+?Ncgr zJ~-`4QgJ#EK#~Cs?qSpSp8bVZ!0VwGyH88GF91}{ht&X^i6t(G56}GtGKnBCAO!d^ zGs<6<&U&jsej6ll-|Sa+@V@L~4^O&Kk;#whtjwJ-=RNmgM9PA1PW5Ohyp1HgoyEiC z64*uYdx!&@_-!1!%tfdsE&WsM5Z-GzLJ3SJkJ3AqerhkFDop)bGn0`Ub3RvAD7eg$ zNBl}h+AYGpkHh}9F%D5^34&$n%&z!*b7XnBDb3h5aV4cMPE}{;hDo(|{~KK_-PZg% zjHYNki^QKTZ~e_BGGE`vxkJ?Fcwg-wJowoCJX`}a@!GR#N(yl0JmR33t0a2@A7`D~ zXpne76Bq193YJPUd@w4qe%Vq1QI8!33D)p9ow z46=-b2WeQ}X)g`8Fg4<%@}IqJufpX0u2p7PCS7ch3CZX}fbId*&EiOx8l*F32A?^D zAwJw>wGti@k~@A0N!<2UWOw%j1hr-ndC~d!&-DgrlA&|Jv(dyL5|;eox{!YvFt*m) zC~u5Qea2m2N0dOk$eN?BkjPI-KKyj_%b&u^$$1P&K+3k(oZa`EtpSUQdkZfrQW@3x z)gU57iJYe)_|bXP1qkqmqa5c-0ZRTGp+&6|Pv;W$Cx5jj6Qa_s$bZ6QdfkOc_liR2 zSij35Exii~T)XqX9p29I-JrB3m#K%+AJ=PD+8+5Tu1tEF>PhVb2R|{eeq!rQ0qch@bA#}_Fggt-ty=g5dA!zb5m{-m3Pd+2 ze(@YN01X8If?|(Q-BH!}qnA@J<=y*FkL+ffs4rX#*@8ZokccZKg;cqA{uW+X5q(SY zmI%olTcBBX#Bd#mN}+f76^B5q2qp5V>HASLy`Gky4z){|(^E_5-CqT}+iZV5ZKx*y z1fFfFq!4;t0TUo$r5f3mGt=LvDKlgo1BQ%SzTZV^Zv36o5-+g1gFoBn>uJP-H-3yV zvLNi3@xJ%cB8yO;mkB3pvWc@Y{qTvt88;|j?7npw2jHu{f%?E~GRtu94fok-*;8S1s6$*K;fCnQNTiB2MbfU{F2-^ceu_J{2M_^XBP5kKV&9p^w#h%jG*Yo2bJrN8#G~S`{(mD0U*2Zr}5qu zDln{^vmMfyvM<_Flc<6uMxqeDC0kEy;jCsm-@i})=aeV*Of7&N$>P6+xv{zZ))N42s|FKC?v5?$# zC##K1LwxGj%Zd@*UmOc5qS?_|u}JkL=EDAu9n+@hJFxQ4%_lcGR=eJ0{+QtXJWV7| zT-sIsK#8lvgq`=<8)QYTg4L~(?O}5*6S>P!?T|)#7v2s&xr#Y##tCJ%&9-3(5u&j*GmVBvv5o ztlv)ZyKytdrcDq(RL^0CHLj%BP;H^O7EolqpYh)3>PsI=;q!aewb6b9spZ0FM5v~J zV(9QUC+A(YUh3_PlP;a!^TVOf-aPsieNLEGO5njuK^5)laLODhPi_f4n(q}UaA-XA zBAFw{nfIH&G^|iI_f2CeR{3Ik%LbKf=V_u;Rc-;i=zs}VbdM_7e;r>%NyA={hg>i8 zIk5SLr_4+*PlsOa5B=nszfqj^FL1f<9Mmd<2&>EUUT}Fik>NYepK_@SPpHhbF`(@#_PeyJ}69tAJ+4zb(vX7utK%TxyiZfuSpCK}P3a(vU#3xl(P?WPqDT7wpnTu2sQMvRRZ%&iv1~m{%YuDl?~Zn*QrK z`?~jlT{aQc3LT@hDve%B|34KM`#64`U1*(#1fvRNt3rz%QlcKDP=itAEKoY^ zj+}q5uUpCm=h-!F9&h-3u9aG5z*<_`CzZbi>T05(UM$u7cb=K$3}y*p#eL#ns7tMA zm36wO5+-|>p)IjlHO(skjD1weX~4Y3EM{^eg28`auA7!X&|bp#CXEZx{nK8}*J>c% zkyqr1>FUtA%F((nL&W3IrE;^25Wl|kIXGS_2nJwbku&jus(*=&yA;>Be|O@pz+8_^r>p@T91=Ob9O3GeZu3HoPnM6FV!#fkzP^ImAf;hU!{E!)x;(<24 z{SP`o9yk$7#9r+fTkoiZ^)tzKwb(JjZ2AoK1(8u{OriEj;;wQ{dXbQVA}lT_L$T&u z;|yDSt$Keo!|=SBlBLY5!28H#g>O(Ilw6fitvHd7IraN8GeYe@L&77xO!hjsC*|kG z1phgPE(_HDij#(7R{Ax=oU9Olt0v@hVq*VSFGawj8^$XZq80u;5sK=e=wD0kr+#2L z--+3s-@U-NPBTGOmJy1Sv3<9y4<4YzP%UGPjpqnZ+y}4K{N~2s7Dz zzFmtXC*}k~$+U|d%J!Y&cin(D|ItXuo^xHr^Y$ZsyY*mAD#J=8-=jOhzL`(?I88q; zs*8Q7_kB~=P9sKU)+MAT$#dn@Urp^WTdCFLGS!ND=U({uarj$7REp0B_mk+4&X@g( zKx+MaPuXnj(b8JY$fq2E_+s6iX;Vy-=fXqGk!|ZKRUThZ3_$$7adS;_BpvNNu#Is- zSFRy@e#OzIx*p^(wt8Xjn-`p|7y{*c3X~6XN8=2S2Oo$lYW_4eOwh)_X-agAdL{MR zSgc`pc4>$vEz%Gej*T_V-!jV#&aLVK08+~`5jXrDbp{EN{ne0GeX4Q1XCzNRpy5|padc$)1M!$pr&y+c+RFk~ zOqmXu`;pCAjs7}(gB$$2?Od%n>lyug3Vo8Y z(!MdjkvCkZpl^Q&fs;;4NUeQjda&i_+jTtUDb%wy5`W_|rOpY8?%V(Dp*Zv{Hd{2tFctg|< zV$dEtmE3U(qt8U8qU=LSG3nD><)ZuNMaY%e9Alpdzd@?VGkkyrdG!SbnI*hbTxMC@ zK{lV7Pv5%4R>w#MPgG3lR4H=2mn2^f;R$^2_W{;`WrV>%Vja5m%!l@zw_o&PCq>;< ztL9FguF4i`y5u;hi|ZTH6UYVv1OM?*vX$hIcJ`^8g7f@>rPJxU{5!dKLa3CwbnjIQ zuVXZ9FIZuXsCeF5`ysnvjIwx8(#~o%LszU^7wSNJIuvsr0S< z=9Z0iQNGy!WVeiX&88b4l;~|il;sC)ftta;OUJaujbXET(o9RWmUbWUw=gcczCT^**c z8rwxU1cKD1RKX{4JR6vc6MK(FMUS*8(Z}9*-LgoDIRhw!HlBLPx&lLqLck7Q{Q5r! zzm3B%lXj$RQWC;v$V)1~t<9hd{JODMSoszcU?0djU^zm#yYI|W`BP+9_VGW-T~C`H zv0AY6c&eero^i&>SL+=k1QH!ss%D{g3VUg6C76bzoF>R`?cqYwR6w@`i%?poS?WZxp+i+mCDTK(QFoqbZZ1s-?7y+> zusQAaP?`MK=Yt0M0Dni}E2H@cU^Y-yPfp(-NMY_fuZVm2>P63?y_K$snfui)(|V13 z0Ov)311s3)CS^l!)&xXRWxZR$#7}!@@bJ^ri5*r^p012o%tHp#A$XV=4R_m+z`8qJ zn&&v;-s$9ec+fjhB{Q$UmLG9;_{^}Taz;L*u;roH5lijT(aKmBiYJ zSo}G~mfW{i1qIzS-vAl8`CcT53j5PobVw_1yntIo{^j3RB0p6%qILcRfckgr7IsYk zW`XY!BFk?-D8u4@oc9JFHpFL&mdh8n1Gd7z-w(S_!NWa_+;e7}kp(NBZRu$i`%%-k zfoVmjxTA#KM0*)oAWt~_OWgJOJ<542pkpYz@^CoG-CLb- zVL3Ip^&VT+q)DEI721)AUz2~1l)qT=h9LyTF*AUs5~WY-*$G9Zi^b9POTy<-4SFi` z1=jaYx5$BQ{+HfK6e6|<guSlAFVOOk81{%q{=L8xRbFAM&hNb- z?)9aJ_ddDj)25gk_8u%UD&rEF)nJI~ZHY(UiKz#J*6)Wqda`>K-sMRbGfDTn*M0#Z zC;-;1$h$*yAk_qIo@o@h%yk#Cz;<*XaDdpv^CwLeI8@iv{QYkW_qGV)!{T>rp9K~u z3Z6$X-A1kJ35c33GrE%jbEVWu2_lz@XL&(Jmh=;Ifl1mHo@`g@D+VuVDM*WJX-M_Z zNf{5*;!x4S;DdeYM{xxlgqW(XFgDHg z(}5z!YXOA^m0=;;-w9=p$*#Ss-ND`ZP@2~IgAF=|ZF6#%QtQ)ivfM(ILUG(5Wf;A` z$Pr>T-yQy)0~tGX*|r@$M5Gz28_FFf_Qd%35DW5i?G>2 zU-83|cX#qP$s;as@cfxIWNR??sk2B(HJl=pTcO45K*p^P>9on}G|MWz28O_pOP-l3 zwij5YdQGE{FHZgU2A}kRgR9f1BHV5v2I(U1;#^|Q@t)bbUxt@AqS*39S21v-`BxGU zuq&z0gdG;pNl@-`VA7nGbu*I-K|?r2{&k%@Y7$?Bf0ARS?reSWsoA(H>;I2f7Wcin zBx@t6s7H6b9Q!M@hC5xlPv-Aa;P}Y+K!*QWe5q?22}r-UQgNDnxxnAjV~o~h&h1ZJ zZp(t9v+^1UoVazbY2!*N?v@$P-(7(Q1DHmv3f~k5um`H93Hc+PjTfATENn_!o*pu9 zX){LKYHVxDe1F&iJQu_UJ5AJWcCWwV2PA(@(dF7c>6B`fu=!6xxc(n z{TOze3}O@V^!MJwwf>$qVeyUMp8~v-SHGcpPyI{Fqc9n&5YT`*e_zZwQ_9H^xSc{l zF)H9#{1!R6Am2lry!#^LwTHS(Uk8Cp^k;hZ2S8&SnS0Ny;SLAY4Twh@-sj`kqv4wp zyEuWD=B}{J)4zyo{lflQm4h`t!UW(knb>PpjiJEam16z zqgbuK@@0RnXWPxz^x8IL9Cx#0#uN<(^z zOenC?AApViyC_;6I)|T{nQ5r{6On`ERh~jQlSY?ERUFZi1M;^Fnl=FWTM}`95rs?k zDKIfd5dkgqBef}`yCdUuNXvssh{dn{7ikK&m(moIh$||EBeFCEPfDP8)=P7{wXp{% zLJd7O&>S|v_3!jX5AC^@si=#LlCG@zb(wsRDJPAeBXuO9?X@?By5KNQFtzW+BuIZR zs3NlTGudutVaxtm5w56MN|LI7t`T|%5;5}X)=n{?WUQ5ex}O>r^6VAHKrFc;*Z9u3 zgdKC#X%!BN9EfiwzVtku@$0wyA=GgMNBIfm`Ci>znpH=1pqc_oo$vySxr}ki@O1LU zOBD_IF1R0q%+2m=;N{`02DEF%&7R3eejSU-ui+j`pHu$@T7^K*l4Qdbd3Ekq+6pXp zbfSJH=E5+CnA7xLr^E}HqT^XyWZE&#mB2)yYl5^{`=UDec|uA%=j99_;pUW>@;c-{ zg$jGe{8Tn%MN#+Fy$8+0m0`94Dgu@rNT;($wXegTm{NixK(N7U;JF@0VA^`#OQk?} zGrXkheTKzQ+V0N301q5>YwOLYKri&BLU#40N>F(rW|w5gSJF;_Avv68hm~8Yz5g~# zi;Lvv%|Nt1kaDzaT~GQpz9GcbO$^CV@gpHMnwrQ3^m++yz2t09A*f$ z$7YB$V9GM4jrRQpEtUpKCqDJz{L4O1>2iGc+`o9n6Gx^-wdN;(>qUokWUNi_c)%)* z_irE__&29qY>@bVxJIaAWfC$TAX=foYZg0{-zVoKyhDnPfl1_Eb@dg-47Nm7&K9yC z6uo=#WUJCVM-hZhy>xC0_5(H$%ToZ;2qVj|vPWl>szEUiytT4`u$f)4Q1&L0Elte) z+)}8mCD?;5XVLtfg^gnP`^2eXF_Rd2E&9)S35x-$6eb_q(!ziS!pnm(yf-lkOj}CF zg80xD?D~7`?m|>*x)Gl2Y&_p*(?4MPr<(m%UO9l8H$8+RFO2XXkYYKJ1`SqS0a8Lk)+1Zlf6Tu>5$EOEL-?|+Fy7SypAJ_z5! zm@CuGu2hhr?kf@xf4TQ4e+01K{uGeNfjr^BK2g7mUhI+5_~|1kD39JU)aqQ*rXZ@* z{gz`}1Sm&9a4#Q$sO?ttXC8XEctRJ0B>($Lm0Ru6F2-i_n^*ZJGjsy8-sB0NM9{ss zAIJR}SWM#!z3(7&78#dWA)7HfqKEbg!FOtLL`p-=Tg~Jvj!^e?^8*!=E(D$ss@)P( zO_%5deZWA6GC*)D-&dANseEGxq!8tMke{bRoKCD)!jhd@IWQemxy9lz%HRs@vLSw? z;EOrATmoKBZT9%=EH-s)!lyt^1NC_4s4CFU48CUx%a%qjcIQ>cG=s^w1i9d-T1!jIn~P8Il}?|yY?EK9^Vv5Ol+{(}a$A%X znj!DoH9c!}-B*z+>)f2${L1fJTAyycPy&7x zoJiX1R^Ev&5A>%9rMC(QbKcdo2~8HVHx=7(e2JAxI>z^(edcr-LHVMe{AVsxj+xbf zoIDF#86|~1LN=PU&&!;T@7W9S15w(mjnLk-=I$kp&v_(pq!ksx$Q)v2EEwr@MvIy6 zJd8dSI>Gn9_~!l??fv{mh=v54@A5J_0L8{hA>8xK%9u{8=^*aIUlFHP!o%a=p!F4^ z4orV5>p>@0vDlDrb!jQ5Ih^7_h=}ei8|akZ{FE7#;Z+S>Qswf|I1-d>=m@D>L4)+9o2KOckm3#j3F!`)C z_<_Y`-Q^ieL2F7){fEc65L^hwwfE(GRpwQg7UMPX`?rCsFQboWc^rOGyHViM@(^>Z z3x`G@Q+XgVkkmz{RoE!@ebhdUHs{&aMRIBv6yhkSSjuqb-sLe($>|r58I*zW@@AE< z$Sw?&K0n*lIg8ZY4aJBrU1rS1a3Bt71_Tgkzb{3mL1VD2U&Yq46v#Y}1 z?GL4D(d+4#5>QTC;G8KbK&pFv@y`Yi|s? zj>Y^b^2y7)Lc)aT&J*wyIy>kA3-wukl$$fu{|VQB=zrJ81_a6sPcvvh-`;P{aXA(4 zhRu3kd^(^IfUyL=P`j1P!NoMcepm4Z!#x~`69iSd6k`V_K8+jg*u#mT*@S+MS^)9I zr=j#bU4N~<38NUw6O8Y4$~X!fp5n?90+tx3WK%R|r*SdYxqr39ww+X50|yZuLL1PN z$0-PMfd0vmDBQZG3;fR^*;!^^_GO+2 z#S9?xuW2S0M2h`EJ)WeiEse3 z<4+1W1<%K>@#!*=m0+tJQzNEg1^Kx9>PeUMM($*?6`m1(%&>5b^WI`R{UZoyG_($G z0Ql#*w0Zg1FNTWc)0mL94nsQmH9}WDCpymiaoV81HR8&@q~7wS)@E*L`31LJ#nd&~>BZ~7Av8lscPE%Y^AeiB6J)(c?VNqX? z(u%c7_pKQo2g2UsWDw}nvgoV3&K$Nb%RC3`FqQ6=*dgl|0+}6X88B1-R2{}AeGLmq zTqeCekF%s0*PqF$wrGD=?GdM@ZY@h68jw1{u7^(3sla+p28`Y@vJ-XMRo3Ht74#GC zIy+#;{5M5pwCqQ@dCintM3n@0OmT@hue}1u?JLDE-NlE#gCx(>FkdHlqdUv`$;=Smr}ueF4E8QqcY*gQ3S2JfdEP zR-8f;pS^Bq3}w z6svQy<6Ug3AiK!qZ9rMTDW32p|CE^6ue0wvv7bJSpUSKhUs^3r`DDLyAkn_PT7=bA zbtgSQo0dwss?JyA-@;)72tq{ni32B>)(I(Nm4V$=3uPd@=&$9wEJlK zfDcgJFrn7lajR+PH1;9dnTmn0{2qWn)$fb3TZ)u75=6VuyJwdffukDCv1u{ax7C>N z?vCm{?GGMd3u-vHEsI^sfE2JpR3h`k?OrsDb4u(mSgF9pLRnVsqM~;Nmfvo6VkBg~ zma&0;k>YdI-c?j zjcbKE2O=+I-*cFW%U{Cre+zJf_|$Q-vD@9wu>!7q_)r4A^WcI`<+|1Wmd8-qNOIL= z_o!I7fu+ggC2P+UQAH)<@}|$L$Ct8#H_SK7>*MOMVK zre)5@TLH>b2kr3hGQg!nlUp->vfAp{;3UhA{L?Nyu7ia%fw(?U?aO6Oi}T&-&78Vn zpZDwdnO-gvxzvTDhzt7ebn_S<;FaK%iP$GbZkg6TyjvlB&TJOXn!CZpocdx*s?7Z* z`s3t!0!=QnpGduh^RuiClon%=)KbT<6_tWUmC)8q{r^-DglWtkFVfD|AG`{`{X6^u zlvIZ9)$ZbXm5?{Su3S~0=x-j~S>kFOb@`UHF{{&F^ih~Z&G>ag>6pXBpBN!F~B&1hNVo&V6 z|E^A`X$nOpqHF6RNE)Pdp#9Jx@!eT7%(ovg8*6j|1pXPHZnBvs=0r&iDg{#P7KS=1Y zBkYy!X1syPmf8192B&-4(zz3^F@NzCdJPicvY=JI+^YGOjIUyys_l-bTaon5bcqKy zAAZ6A>2r+#*`@8t7q-2Yl%A>o?sf=p*8N#h$gk0J?;JVSv%dc}IRHmCP{$vdSMx{{ z0T;~91eLL@<_Iz0LSvzy22RzZ(7y9L>7ZoiztS(XUwCc&t%S3$5I7eZ_sV5Afrxa zIyJ``tED8q?#(5ncNwujfOT{z%=caccd+QrgVm3gv6NhsKd$)xX}2if48J-Y)g1Gr zrYR-p;^nYm^=Bi(vdKk@Rflpgrd*gcsC~hTM7`pNN>3 zPKklOqz)AzzOA)baD)dIo9}H3V1_%!|T_?UtB-33J#(UsiB18s(O(4zk23=UJq$ zWNl5W?t1awttqJfl%BM8H=D;}3ajCuBed7iv-&%D_2h|h2)Ga%oa~R|owz(|h52r3 zsUp72vW%nfpa&&*$#T|YdRn0@IoXLF^mQidY)wI+ZS238hz0o*|ayvuE#vx>E+%J4Qf3VJtgs{q4 zuVo(e?l#9cKNPGC?SnP=hvEb(UBRyNA(FSiKkYJm9CqS99h`30mJIG zizH7KwE;N@ZMuU8eeF{+l1RJ|uz_!^dfn|{I2D4Kp=VtXh|Vtc+fE5iBPQW&^~h-pfr%$sG1tMY;X+yro^gjaR+Zrr)jwLn5KG}*Qb}!oiBB3jvvPSj8O*{ z8vm8!ziKEB(P6rs<#NCFA;@(ss_Dgi)A#*5A`Rj>txFt}AMFi$tr)&M4u>1$!7tSO zq4mIt37*Lq@Cyk9xoP+iTazfqwBDSx$)i7axsrCbBudzA1q>-=P9VWvbUD~`pmwhX z;H%v%w}iX0(~dz1j^ z4P5|>irpQabiE5qHi3yyf#@cI_+@AxADqf-8up~PDs|8{^nNS+cVT(eDDinfrcPvi z5jVXHF|>>iUuPSQi-+%Nhh->MBn;NN+1C?aTmn_Z8Vvqke@ zW~!Ua@7X2VbNv3X6|ru;yEJg_6;N(}ciSc0KW5rPKFKA|$9Br!o7Ab5&o=A6?tS3* zGY72$ga%&WEMdqKD|@F(Xg$KOtbJHr~gn@a~(Iq(W!fx!&{ z*F9c&46t^EQ;_pdP|kF&*yZ-!SuqZOncKSHP!cn@w%;Q<(X@;2cX5Nq8b9?46b4B0 zAI6I7$-G~Q=8H0#3(k#It&?4I^d=c6dS4VD@INbd8?CPLU80r|*9kZCya}fot)&5Og`a;<;vv z#;RSpg@iZPlJEkv^u*4FD}Ryb#cv;nVpV71EB6shxe5YokRb)uUA#CnqP3 zM^m=dTI>Y{pX2h-SsC|HiD!Qg<0%H4o(phkBy9aM65b>gHLZWxS(Pq>tZw9Y8>OPV z182pMv{cZ#v5G5L34@dO?omdk_-h8Ji|| zxq?c$mMm&=8izfaIJ<0bzj5MI5Fe+VW22lEeV;?yz(DlHNM3orx~twb zA5du;jovy_uqp)quEDS8{Id%!nb)gfw4IIUQ z7Znr|a@;gCG%Dn^Ss;V`Swh2aw0=)xW=4mbI=uA?iQT=6nz^POY*X3H@s1=J!Mo*E z{@op!@cu_tT;AlldP`+Z{k}6q8MFH5)a@z)NjF7)!e$&qMY5j938vuJTpx8hB6#d=ueGW9>>N663ww!o(+ub4qtv`Ke~iU;8_C*(|uT*!_G#e zZ%RF_+nTx1;Sepb{Oz4Ij+^fNd4{ZcXE(>DCAZqyquMDmGc%=u+lPU)u!#1Tjhpw@ z^Rd)}I_vz3yIIo7rS`!)?4}h;tJm@#NBEctq#np^7Z`AfG)#pYWd=XptTqQvscUY_ z%-G|ngIt5Ulk$_n-XnPEZv6n1vL{t&)J>$nU)r|YbZ~H>$%nY(w8Emin&o?Emd3UH zx9Y`LZrqR~%KyAFu=Q_G#{D=d#li76%6iisyX1 zF!XpxHzg(I9dmB=*6QjpNgUzbWo&{(e$lskbVbSN4pMF-a+u$$yLM#099R1r>>OoD zOmeePxizoK__h?Xmt=;Lz~$Y@zv|h?Q94uQ;CZc*s$e^H5Fy^*G&di?=ezMDv-P5O zB=7V!dcXU-%35tim-5E8r8eD}P^W%nmVD%qXHxD^GBu?@eZ9*E4eqo5vSu^rzRm7( z#ba*vfrWQk zbkY?)!IX;#Jg-{#ap?7?Y3zug`y+{v3!N9T2-(%a2kjg>iknq=+DUTJhTB6Z5kfh| z3@77+=7kfwiZSK6V!o4l9*g%2mjhMV1o*AA8hyTBkvU2&^X_*d_vNmo@_o)ngY*4Y zST-d7%)l;{idTSotmQ>TDTMD(RYRGSm%l!W6Xa{gSmio77BS}vAv^=I*a}t>C?lrMSOnE`)4)bB2PdkeTsq0Kn9 zBZpevF)9&$(TDMQJJ+xyz1 zUuXX10TuqEJFV2|9UL@*N9@IA+Eq@xY@&tGc_R)t-NY2hiX+nSgNYe*4chPA3iSAo zwJubuxxT)A_pGNz_pdk1tg`|5p)e_Wo}0Jrxoeefz?-gkeTF!&1%&l41+vioQ@&&D zy*QpCo~FwP(R(Wd^2>g+Wp30~8g*N<{XT9)BGNiKc@IG&x3;p#wdpll?Z#;pu!~s| zI?Y}E_I3o1GBkz92K8vG?^t==x3hx+Z||vlE!`p!uz5i9{7|JT2|eMn3HT3wl}5*d zL-a_$`p7Hn07UfVIIB`O<4#1O4rxe(@dT)`@h7E&@rAU?{)X-8-2-lv+np}>Xq`@c(qP8H%;{ZMMtLLqhxs%NMF?y zhlsKp%l=!Drcx+UI{uFNfj^(Zub(eeVS#o>t23G$BHV<_LALdQWUH>H!}7iYIWsyV zTR*jlVlMCBhMP0f@YAbuo$K>ynWrG6`BZ(OYVWFa+E7GlN(%WMEv9~E(M1jhk+_=X1FZ7As0EwXd5CX>U#l$YvezkK7DI^%Ix;M4zK4pr zy-{3TjD#;RBbrIesx0^aNJeU*Wm;G6RvW>v3H<#NgnZ*R_n3^nAe z%4wy&wp`TVSea!lvGIavk34asa;sq>T1r>0gs)>{=UHI)x2{~`ERMvHQM)-ClXrz1 zE?s>uGjLuyu5~5FtL9+0HJ7x_( zCVdw}n)CkD7SaC_yZiZUvglNe1)?>oW`-=qg~Kr(?@czB?RhHf zVQ##9(4=q-^!T-yKXr z?HI|jaj?zAdcmt0)6dwpVI~iTS$p;BwVI9TRl2}0cAb-gH4u^HfZ8v!5|Ozv^6Q0R zd>OufUNEqtJvDiJ+9KBmn7Hp%!NoCVvNAG=tq7Pi?$vE)iM`Jp<;R9BNds3+TnFeb zBwD<#L;4mO8jexKy|lwHU(VjU)E#+n44(P{Wp~cWpAON|q&ppjK0xDXtD4OU``C&f zhPra3>_$AV%uAz|cS}yc4})O7M}>b|1N>z2(f(`0wy63wRvkW{|FXoVeII8A#Ro3e z5&T&6xPh_UP!b>QU=^n3Wtf_2m(R|SZz;aNeW%Oj9m|QV9I*2j`UAF1%X4H4{&0o5 zQ|nibchM;3@7#LZM$J-odtbRm3P42q15T#1z)*H!Zt45o8*dp^S>=q+fGibh`b-Oy zQIBt1cL3yp#na~zHbsUM>_un-+RC%hXB?2LJiYB&q&sVP(i2ThA zstTkqagD+Rmrycw7=E)hj-`kLwSXMU9olY;k9y-gP=2w&)FRM1d;PcHWZOJ`7r1f) zKiWDo-ssc*YM@8-nXvK-(5zJ9Y05(q-)ubOaavE~DNk?fA^#w{K_WKQ zWBaunS&ul^+)T7IDi}6JNm>4Yv5BM=OO=(PooazBPi4uV-l{}c6XEFMrnIzCnIzU1 zfPKav`*r`=lX0UKao6B-_uKXe9VPOQ{{GTH*!TEJr?R0K#n&|D+|ElkIQ<_w@R*`3 zGkl-$KD%aG_8NaXr+Rg(D|i5H^)x_kDEiP!`N{Yt+wgEskpXkfqxC%$^E zIa+^Ld-GnKllDJXzl2MbpF^>Z&1n^b`ddHCS zb+{ICDe1U6`SGnX6Vt@~DHw%d$k*6#Kl|+3+Dc~gV)*Uhwd3G7{4Y(>GMSXUf#7ZH z(o^UDNpbDO;uP$=&^9oWej!n_h=Xc^Br=s9!=8@GqP5PFp}Hc{Jpt#1a&O5mZgJb_ z1p$c0h~M>un0GWT@LTZ&JY-0-fUS3LV>M4f|6 z?W58WIFHX$(Mxvl92?w`3FIhU?;NRm0jyhDgbP>)t-o5VV zE$F0txDv?kN)%kJIV`hye5cL?63QBVeT zJGC6qsftVMF_y`AB*VaNM&Nqk6Z3nQg)jSS-nL~es*IVyqK;3Jx@-y6hBm0{l0ssM z*9ix0sF^kU6mPL&r4H(MmC2nc>fw7bfj?mda64Adf&PgN>;@mC!o_bxo&Wx%T8mhuZ$nZVcJ8ESME{8(u|dKuj7eYodWTO~>x z2;tY?gFk>;vC@R%OlXr|(dW%M`)?ks@#7{Fk2a_yTNNFrmw^;A$M+ zb&i?)UO%kr=fhaNhxHb?=_MXF*PRMdx(h@6-2fNQgTKkc?RQRvP*v!JELoM0A6mh! zh4WaT8-sTPHjSGeQgUk=4$fgL3=QM3BDcVhA$I#73nkqjn@vWN-t0A12X~y2Kc}Y^ zIOB(Rh96wG2XeoRKuwX*Ww+c!(6YiI?(`fT8k?Bfopz;8=2^!idklXPTqGAISK7Hu zH)V7B>2W?O>B7#A>~CAlG&=nbsmQN%U2)M}iy|o(!sj@Y-wJX&W`1ag? zoxD^(T+E}Qilg)Je2n|sEFPDgGrc^R<$fM5kqy%%XwE)xY- zOLh=Qy9S+*ep!EdlGai!=iaxAI-JU0&teICC}B|tRK zu53RS$oJAxdBXOMa1P<~_L)9rE-p_7pjJ*Z6BFKK=raZ*EyaQ0*BThrGD#xqo}S|o zKYU^m0Ej~NmqH9iM~A0}hGH?NLfCF-Y}|9S+2Ln+IX?JeCEZiUYUK^UQhrBr6*6hA zC7h*=*`^~9(Nc(zjNLdN0-x?9j$$slOXnD}E|om17K!V^Lk6XEp(XNc-BSqY`wRPP zF$jLFb_)m%?^q(69>#vo+&7oUf8Fx_nalPkrn&S{*~A54D`g9$zu}3Zu#CQCf9g)Y z18?A93u!j(@>y~eA7Z-PaM%A6o=j9aREZ^AW1VnbhYbJ+nTUZUCY9jh{IQ3e50NnAgs&38*!iV1di)u6$HUr$ps_ezrS!hLxT_Lw2g7?zER>V} z!lXfG1TOmDQ0QI?`La;Al~V1rJ4rV^I4JS*aC=_;Ecz~(VTmlUvLxwy_kcId$gYaZ z>@0PPk#ci4NkzQAMA&WVR{Q2MBs}DVo`>Xwm%Y6`77V*ox2pbc@4^W^2_!7ykQg2+$= zyGu}QlZd=6);KENmw{>{QdTk$%4G#YLf4vK24N_b-e{07IPbc({Ioe2xHv$%0m`&k zRSWm>UUFxMbVym~h&DC|RS3cQ9LE=u?xp#aHFvzoYI!}=8&`JtC|~pql3+GW4ej_h z2CCrqD_@LgO!Y4e?mcXqblO|ZX%{}D8pgz<(ES4?Efc>t9 zsbC!jbfL=Tau&ICS-*rJ0`@bZ%zl=1cBbfzM!Z#%V%{(5-rWJEP6@&xE~U!`Yf+x# z8~f9+8&l79?kkn?Z2QcRSfOI+2fC09uwT=dxn&pk!5Uz>BK`g03$4yGojiOI?O;4g zaY#wH>ki?0!CrLY=*VvJzt1{7T0c-^|8PP@7w8pqG&KuWmhJ|JcP> zm1U1u-v5$hKhTAPUkF<1wOFi`GCy-E5|glNPPos(0`Y$fChkk2ja4gpeSKY0`NXOV zGyS?|Bxfw(H*1e|ERYrd^tD-wU-OeOce5@_QpEXhgfd5H z?2d2Fk%JdlG9Y_NHT~1Sz2_^aj6xF7m50=es{iAf3JAu21Z_(ANndCF#M@gjqth)K z=Wl80oPiUhc4$C5z13CzI&_Y){G(!kb4-Un3*T0nE6SN}?*a-i+aHppmw=l9+g)?p==m~tm@Ip$eJ3V)Uv#We$H_nFz zg##B)2x$7~=;)$MZ=a21efQUudrTvJ_JU~!-NliPmlUVE#4IeY>*j<6=f@j_^P#~P z;x0zCn!*B@doN<^QdNt*DDdd&3q}QK8(6cG8TLnsh*LN~BoUa)r z33M)5pTQ0+5YhJ@e8UKqz4JZdTyD%IVcoT7wZW=Z0gwxyPU=FAJ}sPHKx931yfFDa zo*PTI$9h(!>(jH?N1A-;7#B#!%8d7bQhJvMavzPMrpP!Q2cnaWjE%=IEJ9W{k2yMN z5cS+5LL)ElKl-s=c(mO5>iYU|beU%La7=i+rjNBHGJ zqXzKtlx6*kg6!g~vyY5BKge{exckO5v71`3B{f4ZCj1Gw@RBboV@g|ta=>jy!nM}uPN)yD$nxIgH_0qPmXrXb|Z9!Ty$^{?Sy>o zqHXSUm!IMHZWEa=P$H>k|5!k)@Ewby#7p(?q_g-7F^{Gfr_SgxWen$3*C7>mLly6d zPmc0>@k6pZbvK5qr~b_7D(sIoiJd&pRm9s&A>Z}fz*&+|j6q%S` z)oaGP*1O;cKvzNVw3|Yp&e&(TYe=UMqiW1>E>ktI{VrWGE94K(mZKIaaYgt*5OFD> zXbk|8x(Z8+{OZ3M^~a2N9+5@jz}fk=FrjJXTo1+ruPEcjaPAFckA)#?G&yvquPn$V zM#*OYE~rwwkCU|s9y9KleP*@&yuBu<^S}*3Y_zoOYO>0UPmx|*9ctXv|7LV}ZBh>q z$o0=WrK4l8+uBP-bR?h@IVOgu@$L}d5Uz51qkf84HjsQYIhkVB^wg=@acn(8tkH}5 zMg2p+v09Ba_V69w4~u#cEC+hj2bb`)8u^iSs+v(zk54 zQu7y1u>sUsAM*R}+sgj>?YHOr%em{Oj`q35>gU5vmYdDSjoLj|l;AX6Y2)q;xj6oc zlwI#)ZnTJjNZ@^$y6egg*jc5b6WjmsYjx>xJeWitJ4M&~m?IcZoDaSf^7^Aj4wlvr zKbV0B;x$ana8cZ{man@6Vw5P~%Cv*}R<%8?s7KzIde_+zv#~K_OfYp<#<O4+W>uenpJs zJ_2=Qdn;Agx#omfopaZciDkm$e8LR*Ha~fza-hB-Q-AwmmzM`6fB#&PsA*H+M1D!C zlw9c?Nd=v~Fdr7f77+%DMtlW*NrHHL2Gy@zj!Osfsc-+Qa-qT-Ok05lkwdvX>n+N# zEdUdYRwS^ZsAJ&y?~5I}KxbZWw=}_FRrR8^!zz->$n>2&@&r*g_rvqtS9{IfXu%A> zWpLiiAe-+dKNiV5#l-oO_WleA;QP-Q7NEyQFK>G$Ft22DZK4pPfCtS;*ZrSGvTCGb zEUOibOJ)(#@1>(;!QHz`w<>&A<(i@e0o*0x>0#GmGC_V@!+}6T>5fs_W(*9)y7@$oT)rcZ+oI z0$AuBy-8QNxdZO%1)JYX4e&ci)6DPOYgwkibJPIG*s`OYYS{qPOa6PVT*2Eis*EPH4 zSo9cM&QUVrT8O_#rv-Z#o+3hcqaD&6*dJWkw)G~Uasrw&-FLQ=!83-<0{Rrah27^-yte| zUvt)@zH&A;V5TvWb{`}8^61mM>CW?C3eme_1bt2TmYbQTtb`4ym>qCW!z7{H2Pnj5 zNw?X#>+dv~_+~T1R^6PY58h=`_rjpmE*-(ifZr04pDxB6uCWF``_&Fb&@kyl=(dV3 zzpdniTv^jFddR2uTbG6MHf-#SYCwJc?dnZnVt%^3PO>QSurvlY$p56Iqnzv~V@&yS z?q3;!-;Rer|At-l*!Bdk+sFAwRM#4pGSkX~H(|WNhdZ4Xo2&rQ&Tq*7UO5?!LrUzn ziz7C1tWd(Au*X&S;m_CKxsiKd2eZ~**>9`iUV(T`=ri!jXN4*!RdR@0RXiX1ZJ3`P z|55PlUmLY9CQXF( z;tUM=(YzYJJ4F`dclck}C9xFeiH7RJLb)=^tjyQ3J#OjBbggL;zenk3kTmxtL_@TIrNa`^CqDmg&XW) z%E&}P4pS~yVY@JI{U-1{oiBK2@YM`>yB9Sg7A zOB+RYsi+Ls`;|Nat@%+g(EU+9>S3p-dCgHUte}vo_5NxWeP-Zl_M3fr^5Ikb&hZZp zC@Fcsb*7;NE)F0@aG#iCf|paCNk1Kbo*n-<&#eJU8V}r*xO-;N{ykUi&DmTqZ-9AM zR#pM$HtW@cbf09%dfb~qTo;6rC&1md7vxO&3rxjr$3~6tQa+ijtWamv&VnYse&y$N zRd5m(mzG9%zSN4}yr2A7KK)T`O-+eK<#GZrlwPi10Xf0$B@c!|A+5rpTw)q^JU1Y6 zG8d0O;05<(a93xkMYW@M8TLARM9@Ze4~?iGd#Ney{c!$f7j`B!rBcg+HxiM_!Hv4cavrtWap%8iUgG`I-MLk3mf8C7*ZT&#VJkz6FNOmy-Y{CEuMK3xDwh-rCu zD&4zdtqfHjII=9-9?Y_>174LLKJw{0dBba7^2v`uX56sQNX(w2DO@P;AHs}R*t$PI zr+SXu?-tQ%ZCN;ayA1iIXP;VXTe1(pKt9BJS99lvl27mWgU!Ly!ZMDps;<8fH_LSq zk6C-1WuP8E^t?@dbN!G;+~uLw(NB2OKTi^Z*yh#bAAp>4_oAeBlGtX?M2dhDfZPzY zsgh1UscPTM2cIT`YW2mNj|m5xQ9&E}mX?-MR{p{lB6xkaTa>Wk`iZ^Gn(FhRl%rFd zgLEO5uk>O+hA)>Np;Fnop574TY4d*mzXykFPVDNVP9DVeb;f}}(vnR@8RmTgOWx>5 zwpJR6IHjBBVNnh>ae1MawyXJ8G(E&F7ia}mJ&!T2s{P|yEU`c*9aLjD(wD2R@if+0TKP?e? zr%9LZuvOl<1;_fWEZ&G-&m5?m`mPVKdiYk8pNmV-CZuNbjz!hs+DeAf!rlk~yw4>_ z1U??Q+Gzf*y8=6&WvP3g{j@KifaJ56`LVP;MD0VQV^cPUkxfv0_SJ-2O6Ia@)$gJDhVU!-~2e94%OCKBxxizNibTycjqR z%=n<@nmlpqxTmFN2|5L;a82Wz7vw9ScF{8`U93hfwbV3N@PemZm59+RR=yMTO@Y(qDezEA!mO2ee8j7KU4SBN8Bfqp} zt9L|KN)%U3+MQ9>Edg6fFw@^rMYXks@v2_e)Z4M|*+W4@z52+;;IIQ39*7>ls?oG` zPLRJOj3dsFb;l7v5I%2C=&{8csGed~-mMzB^(19$7-kG;S6`5kQs zgUWCx6ux1Nw;mdge-uaLZ6uxp$xDjaJB$8c>IbeTCBO$*w`g_hE#s&f3m11`M1xc9 z+K=1ensnb^F>Bn+o*(XXgVVqC03P1IO5NF>wRcU_f6z`k-mjU;$WU%BEUX`O1Y<iJRtp!N=w1ZjC{d zqy6N^j}*^;FVfnm#Rj9uV`VJR!_UJO0w@RE@~#-tmqd^~LJItnh-_t1*aKmcqHFK? zTbpy`Hr+vfkL)^fHf|Rmr`-dnyj5J!9MuyA9|1m1TJ&h@K%$-y{pg5ewY^ zVh*f%9N1t%9kU)IPvQg*Mt1TAN(#r4??V0X+OFD@19FPYDgqyctn0$H#Y-uZh4i6o znTYAae-v8FEQpF4z(jfa6zrNMSMc!Z^4CN2%gc$>LOQL&SJLv}?#Cgi`w`-GSvB%k zI~Ns7cMDK6N4qep2VjjM;Q;dvr4j6*O88#SNUKbWiOv=CG&yb0b5HGHmP>*zB{Hlh z^-6PIG8wy%;S6b5{PxUorsZbG?Zf{6AWEuqzXI|q*D%&U0*FH@!)tYVmg;pOru2h!qZ~haP=(Gu}F54e|eYB7`;W zalx!bHDS#@)9)}=Q`T*EdSU{k=kR1CHbUQxSO>il1t=<81(`nU>MO9HAlql$eo_7O ztS-Aa>>zmn5j;_WAqPKL1vDoZZQTS(_#m$F)Oc^bB@HOie$NYN z%PT1GbapLyOgN)!(upP~Mx<}B-R6xkPqa<33kssNF!FdEB-=ku@m>6Ry*1J!dEM2~ z;Rp>!1q?J3_bKlOK?t@cz(*O=rHZpH8yGQZIi+jiO8RC~`nHZbdN*t*eFRn<1~3`o z8D-V%Fg3MgEvCFXs!XcF0-+c3s&H#R7VLT4_Zz8+2j3oWhUdRIVZeW;{8X|#Tk+>y z1ly-nLT=2srmoOpzzHEk(0+q^NiO(}SB?%2uCA`mlS9+fP1c>!{iWZ~4f**E*~k~$ zb1lsK`!@hOEEjnAEA-9Ivmer|2WySaVgVyCS5iw%@Gx=e^2_q^!h*Cwawg3p{kxb^ zljLH9h&|3mqd=vTHDbh$ z(CN3;!Tkwaw(1H>1BH#5SG2&2%Ff9b5^&pRE^*PlEvl@0{WG6{ft#A+O|ekZ5Glm0 zwVp+=d!CY5i1rBGdw|jkK}z-)Mlz2^WiTKiu$MEMWmiFRcCa3?q|(R-0b8bo|)N&3K`qQhdSY7JBF4#yJtS4|@EGlBXU?=j6Qn zs$PHKx}ic^>fCIh58p;Zx|u-}zuLOpf#T<5oM)TzVg~3yNV)xsKEwa;uR-HkW;er( zG8gkN4v%cT0)};My>AId-{61AsiAnQ`b=)AhT{c;xX-?ixk5j#{!g%ykea4m?CDe^ zUtAMWP>s%k*A%zt5u)3tyCu~k`WrUFSa<{s3Vz66zIa)9yCM@V@5qX$l@fBC`A__G z0vhAbS5p76wA6#J>_6hKfSa~}*U!er7IxX9BYs6&tU$qVIDufUKsorPV_WSK@llfb zlSbsEqcJQOjFtC;qWPC8-R|Bd-Pp;E(up+xy~{upIWXz>LrpT?Knq{xoOM4Q=y91f z+J@Cr5Ap0Wi=m#I7gGx-Xsq(eD#i?V>%W&DZZnimaOjF_v7#X57J#CLc@>K4G8q!IBGAYKZz7P~ zt&ov;x#)$4(z5Cmzj_O?)IPZk964Alsb|R}15e6uQ>a;}%UIF4F*MmQnXMWcc||#= zG_a_3e4ws&N5AOfMVgz!t2!!aOotf`NkVOv*R7CCSNt<@_e)p&YOJSx z#8&QSEYz2#_S=Ef4Dq~Tf{v}E+*EmE*jlu;Q;EyemU5@K{ZuKg0sOzKNJ77z6sVNc z&}9VvyS}uz`W{oOw`He$Al5{Sgv2WCnP`3bh-;YPyTzZe;w^iUZHP8RnH!Ss^Ho%S z{_EeJ0wcsm3@B6fvfqWBIyN_*0Mo1Qn*s0HM3Dc+Af|_hCp&Ae$b0?CC1MeO-Y|09 zeK%C(~9?N=rhCb?5nxw*Mh z%~NV!r;sk>niBI`AMbxpgNzk{xJRAtiUU$ixnz`AX4@tix#9=<#o9=dx{AQL{Z-J# zZSkg{C|E32)~)Qq26ccYcID3Z(9okBAlc7|B~!B*uNrO3YO(?gnU`zIS5|Lh4?FUo zq>>Mnyubwqr|f1LMyD8kcUJii_zk*f+iSt|y_^cLlWVo!>ye_Rg8VO&HJ(_Ejd9ZB zB9E?E8s^J!2aefSy!OWol0;OQXw5W4K*i^m&P<3>*uXJwb*-`;}_3fW;&fnP#gn> z&OR{;h~^}B#S*1FB~dey+31w&tGxC>Ew0Jonc@^R@-QV9IgCVS43lOb&jvj%zOLoK z##W-H4QE{YI|Y1I)Ql{W&y+v54Zo+xboa=qo2H~3kcI%1L0;y0&s^g0MDG_&(u_C0 zc_h=%4u^ID?59;VipZ6y44-x3+G8p)4bE{Iq@X&PrstBWfqVA8)@Te{^pVP?^1o@!MDvL=Y-7-KOixD=T|;o3bu4SkL_m#Zrzi z$9m`9gBrqF$5B`Bz8uVY!+p=WcgZ8jFVjnYcg;x|gPx@p-Y%1DFtMi3zHC{oPL;H* zDNtw9C!nGHIkV7|;7*zOqfMH0+xZd9nY@cLs=lfbXfrbMx|stdv!R4Z-;7I3SpTIE zo4`?!HGChfsiCHMyd{DElueD(qsWHt9VY*`v!O3;tqENH{2tm4%Tl)y_+~s61dQ;~ zo-!4n&(T%fA5AXEczRj)WO^Pj!3&uOoSIDP?-dR)3+E{xELJqG%YsZRJUa>9k@ExF|dTCsZ#l*l4 zxSemK^Tr*GLgule8y-vLK0!|g zJPdpkI5_QPXO0WRgExyU3rl|^rSyQPvCWBD?pVZXFFm+(SlI&9)x4`OEG%n9|3xFa`#Sxt~G+WM&?69kn zKi^oZ&;zsFvv(36!FE3BHi1zLzCY1dv)KsnB*0$%`$kgB!fThM-afy|2>ocK9hCW8 z=u`+`0)<)#Bje-GK95}M?f|^_e!1P=XVUCmpS3_GoU_8|PhgZ}UFhzHC&j1KQ$C%v zREB7F@5u-L(JJC<3I?FkPco8!^_ne+M}}_f50M?>GUu*ejOzIM!_Qoi7mDkZD$vQe z>h<|-do63$^NRWn!P5F=fHL}AEr3Gt;3&24O&QC~WLuRRabIe0C&b8s(pekm-pI!T+Q)_jdt*7d%3? zKCJN6qM+h~7ngC|i_0tRD}${MIL!oLN}aPVufU9QU+lm;rPvJ$pRnWX7|d2JZJMuu zQnrY>aIDno{e%cm;o-!eiTW~2S|5T!E=B&pN2>9c;tsZ6uNoIWor>-odoCn1gx2wM z;NnJ{1J*S##D++SP=H^m?hug2DuY6LQ->EZrY5Meu z_Y;1$vckgZJGa?^bZf}>PU1r&b^fQ)S1Rw^W{c^(=sqIxWaMM#!YAL~6?fR~K9ORN z0Pv;kDD!tdJ-#S4GNDKFKX9}tyIZVuqK-*en!Dz$5%R(l@NV$N9v&q@i63gB52Oa5 z2=Fu~Y(fB7pmqaPbgKFa+_h_xo*f%PK$#(*6zHa&cz2Rto#oDuHjNsikdkWdPhr{L zr`L$OBIBAFR8(Bd$m0C(NB=bwbfM%QSZY1=aI~uT*&X(X4)7e{zWp?C_XxKu0@?9B z*2Y+oOUi=M3%YGVQJTGsg$5{jvkXCQ#1d`y_+mOyM+xFI)Bub-N-d0)>tOn#ZpLnG z1Utz1>^7eaeUawf!3E4)v_2(NFOl*pZd~^Iyd9D1(RYR_99HkHqs`R3V@*t!x9wig zRh+=>=XBZpiw-FyR>b$>LR?oT{*`054Iw~Y30%Ds_8DEPsHUBpY^wtQmu*R1$Dke+ z1VE2sG;(Qp&{SHrTNCAB71H(B0;}Td-#eWhFO?`SpkAw=9Xd0=zdtvo{~!|cv#lAtiu-v+m4`*`t{4% zw=e8iQa^*~H$iN411985Ba_PAf8}cf>>kx*x&pWJ&@Z}=cLtOvqsr|X0ym(pSQ>eV z70lGCH{HZ%MEnaU zhrrV~d4oa-eRjuZMi%KaV}i6xRxtf!a=ENwKObtfJE4ogupWNqy8z~Qys*=PJmJL8 z-b2z8`B!SMWZ=*55}=DhRkB{vpe?O#7!Dk6G0Pg65UG-37GiJ;v+S(LR0&_ji(U-X zk~kBG&sGKUq1^%H0!+(!_Wvh843XHWrjEGOQt_;a@!8oSoa`qxe%R4G2a*znQ?`lC zvo-6~O_z6W+a7a5dwF{|uQWEj;QXf;+l`b8-XF@%3a^6eVk-+@3c9B z{C)C^c%}nh`R3|XA;rAW7mPd`pJkEB z{OTXP<`}?z0rdb@{nbbWeoRO2H)w|S!_Q!8Ev!e9N40lwm6@c`D7-moH<<0V$CyA8 zkKg!T_^c-;k^=@_{#|yJ0J<3)i<$_)_lS{Jg#~pMglywaFX8^xGF*vyBv?S@_?-~f zeD}s%mNzf&GA$sG$HoKu!IUZNf&YzUmnn=TZ4&?&OPb+I23jySy0hC)H!LwdmdJMKi+DAcus>r~u*`ygr zPEDd`!F~;8<-6y2_@^jvmQF}y$uAa^dc){G>R6f{IPpEE%dM=YGy1GNV|b5yI-atq ziKttPskbP_Om$uO)b<2L?z80x+DqrjlA7?_bMGuMt-M!OdqvTAa5`B^GipxUiUj-= z25*?{q3|d?0=eG@lDwil4XeM;1s}cRTap3NrV;5d7G8O;?LjMqW0r6Hin`sMSm zJ(z@v?*0KNZgl#RWm|Y4-WZEUC96Q4CiXBW=7yVH@2x1z@!-bb5rz$eL9H@qgKcdk)vQLh5E>7 z#oC9#M_;`rBdO=CpH)Ae9f*)nHDTj_y2t?%o3=?-7orY4YHQK*seQqJwPC@FU7d}z zs0Dch!2Af!Zgt4uUn|NKu6M=xx9JhRze<%Tzbj!!-6lsK@LXHdf;7d=L@X_%a!k*T z-xC{;tsoSg7BeE#C`2LF~n&wzyf6RYJ+^X3{q z$+RsgIFP|b=->w0oeND$5ih=;VqSN9Ry~R3Q1zcPvhn+1)Bd7jhra?*yz?b?;@!Rs ze|t22TQ)kLnU~suq%fW&o)UOpS1-(b>PDG@-lfYtJl=%4>*BiNEdw724Ax8#aj&i6 z53(9j6%yn!81!$MZBH!aU0m#|eH*fz4GpbkXya^d?fiAzJ>=DNf@=@$S=w}kT&u)e zH-o47cR87wqPY@#mfkV4s2$)9fb)PNHgB}JEaqx*M#lB~$!LlXKp}${(*0h2Z=;t;gb0ErSre~ zcfbHaZg>m(ZwzYPuzp>_IC0GpubBpKv=}Tpw0kblhIRK(X4uD$_kR(^Yn+<$qf&JX zuUW70x^7LO%XA-pw|~L>{8s3T1~`u0>~0&&z==*^p*?5H6(h;W!jqWjGxa3_TJ1P? z>@*>1Lz@e{DX%mU5UVJpao{FH)gqWl1-%XdozLASY){q%zYB7Nz~Qy<&dBn8!(T(d zjpHyWt+SpUhM<5f@Y_zRaCnhb^JI~LHowRRbJ=?kO_c)WYpMO=JRdHC3DPBV=G>*8 zrOhuaHG9t-nN>Ry%=*Mt;yR*=)r@M^Zv3MA=cNYy(Eg!}nJev!$1G^uSh0zDwX=iQ zk`S)r)ZA&Cc1Mpx5#iAnhgkXJgvAl%P2{x_Id$$ zHPqJ<`|m6Hsx>If zI9KxQh#oYwb)tCtM6hzOf~-rCX=P}XW5}&1SH?>9d)VQp7{g?FAP-Itaqo@T^-os^ z#0X3vjEoX&Q8Zo-^S*|1y8EZsK1|tA>2f&kLr>A>%dWv#C2n@`lf#n03u(IC-P+kX zatw2V;nb;P($s^gC*mPDTCwtwyD5=;14kPJ0@@6j%@0Pr)YJ~c+aqx3-*W47X*RM_ zf4;m^6Fm;(KZG*>{G5v%ho(bP=E!23u$m*TclOKf?!Mc5TiLGG5Ap_bF(*xR>9P9s(G zw6Y_DDS5^t>`x=l{`ybv)>Hqv6C?*#;f@ZNlb+U}(b6OI&dW}^rC~}WBTpk71;-=j z#KtbE8y8(_ux$;!a`#!u`mh8&M9hUeYl+vT{`#^3yie!UK%dL*@&&wA=Jj%?*zA`(Z-@iY7T-)ZJ)@38_ zv3Iyi>~Qcl0}Ff!*p|Ikmy7WvGhdBQCh5ICz%MP4NClZJ>zGXbSMzi_55cgSdT~ym z#s)8)Ik?GeZTd-VL+=;Y=%?a(hrX1oER`1cAa38h)|C&sME{Phq}hUPcPGrSJsMPl z*D?}lX52%0tyRozU|U-$3o-f4`$wk*oiZ&9%m~B}@lU2|oM)EJdum-4+X zDv14*HSHFa3{Vj6=;p)iB*wY(Fv;9Fa}@kG!RUuxx%+~Kg3soi+ZXG;biR_FZSvE0 z8f9#GGaxV$X z&VKo_L$z6=twTy;mklp3uj(mge|YbdveoR%&eJ~p0bez1G6fjSY-mq!WIrl9vH%b= z!)WLcZ1BnvKg!EW)bSMm8s4EcE5DNGBKO|jcSXE6IMNkn$ z5CsWILAtw9Qjw7E5|HlBi-4e{w6ruxT)G>iL%O^3A{{rr;r)L2OCQgb9BTSs2K6_b0EvtNYrmkm^-aTUVlZG{rRiumsaGQXTm|9R5G1u4YYK{^4!|#$*41rP0!#&4_`KNG7Hy1&Ru@W>AK5Bur|0PSy=;Ia z*m6O@@){NvkDcp^@f=^a?z^h^0yu^3#}x`jECVkH2&~TL+)8v!#w(x4F8WFN&3wtr znA%{Y&eo}5-7iyNseAD9H^uXp27+sC?SWp+1~cS5q=(;Q>8+7=Edm@l)cZgf8UChBl@92#GA?uB56u*hUP&Yln^MN!PrbCih} z>PXh4wU0rpRXB3&F=F(33VwVi#};Tsir&I`wlTj-tS~+&>oGImZW29O9A`8yc}Xll zH;CqcI>0^%6E$ip(X|YiN2(RQXmlR`EKX^-|B$ZqpeeQ8z9~8_&17r;+)MIsu6l2x z*lfJu4NHuPX5UGyl>Mt-REdN{texw-5t$pRe6M9RgDN50y`h%_)5YmP&pMf8R%O$t z;=#gx^kZPN#zSvtk5|N31dmeCiYqB-F|)4jY9fi7RhJL%>~Wc$&58wpkg2H}`Q##> zt|HSKgQ^jk3``;-2W_SL#?TH)D#5&F2<7hlE#>f;E&=f`@j>I|0pY?~ z<)=T`DbuCS6$cqlD;)YViZoDv+~qdf16?B5|I&5zePoe!OQn&8QGq~<6>+f4OA;Q8 zNwPcd4%4Z$Lj+>tVLuK_zuxgYK_;c8ar<@;A~12;wCj5J$P-AC)47no&5DkGOmEwU7ryJkOIOqaa9 zy`W?;@+q)Q(U_mMuaJI6^=fvRzxS+K%9cR*X+Bl<`&ywKZwz0;Dug2;%fJ@V7EIXX zYJ1sF;ll^jqJeOk^??vghEU+@Cl{_VJeil!9mEhxTGwy+lsn3Be5u0}e{nc|yIn8N zWc!pt03Gb2@dls6y`cB856n>@GF^)gyS5yNA0pGhp~gxfx0|XeoLs->*morMswfga zqK&Zgn4K%RDdAlM-`|jjq2$;zWCInmo`NA!Yvp)E{IOmj89A!Vd(MjXYut<;4@1L11MRzy6UPny-2P zp^?>Q9V$ra81h0%@vEW?P z6m@oATX2r%^XAsXnN0sDMcittH>v2QVxEWtV+V&vl`AwRT1;kHBTD*xOZMvgCbvaVQ*+;&%ZlSq^gV7Sz6g zj_=EalhCl-(g#hH=;nLb6uU~Imw#lT7j=&<7ME6Bl)bQjz$4u-NsUO}Z+<}0eLoT^ zuj_VxbN(cS?`Wp_cC|A^r$q7isDfS~a$sbn)pgs=XJ~E;`^2(kN$m0V2yC_$b$v<{ z^!4}nZk|F0g+ZZ858q)i1;sZo4OJkM_a*-$yW7)^HYlw1ravk2_I1!t`8@kAc$xdM zpK)SiJ>&LJ(z>bm^F-++`LWK#zEu4jt&oFdY>UvUa5_Ztt6O(D(vq#Q>Y@(`?BWi` zMs{}TiuunMly6ALdI~4^QY>q2)X<(v1fT~Xb!v)bTm1?Pr@#8r{Z`w}m+h>@kYa`)4Tu}7Q|V}`M`E@7sjAHvuT8*4rz8Wz1Twl+3MaUNQ4B9yq3 z_KR{r|+v8|d%VY*m*y%Xy>1A*n7>ucfk@WaRRP%VTEJ^IZNIosoC{aDL!tb*HO|i%(Ao+Q=2~I!uVEc@Lg2vr-K>Vx z%~)wf$?473&zf{c3=9wB^IbfDp|P7!>34kMQp1QpO)Kgc53dR-z|p!kA?J}sUwl_d zD)UtyAe~navse8--wZD{CPMXGQApni8Roh#bnHh*M~>y3ZXO>ObzJ?@#33`^@ayY6 z(ZwEXB`ADo6kRzteyIs{RAsQmr=B5Ubwfkb$et>gF4m{FNu3`bH(3k9BA=_O_EKA8 z8c$G2M~+ro7j}fcQc{YtRL$cl)?D8E@&(aXx=8 zZu^z?Epj$fRmzoHls*E7{qaS)xlFgFC<5v0+gr_un(;Gbr}3?2KSX>+2DA+Mf@L6G z$aSlca(l)_?*73;ZnPDVii%2@xCfPyjU-b%uE$~ZWp~q|X^|cPFO^2fts&j7&4#K3 zleJ12ZxJ`b+WfTBv;&M(5OSJrt{({9CkoL9=kLZz>987d61l+|+1()Yy)Re{>zQb1 zvWw+SIKGuJ43CUlrj2GV#$U_}FF|EtYilvP+@Is(;;`%V^2bYb5SsHEB`@jus=REB z%)y8AG~M1xNI3CR&1U#*wFXOUs@^u&7&F#OC>J98?A7qy9WlCX z5Oe{*1`V6iS{*XMQJ5+FM)==b0Mnw@uQ=udxJ9rrU8MKrR*CNZl>JiWK2=LTTN@p9=v9YJ?=J1B^(09o`HE@yW%J;jSNy!dWYQB{dxI4bi2&w@4<9bn zJ5LYRdL+s79d%kQ^y ze_l3mh;P+V5N*K3ohZV8`U(x+&Vbe7e z@Se_+=ekFN{o+z+1Eb)qm_u1X-BW|h_2zgoPUl3iwh6G!&O#8m3INqy(kY2~o>Y~s zvL)xm#*oT;**C5GNPT&28Wq-;9wrr*?yDi8O8e%0-o=FGV_c&-ScRehgY%RlVG}U54TpBA5J?tp-3@g^z`)n z8uAIDR38%M>A zw_#`&lV+q|)rxr!{1-a)Mcxl?ye`}h?Y{(tD~fsNJYDO54KX`F>T7qgbvO^vt=d^? zzRkkB{*bEzfwb;T7DbSQdQTM-N_KnvKu+1}-<%LO9UhCBvaDB?8s~p`^aZ)Ncgw`A4e`In`u^&nr7KGht6}9$ zNWHjKwT`j-BP^_RVQ;tiM=rdM&nmpNP5ZD|kmZr|CMZf5?k-tpfft>e;C|M#eOd0!JJGBo_`^dFe5ZF@;6%42o*v$)vC zcvifVV||I_bdx?KzGsB>iv7EWEL2$L1x4p^E8$-Pz~nuw{wu3SAWT3-*0b2)?tPJ3 z5Ab{6(9mmF;zUH!6vpvj(tNMv$u^L_-)11fh!L^XxylYg7FKk8udV zK$iL4xJt<%avh$Z24WG2O#w-5mrQsybZ_YWYK96?L*2|k7M2d zSo`B(;ovp1CbGrjU$(4vR_(bDTWHo)vCe3-2~jx)eyo9ur~W1UcTU!4i;XrvXs2MYGkaZ4-mTYSBtT2)#H3@iZM_<#Vuczcol z;k~go8y{VsehS|ZDev#6YMErVHvXD-)z1d{jjkqt%Zz~|^;y$>KB_jza%7rg`DF1+ z;%^cOs&5j=sDz<+OrJYelBks7%YCGD!mYq1qLA`vp?*Ip54Q#=Aq3d6p;-jj(tt5sh2rU!o4$8(A%NPN zFva&9xx@@z@+ffgfXquf^YPO+*UpDi5ymt!3w4gF4j1f+1Ffi|Mn2XUkOhB}(D)co z4q<-$kBZgGdFBN>MQmS{>0~Hgo+9tIsr$evPszt#X0?L9jhZ7ZqF&wIU1GZ~^=_TP zMVing2xWrV0FT*HdgKz45)5~HBj}8{7|QGnF>Ljd1P_Xr>uKTs{01gA^#n(X8eHvj zCV+yVOMV5b;=fN7@_hWFxiQZdUS3iOeoLI3w1b0#ghcZfgn{+MuT^eYclEG{Ooo1V zA7*TynwlOEbjc_|SK*TlmA%Pn*~lu>1H)I*E{9{g*?p?CIDUu$(Qb>ZT9m?6{!`Hk z$UezZkS%c-Myu2r$L*-Op^xR(Y*hdVLK6kb>m||IF)6%Hu#4ONj%X8*BaeiN&yhakD z2gb>Ly?)@YQ3PTH9j~=6jTYL=yIm(nCgkTbSm%gGk@I-?jtEz#u^SC|aL*437-lKz z#zg6sSqZtbPnc^`7NPP-p9;uW+{oAzvL|h3n)({HZ^dTkbPH81wiU@S&-V>Q`81fo ztZn085Pv;3`kaYDOcI>n+uhw4QrJfHU_1aBd5>d?n@!qPJ3+fS;+cd+a%AZ53Xj!} zQnU$FoBn^Xf<){=FW=f47N-5dDuI8LsFEq@`tKSm4*& zI+JU~#4o>n6LStcXzw;G+S3SgDKL*4=!)!|B#Dq|Ucx@r0n*>dNUi2bI!!Qc(TnFa zvDnus=Vxaz?>tQ9$a?gfT$I}a(GI|P4gdAAmuJfef$bj8(+_fkY5qv|&@2gw03!IA z$$D3?M)(sc+7BbI#gFK$=q>q=o+eAhw6mW38300A>QyvTyj**tD#7c-0ZEAf@T)2e zp-b(AOgdwI2Gp^q*um>{zych(?lHuTHUoAc8fNaO6`fK>jnm{_1y{sM3J`_>FFcMX zUS&1c5nBG`8$;}OvK9$B7cIC6FIJ|hsjjcZuNg-)>L3p+oX(A`R3d*`bkNI%oAuD~ z?H4ts?>JH4zK5Qi{=40NfL)(uyRQM*H-1vjs@nhal}gDRE#CQT*hO^9ylZPnzBCHT&h>!zkdoN0m;er_3+Kv_*>r_W3D+%4lj&Z?=J-V zUASG^v_Ub{eK&hEB=*iaX&1wRxASfXGgW3E0Mo5e#G52fAYI?sczb;fFxh%UyCgaS z#g8@KVCGb!!^>{aWI9aiuf`Pd?NNq^<0qKiVlmeqDx4{v#xj|&m04L^Tl=lC^2awn zCTZ@Kf%&Frk*}HQi%g;@YVC59NKHOV$rQX0V&s?KdxveEN3XPFnSP8)^StD>UKEo^z<=HJ(jdG66u!#nrOYmz@)i#ryG053$CNo26i_p#Y`m; z&+L+=9?1iN)CigUW_J|wVo?~S(|B~W=&e&S1uw^GHpoc!LZr+tqj4sKzF&0a$mJYq@wzZm3RMXMD&<=I7ChMZ9vh2&m<)7HD`bZR)_xKKS|T@!}c z#>AknTt35zhE^ZvRV|swmcRqJB5=?M2(HeFDsL{2WK9-ZpGOnM{dhv(8_I0~w|_vs z-aEqv;J{a!RJoD{zx}B#Tiwfp#l+ZHRW&u1I`1z~=ty_9b;gml4G)R^QoZj^@2WH7 zcC`-h=}v0&^CwA80HgBxq>=^qZUtO)ifT z%u&?T?aMybW-vQZaA`l+b`zWRNiG%)0}RnZuBioA1!TZ6h?$YKJ|?*V)`nd4zFcgD z7?!YclSU-47}5q25E8i66jXY7QL5;|*IWZkw-X8RHoBlPe4l{?t{fY(j ziq-qG4tLU5RoJG^1cC53r#@3I(OyuEZaxyKUNkm79u^upWFOY231kEVC=ISEAjNce zto=?lEKeV!WsiDXwqt;_p%>u2Z(DOEFVh-aD@AUh>P1@_t*qf;C7(;$+VFd^KlCNE z_B9XyEex=#7VE|)6y>w;L0M!)U*4(& zK5SA{#2>)3<%caLesm4z2niT zK%rmn;{a0t$@qd=QN_$#0ilF->@aKdq4;$8RtgNW0(n(XyuasOuMPU;L#9{Xc z$?(@$spqO>suT|SG>=+{xWQ-UX{6?=(TpB~0PxBqE_SlP1oLqvq+SoH)7r8;oV>Yz zXnps{k95y{x9G0d8Ah?iad44;WEFLKQgW_(y~Wg%Zr*}Z3GK`MK?;A={?JB?dSZL$C2r--e`r!p^rhGhRLaC%_~x~An2;cLKc2H&53-xi|%NgF=nIP*TK#%44|9HM*X?dVvpQDml_kY|}B zzqPeB)udfX>gX5}Mb_eUu48N*Z2)x-%0W>AwgVPUve>F*h$+&MnpKd@yG9($NgDCl zAPeYm4PLo!Ph8T_F~Km3Ha|AK<|ZI94)pT`z*Ye2w>#f^5s{+9$>cybch!aIH;j4P~c-S72e2l8(%cN_N*)kxv+2&a>Q z;N;u4Z}*_*`{UW>rdmN5kq8t`gOi!Pz5V}B^y=E{=C|yz{Whe;{v3A?rWNI0?;XwF z8le)WVPH6JD_!JN9-WH7CcFQ~aid?~sTC~@Qk*SKK(f@Gi;GCR+-FZ@H*~D}DvFXG zuL=qAHZn5meE8(yIV|I2ZD~{@9+d4i>(MdZ@yW@njm+!BjqPnB0zwTOmrO{|$4Ee8 zm&KL{yPKMsJ-)Rm{YbrYywt4z>hGTg%lD_)efF5&bc}o-p<;+-f@??rLjeea7eq+- zK2#`eIQlLbVN!c!6`v~d%dj=5!4=_y=pU7#IiWQ=uJ-G z4JpG+FiR}aDx7|7c|c4+@avBQhn|t*4dy$@hP-bB_{$bL6tI9<&b$U=#XTZ(pdl0z~Y^xol!;mz}xxWnF-)bPRN@9 zHxhvBJw3t<3JO2hV9;ElZbwNSk_G+T^=)n(ne1;x zs9cpo32Hn%JlJ%;Qoh?^ky_-L!|79I;`x7n13|FHGTJ8FqwQ_)@FH!c`?H8_mL&%0!fR8Dih<9lpr@3aD)OOO=;(0k zsp5Y(e=`9=P)e*8?YJVAo)G)q?ECrta-C!Bw4;&vaC*t}koC5<)w|Dw`8{YEmaNA{ z$z}8_BH*6v8^_eM1BH`6bUet~fO1=X+i4iLh^Xk{DOGab;^JaJV4$}fY^u>5I#XaF zeQmg4-?H&y2q+5He)o(xh$GVk#6ILO zt?g_|h$vyJtHwynBalUbBAgNpPfxE|9uBk?a1YN&`Yd`FK>3Now}%Z2D9Ej|J>KYz zomy_}57FvI}Fn@w=y+i2(cbh9pBtfJ3Q~*a`#Or@>9?1Q*=1u{>DC_Mm_2@OLSa!R@!Z2V>>071-Fb^M@=Uz zc)gm_vlwzE3V$$5iRk`%i@2|(ga;z5#Jjn}c_!Dw+WdhuCCtdXO~P3D#g1C9(1y4jh627qX=DeWoi^*$rXXcWfF z%Q-WKuj<}+${_vx2ps?NCv~i4#f1@pE-F4J6NPJQ&w`Bu0?-@Xj>huTo#K!Cv%(8Q zz6RY~U2SY_B|+XRDh@AV;;mUv)#$6C`TQ3YgN)M&|z>D+q*m5rt34nf?+ID1^KesAB-0luVEzu6n+2eL(} zj=DzgI*=>gUVjY^?$#(FeNMOu;Ax40&{BGOlh+e&oYScSrxNwUV6nePz!_m zXLU*RUaETM%{l11aYwsD-oJmpdoz?G<^l7amws?T?X3seRMLOdVL{Xe&_$bSF$X55 z%s9fsbh2AO!VzsE>wYj7pPsI)rj|3gSC{`(0+FMq5?Y`cZR%r`N zd2(^D2kd=(nmi|;ft-$DcZKP~e1&GfOa|H#u@x{i=ypf;L z(Mg=PW2U#$XlcT33(X-td}x8~4p+USoSm}upJ8ea^8ekpf5kb3ghDm%8S#*6LbZi` zddtwnSzOq9EV84?nkC%y-U4wQ&=P9iJ=!-=Ce;i9=RM${GH7xs1ez9fy45s^vd2+r z2p{+z zP`ECmCvQ_EPWE%|VrcQ6K3Z;Vy+A2I0wrbkC!TA48~%N!{lmkvEhgK?%JzJUc7k?ex0-f2 zCqk103cGn9j|HL=*XzOuaSSr&B7e(QJKiRAm&ACV@4K&c6$S)Ia7WFl7fy%|WkA>w zEfE+#8o7U;Qc_YHB#O*FG)i$m3j&o`M&c#9HOHr?o38J*lRhKaTS>zof;X!Wl zW0t~KBIGXOv{$!eG*wCsR&TZ4&JcCw8 z;URF#mW&qenvM&eA*$43-<@=R^o@9jFKHxr1TryLlXxbWgf*a9JlNN_nNpH`OO*hY zBws0G_iw#*WsNQPHEq$Fv~@T`$K-l{cU>Ny{(fA$u%Z~9 zY+wOq+4Yt$VtC;~c51BJ**r=9GjjjQ!_HBYp01KQv~}wO>KyLZGL{ECLkd65xxuoX$n-Yy5ZNazhaWZ zECU8j9)$`ak+Jzo%q(m^eawJICD8dky&|Eloz#6$lR1?&Y8jO(BnCgM6#@=Yhfx^t z8zi7;!3AYqEz)qJD=pFN)wI+nc*kOD6#kxYqrP{1cU6^=(oIA~Ms9ge)*Q}Lni?T2 zt|gaysdU)^rz9=Z6RmuBzWVl)XvTV7tocZl&9dK?d4{=}*}TOB>NOAP5YQtM7BV}L z*&zleXUAo7O)qleK$DT*a>e++w6Vh;Cl(vbX6er_Aq;dI-Fy`l*`Nxz>_9x0r}IYT zs$qk=sPj#A$IZ=6Gcg|vz(;tz1^Z7k{V2UNuljDtmv2l3>Rqi=o15-+Nxju;>Q;Bzl!FG2GKhE5unegXUcvWi|Rl+VW zzqiWmDeK+C@B`=S2Ki!QWV@rDqT-R}vd``Qns|C+T$7bcoK%O&!#3axZE>FVx+m5H z%)jg6@L!674>Npju7PzA$RU$q453-cytY|t3?<(4n&OEc59h15dE>HygDOLS`V$G( zG0zP=ev`ajS5&B3LbQkiJqr_6pf#}3YP-PTR%8ta zJFNWBFBk~AhjUfY9Iwc%;(q>E0U-~$ubt5BbpBh1#*Y*0%^lsbw#aGUSpV;3#V2jI zRTzXIo?xDVw(QmHVur_+@3O>yFfBbBk{Oyzd_^3-aPUU^CppR3GH*&&;E_Wb`j z8s*c4&XpCXxFG}^lnjZdT3DSG2b%+lC8XpabBjzBS*lkWc~LS?Cg>!eJv!skrppxX z1{6oXMUQ#WwbvbzlHi*2)Q?F_OpH&l&Gz_jS5XC!POe)`6}Ma0MLvzmFf4;ZC+`+Y z`hqH@Sor4$ z-*lp!VCL*}T0Hrai(MQRwfP~X1`I;*j*<+CoDn*w4|+!%Q&+b~shGY|>QcKKXwcO; zMDtsY(7?GKcsUBE?eBKgDL@oY?@5klK)7P39muJ>EO_qnHDEof!NM+nbN60?iWhmG zc3Y*<<8l1qj_L`Up=rf&baJ~JK9g=~}QhW8}(MqjuLvgWu zcD02xc8?>dW`Mw5-_En?cPpjFC3`K3G3PBTF78c+8N&DN%hi9+tvZeX-z3;Q9=1(W z`%mbVGAaO>v<2qYQ$^<7dVh8s{sqgK_FilD3EJuMyuO=!3MK#)u}BLmCR7yjSPRPC3D`L7Wh z7l-)@8IFjXC(TO~PoO~aGd1n1O2Dl+UfT)M+&rb zi^V3h&HiZjE0?u(0XA-K=brRM==p(3W1BzwcSWU01L`6rlY?ay*6eps8JYcRSN`O1 zmH`z4)@Tj_&)ISXs|c@!AS|YM*BI{5EaKp3xm>O!wakxzJq|Vonu$&c8}qo9nJ@l8 z1=wlt<=(-!nU&R<2252>^Vxyp7=VtKUGzV%y<+>~oUYfl4gDP1HhuncP`g=Jy;qK_ zt<^l=o9vDx8E=sOU}$fsD?aM8WFYqT?b}P3I0wq3uA+j=RXZsIuT}9cnnnnqM|tGF zIsx|=EHb0b8V=4GQULN6B&DK@o-V&I<}&&Y}{zb?74V|@XXu$y< zDAiM1gn&dIaSOa4{QPDEFIeYlEp=-@vwqe4xA39nU{_HjK3@x^ zG-T(Yl`8!Bmk02GXAc8qR1>a`N0Xe*-H(>ioRB{6-xt3A(+0wXK;-SV$Xr1$lU(i? zT=g-4lAsm$qutwn%?cLp)xFK649LahtTUjC8f||ZUtCx%6pS{SEWiJqv6JUeIU+gK z^Vg+lBLP$9#Z3}bk`5jY&o_m6DE)e+@-YB$#iYlQ&XH?aNq>?v<2$M^5&M1x7U%hl^< zItnUbTm1Ieuth25IF&++nP2Vm*~?a=IZ286+XM7uT9K?wYzb|*#{x+n6RUf$Q1>;@fS75(ahu%`?r1cMJvaQ)M-tqPX$;2z6DTsrXBr*_ldt;-;ln3!|9ez(Tc%kVQGHwTag9G+0gj3fc#y@|nXY&_pbE9qr z|M6Ns7KlkO{yDSryLAv@c{x=gCI)wldnQ3aw1qldR{1`$yquwV?+36ps)*+ozUj^$ zR9;`Qj9ED8jW+4{Oz)9tIoH`K3ak{+$1hUFU9Hw;E(6GnqM(9sAB5NW&e4(G)Jcv% z8cOj{_}yy}J}ZnF&}RfKTK&=QzeVPFE!ld&4OA~a)Jf}Kmm_#>I_jsQB9`1O!0A$mBRhKWb<$RkUh?j`T1t8xUU z4zG245hWa=OfXqzJmziEb0W8_4R~`FuN!6sQvS6`U2wHHZzB=;tt!9S5E}y{FZrx% zK5YV>*>-#a)u*u=O33U2n{pipeqtU;Mn01d4M_<(Ot*05k$!S;siUX2zX4p43YA$@+P-c9PGBD{7#n1Ru%J8Z6_)=Qz^GMw~1!F+VMI$fcO>o5O)TE z$CG6ue%qOXRNRP=uWHHXyMsGBiRVV@3^$7>T*ENQ8gYt5-lIdcSnahRb9pc{cT#>ReCn z(W871uCQ8cZB4mmQ)ereiAB0PzM#w(T6|M9=UAiPi7cRa4Gg&16kn}sqS-9h2X58@ z?cnm%Z*MeTNoUShHzNo*JD3R_jViJ88T%fUoz4O2{0=0hC7uzKBuhwSqVpf)tnn9rbkP4(nT41$=gn zN3(l)Nrz(DPp~_EcocfN)DRwX6Bi}(0;)7700Q&bR9W?nfku=za}|R0^qM6asstcq zPzNqs3jM|!1-s3|KJP$G|3ko5Iy{=pGKnGOTPSxXf=2g_sZ8RDBd)gDTd`)m9wqz` z@sZcac;$6~APmZTH{wxa|C|{xqd&5;UKu1=YiLYuH4Aric2?`KLLWCbiR3FKeL6R6 zU@n{<8|U`W&-%y!_eD*9RAGw^2?{bb-~I`Sg~J0j2Qyg0#req+E8yhHq`Mb={z|nh8i381H*igdXDI{|j$UYfh ztRdWQEa++E`o+GwWCKX4D{H6Q(M<8IIddf7azbvr(Q8|OJb#l>L#X9DThwKk4O_=8iJ2?w#= zqTKqeBu6YrrNIR`pEp$1N2ylw?2mhhWW6MQ|G@ab!1#xQH)sa;yn&}iS|aT#C-}*A z4F(exRLbxDBn`*iTD*gn&+14Fu4z=Jh$ZvpBV zm-X7!SYEAa+#H3r`3MYqBKxZLDv8Iq1F-t(yZe`5Yzc)B=t+P0xx{LO!VbHJO5M8m zqLS8-#*J!I<0oFBVSIK;#$&qIbp57WB?+?j3n~2edH=}Zd6siMJt6K6>}DLKEmt?z zEtvQo-rm(VOKYu$P;JrSA%#Mf@7$8-rqxOw9#=0rgK>Apr(@iZEIs%V22OIEXpinP z`Y#jEmxiD^I4e?%kddh##k`qW zTcReEyc45QVo{Murudti^Zh2jMS;l58;@%sySTw-2dr-bvKR~vm-je1QHbm|fB&|& zH_F&|mBmczzr#IGhwRdXFmEs))nW8FCTZhErHNDn5nk9G)^9r2{r)|mj-k3mz@8wq zn1$wlcNQ3)$(-zlN8LUl*3!92trRr8D^dgCLB2SQ=CjSW(U&_2qTZ}dEjZ0nh3KPy zdL{2(E~aPhZX~cKvgz9SeV_zFHVTPhfF&xe{O9%S0Cb<0;)Mgw_3nTAe|k6utr0h3 zwb79hrNss%bIsnDCC@WR7(!3Z&I*9XYwQY(HJOiaVQKp)(0h3(tpTLXN;xL5wuCU^6QO{x1>`{`ouG9`jYag1aV-r zpik1^e8{kPhx!>+U-c7%qZ)6C30K;Jl$(dw{wuw3&93mBsW z9U}%o>58rQn;33Y4pS{|6N1*~&}+E@)#-sSLyQFAs4^I_|A*+5jq+$lN^3>xH&|^p zJb8I-@J?B+2bVm6`F`upgY*5@36=#M(eYKshnya>*FICVLs*Ju_>I^^JDI5PL7bPBv@`*%>01 zE*J}2GL-nH#*`-F*YUyNseW!~RMeBGG!+H{@Rb(I%?7$Btz(}(GgC?OPXWXg{Axd- zyRWaZCl2M_;|$9)q(fh@~~i z<~Bv7BWeO2DaVyrnc4q%x=2g2S;+ObMv2w9Y+QVNeB7h=3#jOnjLWH+a^SfqbSMEx z#N7~bev)9wRamU<^r6Te1DGatTTK6D>NkQVdq5U6h|ea>@4eJvs9R%yxmp#)#l_{x zE9TW<%0({V(rdIKYKxAh1TyiJZ^XgZtMm5PcILD}pg0vZLda}`AM-e72WMkNy5gv5 z=1ZLUkqTE{M7aTvIn?e5&}X1bxXKdxv!bG6!KX5zSVYs6^0@HNVxZ`Aa zYy|=U++={Qb{JvRN2xNPa$(-Tnmn`q#+_4CdR_N1IsxY1KCl zYqZV=dNei3P$=H=tvI*k8|AphMqRM4A-A6GBhFhII2-PMmEX-MKa1+sosDRu3Aw=* zz5n#91L_mKKiz!CMJUx5*N8e518wD(Md-~@7*waqR#l_hzIcB$yIAma+xK>s$l|9h z*6jKxE~1wZ))h8t8Xbqj{g>BDrrHc#A{BONbGLY8&wiMubeeMIF4ohmbN~tIl1@Rd z);PPY4WPDsFkBhfU53Lj;25ABVQ_eu69wurLPA17huvzOA;;9lMxgY+0YbI6+b$_7 znHADko=$ameSv#>7?jYg9n?F&ex2*p%$xGOuD<^LfvyU=03{szob$7wJlMKvq?Ce6P&4DmjT>%2?5kl{!Jk|(x#xQ;Hswz%CSojlwSXJ z0D21ii4&Ro^`1Jgc(PWE3=dHtjvBo$j-DqVxN%gW28;KaZvkUaC^c8At?{D%X6v(&bNkG=fP;{N`7W$P)MOlV0P_+ z;${f7iktZOUG>X7mb>`ls2r3mZf@6{LmMwQwBG?>F;*=7;X>7{0=2}==KY`HdcY9! z0`-VCvu|Ia?kEE1D9g<9$^K+iXebkle7P6;O&6%3ej*cieaH?o7x6HMUj>HXK2DE2 z2IfcPs#<-xY+&}rXVwj;dSJOcJqJYQ#zwb#5%L5UwkgnTkgrm78ioyy6I5SG)NgHL z(t7&jYzb9U2gy>+=lGQniEk36R}N!2)b>s7?hn$Eupd7TlM4-m zV+?sZ_HTxD%7oWBZDJ+%4+Asbcha&eRg(VJhzvizy!5{M(G&S=a4GljvH@s6=UK4&CNTs^*jMD1T2{MaZbCsAQ=WdZuODP$%cD zukZ8xUT(8fy6>P7r}**tC$zE@;GwutNZ!~cIwn^P`(D^!K40^Lh>{3<)_ zNyvjey}+i~x0FVmss)2NqgJFm_IHg=UabGc=_H$}yp2yPP=x9>eY%#VgcNHeYH!v9 z{;rhlda58Ap z;J6TrB1DQllK!vwVG6Xa*Qy0P0`7|G&nWR!CN~_kV=ho8$rN!jQ8?}sf)^I{ftWFN zp}2l>{);eYw^7bz&W~6L(kcvPx!$Yco8Hh*J#QaTgJimA+Iu>^xn_r0Qd!MLUOxNb z6T>s~$n{~vdY-+*S|YZa#ZX-%pj5N4h`3z!)}#rO6wJC#19DXlUDkbkt~@ZCAC+ zg<9q4%OXn_JZ!oxYYVxL`9k{{Ikg{{PFj{{Gt>t2ajI{QvUN{2xF34_A*jKY!Wtbe?Hi$n2qp=J@#S2m;Hdjap?5PyNp>C?Xj$>dJk2a3_Ux03gIz6%ii z=Ws>bV9oQ}TTNDdomoW_zyhr2rhjez*LA(axkge za{tdine2ZZU&AnhaXj~%9Rc+`;;ZlrV)Q2zmy^14I<`WAEpfU4zt-_EIZ)VLJt~q= zm;r4Ym?wYv?96AI>*=|+m?W_bAj2$yjUOtN?{^YYqr2F42VqdOC`{jVYEq) z4c(NOPDse=I_6J4F1g+KD-v4>S}~||eslfn2Xjk0@4&!7EDZ4J(nV9Hqq~QR(Q&Gv zX+VVo<>*?F^4oxg_u~Sw6RQA7tW4tiRUumkz5r*IVPxb`7K0p9d~iqz>(9&a`gQsS_k&M;wEips6<62 zyV?e6qu&JtGDkw(7s|c_iY$8KxuN-All>baMN9wC@va4aR{4vnQYT8hq^?dtn1A{O zwIHT;bSTS$g5tt+kct%9i;fjEnA{nGlGH91rwthiG?pF@IO_TNy;W2!4KxLR5if^W zt+IUVXV@#Iz6Umu0VQ9YF)==dcRl^QPhcRk-@og8MtY@4a$aye{7VFPZh6r}H09OK zdht82^SB-czKx5=+6>5%|FC6GKM!47F#IB7mg7p^92GL-*d!k&qX4W&$`pwmr@0!5 zz9+l+0~$~tuLhGH|1andaS!}~F+@eX-f3fyWSl+y+8h3}d?|e`gX-Q2HUJuN-1bpq zgoNr}HJNA<2Y}PamPqAV`eno!%)7VcWiRqU79&?p1n1PKW+EpJ_w7EkL=0=?XMaDB zYQB=V*A1$sGUQ=M%M=tUIVleODc;_bztvB-Jx>)W1-Tp#yu}ROA?_Vu-j)3Puf6O3 zr}~TkZzG~qwyaCpWzVczB=ag;vQrtE6(U?CAF@Yegpie$6e7EaqcQbz{ zDMIJ6vMx{Y`2|Z&ClB54Xkzap`%R&)PQ@xf@rgQe26P}44{g1Ct&ZbLy6GgBwxyMn zm7A%;&nfklE4|4B9jF7^@sVnugHRH3@}0#n9Y5p%yu4e-0Y=PWzBkSP5(*U`BSqaBpu zR+mx1b^T+@UM>$0*W)r!Z1M0oMM?RvHyf~@467rxcL!U z%Fzl9&EIdI(n`+B$}HGg9cziHfJZZTM4~QVQG0B=&mUhGP&257q5)pFeDigcv!1Jx zjC*Dx%n|5Li;Tf|g}pin%-N+szw%-(uG}KIMYla$6l%qkq{YBsn2&cjG88iNI__We z8FAlQ85QhCW8MApnGk{o4Kg>7U^X)Gdc)VrX*?`Bx?6(n+$5eL?6ZnKhpM<4_wUx$ zAC|V_W#fI}=)~~vOAqplUS4v>7qj0-YuJy=Ls|04odA;)O(GJQJ_(FYe1jz@)HQOv z)R_B(VM*bZJYKl;cBz*@*^}_|y+5zKEG6s}`&*Chs|aYL{>I^obl+~m<8sN;b~Mba z0e5QPK$Ql?!r(j~Fj^mzBfO<}Xz%pTh` z)^pzow5{+L1!4~Kxe>H1$yEmRPg>a(c+!iwhulOCg@bgJ6jvS9+(wJ>CHlH1x+Shz z;GIls6N5^eva)gId#1{_kbr{hxCT{p7BqlDjzttS!uJG*vbp#*Njorc5a(~t) zx_)#Rw9^Tm7IdD+|M7E8=l^}EP%Lp&3V(2BlXYX+pd2~mG6Hvo|cCQhVNYc9f z^U5<6Iid}f5~PxHaaDB|k;R|PjF0~GWV_bA{ncuQUDFLJn&lCze?Wk@r$^^qqOe@4 zkCEv^Nlhnu6VX{v)1UiTl`tbizT!cOWWpha2>DOTlr6~jSS{9Z_|R0^zXV2hGK8=8 zgN*+EQt~apE&_=5dfma!%KI6%k@623MyZhH%8$3uD~YyDB|d|6L6!g!x|VFD=5F3F zZovunhgEn3hToml(C~xFHe~4G^{_jmU;^7~V>tWvJ-~J4~td7-9Sc+_X<^p*o zlbhs7F1RU(Y15mI>;HVI3)m`b`6@H8fv2T=GtP!{2U)g~m8PaJeF4Y8!nO(CC}7g= z)*VR;>gem%xQ}_og|_f8Bx#xOb2YyZMX-+m7KL<1^{})qjx>jS?LOQSQ2QVgSp9(t zkJb?_ZEU8Xg}Qp-lcra%3aTrdN2>36Z~trTFor{Q;7wi=@(nb?!otf8oX8|A++>9btD7@!K_H2k?g~o^cEx!`&Vz>U5edDmu(-q0tr{&R<^Q)#(0ZgIjeW19ml_W>{{gOKVI&=Eig4Cc@i-t`rAotfVG<<$+F+> z8-B4$3ZoKA)jN*@3-88?#3rG9=os!V-gpo>vo=<3q;F~yk#XErBv*kxwEYYv_$Tx# zI)EJnB=RRGk^h~X57jBkr)7>3a|?X49oZHfj`l8qnjI~#R%s2lt&Was``fU=kbnI^ z`G+K!>c_laa*4hGn}iECw;Go^Mur#yAs$H`+tw6NmYw4b~a0Lwe_S zCCjjl*wIIKHix%O9@}I`P<#Mg{I;?hk5b?$)+*YT8Z;6de?lkczq)cMFfRLfZp6l% z{mg9ry7V``10cmeQWeKKI(j*A7geJ`q0N{*s>ddEdvyqs+dw-^w*cnt{>~zsNl(&< zG!d4Yu;Su(ACqnV@u5TJ-4dfI*f12LsZ`9jWosEQ$?i+Q*ipx}M4|AnW38>YZp68+ zb)A~WABJh?&Ug!|=v=$zj|xw>v^tGUHk4px! z2~ie^>3k(C$;a0nn_~O%GpGqt7?VeAlY`@&@8qu`?5)j6L zNghDyxCIp9HysSx{^FK)Awh&aQ(&6zpG(uOB2B*VWr@YX04O9ajon*i6O2Ihq^M4v zsjR7~3IDG3$h=VcU%c`ALckY-GVAo^S4ET*6vw!V3Hi~{6B9(RZeT75<9seh#Jl%2 zjE)C5ni#8?^)GVT8@676$eo&LG2bf#<t`X>OJ$*EWC>qn$GY>V$gU(lod%jU7$Paf_%+bd*+!6IG9lik|w4 zr$eoALo^Gt$6gTxQE5pa3eSJMk>Nix;Y+TGC#rwuSqF17KX>D@-0*-MKU1%COhgfv zJL{Puj|!)Og0GaVMOPx>okI_l{O&qxZVs}0{dQyfRK(hQK4eWIY`-cFmioHr-24qF zkxCx8=O_E+UwWo{gOa7M6IXt+ju5>Z-9J2uZ3~@gkeuYV=9-w@S8qZoog^SZC@$em zSs4Q8O%V>#@gt)8q@+=LQoFT2+ZVf+)N#pPsI%{t`K3XX^b6XzM!(&;Dqe}Rgn{K? z%SgzyO5eo9-ijbNF!IsygI8PcMz@RR8VOQ-nlPsC#`!^92Gnwts?*#T*UQD5IXz|{ zz>8r3*qXmdeCuy{RId12pM`v4Z069iAU`tewg=^`8a!x5kSBXs0n#E{=w8+*26cEPK{We2ON}`fV65DK6M?Mun9ep2&(Fqbq@f~w0 z%M_8TD$?EE>U!&utS&y(Y28Vn5$SVKVGw z#l)^5z9Bh5Hvp_8AJueXV^`llSsq>VpQd8n&Q5QQ+5*HeselF6A z>8*&sXr+S!v$&>MG(!{<2|_RFtEHdX6wJ?^=~9 z(N(=!ocVsjljca0(z)l&24_e!_!K<$Z#rKtbXO zcBJ9``%k+GBkB-UXA;Y%xBC|`Ycm0@ERGSBRUo+l3KRtUEmlKKV#aNirw)dEuDG3~XwX%N<$qfVU!kJ%xdAA-$ zem_qa6D^S2aEc||UpwUf}zdszb8 ze#C4AeqM$=K<~a1EQmw#o288*`-OMf)Diit-$`0+d&Se(2FCOBL)c)cZfHA4 z=L?SH3mU;&7%nrK?FOP9Usi_0ny$O;TW;3qjrP>Gb>?d_IgWAtXaSD zg&z>^82*0k#`{8vi-{|B*QMT`i}3&Vw$j5so{*f7pbKski~3>ZB@aT*Ofi-3!)iGY zLZM$gL$NBvq!qg{S@5WS!(ZOgAr8tJ_&*q%z$A`Mo2Mp zM^U!!NyNG(rrzY0r4@aD_`;u8^$Z@0E^1#yba?~%qeP#dNVd^s2|fcc86i%@y2OXR zWO&ya$m({)S(Sp(p5W$5cqOAGW9? Date: Thu, 9 Nov 2023 09:13:03 +0900 Subject: [PATCH 05/30] add: ObservableScrollView.swift --- .../Subviews/ObservableScrollView.swift | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 ios/OTL Watch App/Subviews/ObservableScrollView.swift diff --git a/ios/OTL Watch App/Subviews/ObservableScrollView.swift b/ios/OTL Watch App/Subviews/ObservableScrollView.swift new file mode 100644 index 00000000..bea77f12 --- /dev/null +++ b/ios/OTL Watch App/Subviews/ObservableScrollView.swift @@ -0,0 +1,45 @@ +// +// ObservableScrollView.swift +// OTL Watch App +// +// Created by Soongyu Kwon on 11/9/23. +// + +import SwiftUI + +struct ScrollViewOffsetPreferenceKey: PreferenceKey { + typealias Value = CGFloat + static var defaultValue = CGFloat.zero + static func reduce(value: inout Value, nextValue: () -> Value) { + value += nextValue() + } +} + +struct ObservableScrollView: View where Content : View { + @Namespace var scrollSpace + @Binding var scrollOffset: CGFloat + let content: () -> Content + + init(scrollOffset: Binding, + @ViewBuilder content: @escaping () -> Content) { + _scrollOffset = scrollOffset + self.content = content + } + + var body: some View { + ScrollView { + content() + .background(GeometryReader { geo in + let offset = -geo.frame(in: .named(scrollSpace)).minY + Color.clear + .preference(key: ScrollViewOffsetPreferenceKey.self, + value: offset) + }) + + } + .coordinateSpace(name: scrollSpace) + .onPreferenceChange(ScrollViewOffsetPreferenceKey.self) { value in + scrollOffset = value + } + } +} From c187e8d2bc95d859838a9534bc7fe602f7490921 Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Thu, 9 Nov 2023 09:13:32 +0900 Subject: [PATCH 06/30] add: accentColour --- .../Assets.xcassets/AccentColor.colorset/Contents.json | 9 +++++++++ 1 file changed, 9 insertions(+) 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 eb878970..e9f1af5f 100644 --- a/ios/OTL Watch App/Assets.xcassets/AccentColor.colorset/Contents.json +++ b/ios/OTL Watch App/Assets.xcassets/AccentColor.colorset/Contents.json @@ -1,6 +1,15 @@ { "colors" : [ { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.396", + "green" : "0.298", + "red" : "0.898" + } + }, "idiom" : "universal" } ], From eb375724905efc0869806920bd0955102ef85533 Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Thu, 9 Nov 2023 09:18:22 +0900 Subject: [PATCH 07/30] add: WeeklyTableView barebone --- ios/OTL Watch App/Pages/WeeklyTableView.swift | 142 ++++++++++++++++++ ios/OTL Watch App/Subviews/DayLabelView.swift | 42 ++++++ .../Subviews/TimelineLabelView.swift | 31 ++++ 3 files changed, 215 insertions(+) create mode 100644 ios/OTL Watch App/Pages/WeeklyTableView.swift create mode 100644 ios/OTL Watch App/Subviews/DayLabelView.swift create mode 100644 ios/OTL Watch App/Subviews/TimelineLabelView.swift diff --git a/ios/OTL Watch App/Pages/WeeklyTableView.swift b/ios/OTL Watch App/Pages/WeeklyTableView.swift new file mode 100644 index 00000000..7e10e6c9 --- /dev/null +++ b/ios/OTL Watch App/Pages/WeeklyTableView.swift @@ -0,0 +1,142 @@ +// +// WeeklyTableView.swift +// OTL Watch App +// +// Created by Soongyu Kwon on 11/9/23. +// Copyright © 2023 The Chromium Authors. All rights reserved. +// + +import SwiftUI + +struct WeeklyTableView: View { + @State private var scrollOffset: CGFloat = CGFloat.zero + + var body: some View { + NavigationStack { + ZStack { + // MARK: - Contents + VStack { + Spacer() + .frame(height: 25) + ObservableScrollView(scrollOffset: self.$scrollOffset) { + ZStack { + TimelineLabelView() + HStack { + Spacer() + .frame(width: 20) + ZStack(alignment: .top) { + RoundedRectangle(cornerRadius: 4) + .foregroundColor(Color(red: 51/256, green: 51/256, blue: 51/256)) + RoundedRectangle(cornerRadius: 4) + .frame(height: 20) + } + Spacer() + ZStack(alignment: .top) { + RoundedRectangle(cornerRadius: 4) + .foregroundColor(Color(red: 51/256, green: 51/256, blue: 51/256)) + RoundedRectangle(cornerRadius: 4) + .frame(height: 20) + RoundedRectangle(cornerRadius: 4) + .frame(height: 20) + .offset(y: 21) + RoundedRectangle(cornerRadius: 4) + .frame(height: 20) + .offset(y: 42) + RoundedRectangle(cornerRadius: 4) + .frame(height: 20) + .offset(y: 63) + RoundedRectangle(cornerRadius: 4) + .frame(height: 20) + .offset(y: 84) + } + Spacer() + ZStack(alignment: .top) { + RoundedRectangle(cornerRadius: 4) + .foregroundColor(Color(red: 51/256, green: 51/256, blue: 51/256)) + RoundedRectangle(cornerRadius: 4) + .frame(height: 20) + RoundedRectangle(cornerRadius: 4) + .frame(height: 20) + .offset(y: 105) + } + Spacer() + ZStack(alignment: .top) { + RoundedRectangle(cornerRadius: 4) + .foregroundColor(Color(red: 51/256, green: 51/256, blue: 51/256)) + RoundedRectangle(cornerRadius: 4) + .frame(height: 20) + RoundedRectangle(cornerRadius: 4) + .frame(height: 20) + .offset(y: 21) + RoundedRectangle(cornerRadius: 4) + .frame(height: 20) + .offset(y: 42) + RoundedRectangle(cornerRadius: 4) + .frame(height: 20) + .offset(y: 63) + RoundedRectangle(cornerRadius: 4) + .frame(height: 20) + .offset(y: 84) + } + Spacer() + ZStack(alignment: .top) { + RoundedRectangle(cornerRadius: 4) + .foregroundColor(Color(red: 51/256, green: 51/256, blue: 51/256)) + RoundedRectangle(cornerRadius: 4) + .frame(height: 20) + } + } + }.frame(height: 210) + + Button(action: {}, label: { + HStack { + Image(systemName: "gearshape.fill") + Text("시간표 설정") + .fontWeight(.medium) + } + }) + .padding(.top, 18) + .padding(.horizontal, 25) + } + } + + + // MARK: - Header + VStack { + ZStack(alignment: .bottom) { + Color.black + HStack { + Spacer() + .frame(width: 20) + Spacer() + DayLabelView(day: .constant(.mon), isHighlighted: .constant(false)) + Spacer() + Spacer() + DayLabelView(day: .constant(.tue), isHighlighted: .constant(false)) + Spacer() + Spacer() + DayLabelView(day: .constant(.wed), isHighlighted: .constant(false)) + Spacer() + Spacer() + DayLabelView(day: .constant(.thu), isHighlighted: .constant(true)) + Spacer() + Spacer() + DayLabelView(day: .constant(.fri), isHighlighted: .constant(false)) + Spacer() + }.offset(y: -2) + } + .frame(height: 25) + .offset(y: self.scrollOffset < 0 ? -self.scrollOffset : 0) + Spacer() + } + + + } + .navigationTitle("23 가을") + } + } +} + +#Preview { + WeeklyTableView() +} diff --git a/ios/OTL Watch App/Subviews/DayLabelView.swift b/ios/OTL Watch App/Subviews/DayLabelView.swift new file mode 100644 index 00000000..ffb76a1f --- /dev/null +++ b/ios/OTL Watch App/Subviews/DayLabelView.swift @@ -0,0 +1,42 @@ +// +// DayLabelView.swift +// OTL Watch App +// +// Created by Soongyu Kwon on 11/9/23. +// Copyright © 2023 The Chromium Authors. All rights reserved. +// + +import SwiftUI + +enum DayType: String { + case sun = "일" + case mon = "월" + case tue = "화" + case wed = "수" + case thu = "목" + case fri = "금" + case sat = "토" +} + +struct DayLabelView: View { + @Binding var day: DayType + @Binding var isHighlighted: Bool + + var body: some View { + ZStack { + if isHighlighted { + RoundedRectangle(cornerRadius: 4) + .foregroundStyle(.accent) + } + Text(day.rawValue) + .fontWeight(.medium) + }.frame(width: 22, height: 20) + } +} + +#Preview("DayLabelView", traits: .sizeThatFitsLayout) { + VStack { + DayLabelView(day: .constant(.mon), isHighlighted: .constant(false)) + DayLabelView(day: .constant(.fri), isHighlighted: .constant(true)) + } +} diff --git a/ios/OTL Watch App/Subviews/TimelineLabelView.swift b/ios/OTL Watch App/Subviews/TimelineLabelView.swift new file mode 100644 index 00000000..9c85105a --- /dev/null +++ b/ios/OTL Watch App/Subviews/TimelineLabelView.swift @@ -0,0 +1,31 @@ +// +// TimelineLabelView.swift +// OTL Watch App +// +// Created by Soongyu Kwon on 11/9/23. +// Copyright © 2023 The Chromium Authors. All rights reserved. +// + +import SwiftUI + +struct TimelineLabelView: View { + var body: some View { + HStack { + VStack(alignment: .trailing) { + ForEach(4..<8) { number in + Spacer() + Text("\(number*3 > 12 ? number*3 - 12 : number*3)") + .fontWeight(.medium) + .foregroundStyle(.secondary) + .frame(height: 0) + } + Spacer() + }.frame(width: 18) + Spacer() + } + } +} + +#Preview { + TimelineLabelView() +} From 924eccbb84ea81263cd2a1261a38a1bf3be62c13 Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Thu, 9 Nov 2023 10:11:20 +0900 Subject: [PATCH 08/30] add: DailyTableView barebone --- ios/OTL Watch App/Pages/DailyTableView.swift | 58 +++++++++++++++++++ .../Subviews/HorizontalLine.swift | 22 +++++++ 2 files changed, 80 insertions(+) create mode 100644 ios/OTL Watch App/Pages/DailyTableView.swift create mode 100644 ios/OTL Watch App/Subviews/HorizontalLine.swift diff --git a/ios/OTL Watch App/Pages/DailyTableView.swift b/ios/OTL Watch App/Pages/DailyTableView.swift new file mode 100644 index 00000000..b98968e5 --- /dev/null +++ b/ios/OTL Watch App/Pages/DailyTableView.swift @@ -0,0 +1,58 @@ +// +// DailyTableView.swift +// OTL Watch App +// +// Created by Soongyu Kwon on 11/9/23. +// Copyright © 2023 The Chromium Authors. All rights reserved. +// + +import SwiftUI + +struct DailyTableView: View { + var body: some View { + NavigationStack { + ScrollView { + HStack { + VStack(alignment: .trailing) { + ForEach(3..<9) { number in + if number == 3 { + Spacer() + .frame(height: 50) + } + Text("\(number*3 > 12 ? number*3 - 12 : number*3)") + .fontWeight(.medium) + .foregroundStyle(.secondary) + .frame(height: 0) + if number != 8 { + Spacer() + } + } + }.frame(width: 18) + VStack { + ForEach(0..<33) { number in + if number % 2 == 0 { + HorizontalLine() + .stroke(style: StrokeStyle(lineWidth: 1)) + .frame(height: 1) + .foregroundStyle(Color.white.opacity(0.25)) + } else { + HorizontalLine() + .stroke(style: StrokeStyle(lineWidth: 1, dash: [2])) + .frame(height: 1) + .foregroundStyle(Color.white.opacity(0.25)) + } + if number != 32 { + Spacer() + } + } + } + }.frame(height: 801) + } + .navigationTitle("목") + } + } +} + +#Preview { + DailyTableView() +} diff --git a/ios/OTL Watch App/Subviews/HorizontalLine.swift b/ios/OTL Watch App/Subviews/HorizontalLine.swift new file mode 100644 index 00000000..7728ee24 --- /dev/null +++ b/ios/OTL Watch App/Subviews/HorizontalLine.swift @@ -0,0 +1,22 @@ +// +// HorizontalLine.swift +// OTL Watch App +// +// Created by Soongyu Kwon on 11/9/23. +// Copyright © 2023 The Chromium Authors. All rights reserved. +// + +import SwiftUI + +struct HorizontalLine: Shape { + func path(in rect: CGRect) -> Path { + var path = Path() + path.move(to: CGPoint(x: 0, y: 0)) + path.addLine(to: CGPoint(x: rect.width, y: 0)) + return path + } +} + +#Preview { + HorizontalLine() +} From d14a11cd6bba4bb6d22d77e0de5bc4d3f614ec09 Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Fri, 17 Nov 2023 13:28:00 +0900 Subject: [PATCH 09/30] add: OTLAPI to watchOS --- ios/OTL Watch App/OTLAPI.swift | 261 +++++++++++++++++++++++++++++++++ 1 file changed, 261 insertions(+) create mode 100644 ios/OTL Watch App/OTLAPI.swift diff --git a/ios/OTL Watch App/OTLAPI.swift b/ios/OTL Watch App/OTLAPI.swift new file mode 100644 index 00000000..268ff1d4 --- /dev/null +++ b/ios/OTL Watch App/OTLAPI.swift @@ -0,0 +1,261 @@ +// +// OTLAPI.swift +// OTL Watch App +// +// Created by Soongyu Kwon on 11/16/23. +// Copyright © 2023 The Chromium Authors. All rights reserved. +// + +import Foundation +import Alamofire + +struct urls { + static let BASE_URL = "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" + + +} + +struct SemesterElement: Hashable, Codable { + var year: Int + var semester: Int +} + +struct Timetable: Codable, Hashable { + let id: Int + var lectures: [Lecture] +} + +struct Lecture: Codable, Hashable { + let id: Int + let title: String + let title_en: String + let course: Int + let old_code: String + let class_no: String + let year: Int + let semester: Int + let code: String + let department: Int + let department_code: String + let department_name: String + let department_name_en: String + let type: String + let type_en: String + let limit: Int + let num_people: Int + let is_english: Bool + let credit: Int + let credit_au: Int + let common_title: String + let common_title_en: String + let class_title: String + let class_title_en: String + let review_total_weight: Double + let grade: Double + let speech: Double + let professors: [Professor] + let classtimes: [Classtime] + let examtimes: [Examtime] +} + +struct Professor: Codable, Hashable { + let name: String + let name_en: String + let professor_id: Int + let review_total_weight: Double +} + +struct Classtime: Codable, Hashable { + let building_code: String + let classroom: String + let classroom_en: String + let classroom_short: String + let classroom_short_en: String + let room_name: String + let day: Int + let begin: Int + let end: Int +} + +struct Examtime: Codable, Hashable { + let str: String + let str_en: String + let day: Int + let begin: Int + let end: Int +} + +struct Semester: Codable, Hashable { + let year: Int + let semester: Int + let beginning: Date? + let end: Date? + let courseDesciptionSubmission: Date? + let courseRegistrationPeriodStart: Date? + let courseRegistrationPeriodEnd: Date? + let courseAddDropPeriodEnd: Date? + let courseDropDeadline: Date? + let courseEvaluationDeadline: Date? + let gradePosting: Date? +} + +struct UserInfo: Codable, Hashable { + let id: Int + let email: String + let student_id: String + let firstName: String + let lastName: String + let department: Department? + let majors: [Department] + let departments: [Department] + let favorite_departments: [Department] + let review_writable_lectures: [Lecture] + let my_timetable_lectures: [Lecture] +} + +struct Department: Codable, Hashable { + let id: Int + let name: String + let name_en: String + let code: String +} + +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("Error: \(error)") + completion(.failure(error)) + } + case .failure(let error): + print("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 ("Error \(error)") + completion(.failure(error)) + } + case .failure(let error): + print("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("Error: \(error)") + completion(.failure(error)) + } + case .failure(let error): + print("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("Error: \(error)") + completion(.failure(error)) + } + case .failure(let error): + print("Error: \(error)") + completion(.failure(error)) + } + } + } +} + From e958f726153c3ad5832051e2612167170981045e Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Fri, 17 Nov 2023 13:28:51 +0900 Subject: [PATCH 10/30] add: WeeklyDayView --- ios/OTL Watch App/Pages/WeeklyTableView.swift | 62 ++----------------- .../Subviews/WeeklyDayView.swift | 22 +++++++ 2 files changed, 27 insertions(+), 57 deletions(-) create mode 100644 ios/OTL Watch App/Subviews/WeeklyDayView.swift diff --git a/ios/OTL Watch App/Pages/WeeklyTableView.swift b/ios/OTL Watch App/Pages/WeeklyTableView.swift index 7e10e6c9..cc8cde0a 100644 --- a/ios/OTL Watch App/Pages/WeeklyTableView.swift +++ b/ios/OTL Watch App/Pages/WeeklyTableView.swift @@ -24,67 +24,15 @@ struct WeeklyTableView: View { HStack { Spacer() .frame(width: 20) - ZStack(alignment: .top) { - RoundedRectangle(cornerRadius: 4) - .foregroundColor(Color(red: 51/256, green: 51/256, blue: 51/256)) - RoundedRectangle(cornerRadius: 4) - .frame(height: 20) - } + WeeklyDayView() Spacer() - ZStack(alignment: .top) { - RoundedRectangle(cornerRadius: 4) - .foregroundColor(Color(red: 51/256, green: 51/256, blue: 51/256)) - RoundedRectangle(cornerRadius: 4) - .frame(height: 20) - RoundedRectangle(cornerRadius: 4) - .frame(height: 20) - .offset(y: 21) - RoundedRectangle(cornerRadius: 4) - .frame(height: 20) - .offset(y: 42) - RoundedRectangle(cornerRadius: 4) - .frame(height: 20) - .offset(y: 63) - RoundedRectangle(cornerRadius: 4) - .frame(height: 20) - .offset(y: 84) - } + WeeklyDayView() Spacer() - ZStack(alignment: .top) { - RoundedRectangle(cornerRadius: 4) - .foregroundColor(Color(red: 51/256, green: 51/256, blue: 51/256)) - RoundedRectangle(cornerRadius: 4) - .frame(height: 20) - RoundedRectangle(cornerRadius: 4) - .frame(height: 20) - .offset(y: 105) - } + WeeklyDayView() Spacer() - ZStack(alignment: .top) { - RoundedRectangle(cornerRadius: 4) - .foregroundColor(Color(red: 51/256, green: 51/256, blue: 51/256)) - RoundedRectangle(cornerRadius: 4) - .frame(height: 20) - RoundedRectangle(cornerRadius: 4) - .frame(height: 20) - .offset(y: 21) - RoundedRectangle(cornerRadius: 4) - .frame(height: 20) - .offset(y: 42) - RoundedRectangle(cornerRadius: 4) - .frame(height: 20) - .offset(y: 63) - RoundedRectangle(cornerRadius: 4) - .frame(height: 20) - .offset(y: 84) - } + WeeklyDayView() Spacer() - ZStack(alignment: .top) { - RoundedRectangle(cornerRadius: 4) - .foregroundColor(Color(red: 51/256, green: 51/256, blue: 51/256)) - RoundedRectangle(cornerRadius: 4) - .frame(height: 20) - } + WeeklyDayView() } }.frame(height: 210) diff --git a/ios/OTL Watch App/Subviews/WeeklyDayView.swift b/ios/OTL Watch App/Subviews/WeeklyDayView.swift new file mode 100644 index 00000000..bbef2f1a --- /dev/null +++ b/ios/OTL Watch App/Subviews/WeeklyDayView.swift @@ -0,0 +1,22 @@ +// +// WeeklyDayView.swift +// OTL Watch App +// +// Created by Soongyu Kwon on 11/16/23. +// Copyright © 2023 The Chromium Authors. All rights reserved. +// + +import SwiftUI + +struct WeeklyDayView: View { + var body: some View { + ZStack(alignment: .top) { + RoundedRectangle(cornerRadius: 4) + .foregroundColor(Color(red: 51/256, green: 51/256, blue: 51/256)) + } + } +} + +#Preview { + WeeklyDayView() +} From 561201ae1e0b82892ad8ce847d32ad0d3dba6a42 Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Fri, 17 Nov 2023 13:29:04 +0900 Subject: [PATCH 11/30] add: SettingsView --- ios/OTL Watch App/Pages/SettingsView.swift | 130 +++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 ios/OTL Watch App/Pages/SettingsView.swift diff --git a/ios/OTL Watch App/Pages/SettingsView.swift b/ios/OTL Watch App/Pages/SettingsView.swift new file mode 100644 index 00000000..f6d3f4df --- /dev/null +++ b/ios/OTL Watch App/Pages/SettingsView.swift @@ -0,0 +1,130 @@ +// +// SettingsView.swift +// OTL Watch App +// +// Created by Soongyu Kwon on 11/16/23. +// Copyright © 2023 The Chromium Authors. All rights reserved. +// + +import SwiftUI + +struct SettingsView: View { + @Binding var selectedSemester: SemesterElement? + @Binding var selectedTimetable: Int + + @ObservedObject var viewModel = WatchViewModel() + @AppStorage("sessionID") var sessionID: String = "" + @AppStorage("userID") var userID: String = "" + + @State private var availableSemesters: [SemesterElement] = [SemesterElement]() + @State private var availableTimetables: Int = 1 + + var body: some View { + NavigationStack { + Group { + Form { + Picker("학기 선택", selection: self.$selectedSemester) { + ForEach(self.availableSemesters, id: \.self) { semester in + Text("\(String(semester.year)) \(getSemesterString(semester.semester))") + .tag(semester as SemesterElement?) + } + } + .onChange(of: self.selectedSemester) { + let encoder = JSONEncoder() + let defaults = UserDefaults.standard + if let encoded = try? encoder.encode(self.selectedSemester) { + defaults.set(encoded, forKey: "selectedSemester") + } + fetchTimetables() + } + Picker("시간표 선택", selection: self.$selectedTimetable) { + Text("내 시간표") + .tag(0) + ForEach(0.. String { + switch semester { + case 1: + return "봄" + case 2: + return "여름" + case 3: + return "가을" + case 4: + return "겨울" + default: + return "알수없음" + } + } +} + +#Preview { + SettingsView(selectedSemester: .constant(SemesterElement(year: 2023, semester: 3)), selectedTimetable: .constant(0)) +} From d1319b5ddcd8eaab2104d022cbf15ef9a5609308 Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Fri, 17 Nov 2023 16:00:22 +0900 Subject: [PATCH 12/30] add: more functions to OTLAPI --- ios/OTL Watch App/OTLAPI.swift | 67 ++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/ios/OTL Watch App/OTLAPI.swift b/ios/OTL Watch App/OTLAPI.swift index 268ff1d4..b6137cb1 100644 --- a/ios/OTL Watch App/OTLAPI.swift +++ b/ios/OTL Watch App/OTLAPI.swift @@ -8,6 +8,7 @@ import Foundation import Alamofire +import SwiftUI struct urls { static let BASE_URL = "https://otl.sparcs.org/" @@ -22,6 +23,49 @@ struct urls { } +enum Days: Int { + case mon = 0 + case tue = 1 + case wed = 2 + case thu = 3 + case fri = 4 + case sat = 5 + case sun = 6 +} + +struct LectureElement: Identifiable, Hashable { + let id: Int + let title: String + let title_en: String + let course: Int + let old_code: String + let class_no: String + let year: Int + let semester: Int + let code: String + let department: Int + let department_code: String + let department_name: String + let department_name_en: String + let type: String + let type_en: String + let limit: Int + let num_people: Int + let is_english: Bool + let credit: Int + let credit_au: Int + let common_title: String + let common_title_en: String + let class_title: String + let class_title_en: String + let review_total_weight: Double + let grade: Double + let speech: Double + let professors: [Professor] + let classtime: Classtime + let examtimes: [Examtime] +} + struct SemesterElement: Hashable, Codable { var year: Int var semester: Int @@ -127,6 +171,29 @@ struct Department: Codable, Hashable { let code: String } +func getColourForCourse(course: Int) -> Color { + let colours = [ + [242.0, 206.0, 206.0], + [244.0, 179.0, 174.0], + [242.0, 188.0, 160.0], + [240.0, 211.0, 171.0], + [241.0, 225.0, 169.0], + [244.0, 242.0, 179.0], + [219.0, 244.0, 190.0], + [190.0, 237.0, 215.0], + [183.0, 226.0, 222.0], + [201.0, 234.0, 244.0], + [180.0, 211.0, 237.0], + [185.0, 197.0, 237.0], + [204.0, 198.0, 237.0], + [216.0, 193.0, 240.0], + [235.0, 202.0, 239.0], + [244.0, 186.0, 219.0] + ] + + 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 = [ From 096457db48a831181465cfcc8e398f820d133adc Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Fri, 17 Nov 2023 16:01:41 +0900 Subject: [PATCH 13/30] feat: daily view! --- ios/OTL Watch App/Pages/DailyTableView.swift | 7 +- ios/OTL Watch App/Pages/WeeklyTableView.swift | 145 +++++++++++++++--- ios/OTL Watch App/Subviews/DayLabelView.swift | 52 ++++++- .../Subviews/WeeklyDayView.swift | 27 +++- 4 files changed, 204 insertions(+), 27 deletions(-) diff --git a/ios/OTL Watch App/Pages/DailyTableView.swift b/ios/OTL Watch App/Pages/DailyTableView.swift index b98968e5..5b6cf6d3 100644 --- a/ios/OTL Watch App/Pages/DailyTableView.swift +++ b/ios/OTL Watch App/Pages/DailyTableView.swift @@ -9,6 +9,9 @@ import SwiftUI struct DailyTableView: View { + @Binding var lectures: [LectureElement] + @Binding var day: DayType + var body: some View { NavigationStack { ScrollView { @@ -48,11 +51,11 @@ struct DailyTableView: View { } }.frame(height: 801) } - .navigationTitle("목") + .navigationTitle("\(self.day.rawValue)요일") } } } #Preview { - DailyTableView() + DailyTableView(lectures: .constant([LectureElement]()), day: .constant(.mon)) } diff --git a/ios/OTL Watch App/Pages/WeeklyTableView.swift b/ios/OTL Watch App/Pages/WeeklyTableView.swift index cc8cde0a..3aedbbd6 100644 --- a/ios/OTL Watch App/Pages/WeeklyTableView.swift +++ b/ios/OTL Watch App/Pages/WeeklyTableView.swift @@ -9,7 +9,15 @@ import SwiftUI struct WeeklyTableView: View { + @ObservedObject var viewModel = WatchViewModel() + @AppStorage("sessionID") var sessionID: String = "" + @AppStorage("userID") var userID: String = "" + @State private var scrollOffset: CGFloat = CGFloat.zero + @State private var showsSettingsView = false + @State private var selectedSemester: SemesterElement? = nil + @State private var selectedTimetable: Int = 0 + @State private var timetable: Timetable = Timetable(id: 0, lectures: []) var body: some View { NavigationStack { @@ -24,19 +32,22 @@ struct WeeklyTableView: View { HStack { Spacer() .frame(width: 20) - WeeklyDayView() + WeeklyDayView(lectures: .constant(self.getLectureElements(atDay: .mon)), day: .constant(.mon)) + Spacer() + WeeklyDayView(lectures: .constant(self.getLectureElements(atDay: .tue)), day: .constant(.tue)) Spacer() - WeeklyDayView() + WeeklyDayView(lectures: .constant(self.getLectureElements(atDay: .wed)), day: .constant(.wed)) Spacer() - WeeklyDayView() + WeeklyDayView(lectures: .constant(self.getLectureElements(atDay: .thu)), day: .constant(.thu)) Spacer() - WeeklyDayView() + WeeklyDayView(lectures: .constant(self.getLectureElements(atDay: .fri)), day: .constant(.fri)) Spacer() - WeeklyDayView() } }.frame(height: 210) - Button(action: {}, label: { + Button(action: { + self.showsSettingsView.toggle() + }, label: { HStack { Image(systemName: "gearshape.fill") Text("시간표 설정") @@ -55,21 +66,16 @@ struct WeeklyTableView: View { Color.black HStack { Spacer() - .frame(width: 20) - Spacer() - DayLabelView(day: .constant(.mon), isHighlighted: .constant(false)) - Spacer() - Spacer() - DayLabelView(day: .constant(.tue), isHighlighted: .constant(false)) + .frame(width: 22) + DayLabelView(day: .constant(.mon)) Spacer() + DayLabelView(day: .constant(.tue)) Spacer() - DayLabelView(day: .constant(.wed), isHighlighted: .constant(false)) + DayLabelView(day: .constant(.wed)) Spacer() + DayLabelView(day: .constant(.thu)) Spacer() - DayLabelView(day: .constant(.thu), isHighlighted: .constant(true)) - Spacer() - Spacer() - DayLabelView(day: .constant(.fri), isHighlighted: .constant(false)) + DayLabelView(day: .constant(.fri)) Spacer() }.offset(y: -2) } @@ -80,7 +86,110 @@ struct WeeklyTableView: View { } - .navigationTitle("23 가을") + .navigationTitle("\((self.selectedSemester?.year ?? 2023) - 2000) \(getSemesterString(self.selectedSemester?.semester ?? 1))") + .navigationDestination(isPresented: self.$showsSettingsView) { + SettingsView(selectedSemester: self.$selectedSemester, selectedTimetable: self.$selectedTimetable) + } + .onChange(of: self.selectedSemester) { + fetchTimetable() + } + .onChange(of: self.selectedTimetable) { + fetchTimetable() + } + } + .onAppear { + fetchData() + fetchTimetable() + } + } + + func fetchData() { + let defaults = UserDefaults.standard + if let semesterData = defaults.object(forKey: "selectedSemester") as? Data { + let decoder = JSONDecoder() + if let semester = try? decoder.decode(SemesterElement.self, from: semesterData) { + self.selectedSemester = semester + } + } + self.selectedTimetable = defaults.integer(forKey: "selectedTimetable") + + if (self.selectedSemester == nil) { + OTLAPI().getActualSemesters(sessionID: self.sessionID, userID: self.userID) { results in + switch results { + case .success(let data): + self.selectedSemester = data.first + case .failure(_): + print("failed") + } + } + } + } + + func fetchTimetable() { + let defaults = UserDefaults.standard + if let timetableData = defaults.object(forKey: "timetable") as? Data { + let decoder = JSONDecoder() + if let timetable = try? decoder.decode(Timetable.self, from: timetableData) { + self.timetable = timetable + } + } + if (self.selectedSemester != nil) { + OTLAPI().getActualTimetable(sessionID: self.sessionID, 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 + switch results { + case .success(let timetableData): + for timetable in timetableData { + table.append(timetable) + } + var index = self.selectedTimetable + if table.count-1 < self.selectedTimetable { + index = 0 + } + self.timetable = table[index] + let encoder = JSONEncoder() + if let encoded = try? encoder.encode(table[index]) { + defaults.set(encoded, forKey: "timetable") + } + case .failure(_): + print("failed") + } + } + case .failure(_): + print("failed") + } + } + } + } + + func getLectureElements(atDay: Days) -> [LectureElement] { + var table = [LectureElement]() + for lecture in self.timetable.lectures { + for classtime in lecture.classtimes { + if atDay.rawValue == classtime.day { + table.append(LectureElement(id: lecture.id, title: lecture.title, title_en: lecture.title_en, course: lecture.course, old_code: lecture.old_code, class_no: lecture.class_no, year: lecture.year, semester: lecture.semester, code: lecture.code, department: lecture.department, department_code: lecture.department_code, department_name: lecture.department_name, department_name_en: lecture.department_name_en, type: lecture.type, type_en: lecture.type_en, limit: lecture.limit, num_people: lecture.num_people, is_english: lecture.is_english, credit: lecture.credit, credit_au: lecture.credit_au, common_title: lecture.common_title, common_title_en: lecture.common_title_en, class_title: lecture.class_title, class_title_en: lecture.class_title_en, review_total_weight: lecture.review_total_weight, grade: lecture.grade, speech: lecture.speech, professors: lecture.professors, classtime: classtime, examtimes: lecture.examtimes)) + } + } + } + + return table + } + + func getSemesterString(_ semester: Int) -> String { + switch semester { + case 1: + return "봄" + case 2: + return "여름" + case 3: + return "가을" + case 4: + return "겨울" + default: + return "알수없음" } } } diff --git a/ios/OTL Watch App/Subviews/DayLabelView.swift b/ios/OTL Watch App/Subviews/DayLabelView.swift index ffb76a1f..967ddcdd 100644 --- a/ios/OTL Watch App/Subviews/DayLabelView.swift +++ b/ios/OTL Watch App/Subviews/DayLabelView.swift @@ -20,7 +20,8 @@ enum DayType: String { struct DayLabelView: View { @Binding var day: DayType - @Binding var isHighlighted: Bool + + @State private var isHighlighted: Bool = false var body: some View { ZStack { @@ -31,12 +32,57 @@ struct DayLabelView: View { Text(day.rawValue) .fontWeight(.medium) }.frame(width: 22, height: 20) + .onAppear { + if getDayWithWeekDay(weekday: Calendar.current.component(.weekday, from: Date())) == convertDayType(toDays: self.day).rawValue { + self.isHighlighted = true + } + } + } + + func convertDayType(toDays: DayType) -> Days { + switch toDays { + case .mon: + return .mon + case .tue: + return .tue + case .wed: + return .wed + case .thu: + return .thu + case .fri: + return .fri + case .sat: + return .sat + case .sun: + return .sun + } + } + + func getDayWithWeekDay(weekday: Int) -> Int { + switch weekday { + case 1: + return 6 + case 2: + return 0 + case 3: + return 1 + case 4: + return 2 + case 5: + return 3 + case 6: + return 4 + case 7: + return 5 + default: + return 0 + } } } #Preview("DayLabelView", traits: .sizeThatFitsLayout) { VStack { - DayLabelView(day: .constant(.mon), isHighlighted: .constant(false)) - DayLabelView(day: .constant(.fri), isHighlighted: .constant(true)) + DayLabelView(day: .constant(.mon)) + DayLabelView(day: .constant(.fri)) } } diff --git a/ios/OTL Watch App/Subviews/WeeklyDayView.swift b/ios/OTL Watch App/Subviews/WeeklyDayView.swift index bbef2f1a..4270e17f 100644 --- a/ios/OTL Watch App/Subviews/WeeklyDayView.swift +++ b/ios/OTL Watch App/Subviews/WeeklyDayView.swift @@ -9,14 +9,33 @@ import SwiftUI struct WeeklyDayView: View { + @Binding var lectures: [LectureElement] + @Binding var day: DayType + + @State private var showsDailyTableView = false + var body: some View { - ZStack(alignment: .top) { - RoundedRectangle(cornerRadius: 4) - .foregroundColor(Color(red: 51/256, green: 51/256, blue: 51/256)) + NavigationStack { + ZStack(alignment: .top) { + RoundedRectangle(cornerRadius: 4) + .foregroundColor(Color(red: 51/256, green: 51/256, blue: 51/256)) + ForEach(self.lectures) { lecture in + RoundedRectangle(cornerRadius: 2) + .foregroundStyle(getColourForCourse(course: lecture.course)) + .frame(height: Double(lecture.classtime.end - lecture.classtime.begin)/60*14-1) + .offset(y: CGFloat(Double(lecture.classtime.begin - 540)/60*14)) + } + } + .onTapGesture { + self.showsDailyTableView.toggle() + } + .navigationDestination(isPresented: self.$showsDailyTableView) { + DailyTableView(lectures: self.$lectures, day: self.$day) + } } } } #Preview { - WeeklyDayView() + WeeklyDayView(lectures: .constant([LectureElement]()), day: .constant(.mon)) } From fd87ec1ddd51e0d09185af10c1b224e54b50bfd4 Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Fri, 17 Nov 2023 16:01:55 +0900 Subject: [PATCH 14/30] add: DailyDayView --- ios/OTL Watch App/Pages/DailyTableView.swift | 37 +++++++++++-------- ios/OTL Watch App/Subviews/DailyDayView.swift | 23 ++++++++++++ 2 files changed, 45 insertions(+), 15 deletions(-) create mode 100644 ios/OTL Watch App/Subviews/DailyDayView.swift diff --git a/ios/OTL Watch App/Pages/DailyTableView.swift b/ios/OTL Watch App/Pages/DailyTableView.swift index 5b6cf6d3..60c5c5cb 100644 --- a/ios/OTL Watch App/Pages/DailyTableView.swift +++ b/ios/OTL Watch App/Pages/DailyTableView.swift @@ -31,23 +31,30 @@ struct DailyTableView: View { } } }.frame(width: 18) - VStack { - ForEach(0..<33) { number in - if number % 2 == 0 { - HorizontalLine() - .stroke(style: StrokeStyle(lineWidth: 1)) - .frame(height: 1) - .foregroundStyle(Color.white.opacity(0.25)) - } else { - HorizontalLine() - .stroke(style: StrokeStyle(lineWidth: 1, dash: [2])) - .frame(height: 1) - .foregroundStyle(Color.white.opacity(0.25)) - } - if number != 32 { - Spacer() + ZStack(alignment: .top) { + VStack { + ForEach(0..<33) { number in + if number % 2 == 0 { + HorizontalLine() + .stroke(style: StrokeStyle(lineWidth: 1)) + .frame(height: 1) + .foregroundStyle(Color.white.opacity(0.25)) + } else { + HorizontalLine() + .stroke(style: StrokeStyle(lineWidth: 1, dash: [2])) + .frame(height: 1) + .foregroundStyle(Color.white.opacity(0.25)) + } + if number != 32 { + Spacer() + } } } + ForEach(self.lectures) { lecture in + DailyDayView(lecture: .constant(lecture)) + .frame(height: Double(lecture.classtime.end - lecture.classtime.begin)/30*24+(Double(lecture.classtime.end - lecture.classtime.begin)/30-3)-1) + .offset(y: 51 + Double(lecture.classtime.begin-540)/60*50 + 1) + } } }.frame(height: 801) } diff --git a/ios/OTL Watch App/Subviews/DailyDayView.swift b/ios/OTL Watch App/Subviews/DailyDayView.swift new file mode 100644 index 00000000..6807f05b --- /dev/null +++ b/ios/OTL Watch App/Subviews/DailyDayView.swift @@ -0,0 +1,23 @@ +// +// DailyDayView.swift +// OTL Watch App +// +// Created by Soongyu Kwon on 11/17/23. +// Copyright © 2023 The Chromium Authors. All rights reserved. +// + +import SwiftUI + +struct DailyDayView: View { + @Binding var lecture: LectureElement + + var body: some View { + ZStack(alignment: .topLeading) { + RoundedRectangle(cornerRadius: 2) + .foregroundStyle(getColourForCourse(course: lecture.course)) + Text(lecture.title) + .foregroundStyle(.black) + .padding() + } + } +} From 2f6046b0bec67f5128cb793f5fa3860b5f49263b Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Tue, 21 Nov 2023 13:26:21 +0900 Subject: [PATCH 15/30] fix: point proper view --- ios/OTL Watch App/OTLApp.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/OTL Watch App/OTLApp.swift b/ios/OTL Watch App/OTLApp.swift index ab04ba43..17027900 100644 --- a/ios/OTL Watch App/OTLApp.swift +++ b/ios/OTL Watch App/OTLApp.swift @@ -12,7 +12,7 @@ import SwiftUI struct OTL_Watch_AppApp: App { var body: some Scene { WindowGroup { - ContentView() + WeeklyTableView() } } } From 0b1033da47947278b4f24ee257c77cace2fc6fa3 Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Thu, 23 Nov 2023 16:12:18 +0900 Subject: [PATCH 16/30] add: LectureDetailView --- ios/OTL Watch App/Pages/DailyTableView.swift | 2 +- .../Pages/LectureDetailView.swift | 62 +++++++++++++++++++ ios/OTL Watch App/Subviews/DailyDayView.swift | 22 +++++-- .../Subviews/WeeklyDayView.swift | 4 -- 4 files changed, 79 insertions(+), 11 deletions(-) create mode 100644 ios/OTL Watch App/Pages/LectureDetailView.swift diff --git a/ios/OTL Watch App/Pages/DailyTableView.swift b/ios/OTL Watch App/Pages/DailyTableView.swift index 60c5c5cb..b9a08cd0 100644 --- a/ios/OTL Watch App/Pages/DailyTableView.swift +++ b/ios/OTL Watch App/Pages/DailyTableView.swift @@ -51,7 +51,7 @@ struct DailyTableView: View { } } ForEach(self.lectures) { lecture in - DailyDayView(lecture: .constant(lecture)) + DailyDayView(lecture: .constant(lecture), day: self.$day) .frame(height: Double(lecture.classtime.end - lecture.classtime.begin)/30*24+(Double(lecture.classtime.end - lecture.classtime.begin)/30-3)-1) .offset(y: 51 + Double(lecture.classtime.begin-540)/60*50 + 1) } diff --git a/ios/OTL Watch App/Pages/LectureDetailView.swift b/ios/OTL Watch App/Pages/LectureDetailView.swift new file mode 100644 index 00000000..91fdc464 --- /dev/null +++ b/ios/OTL Watch App/Pages/LectureDetailView.swift @@ -0,0 +1,62 @@ +// +// LectureDetailView.swift +// OTL Watch App +// +// Created by Soongyu Kwon on 11/21/23. +// Copyright © 2023 The Chromium Authors. All rights reserved. +// + +import SwiftUI + +extension Color { + func adjust(hue: CGFloat = 0, saturation: CGFloat = 0, brightness: CGFloat = 0, opacity: CGFloat = 1) -> Color { + let color = UIColor(self) + var currentHue: CGFloat = 0 + var currentSaturation: CGFloat = 0 + var currentBrigthness: CGFloat = 0 + var currentOpacity: CGFloat = 0 + + if color.getHue(¤tHue, saturation: ¤tSaturation, brightness: ¤tBrigthness, alpha: ¤tOpacity) { + return Color(hue: currentHue + hue, saturation: currentSaturation + saturation, brightness: currentBrigthness + brightness, opacity: currentOpacity + opacity) + } + return self + } +} + +struct LectureDetailView: View { + @Binding var lecture: LectureElement + @Binding var day: DayType + + var body: some View { + NavigationStack { + ZStack(alignment: .topLeading) { + Rectangle() + .ignoresSafeArea() + .foregroundStyle(LinearGradient(colors: [getColourForCourse(course: lecture.course).adjust(brightness: -0.15), getColourForCourse(course: lecture.course).adjust(brightness: -0.75)], startPoint: .top, endPoint: .bottom)) + VStack(alignment: .leading) { + VStack(alignment: .leading) { + Text("\(self.day.rawValue)요일 \(lecture.classtime.begin/60):\(lecture.classtime.begin%60)-\(lecture.classtime.end/60):\(lecture.classtime.end%60)") + .font(.system(size: 15)) + .foregroundStyle(getColourForCourse(course: lecture.course).adjust(brightness: 0.5)) + HStack(alignment: .top) { + Circle() + .frame(width: 12, height: 12) + .foregroundStyle(Color.accentColor) + .offset(y: 7) + Text(lecture.title) + .font(.title3) + .fontWeight(.bold) + } + } + Spacer() + VStack(alignment: .leading) { + Text(lecture.classtime.classroom) + .font(.system(size: 13)) + Text("\(lecture.professors[0].name) 교수님") + .font(.system(size: 13)) + } + }.padding() + } + } + } +} diff --git a/ios/OTL Watch App/Subviews/DailyDayView.swift b/ios/OTL Watch App/Subviews/DailyDayView.swift index 6807f05b..6faa0391 100644 --- a/ios/OTL Watch App/Subviews/DailyDayView.swift +++ b/ios/OTL Watch App/Subviews/DailyDayView.swift @@ -10,14 +10,24 @@ import SwiftUI struct DailyDayView: View { @Binding var lecture: LectureElement + @Binding var day: DayType + + @State private var showsDetailView = false var body: some View { - ZStack(alignment: .topLeading) { - RoundedRectangle(cornerRadius: 2) - .foregroundStyle(getColourForCourse(course: lecture.course)) - Text(lecture.title) - .foregroundStyle(.black) - .padding() + NavigationStack { + ZStack(alignment: .topLeading) { + RoundedRectangle(cornerRadius: 2) + .foregroundStyle(getColourForCourse(course: lecture.course)) + Text(lecture.title) + .foregroundStyle(.black) + .padding() + }.onTapGesture { + self.showsDetailView.toggle() + } + .navigationDestination(isPresented: self.$showsDetailView) { + LectureDetailView(lecture: self.$lecture, day: self.$day) + } } } } diff --git a/ios/OTL Watch App/Subviews/WeeklyDayView.swift b/ios/OTL Watch App/Subviews/WeeklyDayView.swift index 4270e17f..c8091a17 100644 --- a/ios/OTL Watch App/Subviews/WeeklyDayView.swift +++ b/ios/OTL Watch App/Subviews/WeeklyDayView.swift @@ -35,7 +35,3 @@ struct WeeklyDayView: View { } } } - -#Preview { - WeeklyDayView(lectures: .constant([LectureElement]()), day: .constant(.mon)) -} From c01848ffe292ee5445015b3a95025d4f83c6418b Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Thu, 23 Nov 2023 16:55:46 +0900 Subject: [PATCH 17/30] fix: minor issues --- .../Pages/LectureDetailView.swift | 43 +++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/ios/OTL Watch App/Pages/LectureDetailView.swift b/ios/OTL Watch App/Pages/LectureDetailView.swift index 91fdc464..78480d5f 100644 --- a/ios/OTL Watch App/Pages/LectureDetailView.swift +++ b/ios/OTL Watch App/Pages/LectureDetailView.swift @@ -8,6 +8,30 @@ import SwiftUI + +extension UIColor { + + func lighter(by percentage: CGFloat = 30.0) -> UIColor? { + return self.adjust(by: abs(percentage) ) + } + + func darker(by percentage: CGFloat = 30.0) -> UIColor? { + return self.adjust(by: -1 * abs(percentage) ) + } + + func adjust(by percentage: CGFloat = 30.0) -> UIColor? { + var red: CGFloat = 0, green: CGFloat = 0, blue: CGFloat = 0, alpha: CGFloat = 0 + if self.getRed(&red, green: &green, blue: &blue, alpha: &alpha) { + return UIColor(red: min(red + percentage/100, 1.0), + green: min(green + percentage/100, 1.0), + blue: min(blue + percentage/100, 1.0), + alpha: alpha) + } else { + return nil + } + } +} + extension Color { func adjust(hue: CGFloat = 0, saturation: CGFloat = 0, brightness: CGFloat = 0, opacity: CGFloat = 1) -> Color { let color = UIColor(self) @@ -21,6 +45,18 @@ extension Color { } return self } + + func lighter(by percentage: CGFloat = 30.0) -> Color { + let color = UIColor(self) + + return Color(uiColor: color.lighter(by: percentage)!) + } + + func darker(by percentage: CGFloat = 30.0) -> Color { + let color = UIColor(self) + + return Color(uiColor: color.darker(by: percentage)!) + } } struct LectureDetailView: View { @@ -32,16 +68,16 @@ struct LectureDetailView: View { ZStack(alignment: .topLeading) { Rectangle() .ignoresSafeArea() - .foregroundStyle(LinearGradient(colors: [getColourForCourse(course: lecture.course).adjust(brightness: -0.15), getColourForCourse(course: lecture.course).adjust(brightness: -0.75)], startPoint: .top, endPoint: .bottom)) + .foregroundStyle(LinearGradient(colors: [getColourForCourse(course: lecture.course).darker(by: 40), getColourForCourse(course: lecture.course).adjust(brightness: -0.8)], startPoint: .top, endPoint: .bottom)) VStack(alignment: .leading) { VStack(alignment: .leading) { - Text("\(self.day.rawValue)요일 \(lecture.classtime.begin/60):\(lecture.classtime.begin%60)-\(lecture.classtime.end/60):\(lecture.classtime.end%60)") + Text(String(format: "%@요일 %02d:%02d-%02d:%02d", self.day.rawValue, lecture.classtime.begin/60, lecture.classtime.begin%60, lecture.classtime.end/60, lecture.classtime.end%60)) .font(.system(size: 15)) .foregroundStyle(getColourForCourse(course: lecture.course).adjust(brightness: 0.5)) HStack(alignment: .top) { Circle() .frame(width: 12, height: 12) - .foregroundStyle(Color.accentColor) + .foregroundStyle(getColourForCourse(course: lecture.course)) .offset(y: 7) Text(lecture.title) .font(.title3) @@ -55,6 +91,7 @@ struct LectureDetailView: View { Text("\(lecture.professors[0].name) 교수님") .font(.system(size: 13)) } + .offset(y: 15) }.padding() } } From 541bdca75bf94044b303810ac2d5db0eeac8d92a Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Thu, 23 Nov 2023 17:12:55 +0900 Subject: [PATCH 18/30] fix: WeeklyTableView padding --- ios/OTL Watch App/Pages/WeeklyTableView.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ios/OTL Watch App/Pages/WeeklyTableView.swift b/ios/OTL Watch App/Pages/WeeklyTableView.swift index 3aedbbd6..5a876f70 100644 --- a/ios/OTL Watch App/Pages/WeeklyTableView.swift +++ b/ios/OTL Watch App/Pages/WeeklyTableView.swift @@ -25,7 +25,7 @@ struct WeeklyTableView: View { // MARK: - Contents VStack { Spacer() - .frame(height: 25) + .frame(height: 28) ObservableScrollView(scrollOffset: self.$scrollOffset) { ZStack { TimelineLabelView() @@ -66,7 +66,7 @@ struct WeeklyTableView: View { Color.black HStack { Spacer() - .frame(width: 22) + .frame(width: 25) DayLabelView(day: .constant(.mon)) Spacer() DayLabelView(day: .constant(.tue)) @@ -79,7 +79,7 @@ struct WeeklyTableView: View { Spacer() }.offset(y: -2) } - .frame(height: 25) + .frame(height: 28) .offset(y: self.scrollOffset < 0 ? -self.scrollOffset : 0) Spacer() } From c69d27ab83c4af7155b456e52fe6d82aff05ec7a Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Sun, 17 Dec 2023 23:53:03 +0900 Subject: [PATCH 19/30] fix: proper navigation for WeeklyTableView --- ios/OTL Watch App/Pages/WeeklyTableView.swift | 20 ++++++++++++++----- .../Subviews/WeeklyDayView.swift | 7 ------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/ios/OTL Watch App/Pages/WeeklyTableView.swift b/ios/OTL Watch App/Pages/WeeklyTableView.swift index 5a876f70..443e4d80 100644 --- a/ios/OTL Watch App/Pages/WeeklyTableView.swift +++ b/ios/OTL Watch App/Pages/WeeklyTableView.swift @@ -32,15 +32,25 @@ struct WeeklyTableView: View { HStack { Spacer() .frame(width: 20) - WeeklyDayView(lectures: .constant(self.getLectureElements(atDay: .mon)), day: .constant(.mon)) + NavigationLink(destination: DailyTableView(lectures: .constant(self.getLectureElements(atDay: .mon)), day: .constant(.mon))) { + WeeklyDayView(lectures: .constant(self.getLectureElements(atDay: .mon))) + }.buttonStyle(.plain) Spacer() - WeeklyDayView(lectures: .constant(self.getLectureElements(atDay: .tue)), day: .constant(.tue)) + NavigationLink(destination: DailyTableView(lectures: .constant(self.getLectureElements(atDay: .tue)), day: .constant(.tue))) { + WeeklyDayView(lectures: .constant(self.getLectureElements(atDay: .tue))) + }.buttonStyle(.plain) Spacer() - WeeklyDayView(lectures: .constant(self.getLectureElements(atDay: .wed)), day: .constant(.wed)) + NavigationLink(destination: DailyTableView(lectures: .constant(self.getLectureElements(atDay: .wed)), day: .constant(.wed))) { + WeeklyDayView(lectures: .constant(self.getLectureElements(atDay: .wed))) + }.buttonStyle(.plain) Spacer() - WeeklyDayView(lectures: .constant(self.getLectureElements(atDay: .thu)), day: .constant(.thu)) + NavigationLink(destination: DailyTableView(lectures: .constant(self.getLectureElements(atDay: .thu)), day: .constant(.thu))) { + WeeklyDayView(lectures: .constant(self.getLectureElements(atDay: .thu))) + }.buttonStyle(.plain) Spacer() - WeeklyDayView(lectures: .constant(self.getLectureElements(atDay: .fri)), day: .constant(.fri)) + NavigationLink(destination: DailyTableView(lectures: .constant(self.getLectureElements(atDay: .fri)), day: .constant(.fri))) { + WeeklyDayView(lectures: .constant(self.getLectureElements(atDay: .fri))) + }.buttonStyle(.plain) Spacer() } }.frame(height: 210) diff --git a/ios/OTL Watch App/Subviews/WeeklyDayView.swift b/ios/OTL Watch App/Subviews/WeeklyDayView.swift index c8091a17..eb50d403 100644 --- a/ios/OTL Watch App/Subviews/WeeklyDayView.swift +++ b/ios/OTL Watch App/Subviews/WeeklyDayView.swift @@ -10,7 +10,6 @@ import SwiftUI struct WeeklyDayView: View { @Binding var lectures: [LectureElement] - @Binding var day: DayType @State private var showsDailyTableView = false @@ -26,12 +25,6 @@ struct WeeklyDayView: View { .offset(y: CGFloat(Double(lecture.classtime.begin - 540)/60*14)) } } - .onTapGesture { - self.showsDailyTableView.toggle() - } - .navigationDestination(isPresented: self.$showsDailyTableView) { - DailyTableView(lectures: self.$lectures, day: self.$day) - } } } } From 21f3e3db396437379f7d07be0bceb31300944f20 Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Mon, 18 Dec 2023 00:03:16 +0900 Subject: [PATCH 20/30] fix: proper structures for WeeklyDayView --- ios/OTL Watch App/Subviews/WeeklyDayView.swift | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/ios/OTL Watch App/Subviews/WeeklyDayView.swift b/ios/OTL Watch App/Subviews/WeeklyDayView.swift index eb50d403..8287a26f 100644 --- a/ios/OTL Watch App/Subviews/WeeklyDayView.swift +++ b/ios/OTL Watch App/Subviews/WeeklyDayView.swift @@ -14,16 +14,14 @@ struct WeeklyDayView: View { @State private var showsDailyTableView = false var body: some View { - NavigationStack { - ZStack(alignment: .top) { - RoundedRectangle(cornerRadius: 4) - .foregroundColor(Color(red: 51/256, green: 51/256, blue: 51/256)) - ForEach(self.lectures) { lecture in - RoundedRectangle(cornerRadius: 2) - .foregroundStyle(getColourForCourse(course: lecture.course)) - .frame(height: Double(lecture.classtime.end - lecture.classtime.begin)/60*14-1) - .offset(y: CGFloat(Double(lecture.classtime.begin - 540)/60*14)) - } + ZStack(alignment: .top) { + RoundedRectangle(cornerRadius: 4) + .foregroundColor(Color(red: 51/256, green: 51/256, blue: 51/256)) + ForEach(self.lectures) { lecture in + RoundedRectangle(cornerRadius: 2) + .foregroundStyle(getColourForCourse(course: lecture.course)) + .frame(height: Double(lecture.classtime.end - lecture.classtime.begin)/60*14-1) + .offset(y: CGFloat(Double(lecture.classtime.begin - 540)/60*14)) } } } From a25ee4f39b0b586e251c64289513598e7290d6de Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Mon, 18 Dec 2023 00:03:28 +0900 Subject: [PATCH 21/30] fix: proper navigation for DailyDayView --- ios/OTL Watch App/Pages/DailyTableView.swift | 4 +++- ios/OTL Watch App/Subviews/DailyDayView.swift | 20 ++++++------------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/ios/OTL Watch App/Pages/DailyTableView.swift b/ios/OTL Watch App/Pages/DailyTableView.swift index b9a08cd0..406a40b0 100644 --- a/ios/OTL Watch App/Pages/DailyTableView.swift +++ b/ios/OTL Watch App/Pages/DailyTableView.swift @@ -51,7 +51,9 @@ struct DailyTableView: View { } } ForEach(self.lectures) { lecture in - DailyDayView(lecture: .constant(lecture), day: self.$day) + NavigationLink(destination: LectureDetailView(lecture: .constant(lecture), day: self.$day)) { + DailyDayView(lecture: .constant(lecture)) + }.buttonStyle(.plain) .frame(height: Double(lecture.classtime.end - lecture.classtime.begin)/30*24+(Double(lecture.classtime.end - lecture.classtime.begin)/30-3)-1) .offset(y: 51 + Double(lecture.classtime.begin-540)/60*50 + 1) } diff --git a/ios/OTL Watch App/Subviews/DailyDayView.swift b/ios/OTL Watch App/Subviews/DailyDayView.swift index 6faa0391..f635f525 100644 --- a/ios/OTL Watch App/Subviews/DailyDayView.swift +++ b/ios/OTL Watch App/Subviews/DailyDayView.swift @@ -10,24 +10,16 @@ import SwiftUI struct DailyDayView: View { @Binding var lecture: LectureElement - @Binding var day: DayType @State private var showsDetailView = false var body: some View { - NavigationStack { - ZStack(alignment: .topLeading) { - RoundedRectangle(cornerRadius: 2) - .foregroundStyle(getColourForCourse(course: lecture.course)) - Text(lecture.title) - .foregroundStyle(.black) - .padding() - }.onTapGesture { - self.showsDetailView.toggle() - } - .navigationDestination(isPresented: self.$showsDetailView) { - LectureDetailView(lecture: self.$lecture, day: self.$day) - } + ZStack(alignment: .topLeading) { + RoundedRectangle(cornerRadius: 2) + .foregroundStyle(getColourForCourse(course: lecture.course)) + Text(lecture.title) + .foregroundStyle(.black) + .padding() } } } From 472188539d6bbd24f22a2c90f585d408717b6406 Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Mon, 18 Dec 2023 00:55:01 +0900 Subject: [PATCH 22/30] feat: login state --- ios/OTL Watch App/ContentView.swift | 13 +++++----- ios/OTL Watch App/OTLApp.swift | 2 +- ios/OTL Watch App/Pages/LoginView.swift | 23 ++++++++++++++++ ios/OTL Watch App/Pages/WeeklyTableView.swift | 26 ++++++++++++------- 4 files changed, 46 insertions(+), 18 deletions(-) create mode 100644 ios/OTL Watch App/Pages/LoginView.swift diff --git a/ios/OTL Watch App/ContentView.swift b/ios/OTL Watch App/ContentView.swift index ead8aa8f..4bda4200 100644 --- a/ios/OTL Watch App/ContentView.swift +++ b/ios/OTL Watch App/ContentView.swift @@ -9,16 +9,15 @@ import SwiftUI struct ContentView: View { @ObservedObject var viewModel = WatchViewModel() - @AppStorage("sessionID") var sessionID: String = "" + + @State private var loginState: Bool = true var body: some View { - VStack { - Image(systemName: "globe") - .imageScale(.large) - .foregroundStyle(.tint) - Text(sessionID) + if loginState { + WeeklyTableView(loginState: self.$loginState) + } else { + LoginView() } - .padding() } } diff --git a/ios/OTL Watch App/OTLApp.swift b/ios/OTL Watch App/OTLApp.swift index 17027900..ab04ba43 100644 --- a/ios/OTL Watch App/OTLApp.swift +++ b/ios/OTL Watch App/OTLApp.swift @@ -12,7 +12,7 @@ import SwiftUI struct OTL_Watch_AppApp: App { var body: some Scene { WindowGroup { - WeeklyTableView() + ContentView() } } } diff --git a/ios/OTL Watch App/Pages/LoginView.swift b/ios/OTL Watch App/Pages/LoginView.swift new file mode 100644 index 00000000..7db47cf8 --- /dev/null +++ b/ios/OTL Watch App/Pages/LoginView.swift @@ -0,0 +1,23 @@ +// +// LoginView.swift +// OTL Watch App +// +// Created by Soongyu Kwon on 12/18/23. +// Copyright © 2023 The Chromium Authors. All rights reserved. +// + +import SwiftUI + +struct LoginView: View { + var body: some View { + NavigationStack { + Text("iPhone에서 OTL앱을 열어 로그인한 후 이용하실 수 있습니다.") + .multilineTextAlignment(.center) + .navigationTitle("OTL") + } + } +} + +#Preview { + LoginView() +} diff --git a/ios/OTL Watch App/Pages/WeeklyTableView.swift b/ios/OTL Watch App/Pages/WeeklyTableView.swift index 443e4d80..e4a122b6 100644 --- a/ios/OTL Watch App/Pages/WeeklyTableView.swift +++ b/ios/OTL Watch App/Pages/WeeklyTableView.swift @@ -7,9 +7,11 @@ // import SwiftUI +import Alamofire struct WeeklyTableView: View { - @ObservedObject var viewModel = WatchViewModel() + @Binding var loginState: Bool + @AppStorage("sessionID") var sessionID: String = "" @AppStorage("userID") var userID: String = "" @@ -25,7 +27,7 @@ struct WeeklyTableView: View { // MARK: - Contents VStack { Spacer() - .frame(height: 28) + .frame(height: 32) ObservableScrollView(scrollOffset: self.$scrollOffset) { ZStack { TimelineLabelView() @@ -76,7 +78,7 @@ struct WeeklyTableView: View { Color.black HStack { Spacer() - .frame(width: 25) + .frame(width: 22) DayLabelView(day: .constant(.mon)) Spacer() DayLabelView(day: .constant(.tue)) @@ -89,7 +91,7 @@ struct WeeklyTableView: View { Spacer() }.offset(y: -2) } - .frame(height: 28) + .frame(height: 32) .offset(y: self.scrollOffset < 0 ? -self.scrollOffset : 0) Spacer() } @@ -129,7 +131,7 @@ struct WeeklyTableView: View { case .success(let data): self.selectedSemester = data.first case .failure(_): - print("failed") + self.loginState = false } } } @@ -164,12 +166,16 @@ struct WeeklyTableView: View { if let encoded = try? encoder.encode(table[index]) { defaults.set(encoded, forKey: "timetable") } - case .failure(_): - print("failed") + case .failure(let error): + if let err = error as? AFError, err.isResponseSerializationError { + self.loginState = false + } } } - case .failure(_): - print("failed") + case .failure(let error): + if let err = error as? AFError, err.isResponseSerializationError { + self.loginState = false + } } } } @@ -205,5 +211,5 @@ struct WeeklyTableView: View { } #Preview { - WeeklyTableView() + WeeklyTableView(loginState: .constant(true)) } From cc7a0cb51032cb9b1c749e6ebd020d2f3f1a1a84 Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Mon, 18 Dec 2023 01:44:47 +0900 Subject: [PATCH 23/30] fix: code optimisation --- ios/OTL Watch App/ContentView.swift | 2 -- ios/OTL Watch App/OTLAPI.swift | 16 ++++++++-------- ios/OTL Watch App/Pages/WeeklyTableView.swift | 2 ++ ios/OTL Watch App/WatchViewModel.swift | 17 ----------------- ios/Runner/AppDelegate.swift | 14 +++----------- 5 files changed, 13 insertions(+), 38 deletions(-) diff --git a/ios/OTL Watch App/ContentView.swift b/ios/OTL Watch App/ContentView.swift index 4bda4200..b59ffa6f 100644 --- a/ios/OTL Watch App/ContentView.swift +++ b/ios/OTL Watch App/ContentView.swift @@ -8,8 +8,6 @@ import SwiftUI struct ContentView: View { - @ObservedObject var viewModel = WatchViewModel() - @State private var loginState: Bool = true var body: some View { diff --git a/ios/OTL Watch App/OTLAPI.swift b/ios/OTL Watch App/OTLAPI.swift index b6137cb1..2db6c2bc 100644 --- a/ios/OTL Watch App/OTLAPI.swift +++ b/ios/OTL Watch App/OTLAPI.swift @@ -215,11 +215,11 @@ class OTLAPI { let json = try decoder.decode([Timetable].self, from: data) completion(.success(json)) } catch { - print("Error: \(error)") + print("getTimetables Error: \(error)") completion(.failure(error)) } case .failure(let error): - print("Error: \(error)") + print("getTimetables Error: \(error)") completion(.failure(error)) } } @@ -235,11 +235,11 @@ class OTLAPI { let json = try decoder.decode([Semester].self, from: data) completion(.success(json)) } catch { - print ("Error \(error)") + print ("getSemesters Error \(error)") completion(.failure(error)) } case .failure(let error): - print("Error: \(error)") + print("getSemesters Error: \(error)") completion(.failure(error)) } } @@ -271,11 +271,11 @@ class OTLAPI { } completion(.success([timetable])) } catch { - print("Error: \(error)") + print("getActualTimetable Error: \(error)") completion(.failure(error)) } case .failure(let error): - print("Error: \(error)") + print("getActualTimetable Error: \(error)") completion(.failure(error)) } } @@ -315,11 +315,11 @@ class OTLAPI { }) completion(.success(semesters)) } catch { - print("Error: \(error)") + print("getActualSemesters Error: \(error)") completion(.failure(error)) } case .failure(let error): - print("Error: \(error)") + print("getActualSemesters Error: \(error)") completion(.failure(error)) } } diff --git a/ios/OTL Watch App/Pages/WeeklyTableView.swift b/ios/OTL Watch App/Pages/WeeklyTableView.swift index e4a122b6..fd608b3f 100644 --- a/ios/OTL Watch App/Pages/WeeklyTableView.swift +++ b/ios/OTL Watch App/Pages/WeeklyTableView.swift @@ -12,6 +12,8 @@ import Alamofire struct WeeklyTableView: View { @Binding var loginState: Bool + @ObservedObject var viewModel = WatchViewModel() + @AppStorage("sessionID") var sessionID: String = "" @AppStorage("userID") var userID: String = "" diff --git a/ios/OTL Watch App/WatchViewModel.swift b/ios/OTL Watch App/WatchViewModel.swift index 23c378b8..28280492 100644 --- a/ios/OTL Watch App/WatchViewModel.swift +++ b/ios/OTL Watch App/WatchViewModel.swift @@ -30,23 +30,6 @@ class WatchViewModel: NSObject, ObservableObject { extension WatchViewModel: WCSessionDelegate { func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { } - func session(_ session: WCSession, didReceiveMessage message: [String: Any]) { - DispatchQueue.main.async { - guard let rawMethod = message["method"] as? String, let method = WatchReceiveMethod(rawValue: rawMethod) else { - return - } - - switch method { - case .sendSessionID: - self.sessionID = message["data"] as? String ?? "" - UserDefaults.standard.set(message["data"] as? String ?? "", forKey: "sessionID") - case .sendUserID: - self.userID = message["data"] as? String ?? "" - UserDefaults.standard.set(message["data"] as? String ?? "", forKey: "userID") - } - } - } - func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) { DispatchQueue.main.async { guard let rawMethod = userInfo["method"] as? String, let method = WatchReceiveMethod(rawValue: rawMethod) else { diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index f62c6ddd..333f0fc6 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -22,7 +22,6 @@ import WatchConnectivity } private func initFlutterChannel() { - print("AppDelegate") if let controller = window?.rootViewController as? FlutterViewController { let channel = FlutterMethodChannel( name: "org.sparcs.otlplus.watchkitapp", @@ -38,18 +37,11 @@ import WatchConnectivity let methodData = call.arguments as? [String: Any], let method = methodData["method"], let data = methodData["data"] else { - print("failllllllll") - print(self?.session?.isPaired) - print("llllllllllll") result(false) return } - print("watchData Start") let watchData: [String: Any] = ["method": method, "data": data] - print(watchData) - print("watchData End") watchSession.transferUserInfo(watchData) -// watchSession.sendMessage(watchData, replyHandler: nil, errorHandler: nil) result(true) default: result(FlutterMethodNotImplemented) @@ -66,13 +58,13 @@ extension AppDelegate: WCSessionDelegate { func sessionDidDeactivate(_ session: WCSession) { } - func session(_ session: WCSession, didReceiveMessage message: [String: Any]) { + func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) { DispatchQueue.main.async { - if let method = message["method"] as? String, let controller = self.window?.rootViewController as? FlutterViewController { + if let method = userInfo["method"] as? String, let controller = self.window?.rootViewController as? FlutterViewController { let channel = FlutterMethodChannel( name: "org.sparcs.otlplus.watchkitapp", binaryMessenger: controller.binaryMessenger) - channel.invokeMethod(method, arguments: message) + channel.invokeMethod(method, arguments: userInfo) } } } From e33684572ca240fbbf66444c69a12798b3e87fe7 Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Sat, 13 Jan 2024 13:51:02 +0900 Subject: [PATCH 24/30] chore: move watchOS icon to main asset --- .../AppIcon.appiconset/Contents.json | 14 - .../AppIcon.appiconset/Untitled-1.png | Bin 60244 -> 0 bytes .../AppIcon-iOS.appiconset/Contents.json | 116 -------- .../AppIcon.appiconset/100px.png | Bin 0 -> 1431 bytes .../1024.png | Bin .../AppIcon.appiconset/1024px.png | Bin 0 -> 17835 bytes .../AppIcon.appiconset/102px.png | Bin 0 -> 1442 bytes .../AppIcon.appiconset/108px.png | Bin 0 -> 1536 bytes .../120-1.png | Bin .../120.png | Bin .../152.png | Bin .../167.png | Bin .../AppIcon.appiconset/172px.png | Bin 0 -> 2215 bytes .../180.png | Bin .../AppIcon.appiconset/196px.png | Bin 0 -> 2568 bytes .../20.png | Bin .../AppIcon.appiconset/216px.png | Bin 0 -> 2763 bytes .../AppIcon.appiconset/234px.png | Bin 0 -> 2934 bytes .../AppIcon.appiconset/258px.png | Bin 0 -> 3313 bytes .../29.png | Bin .../40-1.png | Bin .../40-2.png | Bin .../40.png | Bin .../AppIcon.appiconset/44px.png | Bin 0 -> 761 bytes .../AppIcon.appiconset/48px.png | Bin 0 -> 802 bytes .../AppIcon.appiconset/55px.png | Bin 0 -> 882 bytes .../58-1.png | Bin .../58.png | Bin .../AppIcon.appiconset/58px.png | Bin 0 -> 910 bytes .../60.png | Bin .../AppIcon.appiconset/60px.png | Bin 0 -> 932 bytes .../AppIcon.appiconset/64px.png | Bin 0 -> 1013 bytes .../AppIcon.appiconset/66px.png | Bin 0 -> 1023 bytes .../76.png | Bin .../80-1.png | Bin .../80.png | Bin .../AppIcon.appiconset/80px.png | Bin 0 -> 1173 bytes .../87.png | Bin .../AppIcon.appiconset/87px.png | Bin 0 -> 1301 bytes .../AppIcon.appiconset/88px.png | Bin 0 -> 1312 bytes .../AppIcon.appiconset/92px.png | Bin 0 -> 1365 bytes .../AppIcon.appiconset/Contents.json | 255 ++++++++++++++++++ 42 files changed, 255 insertions(+), 130 deletions(-) delete mode 100644 ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Untitled-1.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon-iOS.appiconset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/100px.png rename ios/Runner/Assets.xcassets/{AppIcon-iOS.appiconset => AppIcon.appiconset}/1024.png (100%) create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/1024px.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/102px.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/108px.png rename ios/Runner/Assets.xcassets/{AppIcon-iOS.appiconset => AppIcon.appiconset}/120-1.png (100%) rename ios/Runner/Assets.xcassets/{AppIcon-iOS.appiconset => AppIcon.appiconset}/120.png (100%) rename ios/Runner/Assets.xcassets/{AppIcon-iOS.appiconset => AppIcon.appiconset}/152.png (100%) rename ios/Runner/Assets.xcassets/{AppIcon-iOS.appiconset => AppIcon.appiconset}/167.png (100%) create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/172px.png rename ios/Runner/Assets.xcassets/{AppIcon-iOS.appiconset => AppIcon.appiconset}/180.png (100%) create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/196px.png rename ios/Runner/Assets.xcassets/{AppIcon-iOS.appiconset => AppIcon.appiconset}/20.png (100%) create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/216px.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/234px.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/258px.png rename ios/Runner/Assets.xcassets/{AppIcon-iOS.appiconset => AppIcon.appiconset}/29.png (100%) rename ios/Runner/Assets.xcassets/{AppIcon-iOS.appiconset => AppIcon.appiconset}/40-1.png (100%) rename ios/Runner/Assets.xcassets/{AppIcon-iOS.appiconset => AppIcon.appiconset}/40-2.png (100%) rename ios/Runner/Assets.xcassets/{AppIcon-iOS.appiconset => AppIcon.appiconset}/40.png (100%) create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/44px.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/48px.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/55px.png rename ios/Runner/Assets.xcassets/{AppIcon-iOS.appiconset => AppIcon.appiconset}/58-1.png (100%) rename ios/Runner/Assets.xcassets/{AppIcon-iOS.appiconset => AppIcon.appiconset}/58.png (100%) create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/58px.png rename ios/Runner/Assets.xcassets/{AppIcon-iOS.appiconset => AppIcon.appiconset}/60.png (100%) create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/60px.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/64px.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/66px.png rename ios/Runner/Assets.xcassets/{AppIcon-iOS.appiconset => AppIcon.appiconset}/76.png (100%) rename ios/Runner/Assets.xcassets/{AppIcon-iOS.appiconset => AppIcon.appiconset}/80-1.png (100%) rename ios/Runner/Assets.xcassets/{AppIcon-iOS.appiconset => AppIcon.appiconset}/80.png (100%) create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/80px.png rename ios/Runner/Assets.xcassets/{AppIcon-iOS.appiconset => AppIcon.appiconset}/87.png (100%) create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/87px.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/88px.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/92px.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 20c1fb3a..00000000 --- a/ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "images" : [ - { - "filename" : "Untitled-1.png", - "idiom" : "universal", - "platform" : "watchos", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Untitled-1.png b/ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Untitled-1.png deleted file mode 100644 index c8b0fded69e3db3f1fa03b4ab8eadb42d099c758..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60244 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 aQZdM)H=~7J3h9#|6@YhgcYJ7nF5y4EDwh@j literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/108px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/108px.png new file mode 100644 index 0000000000000000000000000000000000000000..027c2883748afceedad2733a7edba82b533c9913 GIT binary patch literal 1536 zcmb7E`!^E`93PTlG>>Rh%-p+dvFU-NVvLEcnRhj{bv;U#WUZD;9-GQs=270SX3`L? zXv-p{s7V{q#qHsBTi)Gy<AL6F+;$D`CYif*69tUQv*RlqIeg*6@;{dYA8wYw=H}-uCB7PPIwe4v|d|buU zyt0`*)@7jOiez_Ju%3PY=8vI7Fk?i9X{L^p@_Jrsl{~rQMZOJ7-Ohdrtm+D{-budE z|4j>urnNeDSG;egXMw?1)eQ}Vg`_As^=lw{%$C#o?OzlrbkuPPA2T~%JH4CzFi6nk zCDYq$xwb419Dz6W-bLM;UjbnlsDPl^u296$cFr+c!Q*O$0YXKJ^;lb3cp?dRir&LX zcsmQWuJ*b6_P~Bn8bQ`(t}tx7HFxCJ8am~r%V%25xi9OI-OXE3h-QB(oLn=xnroq`*a1 zkueBlMXosp7wF{MFh|_cg=l!>PL!N#X`cv(I-fWMZ9J|?$yxw<=w}_0jghWs_n3ddahZ#&-_l+VLlnMDu9SVv=D`nz~ zFLmA$rlztLRrZ=HL6lw^1DehDonJlQW&|l}(fSWbmixkw|6!Zax^mFi7{d8G9H@z- zT;U?aa30%sI3^g3d5GM@dE4fCouI04Nu=nJ#Ry?Ng4o)`)2^|2pms2~k5=ZNOm6}D z$`O~B)O1v-*a!_anqWK)sV1+b4kjMf>sNtFUJtfm-DS8y;#DwDHabt!d_80V%Vzr! z!6@$v{-eb-{ttfdS3iaVIJqJ|n8RN))4fDwXP$8&N7?oEz)n112%O)EO{9mKrPjkF z%i>(S5i{Omz5GXfN$K-?2nO>2om1PHZoGVj-YhMhq~;yWnR;A=K-x=E&y$0FEV{e) zVPl3DIDVLFoV2x&`}+EwD?wP+Gs>&2Mdei+2)-lrR++3I%BpNMWgAi&k*r_8EtCg8 zx$>-=YW&`UiPiDhF0mmmxcb=@af2++Hr~x1)X}rrzC1LMKzlgkSx`87rxy*Bm-AE^uzc!peKr;&E(Rc6On`GBHZItm%4 zRPpb0T_m|Z?|Q#gpi}C7-8hX81#!i)=|XcuH?5r;Qo8ngap38sv0fH~%0zuA7EjMq z3ryx6@V8;GhLX=)Vf|?m@KB%XG(>-iovSZw?7eyTgmApT@Qv|QUdhC#seM$}O{5@H zLs#+mK&)F%+qG!C@M(uZ^o1uw4DB3e&GB=~%tj5a(O6liZGv7epV@X_7ott=s3aBY z11Vxchy@Kb2)^dgPTy;4v@00YR7V$G**9|$9BMn`TK*5Q{qj>+l>w8|t43js9vps4 zPb)tmyUkg9;QN=seet*F)HPHBg2Ex`gW@x4r=^sl$1JRoT3+3$D0!4<(N;%xXl+@u z5G`Q;5UyU+P(1l$-l7>9&kxDDAO2C>jo)ESjNMepr-$xFUw-OxRb=);exp+iel*22 vJ)T@;aUxe)`tk5)n!>&!sf?NMOPDpAX4dk!Jw!j{U;{j{1h-nu@x=cDa4W=m literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon-iOS.appiconset/120-1.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120-1.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon-iOS.appiconset/120-1.png rename to ios/Runner/Assets.xcassets/AppIcon.appiconset/120-1.png diff --git a/ios/Runner/Assets.xcassets/AppIcon-iOS.appiconset/120.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon-iOS.appiconset/120.png rename to ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png diff --git a/ios/Runner/Assets.xcassets/AppIcon-iOS.appiconset/152.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon-iOS.appiconset/152.png rename to ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png diff --git a/ios/Runner/Assets.xcassets/AppIcon-iOS.appiconset/167.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon-iOS.appiconset/167.png rename to ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/172px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/172px.png new file mode 100644 index 0000000000000000000000000000000000000000..e373a0b50d2c48ecbbe7ea0372f39c3cce0d0b90 GIT binary patch literal 2215 zcmcIm{W}wCA0JJIye!3Pjj|#kPMGrAyhdz2I8KOY^47c`I%1pgM5est%=0%q&kx`GdwuTfb6=m&_r9+C`@OR-pu9BI52^zI z08Q_6?*59*+6mBZ#ro+7FOedtT{#z+003y{?t~JcxD=w;R7&voas{ya4v7^27=`ph z0sswp8k?ai0079*+a391l9Ft~kF+lW^5QdtCnsK2Qla{|h6~+ikbB#Hc6XY7jdUb5 zLu@`jGSQ7QE<61I;#8q(n@@Q3HQwq+E#soh>@XYT5wLHNA6UI|G;!>5kkq-=LAF44 z`IP#pcVqk5<0mg<@2stt9IVHp1+AC+7^td4+Bs^4(3COGv0e;2Ci}%W+thUJ!yt=06>JV~Vt<_8y>P7|cuU(9 z`hB-~n_S+q@_W7xN$YeEPBtH-Bmp79WqtSwoT=z6=YSM}$J|hBy-l$GJBn|gk*9gx zo=L6Sbh1dEQQ#9U__xqe8RVHKiMZ=6E z(Q2uSlD|A5iTuA`F{)}=y^>_&J+Xwd~J#4 zL91yBWL=a z$kA$M<2O$Tb@gUKEFxR{l++H+A_UzGk44lfG%3kBgt41^M9CnT@<)SOs1Y?5-aSg{ zAHa<8KYDOr*8@w2E)>Ccpft0bH?rO$J>y+K-!X@t7>*oh7A`k_Rv6K&m>4CE&arQI-f`;>g6u8P zApvB=k=*<2m+zcUx}gnp#&k$$CwU|0)x_;8ZEU8~afFfR*DuN>`ENba4seHA*=dVtVGhfp-e5oJ zFwSs%z*eF$u_>utB#g8h3DpJb`CTnUu_!bw_8Ot}3i?C$jhtFvEFLVJFeiC(@XZYA z_?!Bp(JTDIdKuP59r1@skm```;3v< zAu1)lS~|KJ7B+w}>|KPmpmnqa2!)Hz`K#H!3Y|xA(e5a|F(m5n zH8JA+zp66~wfDu?T^}#w2|ORNa|&li-SMUTlhN_C@efyNBr{&0dSa}85bgl! zo|tbS@%L!7vJzU3`KXvWCv}i`S6be76TE^m8sxTrl6y}LPEH1!?$P#%Pdc~0u^!VJ z$p?pi9AztBvwW$bAHESYwef%*nDvyl)hVnXnd&`$#$d>~*LLN3i=VsD?CX2p8Vz2irP-ymWI6l1B+irs>Mwk8FqxIt zjn&ddWt^qz2FXFQynfQ~e>=CHX~;uX+No#hlSS!`)3?&w(z)`serZ?lbkfB?QtsI z`+jQ7>gs=<$2&l%bmV=S{z#iTEkSg%a~yzTP5%%ISGUKH#L%+{a7FK=tUXQoTc^R( zodf>bCJbZRIs>71(@#7q7k4jWo;S~{zj?el|}DLi5qj{`uUEEE-_FGXvK>Edep-}?VL0)W}&$zsArok z>AB$YJp~5TRip{iIa=D4rX+^r44==j9jOmtR9R=McLh}WpxK(rzcUFAHJ0JAzSzY2 z#@8p1s*2en9Vo=DTvHp%%Hm&1WXYZK2y?1}rs-1kDUoBC{=cTIRrmJnJo2J_)!SCZzXIUxfpTZN H5~%+G*aIg8 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon-iOS.appiconset/180.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon-iOS.appiconset/180.png rename to ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/196px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/196px.png new file mode 100644 index 0000000000000000000000000000000000000000..040a2804ac4b10fad5904c02fc1bc8828167acf6 GIT binary patch literal 2568 zcmcImi(8Us8%IOI6N70*QxYUkEiGDkz(acl#XO{`tItk`=Cazt1G*HI1PYu7q-kZQ zcq-dhQJSXa)TWqaD+Q*OB_21W5Vc4PMfTeF{R_LU=kWgS!|%TD=X$RDd9y?JP|S?K zGKN4PX1o2#Vc;%aop3{NeRw_p6u241`$r~0ASULkQx9_GDjF2(C52IZAfo413J^e# z1Hk|UQp-14rW$|_rMt;M#2LMr;b*i%`!}4OAAByh{-(^u=~uW}{g>3NeqVtU)59{b zw$!IfuqX@McNJe+4rt9EM0eTTg;<0NhQ9rJ9pNyx-?G~9SO2qk$-W;qH=q8+<%Dtr zvuonHhbs99fA$Y8ajMLtYRdk*gxCIuckty5m3xwBZR*r>5oEg90=cDnR#W#A5-;D`QB(#S(Per&j)(g5!ScyByIP(Z9=3y0 zmA4vNboJFe^x=ZP2t0P?OC+ZPNdK7l;Q0GcsR*+Lp}9suW_YKi0{8cw4p^(8_qB3w zxlLc%2&g5F^D2|}qRlS=UX&ciujqGsX&P#Puq2Y*VesAts!wh z0a6UnOxG`S+XL2G6eCa|H3>;dS4(|n=N;=SWk3Q4k74=Gfuu&7>B(rK!)FU4FtEXJ zNj%|m6dcdOXD0ZEEnA468Eo+&RtCqxXKv<DtXF+}27=6_r)SLDUmH2Do z;*MCU1O1R23L9LmYz&GMZNT2MDHJK~T-# zGpo~tgprHE`ub?wSn;D1H*=a7?Rq{lb>ZQZcdFn*FN}?qI){SHpL|&Y-?>`pIEq8E zrmueyxnQ?%YpX*=eBaiMfZN3sn$6R5U2XAwvmn)$89Dhz1G@`o?}T@-t6Pl@yGBs= zdZaE>e+QsrfK*Oid%g2dg?;sky3qiJ;@Gnn><%6NI$S)7|03}HINyMa;!qM8<`p&U zNAb!}Q^zU^c(+`vr?fS@pBXix%K+WiwExzZH;w~5S#xn3F+NdQQnSdkP9yGkE-V_F z;2Rs_;rurG7 zB)!iyAZeG^*YRAevGGpKnW{+`U{O9*-MbLj~bHuu@wc+=h!>%`ZNGm0O;s*8C1gl?m|9x`&}9JgH+gMFUmJ!W5eoX zzb|&_9m1F+fa-{WA@FdiD6(;EFqh%sQ8!;?Eak+C;5E5MQc#%G>RP`J9Wo~R-9`}B2Je!rM7ou$%H6Qe5^y|e`=*JM*aB%xAK zu+X{dI}=>mmMb@VRowEXwVoRQwR=+vI+L2Pmc-kbqd}2~P>KCB`i(HSBu21@JtV-_ zGW`ZkWQT$Zi~+RdSZKm2?&fpblI!jAG|Gx@o4{Gx6%Xb`^mZ%{t(8>-;7l1?>UNxm z37PpJuVTqy)WKVtO97-N?bz*d+;q&|DsNedVR*x&E>?m{^yZdg0Co2D&I1gR_sscn zN*(Ff{(S$Kl)oRIl5G-)ngZ&`rKys4yYD%_{b`WZRj^Qd!`uRaSTK-H`_~Jmb zqsK6%=5~=v+!xg{A{&{_n7#f(N_$j<`aji6ut-v9+Rhbrx>N*q0`kNQa*R|t(c&ereJgD0FyQGi#&tzLe7#Wc%cORU@w=J&1SVSScdSf-SU)@Mbvx z1B!V1%FSVP=A*s25O^gta-Gzw3!a1Ze5Dy=hK0aHJR?5V^I*&J$^Y)^-kW=J)ae(> z3D+@R1@SVnOnKiW>^8>j=eSgZ}9MLu#KXZGNRFDp4;84f1xrIrKFLmpD#-QB%eLIpDUe6CT7u-lYYoH&%O{fdx_%k(BAH13L_82fCh mDGGXY?lBY%)%zERP%kbD74cfm4+ekSAiI6{kVQU6S^oe-`)%w1 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon-iOS.appiconset/20.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon-iOS.appiconset/20.png rename to ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/216px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/216px.png new file mode 100644 index 0000000000000000000000000000000000000000..5d68cd89b2d4d679b8463c4d7c30a969ac8e8d22 GIT binary patch literal 2763 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 Iwzzx$0uAIGfdBvi literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/234px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/234px.png new file mode 100644 index 0000000000000000000000000000000000000000..9e652ca6c847c55684c1258dc4142b3832009cec GIT binary patch literal 2934 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 wPg3xO*QS^s%-+7dhhpr6S=O=#1-Tf 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon-iOS.appiconset/60.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon-iOS.appiconset/60.png rename to ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/60px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60px.png new file mode 100644 index 0000000000000000000000000000000000000000..498020d54b605d83415864a39bc535657d759216 GIT binary patch literal 932 zcmV;V16%xwP)^wIDG41G zqCl7?2olNUaAKSIc5E}xW*x`zv61{H)_T9j*6gn2PyfuD!>gntkpemh6&;2tY;;Uv zqhksi9aGrow3Tpb){lHV2~OHdIPrD{x%nVCX&d2Ux+`I9{O%B8N|(q6eu9&>5Z2Nq zvVl2p(sJR%+&prz_|BgBpDs~IB#{q=!9~l3NjCWMz3%%f)741(zkv&uF1~K8zw>l!_Ia3!7bRUuvvdir!X;(l5gdP4 zE?^{@oStp^3@t!7#<3J(>e|}eOogftPc?nUc76z|(~ednZD|?(^hMX$CAtRs;JPsa z4x|Ym9J^F^8mdI?*$2oP8*m|G`z7xlqrmKi9y!ZZXA?*VfQiS!U>$p73Dod~n z>rK~jq(cU zAMPSmO&6G;bYpL(YFcApnsQOLRmdci@lW+MX^mw^{8HmkgQkY;zO!%^#Oo&=oDO|7p1PWqzeCi{G$Awj&Qh6H5wsJn3C20 z`=za*tld#H(vEnvvAdhHgp`C+;#ii(uXA)n$|k=N?83!D_0bRat*gZ%wcD`I!|~Ts zLi9A-QgNrS3sa$L7g<6v--tIjrm)d5g^i9WY;;Uvqw^1kFnQ32#my-I00004@@9Y5*Nm}P|OTtP) zjglISrn*3R7}0i0Tj-4UluR?0KBkHHba3WNCWVAuNk;uB;eO@Q^;IW&stzDeQhE}j8P_n)AU)@+Y2cb~}b z<{3~(XR!3(sqOLQ?h_=6u5CajQggt{<0+)xBE`>_& zn`|Y&K_=1#$bVnM@nTyfqv*8leXNaX&*Ro z6tZCzz^?ltA(T3F1{|;na6kla$NiSxgNR-l1Q#p<1owBLQ@C2seM)+JZj68v76IY| zr=h=1)O25ogr#TvN=O%g+;11jEc1M(=D66EVfNq&=>m}Z#$xTY&z12jAyoj={c4*X zx?w;I2az^(q{I?wWDD(IA@y9Kn)?)ZN|eRFwG4D!2kt&9J@ZFZsC~T%_w^vSue126 z9_|tMBaneK0ZjL`JL9E$I|8o&^$XNF(&h8{(7HE{?$OKepE?E^NE3kEFU-C!er+dk zE5Tp@YAA?UM;z_9u8Z2B8?ullz@8(AkeYmfUn#Ajz}sRGgaQGUMu?CmK=$1te)tq@ z2={9RPt!amYJjLX3vBWGx9>3pPbge}DVkeeEA0!?Mrlr5`RQ4x;(MQ>l*VxePq3X1 zQ%0w&$notRp|mCN;x8lmfL0N_5($BerX7!$_XWZJlcN7W&l)_@6alhRGk?_v6nyOJ zFq#3o02H{jFQ77*tM{)2`<56@ebfDB2T!oh0P7KWMC|v4&-J6(unJ%%K3eaz?wtUe z0CWhNn_ocN?NO_Sl2>_Sl j2>_Sl2>_SldIA0bENGE2uSCl}00000NkvXXu0mjfx3JL! literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/66px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/66px.png new file mode 100644 index 0000000000000000000000000000000000000000..023415e813e04e6d1f8fab9b96d72d499a55455f GIT binary patch literal 1023 zcmV#4Y|JfSV`UW_ zxKaeAAvrXfY5y7p2d)&c{Gd16PW~JL2d)#b_G!Qz5*F!+NpK)dggza^Y+pZi3)O~P zQsaAE1Tp#eHPZ1F+xO?Ef!Iu}nl(cuPyAPfzZFo-HEcVEOXZu*2c;n z9>|1U1Pu`?oFssTg&n*#`%u+=12S=Bui>vfU`Y64I}H`LIt>}skO{j8e{Bt_j~}(2 zhHyt4w8lEfhF!$L&dauIL+HwR1TVIN16C2cNke%{lOf_9xL_4wrJ)p59HU)V!3moP zyJ_%*gXRn&yEx{eCUx{jGU_p<$=Lk;j50;9(cBWSeCA|ZsD8zB>^BCIsb zKi&G#U9NyaB!(xrB##%~tk*fCJ=ymf;2o1bZS#fRzTVv7Y5%)(-3QeDh~MuuR!TucuC>8!uqA@hK!wrC!``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBu9l~ZV@L(#+d1dGLjpyPpP#+#=gSqTUJ@D^ zj*k|#zCD!s^wbKmtp-cP{@!ps{fn6?{Nkck(U5MXLs6`mZ+pxlMI?k5E@b<6LVj`Y zx%ZOQ&tFasyx&v&{E+qYhkp+|cx;ttS95>w^Lgd9QALG?q9Un}nOa4>7O3DyePT0a z_cECFiAhx3GVHXB>g*HkcMZm3w8L|)-tbr8L83!XQ%%BGe7i%I(oj^Fa>fg<&W$=dQxQ)M^7F1;rsjQ z7Vg)aVkaCEqoEMps{S>4=M~na5x;y^JaaT^y!lk(PvwU_OWwbmV%L(Tshx|IKE=>2_sQ5V?D4tpikevj<<&d;@c{in3;dWG@<2iy{R z?do@af77@lE~Z=H%`2AjWZQs)ZVJo%x8!iXD4w@}v8+a-;su}iC+%_R`GmABY92lm{JW6yZ-d#Gj}UG zYSI_o{ClqD#rLi3FMn7VudM&j;*^#4c6s62{?u#pg`eMFHe*{&K%8i^?Z#tYmkNJ; z7%#B*_HJL9N4fTVqOs`_CL$iEW(0ZE|47l~pT8$G<`s+H29bXUr(Sk;2rV+zc#57(8A5T-G@y GGywpucm|;W literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon-iOS.appiconset/87.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon-iOS.appiconset/87.png rename to ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/87px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/87px.png new file mode 100644 index 0000000000000000000000000000000000000000..58a0188632f149d00ee342f4f96f8f1f099e12ff GIT binary patch literal 1301 zcmZuxeK->c9NtKnG)(DoSsN;BvI<2wGqf$OhOk7|T_0w9vKe>PR#DoVkkyv;U0dDQ zR?;3@$#{%HE#WZDa%`HC6W0ev-Tc#Y&pr3Y`+I+%?|;9SyM0@%BWO7Y001~*w_u1C zPMU|^LQBkkqRX<7{h=)>3;@6ZG7lg?cxjoX31kps(Ez#j`%z1=V1Hy>Bmhud>M)yO zV<{`Kn8<{mf$uK0Qy@oNAFHtx!ze4U+kp40&FgxLj&!3H`9YNvs*Y2{)X&Ke=&%{E z(n)U@9#oW{PtYe1q}W^s(L``x1x^~+d4PxQe5~2TjlYHBR&XP<*w3tMUKOKR;YS%G zPp6-01OzdtV@)IY%)0xjrw*tAdSQs~+ z+TUR2PECNY&kQRn9~?VuT%yd7sp6l3`TIkh$(pT@f$q z390y{@fGTB`(+OTJo`PrYA>5lB5U6;Ri`(?N!46RL9@#a@CQ*(;X`jo*X#P)wy3af z9?5;2zqL4Z`1fV2_}lvVK{_?7?Sxh6b&ylR)*Hb9l*_J7ZJl z`lDH2N%Y<*E4Zm&BHLhh$L4awkZo=hXvlatPPTS=%b&5}>MIRx&Z~PVnZvfZTo*j2 z{B58j$I3yP20X|qe>nSu-79gVj=3?c{9=psY6SL#__Cb%(l8ZFK2rOGFWH#un3Z>) z^k$J6v~?Za_#jTE(Oz@;mW;T4ryXVWbD7sZZtfH*WP&GzG@viMORF zV{b9AYs1;i>`XS)G0zI`=Ba-k(|o5jhdop@>(k+LIz9*|xFHw-ij$w8{zOtnE7p_c8Cu+`A)DxR4W?VS7t z%&rLmrEgf^-)HpKshnF(q0OJp;2alPn>i%$N>>DHJiVaricCtj4^q` z%+SDLC#_CQQ@w)NhupjxRt3*}{;nSJ788yFGJJP`%GTbgfAxCT-O_~{%SRT4`$Y7| z_|;FBwhont3`}2u5|-A+9YZ`?8h+d9{>Nzab*RXtQ{zH5_S`6I&6whArkH>O>dv)_|T zEzI_W&Dgg|YLb>7rLC$y*=OXxqDJ9E^nx0ivtMrtWz=6-()70whky~~j6`&&NxDnZ zid3YDyK!}I=mkoMaPDqSjYY6k0p-(ds!#r=L(e=-M9ip@#^!gQh`Y5V-WbD_X$gux wT7kM6I7{=^bnACQ@MdUR!v8=2e_i3Ib)7IWYesT_WpOb8HhLRIj^3014<&(TEdT%j literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/88px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/88px.png new file mode 100644 index 0000000000000000000000000000000000000000..da51a17a5f7ad4af56d9454ea3e20a7172503b4f GIT binary patch literal 1312 zcmeAS@N?(olHy`uVBq!ia0vp^5g^RL1|$oo8khhn&H|6fVg?3oVGw3ym^DWND9BhG zhEi$dEkHF9lSB73_p^f{kTXggmkqe{yWhK}9?Er*&II2Bz4xHMce z{-`tw{8ue|QxM;tJX8Dj&hN7pe}4ALCP?LW*L3y#eV^yPm$BZqYs(frvD_m^7l~>| z7>8|0Ta$1$;^3@}O{U4L*~hr9^@y&KM3WG$o_5ICaG|Q^zLXHon@xKe%04 zG2&|6(W;$JlarF0R`-iP@qOUCo=G$9z>Eh+Po56iVW|7}k?(pZ-HK&~QA%n2@)N5z zswBRg7T2(@iE%MV!_$*5xrL_Xy<}Z+xcBJuB&o;UcNRZRcfR^K?qz7m^7JDnBC$u_ zJX|a^1;}3`cqNhRV8okw^X7f|`@8NE_bQgs8O!+Rm3z0|XFcy<#rTh7nYoNf)9a&~ z)(2gjGfnqL{2m|vx)o(b-qY8Af77cd_EeE$8M}Q+^wYS#A5UGm>hO|v+4eIfO}oDy zOT5GlRI1T#`=a->F@Ie3S|dwQi@gWFJZLYQ_3gv{$!m`bL|fXcCU)@ipFFTm(U5iR zgKzh4?M#OROR1+6PzOCEombw&KMXEBhMV znfb?$nrvyhZ~3G4#TPaE-#0}6Of_)O+%f-4Qs8O-KPox_Tzs?RPTc+Ye7(@=Wv#4M z2mdZHxBs~KV&6jHlBUDU#Jg{8+naodZR&#!FMW5vPmH{>CxFwf%Fvo)(!C=uswe%f zoWH?IIb!Mdl1Fpie@_TJ?AI$PbIM7o6R>pdr#=Xs~)xXj^qSJ_!T-6DDM zp^n0XT6_1lz0Cf)OJ}z|YiV$L+Bw-1=S|OlxOH=at&i%x6%Wo{;@+swrK&mYuk6n$ zwvQfv+>z40?ex6*|5;t;je!U6UXl)3Bi?a#@#!0%_r3Y?c!CPgN!DX5%kR|3=U4p} zo$aNn`h3Yz&*iEgzxj2Uotu$xBJ}0k@EoPviCY$nRTsUOx6|=W z(Mp|OH{}b}p^_43QdQ-;x5gd6R%w0l#HAStGRxQ3|7=aM`|H6rPsi-NGeb;jZ0*+_ z!WzteR!^rjoykr*xNWcej_BvkA)g;eyf**;aNVs{+H%`#6!sUrUUy>Z?6pP@R89Zw zd{Tc?KS$zy^X^9BRCV)BAD;+spL1qc@HV}ojhi<=K4tg9v>|;O_qLV?PwV?iYv#u4 zEzlL@QrUhv{a!$RVEN63;%{UVllXcRtsno4R$sxoz9KKgNv|sA^7VyH4%!k)r*qA< zW|pNpE{J_{%f5SK=u@UsEZeuI-uN|ZU(+rADNR=o9Wx8(V4j;WM@M;Y#=#=?eYYG3Cj7We~5%$#ivt``PxJxasdZFG9rtynL8BJ#LQl`Dv}m RGQa|j!PC{xWt~$(697t-bxr^P literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/92px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/92px.png new file mode 100644 index 0000000000000000000000000000000000000000..e69ad495c072ee108c05c487cb1a11b8de627a74 GIT binary patch literal 1365 zcma)6YdF&j9NyfwC6_tKp$n-sw=T^68n)09BDX2WWvLj-r8rWAGNE}CL*z0QJIt-Q z%(K*ZPIF}B=xp?NTRWX$Wo<5T*4Ojte0YEF^ZtIn_x<=5_+rtjP(3IJ1X4YParcvP z*bk^E$>#jZ_<0#Y2$}+flMgGx}J6gf!ZFxwk|5l zs)p|+`9dr1@eT@)+qoSL?+ z{UVhHjbn^_^qTQN={u(J(_C*)Sb3qg`5v>d;~_m!9fXnp93BrsYqo7XIT4L2#6hUV z;)^xQ@@9(y@32Kbxk?hN%cOO}%XRXx)8&t5x+BPL(++8iZI>_kOss z-D#s({>24i9hYiPPC6)O+~>$snsf+kntQ%_qZY9@0&jlQ+uEP~%XQ=cEGv0cfvp%L zi0LUh^Po@zI#5n}XJT8C@#wI{`G&uqlxBG%Tqah_m5b7lW`P0}1w5Ik0+iKi=sDdi z`Uy`;x3?Z4qqO1_188!g7lHow;nCJg9v793F6o+n#LM5?6wuxk){Y?AQ zUF{cQkI=+Rx$`83IlN7_i_r564!H!LqQi z17i(cW$LVO7wmYZy_a`z&<1#pTnB+Fh?xdvW>p|~Ko+KL0I9g56ewkyeYdozOe~9E z#*}{ERMEfyB9H#HJas240w;RQomI0Epbr`KL9m1Wj>>pX!(glQqF4zs( zdm*7oV6NqDi8_l9Tdc_-)zD7XGAa<@j|X|C8(*Wc1kaOUL5DQEt}cWkoTmS⋘%wROXs z6{dYdZ$L9jGaMN-Y$mooIU$xrOz^rZw%()yfr4*HJN@1MsH%D&tkwD)681`me=FYKT!~lf~ea|_cb+l=Z4t(l1`UUA+ghMvVEv^^CI2r(Hv6#>kz6( z`8K3mUff@wVV7QT7tIPQSZXi98dpRcZG2@MPgr+$`)1xV?WF?D&=!G`_c||nen+TT zWl=kD7APDwbET8GafL*DJoI|*5sy};o~^!|Q@|;2P6FtQn;E%Iv{yS{4+pxe0ayy} z*9+@=|2Q|+z2TL4tjn^PMmBu5zw+!MfLN&=Hu89YCAQoBTXWl;<4ktU!hxAT^IPc1 z_C3Zqm6_@HqAk>a);nkJpo=(=u|!t9D*2=!^?1l|n5>R3i#{P`m8sRlIR=HJ=LKcB-qsm@ zG7|Gqb5u~2&o1=JyGaI>69$~m^`LoOR5&3stvLF`#`ga#k{=B-3zDOH^@JmLb7U} literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..82beee01 --- /dev/null +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,255 @@ +{ + "images" : [ + { + "filename" : "40.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "60.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "filename" : "58.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "87.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "filename" : "80.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "120.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "filename" : "120-1.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "filename" : "180.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "filename" : "20.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "filename" : "40-1.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "29.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "filename" : "58-1.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "40-2.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "filename" : "80-1.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "76.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "filename" : "152.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "filename" : "167.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "filename" : "1024.png", + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + }, + { + "filename" : "44px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "22x22" + }, + { + "filename" : "48px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "24x24" + }, + { + "filename" : "55px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "27.5x27.5" + }, + { + "filename" : "58px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "60px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "30x30" + }, + { + "filename" : "64px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "32x32" + }, + { + "filename" : "66px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "33x33" + }, + { + "filename" : "80px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "87px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "43.5x43.5" + }, + { + "filename" : "88px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "44x44" + }, + { + "filename" : "92px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "46x46" + }, + { + "filename" : "100px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "50x50" + }, + { + "filename" : "102px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "51x51" + }, + { + "filename" : "108px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "54x54" + }, + { + "filename" : "172px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "86x86" + }, + { + "filename" : "196px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "98x98" + }, + { + "filename" : "216px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "108x108" + }, + { + "filename" : "234px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "117x117" + }, + { + "filename" : "258px.png", + "idiom" : "universal", + "platform" : "watchos", + "scale" : "2x", + "size" : "129x129" + }, + { + "filename" : "1024px.png", + "idiom" : "universal", + "platform" : "watchos", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} From 0293f0ac7feceb1ee404925b5ef5ebe4af0d4e3a Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Sat, 13 Jan 2024 15:29:39 +0900 Subject: [PATCH 25/30] chore: fix AppIcon issue, add @available(iOS 13.0, *) --- ios/OTL Watch App/ContentView.swift | 2 ++ ios/OTL Watch App/OTLAPI.swift | 1 + ios/OTL Watch App/OTLApp.swift | 1 + ios/OTL Watch App/Pages/DailyTableView.swift | 2 ++ ios/OTL Watch App/Pages/LectureDetailView.swift | 2 ++ ios/OTL Watch App/Pages/LoginView.swift | 2 ++ ios/OTL Watch App/Pages/SettingsView.swift | 2 ++ ios/OTL Watch App/Pages/WeeklyTableView.swift | 2 ++ ios/OTL Watch App/Subviews/DailyDayView.swift | 1 + ios/OTL Watch App/Subviews/DayLabelView.swift | 2 ++ ios/OTL Watch App/Subviews/HorizontalLine.swift | 2 ++ ios/OTL Watch App/Subviews/ObservableScrollView.swift | 1 + ios/OTL Watch App/Subviews/TimelineLabelView.swift | 2 ++ ios/OTL Watch App/Subviews/WeeklyDayView.swift | 1 + ios/OTL Watch App/WatchViewModel.swift | 2 ++ 15 files changed, 25 insertions(+) diff --git a/ios/OTL Watch App/ContentView.swift b/ios/OTL Watch App/ContentView.swift index b59ffa6f..c3750c35 100644 --- a/ios/OTL Watch App/ContentView.swift +++ b/ios/OTL Watch App/ContentView.swift @@ -7,6 +7,7 @@ import SwiftUI +@available(iOS 17.0, *) struct ContentView: View { @State private var loginState: Bool = true @@ -19,6 +20,7 @@ struct ContentView: View { } } +@available(iOS 17.0, *) #Preview { ContentView() } diff --git a/ios/OTL Watch App/OTLAPI.swift b/ios/OTL Watch App/OTLAPI.swift index 2db6c2bc..46d3232f 100644 --- a/ios/OTL Watch App/OTLAPI.swift +++ b/ios/OTL Watch App/OTLAPI.swift @@ -171,6 +171,7 @@ struct Department: Codable, Hashable { let code: String } +@available(iOS 13.0, *) func getColourForCourse(course: Int) -> Color { let colours = [ [242.0, 206.0, 206.0], diff --git a/ios/OTL Watch App/OTLApp.swift b/ios/OTL Watch App/OTLApp.swift index ab04ba43..69b2e380 100644 --- a/ios/OTL Watch App/OTLApp.swift +++ b/ios/OTL Watch App/OTLApp.swift @@ -8,6 +8,7 @@ import SwiftUI +@available(iOS 17.0, *) @main struct OTL_Watch_AppApp: App { var body: some Scene { diff --git a/ios/OTL Watch App/Pages/DailyTableView.swift b/ios/OTL Watch App/Pages/DailyTableView.swift index 406a40b0..a839d6c5 100644 --- a/ios/OTL Watch App/Pages/DailyTableView.swift +++ b/ios/OTL Watch App/Pages/DailyTableView.swift @@ -8,6 +8,7 @@ import SwiftUI +@available(iOS 13.0, *) struct DailyTableView: View { @Binding var lectures: [LectureElement] @Binding var day: DayType @@ -65,6 +66,7 @@ struct DailyTableView: View { } } +@available(iOS 13.0, *) #Preview { DailyTableView(lectures: .constant([LectureElement]()), day: .constant(.mon)) } diff --git a/ios/OTL Watch App/Pages/LectureDetailView.swift b/ios/OTL Watch App/Pages/LectureDetailView.swift index 78480d5f..e56cc8fb 100644 --- a/ios/OTL Watch App/Pages/LectureDetailView.swift +++ b/ios/OTL Watch App/Pages/LectureDetailView.swift @@ -32,6 +32,7 @@ extension UIColor { } } +@available(iOS 15.0, *) extension Color { func adjust(hue: CGFloat = 0, saturation: CGFloat = 0, brightness: CGFloat = 0, opacity: CGFloat = 1) -> Color { let color = UIColor(self) @@ -59,6 +60,7 @@ extension Color { } } +@available(iOS 16.0, *) struct LectureDetailView: View { @Binding var lecture: LectureElement @Binding var day: DayType diff --git a/ios/OTL Watch App/Pages/LoginView.swift b/ios/OTL Watch App/Pages/LoginView.swift index 7db47cf8..5d50a49a 100644 --- a/ios/OTL Watch App/Pages/LoginView.swift +++ b/ios/OTL Watch App/Pages/LoginView.swift @@ -8,6 +8,7 @@ import SwiftUI +@available(iOS 16.0, *) struct LoginView: View { var body: some View { NavigationStack { @@ -18,6 +19,7 @@ struct LoginView: View { } } +@available(iOS 16.0, *) #Preview { LoginView() } diff --git a/ios/OTL Watch App/Pages/SettingsView.swift b/ios/OTL Watch App/Pages/SettingsView.swift index f6d3f4df..55acc692 100644 --- a/ios/OTL Watch App/Pages/SettingsView.swift +++ b/ios/OTL Watch App/Pages/SettingsView.swift @@ -8,6 +8,7 @@ import SwiftUI +@available(iOS 17.0, *) struct SettingsView: View { @Binding var selectedSemester: SemesterElement? @Binding var selectedTimetable: Int @@ -125,6 +126,7 @@ struct SettingsView: View { } } +@available(iOS 17.0, *) #Preview { SettingsView(selectedSemester: .constant(SemesterElement(year: 2023, semester: 3)), selectedTimetable: .constant(0)) } diff --git a/ios/OTL Watch App/Pages/WeeklyTableView.swift b/ios/OTL Watch App/Pages/WeeklyTableView.swift index fd608b3f..99fc132a 100644 --- a/ios/OTL Watch App/Pages/WeeklyTableView.swift +++ b/ios/OTL Watch App/Pages/WeeklyTableView.swift @@ -9,6 +9,7 @@ import SwiftUI import Alamofire +@available(iOS 17.0, *) struct WeeklyTableView: View { @Binding var loginState: Bool @@ -212,6 +213,7 @@ struct WeeklyTableView: View { } } +@available(iOS 17.0, *) #Preview { WeeklyTableView(loginState: .constant(true)) } diff --git a/ios/OTL Watch App/Subviews/DailyDayView.swift b/ios/OTL Watch App/Subviews/DailyDayView.swift index f635f525..0d973c94 100644 --- a/ios/OTL Watch App/Subviews/DailyDayView.swift +++ b/ios/OTL Watch App/Subviews/DailyDayView.swift @@ -8,6 +8,7 @@ import SwiftUI +@available(iOS 15.0, *) struct DailyDayView: View { @Binding var lecture: LectureElement diff --git a/ios/OTL Watch App/Subviews/DayLabelView.swift b/ios/OTL Watch App/Subviews/DayLabelView.swift index 967ddcdd..29e6dbae 100644 --- a/ios/OTL Watch App/Subviews/DayLabelView.swift +++ b/ios/OTL Watch App/Subviews/DayLabelView.swift @@ -18,6 +18,7 @@ enum DayType: String { case sat = "토" } +@available(iOS 15.0, *) struct DayLabelView: View { @Binding var day: DayType @@ -80,6 +81,7 @@ struct DayLabelView: View { } } +@available(iOS 17.0, *) #Preview("DayLabelView", traits: .sizeThatFitsLayout) { VStack { DayLabelView(day: .constant(.mon)) diff --git a/ios/OTL Watch App/Subviews/HorizontalLine.swift b/ios/OTL Watch App/Subviews/HorizontalLine.swift index 7728ee24..6587e7fe 100644 --- a/ios/OTL Watch App/Subviews/HorizontalLine.swift +++ b/ios/OTL Watch App/Subviews/HorizontalLine.swift @@ -8,6 +8,7 @@ import SwiftUI +@available(iOS 13.0, *) struct HorizontalLine: Shape { func path(in rect: CGRect) -> Path { var path = Path() @@ -17,6 +18,7 @@ struct HorizontalLine: Shape { } } +@available(iOS 13.0, *) #Preview { HorizontalLine() } diff --git a/ios/OTL Watch App/Subviews/ObservableScrollView.swift b/ios/OTL Watch App/Subviews/ObservableScrollView.swift index bea77f12..70165367 100644 --- a/ios/OTL Watch App/Subviews/ObservableScrollView.swift +++ b/ios/OTL Watch App/Subviews/ObservableScrollView.swift @@ -15,6 +15,7 @@ struct ScrollViewOffsetPreferenceKey: PreferenceKey { } } +@available(iOS 14.0, *) struct ObservableScrollView: View where Content : View { @Namespace var scrollSpace @Binding var scrollOffset: CGFloat diff --git a/ios/OTL Watch App/Subviews/TimelineLabelView.swift b/ios/OTL Watch App/Subviews/TimelineLabelView.swift index 9c85105a..0719e65f 100644 --- a/ios/OTL Watch App/Subviews/TimelineLabelView.swift +++ b/ios/OTL Watch App/Subviews/TimelineLabelView.swift @@ -8,6 +8,7 @@ import SwiftUI +@available(iOS 17.0, *) struct TimelineLabelView: View { var body: some View { HStack { @@ -26,6 +27,7 @@ struct TimelineLabelView: View { } } +@available(iOS 17.0, *) #Preview { TimelineLabelView() } diff --git a/ios/OTL Watch App/Subviews/WeeklyDayView.swift b/ios/OTL Watch App/Subviews/WeeklyDayView.swift index 8287a26f..be9db3b7 100644 --- a/ios/OTL Watch App/Subviews/WeeklyDayView.swift +++ b/ios/OTL Watch App/Subviews/WeeklyDayView.swift @@ -8,6 +8,7 @@ import SwiftUI +@available(iOS 15.0, *) struct WeeklyDayView: View { @Binding var lectures: [LectureElement] diff --git a/ios/OTL Watch App/WatchViewModel.swift b/ios/OTL Watch App/WatchViewModel.swift index 28280492..e3582871 100644 --- a/ios/OTL Watch App/WatchViewModel.swift +++ b/ios/OTL Watch App/WatchViewModel.swift @@ -9,6 +9,7 @@ import Foundation import WatchConnectivity +@available(iOS 13.0, *) class WatchViewModel: NSObject, ObservableObject { var session: WCSession @Published var sessionID: String = "" @@ -27,6 +28,7 @@ class WatchViewModel: NSObject, ObservableObject { } } +@available(iOS 13.0, *) extension WatchViewModel: WCSessionDelegate { func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { } From 7c0b94ea9a2bb1a1373d1ac400ec6e1c10b07478 Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Sat, 13 Jan 2024 20:21:13 +0900 Subject: [PATCH 26/30] fix: archiving issue --- ios/OTL Watch App/Pages/DailyTableView.swift | 8 ++++---- ios/OTL Watch App/WatchViewModel.swift | 6 ++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/ios/OTL Watch App/Pages/DailyTableView.swift b/ios/OTL Watch App/Pages/DailyTableView.swift index a839d6c5..aba578c1 100644 --- a/ios/OTL Watch App/Pages/DailyTableView.swift +++ b/ios/OTL Watch App/Pages/DailyTableView.swift @@ -8,7 +8,7 @@ import SwiftUI -@available(iOS 13.0, *) +@available(iOS 17.0, *) struct DailyTableView: View { @Binding var lectures: [LectureElement] @Binding var day: DayType @@ -55,8 +55,8 @@ struct DailyTableView: View { NavigationLink(destination: LectureDetailView(lecture: .constant(lecture), day: self.$day)) { DailyDayView(lecture: .constant(lecture)) }.buttonStyle(.plain) - .frame(height: Double(lecture.classtime.end - lecture.classtime.begin)/30*24+(Double(lecture.classtime.end - lecture.classtime.begin)/30-3)-1) - .offset(y: 51 + Double(lecture.classtime.begin-540)/60*50 + 1) + .frame(height: Double(Double(lecture.classtime.end - lecture.classtime.begin)/720+(Double(lecture.classtime.end - lecture.classtime.begin)/27)-1)) + .offset(y: Double(51 + Double(lecture.classtime.begin-540)/3001)) } } }.frame(height: 801) @@ -66,7 +66,7 @@ struct DailyTableView: View { } } -@available(iOS 13.0, *) +@available(iOS 17.0, *) #Preview { DailyTableView(lectures: .constant([LectureElement]()), day: .constant(.mon)) } diff --git a/ios/OTL Watch App/WatchViewModel.swift b/ios/OTL Watch App/WatchViewModel.swift index e3582871..aa5fe5f9 100644 --- a/ios/OTL Watch App/WatchViewModel.swift +++ b/ios/OTL Watch App/WatchViewModel.swift @@ -32,6 +32,12 @@ class WatchViewModel: NSObject, ObservableObject { extension WatchViewModel: WCSessionDelegate { func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { } + #if(os(iOS)) + func sessionDidBecomeInactive(_ session: WCSession) { } + + func sessionDidDeactivate(_ session: WCSession) { } + #endif + func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) { DispatchQueue.main.async { guard let rawMethod = userInfo["method"] as? String, let method = WatchReceiveMethod(rawValue: rawMethod) else { From 111930cd991d1443bda4a8ae2cf69bae7961a0b4 Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Mon, 15 Jan 2024 02:20:39 +0900 Subject: [PATCH 27/30] chore: format dart code --- lib/pages/main_page.dart | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/pages/main_page.dart b/lib/pages/main_page.dart index 78252bf3..0a876744 100644 --- a/lib/pages/main_page.dart +++ b/lib/pages/main_page.dart @@ -87,13 +87,15 @@ class _MainPageState extends State { final cookies = await cookieManager.getCookies('https://otl.sparcs.org'); for (var cookie in cookies) { if (cookie.name == 'sessionid') { - await channel.invokeMethod("flutterToWatch", {"method": "sendSessionID", "data": cookie.value}); + await channel.invokeMethod("flutterToWatch", + {"method": "sendSessionID", "data": cookie.value}); } } final infoModel = InfoModel(); await infoModel.getInfo(); if (infoModel.hasData) { - await channel.invokeMethod("flutterToWatch", {"method": "sendUserID", "data": infoModel.user.id.toString()}); + await channel.invokeMethod("flutterToWatch", + {"method": "sendUserID", "data": infoModel.user.id.toString()}); } } catch (exception) { print(exception); From a8ea04ff3765527b228266ec4f2012ca8bba4127 Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Wed, 6 Nov 2024 20:02:14 +0900 Subject: [PATCH 28/30] chore: updates bunch of outdated --- .../AccentColor.colorset/Contents.json | 9 - .../AppIcon.appiconset/Contents.json | 13 + ios/OTL Watch App/ContentView.swift | 18 +- ios/OTL Watch App/OTLAPI.swift | 332 +++++++++---- ios/OTL Watch App/OTLApp.swift | 10 +- ios/OTL Watch App/Pages/DailyTableView.swift | 1 - .../Pages/LectureDetailView.swift | 1 - ios/OTL Watch App/Pages/LoginView.swift | 1 - ios/OTL Watch App/Pages/SettingsView.swift | 15 +- ios/OTL Watch App/Pages/WeeklyTableView.swift | 17 +- ios/OTL Watch App/Subviews/DailyDayView.swift | 1 - ios/OTL Watch App/Subviews/DayLabelView.swift | 3 +- .../Subviews/HorizontalLine.swift | 1 - .../Subviews/TimelineLabelView.swift | 1 - .../Subviews/WeeklyDayView.swift | 1 - ios/OTL Watch App/WatchViewModel.swift | 21 +- ios/OTLPlusIntents/IntentHandler.swift | 1 - ios/OTLWidgets/LocationInlineAccessory.swift | 1 - ios/OTLWidgets/NextClassAccessory.swift | 1 - ios/OTLWidgets/NextClassWidget.swift | 1 - ios/OTLWidgets/OTLAPI.swift | 1 - ios/OTLWidgets/OTLWidgetBundle.swift | 1 - ios/OTLWidgets/TimeInlineAccessory.swift | 1 - ios/OTLWidgets/TodayClassesWidget.swift | 1 - ios/OTLWidgets/WeekClassesWidget.swift | 1 - ios/OTLWidgets/WidgetBase.swift | 1 - ios/Podfile.lock | 2 +- ios/Runner.xcodeproj/project.pbxproj | 246 ++++++++- lib/pages/main_page.dart | 14 +- pubspec.lock | 470 ++++++++++-------- 30 files changed, 819 insertions(+), 368 deletions(-) create mode 100644 ios/OTL Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json 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" From 695613b0699b0d2df7e844e48d0cd96fe4f62e83 Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Wed, 6 Nov 2024 20:42:18 +0900 Subject: [PATCH 29/30] fix: many many errors --- ios/OTL Watch App/ContentView.swift | 14 +- ios/Podfile.lock | 2 +- ios/Runner.xcodeproj/project.pbxproj | 22 +- ios/Runner/AppDelegate.swift | 1 - .../AppIcon.appiconset/100px.png | Bin 1431 -> 0 bytes .../AppIcon.appiconset/1024 1.png | Bin 0 -> 51147 bytes .../AppIcon.appiconset/1024 2.png | Bin 0 -> 51147 bytes .../AppIcon.appiconset/1024px.png | Bin 17835 -> 0 bytes .../AppIcon.appiconset/102px.png | Bin 1442 -> 0 bytes .../AppIcon.appiconset/108px.png | Bin 1536 -> 0 bytes .../AppIcon.appiconset/120-1.png | Bin 4811 -> 0 bytes .../AppIcon.appiconset/120.png | Bin 4811 -> 0 bytes .../AppIcon.appiconset/152.png | Bin 6373 -> 0 bytes .../AppIcon.appiconset/167.png | Bin 7000 -> 0 bytes .../AppIcon.appiconset/172px.png | Bin 2215 -> 0 bytes .../AppIcon.appiconset/180.png | Bin 7800 -> 0 bytes .../AppIcon.appiconset/196px.png | Bin 2568 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/20.png | Bin 757 -> 0 bytes .../AppIcon.appiconset/216px.png | Bin 2763 -> 0 bytes .../AppIcon.appiconset/234px.png | Bin 2934 -> 0 bytes .../AppIcon.appiconset/258px.png | Bin 3313 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/29.png | Bin 1082 -> 0 bytes .../AppIcon.appiconset/40-1.png | Bin 1499 -> 0 bytes .../AppIcon.appiconset/40-2.png | Bin 1499 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/40.png | Bin 1499 -> 0 bytes .../AppIcon.appiconset/44px.png | Bin 761 -> 0 bytes .../AppIcon.appiconset/48px.png | Bin 802 -> 0 bytes .../AppIcon.appiconset/55px.png | Bin 882 -> 0 bytes .../AppIcon.appiconset/58-1.png | Bin 2242 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/58.png | Bin 2242 -> 0 bytes .../AppIcon.appiconset/58px.png | Bin 910 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/60.png | Bin 2332 -> 0 bytes .../AppIcon.appiconset/60px.png | Bin 932 -> 0 bytes .../AppIcon.appiconset/64px.png | Bin 1013 -> 0 bytes .../AppIcon.appiconset/66px.png | Bin 1023 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/76.png | Bin 3046 -> 0 bytes .../AppIcon.appiconset/80-1.png | Bin 3247 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/80.png | Bin 3247 -> 0 bytes .../AppIcon.appiconset/80px.png | Bin 1173 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/87.png | Bin 3537 -> 0 bytes .../AppIcon.appiconset/87px.png | Bin 1301 -> 0 bytes .../AppIcon.appiconset/88px.png | Bin 1312 -> 0 bytes .../AppIcon.appiconset/92px.png | Bin 1365 -> 0 bytes .../AppIcon.appiconset/Contents.json | 255 ++---------------- 44 files changed, 44 insertions(+), 250 deletions(-) delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/100px.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/1024 1.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/1024 2.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/1024px.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/102px.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/108px.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/120-1.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/172px.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/196px.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/216px.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/234px.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/258px.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/40-1.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/40-2.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/44px.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/48px.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/55px.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/58-1.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/58px.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/60px.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/64px.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/66px.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/80-1.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/80px.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/87px.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/88px.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/92px.png diff --git a/ios/OTL Watch App/ContentView.swift b/ios/OTL Watch App/ContentView.swift index 61587f4a..e5d41fcb 100644 --- a/ios/OTL Watch App/ContentView.swift +++ b/ios/OTL Watch App/ContentView.swift @@ -8,14 +8,16 @@ import SwiftUI struct ContentView: View { + @ObservedObject var viewModel = WatchViewModel() + + @State private var loginState: Bool = true + var body: some View { - VStack { - Image(systemName: "globe") - .imageScale(.large) - .foregroundStyle(.tint) - Text("Hello, world!") + if loginState { + WeeklyTableView(loginState: $loginState) + } else { + LoginView() } - .padding() } } diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 4de26fe1..09997890 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -284,4 +284,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: b34ba01b6d31eabe4d020b5ccb7ac5cba06d49cf -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 4d7ba692..fc67bd13 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 70; + objectVersion = 60; objects = { /* Begin PBXBuildFile section */ @@ -156,7 +156,17 @@ /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ - 8B8DFCD92CDB7A4D00AB82CC /* otl Watch App */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = "otl Watch App"; sourceTree = ""; }; + 8B8DFCD92CDB7A4D00AB82CC /* otl Watch App */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + ); + explicitFileTypes = { + }; + explicitFolders = ( + ); + path = "otl Watch App"; + sourceTree = ""; + }; /* End PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFrameworksBuildPhase section */ @@ -388,6 +398,7 @@ buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( 3E2C132D3FA90843D090112E /* [CP] Check Pods Manifest.lock */, + 8B8DFCFC2CDB7A4F00AB82CC /* Embed Watch Content */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -398,7 +409,6 @@ 894C64DD28C8F8FC006549F9 /* ShellScript */, 15CBF360D6B4E9B07E2BDD87 /* [CP] Embed Pods Frameworks */, 5C2D6AB38132B2D5EE10E87E /* [CP] Copy Pods Resources */, - 8B8DFCFC2CDB7A4F00AB82CC /* Embed Watch Content */, ); buildRules = ( ); @@ -814,7 +824,7 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-iOS"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; @@ -1329,7 +1339,7 @@ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-iOS"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; @@ -1370,7 +1380,7 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-iOS"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 333f0fc6..d3135d06 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -17,7 +17,6 @@ import WatchConnectivity session?.activate() } - GeneratedPluginRegistrant.register(with: self) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/100px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/100px.png deleted file mode 100644 index 6d3b7080cd336a07552996bcf7bbaa67ab5d94b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1431 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024 2.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024 2.png new file mode 100644 index 0000000000000000000000000000000000000000..5aa01c455d6eb4c28cd4732da4548d35e83a7ef5 GIT binary patch literal 51147 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024px.png deleted file mode 100644 index db3f214e7b7a92000a0322c5d2c54b0bd1f6db3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17835 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 aQZdM)H=~7J3h9#|6@YhgcYJ7nF5y4EDwh@j diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/108px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/108px.png deleted file mode 100644 index 027c2883748afceedad2733a7edba82b533c9913..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1536 zcmb7E`!^E`93PTlG>>Rh%-p+dvFU-NVvLEcnRhj{bv;U#WUZD;9-GQs=270SX3`L? zXv-p{s7V{q#qHsBTi)Gy<AL6F+;$D`CYif*69tUQv*RlqIeg*6@;{dYA8wYw=H}-uCB7PPIwe4v|d|buU zyt0`*)@7jOiez_Ju%3PY=8vI7Fk?i9X{L^p@_Jrsl{~rQMZOJ7-Ohdrtm+D{-budE z|4j>urnNeDSG;egXMw?1)eQ}Vg`_As^=lw{%$C#o?OzlrbkuPPA2T~%JH4CzFi6nk zCDYq$xwb419Dz6W-bLM;UjbnlsDPl^u296$cFr+c!Q*O$0YXKJ^;lb3cp?dRir&LX zcsmQWuJ*b6_P~Bn8bQ`(t}tx7HFxCJ8am~r%V%25xi9OI-OXE3h-QB(oLn=xnroq`*a1 zkueBlMXosp7wF{MFh|_cg=l!>PL!N#X`cv(I-fWMZ9J|?$yxw<=w}_0jghWs_n3ddahZ#&-_l+VLlnMDu9SVv=D`nz~ zFLmA$rlztLRrZ=HL6lw^1DehDonJlQW&|l}(fSWbmixkw|6!Zax^mFi7{d8G9H@z- zT;U?aa30%sI3^g3d5GM@dE4fCouI04Nu=nJ#Ry?Ng4o)`)2^|2pms2~k5=ZNOm6}D z$`O~B)O1v-*a!_anqWK)sV1+b4kjMf>sNtFUJtfm-DS8y;#DwDHabt!d_80V%Vzr! z!6@$v{-eb-{ttfdS3iaVIJqJ|n8RN))4fDwXP$8&N7?oEz)n112%O)EO{9mKrPjkF z%i>(S5i{Omz5GXfN$K-?2nO>2om1PHZoGVj-YhMhq~;yWnR;A=K-x=E&y$0FEV{e) zVPl3DIDVLFoV2x&`}+EwD?wP+Gs>&2Mdei+2)-lrR++3I%BpNMWgAi&k*r_8EtCg8 zx$>-=YW&`UiPiDhF0mmmxcb=@af2++Hr~x1)X}rrzC1LMKzlgkSx`87rxy*Bm-AE^uzc!peKr;&E(Rc6On`GBHZItm%4 zRPpb0T_m|Z?|Q#gpi}C7-8hX81#!i)=|XcuH?5r;Qo8ngap38sv0fH~%0zuA7EjMq z3ryx6@V8;GhLX=)Vf|?m@KB%XG(>-iovSZw?7eyTgmApT@Qv|QUdhC#seM$}O{5@H zLs#+mK&)F%+qG!C@M(uZ^o1uw4DB3e&GB=~%tj5a(O6liZGv7epV@X_7ott=s3aBY z11Vxchy@Kb2)^dgPTy;4v@00YR7V$G**9|$9BMn`TK*5Q{qj>+l>w8|t43js9vps4 zPb)tmyUkg9;QN=seet*F)HPHBg2Ex`gW@x4r=^sl$1JRoT3+3$D0!4<(N;%xXl+@u z5G`Q;5UyU+P(1l$-l7>9&kxDDAO2C>jo)ESjNMepr-$xFUw-OxRb=);exp+iel*22 vJ)T@;aUxe)`tk5)n!>&!sf?NMOPDpAX4dk!Jw!j{U;{j{1h-nu@x=cDa4W=m diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/120-1.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120-1.png deleted file mode 100644 index 59627cd30e46ccb63e1b6ab8e1f3de5b53de0f03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4811 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 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png deleted file mode 100644 index 59627cd30e46ccb63e1b6ab8e1f3de5b53de0f03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4811 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 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png deleted file mode 100644 index 3223a59e23ef8a9f13282329b98b83a5feb539ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6373 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 Q|GpS>H4Qat)nJJK0k5U-DF6Tf diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png deleted file mode 100644 index 91b6141bb9493f2c5149449bd428b0cbf9a372a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7000 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

keK=4H5pF#A}^b_{7doxjD`qH~8Qvj!$z9 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 H5~%+G*aIg8 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png deleted file mode 100644 index 962e63f2adbf371dc195124359b283d16f5bfd15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7800 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 Qf2^3NeqVtU)59{b zw$!IfuqX@McNJe+4rt9EM0eTTg;<0NhQ9rJ9pNyx-?G~9SO2qk$-W;qH=q8+<%Dtr zvuonHhbs99fA$Y8ajMLtYRdk*gxCIuckty5m3xwBZR*r>5oEg90=cDnR#W#A5-;D`QB(#S(Per&j)(g5!ScyByIP(Z9=3y0 zmA4vNboJFe^x=ZP2t0P?OC+ZPNdK7l;Q0GcsR*+Lp}9suW_YKi0{8cw4p^(8_qB3w zxlLc%2&g5F^D2|}qRlS=UX&ciujqGsX&P#Puq2Y*VesAts!wh z0a6UnOxG`S+XL2G6eCa|H3>;dS4(|n=N;=SWk3Q4k74=Gfuu&7>B(rK!)FU4FtEXJ zNj%|m6dcdOXD0ZEEnA468Eo+&RtCqxXKv<DtXF+}27=6_r)SLDUmH2Do z;*MCU1O1R23L9LmYz&GMZNT2MDHJK~T-# zGpo~tgprHE`ub?wSn;D1H*=a7?Rq{lb>ZQZcdFn*FN}?qI){SHpL|&Y-?>`pIEq8E zrmueyxnQ?%YpX*=eBaiMfZN3sn$6R5U2XAwvmn)$89Dhz1G@`o?}T@-t6Pl@yGBs= zdZaE>e+QsrfK*Oid%g2dg?;sky3qiJ;@Gnn><%6NI$S)7|03}HINyMa;!qM8<`p&U zNAb!}Q^zU^c(+`vr?fS@pBXix%K+WiwExzZH;w~5S#xn3F+NdQQnSdkP9yGkE-V_F z;2Rs_;rurG7 zB)!iyAZeG^*YRAevGGpKnW{+`U{O9*-MbLj~bHuu@wc+=h!>%`ZNGm0O;s*8C1gl?m|9x`&}9JgH+gMFUmJ!W5eoX zzb|&_9m1F+fa-{WA@FdiD6(;EFqh%sQ8!;?Eak+C;5E5MQc#%G>RP`J9Wo~R-9`}B2Je!rM7ou$%H6Qe5^y|e`=*JM*aB%xAK zu+X{dI}=>mmMb@VRowEXwVoRQwR=+vI+L2Pmc-kbqd}2~P>KCB`i(HSBu21@JtV-_ zGW`ZkWQT$Zi~+RdSZKm2?&fpblI!jAG|Gx@o4{Gx6%Xb`^mZ%{t(8>-;7l1?>UNxm z37PpJuVTqy)WKVtO97-N?bz*d+;q&|DsNedVR*x&E>?m{^yZdg0Co2D&I1gR_sscn zN*(Ff{(S$Kl)oRIl5G-)ngZ&`rKys4yYD%_{b`WZRj^Qd!`uRaSTK-H`_~Jmb zqsK6%=5~=v+!xg{A{&{_n7#f(N_$j<`aji6ut-v9+Rhbrx>N*q0`kNQa*R|t(c&ereJgD0FyQGi#&tzLe7#Wc%cORU@w=J&1SVSScdSf-SU)@Mbvx z1B!V1%FSVP=A*s25O^gta-Gzw3!a1Ze5Dy=hK0aHJR?5V^I*&J$^Y)^-kW=J)ae(> z3D+@R1@SVnOnKiW>^8>j=eSgZ}9MLu#KXZGNRFDp4;84f1xrIrKFLmpD#-QB%eLIpDUe6CT7u-lYYoH&%O{fdx_%k(BAH13L_82fCh mDGGXY?lBY%)%zERP%kbD74cfm4+ekSAiI6{kVQU6S^oe-`)%w1 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png deleted file mode 100644 index 277e3d3425671a99b7007e6b1739e66a9d2840b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 757 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 Iwzzx$0uAIGfdBvi diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/234px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/234px.png deleted file mode 100644 index 9e652ca6c847c55684c1258dc4142b3832009cec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2934 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 wPg3xO*QS^s%-+7dhhpr6S=O=#1-Tf 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 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png deleted file mode 100644 index ae9cbd5337600e893242937f9d104e0d3c8c25cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2332 zcmV+%3FG#OP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91JfH&r1ONa40RR91JOBUy0E^%0TmS$FhDk(0RA>e5T5XJ6Wf?v9-kI5% z*_qjv?YjN2DJqpH5+iB|jglBpVSApN-PDW(1x~jyKT4aQrw;0`MzJC^Ue&8!?d#Pd)L+WZMySy@15to=XuWaamQ)S z&BZuJRun~W&k?L|!8{N6t*!V!eR7`RWkGD5oQ^I}hEu7;_I+6bj%MBj948Ub%Lg#s z*cr+oID8D1`yPaoCd&!9_VNK7F>VR6{_vA%y|@=qwGMcmb3YLZ+qQ;8C)zIJRq|wX4Ns z!yC?H=2w40`PmoX6^0RqWaxCuu$zVd%6>GT*#)OScEgadn?`uzB*Nn-&2yV-Z4I!9 za>$N=PyOItM2!ZV|Huwca$VGZ^C*SN*9GX#+##M9S8E6+k9Oi%Z`xV*0Mni>%W~`E z_x}#5QUP%g4z`pV2+sG>6w!QDs|jww&S|{*;zhXWmvYzR!5>UU%}K5@1wCS z9{QKqr5d+(y^7Y(-G*tS$lc?35#``;`UIjk=d8N5b->1E3XfMTVD>M6#mOCyAvIE@ zfc3gI+2rfm_D4HA)WfbWAQz@`M{^YfQ`1(3D;dDX=ooG`gTp_%A1$h_o5{4niCwC3 z^KUP+gxvFXc6F|nT%4{R>^sy>O_t&~LBJfC4Gp0&bqq&-{ByYZPAn5h-16J(p0278 zK&rK=xFmeNF>ZF`%>EbF^*>$$95WtL;(wjBW7s))IIkisMHX%PFCJk{%r^AAhdi>Ila+>w{CTh+xNx# zDNa4z+sTan=l5spT3!3BKPCrQu}k+{ z&Dh1B1MtbPap(Tnl_E3!xD=<-9bctbu_CirX!P$`GJwghSjt|w4x?9o9F=Wim(6{D z>`IYYoTzUu-F_3iHDjIbC>gT^KA9^MfY=?saWmrG``{luGLYSvY-=1_xa9_9KJo#& zb=9gO_p_S_U{zM?VYBaDkI_w+p~8`m!_m*%iVPm-`T@ z6n;{WOO+KEE6O^bEYw5x8VX>{jXxlo{I%3YuY>8w9Fy$T+UeO`=LQm+Ko(U?-K~ zGDDa^-g|u1+=^P zxvQdsEQ)=tOfHK&<9o%W@5cqVPMASL%-1&RX~*WTcr>958GHV(A3>EZV1xZ^d2Swc z4dMihE-m_`&b>>&u90`-czm%`M3x(q``Cw2yz^!=`%>p*2K2oroxyW`k2Qu3Ai811 z6m;T&9Rynb7o%j)xH~~9=Ncs^%L49^-4dsq#e5!FG8>f_kon|CQD9!yTq~y6*ot56 zkv)cKye5sUBgawZtT~vkBAhM5pPlFbGJ?4U1axcV=ZGU7kMUSwF;d_rrFF-j8xYVN za-X}>bV^3(=q)zE8c(w6(qdVCtf!8s6Q|0jCa*FLMZ9+u@%{Sa&!P5{Z6*zw&$;sv zH)8nu&!X_PFPi3G*Xmy547_*XDRy02Um-Uodp=W>30Cv9PTOvNrWsXA^JY#y6wXGE z2`pxsDtzfW(-xZkw{tCXy5&FiVz_IVfGLIaFXm#WkVSpR<7jdK@3QCsl~)^7yln!x z&8oIoTIy6@BdKK{@E}X&o@6%qM;SFLxT|}>EygF^T}?yo)0;SSUr4-;mTAc}5B;Di zP#VeBA9{?pPiEQ-szbW#7G$r!f?(&D1gy+To?)@eI}qWaY1IGtq)}am>1X6STamu> zVoo{4tlcqA|9rE+T)9UeV_6q|*SZ*N8Fed`&sOA9u6hE+k)mHk%_phkDr z2xsK(Tj7nb>ddT`j@d5D2{TN!Wvo_yx((@#7h=Wtz6qDzlkV;>r5ks_>M=RdVj6PU zJk+rC(<&*J#=fX`y{{wGd7=NL{&s?U`rtp5b!(5G$Uj`d&w0000F diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/60px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60px.png deleted file mode 100644 index 498020d54b605d83415864a39bc535657d759216..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 932 zcmV;V16%xwP)^wIDG41G zqCl7?2olNUaAKSIc5E}xW*x`zv61{H)_T9j*6gn2PyfuD!>gntkpemh6&;2tY;;Uv zqhksi9aGrow3Tpb){lHV2~OHdIPrD{x%nVCX&d2Ux+`I9{O%B8N|(q6eu9&>5Z2Nq zvVl2p(sJR%+&prz_|BgBpDs~IB#{q=!9~l3NjCWMz3%%f)741(zkv&uF1~K8zw>l!_Ia3!7bRUuvvdir!X;(l5gdP4 zE?^{@oStp^3@t!7#<3J(>e|}eOogftPc?nUc76z|(~ednZD|?(^hMX$CAtRs;JPsa z4x|Ym9J^F^8mdI?*$2oP8*m|G`z7xlqrmKi9y!ZZXA?*VfQiS!U>$p73Dod~n z>rK~jq(cU zAMPSmO&6G;bYpL(YFcApnsQOLRmdci@lW+MX^mw^{8HmkgQkY;zO!%^#Oo&=oDO|7p1PWqzeCi{G$Awj&Qh6H5wsJn3C20 z`=za*tld#H(vEnvvAdhHgp`C+;#ii(uXA)n$|k=N?83!D_0bRat*gZ%wcD`I!|~Ts zLi9A-QgNrS3sa$L7g<6v--tIjrm)d5g^i9WY;;Uvqw^1kFnQ32#my-I00004@@9Y5*Nm}P|OTtP) zjglISrn*3R7}0i0Tj-4UluR?0KBkHHba3WNCWVAuNk;uB;eO@Q^;IW&stzDeQhE}j8P_n)AU)@+Y2cb~}b z<{3~(XR!3(sqOLQ?h_=6u5CajQggt{<0+)xBE`>_& zn`|Y&K_=1#$bVnM@nTyfqv*8leXNaX&*Ro z6tZCzz^?ltA(T3F1{|;na6kla$NiSxgNR-l1Q#p<1owBLQ@C2seM)+JZj68v76IY| zr=h=1)O25ogr#TvN=O%g+;11jEc1M(=D66EVfNq&=>m}Z#$xTY&z12jAyoj={c4*X zx?w;I2az^(q{I?wWDD(IA@y9Kn)?)ZN|eRFwG4D!2kt&9J@ZFZsC~T%_w^vSue126 z9_|tMBaneK0ZjL`JL9E$I|8o&^$XNF(&h8{(7HE{?$OKepE?E^NE3kEFU-C!er+dk zE5Tp@YAA?UM;z_9u8Z2B8?ullz@8(AkeYmfUn#Ajz}sRGgaQGUMu?CmK=$1te)tq@ z2={9RPt!amYJjLX3vBWGx9>3pPbge}DVkeeEA0!?Mrlr5`RQ4x;(MQ>l*VxePq3X1 zQ%0w&$notRp|mCN;x8lmfL0N_5($BerX7!$_XWZJlcN7W&l)_@6alhRGk?_v6nyOJ zFq#3o02H{jFQ77*tM{)2`<56@ebfDB2T!oh0P7KWMC|v4&-J6(unJ%%K3eaz?wtUe z0CWhNn_ocN?NO_Sl2>_Sl j2>_Sl2>_SldIA0bENGE2uSCl}00000NkvXXu0mjfx3JL! diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/66px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/66px.png deleted file mode 100644 index 023415e813e04e6d1f8fab9b96d72d499a55455f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1023 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 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/80-1.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80-1.png deleted file mode 100644 index b158fb62acd207b1d1d8ad20a0403a5a37ed2087..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3247 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 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png deleted file mode 100644 index b158fb62acd207b1d1d8ad20a0403a5a37ed2087..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3247 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 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/80px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80px.png deleted file mode 100644 index fe277fa2cab75ba24a12333f92c18927f8ce81a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1173 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBu9l~ZV@L(#+d1dGLjpyPpP#+#=gSqTUJ@D^ zj*k|#zCD!s^wbKmtp-cP{@!ps{fn6?{Nkck(U5MXLs6`mZ+pxlMI?k5E@b<6LVj`Y zx%ZOQ&tFasyx&v&{E+qYhkp+|cx;ttS95>w^Lgd9QALG?q9Un}nOa4>7O3DyePT0a z_cECFiAhx3GVHXB>g*HkcMZm3w8L|)-tbr8L83!XQ%%BGe7i%I(oj^Fa>fg<&W$=dQxQ)M^7F1;rsjQ z7Vg)aVkaCEqoEMps{S>4=M~na5x;y^JaaT^y!lk(PvwU_OWwbmV%L(Tshx|IKE=>2_sQ5V?D4tpikevj<<&d;@c{in3;dWG@<2iy{R z?do@af77@lE~Z=H%`2AjWZQs)ZVJo%x8!iXD4w@}v8+a-;su}iC+%_R`GmABY92lm{JW6yZ-d#Gj}UG zYSI_o{ClqD#rLi3FMn7VudM&j;*^#4c6s62{?u#pg`eMFHe*{&K%8i^?Z#tYmkNJ; z7%#B*_HJL9N4fTVqOs`_CL$iEW(0ZE|47l~pT8$G<`s+H29bXUr(Sk;2rV+zc#57(8A5T-G@y GGywpucm|;W diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png deleted file mode 100644 index 3a2f1376bdc67f38815acb6698ef81a98aae3ff1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3537 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 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/88px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/88px.png deleted file mode 100644 index da51a17a5f7ad4af56d9454ea3e20a7172503b4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1312 zcmeAS@N?(olHy`uVBq!ia0vp^5g^RL1|$oo8khhn&H|6fVg?3oVGw3ym^DWND9BhG zhEi$dEkHF9lSB73_p^f{kTXggmkqe{yWhK}9?Er*&II2Bz4xHMce z{-`tw{8ue|QxM;tJX8Dj&hN7pe}4ALCP?LW*L3y#eV^yPm$BZqYs(frvD_m^7l~>| z7>8|0Ta$1$;^3@}O{U4L*~hr9^@y&KM3WG$o_5ICaG|Q^zLXHon@xKe%04 zG2&|6(W;$JlarF0R`-iP@qOUCo=G$9z>Eh+Po56iVW|7}k?(pZ-HK&~QA%n2@)N5z zswBRg7T2(@iE%MV!_$*5xrL_Xy<}Z+xcBJuB&o;UcNRZRcfR^K?qz7m^7JDnBC$u_ zJX|a^1;}3`cqNhRV8okw^X7f|`@8NE_bQgs8O!+Rm3z0|XFcy<#rTh7nYoNf)9a&~ z)(2gjGfnqL{2m|vx)o(b-qY8Af77cd_EeE$8M}Q+^wYS#A5UGm>hO|v+4eIfO}oDy zOT5GlRI1T#`=a->F@Ie3S|dwQi@gWFJZLYQ_3gv{$!m`bL|fXcCU)@ipFFTm(U5iR zgKzh4?M#OROR1+6PzOCEombw&KMXEBhMV znfb?$nrvyhZ~3G4#TPaE-#0}6Of_)O+%f-4Qs8O-KPox_Tzs?RPTc+Ye7(@=Wv#4M z2mdZHxBs~KV&6jHlBUDU#Jg{8+naodZR&#!FMW5vPmH{>CxFwf%Fvo)(!C=uswe%f zoWH?IIb!Mdl1Fpie@_TJ?AI$PbIM7o6R>pdr#=Xs~)xXj^qSJ_!T-6DDM zp^n0XT6_1lz0Cf)OJ}z|YiV$L+Bw-1=S|OlxOH=at&i%x6%Wo{;@+swrK&mYuk6n$ zwvQfv+>z40?ex6*|5;t;je!U6UXl)3Bi?a#@#!0%_r3Y?c!CPgN!DX5%kR|3=U4p} zo$aNn`h3Yz&*iEgzxj2Uotu$xBJ}0k@EoPviCY$nRTsUOx6|=W z(Mp|OH{}b}p^_43QdQ-;x5gd6R%w0l#HAStGRxQ3|7=aM`|H6rPsi-NGeb;jZ0*+_ z!WzteR!^rjoykr*xNWcej_BvkA)g;eyf**;aNVs{+H%`#6!sUrUUy>Z?6pP@R89Zw zd{Tc?KS$zy^X^9BRCV)BAD;+spL1qc@HV}ojhi<=K4tg9v>|;O_qLV?PwV?iYv#u4 zEzlL@QrUhv{a!$RVEN63;%{UVllXcRtsno4R$sxoz9KKgNv|sA^7VyH4%!k)r*qA< zW|pNpE{J_{%f5SK=u@UsEZeuI-uN|ZU(+rADNR=o9Wx8(V4j;WM@M;Y#=#=?eYYG3Cj7We~5%$#ivt``PxJxasdZFG9rtynL8BJ#LQl`Dv}m RGQa|j!PC{xWt~$(697t-bxr^P diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/92px.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/92px.png deleted file mode 100644 index e69ad495c072ee108c05c487cb1a11b8de627a74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1365 zcma)6YdF&j9NyfwC6_tKp$n-sw=T^68n)09BDX2WWvLj-r8rWAGNE}CL*z0QJIt-Q z%(K*ZPIF}B=xp?NTRWX$Wo<5T*4Ojte0YEF^ZtIn_x<=5_+rtjP(3IJ1X4YParcvP z*bk^E$>#jZ_<0#Y2$}+flMgGx}J6gf!ZFxwk|5l zs)p|+`9dr1@eT@)+qoSL?+ z{UVhHjbn^_^qTQN={u(J(_C*)Sb3qg`5v>d;~_m!9fXnp93BrsYqo7XIT4L2#6hUV z;)^xQ@@9(y@32Kbxk?hN%cOO}%XRXx)8&t5x+BPL(++8iZI>_kOss z-D#s({>24i9hYiPPC6)O+~>$snsf+kntQ%_qZY9@0&jlQ+uEP~%XQ=cEGv0cfvp%L zi0LUh^Po@zI#5n}XJT8C@#wI{`G&uqlxBG%Tqah_m5b7lW`P0}1w5Ik0+iKi=sDdi z`Uy`;x3?Z4qqO1_188!g7lHow;nCJg9v793F6o+n#LM5?6wuxk){Y?AQ zUF{cQkI=+Rx$`83IlN7_i_r564!H!LqQi z17i(cW$LVO7wmYZy_a`z&<1#pTnB+Fh?xdvW>p|~Ko+KL0I9g56ewkyeYdozOe~9E z#*}{ERMEfyB9H#HJas240w;RQomI0Epbr`KL9m1Wj>>pX!(glQqF4zs( zdm*7oV6NqDi8_l9Tdc_-)zD7XGAa<@j|X|C8(*Wc1kaOUL5DQEt}cWkoTmS⋘%wROXs z6{dYdZ$L9jGaMN-Y$mooIU$xrOz^rZw%()yfr4*HJN@1MsH%D&tkwD)681`me=FYKT!~lf~ea|_cb+l=Z4t(l1`UUA+ghMvVEv^^CI2r(Hv6#>kz6( z`8K3mUff@wVV7QT7tIPQSZXi98dpRcZG2@MPgr+$`)1xV?WF?D&=!G`_c||nen+TT zWl=kD7APDwbET8GafL*DJoI|*5sy};o~^!|Q@|;2P6FtQn;E%Iv{yS{4+pxe0ayy} z*9+@=|2Q|+z2TL4tjn^PMmBu5zw+!MfLN&=Hu89YCAQoBTXWl;<4ktU!hxAT^IPc1 z_C3Zqm6_@HqAk>a);nkJpo=(=u|!t9D*2=!^?1l|n5>R3i#{P`m8sRlIR=HJ=LKcB-qsm@ zG7|Gqb5u~2&o1=JyGaI>69$~m^`LoOR5&3stvLF`#`ga#k{=B-3zDOH^@JmLb7U} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index 82beee01..a595294f 100644 --- a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,250 +1,33 @@ { "images" : [ - { - "filename" : "40.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" - }, - { - "filename" : "60.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" - }, - { - "filename" : "58.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" - }, - { - "filename" : "87.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" - }, - { - "filename" : "80.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" - }, - { - "filename" : "120.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" - }, - { - "filename" : "120-1.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" - }, - { - "filename" : "180.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" - }, - { - "filename" : "20.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "20x20" - }, - { - "filename" : "40-1.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "20x20" - }, - { - "filename" : "29.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "29x29" - }, - { - "filename" : "58-1.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "29x29" - }, - { - "filename" : "40-2.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "40x40" - }, - { - "filename" : "80-1.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "40x40" - }, - { - "filename" : "76.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "76x76" - }, - { - "filename" : "152.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "76x76" - }, - { - "filename" : "167.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "83.5x83.5" - }, { "filename" : "1024.png", - "idiom" : "ios-marketing", - "scale" : "1x", - "size" : "1024x1024" - }, - { - "filename" : "44px.png", - "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "22x22" - }, - { - "filename" : "48px.png", - "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "24x24" - }, - { - "filename" : "55px.png", - "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "27.5x27.5" - }, - { - "filename" : "58px.png", - "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "29x29" - }, - { - "filename" : "60px.png", - "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "30x30" - }, - { - "filename" : "64px.png", - "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "32x32" - }, - { - "filename" : "66px.png", "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "33x33" - }, - { - "filename" : "80px.png", - "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "40x40" - }, - { - "filename" : "87px.png", - "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "43.5x43.5" - }, - { - "filename" : "88px.png", - "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "44x44" - }, - { - "filename" : "92px.png", - "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "46x46" - }, - { - "filename" : "100px.png", - "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "50x50" - }, - { - "filename" : "102px.png", - "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "51x51" - }, - { - "filename" : "108px.png", - "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "54x54" - }, - { - "filename" : "172px.png", - "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "86x86" - }, - { - "filename" : "196px.png", - "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "98x98" - }, - { - "filename" : "216px.png", - "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "108x108" - }, - { - "filename" : "234px.png", - "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "117x117" + "platform" : "ios", + "size" : "1024x1024" }, { - "filename" : "258px.png", + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "1024 1.png", "idiom" : "universal", - "platform" : "watchos", - "scale" : "2x", - "size" : "129x129" + "platform" : "ios", + "size" : "1024x1024" }, { - "filename" : "1024px.png", + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "filename" : "1024 2.png", "idiom" : "universal", - "platform" : "watchos", + "platform" : "ios", "size" : "1024x1024" } ], From 231a547e26e412baff9a0da10328f96ec321edf7 Mon Sep 17 00:00:00 2001 From: Soongyu Kwon Date: Fri, 22 Nov 2024 00:17:02 +0900 Subject: [PATCH 30/30] some fixes --- .../AccentColor.colorset/Contents.json | 4 + ios/OTL Watch App/OTLAPI.swift | 1 + ios/OTL Watch App/Pages/DailyTableView.swift | 97 +++++++++++++++-- ios/OTL Watch App/Subviews/DayLabelView.swift | 2 +- ios/OTL Watch App/WatchViewModel.swift | 1 + ios/Podfile.lock | 100 +++++++++--------- ios/Runner/AppDelegate.swift | 1 + pubspec.lock | 76 ++++++------- 8 files changed, 183 insertions(+), 99 deletions(-) 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 eb878970..e5914abe 100644 --- a/ios/OTL Watch App/Assets.xcassets/AccentColor.colorset/Contents.json +++ b/ios/OTL Watch App/Assets.xcassets/AccentColor.colorset/Contents.json @@ -1,6 +1,10 @@ { "colors" : [ { + "color" : { + "platform" : "universal", + "reference" : "systemRedColor" + }, "idiom" : "universal" } ], diff --git a/ios/OTL Watch App/OTLAPI.swift b/ios/OTL Watch App/OTLAPI.swift index 63c37a24..12b592b6 100644 --- a/ios/OTL Watch App/OTLAPI.swift +++ b/ios/OTL Watch App/OTLAPI.swift @@ -264,6 +264,7 @@ class OTLAPI { switch response.result { case .success(let data): do { + print("getActualSemesters") let userInfo = try self.jsonDecoder.decode(UserInfo.self, from: data) var semesters = [SemesterElement]() for lecture in userInfo.my_timetable_lectures { diff --git a/ios/OTL Watch App/Pages/DailyTableView.swift b/ios/OTL Watch App/Pages/DailyTableView.swift index 3591d65f..09526d67 100644 --- a/ios/OTL Watch App/Pages/DailyTableView.swift +++ b/ios/OTL Watch App/Pages/DailyTableView.swift @@ -12,6 +12,37 @@ struct DailyTableView: View { @Binding var lectures: [LectureElement] @Binding var day: DayType + private func calculateHeight(duration: Int) -> CGFloat { + let blockHeight: CGFloat = 25 // Height for a 30-minute block + let offset: CGFloat = 1 // Space between blocks + + // Calculate the number of full 30-minute blocks and the remaining time + let fullBlocks = duration / 30 + let remainingMinutes = duration % 30 + + // Height for the full blocks + let fullBlocksHeight = CGFloat(fullBlocks) * blockHeight + + // Height for the remaining minutes, scaled proportionally + let remainingHeight = (CGFloat(remainingMinutes) / 30) * blockHeight + + // Add offsets between blocks + let totalOffset = CGFloat(max(fullBlocks - 1, 0)) * offset + + print("For Duration: \(duration)") + print(fullBlocksHeight + remainingHeight + totalOffset + 2) + return fullBlocksHeight + remainingHeight + totalOffset + 2 + } + + private func getElementAt(index: Int) -> LectureElement { + if index < 0 || index >= lectures.count { + return lectures.first! + } + + let sortedLectures = lectures.sorted { $0.classtime.begin < $1.classtime.begin } + return sortedLectures[index] + } + var body: some View { NavigationStack { ScrollView { @@ -20,9 +51,9 @@ struct DailyTableView: View { ForEach(3..<9) { number in if number == 3 { Spacer() - .frame(height: 50) + .frame(height: 51) } - Text("\(number*3 > 12 ? number*3 - 12 : number*3)") + Text("\(number * 3 > 12 ? number * 3 - 12 : number * 3)") .fontWeight(.medium) .foregroundStyle(.secondary) .frame(height: 0) @@ -32,7 +63,7 @@ struct DailyTableView: View { } }.frame(width: 18) ZStack(alignment: .top) { - VStack { + VStack(spacing: 0) { ForEach(0..<33) { number in if number % 2 == 0 { HorizontalLine() @@ -47,21 +78,67 @@ struct DailyTableView: View { } if number != 32 { Spacer() + .frame(height: 25) } } } - ForEach(self.lectures) { lecture in - NavigationLink(destination: LectureDetailView(lecture: .constant(lecture), day: self.$day)) { - DailyDayView(lecture: .constant(lecture)) - }.buttonStyle(.plain) - .frame(height: Double(Double(lecture.classtime.end - lecture.classtime.begin)/720+(Double(lecture.classtime.end - lecture.classtime.begin)/27)-1)) - .offset(y: Double(51 + Double(lecture.classtime.begin-540)/3001)) + + VStack(spacing: 0) { + ForEach(0.. CGFloat { + let blockHeight: CGFloat = 22 // Height for a 30-minute block + let offset: CGFloat = 4 // Space between blocks + + // Calculate the number of full 30-minute blocks and the remaining time + let fullBlocks = duration / 30 + let remainingMinutes = duration % 30 + + // Height for the full blocks + let fullBlocksHeight = CGFloat(fullBlocks) * blockHeight + + // Height for the remaining minutes, scaled proportionally + let remainingHeight = (CGFloat(remainingMinutes) / 30) * blockHeight + + // Add offsets between blocks + let totalOffset = CGFloat(max(fullBlocks - 1, 0)) * offset + + return fullBlocksHeight + remainingHeight + totalOffset + 0.2 + } + + var body: some View { + NavigationLink(destination: LectureDetailView(lecture: .constant(self.lecture), day: self.$day)) { + DailyDayView(lecture: .constant(self.lecture)) } + .buttonStyle(.plain) + .frame(height: calculateHeight(duration: self.lecture.classtime.end - self.lecture.classtime.begin)) } } diff --git a/ios/OTL Watch App/Subviews/DayLabelView.swift b/ios/OTL Watch App/Subviews/DayLabelView.swift index 60378532..83c8694f 100644 --- a/ios/OTL Watch App/Subviews/DayLabelView.swift +++ b/ios/OTL Watch App/Subviews/DayLabelView.swift @@ -27,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/WatchViewModel.swift b/ios/OTL Watch App/WatchViewModel.swift index b84512b9..0acfccab 100644 --- a/ios/OTL Watch App/WatchViewModel.swift +++ b/ios/OTL Watch App/WatchViewModel.swift @@ -42,6 +42,7 @@ extension WatchViewModel: WCSessionDelegate { #endif func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) { + print("RECIEVED!!!") DispatchQueue.main.async { guard let rawMethod = userInfo["method"] as? String, let method = WatchReceiveMethod(rawValue: rawMethod) else { return diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 09997890..d1c41537 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -3,36 +3,36 @@ PODS: - ChannelIOSDK (= 11.7.3) - Flutter - ChannelIOSDK (11.7.3) - - Firebase/Analytics (11.2.0): + - Firebase/Analytics (11.4.0): - Firebase/Core - - Firebase/Core (11.2.0): + - Firebase/Core (11.4.0): - Firebase/CoreOnly - - FirebaseAnalytics (~> 11.2.0) - - Firebase/CoreOnly (11.2.0): - - FirebaseCore (= 11.2.0) - - Firebase/Crashlytics (11.2.0): + - FirebaseAnalytics (~> 11.4.0) + - Firebase/CoreOnly (11.4.0): + - FirebaseCore (= 11.4.0) + - Firebase/Crashlytics (11.4.0): - Firebase/CoreOnly - - FirebaseCrashlytics (~> 11.2.0) - - Firebase/Messaging (11.2.0): + - FirebaseCrashlytics (~> 11.4.0) + - Firebase/Messaging (11.4.0): - Firebase/CoreOnly - - FirebaseMessaging (~> 11.2.0) - - firebase_analytics (11.3.3): - - Firebase/Analytics (= 11.2.0) + - FirebaseMessaging (~> 11.4.0) + - firebase_analytics (11.3.5): + - Firebase/Analytics (= 11.4.0) - firebase_core - Flutter - - firebase_core (3.6.0): - - Firebase/CoreOnly (= 11.2.0) + - firebase_core (3.8.0): + - Firebase/CoreOnly (= 11.4.0) - Flutter - - firebase_crashlytics (4.1.3): - - Firebase/Crashlytics (= 11.2.0) + - firebase_crashlytics (4.1.5): + - Firebase/Crashlytics (= 11.4.0) - firebase_core - Flutter - - firebase_messaging (15.1.3): - - Firebase/Messaging (= 11.2.0) + - firebase_messaging (15.1.5): + - Firebase/Messaging (= 11.4.0) - firebase_core - Flutter - - FirebaseAnalytics (11.2.0): - - FirebaseAnalytics/AdIdSupport (= 11.2.0) + - FirebaseAnalytics (11.4.0): + - FirebaseAnalytics/AdIdSupport (= 11.4.0) - FirebaseCore (~> 11.0) - FirebaseInstallations (~> 11.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.0) @@ -40,25 +40,25 @@ PODS: - GoogleUtilities/Network (~> 8.0) - "GoogleUtilities/NSData+zlib (~> 8.0)" - nanopb (~> 3.30910.0) - - FirebaseAnalytics/AdIdSupport (11.2.0): + - FirebaseAnalytics/AdIdSupport (11.4.0): - FirebaseCore (~> 11.0) - FirebaseInstallations (~> 11.0) - - GoogleAppMeasurement (= 11.2.0) + - GoogleAppMeasurement (= 11.4.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.0) - GoogleUtilities/MethodSwizzler (~> 8.0) - GoogleUtilities/Network (~> 8.0) - "GoogleUtilities/NSData+zlib (~> 8.0)" - nanopb (~> 3.30910.0) - - FirebaseCore (11.2.0): + - FirebaseCore (11.4.0): - FirebaseCoreInternal (~> 11.0) - GoogleUtilities/Environment (~> 8.0) - GoogleUtilities/Logger (~> 8.0) - FirebaseCoreExtension (11.4.1): - FirebaseCore (~> 11.0) - - FirebaseCoreInternal (11.4.2): + - FirebaseCoreInternal (11.5.0): - "GoogleUtilities/NSData+zlib (~> 8.0)" - - FirebaseCrashlytics (11.2.0): - - FirebaseCore (~> 11.0) + - FirebaseCrashlytics (11.4.0): + - FirebaseCore (~> 11.4) - FirebaseInstallations (~> 11.0) - FirebaseRemoteConfigInterop (~> 11.0) - FirebaseSessions (~> 11.0) @@ -71,7 +71,7 @@ PODS: - GoogleUtilities/Environment (~> 8.0) - GoogleUtilities/UserDefaults (~> 8.0) - PromisesObjC (~> 2.4) - - FirebaseMessaging (11.2.0): + - FirebaseMessaging (11.4.0): - FirebaseCore (~> 11.0) - FirebaseInstallations (~> 11.0) - GoogleDataTransport (~> 10.0) @@ -80,10 +80,10 @@ PODS: - GoogleUtilities/Reachability (~> 8.0) - GoogleUtilities/UserDefaults (~> 8.0) - nanopb (~> 3.30910.0) - - FirebaseRemoteConfigInterop (11.4.0) - - FirebaseSessions (11.3.0): - - FirebaseCore (~> 11.0) - - FirebaseCoreExtension (~> 11.0) + - FirebaseRemoteConfigInterop (11.5.0) + - FirebaseSessions (11.4.0): + - FirebaseCore (~> 11.4) + - FirebaseCoreExtension (~> 11.4) - FirebaseInstallations (~> 11.0) - GoogleDataTransport (~> 10.0) - GoogleUtilities/Environment (~> 8.0) @@ -91,27 +91,27 @@ PODS: - nanopb (~> 3.30910.0) - PromisesSwift (~> 2.1) - Flutter (1.0.0) - - flutter_native_splash (0.0.1): + - flutter_native_splash (2.4.3): - Flutter - flutter_web_browser (0.17.1): - Flutter - flutter_widgetkit (0.0.1): - Flutter - - GoogleAppMeasurement (11.2.0): - - GoogleAppMeasurement/AdIdSupport (= 11.2.0) + - GoogleAppMeasurement (11.4.0): + - GoogleAppMeasurement/AdIdSupport (= 11.4.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.0) - GoogleUtilities/MethodSwizzler (~> 8.0) - GoogleUtilities/Network (~> 8.0) - "GoogleUtilities/NSData+zlib (~> 8.0)" - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/AdIdSupport (11.2.0): - - GoogleAppMeasurement/WithoutAdIdSupport (= 11.2.0) + - GoogleAppMeasurement/AdIdSupport (11.4.0): + - GoogleAppMeasurement/WithoutAdIdSupport (= 11.4.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.0) - GoogleUtilities/MethodSwizzler (~> 8.0) - GoogleUtilities/Network (~> 8.0) - "GoogleUtilities/NSData+zlib (~> 8.0)" - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/WithoutAdIdSupport (11.2.0): + - GoogleAppMeasurement/WithoutAdIdSupport (11.4.0): - GoogleUtilities/AppDelegateSwizzler (~> 8.0) - GoogleUtilities/MethodSwizzler (~> 8.0) - GoogleUtilities/Network (~> 8.0) @@ -250,25 +250,25 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: channel_talk_flutter: 62d078feeddfa94b03dfa72f39ecf26f2731c2ee ChannelIOSDK: 3d4bee1e1a077cf60394b439801e5078bb69a3b1 - Firebase: 98e6bf5278170668a7983e12971a66b2cd57fc8c - firebase_analytics: fbc57838bdb94eef1e0ff504f127d974ff2981ad - firebase_core: 2bedc3136ec7c7b8561c6123ed0239387b53f2af - firebase_crashlytics: 37d104d457b51760b48504a93a12b3bf70995d77 - firebase_messaging: 15d114e1a41fc31e4fbabcd48d765a19eec94a38 - FirebaseAnalytics: c36efd5710c60c17558650fa58c2066eca7e9265 - FirebaseCore: a282032ae9295c795714ded2ec9c522fc237f8da + Firebase: cf1b19f21410b029b6786a54e9764a0cacad3c99 + firebase_analytics: fa7e5b20c2b58042e3301f5112a473d365bd490c + firebase_core: 9efc3ecf689cdbc90f13f4dc58108c83ea46b266 + firebase_crashlytics: 72a8b504422ba8bb435a7a0c0a9341320cbcbe29 + firebase_messaging: 6bf60adb4b33a848d135e16bc363fb4924f98fba + FirebaseAnalytics: 3feef9ae8733c567866342a1000691baaa7cad49 + FirebaseCore: e0510f1523bc0eb21653cac00792e1e2bd6f1771 FirebaseCoreExtension: f1bc67a4702931a7caa097d8e4ac0a1b0d16720e - FirebaseCoreInternal: 35731192cab10797b88411be84940d2beb33a238 - FirebaseCrashlytics: cfc69af5b53565dc6a5e563788809b5778ac4eac + FirebaseCoreInternal: f47dd28ae7782e6a4738aad3106071a8fe0af604 + FirebaseCrashlytics: 41bbdd2b514a8523cede0c217aee6ef7ecf38401 FirebaseInstallations: 6ef4a1c7eb2a61ee1f74727d7f6ce2e72acf1414 - FirebaseMessaging: c9ec7b90c399c7a6100297e9d16f8a27fc7f7152 - FirebaseRemoteConfigInterop: e76f46ffa4d6a65e273d4dfebb6a79e588cec136 - FirebaseSessions: 655ff17f3cc1a635cbdc2d69b953878001f9e25b + FirebaseMessaging: f8a160d99c2c2e5babbbcc90c4a3e15db036aee2 + FirebaseRemoteConfigInterop: 7a7aebb9342d53913a5c890efa88e289d9e5c1bc + FirebaseSessions: 3f56f177d9e53a85021d16b31f9a111849d1dd8b Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 - flutter_native_splash: edf599c81f74d093a4daf8e17bd7a018854bc778 + flutter_native_splash: e8a1e01082d97a8099d973f919f57904c925008a flutter_web_browser: 7bccaafbb0c5b8862afe7bcd158f15557109f61f flutter_widgetkit: a0e9b0d50ee9bec366dad36c639509daaafc397a - GoogleAppMeasurement: 76d4f8b36b03bd8381fa9a7fe2cc7f99c0a2e93a + GoogleAppMeasurement: 987769c4ca6b968f2479fbcc9fe3ce34af454b8e GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index d3135d06..a44d7d3a 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -31,6 +31,7 @@ import WatchConnectivity result: @escaping FlutterResult) -> Void in switch call.method { case "flutterToWatch": + print("FLUTTERTOWATCH!!!!!!!!!!!!!!!!!!!!!!!!!") guard let watchSession = self?.session, watchSession.isPaired, let methodData = call.arguments as? [String: Any], diff --git a/pubspec.lock b/pubspec.lock index 14c09a27..469cb132 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -13,10 +13,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: "5534e701a2c505fed1f0799e652dd6ae23bd4d2c4cf797220e5ced5764a7c1c2" + sha256: "71c01c1998c40b3af1944ad0a5f374b4e6fef7f3d2df487f3970dbeadaeb25a1" url: "https://pub.dev" source: hosted - version: "1.3.44" + version: "1.3.46" _macros: dependency: transitive description: dart @@ -115,10 +115,10 @@ packages: dependency: transitive description: name: coverage - sha256: "88b0fddbe4c92910fefc09cc0248f5e7f0cd23e450ded4c28f16ab8ee8f83268" + sha256: "4b03e11f6d5b8f6e5bb5e9f7889a56fe6c5cbe942da5378ea4d4d7f73ef9dfe5" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" crypto: dependency: transitive description: @@ -219,34 +219,34 @@ packages: dependency: "direct main" description: name: firebase_analytics - sha256: "2c4e7b548d41b46e8aa08bc3bd1163146be7e6d48f678f2e6dd3114994e42458" + sha256: "8be7c45091f01cc15130edf8201ed4f4b7b022a38424ed9aac6b9a6d7c45bb09" url: "https://pub.dev" source: hosted - version: "11.3.3" + version: "11.3.5" firebase_analytics_platform_interface: dependency: transitive description: name: firebase_analytics_platform_interface - sha256: c259ae890c7d4c5d1675d35936be0b1fcd587fce9645948982cd87ad08df6222 + sha256: "111e288dd332ce13e1ec96b54f5dca0601fe6e75bc251f74fd6f70096f3fbf09" url: "https://pub.dev" source: hosted - version: "4.2.5" + version: "4.2.7" firebase_analytics_web: dependency: transitive description: name: firebase_analytics_web - sha256: "5988d1fd022e55515c2a14811c9b5104c32acde115874a9a69ff7c77c4c05cd9" + sha256: "7c3c80b4e223565ddbda3eaacc42712ba6de53410f8ae18738c807aa8af6b910" url: "https://pub.dev" source: hosted - version: "0.5.10+2" + version: "0.5.10+4" firebase_core: dependency: "direct main" description: name: firebase_core - sha256: "51dfe2fbf3a984787a2e7b8592f2f05c986bfedd6fdacea3f9e0a7beb334de96" + sha256: "2438a75ad803e818ad3bd5df49137ee619c46b6fc7101f4dbc23da07305ce553" url: "https://pub.dev" source: hosted - version: "3.6.0" + version: "3.8.0" firebase_core_platform_interface: dependency: transitive description: @@ -267,42 +267,42 @@ packages: dependency: "direct main" description: name: firebase_crashlytics - sha256: "6899800fff1af819955aef740f18c4c8600f8b952a2a1ea97bc0872ebb257387" + sha256: "4e80ef22428dfecf609df8049419c7446c6e1d797d7f307cad3c7ab70e72ddc5" url: "https://pub.dev" source: hosted - version: "4.1.3" + version: "4.1.5" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface - sha256: "97c47b0a1779a3d4118416a3f0c6c564cc59ad89095e899893204d4b2ad08f4c" + sha256: "1104f428ec5249fff62016985719bb232ca91c4bde0d1a033af9b7d8b7451d70" url: "https://pub.dev" source: hosted - version: "3.6.44" + version: "3.6.46" firebase_messaging: dependency: "direct main" description: name: firebase_messaging - sha256: eb6e28a3a35deda61fe8634967c84215efc19133ba58d8e0fc6c9a2af2cba05e + sha256: "4d0968ecb860d7baa15a6e2af3469ec5b0d959e51c59ce84a52b0f7632a4aa5a" url: "https://pub.dev" source: hosted - version: "15.1.3" + version: "15.1.5" firebase_messaging_platform_interface: dependency: transitive description: name: firebase_messaging_platform_interface - sha256: b316c4ee10d93d32c033644207afc282d9b2b4372f3cf9c6022f3558b3873d2d + sha256: a2cb3e7d71d40b6612e2d4e0daa0ae759f6a9d07f693f904d14d22aadf70be10 url: "https://pub.dev" source: hosted - version: "4.5.46" + version: "4.5.48" firebase_messaging_web: dependency: transitive description: name: firebase_messaging_web - sha256: d7f0147a1a9fe4313168e20154a01fd5cf332898de1527d3930ff77b8c7f5387 + sha256: "1554e190f0cd9d6fe59f61ae0275ac12006fdb78b07669f1a260d1a9e6de3a1f" url: "https://pub.dev" source: hosted - version: "3.9.2" + version: "3.9.4" flutter: dependency: "direct main" description: flutter @@ -322,18 +322,18 @@ packages: dependency: "direct main" description: name: flutter_native_splash - sha256: ee5c9bd2b74ea8676442fd4ab876b5d41681df49276488854d6c81a5377c0ef1 + sha256: "1152ab0067ca5a2ebeb862fe0a762057202cceb22b7e62692dcbabf6483891bb" url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.4.3" flutter_svg: dependency: "direct main" description: name: flutter_svg - sha256: de82e6bf958cec7190fbc1c5298282c851228e35ae2b14e2b103e7f777818c64 + sha256: "578bd8c508144fdaffd4f77b8ef2d8c523602275cd697cc3db284dbd762ef4ce" url: "https://pub.dev" source: hosted - version: "2.0.13" + version: "2.0.14" flutter_test: dependency: "direct dev" description: flutter @@ -657,10 +657,10 @@ packages: dependency: transitive description: name: permission_handler_html - sha256: af26edbbb1f2674af65a8f4b56e1a6f526156bc273d0e65dd8075fab51c78851 + sha256: "6b9cb54b7135073841a35513fba39e598b421702d5f4d92319992fd6eb5532a9" url: "https://pub.dev" source: hosted - version: "0.1.3+2" + version: "0.1.3+4" permission_handler_platform_interface: dependency: transitive description: @@ -737,10 +737,10 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051" + sha256: "95f9997ca1fb9799d494d0cb2a780fd7be075818d59f00c43832ed112b158a82" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.3.3" shared_preferences_android: dependency: transitive description: @@ -958,10 +958,10 @@ packages: dependency: transitive description: name: url_launcher_linux - sha256: e2b9622b4007f97f504cd64c0128309dfb978ae66adbe944125ed9e1750f06af + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "3.2.1" url_launcher_macos: dependency: transitive description: @@ -1014,10 +1014,10 @@ packages: dependency: transitive description: name: vector_graphics_compiler - sha256: "26d520739b7c6b5d2a2b3274427874a8390831fd4cd5bb8cfbd7d913477d3a2e" + sha256: ab9ff38fc771e9ee1139320adbe3d18a60327370c218c60752068ebee4b49ab1 url: "https://pub.dev" source: hosted - version: "1.1.14" + version: "1.1.15" vector_math: dependency: transitive description: @@ -1102,10 +1102,10 @@ packages: dependency: transitive description: name: webview_flutter_android - sha256: dec83a8da0a2dcd8a25418534cc59348dbc2855fa1dd0cc929c62b6029fde392 + sha256: "285cedfd9441267f6cca8843458620b5fda1af75b04f5818d0441acda5d7df19" url: "https://pub.dev" source: hosted - version: "4.0.1" + version: "4.1.0" webview_flutter_platform_interface: dependency: transitive description: @@ -1118,10 +1118,10 @@ packages: dependency: transitive description: name: webview_flutter_wkwebview - sha256: f14ee08021772fed913da8daebcfdeb46be457081e521e93e9918fe6cd1ce9e8 + sha256: "3be297aa4ca78205abdd284cf55f168c35246c75b3079990ad8ba9d257681a30" url: "https://pub.dev" source: hosted - version: "3.16.1" + version: "3.16.2" xdg_directories: dependency: transitive description: