From 5fee259dd0dae2e8fe5e6bdf255debe68f229493 Mon Sep 17 00:00:00 2001 From: Gabriele Monaco Date: Mon, 30 May 2022 20:44:28 +0200 Subject: [PATCH] Changed calendar format to array and graying out old events --- apps/agenda/README.md | 2 +- apps/agenda/agenda-icon.js | 2 +- apps/agenda/agenda.js | 89 ++++++++++++++++++------------------- apps/agenda/agenda.png | Bin 7227 -> 3119 bytes apps/agenda/metadata.json | 2 +- apps/android/boot.js | 12 ++--- 6 files changed, 50 insertions(+), 57 deletions(-) diff --git a/apps/agenda/README.md b/apps/agenda/README.md index 5141673c0..a546e0a89 100644 --- a/apps/agenda/README.md +++ b/apps/agenda/README.md @@ -1,3 +1,3 @@ -# Calendar +# Agenda Basic agenda reading the events synchronised from GadgetBridge diff --git a/apps/agenda/agenda-icon.js b/apps/agenda/agenda-icon.js index ed6690033..891543955 100644 --- a/apps/agenda/agenda-icon.js +++ b/apps/agenda/agenda-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwwcCpMkyQC3wAIFgIRJn8JAoeQ/gRYwB0Bn57F/gCBHAgfCn8EDgdI/kSAoIR8oBkFgAFCCIysKCPM//4AKZAgR3/0Aj+Ag/ggP4gF/CPpr/Nf5r/NfYRhw4RL8IRDyEAABUJCIYC/AVI=")) \ No newline at end of file +require("heatshrink").decompress(atob("mEwwg1yhGIxAPMBwIPFhH//GAC5n/C4oHBC5/IGwoXBHQQAKC4OIFAWOxHv9GO9wAKI4XoC4foEIIWLC4IABC4gIBFxnuE4IqBC4gARC4ZzNAAwXaxe7ACO4C625C4m4xIJBzAeCxGbCAOIFgQOBC4pOBxe4AYIPBAYQKCAYYXE3GL/ADBx/oxb3BC4X+xG4xwOBC4uP/YDB54MBf4Po3eM/4XBx/+C4pTBGIIkBLgOYAYIvB9GJBwI6BL45zCL4aCCL4h3GU64ALdYS1CI55bBAAgXFO4mMO4QDBDIO/////YxBU53IxIVB/GfDAWYa5wtC/GPAYWIL4wXBL4oSBC4jcBC4m4QIWYSwWIIQIAG/CnMMAIAC/JLCMIIvMIwZHFJAJfLC5yPHAYIRDAoy/KCIi7BMon4d4+Od4IXBxAZBEQLtB/+YxIXDL4SLCL4WPzAXCNgRFBLIKnKLIrcEI4gXNAAp3CxGZAAzCBC5KnCKAIAICxBlBC4IAJxG/C4/4wAXLhBgD/IcD3AXMGAIqDDgRGNGAoXDFxxhEI4W4FxwwCaoYWBFx4YDAAQWRAEQ")) diff --git a/apps/agenda/agenda.js b/apps/agenda/agenda.js index 6bb757629..f39e31c75 100644 --- a/apps/agenda/agenda.js +++ b/apps/agenda/agenda.js @@ -8,7 +8,6 @@ location, allDay: bool, } - the file on storage has the same content but is an object indexed by id */ Bangle.loadWidgets(); @@ -24,30 +23,26 @@ var fontBig = g.getFonts().includes("12x20")?"12x20":"6x8:2"; var fontLarge = g.getFonts().includes("6x15")?"6x15:2":"6x8:4"; //FIXME maybe write the end from GB already? Not durationInSeconds here (or do while receiving?) -var cal; -try { cal = require("Storage").readJSON("android.calendar.json"); } catch (e) {} -if (!cal) //cal = {}; // first event - cal = { //FIXME test - 1: {id: 1, title:"foo", timestamp: 1653577989371, durationInSeconds: 3000, location: "somewhere", description: "something very very long"}, - 2: {id: 2, title:"last", timestamp: 1653579989371, durationInSeconds: 3000, location: "somewhere"}, - 3: {id: 3, title:"bar", timestamp: 1653578989371, durationInSeconds: 3000, location: "somewhere"} - }; +var CALENDAR = require("Storage").readJSON("android.calendar.json",true)||[]; + +CALENDAR=CALENDAR.sort((a,b)=>a.timestamp - b.timestamp) function getDate(timestamp) { - return new Date(timestamp*1000); + return new Date(timestamp*1000); } function formatDateLong(date, includeDay) { - if(includeDay) - return Locale.date(date)+" "+Locale.time(date,1); - return Locale.time(date,1); + if(includeDay) + return Locale.date(date)+" "+Locale.time(date,1); + return Locale.time(date,1); } function formatDateShort(date) { - return Locale.date(date).replace(/\d\d\d\d/,"")+Locale.time(date,1); + return Locale.date(date).replace(/\d\d\d\d/,"")+Locale.time(date,1); } var lines = []; function showEvent(ev) { var bodyFont = fontBig; + if(!ev) return; g.setFont(bodyFont); //var lines = []; if (ev.title) lines = g.wrapString(ev.title, g.getWidth()-10) @@ -93,38 +88,40 @@ function showEvent(ev) { }); } -CALENDAR=Object.keys(cal) - .sort((a,b)=>cal[a].timestamp - cal[b].timestamp) - .map(k=>cal[k]); //make it an array - function showList() { - E.showScroller({ - h : 52, - c : Math.max(CALENDAR.length,3), // workaround for 2v10.219 firmware (min 3 not needed for 2v11) - draw : function(idx, r) {"ram" - var ev = CALENDAR[idx]; - g.setColor(g.theme.fg); - g.clearRect(r.x,r.y,r.x+r.w, r.y+r.h); - if (!ev) return; - var x = r.x+2, title = ev.title; - var body = formatDateShort(getDate(ev.timestamp))+"\n"+ev.location; - var m = ev.title+"\n"+ev.location, longBody=false; - if (title) g.setFontAlign(-1,-1).setFont(fontBig).drawString(title, x,r.y+2); - if (body) { - g.setFontAlign(-1,-1).setFont(fontMedium); - var l = g.wrapString(body, r.w-(x+14)); - if (l.length>3) { - l = l.slice(0,3); - l[l.length-1]+="..."; - } - longBody = l.length>2; - g.drawString(l.join("\n"), x+10,r.y+20); - } - //if (!longBody && msg.src) g.setFontAlign(1,1).setFont("6x8").drawString(msg.src, r.x+r.w-2, r.y+r.h-2); - g.setColor("#888").fillRect(r.x,r.y+r.h-1,r.x+r.w-1,r.y+r.h-1); // dividing line between items - }, - select : idx => showEvent(CALENDAR[idx]), - back : () => load() - }); + if(CALENDAR.length == 0) { + E.showMessage("No events"); + return; + } + E.showScroller({ + h : 52, + c : Math.max(CALENDAR.length,3), // workaround for 2v10.219 firmware (min 3 not needed for 2v11) + draw : function(idx, r) {"ram" + var ev = CALENDAR[idx]; + g.setColor(g.theme.fg); + g.clearRect(r.x,r.y,r.x+r.w, r.y+r.h); + if (!ev) return; + var isPast = ev.timestamp + ev.durationInSeconds < (new Date())/1000; + var x = r.x+2, title = ev.title; + var body = formatDateShort(getDate(ev.timestamp))+"\n"+ev.location; + var m = ev.title+"\n"+ev.location, longBody=false; + if (title) g.setFontAlign(-1,-1).setFont(fontBig) + .setColor(isPast ? "#888" : g.theme.fg).drawString(title, x,r.y+2); + if (body) { + g.setFontAlign(-1,-1).setFont(fontMedium).setColor(isPast ? "#888" : g.theme.fg); + var l = g.wrapString(body, r.w-(x+14)); + if (l.length>3) { + l = l.slice(0,3); + l[l.length-1]+="..."; + } + longBody = l.length>2; + g.drawString(l.join("\n"), x+10,r.y+20); + } + //if (!longBody && msg.src) g.setFontAlign(1,1).setFont("6x8").drawString(msg.src, r.x+r.w-2, r.y+r.h-2); + g.setColor("#888").fillRect(r.x,r.y+r.h-1,r.x+r.w-1,r.y+r.h-1); // dividing line between items + }, + select : idx => showEvent(CALENDAR[idx]), + back : () => load() + }); } showList(); diff --git a/apps/agenda/agenda.png b/apps/agenda/agenda.png index ccbcce5fff4e578b44d2e1ba87d21339e5dd19e0..c850b0e5d1a3eb98b9c9cb68968ab554119fe23f 100644 GIT binary patch literal 3119 zcmV+~4AAq5P)yp{-?d)g|2PB(wtIk?fU2LZ2RH)qzofT8AcQ;R~g`PhY}tP z?W`A;+xvd}rMCdI&YWevzXA{rJOE4wP`YSPsWrAn+dzu}R^6$r`#~;~E9`ws<%&N0 zGN1(8P;Tfm_7MmN-Ungtgm3sQ{d+Z z{{8@7^sAn-n{E&~9)7c$iVxnWV)us-I0ja%ve~~6JU5Syo*uII{RJ#$Tk`P>Kzehk z;D~@+4);aD=R3e^1&IU{3fu4Z0Uuv@eFeO_`mrtGhl*1QKzFX-^)4T+Y@_3&`BJoS(-}V|PX|7s?x{tZU`Z zhl_}K_<5Fnl)+2C-G)LpiVt??+G9Hf9Shce!HSPFiJtp1slyQK3=Rp@HW+c!stEtl zNZj3Ah=~lL+1N!#w}~#3g~rw{g2JLuYdshlJOQnzFEtHDd#uXUol%BxTr}<&!efRd z))^cQp$8|8CTnXp>yy%mxi5r-4F{NL@MDCx7PU%7gu$2e?TM&dwUig-a<#001iE0Rs+HX3t)Zy6l>Ixm&{TGcxlsYUF)s=irHs%3FB+O#Ig)metOF?odzgnMRw@z5 zJXb}=nM#0nv2C*KqG%P6U`&6_UPfDtU0f({q@&Bk2p=sWBR!DIY$MKWv2vxhh01HK zxF}_e4e-LtO@+|A+~29#gssPUD>(~n;J+I|K&MrrR>^R6k=tdA#cHLYrGx7&9UM7RNp?XEWwk9d-snWBkTSx@jVYme zV#7x=Ind|6aj9pAL`0+-36fyUVWbe1d?EK~;#|vuk^K)my z_>s(x2tuP#VKG~2Y3<i+m)*RGIVG?=<02{P7x>we zQ;D2BhQv*WNZfIf&;U==Dmm-7<#4glg=beLQ(2tHuCG&=XeeayGn3hsQOp;IN|`h> zo}jQO(zhqFc5@a1er_DguSW0hLBi@MiJlV72!9RTzRXkdT( zc|P57oNrE7h)aGtnfZ@|Ih3Og3G6#oiof22w^z=_L+6TCqvF|x$y8oz#na7&?1CDe zU6D*wTs+~ibEqmg%igR@EPiG(=_jwC^$uXpqII}xJrIG<-kwKgV>_??*DMyr$Kv6x zMj{dH<6b|0Ij_9*0Be>#j+<6R$QU0UiW$eeXYOO|`hC2XbcE`9Bki3xms5uW%txoD zt-Xt)OLerhcaeLx5_gRf7o`k^T#CD^lFE`iI@@kgS5ZvcjYjmIHi78tp{Bdj$kp;9 z8tW=Kwr>mLLiB80_Y5mvorSlj2B}nHPadGHqnn-{i~Vmw5Rl8IOo<5Oe-fV;{_}+x z;lFpCCiQ6Xt-XQyaT7@WwuD8mr{L@DM&ZR;W=94wHoyy+MBve=V0L|-LRHCG+HN#r zyk5>Pmp%c&yhp46vSs@*R<7Ga zb4$mIz*cZF2f(ICf3@)tPrbQ^q}`{v(bjEmYwt3#^>6t+y?QS%C#G?tuokOTw6~Ym zv~awjhK2KD@zkmRDdBY+4siI}i$nTIr4k-}IE+w(9^g4Z;gmq1oIY@>g3ApZtlOH+ z>f}sXj9s*K_V8A6CQCLQBd1Eq?vu?tzH%?Q#dY@hzh#%hXZ%%b0dbK*_V{LFHyX79r9y^& z{Bksbi_ruwrmekuKtGwsFY#SYDS!R_PnZ)O#Jhhuh)2k4tV`T)_jxZV%^trlaX+3O zt_Xr4qxWROVcm*S^3HN}i4m zV$qz5_ISBWg2f_YwTis*(gXHIN3`5fI6ma_e;|7%1(ks^yMY@6J{sb(5 zwWHfC>01YMS{2a~27l?XK_-=880Cp!l&8b?2!kINFV#_3--_1BW*orBOGCmNb6Kba~ZS6Vg#=ACr|-2y_KBlJ<88*$Q#@W>YCa(UvizYiUvZ)_&80f zPxA~OTF%hZVN!-D7lt)gu7gcI|dAA7JCB+rI0`%dZ@=w%;m@ZC!l6{WvA1bw=P%^iJab zkH(5^qdXi}2T*S|TO+G$oAt4g20`cUTvEK3l!nP{Auzz(sZZ*@(`@|cu(_?H=M!L? zBLc&XdZ4Ykw)ruO)he435r~V6W1%?fXMe=k+l_}}LmjrCE3D>~T8!<1{96e0K?lqRo|j4`W94$GP9g|uK@g-MilRu5**As&CEIb?EUP$pR?zzbJiTQv$c>C zR~CmrAW~MAX7=D4#lHmv!KbeGN;wEb!Z_H$nP*Q4fckRS45l{#r*=6jZ@ty+477i4y`i-ran92x zr~U*rzWtdj=WfX}=$Y}I-PiGykkW*w+n+C<^&_40b$*|!xARGoI24%O_8B&TC4(zCYOlaV$3wmlh}dOI;_tt!Xtc%P@+)AGg>rdwKaLNqyx zhh>~gu?n@^23Pjf_@O?bsacPEis`l&&%St3D_gYI?#)E_Y70k-=QBe`J~p^C1~oX=M_U&y2e_k+rLe7O2RWi zV)Yz+&!y=Mh_z6+B<0d_flUvBueB>5u)P$eE(_6>8Tj%{SElTK3E5JyCZS%F2*kPG zF4?BKaf57k()}Ysb0fk%&}N9EsN`Z&;xlrT(Q-!ohI9h=m~r%7wE3|#xjzEM)@|5f zc7m>RuP~9&xK1ZOeXD=329p!-!f7U^3S z$;&_GI$AOpKi^JE%?zFZdX_mUQ>J3b=E_0IVoql>8K(`0lFu+QUmow19&4Bp+3#=h z0G>C!nV1{BD@j(YXf#qD3wfpO3`K}9Q|Z%TX!gpa!wOHIc`GCT7P?N4F`!G`gpwQ! z?348$);E){B3C9wu6gpL@NUxPPnw*BN+WWy*XsQem*L`F=kI9D`iADcuy3b+Dl2r- z8XQnt=iqfVI={+t@BWj=-N*9lGhyptCOH)-qj<-t9UpYxAJj2&t#pYUlyvhLz1u9= zuxYei#5+<@vA`qOqAU5-Yavu$igkYhTy{P=V`ZFAnO@N4F--?FK3#t9rj_H0Hv=7>CMFN%#R* zR;J#%H%56ol(m+Nk>9HKbskdYIoo$+9B-zw>)ztwN z#wkec6R~%O)WyW?(d6`Y`6L9G!n$8-%HJso@t148bU7sn;j=;P*!gmir>#OHR$ z+pyNu8`rd(-Q@G`%zA#+b7r>pXh(Wkc8m|)s1{n_ec}$bx^#SDb*eZkRaj!{#2N|* zZe2MP(o48^1x^P7G{uc}k$Mn>a;v_u!j&o07V z3fth*gNMSYv6n`qbd|;7k>v5kgUME<*OU61)}HrVe4hB&(vZ+!M2NZ&5v;PGjSNN~^kl5>7E`pxv%O2*^3P=&Vsg#cUrC-r7czx zZZ7wv*>XhcJVS1Arby86W)k{KJ@aTw?klVAEHx|q@I&oPN}g!MtJ}p6cihY6PscXP zweivvc3_7j%Zx5cSsV|L*((@^tEvyVI!&MzDV+LHCPXp}gf`toTvB$@nysI|A|TgX z=zivdv3+Kf*o!OBIe(svf<}3(Wm~>AMkXdiam9+&E>GI-tQc^ZnA+E=?aDn~aVv!T zUP(YHPPeV&Q8YDPH};xU+rCxXOKJsnA9)JzxoL+uHK=g=M%RMl^)8&%i+fdeuiGat zyIVS_>jN@<&vQz+li$r5!Wu~#6mYeA3M#`G+a>^ zUq!DH#boshTtBrdTav1<=OlUcri)upL*~1RN~fGxzk}5n-TV58boRhVX}8#o7+a5C zgL{R>J_li6tfo?_9WE0QnuR9!7M7pvC>}m{cHZXbAvkH^-q*|bMr|h&Y-}I1LT?XG zTfg6K{jFK#uD|H^dgx4`IIdueQ{?f?s1spQZTRA2-O$GY304YwuSu7yS45Wx zzuaR{b=UYhwOjkBW~ga|F4izj&f3CmIV0(Lj<{QrC^~Gv_y_kM!vd6Kcp2<|Y)Lt- z#Fj0+v=q1?gG`*8x}gRhIYu@>E#)ES^gP&6rU$?q-iSm$D=%V%_qYw)x8kIXtf6i z6&LKteYEGO%t@x2faZqsn9EP1}YvRaB92XFYi}I95*k zU&7jr!nJ)JMLHu_-PHGq+;yw2T-T6nWp!93U98}4RdnCLNao(y6Ny)w%UlkBl(=8g zbDTa*E50VhTBVhWrs(ywm)X6!vM)fni;axLtrLK}4lbTGww!!;Ftw**Jma)VqUfU; z+v9uIyODZS`X@j3Zq%8*6@i|s_3-u&nhCIMf0}mcsa1R9M3ZGZKGMRnz1ZN8ZR~{V z*iQTDkzA7#n@80$U$4z(aBRax0So1vD$96Jz3I4!wIMOy;#4JrW60I&`@2^>pIvnZ z)8*uSscx-%jZmpcv-3i>?co&D)48QF^7n(CCo3wh)p{1FMt_PM>KVl9T}Zj*yqoRP z7$cp_2x*Cha>f?Ev}R4d9n}syte_5w+bmG}6{(l-S?|Vcr6=Hq+Wl{L(oA0-jlYvN zI(Ad)h@B{T()zjRrn91BcW(rKc=mOrRk_W{$Bqxj5WVI+)3!5vnrD!%j&FL_2uhDT z&*i5V&Jr2ItIT3bOD{GHqPyfqkFi{}AdqE|OfuQdicJ2oYX?1~ha?$UHf&O9blcgu zLRVTr?!aBUjV?0s2Re1-vNxZX-|dI0nwChzt0&&yuC zdX+ZO)2cemRbkokrZH(2WCl2uAX1-mej-j5NBHz!%e^TUy; za#9-i{2Amtj;!y(OEUpG0;v0q;z@>4(N@lWIP(CJw z%J$Gx^hbO?zBV>L;aS}8EP#9<11Y{pGy;Y6@j?D-!R2l72SL6E^tTpV2kCkCNz#H%ZRk@&7^lvULtZeLlTJS0GVEXtj zS%GB#rpaS6{vzwQ*!Uw$>HHc9X#NxTH|-y}FDZjsHZ~+PHqDP8o|TyqjPIXBXVaK; z(o&N~Kw&TdoeHPm&@?y>z|-LreF6h+K*3Ro0NwyYqoRI+vSM+06c!EOLxJE3CWwPG zz|iRwECtR$VfEoS1{w_~P>DD=frcV73;=*Yz+!%Z*v?^sRY~#wH7Y(79fTqp05m)S zLxH357yyLQC%}meJRXFiplBEh+JJ6=U4o+1Nak#g4+We~rVqsfK>D&gmInBQlT7Wb zj9?hVx4@SqcHR^o12iy#SuZt7NwH*d zL5(1O#ec8)oxp)_y>Fj@H*;wS3SBB&5{357376sz(3c#6cHf3*o)ne`0Dj-!3+jiQ z`8ShAC(vjN3IM>V1R5G-m;%6w009Tb;Td?e0S#|JF#vu?=du~R015{%^#C&kvjGce zDI2Kv5|ui?YX^7&e4bDkG#rhAqlgX|GzpC+VTpPuGzo=*A^#szq+kg|ECUOt(J@3g zj)*gWQ}8qt9F5b*;^`Ek^f`bzbX8((t*@` zlYuKJxF92cuE^gx<5$Xm@%mnF|3wcV^uJF25x@V^^)Frjh=G5k{BL#rOV>YQ;2$af zTV4NWbcz3UrUO{uMlS$7vF*c$s)46HF<(m;F8EtbmVYmUq@^o?!sR?Gn=Q*4;V}?xi@~t4uy+!gNAWmgInlc4aJj9;Y3C~TcQvz%P9@%QsTLQ_$x_jV zhG{ISiPt6Gs@lCq+AQxtbOE!H@D}w@7fC$6G&UILPJcv&s!y~jR&ELK}=%}O@A GhyMqGu%7Dx diff --git a/apps/agenda/metadata.json b/apps/agenda/metadata.json index 6895bbc7c..0a9f6e44f 100644 --- a/apps/agenda/metadata.json +++ b/apps/agenda/metadata.json @@ -1,7 +1,7 @@ { "id": "agenda", "name": "Agenda", - "version": "3.01", + "version": "2.01", "description": "Simple agenda", "icon": "agenda.png", "screenshots": [{"url":"screenshot_agenda.png"}], diff --git a/apps/android/boot.js b/apps/android/boot.js index 829c1b4b0..df21a5521 100644 --- a/apps/android/boot.js +++ b/apps/android/boot.js @@ -92,17 +92,13 @@ }, //TODO perhaps move those in a library (like messages), used also for viewing events? "calendar" : function() { - var cal; - try { cal = require("Storage").readJSON("android.calendar.json"); } catch (e) {} - if (!cal) cal = {}; // first event - cal[event.id] = event; + var cal = require("Storage").readJSON("android.calendar.json",true)||[]; + cal.push(event); require("Storage").writeJSON("android.calendar.json", cal); }, "calendar-" : function() { - var cal; - try { cal = require("Storage").readJSON("android.calendar.json"); } catch (e) {} - if (!cal) return; //nothing to remove - if (event.id in cal) delete cal[event.id]; + var cal = require("Storage").readJSON("android.calendar.json",true)||return; + cal = cal.filter(e=>e.id!=event.id); require("Storage").writeJSON("android.calendar.json", cal); } };