tum %!s(int64=2) %!d(string=před) roky
rodič
revize
25642a16ec
38 změnil soubory, kde provedl 3333 přidání a 1178 odebrání
  1. 2 0
      .gitignore
  2. binární
      assets/logo.png
  3. binární
      assets/splash.png
  4. 0 13
      ios/.gitignore
  5. 0 436
      ios/App/App.xcodeproj/project.pbxproj
  6. 0 7
      ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  7. 0 10
      ios/App/App.xcworkspace/contents.xcworkspacedata
  8. 0 8
      ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  9. 0 8
      ios/App/App/App.entitlements
  10. 0 80
      ios/App/App/AppDelegate.swift
  11. binární
      ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png
  12. 0 14
      ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json
  13. 0 6
      ios/App/App/Assets.xcassets/Contents.json
  14. 0 23
      ios/App/App/Assets.xcassets/Splash.imageset/Contents.json
  15. binární
      ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png
  16. binární
      ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png
  17. binární
      ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png
  18. 0 32
      ios/App/App/Base.lproj/LaunchScreen.storyboard
  19. 0 19
      ios/App/App/Base.lproj/Main.storyboard
  20. 0 38
      ios/App/App/GoogleService-Info.plist
  21. 0 91
      ios/App/App/Info.plist
  22. 0 13
      ios/App/App/google-services.json
  23. 0 34
      ios/App/Podfile
  24. 0 197
      ios/App/Podfile.lock
  25. 3089 115
      package-lock.json
  26. 3 0
      package.json
  27. binární
      public/images/circlelogo-trans.png
  28. binární
      public/images/logo.png
  29. 46 0
      public/manifest.webmanifest
  30. 13 2
      src/App.vue
  31. 1 1
      src/components/SearchItem.vue
  32. 36 5
      src/composable/settings.ts
  33. 1 0
      src/views/CourseMatDetailPage.vue
  34. 98 15
      src/views/ProfilePage.vue
  35. 19 6
      src/views/Tab1Page.vue
  36. 10 2
      src/views/Tab2Page.vue
  37. 8 2
      src/views/Tab3Page.vue
  38. 7 1
      src/views/TabsPage.vue

+ 2 - 0
.gitignore

@@ -30,3 +30,5 @@ npm-debug.log*
30 30
 /platforms
31 31
 /plugins
32 32
 /www
33
+/ios
34
+/android

binární
assets/logo.png


binární
assets/splash.png


+ 0 - 13
ios/.gitignore

@@ -1,13 +0,0 @@
1
-App/build
2
-App/Pods
3
-App/output
4
-App/App/public
5
-DerivedData
6
-xcuserdata
7
-
8
-# Cordova plugins for Capacitor
9
-capacitor-cordova-ios-plugins
10
-
11
-# Generated Config files
12
-App/App/capacitor.config.json
13
-App/App/config.xml

+ 0 - 436
ios/App/App.xcodeproj/project.pbxproj

