From 5e3ff611a7ad168b45f97526e2dc51fec973c151 Mon Sep 17 00:00:00 2001
From: Sara <sarasdj@stud.ntnu.no>
Date: Thu, 4 Apr 2024 14:26:07 +0200
Subject: [PATCH] update: new loading screen implementation

---
 app/lib/pages/default_page.dart               |  18 ++++-
 app/lib/pages/loading_page.dart               |  75 +++++++++++++++---
 server/__pycache__/consts.cpython-311.pyc     | Bin 359 -> 359 bytes
 server/main.py                                |   5 ++
 .../__pycache__/add_lake.cpython-311.pyc      | Bin 6914 -> 5700 bytes
 .../__pycache__/process_lake.cpython-311.pyc  | Bin 2185 -> 4689 bytes
 server/map_handler/add_lake.py                |  29 -------
 7 files changed, 85 insertions(+), 42 deletions(-)

diff --git a/app/lib/pages/default_page.dart b/app/lib/pages/default_page.dart
index cc43913f..98130863 100644
--- a/app/lib/pages/default_page.dart
+++ b/app/lib/pages/default_page.dart
@@ -112,10 +112,26 @@ class _DefaultPageState extends State<DefaultPage> {
                   color: Colors.white54
               ),
               onPressed: () {
-                showSearch(
+                showSearch( // Fetch new relation and measurements on search
                   context: context,
                   delegate: CustomSearchDelegate((String result) {
                     setState(() {
+                      markerListFuture = fetchMeasurements().then((fetchResult) {
+                        List<Measurement> measurements = fetchResult.measurements;
+                        serverConnection = fetchResult.connected;
+
+                        return measurements;
+                      }).catchError((error) {
+                        serverConnection = false;
+                        throw Exception("Failed to fetch measurements: $error");
+                      });
+
+                      if (serverConnection){
+                        relationFuture = fetchRelation();
+                      } else { // Read last saved data
+                        relationFuture =  loadSavedRelation();
+                      }
+
                       selectedLake = result;
                     });
                   }),
diff --git a/app/lib/pages/loading_page.dart b/app/lib/pages/loading_page.dart
index 5e19257e..4952c3fe 100644
--- a/app/lib/pages/loading_page.dart
+++ b/app/lib/pages/loading_page.dart
@@ -1,19 +1,70 @@
 import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+
+import 'default_page.dart';
+
+class LoadingPage extends StatefulWidget {
+  const LoadingPage({super.key});
+
+  @override
+  State<StatefulWidget> createState() => _LoadingPageState();
+}
+
+class _LoadingPageState extends State<LoadingPage>
+    with SingleTickerProviderStateMixin{
+
+  @override
+  void initState() {
+    super.initState();
+    // Remove app bar
+    SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive);
+
+    // Hold loading page for 5 seconds before navigating to the default page
+    Future.delayed(const Duration(seconds: 5), () {
+      Navigator.of(context).pushReplacement(MaterialPageRoute(
+        builder: (_) => const DefaultPage(),
+        )
+      );
+    });
+  }
+
+  @override
+  void dispose() { // Add back app bar
+    super.dispose();
+    SystemChrome.setEnabledSystemUIMode(
+        SystemUiMode.manual,
+        overlays: SystemUiOverlay.values,
+    );
+  }
 
-class _LoadingPage extends StatelessWidget {
   @override
   Widget build(BuildContext context) {
-    return Container(
-      decoration: BoxDecoration( // Loading screen
-        color: Colors.grey[900],
-      ),
-      child: Center(
-        child: Image.asset(
-          'assets/icons/frozen.png', // Loading screen icon
-          // Icon from: https://www.flaticon.com/free-icons/cold-water"
-          color: Colors.grey,
-          width: 170,
-          height: 170,
+    return Scaffold(
+      body: Container(
+        width: double.infinity,
+        decoration: const BoxDecoration( // Loading screen
+          gradient: LinearGradient(
+              colors: [Colors.grey, Colors.black],
+              begin: Alignment.topLeft,
+              end: Alignment.bottomRight
+          ),
+        ),
+        child: Column(
+          children: [
+            Image.asset(
+              'assets/icons/frozen.png', // Loading screen icon
+              // Icon from: https://www.flaticon.com/free-icons/cold-water"
+              color: Colors.grey,
+            ),
+            const SizedBox(height: 20),
+            const Text(
+              "IceMap",
+              style: TextStyle(
+                  color: Colors.white70,
+                  fontStyle: FontStyle.italic,
+              ),
+            )
+          ]
         ),
       ),
     );
diff --git a/server/__pycache__/consts.cpython-311.pyc b/server/__pycache__/consts.cpython-311.pyc
index 1712cb5077bfd090a3e860cc1dca4556d993186a..d47db4fadc975e2973e185a82508db4d8429a975 100644
GIT binary patch
delta 21
bcmaFP^qh%jIWI340}wne<V)Mg6U_(!LC^(@

delta 21
bcmaFP^qh%jIWI340}#Bw{4I4OPc$O{N=XLb

diff --git a/server/main.py b/server/main.py
index 587e72a7..ac2a8e28 100644
--- a/server/main.py
+++ b/server/main.py
@@ -5,6 +5,7 @@ from map_handler.get_measurements import get_all_markers
 from map_handler.add_lake import cut_map
 from map_handler.process_lake import fetch_divided_map
 from map_handler.input_new_data import input_new_Lidar_data
+from urllib.parse import urlparse, parse_qs
 import ssl
 import sqlite3
 
@@ -37,9 +38,13 @@ class IceHTTP(BaseHTTPRequestHandler):
             self.wfile.write(b"Root path hit!")
 
         elif self.path == '/update_map':  # NB: should be POST?
+            parsed_path = urlparse(self.path)
+            query_params = parse_qs(parsed_path.query)
             get_all_markers(self, self.cursor, 'mjosa')  # Get all markers
             # NB: temporary hardcoded waterBodyName
         elif self.path == '/get_relation':
+            parsed_path = urlparse(self.path)
+            query_params = parse_qs(parsed_path.query)
             fetch_divided_map(self, 'Mjosa')  # NB temp hardcoded value
         elif self.path == '/divide_new_relation':
             cut_map(self, 'Mjosa')
diff --git a/server/map_handler/__pycache__/add_lake.cpython-311.pyc b/server/map_handler/__pycache__/add_lake.cpython-311.pyc
index aad95f09ac6501960bb1a2d802fb53b39b25c9f2..9273e1d98fac5a18558f571c266cc29040000aa5 100644
GIT binary patch
delta 521
zcmX|+&r1|x7{~X~ot@dOnf-OhrO1sGeMP<LAxf~#lNN*pCB(QmvoY!JEYHl^B6v^;
z47$kUy*hdEph*8g6#WAori(=pbn+;jdcSk%f%n7ne4pq2zVEX;`*G4awCzGh$Fl>c
z^}e$23{ii7tZ&eAM%gFFpNxtc;6dF_EWaQ79E7Z7FSkRH6wKG8<iK2_ntV5ZlOtcO
zBPz*eek6BI-{33qF5jRj`I&DP%djxlda>JXc6ssiQQ>%is;7qCpqU8_XMs@-b(xot
z-vQ=;v_FsRF3<q($+k0f39dYnLOwWOwc(rMEushVxm3R~3Ecq3fib`W(pL;FiB-Nn
z{1D1xjR>Q41gEwN4J8ZZx7zks`4!QYtXHqDJkffR^ZP**M|=}SHthNxo=H=$*Y2t;
zV~C#uE0C!bVZZ<8N#!L6vG2Z!!j2n<ZY$XE*^{&CpQ5TH`R9JvZFan7#KW>$o4*fh
zc7bVN5lFYjACs&Xti|j>w1Fys75-Yc+o9Ln@aH(tCFv9W$jC+Qo0BoAeh#G5{{U(P
BcwPVi

delta 1469
zcmaKse`p(J7{~9u++8k7n`@IMO_!$Y*4Fm0X>~ARQ#<SY5olSfW60{}5p&miU7FPQ
z(k+Aw&7?vG1(~l%{}{MGWKt$L**}5^`$POsNJez=#6SFF3W5+A{^1buc`jSqDflM&
z@V?JI&-1?be4jU8kH7O&@RQC?KL_KF-vf&y(aXUY*|<Df?C#v)7D9Ru7}m*2PE|ht
z_!}{_%~KEfI<iqL7}U(uZDvas$vyVBbct-Us&|$o*mvGviNd~;KP4fy>>HK_A%e!)
z2fpLvN!IkGl`y98X4VSYN_v&f-Aws!@FaTk&yM5d@B}&w2o<1q(0QCsBc4aN&tJsZ
zONf^dDfV_S8NjS`%mv#Heh&#N%27gIWnXp;9(V%nB4QlzI6_9ayNEQz{^}aoe+n(9
z0T#Lr;-GHYBtA&8Bi$cC+8?^#CFDNS!tsSOV0R>=Xj%n}j^aYduNpae#GUGEE32wN
z(TSc#yn$x2XyN<qBzHm=s97+yWh<Z43VChO%tC2dBm7$|L%{Ljz#uICy-kkoC;bO)
zt^_NcM_vQR>pRY6V#7!GuvbVVE}Y}Rf$KxKqs;5#250l|{33~udvp%ul}?nxmO;-O
zbP_bt-b&|mIK^a1o>(&ScrqG*U>256C21$jXb{l_urU3@I`zQ3G_+(CG~GOJ>W0pK
zmSXGgqi+Ne1*jf6g!5s<2pWWTb)H4T6yg}*Uqw>(Bz4;+3qJ3m-yERA{iK98%eBOz
z8>j1usayN%iJ7`G+fZgJsU}<UPaLSEDk*pSM{0^PyEXmAt?BUp)pUs~^ESE4v!}&_
z3omeIkDY-xFMG;@E$E&-<rQHq>{&|%FYNMQ=%OuNgShLiC}<>{E!vVUUE#}Ko4+cs
z&y>iz_fbI!xA~mSgG}BNrRW2hvgvb%MvZK`VCHkyBuzsu8b|a4N*&hPn<#>2>PH9Z
zJ}{}`ZrvRjI*!u(1&d}d#JvUbjtuLZgYl@Lh1ng^%;`qa@j%4x9!_Ad58fv1X&mmQ
zak^15Q`exEw2YC%4J~l`5PsGcpu*j4i+1=6Up+B>Yo?x<t1I&jWquu03r8xm&FH|L
z=;-a}Xg#VnqH2rti)~!;SH-H;jKsG38<EGV{$^i)Es<>WO;m$-<<4quYq>6~4Oy+p
zYD?ncBh7*FmgwpAw>UsG(2_Y{<c=J_EyuTJ>hf4a9;><EW}vqw^wO}~r#+4jntv6J
zpSI`_`?hELHN4kUM;t<6>$U%K@DIWfbTd<+CK|Cj-M4Mu7R=`s<-YvPN?u>f8dJ0g
fHoUTyhp^WpKTh^|$VmbR++|Q9u@?7VxPAN&jL%n6

diff --git a/server/map_handler/__pycache__/process_lake.cpython-311.pyc b/server/map_handler/__pycache__/process_lake.cpython-311.pyc
index 8ac558cf013e2b17c0de9ccb902e44d262c42df9..5a0aa0d8078879c49ca64ebba1a48b02f6626337 100644
GIT binary patch
literal 4689
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
K|KFi5_kRHHery#0

delta 662
zcmZ`#F>ljA6n<y>oH&l-8ivv!NRdDy3{_be5TaslE2IucCn4lwlN#OG);UHBOER!9
zdqAuVtxzY#58y8Zse^SZ6I&&=PP}s+A%?#9^xpTryZi3m{k;1zn4frF571ti{WrT5
z;FoSzX0+f>ir^DO5D^ZHU^TcQOlAs;S%NZ3^qR?S(P16YWnJMgr{M_i377R->@ly=
z7_dQ8eKz+Su*TLR>jSVLqL{Bm<N(I@Z+-jz*i@b88J|tERP}a~G(MQhB%LUKujJF@
zAA$QEj>{sJlUTWB8p_$LGEMZc{PKMAK7PF#No(5x-+p{H=uO1^?=MZquw8_*Uvau^
z-_r1Q^@Tnp>(v>(fA5k&R=Gua7$xtL0@aHyGMlZ*VRgsepkt(l)sB7akFP6d5@&gs
zMqwdG)poEs$6wYGM`0fG*;bYp5+4Gxqmvd>fe5EL&!#*%+{$MfDZ8y^&asgwmkDLz
zz9VJ5EpSF7E2N%7>bt*!e4z0V(?$1*$fA<RPvs+Q3CsbCQ$*(`A*6=&<tl1;w!AuO
oc)YwiY8Wm5j~cv1<2AU8##?~624~TDbrFmP;FBBYIyH~}3zh7xmH+?%

diff --git a/server/map_handler/add_lake.py b/server/map_handler/add_lake.py
index 80bdc2c3..f8eced82 100644
--- a/server/map_handler/add_lake.py
+++ b/server/map_handler/add_lake.py
@@ -138,32 +138,3 @@ def write_json_to_file(path: str, file_name: str, json_data: dict):
 
     with open(path + '/' + file_name + '_div.json', 'w') as f:
         json.dump(json_data, f)
-
-<<<<<<< HEAD:server/map_handler/add_lake.py
-
-def get_divided_map(file_name):
-    geo_data = gpd.read_file("server/map_handler/" + file_name + ".geojson")
-    polygon_data = geo_data[geo_data['geometry'].geom_type == 'Polygon']
-    polygons = [Polygon(polygon.exterior) for polygon in polygon_data['geometry']]
-
-
-# Returns a list of [(sub_div_id, sub_div_center)]
-def get_id_and_center(file_name): # NB buggy
-    # Expected format: [(id, [x,y]), (id, [x,y])]
-    geo_data = gpd.read_file("server/lake_relations/" + file_name + "_div.json")
-    subdivisions = []
-    for index, row in geo_data.iterrows():
-        sub_div_id = row['sub_div_id']
-        sub_div_center = row['sub_div_center']
-
-        print("sub_div_id: ", sub_div_id)
-
-        subdivision = {
-            'sub_div_id': sub_div_id,
-            'sub_div_center': sub_div_center
-        }
-        subdivisions.append(subdivision)
-    return subdivisions
-
-=======
->>>>>>> b0c6d9be39ffc9557a93873ab827bf05847ef1c1:server/map/add_lake.py
-- 
GitLab