From cf8507a43e4e0d9c3985547276bb541db2b65b1f Mon Sep 17 00:00:00 2001
From: Stavros Sachtouris <saxtouri@admin.grnet.gr>
Date: Wed, 17 Jun 2015 14:26:21 +0300
Subject: [PATCH] Open notification box on critical errors

---
 agkyra/nwgui/menu.html                      |  15 ++++++++--
 agkyra/nwgui/notify.js                      |  30 ++++++++++++++++++++
 agkyra/nwgui/protocol.js                    |  10 ++++++-
 agkyra/nwgui/static/images/ntf_critical.png | Bin 0 -> 4317 bytes
 agkyra/nwgui/static/images/ntf_info.png     | Bin 0 -> 4539 bytes
 agkyra/nwgui/static/images/ntf_warning.png  | Bin 0 -> 3976 bytes
 agkyra/protocol.py                          |  12 ++++++--
 7 files changed, 61 insertions(+), 6 deletions(-)
 create mode 100644 agkyra/nwgui/notify.js
 create mode 100644 agkyra/nwgui/static/images/ntf_critical.png
 create mode 100644 agkyra/nwgui/static/images/ntf_info.png
 create mode 100644 agkyra/nwgui/static/images/ntf_warning.png

diff --git a/agkyra/nwgui/menu.html b/agkyra/nwgui/menu.html
index a829e99..cfc1f4a 100644
--- a/agkyra/nwgui/menu.html
+++ b/agkyra/nwgui/menu.html
@@ -16,10 +16,14 @@ You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -->
 <html>
-<head><title>GUI for Agkyra Pithos+ Syncing Client</title></head>
+<head>
+  <meta charset="UTF-8" />
+  <title>GUI for Agkyra Pithos+ Syncing Client</title>
+</head>
 <body>
     <script src="protocol.js"></script>
     <script src="settings.js"></script>
+    <script src="notify.js"></script>
     <script src="static/js/jquery.js"></script>
     <script type="text/javascript">
 