@@ -1,436 +0,0 @@
1
-// !$*UTF8*$!
2
-{
3
-	archiveVersion = 1;
4
-	classes = {
5
-	};
6
-	objectVersion = 54;
7
-	objects = {
8
-
9
-/* Begin PBXBuildFile section */
10
-		1EF387912AF6160200F60A08 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1EF387902AF6160200F60A08 /* GoogleService-Info.plist */; };
11
-		1EF387942AF7EEBF00F60A08 /* google-services.json in Resources */ = {isa = PBXBuildFile; fileRef = 1EF387932AF7EEBE00F60A08 /* google-services.json */; };
12
-		2FAD9763203C412B000D30F8 /* config.xml in Resources */ = {isa = PBXBuildFile; fileRef = 2FAD9762203C412B000D30F8 /* config.xml */; };
13
-		50379B232058CBB4000EE86E /* capacitor.config.json in Resources */ = {isa = PBXBuildFile; fileRef = 50379B222058CBB4000EE86E /* capacitor.config.json */; };
14
-		504EC3081FED79650016851F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504EC3071FED79650016851F /* AppDelegate.swift */; };
15
-		504EC30D1FED79650016851F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30B1FED79650016851F /* Main.storyboard */; };
16
-		504EC30F1FED79650016851F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30E1FED79650016851F /* Assets.xcassets */; };
17
-		504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC3101FED79650016851F /* LaunchScreen.storyboard */; };
18
-		50B271D11FEDC1A000F3C39B /* public in Resources */ = {isa = PBXBuildFile; fileRef = 50B271D01FEDC1A000F3C39B /* public */; };
19
-		A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */; };
20
-/* End PBXBuildFile section */
21
-
22
-/* Begin PBXFileReference section */
23
-		1EF387902AF6160200F60A08 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
24
-		1EF387922AF6201900F60A08 /* App.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = App.entitlements; sourceTree = "<group>"; };
25
-		1EF387932AF7EEBE00F60A08 /* google-services.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "google-services.json"; sourceTree = "<group>"; };
26
-		2FAD9762203C412B000D30F8 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = config.xml; sourceTree = "<group>"; };
27
-		50379B222058CBB4000EE86E /* capacitor.config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = capacitor.config.json; sourceTree = "<group>"; };
28
-		504EC3041FED79650016851F /* App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; };
29
-		504EC3071FED79650016851F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
30
-		504EC30C1FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
31
-		504EC30E1FED79650016851F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
32
-		504EC3111FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
33
-		504EC3131FED79650016851F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
34
-		50B271D01FEDC1A000F3C39B /* public */ = {isa = PBXFileReference; lastKnownFileType = folder; path = public; sourceTree = "<group>"; };
35
-		AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_App.framework; sourceTree = BUILT_PRODUCTS_DIR; };
36
-		AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.release.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.release.xcconfig"; sourceTree = "<group>"; };
37
-		FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.debug.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.debug.xcconfig"; sourceTree = "<group>"; };
38
-/* End PBXFileReference section */
39
-
40
-/* Begin PBXFrameworksBuildPhase section */
41
-		504EC3011FED79650016851F /* Frameworks */ = {
42
-			isa = PBXFrameworksBuildPhase;
43
-			buildActionMask = 2147483647;
44
-			files = (
45
-				A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */,
46
-			);
47
-			runOnlyForDeploymentPostprocessing = 0;
48
-		};
49
-/* End PBXFrameworksBuildPhase section */
50
-
51
-/* Begin PBXGroup section */
52
-		27E2DDA53C4D2A4D1A88CE4A /* Frameworks */ = {
53
-			isa = PBXGroup;
54
-			children = (
55
-				AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */,
56
-			);
57
-			name = Frameworks;
58
-			sourceTree = "<group>";
59
-		};
60
-		504EC2FB1FED79650016851F = {
61
-			isa = PBXGroup;
62
-			children = (
63
-				504EC3061FED79650016851F /* App */,
64
-				504EC3051FED79650016851F /* Products */,
65
-				7F8756D8B27F46E3366F6CEA /* Pods */,
66
-				27E2DDA53C4D2A4D1A88CE4A /* Frameworks */,
67
-			);
68
-			sourceTree = "<group>";
69
-		};
70
-		504EC3051FED79650016851F /* Products */ = {
71
-			isa = PBXGroup;
72
-			children = (
73
-				504EC3041FED79650016851F /* App.app */,
74
-			);
75
-			name = Products;
76
-			sourceTree = "<group>";
77
-		};
78
-		504EC3061FED79650016851F /* App */ = {
79
-			isa = PBXGroup;
80
-			children = (
81
-				1EF387932AF7EEBE00F60A08 /* google-services.json */,
82
-				1EF387922AF6201900F60A08 /* App.entitlements */,
83
-				1EF387902AF6160200F60A08 /* GoogleService-Info.plist */,
84
-				50379B222058CBB4000EE86E /* capacitor.config.json */,
85
-				504EC3071FED79650016851F /* AppDelegate.swift */,
86
-				504EC30B1FED79650016851F /* Main.storyboard */,
87
-				504EC30E1FED79650016851F /* Assets.xcassets */,
88
-				504EC3101FED79650016851F /* LaunchScreen.storyboard */,
89
-				504EC3131FED79650016851F /* Info.plist */,
90
-				2FAD9762203C412B000D30F8 /* config.xml */,
91
-				50B271D01FEDC1A000F3C39B /* public */,
92
-			);
93
-			path = App;
94
-			sourceTree = "<group>";
95
-		};
96
-		7F8756D8B27F46E3366F6CEA /* Pods */ = {
97
-			isa = PBXGroup;
98
-			children = (
99
-				FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */,
100
-				AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */,
101
-			);
102
-			name = Pods;
103
-			sourceTree = "<group>";
104
-		};
105
-/* End PBXGroup section */
106
-
107
-/* Begin PBXNativeTarget section */
108
-		504EC3031FED79650016851F /* App */ = {
109
-			isa = PBXNativeTarget;
110
-			buildConfigurationList = 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */;
111
-			buildPhases = (
112
-				6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */,
113
-				504EC3001FED79650016851F /* Sources */,
114
-				504EC3011FED79650016851F /* Frameworks */,
115
-				504EC3021FED79650016851F /* Resources */,
116
-				9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */,
117
-			);
118
-			buildRules = (
119
-			);
120
-			dependencies = (
121
-			);
122
-			name = App;
123
-			productName = App;
124
-			productReference = 504EC3041FED79650016851F /* App.app */;
125
-			productType = "com.apple.product-type.application";
126
-		};
127
-/* End PBXNativeTarget section */
128
-
129
-/* Begin PBXProject section */
130
-		504EC2FC1FED79650016851F /* Project object */ = {
131
-			isa = PBXProject;
132
-			attributes = {
133
-				BuildIndependentTargetsInParallel = YES;
134
-				LastSwiftUpdateCheck = 0920;
135
-				LastUpgradeCheck = 1500;
136
-				TargetAttributes = {
137
-					504EC3031FED79650016851F = {
138
-						CreatedOnToolsVersion = 9.2;
139
-						LastSwiftMigration = 1100;
140
-						ProvisioningStyle = Automatic;
141
-					};
142
-				};
143
-			};
144
-			buildConfigurationList = 504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */;
145
-			compatibilityVersion = "Xcode 8.0";
146
-			developmentRegion = en;
147
-			hasScannedForEncodings = 0;
148
-			knownRegions = (
149
-				en,
150
-				Base,
151
-			);
152
-			mainGroup = 504EC2FB1FED79650016851F;
153
-			productRefGroup = 504EC3051FED79650016851F /* Products */;
154
-			projectDirPath = "";
155
-			projectRoot = "";
156
-			targets = (
157
-				504EC3031FED79650016851F /* App */,
158
-			);
159
-		};
160
-/* End PBXProject section */
161
-
162
-/* Begin PBXResourcesBuildPhase section */
163
-		504EC3021FED79650016851F /* Resources */ = {
164
-			isa = PBXResourcesBuildPhase;
165
-			buildActionMask = 2147483647;
166
-			files = (
167
-				504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */,
168
-				50B271D11FEDC1A000F3C39B /* public in Resources */,
169
-				1EF387942AF7EEBF00F60A08 /* google-services.json in Resources */,
170
-				504EC30F1FED79650016851F /* Assets.xcassets in Resources */,
171
-				50379B232058CBB4000EE86E /* capacitor.config.json in Resources */,
172
-				504EC30D1FED79650016851F /* Main.storyboard in Resources */,
173
-				2FAD9763203C412B000D30F8 /* config.xml in Resources */,
174
-				1EF387912AF6160200F60A08 /* GoogleService-Info.plist in Resources */,
175
-			);
176
-			runOnlyForDeploymentPostprocessing = 0;
177
-		};
178
-/* End PBXResourcesBuildPhase section */
179
-
180
-/* Begin PBXShellScriptBuildPhase section */
181
-		6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */ = {
182
-			isa = PBXShellScriptBuildPhase;
183
-			buildActionMask = 2147483647;
184
-			files = (
185
-			);
186
-			inputPaths = (
187
-				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
188
-				"${PODS_ROOT}/Manifest.lock",
189
-			);
190
-			name = "[CP] Check Pods Manifest.lock";
191
-			outputPaths = (
192
-				"$(DERIVED_FILE_DIR)/Pods-App-checkManifestLockResult.txt",
193
-			);
194
-			runOnlyForDeploymentPostprocessing = 0;
195
-			shellPath = /bin/sh;
196
-			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
197
-			showEnvVarsInLog = 0;
198
-		};
199
-		9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */ = {
200
-			isa = PBXShellScriptBuildPhase;
201
-			buildActionMask = 2147483647;
202
-			files = (
203
-			);
204
-			inputPaths = (
205
-			);
206
-			name = "[CP] Embed Pods Frameworks";
207
-			outputPaths = (
208
-			);
209
-			runOnlyForDeploymentPostprocessing = 0;
210
-			shellPath = /bin/sh;
211
-			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-App/Pods-App-frameworks.sh\"\n";
212
-			showEnvVarsInLog = 0;
213
-		};
214
-/* End PBXShellScriptBuildPhase section */
215
-
216
-/* Begin PBXSourcesBuildPhase section */
217
-		504EC3001FED79650016851F /* Sources */ = {
218
-			isa = PBXSourcesBuildPhase;
219
-			buildActionMask = 2147483647;
220
-			files = (
221
-				504EC3081FED79650016851F /* AppDelegate.swift in Sources */,
222
-			);
223
-			runOnlyForDeploymentPostprocessing = 0;
224
-		};
225
-/* End PBXSourcesBuildPhase section */
226
-
227
-/* Begin PBXVariantGroup section */
228
-		504EC30B1FED79650016851F /* Main.storyboard */ = {
229
-			isa = PBXVariantGroup;
230
-			children = (
231
-				504EC30C1FED79650016851F /* Base */,
232
-			);
233
-			name = Main.storyboard;
234
-			sourceTree = "<group>";
235
-		};
236
-		504EC3101FED79650016851F /* LaunchScreen.storyboard */ = {
237
-			isa = PBXVariantGroup;
238
-			children = (
239
-				504EC3111FED79650016851F /* Base */,
240
-			);
241
-			name = LaunchScreen.storyboard;
242
-			sourceTree = "<group>";
243
-		};
244
-/* End PBXVariantGroup section */
245
-
246
-/* Begin XCBuildConfiguration section */
247
-		504EC3141FED79650016851F /* Debug */ = {
248
-			isa = XCBuildConfiguration;
249
-			buildSettings = {
250
-				ALWAYS_SEARCH_USER_PATHS = NO;
251
-				CLANG_ANALYZER_NONNULL = YES;
252
-				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
253
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
254
-				CLANG_CXX_LIBRARY = "libc++";
255
-				CLANG_ENABLE_MODULES = YES;
256
-				CLANG_ENABLE_OBJC_ARC = YES;
257
-				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
258
-				CLANG_WARN_BOOL_CONVERSION = YES;
259
-				CLANG_WARN_COMMA = YES;
260
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
261
-				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
262
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
263
-				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
264
-				CLANG_WARN_EMPTY_BODY = YES;
265
-				CLANG_WARN_ENUM_CONVERSION = YES;
266
-				CLANG_WARN_INFINITE_RECURSION = YES;
267
-				CLANG_WARN_INT_CONVERSION = YES;
268
-				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
269
-				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
270
-				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
271
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
272
-				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
273
-				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
274
-				CLANG_WARN_STRICT_PROTOTYPES = YES;
275
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
276
-				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
277
-				CLANG_WARN_UNREACHABLE_CODE = YES;
278
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
279
-				CODE_SIGN_IDENTITY = "iPhone Developer";
280
-				COPY_PHASE_STRIP = NO;
281
-				DEBUG_INFORMATION_FORMAT = dwarf;
282
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
283
-				ENABLE_TESTABILITY = YES;
284
-				ENABLE_USER_SCRIPT_SANDBOXING = NO;
285
-				GCC_C_LANGUAGE_STANDARD = gnu11;
286
-				GCC_DYNAMIC_NO_PIC = NO;
287
-				GCC_NO_COMMON_BLOCKS = YES;
288
-				GCC_OPTIMIZATION_LEVEL = 0;
289
-				GCC_PREPROCESSOR_DEFINITIONS = (
290
-					"DEBUG=1",
291
-					"$(inherited)",
292
-				);
293
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
294
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
295
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
296
-				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
297
-				GCC_WARN_UNUSED_FUNCTION = YES;
298
-				GCC_WARN_UNUSED_VARIABLE = YES;
299
-				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
300
-				MTL_ENABLE_DEBUG_INFO = YES;
301
-				ONLY_ACTIVE_ARCH = YES;
302
-				SDKROOT = iphoneos;
303
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
304
-				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
305
-			};
306
-			name = Debug;
307
-		};
308
-		504EC3151FED79650016851F /* Release */ = {
309
-			isa = XCBuildConfiguration;
310
-			buildSettings = {
311
-				ALWAYS_SEARCH_USER_PATHS = NO;
312
-				CLANG_ANALYZER_NONNULL = YES;
313
-				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
314
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
315
-				CLANG_CXX_LIBRARY = "libc++";
316
-				CLANG_ENABLE_MODULES = YES;
317
-				CLANG_ENABLE_OBJC_ARC = YES;
318
-				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
319
-				CLANG_WARN_BOOL_CONVERSION = YES;
320
-				CLANG_WARN_COMMA = YES;
321
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
322
-				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
323
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
324
-				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
325
-				CLANG_WARN_EMPTY_BODY = YES;
326
-				CLANG_WARN_ENUM_CONVERSION = YES;
327
-				CLANG_WARN_INFINITE_RECURSION = YES;
328
-				CLANG_WARN_INT_CONVERSION = YES;
329
-				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
330
-				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
331
-				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
332
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
333
-				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
334
-				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
335
-				CLANG_WARN_STRICT_PROTOTYPES = YES;
336
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
337
-				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
338
-				CLANG_WARN_UNREACHABLE_CODE = YES;
339
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
340
-				CODE_SIGN_IDENTITY = "iPhone Developer";
341
-				COPY_PHASE_STRIP = NO;
342
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
343
-				ENABLE_NS_ASSERTIONS = NO;
344
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
345
-				ENABLE_USER_SCRIPT_SANDBOXING = NO;
346
-				GCC_C_LANGUAGE_STANDARD = gnu11;
347
-				GCC_NO_COMMON_BLOCKS = YES;
348
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
349
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
350
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
351
-				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
352
-				GCC_WARN_UNUSED_FUNCTION = YES;
353
-				GCC_WARN_UNUSED_VARIABLE = YES;
354
-				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
355
-				MTL_ENABLE_DEBUG_INFO = NO;
356
-				SDKROOT = iphoneos;
357
-				SWIFT_COMPILATION_MODE = wholemodule;
358
-				SWIFT_OPTIMIZATION_LEVEL = "-O";
359
-				VALIDATE_PRODUCT = YES;
360
-			};
361
-			name = Release;
362
-		};
363
-		504EC3171FED79650016851F /* Debug */ = {
364
-			isa = XCBuildConfiguration;
365
-			baseConfigurationReference = FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */;
366
-			buildSettings = {
367
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
368
-				CODE_SIGN_ENTITLEMENTS = App/App.entitlements;
369
-				CODE_SIGN_STYLE = Automatic;
370
-				CURRENT_PROJECT_VERSION = 1;
371
-				DEVELOPMENT_TEAM = 5QTJEGL2H2;
372
-				INFOPLIST_FILE = App/Info.plist;
373
-				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
374
-				LD_RUNPATH_SEARCH_PATHS = (
375
-					"$(inherited)",
376
-					"@executable_path/Frameworks",
377
-				);
378
-				MARKETING_VERSION = 1.0;
379
-				OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
380
-				PRODUCT_BUNDLE_IDENTIFIER = net.simplico.tmtlive;
381
-				PRODUCT_NAME = "$(TARGET_NAME)";
382
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
383
-				SWIFT_VERSION = 5.0;
384
-				TARGETED_DEVICE_FAMILY = "1,2";
385
-			};
386
-			name = Debug;
387
-		};
388
-		504EC3181FED79650016851F /* Release */ = {
389
-			isa = XCBuildConfiguration;
390
-			baseConfigurationReference = AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */;
391
-			buildSettings = {
392
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
393
-				CODE_SIGN_ENTITLEMENTS = App/App.entitlements;
394
-				CODE_SIGN_STYLE = Automatic;
395
-				CURRENT_PROJECT_VERSION = 1;
396
-				DEVELOPMENT_TEAM = 5QTJEGL2H2;
397
-				INFOPLIST_FILE = App/Info.plist;
398
-				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
399
-				LD_RUNPATH_SEARCH_PATHS = (
400
-					"$(inherited)",
401
-					"@executable_path/Frameworks",
402
-				);
403
-				MARKETING_VERSION = 1.0;
404
-				PRODUCT_BUNDLE_IDENTIFIER = net.simplico.tmtlive;
405
-				PRODUCT_NAME = "$(TARGET_NAME)";
406
-				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "";
407
-				SWIFT_VERSION = 5.0;
408
-				TARGETED_DEVICE_FAMILY = "1,2";
409
-			};
410
-			name = Release;
411
-		};
412
-/* End XCBuildConfiguration section */
413
-
414
-/* Begin XCConfigurationList section */
415
-		504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */ = {
416
-			isa = XCConfigurationList;
417
-			buildConfigurations = (
418
-				504EC3141FED79650016851F /* Debug */,
419
-				504EC3151FED79650016851F /* Release */,
420
-			);
421
-			defaultConfigurationIsVisible = 0;
422
-			defaultConfigurationName = Release;
423
-		};
424
-		504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */ = {
425
-			isa = XCConfigurationList;
426
-			buildConfigurations = (
427
-				504EC3171FED79650016851F /* Debug */,
428
-				504EC3181FED79650016851F /* Release */,
429
-			);
430
-			defaultConfigurationIsVisible = 0;
431
-			defaultConfigurationName = Release;
432
-		};
433
-/* End XCConfigurationList section */
434
-	};
435
-	rootObject = 504EC2FC1FED79650016851F /* Project object */;
436
-}

+ 0 - 7
ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata

@@ -1,7 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<Workspace
3
-   version = "1.0">
4
-   <FileRef
5
-      location = "self:App.xcodeproj">
6
-   </FileRef>
7
-</Workspace>

+ 0 - 10
ios/App/App.xcworkspace/contents.xcworkspacedata

@@ -1,10 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<Workspace
3
-   version = "1.0">
4
-   <FileRef
5
-      location = "group:App.xcodeproj">
6
-   </FileRef>
7
-   <FileRef
8
-      location = "group:Pods/Pods.xcodeproj">
9
-   </FileRef>
10
-</Workspace>

+ 0 - 8
ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist

@@ -1,8 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
-<plist version="1.0">
4
-<dict>
5
-	<key>IDEDidComputeMac32BitWarning</key>
6
-	<true/>
7
-</dict>
8
-</plist>

+ 0 - 8
ios/App/App/App.entitlements

@@ -1,8 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
-<plist version="1.0">
4
-<dict>
5
-	<key>aps-environment</key>
6
-	<string>development</string>
7
-</dict>
8
-</plist>

+ 0 - 80
ios/App/App/AppDelegate.swift

@@ -1,80 +0,0 @@
1
-import UIKit
2
-import Capacitor
3
-import FBSDKCoreKit
4
-import Firebase
5
-
6
-@UIApplicationMain
7
-class AppDelegate: UIResponder, UIApplicationDelegate {
8
-
9
-    var window: UIWindow?
10
-
11
-    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
12
-        // Override point for customization after application launch.
13
-        FBSDKCoreKit.ApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
14
-        FirebaseApp.configure()
15
-        return true
16
-    }
17
-
18
-    func applicationWillResignActive(_ application: UIApplication) {
19
-        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
20
-        // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
21
-    }
22
-
23
-    func applicationDidEnterBackground(_ application: UIApplication) {
24
-        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
25
-        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
26
-    }
27
-
28
-    func applicationWillEnterForeground(_ application: UIApplication) {
29
-        // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
30
-    }
31
-
32
-    func applicationDidBecomeActive(_ application: UIApplication) {
33
-        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
34
-    }
35
-
36
-    func applicationWillTerminate(_ application: UIApplication) {
37
-        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
38
-    }
39
-
40
-    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
41
-        // Called when the app was launched with a url. Feel free to add additional processing here,
42
-        // but if you want the App API to support tracking app url opens, make sure to keep this call
43
-        //return ApplicationDelegateProxy.shared.application(app, open: url, options: options)
44
-        
45
-        if (FBSDKCoreKit.ApplicationDelegate.shared.application(
46
-                    app,
47
-                    open: url,
48
-                    sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,
49
-                    annotation: options[UIApplication.OpenURLOptionsKey.annotation]
50
-                )) {
51
-                    return true;
52
-                } else {
53
-                    return ApplicationDelegateProxy.shared.application(app, open: url, options: options)
54
-                }
55
-    }
56
-
57
-    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
58
-        // Called when the app was launched with an activity, including Universal Links.
59
-        // Feel free to add additional processing here, but if you want the App API to support
60
-        // tracking app url opens, make sure to keep this call
61
-        return ApplicationDelegateProxy.shared.application(application, continue: userActivity, restorationHandler: restorationHandler)
62
-    }
63
-    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
64
-      NotificationCenter.default.post(name: .capacitorDidRegisterForRemoteNotifications, object: deviceToken)
65
-        Messaging.messaging().apnsToken = deviceToken
66
-        Messaging.messaging().token(completion: { (token, error) in
67
-             if let error = error {
68
-                 NotificationCenter.default.post(name: .capacitorDidFailToRegisterForRemoteNotifications, object: error)
69
-             } else if let token = token {
70
-                 NotificationCenter.default.post(name: .capacitorDidRegisterForRemoteNotifications, object: token)
71
-             }
72
-        })
73
-    }
74
-
75
-    func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
76
-      NotificationCenter.default.post(name: .capacitorDidFailToRegisterForRemoteNotifications, object: error)
77
-    
78
-    }
79
-
80
-}

binární
ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png


+ 0 - 14
ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json

@@ -1,14 +0,0 @@
1
-{
2
-  "images" : [
3
-    {
4
-      "filename" : "AppIcon-512@2x.png",
5
-      "idiom" : "universal",
6
-      "platform" : "ios",
7
-      "size" : "1024x1024"
8
-    }
9
-  ],
10
-  "info" : {
11
-    "author" : "xcode",
12
-    "version" : 1
13
-  }
14
-}

+ 0 - 6
ios/App/App/Assets.xcassets/Contents.json

@@ -1,6 +0,0 @@
1
-{
2
-  "info" : {
3
-    "version" : 1,
4
-    "author" : "xcode"
5
-  }
6
-}

+ 0 - 23
ios/App/App/Assets.xcassets/Splash.imageset/Contents.json

@@ -1,23 +0,0 @@
1
-{
2
-  "images" : [
3
-    {
4
-      "idiom" : "universal",
5
-      "filename" : "splash-2732x2732-2.png",
6
-      "scale" : "1x"
7
-    },
8
-    {
9
-      "idiom" : "universal",
10
-      "filename" : "splash-2732x2732-1.png",
11
-      "scale" : "2x"
12
-    },
13
-    {
14
-      "idiom" : "universal",
15
-      "filename" : "splash-2732x2732.png",
16
-      "scale" : "3x"
17
-    }
18
-  ],
19
-  "info" : {
20
-    "version" : 1,
21
-    "author" : "xcode"
22
-  }
23
-}

binární
ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png


binární
ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png


binární
ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png


+ 0 - 32
ios/App/App/Base.lproj/LaunchScreen.storyboard

@@ -1,32 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17132" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
3
-    <device id="retina4_7" orientation="portrait" appearance="light"/>
4
-    <dependencies>
5
-        <deployment identifier="iOS"/>
6
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17105"/>
7
-        <capability name="System colors in document resources" minToolsVersion="11.0"/>
8
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
9
-    </dependencies>
10
-    <scenes>
11
-        <!--View Controller-->
12
-        <scene sceneID="EHf-IW-A2E">
13
-            <objects>
14
-                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
15
-                    <imageView key="view" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Splash" id="snD-IY-ifK">
16
-                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
17
-                        <autoresizingMask key="autoresizingMask"/>
18
-                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
19
-                    </imageView>
20
-                </viewController>
21
-                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
22
-            </objects>
23
-            <point key="canvasLocation" x="53" y="375"/>
24
-        </scene>
25
-    </scenes>
26
-    <resources>
27
-        <image name="Splash" width="1366" height="1366"/>
28
-        <systemColor name="systemBackgroundColor">
29
-            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
30
-        </systemColor>
31
-    </resources>
32
-</document>

+ 0 - 19
ios/App/App/Base.lproj/Main.storyboard

@@ -1,19 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14111" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
3
-    <device id="retina4_7" orientation="portrait">
4
-        <adaptation id="fullscreen"/>
5
-    </device>
6
-    <dependencies>
7
-        <deployment identifier="iOS"/>
8
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
9
-    </dependencies>
10
-    <scenes>
11
-        <!--Bridge View Controller-->
12
-        <scene sceneID="tne-QT-ifu">
13
-            <objects>
14
-                <viewController id="BYZ-38-t0r" customClass="CAPBridgeViewController" customModule="Capacitor" sceneMemberID="viewController"/>
15
-                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
16
-            </objects>
17
-        </scene>
18
-    </scenes>
19
-</document>

+ 0 - 38
ios/App/App/GoogleService-Info.plist

@@ -1,38 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
-<plist version="1.0">
4
-<dict>
5
-	<key>CLIENT_ID</key>
6
-	<string>496323526366-khm7rkn7rthnauaailuth9sdid4of8d8.apps.googleusercontent.com</string>
7
-	<key>REVERSED_CLIENT_ID</key>
8
-	<string>com.googleusercontent.apps.496323526366-khm7rkn7rthnauaailuth9sdid4of8d8</string>
9
-	<key>PLIST_VERSION</key>
10
-	<string>1</string>
11
-	<key>BUNDLE_ID</key>
12
-	<string>net.simplico.tmtlive</string>
13
-    <key>API_KEY</key>
14
-    <string>AIzaSyCEy_bLCJITwxRi-5vsiyArQM5oow5NAgk</string>
15
-    <key>GCM_SENDER_ID</key>
16
-    <string>214019008700</string>
17
-    <key>PLIST_VERSION</key>
18
-    <string>1</string>
19
-    <key>BUNDLE_ID</key>
20
-    <string>net.simplico.tmtlive</string>
21
-    <key>PROJECT_ID</key>
22
-    <string>tmtlive-557ac</string>
23
-    <key>STORAGE_BUCKET</key>
24
-    <string>tmtlive-557ac.appspot.com</string>
25
-    <key>IS_ADS_ENABLED</key>
26
-    <false></false>
27
-    <key>IS_ANALYTICS_ENABLED</key>
28
-    <false></false>
29
-    <key>IS_APPINVITE_ENABLED</key>
30
-    <true></true>
31
-    <key>IS_GCM_ENABLED</key>
32
-    <true></true>
33
-    <key>IS_SIGNIN_ENABLED</key>
34
-    <true></true>
35
-    <key>GOOGLE_APP_ID</key>
36
-    <string>1:214019008700:ios:be7fb5f07aeed695c088b9</string>
37
-</dict>
38
-</plist>

+ 0 - 91
ios/App/App/Info.plist

@@ -1,91 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
-<plist version="1.0">
4
-<dict>
5
-	<key>CFBundleDevelopmentRegion</key>
6
-	<string>en</string>
7
-	<key>CFBundleDisplayName</key>
8
-	<string>TMTApp</string>
9
-	<key>CFBundleExecutable</key>
10
-	<string>$(EXECUTABLE_NAME)</string>
11
-	<key>CFBundleIdentifier</key>
12
-	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
13
-	<key>CFBundleInfoDictionaryVersion</key>
14
-	<string>6.0</string>
15
-	<key>CFBundleName</key>
16
-	<string>$(PRODUCT_NAME)</string>
17
-	<key>CFBundlePackageType</key>
18
-	<string>APPL</string>
19
-	<key>CFBundleShortVersionString</key>
20
-	<string>$(MARKETING_VERSION)</string>
21
-	<key>CFBundleVersion</key>
22
-	<string>$(CURRENT_PROJECT_VERSION)</string>
23
-	<key>LSRequiresIPhoneOS</key>
24
-	<true/>
25
-	<key>UILaunchStoryboardName</key>
26
-	<string>LaunchScreen</string>
27
-	<key>UIMainStoryboardFile</key>
28
-	<string>Main</string>
29
-	<key>UIRequiredDeviceCapabilities</key>
30
-	<array>
31
-		<string>armv7</string>
32
-	</array>
33
-	<key>UISupportedInterfaceOrientations</key>
34
-	<array>
35
-		<string>UIInterfaceOrientationPortrait</string>
36
-		<string>UIInterfaceOrientationLandscapeLeft</string>
37
-		<string>UIInterfaceOrientationLandscapeRight</string>
38
-	</array>
39
-	<key>UISupportedInterfaceOrientations~ipad</key>
40
-	<array>
41
-		<string>UIInterfaceOrientationPortrait</string>
42
-		<string>UIInterfaceOrientationPortraitUpsideDown</string>
43
-		<string>UIInterfaceOrientationLandscapeLeft</string>
44
-		<string>UIInterfaceOrientationLandscapeRight</string>
45
-	</array>
46
-	<key>UIViewControllerBasedStatusBarAppearance</key>
47
-	<true/>
48
-  <key>CFBundleURLTypes</key>
49
-  <array>
50
-    <dict>
51
-      <key>CFBundleURLSchemes</key>
52
-      <array>
53
-        <string>fb200395709360570</string>
54
-      </array>
55
-    </dict>
56
-    <dict>
57
-			<key>CFBundleURLName</key>
58
-			<string>net.simplico.tmtlive</string>
59
-			<key>CFBundleURLSchemes</key>
60
-			<array>
61
-				<string>tmtlive</string>
62
-				<string>com.googleusercontent.apps.496323526366-khm7rkn7rthnauaailuth9sdid4of8d8</string>
63
-			</array>
64
-		</dict>
65
-  </array>
66
-  <key>FacebookAppID</key>
67
-  <string>200395709360570</string>
68
-  <key>FacebookClientToken</key>
69
-  <string>a3ae16e80d605bab9483feaa4c523e84</string>
70
-  <key>FacebookDisplayName</key>
71
-  <string>tigermuaythai.live</string>
72
-  <key>LSApplicationQueriesSchemes</key>
73
-  <array>
74
-    <string>fbapi</string>
75
-    <string>fbapi20130214</string>
76
-    <string>fbapi20130410</string>
77
-    <string>fbapi20130702</string>
78
-    <string>fbapi20131010</string>
79
-    <string>fbapi20131219</string>
80
-    <string>fbapi20140410</string>
81
-    <string>fbapi20140116</string>
82
-    <string>fbapi20150313</string>
83
-    <string>fbapi20150629</string>
84
-    <string>fbapi20160328</string>
85
-    <string>fbauth</string>
86
-    <string>fb-messenger-share-api</string>
87
-    <string>fbauth2</string>
88
-    <string>fbshareextension</string>
89
-  </array>
90
-</dict>
91
-</plist>

File diff suppressed because it is too large
+ 0 - 13
ios/App/App/google-services.json


+ 0 - 34
ios/App/Podfile

@@ -1,34 +0,0 @@
1
-require_relative '../../node_modules/@capacitor/ios/scripts/pods_helpers'
2
-
3
-platform :ios, '13.0'
4
-use_frameworks!
5
-
6
-# workaround to avoid Xcode caching of Pods that requires
7
-# Product -> Clean Build Folder after new Cordova plugins installed
8
-# Requires CocoaPods 1.6 or newer
9
-install! 'cocoapods', :disable_input_output_paths => true
10
-
11
-def capacitor_pods
12
-  pod 'Capacitor', :path => '../../node_modules/@capacitor/ios'
13
-  pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios'
14
-  pod 'CapacitorCommunityFacebookLogin', :path => '../../node_modules/@capacitor-community/facebook-login'
15
-  pod 'CapacitorApp', :path => '../../node_modules/@capacitor/app'
16
-  pod 'CapacitorHaptics', :path => '../../node_modules/@capacitor/haptics'
17
-  pod 'CapacitorKeyboard', :path => '../../node_modules/@capacitor/keyboard'
18
-  pod 'CapacitorPreferences', :path => '../../node_modules/@capacitor/preferences'
19
-  pod 'CapacitorPushNotifications', :path => '../../node_modules/@capacitor/push-notifications'
20
-  pod 'CapacitorShare', :path => '../../node_modules/@capacitor/share'
21
-  pod 'CapacitorStatusBar', :path => '../../node_modules/@capacitor/status-bar'
22
-  pod 'CapgoInappbrowser', :path => '../../node_modules/@capgo/inappbrowser'
23
-  pod 'CodetrixStudioCapacitorGoogleAuth', :path => '../../node_modules/@codetrix-studio/capacitor-google-auth'
24
-end
25
-
26
-target 'App' do
27
-  capacitor_pods
28
-  # Add your Pods here
29
-  pod 'Firebase/Messaging' # Add this line
30
-end
31
-
32
-post_install do |installer|
33
-  assertDeploymentTarget(installer)
34
-end

+ 0 - 197
ios/App/Podfile.lock

@@ -1,197 +0,0 @@
1
-PODS:
2
-  - AppAuth (1.6.2):
3
-    - AppAuth/Core (= 1.6.2)
4
-    - AppAuth/ExternalUserAgent (= 1.6.2)
5
-  - AppAuth/Core (1.6.2)
6
-  - AppAuth/ExternalUserAgent (1.6.2):
7
-    - AppAuth/Core
8
-  - Capacitor (5.5.0):
9
-    - CapacitorCordova
10
-  - CapacitorApp (5.0.6):
11
-    - Capacitor
12
-  - CapacitorCommunityFacebookLogin (5.0.3):
13
-    - Capacitor
14
-    - FBSDKCoreKit (= 16.1.3)
15
-    - FBSDKLoginKit (= 16.1.3)
16
-  - CapacitorCordova (5.5.0)
17
-  - CapacitorHaptics (5.0.6):
18
-    - Capacitor
19
-  - CapacitorKeyboard (5.0.6):
20
-    - Capacitor
21
-  - CapacitorPreferences (5.0.6):
22
-    - Capacitor
23
-  - CapacitorPushNotifications (5.1.0):
24
-    - Capacitor
25
-  - CapacitorShare (5.0.6):
26
-    - Capacitor
27
-  - CapacitorStatusBar (5.0.6):
28
-    - Capacitor
29
-  - CapgoInappbrowser (1.2.19):
30
-    - Capacitor
31
-  - CodetrixStudioCapacitorGoogleAuth (0.0.1):
32
-    - Capacitor
33
-    - GoogleSignIn (~> 6.2.4)
34
-  - FBAEMKit (16.1.3):
35
-    - FBSDKCoreKit_Basics (= 16.1.3)
36
-  - FBSDKCoreKit (16.1.3):
37
-    - FBAEMKit (= 16.1.3)
38
-    - FBSDKCoreKit_Basics (= 16.1.3)
39
-  - FBSDKCoreKit_Basics (16.1.3)
40
-  - FBSDKLoginKit (16.1.3):
41
-    - FBSDKCoreKit (= 16.1.3)
42
-  - Firebase/CoreOnly (10.17.0):
43
-    - FirebaseCore (= 10.17.0)
44
-  - Firebase/Messaging (10.17.0):
45
-    - Firebase/CoreOnly
46
-    - FirebaseMessaging (~> 10.17.0)
47
-  - FirebaseCore (10.17.0):
48
-    - FirebaseCoreInternal (~> 10.0)
49
-    - GoogleUtilities/Environment (~> 7.8)
50
-    - GoogleUtilities/Logger (~> 7.8)
51
-  - FirebaseCoreInternal (10.17.0):
52
-    - "GoogleUtilities/NSData+zlib (~> 7.8)"
53
-  - FirebaseInstallations (10.17.0):
54
-    - FirebaseCore (~> 10.0)
55
-    - GoogleUtilities/Environment (~> 7.8)
56
-    - GoogleUtilities/UserDefaults (~> 7.8)
57
-    - PromisesObjC (~> 2.1)
58
-  - FirebaseMessaging (10.17.0):
59
-    - FirebaseCore (~> 10.0)
60
-    - FirebaseInstallations (~> 10.0)
61
-    - GoogleDataTransport (~> 9.2)
62
-    - GoogleUtilities/AppDelegateSwizzler (~> 7.8)
63
-    - GoogleUtilities/Environment (~> 7.8)
64
-    - GoogleUtilities/Reachability (~> 7.8)
65
-    - GoogleUtilities/UserDefaults (~> 7.8)
66
-    - nanopb (< 2.30910.0, >= 2.30908.0)
67
-  - GoogleDataTransport (9.2.5):
68
-    - GoogleUtilities/Environment (~> 7.7)
69
-    - nanopb (< 2.30910.0, >= 2.30908.0)
70
-    - PromisesObjC (< 3.0, >= 1.2)
71
-  - GoogleSignIn (6.2.4):
72
-    - AppAuth (~> 1.5)
73
-    - GTMAppAuth (~> 1.3)
74
-    - GTMSessionFetcher/Core (< 3.0, >= 1.1)
75
-  - GoogleUtilities/AppDelegateSwizzler (7.11.6):
76
-    - GoogleUtilities/Environment
77
-    - GoogleUtilities/Logger
78
-    - GoogleUtilities/Network
79
-  - GoogleUtilities/Environment (7.11.6):
80
-    - PromisesObjC (< 3.0, >= 1.2)
81
-  - GoogleUtilities/Logger (7.11.6):
82
-    - GoogleUtilities/Environment
83
-  - GoogleUtilities/Network (7.11.6):
84
-    - GoogleUtilities/Logger
85
-    - "GoogleUtilities/NSData+zlib"
86
-    - GoogleUtilities/Reachability
87
-  - "GoogleUtilities/NSData+zlib (7.11.6)"
88
-  - GoogleUtilities/Reachability (7.11.6):
89
-    - GoogleUtilities/Logger
90
-  - GoogleUtilities/UserDefaults (7.11.6):
91
-    - GoogleUtilities/Logger
92
-  - GTMAppAuth (1.3.1):
93
-    - AppAuth/Core (~> 1.6)
94
-    - GTMSessionFetcher/Core (< 3.0, >= 1.5)
95
-  - GTMSessionFetcher/Core (2.3.0)
96
-  - nanopb (2.30909.1):
97
-    - nanopb/decode (= 2.30909.1)
98
-    - nanopb/encode (= 2.30909.1)
99
-  - nanopb/decode (2.30909.1)
100
-  - nanopb/encode (2.30909.1)
101
-  - PromisesObjC (2.3.1)
102
-
103
-DEPENDENCIES:
104
-  - "Capacitor (from `../../node_modules/@capacitor/ios`)"
105
-  - "CapacitorApp (from `../../node_modules/@capacitor/app`)"
106
-  - "CapacitorCommunityFacebookLogin (from `../../node_modules/@capacitor-community/facebook-login`)"
107
-  - "CapacitorCordova (from `../../node_modules/@capacitor/ios`)"
108
-  - "CapacitorHaptics (from `../../node_modules/@capacitor/haptics`)"
109
-  - "CapacitorKeyboard (from `../../node_modules/@capacitor/keyboard`)"
110
-  - "CapacitorPreferences (from `../../node_modules/@capacitor/preferences`)"
111
-  - "CapacitorPushNotifications (from `../../node_modules/@capacitor/push-notifications`)"
112
-  - "CapacitorShare (from `../../node_modules/@capacitor/share`)"
113
-  - "CapacitorStatusBar (from `../../node_modules/@capacitor/status-bar`)"
114
-  - "CapgoInappbrowser (from `../../node_modules/@capgo/inappbrowser`)"
115
-  - "CodetrixStudioCapacitorGoogleAuth (from `../../node_modules/@codetrix-studio/capacitor-google-auth`)"
116
-  - Firebase/Messaging
117
-
118
-SPEC REPOS:
119
-  trunk:
120
-    - AppAuth
121
-    - FBAEMKit
122
-    - FBSDKCoreKit
123
-    - FBSDKCoreKit_Basics
124
-    - FBSDKLoginKit
125
-    - Firebase
126
-    - FirebaseCore
127
-    - FirebaseCoreInternal
128
-    - FirebaseInstallations
129
-    - FirebaseMessaging
130
-    - GoogleDataTransport
131
-    - GoogleSignIn
132
-    - GoogleUtilities
133
-    - GTMAppAuth
134
-    - GTMSessionFetcher
135
-    - nanopb
136
-    - PromisesObjC
137
-
138
-EXTERNAL SOURCES:
139
-  Capacitor:
140
-    :path: "../../node_modules/@capacitor/ios"
141
-  CapacitorApp:
142
-    :path: "../../node_modules/@capacitor/app"
143
-  CapacitorCommunityFacebookLogin:
144
-    :path: "../../node_modules/@capacitor-community/facebook-login"
145
-  CapacitorCordova:
146
-    :path: "../../node_modules/@capacitor/ios"
147
-  CapacitorHaptics:
148
-    :path: "../../node_modules/@capacitor/haptics"
149
-  CapacitorKeyboard:
150
-    :path: "../../node_modules/@capacitor/keyboard"
151
-  CapacitorPreferences:
152
-    :path: "../../node_modules/@capacitor/preferences"
153
-  CapacitorPushNotifications:
154
-    :path: "../../node_modules/@capacitor/push-notifications"
155
-  CapacitorShare:
156
-    :path: "../../node_modules/@capacitor/share"
157
-  CapacitorStatusBar:
158
-    :path: "../../node_modules/@capacitor/status-bar"
159
-  CapgoInappbrowser:
160
-    :path: "../../node_modules/@capgo/inappbrowser"
161
-  CodetrixStudioCapacitorGoogleAuth:
162
-    :path: "../../node_modules/@codetrix-studio/capacitor-google-auth"
163
-
164
-SPEC CHECKSUMS:
165
-  AppAuth: 3bb1d1cd9340bd09f5ed189fb00b1cc28e1e8570
166
-  Capacitor: 57890b363df14d5d2d5d8461aa23e886cb34da2a
167
-  CapacitorApp: 024e1b1bea5f883d79f6330d309bc441c88ad04a
168
-  CapacitorCommunityFacebookLogin: c0e2bb54cb567d90443a80ae20569fdac0df3f89
169
-  CapacitorCordova: 3d3908a3d208a11a75f9df3b18c4405c4de76e1d
170
-  CapacitorHaptics: 1fffc1217c7e64a472d7845be50fb0c2f7d4204c
171
-  CapacitorKeyboard: b978154b024a5f65e044908e37d15b7de58b9d12
172
-  CapacitorPreferences: f03954bcb0ff09c792909e46bff88e3183c16b10
173
-  CapacitorPushNotifications: b31e326c6e4eb216a622041d6ca21a973f34943f
174
-  CapacitorShare: cd41743331cb71d217c029de54b681cbd91e0fcc
175
-  CapacitorStatusBar: 565c0a1ebd79bb40d797606a8992b4a105885309
176
-  CapgoInappbrowser: a1d7b17df89659ece82ad102a0775786c6166512
177
-  CodetrixStudioCapacitorGoogleAuth: fcce058390347c1ce5d8ac4764bdf1f5c1ee233b
178
-  FBAEMKit: af2972f39bb0f3f7c45998f435b007833c32ffb2
179
-  FBSDKCoreKit: 19e2e18b3be578d7a51fed8fdd8c152bef0b9511
180
-  FBSDKCoreKit_Basics: dd9826ce3c9fd9f8cdf8dbbd0ef0a53e6c0c9e7e
181
-  FBSDKLoginKit: c395c63a1a6cf4a8a1e6103fd94b8c46329ee81c
182
-  Firebase: f4ac0b02927af9253ae094d23deecf0890da7374
183
-  FirebaseCore: 534544dd98cabcf4bf8598d88ec683b02319a528
184
-  FirebaseCoreInternal: 2cf9202e226e3f78d2bf6d56c472686b935bfb7f
185
-  FirebaseInstallations: 9387bf15abfc69a714f54e54f74a251264fdb79b
186
-  FirebaseMessaging: 1367b28c0c83a63072af4a711328fcc2e6899902
187
-  GoogleDataTransport: 54dee9d48d14580407f8f5fbf2f496e92437a2f2
188
-  GoogleSignIn: 5651ce3a61e56ca864160e79b484cd9ed3f49b7a
189
-  GoogleUtilities: 202e7a9f5128accd11160fb9c19612de1911aa19
190
-  GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd
191
-  GTMSessionFetcher: 3a63d75eecd6aa32c2fc79f578064e1214dfdec2
192
-  nanopb: d4d75c12cd1316f4a64e3c6963f879ecd4b5e0d5
193
-  PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4
194
-
195
-PODFILE CHECKSUM: e092ee1cde7b2ee2c683b5d37e9df1aa750682e4
196
-
197
-COCOAPODS: 1.12.1

File diff suppressed because it is too large
+ 3089 - 115
package-lock.json


+ 3 - 0
package.json

@@ -12,6 +12,7 @@
12 12
     "lint": "eslint"
13 13
   },
14 14
   "dependencies": {
15
+    "@capacitor-community/apple-sign-in": "^5.0.0",
15 16
     "@capacitor-community/facebook-login": "^5.0.3",
16 17
     "@capacitor/app": "5.0.6",
17 18
     "@capacitor/core": "5.5.0",
@@ -21,6 +22,7 @@
21 22
     "@capacitor/preferences": "^5.0.6",
22 23
     "@capacitor/push-notifications": "^5.1.0",
23 24
     "@capacitor/share": "^5.0.6",
25
+    "@capacitor/splash-screen": "^5.0.6",
24 26
     "@capacitor/status-bar": "5.0.6",
25 27
     "@capgo/inappbrowser": "^1.2.19",
26 28
     "@codetrix-studio/capacitor-google-auth": "^3.3.4",
@@ -44,6 +46,7 @@
44 46
     "vue-vimeo-player": "^1.1.2"
45 47
   },
46 48
   "devDependencies": {
49
+    "@capacitor/assets": "^3.0.4",
47 50
     "@capacitor/cli": "5.5.0",
48 51
     "@vitejs/plugin-legacy": "^4.0.2",
49 52
     "@vitejs/plugin-vue": "^4.0.0",

binární
public/images/circlelogo-trans.png


binární
public/images/logo.png


+ 46 - 0
public/manifest.webmanifest

@@ -0,0 +1,46 @@
1
+{
2
+  "icons": [
3
+    {
4
+      "src": "../icons/icon-48.webp",
5
+      "type": "image/png",
6
+      "sizes": "48x48",
7
+      "purpose": "any maskable"
8
+    },
9
+    {
10
+      "src": "../icons/icon-72.webp",
11
+      "type": "image/png",
12
+      "sizes": "72x72",
13
+      "purpose": "any maskable"
14
+    },
15
+    {
16
+      "src": "../icons/icon-96.webp",
17
+      "type": "image/png",
18
+      "sizes": "96x96",
19
+      "purpose": "any maskable"
20
+    },
21
+    {
22
+      "src": "../icons/icon-128.webp",
23
+      "type": "image/png",
24
+      "sizes": "128x128",
25
+      "purpose": "any maskable"
26
+    },
27
+    {
28
+      "src": "../icons/icon-192.webp",
29
+      "type": "image/png",
30
+      "sizes": "192x192",
31
+      "purpose": "any maskable"
32
+    },
33
+    {
34
+      "src": "../icons/icon-256.webp",
35
+      "type": "image/png",
36
+      "sizes": "256x256",
37
+      "purpose": "any maskable"
38
+    },
39
+    {
40
+      "src": "../icons/icon-512.webp",
41
+      "type": "image/png",
42
+      "sizes": "512x512",
43
+      "purpose": "any maskable"
44
+    }
45
+  ]
46
+}

+ 13 - 2
src/App.vue

@@ -5,13 +5,24 @@
5 5
 </template>
6 6
 
7 7
 <script setup lang="ts">
8
-import { IonApp, IonRouterOutlet, onIonViewWillEnter } from '@ionic/vue';
8
+import { IonApp, IonRouterOutlet, onIonViewWillEnter, onIonViewDidEnter } from '@ionic/vue';
9 9
 import { defineComponent, onMounted } from 'vue';
10
+import { SplashScreen } from '@capacitor/splash-screen';
10 11
 
11 12
 
12 13
 
14
+onMounted(async () => {
15
+  //alert("Hello");
16
+  /*
17
+  await SplashScreen.show({
18
+    showDuration: 2000,
19
+    autoHide: true,
20
+  });*/
21
+});
22
+
13 23
 onIonViewWillEnter(() => {
14 24
   console.log("Init On Mouting")
15 25
 });
16
-
26
+onIonViewDidEnter(() => {
27
+});
17 28
 </script>

+ 1 - 1
src/components/SearchItem.vue

@@ -3,7 +3,7 @@
3 3
     <ion-thumbnail slot="start">
4 4
       <ion-img alt="Silhouette of mountains" :src="thmb"  v-if="thmb" />
5 5
     </ion-thumbnail>
6
-    <ion-label>{{ name }} <br><span class='small'><ion-icon :icon="timer" size="small" />{{ dt }}</span></ion-label>
6
+    <ion-label color="light">{{ name }} <br><span class='small'><ion-icon :icon="timer" size="small" />{{ dt }}</span></ion-label>
7 7
   </ion-item>
8 8
 </template>
9 9
 

+ 36 - 5
src/composable/settings.ts

@@ -12,6 +12,7 @@ export const TOKEN = '173cb9e357a861abd91e8008fab9246e0cc116af'
12 12
 export const BASE_URL = 'http://localhost:8020/'
13 13
 //export const BASE_URL = 'https://www.tigermuaythai.live/'
14 14
 
15
+export const APPLE_CALLBACK = BASE_URL + "soc_accounts/apple/login/callback/";
15 16
 //const axios = setupCache(Axios); 
16 17
 //
17 18
 //axios.defaults.xsrfHeaderName = "X-CSRFTOKEN";
@@ -43,7 +44,7 @@ export const getToken = async () => {
43 44
   console.log("get token ")
44 45
   const token = await Preferences.get({ key: 'token' });
45 46
   console.log(token)
46
-  if( token.value == null ) {
47
+  if( token.value == null || token.value == "" ) {
47 48
     //const { data } = await axios.post(BASE_URL + "api-token-auth/", {username: 'root', password: 'Tum 1984'})
48 49
     const { data } = await axios.post(BASE_URL + "dj-rest-auth/login/", {username: 'root', password: 'Tum 1984'})
49 50
     console.log("get token ", data)
@@ -265,9 +266,10 @@ export const facebookLogin = async(access_token) => {
265 266
     headers: {
266 267
       'Content-Type': 'application/json', 
267 268
     }
268
-  }).catch((error) => {
269
-    console.log("fb error = ", error)
270 269
   })
270
+  //.catch((error) => {
271
+    //console.log("fb error = ", error)
272
+  //})
271 273
   console.log("facebook login = ", data)
272 274
   return data
273 275
 }
@@ -280,9 +282,10 @@ export const ggLogin = async(access_token, id_token) => {
280 282
     headers: {
281 283
       'Content-Type': 'application/json', 
282 284
     }
283
-  }).catch((error) => {
284
-    console.log("gg error = ", error)
285 285
   })
286
+  //.catch((error) => {
287
+    //console.log("gg error = ", error)
288
+  //})
286 289
   console.log("gg login = ", data)
287 290
   return data
288 291
 }
