Browse Source

crewlink showcrew fixed

Fares 11 months ago
parent
commit
5db4dad759
7 changed files with 202 additions and 34 deletions
  1. 43 0
      lib/authpages/auth_magiclink.dart
  2. 23 1
      lib/core/routes.dart
  3. 5 0
      lib/core/utils.dart
  4. 8 20
      lib/csv/data.dart
  5. 14 1
      lib/fltinfo/view/fltinfo_page.dart
  6. 108 12
      pubspec.lock
  7. 1 0
      pubspec.yaml

+ 43 - 0
lib/authpages/auth_magiclink.dart

@@ -0,0 +1,43 @@
+// ignore_for_file: use_build_context_synchronously
+
+import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:hive_flutter/hive_flutter.dart';
+import 'package:supabase_auth_ui/supabase_auth_ui.dart';
+import 'package:tp5/core/basic_page.dart';
+
+class AuthMagiclink extends ConsumerStatefulWidget {
+  const AuthMagiclink({super.key});
+
+  @override
+  createState() => _AuthMagiclinkState();
+}
+
+class _AuthMagiclinkState extends ConsumerState<AuthMagiclink> {
+  // final _formKey = GlobalKey<FormState>();
+  // AutovalidateMode? _autovalidateMode;
+  // bool _isSubmitting = false;
+
+  // final _userCtrl = TextEditingController()
+  //   ..text = Hive.box("profile").get("crewlink_user") ?? "";
+  // final _passCtrl = TextEditingController()
+  //   ..text = Hive.box("profile").get("crewlink_pass") ?? "";
+
+  @override
+  Widget build(BuildContext context) {
+    return BasicPage(
+      title: "TAR Pilot v5 / Connect",
+      body: SingleChildScrollView(
+          child: SupaMagicAuth(
+        redirectUrl: kIsWeb ? null : 'com.example.tp5://callback',
+        onSuccess: (Session response) {
+          print(response);
+        },
+        onError: (error) {
+          print(error);
+        },
+      )),
+    );
+  }
+}

+ 23 - 1
lib/core/routes.dart

@@ -1,11 +1,14 @@
 import 'dart:developer';
 import 'dart:developer';
 
 
+import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_riverpod/flutter_riverpod.dart';
 import 'package:flutter_riverpod/flutter_riverpod.dart';
 import 'package:go_router/go_router.dart';
 import 'package:go_router/go_router.dart';
 import 'package:hive_flutter/hive_flutter.dart';
 import 'package:hive_flutter/hive_flutter.dart';
 import 'package:jiffy/jiffy.dart';
 import 'package:jiffy/jiffy.dart';
+import 'package:supabase_auth_ui/supabase_auth_ui.dart';
 import 'package:tp5/auth/auth.dart';
 import 'package:tp5/auth/auth.dart';
+import 'package:tp5/authpages/auth_magiclink.dart';
 import 'package:tp5/core/basic_page.dart';
 import 'package:tp5/core/basic_page.dart';
 import 'package:tp5/core/utils.dart';
 import 'package:tp5/core/utils.dart';
 import 'package:tp5/flightslist/flightslist_page.dart';
 import 'package:tp5/flightslist/flightslist_page.dart';
@@ -30,13 +33,14 @@ final _routes = GoRouter(
   debugLogDiagnostics: false,
   debugLogDiagnostics: false,
   redirect: (_, s) {
   redirect: (_, s) {
     log("${s.fullPath} | ${s.extra.runtimeType.toString()}", name: "routes");
     log("${s.fullPath} | ${s.extra.runtimeType.toString()}", name: "routes");
-    if (DateTime.now().isAfter(DateTime(2024, 11, 1))) {
+    if (DateTime.now().isAfter(DateTime(2024, 12, 31))) {
       return "/expired";
       return "/expired";
     }
     }
 
 
     return null;
     return null;
   },
   },
 //  initialLocation: '/test',
 //  initialLocation: '/test',
+  // initialLocation: '/auth/magiclink',
   initialLocation: '/crewlink/roster',
   initialLocation: '/crewlink/roster',
   routes: [
   routes: [
     GoRoute(
     GoRoute(
@@ -71,6 +75,24 @@ final _routes = GoRouter(
         ),
         ),
       ),
       ),
     ),
     ),
