From 5597ecb269169d68ed553f7f054dc212ede7a2c6 Mon Sep 17 00:00:00 2001 From: Mark Jessop Date: Sun, 4 Aug 2019 15:26:10 +0930 Subject: [PATCH] Add dialog box for marking a payload as recovered. --- chasemapper/habitat.py | 12 ++- horusmapper.py | 22 +++- static/css/chasemapper.css | 20 +++- static/css/images/ui-icons_444444_256x240.png | Bin 0 -> 7006 bytes static/css/images/ui-icons_555555_256x240.png | Bin 0 -> 7001 bytes static/css/images/ui-icons_777777_256x240.png | Bin 0 -> 7013 bytes static/js/tables.js | 95 +++++++++++++++++- templates/index.html | 26 ++++- 8 files changed, 165 insertions(+), 10 deletions(-) create mode 100644 static/css/images/ui-icons_444444_256x240.png create mode 100644 static/css/images/ui-icons_555555_256x240.png create mode 100644 static/css/images/ui-icons_777777_256x240.png diff --git a/chasemapper/habitat.py b/chasemapper/habitat.py index aef4f90..0c5a361 100644 --- a/chasemapper/habitat.py +++ b/chasemapper/habitat.py @@ -77,7 +77,7 @@ def fetchUuids(timeout=10): return -def initListenerCallsign(callsign): +def initListenerCallsign(callsign, antenna=None, radio=None): doc = { 'type': 'listener_information', 'time_created' : ISOStringNow(), @@ -86,6 +86,12 @@ def initListenerCallsign(callsign): } } + if antenna != None: + doc['data']['antenna'] = antenna + + if radio != None: + doc['data']['radio'] = radio + resp = postListenerData(doc) if resp is True: @@ -96,7 +102,7 @@ def initListenerCallsign(callsign): return False -def uploadListenerPosition(callsign, lat, lon, alt): +def uploadListenerPosition(callsign, lat, lon, alt, chase=True): """ Upload Listener Position """ doc = { @@ -104,7 +110,7 @@ def uploadListenerPosition(callsign, lat, lon, alt): 'time_created': ISOStringNow(), 'data': { 'callsign': callsign, - 'chase': True, + 'chase': chase, 'latitude': lat, 'longitude': lon, 'altitude': alt, diff --git a/horusmapper.py b/horusmapper.py index 1e60fb3..990e693 100644 --- a/horusmapper.py +++ b/horusmapper.py @@ -26,7 +26,7 @@ from chasemapper.gpsd import GPSDAdaptor from chasemapper.atmosphere import time_to_landing from chasemapper.listeners import OziListener, UDPListener, fix_datetime from chasemapper.predictor import predictor_spawn_download, model_download_running -from chasemapper.habitat import HabitatChaseUploader +from chasemapper.habitat import HabitatChaseUploader, initListenerCallsign, uploadListenerPosition from chasemapper.logger import ChaseLogger @@ -513,6 +513,26 @@ def clear_car_data(data): logging.warning("Client requested all chase car data be cleared.") car_track = GenericTrack() +@socketio.on('mark_recovered', namespace='/chasemapper') +def mark_payload_recovered(data): + """ Mark a payload as recovered, by uploading a station position """ + + _callsign = data['recovery_title'] + _lat = data['last_pos'][0] + _lon = data['last_pos'][1] + _alt = data['last_pos'][2] + _msg = data['message'] + _timestamp = "Recovered at " + datetime.utcnow().strftime("%Y-%m-%d %H:%MZ") + + try: + initListenerCallsign(_callsign, radio=_msg, antenna=_timestamp) + uploadListenerPosition(_callsign, _lat, _lon, _alt, chase=False) + except Exception as e: + logging.error("Unable to mark %s as recovered - %s" % (data['payload_call'], str(e))) + return + + logging.info("Payload %s marked as recovered." % data['payload_call']) + # Incoming telemetry handlers diff --git a/static/css/chasemapper.css b/static/css/chasemapper.css index 6d84af4..c759846 100644 --- a/static/css/chasemapper.css +++ b/static/css/chasemapper.css @@ -111,4 +111,22 @@ html, body, #map { .leaflet-control-container .leaflet-routing-container-hide { display: none; -} \ No newline at end of file +} + +.centerWrapper:before { + content:''; + height: 100%; + display: inline-block; + vertical-align: middle; +} + +.center_btn { + background: rgba(0, 0, 0, 0); + right:10px; + display:inline-block; + vertical-align: middle; + float: left; + +} + +.ui-dialog { z-index: 1000 !important ;} \ No newline at end of file diff --git a/static/css/images/ui-icons_444444_256x240.png b/static/css/images/ui-icons_444444_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..e68e41a5970676be63e119572ad9d8f25d0600bd GIT binary patch literal 7006 zcmZvBWl$WAw&(}_2n^CYN&qI&U zE(=oh(k=~1EX*xkz??LEnE=vgq1Kol4S&vL$1rVB{ij&{3x;Nm&hLw+9XfO-r<-1{ zp)B5Nm*Lj7smno+jn+%}QcFPl^-$LJ(A_IfPFj_oKuL0>1>zVq>f{Mb;Fj#`%EhTk zI|k942eF%0C@_xN11WqT)9Js`xZuEKm_Z8t!POS{3^-5&VAzg0G2~v3PCUjXXEdy4 zBb%${Juc(Lr(Q-=MXwOo5EekIIy9MIQ-1Z;Jwjx+D-;TKFwKM_6P&Y!@ty~{KBq4; z|AX&}nKvrJnC}{-c#>>fJg}7Np*KUdIl zSN;WxtzZj)kH%kILhLYipuLx+mJaD42OXl|HJisb9qt&03*Q3wH;+sAUogGgxIk$z zKn|*u+Kd)%HrvmFFXl9t`u%pb=+YMe-S+^(vx*f3mgH6ywfb)N8GKW=Y#|RHU*1l^ zgLRje^hX%#erYuag=phu`}bp3;?T0k#uOD!u{^hW$@HuXG#(&kVSx9vti)6o$FA4g z#Z;@FRIvNRH(9=Gt(+Uo85|!6JUom=L1KuG?no>z`sE^x$W>xZoMipy9@BP$aZgX+ zzk)FaP~mX`{yWzC&@DndC-&TjnX*3{;`*H4CRAn#Oqi8SrH#4ex}OZ95gx>%@ar_?Z^gTX1~t^8!s&{W$OU>?dm3y)X3278r`I~KUaOsmF`ZFVvk(%7ubSkcL`>fWRs#6yKtahuHCK#zN0Y-05+ z278iy0m-1O0}KCn3Mh^7Q75)_qHx8!aCsnIy-7j-$5i+Sy=y1i)i-WVh+C8+W~2AW zZpQcQ@B_$qdyb+6ED2}lk?sYbAL!f9%ZsdDHyYx=jE1Zy8zTSIZ2a`P5mwfA4CK;N zl<*TA_YE8A&KJ$|oP0|-TC}lAC1v7YPd2*2o%q)Htp=OBE=nePxd&gXlZ2ia_4caj zf;+0=mhy}Pb8IVWlj}am`~j1Pi+pt*1&IOm`gUFL2BnMk7O^y|Rc(j94FWI9>k`n!usI~-2$)su_Ut55ds07;ISee z1L29k)vrM}^UM}@JV6!drv2jbm63sAc8Wr8+Z@F~oP)gm2N+!ZP?11xoh2hdEmD<_ z5jwS>ZZ&I=9MEDa$QF$}Bu%vg_tk}C$<$&)N|G~ZdGYi>?;Q-=rkT5|#;#~@h4IPI zGJF7K;0OOiVj+Y!LzUlgvG>epvnLl`}d@jbp~tuJ(EoZ7WB3RKf)5kbr`(IqIHD& zW-V;bLIhDQiwROd@g%?R5&9kaT0SH8O07W)R3GuM+nPYUj%-CC1ZYhnrel;a?E|D<)ID)JuP zG?Mb>QYXT|rXp&ds}u>!+l0{b<^Of&JwYC~LJXZmyh#G1cmbVitumFtdBi&8`LZ5r z#@*-#7-qKW!yj5QS*=^%c{RP1`oj}evHMNzC*}gc7~>lNrdKvpv7k`x_**AR0><&B zeB@BJJU|5Z_e7Ukn~qDlqgcnh#1m-EKAeoT;d@5K7^vL09$&oDb$kkMJSYURvQ?b* zwm6Si`bt(e#qvMPLx2X!>7vGSZw#<*E8^GQs%}z|-gbZ67|4NG4{X11Me}|B5|qGK z`Eh_GBJEYF#-k!h_CtcpNSb6DW}bd$C7-rt|GVeFi5Io#Q7XkAT;}cPo#*edo{JI% zBDmt^pLN((-#L4EZ|JrGSx(6k_-h>1;0KDYi2X#0+yirSF+dC+6B3q-YA>7PkL5Ks z*^w<}{hRB9o6Q!?MNKX5(Bnpk8k*y6Ddst25V(Y`fnIp(7`P(0M?q#T1S{#^dnv>W zp}p|V|8c#x7Gywjy7efJ{|tvFq~*68No0%@nkt zHD_~hmKy z=X=LrSyn$PMgkx`Iji7jHGOH&qZ)goVo{m^`0p@5%ZOHF^c$*emn57hAqBmsiek*& zy}v$flntXsc!68zVQoE z6pfgPfEa4cv2$v~M}VgoX<&j7TrWgkCb#bavvS_1#&wEHX?9a?9^E&%j^_crkg<@X z!}V)fF%F7udm`fTk|J3a=_XcT9#8}9_*$CZc3PffJqC!x%rz7Ld}zz;#q6BpMYD-< zQolzsUeTzWsggTnwP*}OS!XZP5d}<>wz7B89dC5jM%*hI;rimzQz92kP@?xo^p4r8 zR@r(Q6f0gu$5( zg(Ujk#u_S?@DGZ!-R(G0P(v8n3O&iN?kN{L^#Cw4c1G=h0(RZcgH&71VF_Sdt`2aQ zUx4B7J1wFQOrUny?Vy0hxYDc)FQb84ORx&TA`bW?wL8g##&I*hbm^sQ3(*v3Mo!Vb z02Wj*nVl`0@%Ax`yvRfrrjzf5$5rV$^jaFjQ|^#=N#^(6D*axl9ukuDM(mf`7$jN5 zQ|juqd7#yb&kq9cmZYc#EL3omx1*o7Z$Wv zf=jUu5Rd&oA6&+OcQ`qlV;hWppiyT*SY`OYP^KeH^Zj@UnxXp%dqArCjX-7r=jL{~ zEc5U8{w?^f(00UkwQ$u9_vSFQzY0|~AsIIC>-F#}s_FazK19`YW_!QG3HCV3SEm@# z(C!;f6cy=6m-5x~@uiL+^Y>O$>qJGi zd|v|Q{$yKo4gB16ed+ezHIRwcB9S*&MEvAUJz(S{Gi)+Do;;aMe~n)Qz<41y`8^*q zq^3a6?{sDoyWlj0ZbL(?zhHhqIs-k!JlH@N8!URVUBZTuwl~+_tzxu_{t&q|dL?M< zlAZuf4ozu`!K2u&K1L50tSV$4Y6rYYgLH&6eaV=Uy)o~=Y%er2$hHba8y-^u&qr)7 zTMD^l?5lVzUI}&!yJSsexb7_{N2nj9PjP^ zXwg92h0~PyX|r##S6h#!nKZ`BeG{{C&H?1n2A1lHo9caO}D-gqFZ5G}S-i zXGSdNDbd=g{dG3%{@2bg$FfFb$yLnREw67m!6u8`4gkMq5VXa}5$OUYSQUaQ2F`^; zp^y-ql(Wp~RkF4rpDXYYt9~W%MTJj$LtIscmJFVCQ)k#0k^2hYh~8_i_)|0Z`uCnt z8EW;|70P>Tf4jnpH5-dhAvP{P1aH3<|A^XU9s#`L%>{iR)s0_S;Pg%vC z(!}c2`-|t|jfHZnk^y*cH=<_iWcFEd9;TGm|Qqps0QOMHPVcW=wGi-YsKfq;O#~bt^LPy>U$hiE*}nKynVtq*R($6zQx{+*sn&?!o49SKE{hRnm}sbzZ0N^iU|~ zpIDwfY`r#yHK~~Ktn80al}Xr&2wh=!-0I80<(g*@o{?8YXpzCgokusL~@XRIp4TJM_1EeHk$V$JoSjdz(%lV zAatH?a}DtIH?RnuNKNFBjUOuZm{8-{I|1Vfl}B-90RL*$Z7^c~4bVbT7V#b>fH9ys zz@6XV87hjJN7bT|T&~N?j2gMAJC24dc&wp1p1OzB?Cr!p`K8GE)GXbWO_|@a6)kJm zBPzN4Cf=^jy>vgRr=C%^{{#8)X%qn+hH0pfu3+&fkYT1~+&nx3^gw+@iE)Kyyd1b) zQwnsq?N+H*Ea^<;jA57ui=;avK0-PFhVNY7wF#!*v!TP+Ejp_)yoM5*6_NR3H(G$j zQ9D33d0v9WpVNdXY$}Oyx<3WgZ`{Ma$oDs$GkbB-3VwT$@E3sawyXrpwY0GqeyCvE%qE0pA1X&M zKrDoe1p`FL>8eH^at1KfWlzcM#XTnv?LNPSqW z()_LoWW)UxAJGcxl;&` zmgxVtL~$*ELA(3VrQyc$B-i0>q6rH+NjPd17fu#uOK>OM>CAkx&((Y`&XERPKDr?3 z<%5ChhSUQ5o48@#?N?2luf$aIFWac>6XJdtT@d)hyLDu=O||*oqH6$Bp`UwLY4-#x zV=BCb(a_~8<<>@Yl*)voaH+ZI1Rh$zaQ2W`T5LTP5(AOS>$d7dTwuu+`pj>{TmuV# z%q#bmNIxb-kzfPs3!zu6ob$s<#ylget20uAwS%ni6JN4XG>(_CekF<|FqiA5#*rT@!%~ahTsFFb#AZH1GsiShRXO3uvaQO8r%^?X3G^EAL zmCFA_TlE!KoNTs_&`3q~Pv6Orz(xaTf5?E_WCet|93%b4~exkgD7 zKE!xMo($Lg_oXMG+@F4**U~lh*OdclKLqARb50@mf6{Y}LRgu{2@MFfM}Wd#-yi** z>{g;+zxb{0X*bEGfGw;&p{~IiwX|FO{V0zN%5NQ`C$xv?dB*#aihhqF@OT_@sGvF8 zK^E|di^xx0N&_&-26iT@?q=gfZ6uk*gqfwJGWgYJRivt2Nahv~Q>;aeBRXTTq_Mp4 za;a}?32vy-!ss?N#H7G_tZEBs$CF4A;jdKskm5t>f0(d4MbrO7^LYWevRlt7BrQRs zQ6Gwod)=r^ZWFT){Bb8NOc)8FWDDa$gWOGuuj)L#i)$6`q`c}~8KPJi-fto9urs4=VT%(+9kTG<5 zd(MOZm#V^*j~w=HMZ2xM*W6<_+%s4jEnt@6(}vq3o1l^2n90=5SiEiXNlw2-dpIbu zcAFT9_VmiQLz~TFIm-nLAO=Cbuz~>)ep>&I!;ZlD!IIpn`1!`ElgiyCc>Ln(1=3TQ z?uh`FHAaz9w}-x5r{c}BlH9{Hs08}!+}vwQhF+!}=1CR;-SrE8`uf^>!@>3$)U2RQ z{S_89O4aEKM3++I619)wbpxbh;!gu+k!T3`Z-)K6ztm4>03F=-uZ3m7VzQ2 zmF%&|CH_VzA*~;D3IB;#HvD%wl?RAez)(-~e~n*q7T)MKvU6Xxl)FQk*n&2Fh*GLl z-qWY%{) zO7sR6vkR6O3gcIIo|mulpXEy3jrCuZ-^}cCrndXu;qI7baI{5oq)H8?B=t2%>AVfD zYfKuV=~_hdmGu78eD+~=ZcMN7r+X}2u9zuV>eX}XGLoGDRHTXh9H*Bz3g>9Dv|T=+ z@8aAX2syKyAL_AiL)oM1gZt+y52XMv&W1qh?S4ULUi>$)E%b!0IP} zYd)slboXgJsq2B(7HUgm+l-Hl^(RLRI^U@jMsr%`t?rPcmdC~=#wBs2iN6u?)6SpX z)|q22Gtp0f2*$>-gX$341A z^%F(0Ok}_Bq;+>j`0$04)#$^`sc*Qz$KLjbFg2|G865BSJpo&9t1Dav-0*sI@c$z3 z{$JG*#7Z8fmEbck6o4%4m-TNP^eCG+7A&^aX+XO*j#C*@t#Imb)edPXV*upYyw#Mv z+C1;JsYUK^nnw^Kzj8@BxCIasm>6ggL%EX}jwdQLNc~EgybbCn9V(|l5)Q4wF6*lq zVjbUW2Lu1IV0jVQQa|qf5e>u32TW`4A;v`6kesOe|7mB_?I5ld@(^#J0bsYfHdL9A zXX4UX4bg46NekLWmtM;H4?3`YDCeKIT6G@YH| z{EQd7-CSnvIVfkS-?(j~q3lBov)%2^Fn8<}M8F^Ur3)9Ru_PHF86BoxeXQfyMfV#Ez73tjTv(m_Wdz|BKtOvSwZ(}b!FJrr>zbGbGS$$VaGgm8N z3umh*0pQ`{2D5Vsv2*ijbMpxEatZTsv2*bWb8(4e>COI|gTp7wkJeuQIPkM`bFp&^ zX>$t*^YaSx2>r_;I+kVa$$|2p6|_ECyLy;8TLC03Kbc$6D>#_hSZP|BS$ci`WhL@t O1W=Gwm8p_44f-#~*;}aq literal 0 HcmV?d00001 diff --git a/static/css/images/ui-icons_555555_256x240.png b/static/css/images/ui-icons_555555_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..9afb53a06da4c180764af0c7cd22761580995edd GIT binary patch literal 7001 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

mzWlm+0Uk_}u0?b5O+2 zi$ESGz4ga*N!U&KSXDmVPhCvGRXxftFGez=(Y-Kkb}R_*Se<>NXu$eeYtrA7d`#PqB)>o_Xta0SgIk8zwslmz%96yl=8KMsJnE`K&kO zOmoTCIKJrvonDx~43(*_q|u-5+r*ClkgXZn5e6G!NGHb}k#v z=uf1U5^`1s6Wt>vw@(OCOhBnlmei75X&p$xLQO42i# zM8~bP@qo{n7_%++wPM}%B>Y1zc8I6Fo1Du~uYjBBLk1dx6whb+R%C%Qo+{5dC;h5Jhr zuM}eT)NF#A+dAWE6#dvweQ}q}A z17PoH`3B+n4?u{EkC%(@xelL*n2>-N|MPzXP#@Vg9spGTd_mh0;pz@|wgO}<9nGy6 dp!RTUD=jOyrKeNBmH2}Y098

", - classes : 'btn-group-vertical btn-group-sm', + content : "
", + classes : 'btn-group-horizonal btn-group-sm', id: 'telem_display', style : { @@ -247,6 +248,10 @@ }) .addTo(map); + // Allow hiding of the telemetry table. This function is in tables.js + $("#telem_table_btn").click(toggleTelemTableHide); + + // Summary display - a 'quick-look' of where the currently tracked payload is and what it's doing. L.control.custom({ position: 'topcenter', @@ -495,6 +500,23 @@ + + + + +