@@ -389,3 +392,31 @@ export const likeMat = async (cid) => {
389 392
   console.info(data)
390 393
   return data
391 394
 }
395
+
396
+
397
+export const updateNoti = async (noti) => {
398
+  const token = await Preferences.get({ key: 'token' });
399
+  console.log("token = ", token)
400
+  const { data } = await axios.post(BASE_URL + `backend/api/profiles/update_noti/`,
401
+  {live_noti: noti.liveNoti, 'news_noti':noti.newsNoti},
402
+  {
403
+    headers: { 
404
+    'Authorization': `Token ${token.value}`
405
+    }
406
+  })
407
+  console.info(data)
408
+  return data
409
+}
410
+
411
+export const appleLogin = async(access_token) => {
412
+
413
+  const token = await Preferences.get({ key: 'token' });
414
+  console.log("access_code = ", access_token)
415
+  const { data } = await axios.post(BASE_URL + 'dj-rest-auth/apple/',{access_token: access_token.authorizationCode, id_token: access_token.identityToken}, {
416
+    headers: {
417
+      'Content-Type': 'application/json', 
418
+    }
419
+  })
420
+  console.log("apple login = ", data)
421
+  return data
422
+}

+ 1 - 0
src/views/CourseMatDetailPage.vue

@@ -10,6 +10,7 @@
10 10
       </ion-toolbar>
11 11
     </ion-header>
12 12
     <ion-content class='ion-text-wrap'>
13
+      
13 14
       <div style="padding:56.25% 0 0 0;position:relative;" v-html="mat.embed" v-if='mat'></div>
14 15
       <div v-if="mat" class='ion-padding ion-text-wrap'>
15 16
         <h2 v-if='name'>{{ name }}</h2>

+ 98 - 15
src/views/ProfilePage.vue

@@ -16,10 +16,10 @@
16 16
             <ion-label>Notifications</ion-label>
17 17
           </ion-list-header>
18 18
           <ion-item>
19
-            <ion-toggle v-model="liveNoti" color="primary">Receive Live Notifications</ion-toggle>
19
+            <ion-toggle v-model="noti.liveNoti" color="primary" @ionChange="onNoti">Receive Live Notifications</ion-toggle>
20 20
           </ion-item>
21 21
           <ion-item>
22
-            <ion-toggle v-model="newsNoti">Receive News Update</ion-toggle>
22
+            <ion-toggle v-model="noti.newsNoti" @ionChange="onNoti">Receive News Update</ion-toggle>
23 23
           </ion-item>
24 24
           <ion-list-header>
25 25
             <ion-label>Select Courses You like</ion-label>
@@ -41,6 +41,7 @@
41 41
       <ion-button @click='fbLogout' expand='full'>Logout</ion-button>
42 42
       </template>
43 43
       <template v-else>
44
+        <ion-img src="/images/circlelogo-trans.png" style='width:200px; margin:10px auto' />
44 45
         <LoginForm @user-login="userLogin" />
45 46
         <ion-grid>
46 47
             <ion-row>
@@ -52,17 +53,29 @@
52 53
               </ion-col>
53 54
             </ion-row>
54 55
         </ion-grid>
56
+        <div color="light" v-if="formError" class='ion-margin ion-text-center'>{{ formError }}</div>
55 57
         <ion-grid>
58
+          <h3 class='ion-text-center'>Login With</h3>
56 59
           <ion-row class='ion-justify-content-center'>
57
-            <ion-col size=6>
58
-              <ion-button @click='fbLogin' expand='full'>Facebook Login</ion-button>
60
+            <ion-col size=4>
61
+              <ion-button @click='fbLogin' expand='full'>
62
+                <ion-icon slot="start" :icon="logoFacebook"></ion-icon>
63
+
64
+                Facebook</ion-button>
65
+            </ion-col>
66
+            <ion-col size=4>
67
+              <ion-button @click='ggLoginClick' expand='full'>
68
+
69
+                <ion-icon slot="start" :icon="logoGoogle"></ion-icon>
70
+                Google</ion-button>
59 71
             </ion-col>
60
-            <ion-col size=6>
61
-              <ion-button @click='ggLoginClick' expand='full'>Google Login</ion-button>
72
+            <ion-col size=4>
73
+              <ion-button @click='onAppleLogin' expand='full'>
74
+                <ion-icon slot="start" :icon="logoApple"></ion-icon>
75
+                Apple</ion-button>
62 76
             </ion-col>
63 77
           </ion-row>
64 78
         </ion-grid>
65
-        <ion-text color="danger" v-if="formError">{{ formError }}</ion-text>
66 79
       </template>
67 80
     </ion-content>
68 81
   </ion-page>
@@ -74,11 +87,24 @@ import ExploreContainer from '@/components/ExploreContainer.vue';
74 87
 import LoginForm from '@/components/LoginForm.vue';
75 88
 import { defineComponent, onMounted } from 'vue';
76 89
 import { GoogleAuth } from '@codetrix-studio/capacitor-google-auth';
77
-import { facebookLogin, setUserToken, logout, clearPref, BASE_URL, listCourses, getPref, likeCourse, isLogin, ggLogin } from '@/composable/settings';
90
+import { facebookLogin, setUserToken, logout, clearPref, BASE_URL, listCourses, getPref, likeCourse, isLogin, ggLogin, updateNoti, APPLE_CALLBACK, appleLogin } from '@/composable/settings';
78 91
 import { InAppBrowser } from '@capgo/inappbrowser'
79
-import { close, closeCircle, pin } from 'ionicons/icons';
92
+import { close, closeCircle, pin, logoApple, logoFacebook, logoGoogle  } from 'ionicons/icons';
80 93
 
81 94
 
95
+import {
96
+  SignInWithApple,
97
+  SignInWithAppleResponse,
98
+  SignInWithAppleOptions,
99
+} from '@capacitor-community/apple-sign-in';
100
+
101
+let apple_options: SignInWithAppleOptions = {
102
+  clientId: 'net.simplico.tmtlive',
103
+  redirectURI: APPLE_CALLBACK,
104
+  scopes: 'email name',
105
+  state: 'TMTLIVE',
106
+  nonce: 'nonce',
107
+};
82 108
 
83 109
 
84 110
 onMounted(() => {
@@ -90,7 +116,7 @@ import {
90 116
   FacebookLoginResponse,
91 117
 } from '@capacitor-community/facebook-login';
92 118
 
93
-import { ref } from 'vue';
119
+import { ref, reactive } from 'vue';
94 120
 
95 121
 const FACEBOOK_PERMISSIONS = [
96 122
   'email',
@@ -107,7 +133,7 @@ const list_courses = ref([])
107 133
 const formError = ref(null)
108 134
 const selecteds = ref([])
109 135
 const myprofile = ref()
110
-
136
+const noti = reactive({liveNoti: true, newsNoti: true});
111 137
 const openReset = async () => {
112 138
   console.log("open Reset")
113 139
   const browser = await InAppBrowser.open({ url: BASE_URL + "accounts/password_reset/" });
@@ -150,7 +176,8 @@ const ggLoginClick = async () => {
150 176
       refIsLogin.value = true
151 177
       
152 178
     }catch(error) {
153
-      formError.value = "Please Check Your UserId/Password"
179
+      console.log(error);
180
+      formError.value = error.response.data.non_field_errors.join("\n");
154 181
       console.log(error)
155 182
     }
156 183
   }
@@ -172,7 +199,7 @@ const fbLogin = async () => {
172 199
       // Login successful.
173 200
       refIsLogin.value = true
174 201
     }catch(error) {
175
-      formError.value = "Please Check Your UserId/Password"
202
+      formError.value = error.response.data.non_field_errors.join("\n");
176 203
     }
177 204
     console.log(`Facebook access token is ${result.accessToken.token}`);
178 205
   }
@@ -190,6 +217,7 @@ const btnLogout = async () => {
190 217
 onIonViewWillEnter(async () => {
191 218
   console.log("ion view will enter")
192 219
   console.log(await isLogin())
220
+  /*
193 221
   const result = await (<FacebookLoginResponse>(
194 222
     FacebookLogin.getCurrentAccessToken()
195 223
   ));
@@ -200,10 +228,13 @@ onIonViewWillEnter(async () => {
200 228
     await getProfile()
201 229
   }else {
202 230
     refIsLogin.value = false
203
-  }
231
+  }*/
204 232
 
205 233
   list_courses.value = await listCourses()
206
-  ggCheckLogin()
234
+  //ggCheckLogin()
235
+
236
+  //appleCheckLogin()
237
+
207 238
   refIsLogin.value = await isLogin()
208 239
   if( refIsLogin.value == true ) {
209 240
     myprofile.value  = await getPref()
@@ -231,6 +262,30 @@ const ggCheckLogin = async() => {
231 262
             }
232 263
         });
233 264
 }
265
+const appleCheckLogin = async() => {
266
+
267
+  SignInWithApple.authorize(apple_options)
268
+  .then(async (result: SignInWithAppleResponse) => {
269
+    console.debug(result);
270
+    // Handle user information
271
+    try{
272
+      //let d = await appleLogin(result.response)
273
+      //console.log("apple authen ", d)
274
+      //await setUserToken(d.key)
275
+      myprofile.value  = await getPref()
276
+      //await getProfile()
277
+      // Login successful.
278
+      refIsLogin.value = true
279
+    }catch(error) {
280
+      console.log("apple check login ", error);
281
+      //formError.value = error.response.data.non_field_errors[0]
282
+    }
283
+    // Validate token with server and create new session
284
+  })
285
+  .catch(error => {
286
+    // Handle error
287
+  });
288
+}
234 289
 const clear = async() => {
235 290
   await clearPref()
236 291
 }
@@ -260,4 +315,32 @@ const handleChange = async (ev) =>{
260 315
   }
261 316
 
262 317
 }
318
+const onNoti = async(ev) => {
319
+  console.log(noti);
320
+  const data = await updateNoti(noti);
321
+  console.log(data);
322
+}
323
+const onAppleLogin = async () => { 
324
+  SignInWithApple.authorize(apple_options)
325
+  .then(async (result: SignInWithAppleResponse) => {
326
+    console.debug(result);
327
+    // Handle user information
328
+    try{
329
+      let d = await appleLogin(result.response)
330
+      console.log("apple authen ", d)
331
+      await setUserToken(d.key)
332
+      myprofile.value  = await getPref()
333
+      //await getProfile()
334
+      // Login successful.
335
+      refIsLogin.value = true
336
+    }catch(error) {
337
+      console.log(error);
338
+      formError.value = error.response.data.non_field_errors.join("\n");
339
+    }
340
+    // Validate token with server and create new session
341
+  })
342
+  .catch(error => {
343
+    // Handle error
344
+  });
345
+}
263 346
 </script>

+ 19 - 6
src/views/Tab1Page.vue

@@ -61,7 +61,7 @@
61 61
 <script setup lang="ts">
62 62
 
63 63
   import { IonPage, IonHeader, IonToolbar, IonTitle, IonContent, IonIcon, onIonViewWillEnter, IonButton, 
64
-  onIonViewWillLeave, IonItem, IonLabel, IonThumbnail, IonCol, IonGrid, IonRow, IonCard, IonCardContent, IonCardHeader, IonCardSubtitle, IonCardTitle, onIonViewDidEnter,  IonButtons, IonImg } from '@ionic/vue';
64
+  onIonViewWillLeave, IonItem, IonLabel, IonThumbnail, IonCol, IonGrid, IonRow, IonCard, IonCardContent, IonCardHeader, IonCardSubtitle, IonCardTitle, onIonViewDidEnter,  IonButtons, IonImg, useIonRouter } from '@ionic/vue';
65 65
 
66 66
 import ExploreContainer  from '@/components/ExploreContainer.vue';
67 67
 import CourseSchedule from '@/components/CourseSchedule.vue'
@@ -72,7 +72,7 @@ import SearchEngine from '@/components/SearchEngine.vue'
72 72
 import { CapacitorHttp } from '@capacitor/core';
73 73
 import { ref } from 'vue';
74 74
 import { TOKEN, getProducts, setToken, getObject, getToken, getTrainers, listMats, storeAPNToken,
75
-getTodayProgs, getLive, getPosts, initAPI} from '@/composable/settings';
75
+getTodayProgs, getLive, getPosts, initAPI, clearPref, isLogin} from '@/composable/settings';
76 76
 //import VueCoreVideoPlayer from 'vue-core-video-player'
77 77
 import { vueVimeoPlayer } from 'vue-vimeo-player'
78 78
 
@@ -105,6 +105,8 @@ const scrollToBottom = () => {
105 105
 };
106 106
 const items = ref([{msg: 'foo'}, {msg: 'bar2'}])
107 107
 
108
+const ionRouter = useIonRouter();
109
+
108 110
 const options = {
109 111
       id: 59777392,
110 112
       width: 640,
@@ -117,6 +119,11 @@ const options = {
117 119
 const liveObj = ref()
118 120
 const modules =  [Autoplay, Keyboard, Pagination, Scrollbar, Zoom]
119 121
   onIonViewWillEnter(async () => {
122
+    let v = await isLogin()
123
+    console.log("v === ", v)
124
+    if( v == false ) {
125
+      ionRouter.navigate('/tabs/tab4', 'forward', 'replace');
126
+    }
120 127
     //console.log("video " ,video)
121 128
     //console.log("video id", video.value.id)
122 129
     //const player = new Player(video.value.id, options);
@@ -134,9 +141,15 @@ const modules =  [Autoplay, Keyboard, Pagination, Scrollbar, Zoom]
134 141
     //console.log('u ', u)
135 142
     await initAPI()
136 143
     token.value = await getToken()
137
-    getTrainers().then( (data) => {
138
-      trainers.value = data
139
-    })
144
+    
145
+    try{
146
+      trainers.value = await getTrainers()
147
+    }catch(error){
148
+      console.log("trainers ", error)
149
+      await clearPref()
150
+      token.value = await getToken()
151
+    }
152
+
140 153
     listMats().then( (data) => {
141 154
       mats.value = data
142 155
     })
@@ -157,7 +170,7 @@ const modules =  [Autoplay, Keyboard, Pagination, Scrollbar, Zoom]
157 170
       if( liveObj.value == null ||  liveObj.value.result == false ) {
158 171
         liveObj.value = await getLive()
159 172
       }
160
-    }, 10000)
173
+    }, 100000)
161 174
   })
162 175
 
163 176
   onIonViewWillLeave(() => {

+ 10 - 2
src/views/Tab2Page.vue

@@ -31,16 +31,24 @@
31 31
 </template>
32 32
 
33 33
 <script setup lang="ts">
34
-import { IonPage, IonHeader, IonToolbar, IonTitle, IonContent, IonGrid, IonRow, IonCol, onIonViewWillEnter, IonProgressBar, IonIcon, IonButtons, IonButton} from '@ionic/vue';
34
+import { IonPage, IonHeader, IonToolbar, IonTitle, IonContent, IonGrid, IonRow, IonCol, onIonViewWillEnter, IonProgressBar, IonIcon, IonButtons, IonButton, useIonRouter} from '@ionic/vue';
35 35
 import { search } from 'ionicons/icons';
36 36
 
37 37
 import Course from '@/components/Course.vue';
38 38
 import { ref } from 'vue';
39 39
 
40
-import {listCourses} from '@/composable/settings';
40
+import {listCourses, isLogin} from '@/composable/settings';
41 41
 const courses = ref([]);
42 42
 const processing = ref(false);
43
+const ionRouter = useIonRouter();
44
+
43 45
 onIonViewWillEnter(async () => {
46
+  let v = await isLogin()
47
+  console.log("v === ", v)
48
+  if( v == false ) {
49
+    ionRouter.navigate('/tabs/tab4', 'forward', 'replace');
50
+  }
51
+
44 52
   processing.value = true;
45 53
   courses.value = await listCourses()
46 54
   processing.value = false;

+ 8 - 2
src/views/Tab3Page.vue

@@ -81,13 +81,13 @@
81 81
 
82 82
 <script setup lang="ts">
83 83
 import { IonPage, IonHeader, IonToolbar, IonTitle, IonContent, IonIcon, IonSegment, IonSegmentButton, onIonViewWillEnter, IonGrid, 
84
-IonRow, IonCol, IonButton, IonButtons } from '@ionic/vue';
84
+IonRow, IonCol, IonButton, IonButtons, useIonRouter } from '@ionic/vue';
85 85
 import { home, heart, pin, star, call, globe, basket, barbell, trash, person, search } from 'ionicons/icons';
86 86
 import ExploreContainer from '@/components/ExploreContainer.vue';
87 87
 import CourseSchedule from '@/components/CourseSchedule.vue';
88 88
 import { ref } from 'vue';
89 89
 
90
-import { getTodayProgs } from '@/composable/settings';
90
+import { getTodayProgs, isLogin } from '@/composable/settings';
91 91
 
92 92
 const today = ref()
93 93
 const weekday = ["sun","mon","tue","wed","thu","fri","sat"];
@@ -98,10 +98,16 @@ const thu = ref()
98 98
 const fri = ref()
99 99
 const sat = ref()
100 100
 const sun = ref()
101
+const ionRouter = useIonRouter();
101 102
 
102 103
 onIonViewWillEnter( async () => {
103 104
   const d = new Date();
104 105
   console.log(" d ", d.getDay())
106
+  let v = await isLogin()
107
+  console.log("v === ", v)
108
+  if( v == false ) {
109
+    ionRouter.navigate('/tabs/tab4', 'forward', 'replace');
110
+  }
105 111
   today.value = weekday[d.getDay()];
106 112
   mon.value = await getTodayProgs("mon")
107 113
   tue.value = await getTodayProgs("tue")

+ 7 - 1
src/views/TabsPage.vue

@@ -27,7 +27,13 @@
27 27
 </template>
28 28
 
29 29
 <script setup lang="ts">
30
-import { IonTabBar, IonTabButton, IonTabs, IonLabel, IonIcon, IonPage, IonRouterOutlet } from '@ionic/vue';
30
+import { IonTabBar, IonTabButton, IonTabs, IonLabel, IonIcon, IonPage, IonRouterOutlet, onIonViewWillEnter, useIonRouter } from '@ionic/vue';
31 31
 import { ellipse, square, triangle, person, time, videocam, grid } from 'ionicons/icons';
32
+import { isLogin } from '@/composable/settings';
32 33
 
34
+const ionRouter = useIonRouter();
35
+
36
+onIonViewWillEnter(async () => {
37
+  console.log("tabs init ...")
38
+})
33 39
 </script>