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