From aee2de4a3baa270b3951e912427b018908bf95f2 Mon Sep 17 00:00:00 2001 From: Burathar Date: Fri, 10 Jul 2020 16:23:51 +0200 Subject: [PATCH] Add player last location on map --- app/__init__.py | 2 ++ app/models.py | 22 +++++++++++-- app/routes.py | 4 +-- .../leaflet/images/marker-icon-2x-black.png | Bin 0 -> 3183 bytes .../leaflet/images/marker-icon-2x-blue.png | Bin 0 -> 4033 bytes .../leaflet/images/marker-icon-2x-gold.png | Bin 0 -> 4274 bytes .../leaflet/images/marker-icon-2x-green.png | Bin 0 -> 4203 bytes .../leaflet/images/marker-icon-2x-grey.png | Bin 0 -> 3534 bytes .../leaflet/images/marker-icon-2x-orange.png | Bin 0 -> 4167 bytes .../leaflet/images/marker-icon-2x-red.png | Bin 0 -> 4230 bytes .../leaflet/images/marker-icon-2x-violet.png | Bin 0 -> 4190 bytes .../leaflet/images/marker-icon-2x-yellow.png | Bin 0 -> 4159 bytes .../leaflet/images/marker-icon-black.png | Bin 0 -> 1523 bytes .../leaflet/images/marker-icon-blue.png | Bin 0 -> 1747 bytes .../leaflet/images/marker-icon-gold.png | Bin 0 -> 1862 bytes .../leaflet/images/marker-icon-green.png | Bin 0 -> 1822 bytes .../leaflet/images/marker-icon-grey.png | Bin 0 -> 1691 bytes .../leaflet/images/marker-icon-orange.png | Bin 0 -> 1862 bytes .../assets/leaflet/images/marker-icon-red.png | Bin 0 -> 1870 bytes .../leaflet/images/marker-icon-violet.png | Bin 0 -> 1859 bytes .../leaflet/images/marker-icon-yellow.png | Bin 0 -> 1862 bytes .../assets/leaflet/images/marker-shadow.png | Bin 618 -> 608 bytes app/templates/game_dashboard.html | 29 ++++++++++++++++-- 23 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 app/static/assets/leaflet/images/marker-icon-2x-black.png create mode 100644 app/static/assets/leaflet/images/marker-icon-2x-blue.png create mode 100644 app/static/assets/leaflet/images/marker-icon-2x-gold.png create mode 100644 app/static/assets/leaflet/images/marker-icon-2x-green.png create mode 100644 app/static/assets/leaflet/images/marker-icon-2x-grey.png create mode 100644 app/static/assets/leaflet/images/marker-icon-2x-orange.png create mode 100644 app/static/assets/leaflet/images/marker-icon-2x-red.png create mode 100644 app/static/assets/leaflet/images/marker-icon-2x-violet.png create mode 100644 app/static/assets/leaflet/images/marker-icon-2x-yellow.png create mode 100644 app/static/assets/leaflet/images/marker-icon-black.png create mode 100644 app/static/assets/leaflet/images/marker-icon-blue.png create mode 100644 app/static/assets/leaflet/images/marker-icon-gold.png create mode 100644 app/static/assets/leaflet/images/marker-icon-green.png create mode 100644 app/static/assets/leaflet/images/marker-icon-grey.png create mode 100644 app/static/assets/leaflet/images/marker-icon-orange.png create mode 100644 app/static/assets/leaflet/images/marker-icon-red.png create mode 100644 app/static/assets/leaflet/images/marker-icon-violet.png create mode 100644 app/static/assets/leaflet/images/marker-icon-yellow.png diff --git a/app/__init__.py b/app/__init__.py index 8b3f4ce..c7b97a1 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -9,6 +9,7 @@ from flask_bootstrap import Bootstrap from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate from flask_login import LoginManager +from flask_moment import Moment app = Flask(__name__) @@ -18,6 +19,7 @@ db = SQLAlchemy(app) migrate = Migrate(app, db) login = LoginManager(app) login.login_view = 'login' +moment = Moment(app) from app import routes, models, errors diff --git a/app/models.py b/app/models.py index 031d5f9..238a904 100644 --- a/app/models.py +++ b/app/models.py @@ -9,7 +9,9 @@ import json from json import JSONEncoder from datetime import datetime import pytz +from flask_moment import Moment +moment = Moment() class Role(Enum): none = 0 @@ -80,6 +82,9 @@ class Game(db.Model): lazy='select', backref=db.backref('game', lazy='joined')) + def last_player_locations(self): + return [player.last_location(self) for player in self.players if player.locations] + class Player(UserMixin, db.Model): """ !Always call set_auth_hash() after creating new instance! """ __tablename__ = 'player' @@ -143,10 +148,11 @@ class Player(UserMixin, db.Model): if not self.locations: return None if game is None: - return max(location.timestamp for location in self.locations) + return max(location for location in self.locations) game_start = game.start_time or datetime.min game_end = game.end_time or datetime.max - return max(location.timestamp for location in self.locations if location.timestamp > game_start and location.timestamp < game_end) + return max((location for location in self.locations if location.timestamp > game_start and location.timestamp < game_end), + key=lambda location: location.timestamp) @login.user_loader def load_user(id): @@ -188,6 +194,18 @@ class Location(db.Model): latitude = db.Column(db.Numeric(precision=15, scale=10, asdecimal=False, decimal_return_scale=None),nullable=False) timestamp = db.Column(db.DateTime, server_default=func.now(), nullable=False) + def __str__(self): + return f'{self.longitude}, {self.latitude}' + +class LocationEncoder(JSONEncoder): + def default(self, location): + return { + 'player_name' : location.player.name, + 'longitude' : location.longitude, + 'latitude' : location.latitude, + 'timestamp_utc' : str(location.timestamp) + } + class Notification(db.Model): __tablename__ = 'notification' id = db.Column(db.Integer, primary_key=True) diff --git a/app/routes.py b/app/routes.py index 1c4b560..85fbd8c 100644 --- a/app/routes.py +++ b/app/routes.py @@ -2,7 +2,7 @@ from flask import render_template, flash, redirect, url_for, request, abort, sen from flask_login import login_user, logout_user, current_user, login_required from sqlalchemy import and_ from app import app, db -from app.models import Player, Game, Role, GamePlayer, Objective, ObjectiveMinimalEncoder +from app.models import Player, Game, Role, GamePlayer, Objective, ObjectiveMinimalEncoder, LocationEncoder from app.forms import LoginForm, RegistrationForm, CreateGameForm, ObjectiveForm import json import qrcode @@ -69,7 +69,7 @@ def game_dashboard(game_name): #game = Game.query.filter(Game.game_players.any(and_(GamePlayer.player.has(Player.name == current_user.name), GamePlayer.role == 'owner'))).first_or_404() game = Game.query.filter_by(name = game_name).first_or_404() if not is_game_owner(game): abort(403) - return render_template('game_dashboard.html', title = 'Game Dashboard', game=game, json=json, encoder=ObjectiveMinimalEncoder) + return render_template('game_dashboard.html', title = 'Game Dashboard', game=game, json=json, objective_encoder=ObjectiveMinimalEncoder, location_encoder=LocationEncoder) @app.route('/game//player/') @login_required diff --git a/app/static/assets/leaflet/images/marker-icon-2x-black.png b/app/static/assets/leaflet/images/marker-icon-2x-black.png new file mode 100644 index 0000000000000000000000000000000000000000..23c94cfed50fb9b7adc5f0b99c5d5e8f4eeb58bc GIT binary patch literal 3183 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 U(+;`1LjV8(07*qoM6N<$g4YR6xc~qF literal 0 HcmV?d00001 diff --git a/app/static/assets/leaflet/images/marker-icon-2x-green.png b/app/static/assets/leaflet/images/marker-icon-2x-green.png new file mode 100644 index 0000000000000000000000000000000000000000..c359abb6c2c2a1ee7272e3f85ee825583f6924f2 GIT binary patch literal 4203 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 literal 0 HcmV?d00001 diff --git a/app/static/assets/leaflet/images/marker-icon-2x-violet.png b/app/static/assets/leaflet/images/marker-icon-2x-violet.png new file mode 100644 index 0000000000000000000000000000000000000000..ea748aa32933206dee2dec724aa8d9724384a41d GIT binary patch literal 4190 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 literal 0 HcmV?d00001 diff --git a/app/static/assets/leaflet/images/marker-icon-2x-yellow.png b/app/static/assets/leaflet/images/marker-icon-2x-yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..8b677d9390539f7f386176b754ec3bb2791def52 GIT binary patch literal 4159 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 JPDHLkV1j#5>~{bF literal 0 HcmV?d00001 diff --git a/app/static/assets/leaflet/images/marker-icon-black.png b/app/static/assets/leaflet/images/marker-icon-black.png new file mode 100644 index 0000000000000000000000000000000000000000..d262ae42eef90a127232ef9102438247d6e995d2 GIT binary patch literal 1523 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 literal 0 HcmV?d00001 diff --git a/app/static/assets/leaflet/images/marker-icon-gold.png b/app/static/assets/leaflet/images/marker-icon-gold.png new file mode 100644 index 0000000000000000000000000000000000000000..162fada6bb5ec9283873074f87c94bed4a183ce4 GIT binary patch literal 1862 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 literal 0 HcmV?d00001 diff --git a/app/static/assets/leaflet/images/marker-icon-grey.png b/app/static/assets/leaflet/images/marker-icon-grey.png new file mode 100644 index 0000000000000000000000000000000000000000..ebbab8effc42123c5fb5f83344561dcb4af0eabd GIT binary patch literal 1691 zcmV;M24wk(P)P001cn1^@s6z>|W`00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-3$s2GAD}NWF!Cp1}I5H zK~z}7rB}^w6v-9;RrU9@$AJvk;GMZdLQ8IuBMVL|J`Ul^A%`frL=bTX91B?+O|%kP zP-YKd*_FnSokbxeibx#gA3#BZ!>*N$!i9*hNMLKte9<%AT{YeHk&Ao8c*gdal=KeW z^@f<3f|aHzdcEF`XKvdz zY}-bw)e@~%OKPouQmIsyhd}1%=l214Ix{o#om?)5IF6x|!nlJ{3eWSvImg=CT0|** z|LWDNs{laX()%)>&%2)Iq1)|3N(rs?kYq90EK*8@VF=fCF*!MDN-2Ne-v9udKY#wG zgpiZ__wRQYV?zrVh5_IAkllJbd4WX_`a2j4>1n1&304^umP;zW@Mo@#4jt zl(Jqd7IUU)f^$A_44&t~FbuR>Eksd-BuQYJCMG5(uy^lX06?~}Y`CrqAp~B%dc_UH zD40TsS<^I0E|){6(-}~990yWLynOi*v$L}}cI+6Yrl!zrHu2!W13Y~A5C;w%fNk3Y zo8z2ga&i)eVJIQQtf{r0a~ub0nhpe-QVQF)v9`8`Q>RYhz zA0Y%h&+`C$K(*FK9ml~a5Y9Oc9XbR;$d;*l`0!yQNdijg5QyVA&{`igrIa~B2$WI- z@z7dBDFxSccPzy0m^a%~N}-hUD1d)4#)ftxrG#Z!c=F`QwjfWRK80ZzLnlEg&9d$r zs+79V7)vRo1IB5Z!uNfwuCC(IqemkFUc7jL$B!Q)pU*=GF~k6ju|z5L5305PI*OuX z!?nJoX$m0(_U+q;rKKg@zkk1UCdWEt4&^Bgb=?QxK99}R;zsr;M3QyU%!(#S@qZJbq3&* zTeogChd?$8@Z%_oz&X!&XV+dZ#*|?gzZodZw?8(}D~(2jIgT?j)3%F6yV{p!el=8PjYi|Crw6xR#aJkWF^kefjU2K-DF6#Aq z4B(?$trqSGvQanJk|gQHal9kdyRMtv{ai}<*~oTj)X!?Q8f&e~&1RF?w!LK=LZW`mo(@Gt07u zyve+1x7!TB;`Qs-lU;*s+#6pAA=;z7aa}j_qERZ9Zf)DbZZ}!0)r8ji(wjGLm~Gqr zE1FW8dBL^TmokoeClCO5_Uzdogb?3$yWPGwuIr-H=|D=k`uzFxKke9z@1$_=-aQ3i zAqWC)Sr#nIf@zuvf`Ai37B=SpKM(*Yl}dk+QvNp#L+$%My4|i;N_1J@{DBbSo0~Up{&4IE5_UJ{g%D&n lUW`rUZ_Al8XD;p5=6`+tS@~>Hl+6GD002ovPDHLkV1lF>BccER literal 0 HcmV?d00001 diff --git a/app/static/assets/leaflet/images/marker-icon-orange.png b/app/static/assets/leaflet/images/marker-icon-orange.png new file mode 100644 index 0000000000000000000000000000000000000000..fbbce7b2ab1e5de921b5f5488960a333ed37d054 GIT binary patch literal 1862 zcmV-M2f6r(P)P001cn1^@s6z>|W`00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-3tN{D;cm-z$E|x2GdDI zK~z}7rI%}rT~!sw|7-7a?z!ijduKYG>9ougD~4o{4_fFm#t_t)HU^^~-j9O{&6*ZVhgaj*XZKaKfQtWiz@B2KDefHkV54WAp?YwcH z{J-3@*ZS?X*WPR0L(GijjOX{iXSL4IP1>vx4kj7i(9UnXIKCWPS`6~X2j1I5Y(C4N zPcd`15F(b2tBua2wbqw{#vt)CYweGAe(l7oD}p?@io~{E+xCLQSHnUPVHkQ|-iL5< zAR;g`tkO_fgeZzsrCcIr{$|h_Jaqe){;ZdT{C?locQDDLuIs*Y?RDLO>quCwz$R4KyS;pC8MgYnVfC{yVL9qBti{GF4pF9`Yd-fcUipkKAFYLlzmJ6z6Un6$p+ zp39sM%7vJon$*)%lg2VW{*iC}?YTLS-`&5t!$|o?S65eS82Hdp32Y6PJ4i@4ehZ>R zVR&e;PI=jL$Ad2q0)V(O$w>L*La`+u_<5-61gz0u<~ah1d4IP?L)E6>=RFi#S{)Oc zXRi1b0PyVnTR+JpKd^RPyJzAuz_v+3I&fRskSlgT_^XgBcEAnWAe`Ksxh5{7qkXkU zLT*34d+Xf*K)=0jQ;>qj-?qLh$UA^Zt4-VBge|bhV|=QNdc6*<5=h5IP-sDCTLBUV zI;#NMUd@qLM52Mdf#D<%+wLR+w@Pv-Ec#H@F+j|o93oYOzM%nJf6ESRzWoy@uGxV4 z5|E`&L#m)`b_|f~YYW+<(bLn(!7w}l1Iw?;Lh zxGWMbD&+{2Z$;1hK0WV=di&-NA?&;X)0KK7KeOzuQ3wm3PvF~xWo-8Y7p&9fWP1+c zB*mH=w}6NiJi6<8wj(hbCip6uDu9}3?{8N*^`hcC#lkelXT>Zw{)@M z{!KS`3mZ>?O*VTuaKkp#Q^v*N8sa!cOZz(1rpF*17dLbj(Gob&$pkpNnh%mLgufc6 z|2b%o>26|XJax~;S2lFDZs{lpn7G^&Hai6A6dM;aV=0P;jKCHqDq97;_WOj~N8E_oK)T-b(29%z6o}fHRr37ha zYQfH)-^@UI51z^_I$_)LwX^21&_!DsKyzpwaik%{q}6XO^|z^er=LL2QH07vCM^+&+zi1 zkhu_j!}Z8A9_~GOs=Ocs0JO*-sMNHnL<%w&g1}44@d~I!3iW!XjWLg1>vIm|^FKII zA@JAx2IE+`0W3Gl$UdGrmXF@wJHnaBQ{EE@sZ>2W>1KPdW^1GuVLjV8(07*qoM6N<$f@n2+ ANB{r; literal 0 HcmV?d00001 diff --git a/app/static/assets/leaflet/images/marker-icon-red.png b/app/static/assets/leaflet/images/marker-icon-red.png new file mode 100644 index 0000000000000000000000000000000000000000..3e64e06d1db4eecf0d6e4446630fc4f9b97694b2 GIT binary patch literal 1870 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 A%>V!Z literal 0 HcmV?d00001 diff --git a/app/static/assets/leaflet/images/marker-shadow.png b/app/static/assets/leaflet/images/marker-shadow.png index 9fd2979532a19a15b824ce763c76e04a8dafadfb..84c580847f0b20fa72d328985a08c0c176554a69 100644 GIT binary patch delta 583 zcmV-N0=WI^1mFaaB!4GKL_t(|0qxR-j+;Rc17L@l-v7PI%*+jw<&h<=vQzGfF1`!z zC;u~P;-BBHh`c7R$;MBUlL?1k|JKjRM&2`HP3EAvro-rP6>gYJz=AWX*M6@un1;v{ zG}kJlcft6g|^b+zY=J$ZtWqZq`zR2TsLBt5$K*ln}1Beg6k<}JL*YPF{=D* zJt9ddf(0rbK-p3Q$jBIdfPIGdCL={pPZe29%|u7Kq6UF#1O~k@qlzy)@7NJH5b5QZ zH0w1L>&ZF>IAnU}cyCIWV=(@k>0)}s#u&vVyO&ex=p?gju}^>lcQj(kJsJ0NpK8Z8 zsR=XG6xB+HOMldRZW_$V7W(97{2vrkbGH&KIGpP1Y4eg7m=f&zhf<3{K@OkST6WlQ z&WrB4i(<$f#fdqZ(?9Cugz0;q#vD&DkRswQ$&=8o`#A=^4s|;+2j&>B0;rLD?117I zXExqLK+K*I$f#qT1i>ZtqL>1W=>@jKHb|pUC?mh~>whpUaUxN$|_x zJWci65cz=j%tw(+fu3RkX5@~?HX=`a{uS@=ig`=$vl?oKOa;uyBaeO6!S95g;xV2H z{1)?5NI)qtn32A%3A`us2zT)iFL~L)?Sz>lX7=ag7O!z1Hwiw+CoE$TqF_p?+|FZR V2l#`|EWrQ(002ovPDHLkV1oF@9rpkL delta 593 zcmV-X0ptd`x!;+@)X z{8ZbWe!~AwAOHQ_kT+z<>HYHj5vdD){jFb;`l_C^6R{#=P+Y$W2nzOBh>SsT#x$H> z3HDcoBtdZlAHGADQQKe6Qs4kXW@I-eqh!^Z-wsI4o?j4Y+dgb6YlfN#kGL?lO_!6~M^7sOn zbsUkKk<@Ysie&`G>ruxH&Mgy&8;i=AB9OO!xR{AyODw>DS-q5YMWp11S4$z3 zpM@J2$$svqQW|u^(Q?9>s7Qf9%Y?I`rBJQIfU{wH%RyutB-yc`D-I|OQh*X?qrO_c ziDX9)A|L@=vDY-&?_$U&e6)Nfc_gSQIxr#&>~SHPP~ba0;EmGqkk9h)gw3 z_|6Lt21-50Q@kL!2j|Ba#Xw+0>YNSuXv`Db$78(4r_2?^#Gzq-OU(++~IFdkO00000NkvXXu0mjf3x*c` diff --git a/app/templates/game_dashboard.html b/app/templates/game_dashboard.html index be9f05e..0f4b7d6 100644 --- a/app/templates/game_dashboard.html +++ b/app/templates/game_dashboard.html @@ -32,7 +32,10 @@ {{ player.found_objectives | selectattr('game', '==', game)|list|length}} {{ player.caught_players | selectattr('game', '==', game)|list|length}} {{ player.caught_by_players | selectattr('game', '==', game)|list|length}} - {{ player.last_location(game) }} + {% with location = player.last_location(game) %} + {% if location %}{{ moment(location.timestamp).fromNow()}}: {% endif %} + {{ location }} + {% endwith %} {% endfor %} @@ -77,6 +80,7 @@ {% block scripts %} {{ super() }} +{{ moment.include_moment() }} {% endblock %} \ No newline at end of file