@@ -214,7 +218,14 @@ window.setInterval(function() {
   var status = globals['status'];
   var new_progress = progress_item.label;
   var new_pause = pause_item.label;
-  if (!status.can_sync) {
+  if (status.notification !== 0) {
+    new_progress = notifications[status.notification];
+    new_pause = 'inactive';
+    if (progress_item.label !== new_progress) {
+      notify_user(new_progress, 'critical');
+    }
+  }
+  else if (!status.can_sync) {
     if (globals.just_opened) new_progress = 'Connecting...'
     else new_progress = 'Not able to sync'
     new_pause = 'inactive'
diff --git a/agkyra/nwgui/notify.js b/agkyra/nwgui/notify.js
new file mode 100644
index 0000000..59735b1
--- /dev/null
+++ b/agkyra/nwgui/notify.js
@@ -0,0 +1,30 @@
+var gui = require('nw.gui');
+
+var ntf_title = {
+    'info': 'Notification',
+    'warning': 'Warning',
+    'critical': 'Critical Error'
+}
+var ntf_icon = {
+    'info': 'static/images/ntf_info.png',
+    'warning': 'static/images/ntf_warning.png',
+    'critical': 'static/images/ntf_critical.png',
+}
+
+var notify_menu = new gui.MenuItem({
+    label: 'Notifications',
+    icon: 'static/images/play_pause.png',
+    iconIsTemplate: false,
+    click: function() {
+        console.log('Notification is clecked');
+    }
+});
+
+function notify_user(msg, level) {
+    var n = new Notification(ntf_title[level], {
+        lang: 'utf-8',
+        body: msg,
+        icon: ntf_icon[level]
+    });
+    setTimeout(n.close.bind(n), 4000);
+}
\ No newline at end of file
diff --git a/agkyra/nwgui/protocol.js b/agkyra/nwgui/protocol.js
index 3ee6ccb..f760d2a 100644
--- a/agkyra/nwgui/protocol.js
+++ b/agkyra/nwgui/protocol.js
@@ -28,6 +28,13 @@ function send_json(socket, msg) {
   socket.send(JSON.stringify(msg));
 }
 
+var notifications = {
+    0: 'Syncer is consistent',
+    1: 'Local directory is not accessible',
+    2: 'Remote container is not accessible',
+    100: 'Unknown error'
+}
+
 var globals = {
   settings: {
     token: null,
@@ -36,7 +43,8 @@ var globals = {
     directory: null,
     exclude: null
   },
-  status: {synced: 0, unsynced: 0, paused: null, can_sync: false},
+  status: {
+    synced: 0, unsynced: 0, paused: null, can_sync: false, notification: 0},
   authenticated: false,
   just_opened: false,
   open_settings: false,
diff --git a/agkyra/nwgui/static/images/ntf_critical.png b/agkyra/nwgui/static/images/ntf_critical.png
new file mode 100644
index 0000000000000000000000000000000000000000..9e4ba583076ad6b3015835168f174a6cadce0239
GIT binary patch
literal 4317
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
LNkvXXu0mjfZ0Ao`

literal 0
HcmV?d00001

diff --git a/agkyra/nwgui/static/images/ntf_info.png b/agkyra/nwgui/static/images/ntf_info.png
new file mode 100644
index 0000000000000000000000000000000000000000..88431183c7d4eff7e8fe8527ae06ed2e8bc94bed
GIT binary patch
literal 4539
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
Z{vX(~`&YunRh9q%002ovPDHLkV1kv7?cM+Y

literal 0
HcmV?d00001

diff --git a/agkyra/nwgui/static/images/ntf_warning.png b/agkyra/nwgui/static/images/ntf_warning.png
new file mode 100644
index 0000000000000000000000000000000000000000..74ff54f6634d5f8ac145cfaa46b71973dca60efb
GIT binary patch
literal 3976
zcmV;34|nj1P)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s7`}v6b00004XF*Lt006O%
z3;baP00006VoOIv0Pg@^001@R=*s{A010qNS#tmY4c7nw4c7reD4Tcy000McNliru
z-v$v16Bf|*uoVCR02y>eSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{01n_u
zL_t(o!-bf6bXV22$3Oer`@2bi5S2LunY3CgS_)Wj9uO#EwN7XtL9Jq|)~a=^it@Dj
zRGv?3t)Q)xObptVGKdq1Bc%+Qr63?PB$z-5AqmOv4rjkV?)@d9b**=^e(T;}*6*IP
z&))kxoFf2!1t7eQvd$~y5%J66%k<gW>By)2W%rFdIcg60Wh~u4*VV(#kw(kW5ohG9
zi?Y6FZg{Dza*zqipDG0bNSC8eEX`$bZX=T~K*?PGJhY`Wel~susw<5?u>4fqPN-kb
zT?7lznZF&Q`X2i2{@tpJMG5Akx)fdY;d`p8>d!-s`po&uhka?R*-EfLpqZ2a_zQpt
zwE|8mnOOk~8c~L&$oLCE6m_%VSM$2zUZpr)3?>KaTj7OeOc4j);G@O}tGX^_)-83g
zN|138;=)mNIpPCC%6L<dC{X;*irH}DX1?6ojR$W%2N|c-4E=(~t^y5-GX&t5a4!ze
zAs_;p#OO^y{1T46{0hzu=8+EOvD2?0)mA!^5&a7C#GxKRFv(jMh=2f5hxp%)D~Ffw
z86h9`SxaQVT&budhzq1pz%hO~YEeGjc!Z128Ns5ppl=B#rL<hGL?Qr>8w5QX2;V#R
z9#+f{cK4i(Nx^|e__k^v(?7op;1TgF(D$}>VZz8JtiacUcJRUMk=!<>4l_Y%SzvG@
z#h}=+Lz*ChbPJqz;QQS1{6U`l_y!I&`Zy>k7%WDtz-7w9fAwM0<}LtCe|ipi?_?ns
zP%enmQ%1D^Fy_PpsHpoL`*u`v|5=L&8+<eZEJo5LkW~zRDT+bGAR6b<V%ddqidRf1
ze8=TiP$GsR1O;L!Xonvtih?R90#(itG|B~Ua#9$-0{k*g@GDS#6MbdZZAIychk0)2
zQ{r|8bzyrgl==(Vc0f=U!9~PjuNcCpD@(n}3AmCOU%{a^m1S63bqSKL=GEU0r=VvR
zc<^e~bCmA-89laK%c%nt<AUqKTa|*F!idAAetEnG@yj?H!-wMFU_cD01La#Tqxk;C
zY}!^u*VP5|?UnSMjib14@fe=^{ZjVTHo~GF^zDX<A_jOL!EqgUt!g^Xl}g$BP&i~c
z^1jE)g%8oM$a2@4mtZ`=0bF=y;`?mg+epc;doUp1!FA$X8=x9R!w7z!{{$@aC>jGs
zLu@+WmZ7CgFEaf8)py|{W%b6mK=&;B8AAtm2Lox}V&lF+(sOaep%n)wm4d&2aU9>Y
z{E$wAucLKm8TVeinslpW<{QexWpSy)Fu-+Fl)U~T#l7z*Z1hn}M8tYYP~Q*39t@;%
zh1t8F;PVY@c=X9X(Ko+m(kl_*V1eaJ7I5yN>&VVZfUZPD?D2{i)Yh=c!0%(YI8w;Y
z5yDUjtdNtP0t0^9qEU#`PBj+AVCjcY0|X{BSh@tfV#Z*}$|*vE7M-gBb*@!{qdq~C
zj|3scf`)ua$OYaM92Ep%pI1!a6?Y`N3h)Zsp8*ee9N~I_0Sam01C(cg54}P(!*7}Q
z+PSWr4nxxq*d+!@K*urAi(x0Klz4?q?HEYh*yYJAlfkcGmNDEEDJcu2Tu|vSGfD2^
z{Ha<5$U#VZ*T++uw!z9-jL1!2R=KHfM(o4AR(XGu2ae!+4$oBH!tG1O#ZVByAjxwJ
zAzl3Pc+Sj{3o*PN_+-uDZEo*6o(2EvLhj(JnNUzln6?}oRZH)l-C?m1MWD6~imDdz
z3ggv^UxtGr6a(MZ!It4W(YFV3+-2)I{MK-e1f3Z9i`~>L=t2DvxbTM{7MhMi5I|lI
zU<t9j;!WmGgYYaugh20}kXkX2on|b%zS+QtUpG?IYX<!)dob*KaM5ru1{@b&{^yTa
znKOq}u0aGB_*JGTDkcWKI5FE)*F*L2J)C)ZKmO-|QT%4y8f?(6?FSD-&%(IukK8$d
zCog)Jpfyq=E_WWiipMjF-rLZH&vxXI8uu062Lo8SDaEw=N?1C7CZ`kxsK!bE&0E*7
zZtbUZ>)s1LP?jxym(kyoNZ?Q$p#ysxTn0`Hcys<NuI_U?!4XSUEw~ep(6?7EyGn)r
zy<$k4ESR^dfHSUMz>tGuprM7J6~$6-GA<=QH)PiAKhV7K1%d`}9LVo&c=hqo2(Yow
zrv!e|j4kkaFoot;1q}$pwpKmim>jxUE<qS!Qt{fv0n@`{b@UO#hYjQY2Or>tF)#4V
zJ~(-rvSHn7e$;S2VO@YmL|EQ3iSU9#=!c|SVm1lDhJwG}XWi?gNO>MJpM8!;*Zvnr
z&e{gRy3dxt(WD<^e)~xLQV!v8oEYRl6Rg<t1NJ-Tq4__hP{z}zr{Lsy?Ckdy0|%Z&
z7={>QuwwYf-NM8lgOOx7<rIT*CYDGo^yvcO$&Yg1^p|Pf{0ci8^VwFL$0uL(AS=5w
z0FL8ejN#!Mhj8g=gClLcc)%-SYYe?oj$r6)!K~g2X8Z=4_OEBc&u;z?6R=}%Eq}Q8
z3}#L`hz-Ja2r6d+8)9P@;*cW5ps8#lQ)YFe?BN5vy$mW-*KqpqF&wC^V*5Y;%ws>P
zB5j3~(T;eYO<#UNHEm8&6!Ju<7enNx#PLH#0pqx&vJHevs~_Pe709?vEK9s%ewtZ<
z@ruDKMg<zZB1A3Kfv<>S4S)>^kNO0DfTI>wR5M1?@=(XY+O0?;YyMosE8;{V&c(7Z
z<4`qf8vr5>VVUa{A;9zho@4nA=Y?08=!z!fI}h=$NBwe6#&Cx~A<&)g^ltxlY1^$H
zWiIfFSIAbs0`Uq_zdWAf-*xRj0?ho-FORK@HwpZC7?i2NiwL<UrcDEg%Kx|2V|1-u
z-{QL{96@=&D`b{mfkCiD;7w_drA_nN0+S?rW%NLJ9bqCu;5ek}o8i+P$FcQDe{8ye
z3kUCJ#9$@TV}lfh)<8JW=+GlKB+LDdV72YLMKP+pgXMZ}3iXN9X(lFv?GUjg+b`!O
z47C`>rm|sk6{$BH9%kDQ*0SwTE?!+FZuen?<EmM_cLG&4;AR^l5!^h(jK6n+3H1!P
zIiS-d<&K4?;id$Y#5s2S2qxK+U4r3|U(TPs$!)=jHyK>7sI9~Wz-9zb1a&>*ZQo_7
z$}Obej4Rkae-!tOk7#Lx6$cJc`Q;{tc5b9wXHZr498^j_p2*G5{F#M+`zt4(G!Tp7
z<Zd;IDNrP_Gpezs8<S|eVnnehH~AHujWX4n%o@KuW<~rm`XlT@2t-IBphie}%F2z|
zY|Q-~H&45rbzgkVfPTH`m*0oEe|d$?AHPUsa{1|vFA(AIN!hjh>cYKr%`<I&DDWdp
zhY~vqn`?4;@ZIqY>+%tgT~R~e$B{~=<d$k+vNxGk;+K&^s6seF;*?8bgW{D7xUPYe
zLXNWP6WG)9ajw4MF*<qh$@*{DwRAjJ4BbJOTtgJuj6puO=ZNWL&Gybz9``!GyzyFU
z>Y6BhZ3d?up2<(naqycWj1Z~C!LkNrs`KcTJccj<0Won;AaVL7xr4G{oAAc=pEK~X
zg}4$>TJ}19^7}LV^i$a0dM4}s`5veAJWN)nBp~Sk9Kc#wQrR6wuj0xH=O7|vr3^nl
zYYf}n3A{Y#9mby8fHB5cRbQY#!cOta*oH6|gNh)I0}aivY}YUv2F##-|0YI^_z^i-
z4jUF+%`NBG)A_h;=#*yW{BE3i-BQjw`^Ny>d+(i08uSt)zaJB^O|(WWtgJLF`>G%L
zIn@jw?6Bvgw>j_h&McZSlDn^hIq$*oxx$5~DS0_WVT2>fKg2IXGbI%P*M;2&;II3y
z<DMDw*jL-ix}^^?(!NOF0*^58F%AR~WcBp;<6NKq6Bcsm#A^V{w%xVNefoUvxnwKH
z=Yb95j9Lo@p{7oG>EmHM_1XqDto@iJ&z;9(x29;W4M`b|`_;BvctgDFXzP_Qf`abC
z-Dk|_^Jj(1|IOj@6JDfO4~Tp}Mk0`MAguGbZIVac#%p=)kJD*xg+cv#^2Dqy%-%bT
zMW1<?WL!re3Y8U`k7wLXbK@x`g`e0dBkek=k|Yfd8k7%?p;864N@U>&gJA3kh%_eP
z3_W0DIdOof*=N*Hhbj3_@YF+BQg^r+fO~Gckt?RBnfBL7e6cf&9sA+=6+;<y>n6@0
zJp_QJhHvTH35cBJOry;;M2V+aD1IsDB7B4p#>WwHsWT=sjG(>|LIqrdnjGp{^VnI{
zz{o+(6!eBDfJhxYFXA_g#`4I2|Bd7GVuuz*A&%p=I|yrWjA8S(J<NG>EYDoKh1NzB
z+nP8D@t?&2mmA<yl;==fl!zott_Q0(!Y`L!N7tK_f}53s8zTA@H}TG)ThMef1t)-}
z<MO36f&hl_E?<AO2Ako%4#5F9#;{`5$CNyLD$h*bPD_K}N(avcA#p1{?G>>&L(~q+
z9}s?#$)pN+S%w{ZEN@kx#l*Ybrl5O@nz}~%_U^&HI-hmx*0ZnbTUw4blbxN-z<~pp
zc=3p2vUoO0nl=K~tlhxhXHDbY(d+4cyo(LOSa{nxGsNNoFL5GwdgmXzg*QYL19Ql@
z7C}S|8d~1lcM9|OPNHbg8~D{<v+~eL&i%>HIcdmfa=P{=H#e6~+1VgMYdTG1V-rEk
zA@=Y2ij_-VBfn`mw_a)Rn+2i>BOL<E99G2N@9>Iv*)PTQiU`Fo1+NJF62vP;{SrC@
zix9>nq-`UM$?j_Sq|(yT3YVNIv>X+3y10-PV(TrNc0+ALjP5=sz)5|9E`WOYO%WPJ
zIHnzrYTFK3O#+C2pxo+BrN%G8@rsH3(#!@vK2gaW)flfBo1RN&5oRM?gWx4f729^x
zt`ri}Li^D}Mm>aMB(Fmm+k=X)xkTLU-9WuxLdq*9=on9YWYOX1$4T~SBD7$b>J^bi
z#A#UGaFlPI_RT{^B`gtEY$Dw;B`FbBBdl67r>vPzH4$&13`=bOG=zpE*q~!P#NN66
z$|^nvaMqjBmXR$$kynJDWVr{*c!W_1rvlx9fk1BZMgy=9r~$U1tVUVsO{F?{-%D@<
iil1@kUh#jL^8W)I74zJbBG^R$0000<MNUMnLSTZYXqiI*

literal 0
HcmV?d00001

diff --git a/agkyra/protocol.py b/agkyra/protocol.py
index 63c99d0..e651f73 100644
--- a/agkyra/protocol.py
+++ b/agkyra/protocol.py
@@ -437,7 +437,7 @@ class WebSocketProtocol(WebSocket):
                 #     LOG.info('Collision for "%s"' % msg.objname)
                 # elif isinstance(msg, messaging.ConflictStashMessage):
                 #     LOG.info('Conflict for "%s"' % msg.objname)
-                if isinstance(msg, messaging.LocalfsSyncDisabled):
+                elif isinstance(msg, messaging.LocalfsSyncDisabled):
                     # LOG.debug('Local FS is dissabled, noooo!')
                     self.status['notification'] = 1
                     self.syncer.stop_all_daemons()
@@ -485,12 +485,18 @@ class WebSocketProtocol(WebSocket):
             # while not msg:
             #     time.sleep(0.2)
             #     msg = syncer_.get_next_message()
+
+            # This should be activated only on accepting a positive message
+            self.status['notification'] = 0
+            self.status['unsynced'] = 0
+            self.status['synced'] = 0
+
             if msg:
                 if isinstance(msg, messaging.LocalfsSyncDisabled):
-                    LOG.debug('Local FS is dissabled, noooo!')
+                    LOG.debug('Local FS is disabled')
                     self.status['notification'] = 1
                 elif isinstance(msg, messaging.PithosSyncDisabled):
-                    LOG.debug('Pithos sync is disabled, noooooo!')
+                    LOG.debug('Pithos sync is disabled')
                     self.status['notification'] = 2
                 else:
                     LOG.debug("Unexpected message: %s" % msg)
-- 
GitLab