+    GoRoute(
+        path: "/auth",
+        redirect: (_, state) {
+          // if
+          //     (state.fullPath != "/crewlink/settings" &&
+          //         (((Hive.box("profile").get("crewlink_user") ?? "") == "") ||
+          //             ((Hive.box("profile").get("crewlink_pass") ?? "") ==
+          //                 ""))) {
+          //   return "/crewlink/settings";
+          // }
+          return null;
+        },
+        routes: [
+          GoRoute(
+            path: '/magiclink',
+            builder: (context, state) => AuthMagiclink(),
+          )
+        ]),
     GoRoute(
     GoRoute(
       path: '/expired',
       path: '/expired',
       builder: (context, state) => BasicPage(
       builder: (context, state) => BasicPage(

+ 5 - 0
lib/core/utils.dart

@@ -10,6 +10,11 @@ import 'package:path_provider/path_provider.dart';
 import 'package:timezone/timezone.dart' as tz;
 import 'package:timezone/timezone.dart' as tz;
 import 'package:tp5/providers/airports.dart';
 import 'package:tp5/providers/airports.dart';
 
 
+Jiffy jiffyfromddmmmyyhhmm(String str) => Jiffy.parse(
+    "${str.substring(0, 7)} ${str.substring(8, 10)}:${str.substring(10, 12)}",
+    pattern: "ddMMMyy H:mm",
+    isUtc: true);
+
 extension JiffyExtensions on Jiffy? {
 extension JiffyExtensions on Jiffy? {
   Jiffy? latest(Jiffy? val2) {
   Jiffy? latest(Jiffy? val2) {
     if (this == null) return val2;
     if (this == null) return val2;

+ 8 - 20
lib/csv/data.dart

@@ -357,22 +357,6 @@ class DataState {
         return "${pn?.lname} ${pn?.fname}";
         return "${pn?.lname} ${pn?.fname}";
       });
       });
 
 
-  // PnlegMeta get pnleg_tlcs_dates {
-  //   Set<String> tlcs = {};
-  //   Set<Jiffy> dates = {};
-  //   for (Pnleg leg in pnleg) {
-  //     tlcs.add(leg.tlc ?? "");
-  //     dates.add(leg.jdep?.startOf(Unit.day) ??
-  //         Jiffy.parse(leg.date ?? "01/01/1970",
-  //             pattern: "dd/MM/yyyy", isUtc: true));
-  //   }
-  //   // final restlcs = tlcs.sortedBy((k) =>qualif.firstWhereOrNull((q) => q.tlc == k)?.lname ?? "zzzzzzzzzzzzz");
-  //   final restlcs = tlcs.sortedBy((e) =>
-  //       "${qualif.firstWhereOrNull((k) => k.tlc == e)?.lname} ${qualif.firstWhereOrNull((k) => k.tlc == e)?.fname}");
-  //   final resdates = dates.sortedBy((k) => k.millisecondsSinceEpoch.toString());
-  //   return PnlegMeta(tlcs: restlcs, dates: resdates);
-  // }
-
   DataState({
   DataState({
     this.qualif = const [],
     this.qualif = const [],
     this.pnleg = const [],
     this.pnleg = const [],
@@ -548,10 +532,14 @@ class DataNotifier extends StateNotifier<DataState> {
   }
   }
 
 
   loadAll() async {
   loadAll() async {
-    if (qualiftime != qualifupdate) await loadQualif();
-    if (aclegtime != aclegupdate) await loadAclegs();
-    if (pnleg3time != pnleg3update) await loadPnlegs3();
-    if (pnlegmoistime != pnlegmoisupdate) await loadPnlegsmois();
+    try {
+      if (qualiftime != qualifupdate) await loadQualif();
+      if (aclegtime != aclegupdate) await loadAclegs();
+      if (pnleg3time != pnleg3update) await loadPnlegs3();
+      if (pnlegmoistime != pnlegmoisupdate) await loadPnlegsmois();
+    } catch (e) {
+      print("data: loadall: exception: $e");
+    }
   }
   }
 
 
   Jiffy? qualifupdate;
   Jiffy? qualifupdate;

+ 14 - 1
lib/fltinfo/view/fltinfo_page.dart

@@ -72,12 +72,25 @@ class _FltinfoPageState extends ConsumerState<FltinfoPage> {
     final res = await ref.read(crewlinkapiProvider).showCrew(
     final res = await ref.read(crewlinkapiProvider).showCrew(
         crewlist: true,
         crewlist: true,
         start: widget.params.jdep?.format(pattern: "ddMMMyy") ?? "",
         start: widget.params.jdep?.format(pattern: "ddMMMyy") ?? "",
-        end: widget.params.jdes?.format(pattern: "ddMMMyy") ?? "",
+        end: (widget.params.jdep?.add(days: 1))?.format(pattern: "ddMMMyy") ??
+            "",
         al: widget.params.al ?? "",
         al: widget.params.al ?? "",
         fnum: widget.params.fnum ?? "",
         fnum: widget.params.fnum ?? "",
         dep: widget.params.dep ?? "",
         dep: widget.params.dep ?? "",
         des: widget.params.des ?? "");
         des: widget.params.des ?? "");
     crew = res?["data"]?["leglist"] ?? [];
     crew = res?["data"]?["leglist"] ?? [];
+    //filter only flight withi 5hours from requested departure time
+    // crew = crew.where((leg)=>);
+    crew = crew
+        .where((leg) =>
+            jiffyfromddmmmyyhhmm(leg[2] + " " + leg[4])
+                .diff(widget.params.jdep!, unit: Unit.hour)
+                .abs() <
+            5)
+        .toList();
+    print(
+        "------ ${jiffyfromddmmmyyhhmm(crew.first[2] + " " + crew.first[4]).Hm}");
+
     if (crew.isNotEmpty) _dateCrewbox = Jiffy.now().toUtc();
     if (crew.isNotEmpty) _dateCrewbox = Jiffy.now().toUtc();
     //print(_crewList);
     //print(_crewList);
     setState(() {
     setState(() {

+ 108 - 12
pubspec.lock

@@ -186,10 +186,10 @@ packages:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: cli_util
       name: cli_util
-      sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19
+      sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c
       url: "https://pub.dev"
       url: "https://pub.dev"
     source: hosted
     source: hosted
-    version: "0.4.1"
+    version: "0.4.2"
   clock:
   clock:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -202,10 +202,10 @@ packages:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: code_builder
       name: code_builder
-      sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37
+      sha256: "0ec10bf4a89e4c613960bf1e8b42c64127021740fb21640c29c909826a5eea3e"
       url: "https://pub.dev"
       url: "https://pub.dev"
     source: hosted
     source: hosted
-    version: "4.10.0"
+    version: "4.10.1"
   collection:
   collection:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -334,6 +334,14 @@ packages:
       url: "https://pub.dev"
       url: "https://pub.dev"
     source: hosted
     source: hosted
     version: "2.0.0"
     version: "2.0.0"
+  email_validator:
+    dependency: transitive
+    description:
+      name: email_validator
+      sha256: e9a90f27ab2b915a27d7f9c2a7ddda5dd752d6942616ee83529b686fc086221b
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.1.17"
   fake_async:
   fake_async:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -397,6 +405,14 @@ packages:
     description: flutter
     description: flutter
     source: sdk
     source: sdk
     version: "0.0.0"
     version: "0.0.0"
+  font_awesome_flutter:
+    dependency: transitive
+    description:
+      name: font_awesome_flutter
+      sha256: "275ff26905134bcb59417cf60ad979136f1f8257f2f449914b2c3e05bbb4cd6f"
+      url: "https://pub.dev"
+    source: hosted
+    version: "10.7.0"
   freezed_annotation:
   freezed_annotation:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -453,6 +469,54 @@ packages:
       url: "https://pub.dev"
       url: "https://pub.dev"
     source: hosted
     source: hosted
     version: "6.2.1"
     version: "6.2.1"
+  google_identity_services_web:
+    dependency: transitive
+    description:
+      name: google_identity_services_web
+      sha256: "5be191523702ba8d7a01ca97c17fca096822ccf246b0a9f11923a6ded06199b6"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.3.1+4"
+  google_sign_in:
+    dependency: transitive
+    description:
+      name: google_sign_in
+      sha256: "0b8787cb9c1a68ad398e8010e8c8766bfa33556d2ab97c439fb4137756d7308f"
+      url: "https://pub.dev"
+    source: hosted
+    version: "6.2.1"
+  google_sign_in_android:
+    dependency: transitive
+    description:
+      name: google_sign_in_android
+      sha256: "0928059d2f0840f63c7b07a30cf73b593ae872cdd0dbd46d1b9ba878d2599c01"
+      url: "https://pub.dev"
+    source: hosted
+    version: "6.1.33"
+  google_sign_in_ios:
+    dependency: transitive
+    description:
+      name: google_sign_in_ios
+      sha256: "83f015169102df1ab2905cf8abd8934e28f87db9ace7a5fa676998842fed228a"
+      url: "https://pub.dev"
+    source: hosted
+    version: "5.7.8"
+  google_sign_in_platform_interface:
+    dependency: transitive
+    description:
+      name: google_sign_in_platform_interface
+      sha256: "1f6e5787d7a120cc0359ddf315c92309069171306242e181c09472d1b00a2971"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.4.5"
+  google_sign_in_web:
+    dependency: transitive
+    description:
+      name: google_sign_in_web
+      sha256: "042805a21127a85b0dc46bba98a37926f17d2439720e8a459d27045d8ef68055"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.12.4+2"
   gotrue:
   gotrue:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -505,10 +569,10 @@ packages:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: html
       name: html
-      sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a"
+      sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec"
       url: "https://pub.dev"
       url: "https://pub.dev"
     source: hosted
     source: hosted
-    version: "0.15.4"
+    version: "0.15.5"
   http:
   http:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -705,10 +769,10 @@ packages:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: path_provider
       name: path_provider
-      sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
+      sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
       url: "https://pub.dev"
       url: "https://pub.dev"
     source: hosted
     source: hosted
-    version: "2.1.4"
+    version: "2.1.5"
   path_provider_android:
   path_provider_android:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -997,6 +1061,30 @@ packages:
       url: "https://pub.dev"
       url: "https://pub.dev"
     source: hosted
     source: hosted
     version: "2.0.0"
     version: "2.0.0"
+  sign_in_with_apple:
+    dependency: transitive
+    description:
+      name: sign_in_with_apple
+      sha256: "602f1374c9c4c33889c969b53ebf7cc8417c22cc7e25ea771581330173bc6603"
+      url: "https://pub.dev"
+    source: hosted
+    version: "6.1.3"
+  sign_in_with_apple_platform_interface:
+    dependency: transitive
+    description:
+      name: sign_in_with_apple_platform_interface
+      sha256: c2ef2ce6273fce0c61acd7e9ff5be7181e33d7aa2b66508b39418b786cca2119
+      url: "https://pub.dev"
+    source: hosted
+    version: "1.1.0"
+  sign_in_with_apple_web:
+    dependency: transitive
+    description:
+      name: sign_in_with_apple_web
+      sha256: c009e9beeb6c376e86aaa154fcc8b4e075d4bad90c56286b9668a51cdb6129ea
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.1.0"
   sky_engine:
   sky_engine:
     dependency: transitive
     dependency: transitive
     description: flutter
     description: flutter
@@ -1082,6 +1170,14 @@ packages:
       url: "https://pub.dev"
       url: "https://pub.dev"
     source: hosted
     source: hosted
     version: "2.5.0"
     version: "2.5.0"
+  supabase_auth_ui:
+    dependency: "direct main"
+    description:
+      name: supabase_auth_ui
+      sha256: "2a9752f8f0fea257f834ee6da9ac764d73ada67c2947f74f5024c72bdd7f8b2e"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.5.4"
   supabase_flutter:
   supabase_flutter:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -1222,10 +1318,10 @@ packages:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: url_launcher_android
       name: url_launcher_android
-      sha256: "0dea215895a4d254401730ca0ba8204b29109a34a99fb06ae559a2b60988d2de"
+      sha256: "6fc2f56536ee873eeb867ad176ae15f304ccccc357848b351f6f0d8d4a40d193"
       url: "https://pub.dev"
       url: "https://pub.dev"
     source: hosted
     source: hosted
-    version: "6.3.13"
+    version: "6.3.14"
   url_launcher_ios:
   url_launcher_ios:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -1334,10 +1430,10 @@ packages:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: win32
       name: win32
-      sha256: "10169d3934549017f0ae278ccb07f828f9d6ea21573bab0fb77b0e1ef0fce454"
+      sha256: "84ba388638ed7a8cb3445a320c8273136ab2631cd5f2c57888335504ddab1bc2"
       url: "https://pub.dev"
       url: "https://pub.dev"
     source: hosted
     source: hosted
-    version: "5.7.2"
+    version: "5.8.0"
   win32_registry:
   win32_registry:
     dependency: transitive
     dependency: transitive
     description:
     description:

+ 1 - 0
pubspec.yaml

@@ -55,6 +55,7 @@ dependencies:
   super_sliver_list: #^0.4.1
   super_sliver_list: #^0.4.1
   #sticky_headers: #^0.3.0+2
   #sticky_headers: #^0.3.0+2
   linear_progress_bar: #^1.1.2
   linear_progress_bar: #^1.1.2
+  supabase_auth_ui: ^0.5.4
 
 
 dev_dependencies:
 dev_dependencies:
   flutter_test:
   flutter_test: