From fd11995c91e6ae928f32121352b13b28b4412fe4 Mon Sep 17 00:00:00 2001 From: Chris Caron Date: Sun, 1 Jul 2018 12:40:56 -0400 Subject: [PATCH] Windows notification support; refs #14 --- MANIFEST.in | 1 + README | 4 + README.md | 2 + apprise/Apprise.py | 9 +- apprise/AppriseAsset.py | 34 +++- .../default/apprise-failure-128x128.ico | Bin 0 -> 90022 bytes .../themes/default/apprise-info-128x128.ico | Bin 0 -> 90022 bytes .../default/apprise-success-128x128.ico | Bin 0 -> 90022 bytes .../default/apprise-warning-128x128.ico | Bin 0 -> 90022 bytes apprise/plugins/NotifyBase.py | 9 +- apprise/plugins/NotifyWindows.py | 185 ++++++++++++++++++ apprise/plugins/NotifyXBMC.py | 7 +- apprise/plugins/__init__.py | 3 +- setup.py | 9 +- test/test_api.py | 33 +++- test/test_windows_plugin.py | 132 +++++++++++++ win-requirements.txt | 1 + 17 files changed, 412 insertions(+), 17 deletions(-) create mode 100644 apprise/assets/themes/default/apprise-failure-128x128.ico create mode 100644 apprise/assets/themes/default/apprise-info-128x128.ico create mode 100644 apprise/assets/themes/default/apprise-success-128x128.ico create mode 100644 apprise/assets/themes/default/apprise-warning-128x128.ico create mode 100644 apprise/plugins/NotifyWindows.py create mode 100644 test/test_windows_plugin.py create mode 100644 win-requirements.txt diff --git a/MANIFEST.in b/MANIFEST.in index 44106112..a7f761aa 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -2,6 +2,7 @@ include LICENSE include README.md include README include requirements.txt +include win-requirements.txt include dev-requirements.txt recursive-include test * global-exclude *.pyc diff --git a/README b/README index d90c6ec1..d7af4cd3 100644 --- a/README +++ b/README @@ -119,6 +119,10 @@ The table below identifies the services this tool supports and some example serv xbmc://user@hostname xbmc://user:password@hostname:port + +* Windows Notifications + windows:// + Email Support ------------- * mailto:// diff --git a/README.md b/README.md index 7384d35e..da42622b 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,8 @@ The table below identifies the services this tool supports and some example serv | [Telegram](https://github.com/caronc/apprise/wiki/Notify_telegram) | tgram:// | (TCP) 443 | tgram://bottoken/ChatID
tgram://bottoken/ChatID1/ChatID2/ChatIDN | [Twitter](https://github.com/caronc/apprise/wiki/Notify_twitter) | tweet:// | (TCP) 443 | tweet://user@CKey/CSecret/AKey/ASecret | [XBMC](https://github.com/caronc/apprise/wiki/Notify_xbmc) | xbmc:// or xbmcs:// | (TCP) 8080 or 443 | xbmc://hostname
xbmc://user@hostname
xbmc://user:password@hostname:port +| [Windows Notification](https://github.com/caronc/apprise/wiki/Notify_windows) | windows:// | n/a | windows:// + ### Email Support | Service ID | Default Port | Example Syntax | diff --git a/apprise/Apprise.py b/apprise/Apprise.py index 42e5e624..188d475c 100644 --- a/apprise/Apprise.py +++ b/apprise/Apprise.py @@ -204,6 +204,8 @@ class Apprise(object): instance = Apprise.instantiate(_server, asset=asset) if not instance: return_status = False + logging.error( + "Failed to load notification url: {}".format(_server)) continue # Add our initialized plugin to our server listings @@ -261,10 +263,15 @@ class Apprise(object): # Toggle our return status flag status = False + except TypeError: + # These our our internally thrown notifications + # TODO: Change this to a custom one such as AppriseNotifyError + status = False + except Exception: # A catch all so we don't have to abort early # just because one of our plugins has a bug in it. - logging.exception("notification exception") + logging.exception("Notification Exception") status = False return status diff --git a/apprise/AppriseAsset.py b/apprise/AppriseAsset.py index 5353357a..5bbba2a9 100644 --- a/apprise/AppriseAsset.py +++ b/apprise/AppriseAsset.py @@ -54,12 +54,16 @@ class AppriseAsset(object): # The default color to return if a mapping isn't found in our table above default_html_color = '#888888' + # The default image extension to use + default_extension = '.png' + # The default theme theme = 'default' # Image URL Mask image_url_mask = \ - 'http://nuxref.com/apprise/themes/{THEME}/apprise-{TYPE}-{XY}.png' + 'http://nuxref.com/apprise/themes/{THEME}/' \ + 'apprise-{TYPE}-{XY}{EXTENSION}' # Application Logo image_url_logo = \ @@ -71,11 +75,11 @@ class AppriseAsset(object): 'assets', 'themes', '{THEME}', - 'apprise-{TYPE}-{XY}.png', + 'apprise-{TYPE}-{XY}{EXTENSION}', )) def __init__(self, theme='default', image_path_mask=None, - image_url_mask=None): + image_url_mask=None, default_extension=None): """ Asset Initialization @@ -89,6 +93,9 @@ class AppriseAsset(object): if image_url_mask is not None: self.image_url_mask = image_url_mask + if default_extension is not None: + self.default_extension = default_extension + def color(self, notify_type, color_type=None): """ Returns an HTML mapped color based on passed in notify type @@ -121,7 +128,7 @@ class AppriseAsset(object): raise ValueError( 'AppriseAsset html_color(): An invalid color_type was specified.') - def image_url(self, notify_type, image_size, logo=False): + def image_url(self, notify_type, image_size, logo=False, extension=None): """ Apply our mask to our image URL @@ -134,10 +141,14 @@ class AppriseAsset(object): # No image to return return None + if extension is None: + extension = self.default_extension + re_map = { '{THEME}': self.theme if self.theme else '', '{TYPE}': notify_type, '{XY}': image_size, + '{EXTENSION}': extension, } # Iterate over above list and store content accordingly @@ -148,7 +159,8 @@ class AppriseAsset(object): return re_table.sub(lambda x: re_map[x.group()], url_mask) - def image_path(self, notify_type, image_size, must_exist=True): + def image_path(self, notify_type, image_size, must_exist=True, + extension=None): """ Apply our mask to our image file path @@ -158,10 +170,14 @@ class AppriseAsset(object): # No image to return return None + if extension is None: + extension = self.default_extension + re_map = { '{THEME}': self.theme if self.theme else '', '{TYPE}': notify_type, '{XY}': image_size, + '{EXTENSION}': extension, } # Iterate over above list and store content accordingly @@ -178,13 +194,17 @@ class AppriseAsset(object): # Return what we parsed return path - def image_raw(self, notify_type, image_size): + def image_raw(self, notify_type, image_size, extension=None): """ Returns the raw image if it can (otherwise the function returns None) """ - path = self.image_path(notify_type=notify_type, image_size=image_size) + path = self.image_path( + notify_type=notify_type, + image_size=image_size, + extension=extension, + ) if path: try: with open(path, 'rb') as fd: diff --git a/apprise/assets/themes/default/apprise-failure-128x128.ico b/apprise/assets/themes/default/apprise-failure-128x128.ico new file mode 100644 index 0000000000000000000000000000000000000000..72e690918e39f2ca18a035264a1e17fe3b5065cc GIT binary patch literal 90022 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 F`#lQlFZ2Ka literal 0 HcmV?d00001 diff --git a/apprise/assets/themes/default/apprise-info-128x128.ico b/apprise/assets/themes/default/apprise-info-128x128.ico new file mode 100644 index 0000000000000000000000000000000000000000..2d72c5b74ac086d8dbe305be72b0091072419a18 GIT binary patch literal 90022 zcmeFa2Y3}nmNtxSz!)2hZJYzPF*#=hLIFh1IY*OC&KN|_AdpZ1Wg#IzLINQWIVY1d z24fq?nce@{|J(Hc8)kQB&-cF7U46Uz-YbN|jAw>^o>KR{>f2pa?>VPVojP?+v0_gZ zD_(5TqGC9|U#x1Wr;4>HR;*Y^i21o?v0{_(-TUtwpLdiiRxGZ=Q^m^R%=^a{FIFsQ z;8Vq_;x~&>@TK~mmrsr-J@BLlp7g-qSPwuV7W)9DDN09_J}4tmrl8C=3$OVd|HpfH zFMq?|J~{q!dY}xd+7@Lg%3hQoQT`9gKcoDADF24?A1MEc@?R+bZ5CehJN}RN@Lv9g zzvVOdEIyOZ<~yDof8HK|R#U7r%1bC6P~uU3K#@OD;k)=wzMFMmU0A0l$FJK1ui)`5 zP^O|BMEM_-KNaTw-orYuF02#l#yUPZe%T(ViN~!*Ig9d-DE_eU`TaW|RFhVn`pTfO zQ)K+?c`|*`0-3vFp@gqlq{^qb=6C!b@8P}t&EvkutQ+gdy0Xqsj-S^9VfguJ6pqP% zM0q48^_zvs){%8(omqFb;mJ|-9(W$N!pc$XCW_zwe){PW^6DG!O3nJs zWJ-9r#BCa{Fg%#pLRbzZu>{%9L2@{mpN%uGb)p)2ab>#3#Q7Z=z$h42Hpnd zM^Zf4YK(d2_m3+2KKt+VwLudGZE1Q)jvpqA)-I5NqbEs)N;Un~+iVlt#x}C8PYzEH zbiw6u6uy+u&Re_Sr;ffA{xui$fgz#KMGg=|EO8?y+>1nt?%^zc-H?f z?5t^mXVM(jN+Ii`iDT`EUIwiw@Y2!g;t)>|1v1E-RMxk>pj)Bx7}B z*}kqZuy3NU&xvX(2ND8(;zewa5nuDn>&GpMKKP7B(1fN1%7=qV!Aj3a*gQ%)_Z#lB zO=er!X11Mu@V9mpM}r5W`~k(Qk4ioFytMApOI9uEDyhpGNcze~vUPPM$y{sTpS|9| zKNtAt$2C*<6C(${X$IcMasD~Q@l2DR3Zn;23wnG=i61IG29K7~&zJRTr`dM)0sDe| z^0#nQM8l!=ybt^#_p`wJIU9ie#sJBS4v_rVW^xGn zz8kv}TSCNLPNs)SQHuL_`m_5T_RpFYe8~nwM+lO=NnsMRX`*!MGt{g7W}mQc*hhbD z2W49<3hnD&Z67yfxNKa|SP~Z1lf=aa_LTbu?>Cf8$bOFdS-?LhvWZac?MNNC$3O&|^b>QfpZf5$@FwX5X-n*jIlo z<3V|}CD&}5qs=wyHIXHshDls_9of9Fo+K=;r{q3)-x&7|-ru%{*f$oA`x^he=w`A9 zyuUZDxfuBSz&wL^nkA!^oaAS9=5=9(_nF0y%y<+%SajfHd>|cAKS)pLFHM5mJNm@d zPwX@H-Cy!i8&8DGUS7%1IiM+9N@L40X;Uj z^#slr_9unNoMj8;`LZuN`pE1v_8t51FY#!HN`HsqXjl2y-jeAvx=YmDIuc`Izj zk!uGg%BihkD4+>d+Ti>+MgNXxKF26dxuI#o_gG=42TcpU^u>dq1L_5Dy;srES7zU_ z580Q0Ne9=-{}IK}o|^TW%CcDj5;>=~!ajDs!TZFY<9;&mPvf{x{Gs<{Lhf7hedv5S zk;K0l#{K59C$0tX50YD_*UE#dTjlJbSV`M7M+&l6$%89f<-6NExc4i%koLw8dZ{V-SeaL?5eZ)RxnSp=$$_57SL+^%XJ z3+#7A2TERSAm;rofPI8qIvy`QItMx4Rq=zjBzo;+x&2w1{P1~>+&i~g&Sm$sVXZMQ z`q`ifH$C{F1s`-^mj!xku;05E4;|f4R!y%h5i@Io_YM4` zfj?#cW|Q}mOub**`jowAO%urerm|ywfWqIvz6E4|3#{|ClRIZ)BzwyeUw!2GuGF(7 zrA^C5a`jXa=pa|Vy0Td=P7<>|6FR`}((Z(AVJ`6i45GJhqpto>oI)Pu`E5Q%g2N_A8yA zb3TnfWIt_vY2un5sUsK>80Q|}Of#CfX;Qb)T{$M$~dxCs@BTFiN@V4W9?)Te2 zKl9AflAE#2pn=PAYCQ1JfTo4Q&IUb@CX~$ZBO^THgo_SrG{CvSqx1qbM}$tWI%=-3 zHnOjOEB+-fqb}#{ea-8^ANP?}Q)|qN3`{&onnXInBzq6d#;iK?- zMIYw55PGm^!9fG<%z1>J4zzAS8-gJN+;pI6K-&sP1N)O(%2fEc_-GURo*4YOjtIQi zQLo@O?PbX%Vqaa>fcMwUsHyZmj{W5Q*m)-YwD&ElFG))pK<{q^{2PP!8-w?o0{>>P z^*4jw-vY8fNOCp?%PwGlIDLS81-aj=Td3om?mGDU%=M*lBfA6t-SQ>IfV0^>fPI(8 zD5M1z$OO`c7fqOBgkL&vjS0#=>7fI=EO6Ti_9chOfKd~DwVN3HIgSB%>A#~`b*fmk zrow*Z|IYc%vOQ(7lzZ_7>z(%ZKkB+fiQ=+)@i+_rb31#=S;_#=0MGimNHk%|2XhQ@ z(1J~0w9$fROrRaoE(<*Jz)k~py-?|d$*rVeU@Ldqi2VqINQd9!e}5Xsk^-L#yjplAQr^rPjPU( zNkFmcP@-fh88xQ8ESp$OR!lbVUkkmT_-~kH%=`45pS-_$VSV7=K;fUVyfI`y@ect0 z%@qFIi9dKhJ2DuuKScJ%cal5jHe)V7$9kvz{YAY_*f?8ZPyDYRnrg${P6OW8XR|a- zP*xc7!dph@vB5nqxaSMb`J!7lEQ&r5y=j`1dd^G#AtrwcU7)kOzq|JBE{i{@s(7EW ze-*}l;%~_Qni7SvpZFVVJ@tUUfqnAQ#)|jT!29XSzpJ@q0{iXY{j3e({m2l^`$FYx z-VFKjdbYgrn$I0w>dR_K%qcABuu2tTx- z=M^@2VCjgQFDQ9nrvuw~06Cy#fn5&R^?`%Q!7>B;72G)BGqL$Kj}mzJzoJ<0e(!^i zBz#;=SvtYQAF_W9@Yk|`18qLk`#-HCvElWw)~9*Dkt8nz?=NpEY2bb0zZJ4Sb6pF_ z{vhc6!3zI9@ttAk+b*MrceUPWe}7S~pN7xP#p8)W?0>w!8@xY7&gb;@6pRDvGtZ7< z&_`kPV2l+$bVxlW*z`ni8nDk1>@?8Q@?Ft1pmYJ-TJpZ+*6=^~8ViXHG5WQRbUfIB z!-O%xvUq$|$o{Ib!W{dx>{m7)^1ib7*8~3bWs{QqjUf9m?k{Ts*&hJe-%Qfi0QmIol~RxsA*G)y<#?~V9)*3LJg$#?|M_mq5p+q zy|a72uCi!c67s4trrHN@E8Sdx}D0sc)5 z{K@-k0)c-E1OE*n82dw|Aho~Ty|_(Uhc>p}X@7rFu0N>orkp>T0POcF`F|;IDDdw4 zh+?M?gGSu)!IwL_RoD~%+b0%a-0xR- zDU>!mGUI%X9xLp+fpJYb@Tn&{=)k0bZF(JnV}W5S@9%4 z{ZdD3JjmgzJ$yu4#rqn6^1jAj*?eZg-VfQIy=kbN+0S*_1e7GXbRtPEpG=l3r&8tG znKZe1HchS^kCEKC?il-nWIM3W0`KqK*i!bT^pOYGcgmMHa^$OLv~9@uHX zm>)ip25jp^QJZGC`-E5#vtQyM9p$1}?`RqnBD2TV_Q-zdeg^)~{h;@+pH)XPB74il zWASoiPqZY(%#+FE`bwKtO{8wEN>aV*2hy-!HR;{0m1L(ahm7AYr}l(H?+?YikNCG# z_~*vJ=O%Zmd~szP?0z}&_03#4is!Y(bDl5#Xni0vd9nQd!9Iom&7-pl#oZrWIOxHP z4)i!d9f8Fc4RrIiFH#OzV}VHn4t+q&0c{`fqYs)iuqUO1^cg40+tZ=JwyC-7w> zAPv}TL_X|8_HiIGZkCjMwzRuHh~3XU7~8;lZq-`#Wd7*NvT$q_S;Vm)_^+5`;Gehx zv|JD=J5rZR)k+nxFV^o~2lc##b3T?k;CrW+ZQq=He#l{TE3iBKi0Kundjv)#uvr=8235f zyRdtpq5;yu#k@j_x^JMmU(tj`Cr;Y1>dQe)>!`B$8H zxSzq#l|On9_FMz|%g3T6Yhycw|D6k4Bx=nxHP+v~v_p;k_b#T&shn|gAi0YiPQzSl z*I4=LI(+=@?tv{oU+D-Fp&LB^{Bx?V;j>0S*WU~L3*^g7F~EJW8v8l^7ro#&q!r2y z(1eE;9!&@Kxq^Gn=+p~oGqkTC*yVts2N*h`IS%-s0nQ1Jn0A4f&66Einf*=-f9jEm zA6n0R_x+D#-l$5lfcSIX2mC4f*UqRfM|Q1{+^wtR&DV>jr{`p>RQQvJ4{RMPnGx{c z-aQw3;TEZ1r;2(f`Fg|3DRTYXR(W`9H~jsg zdzVD7n~pX9E%N&>3)Hwz|Ieah?vFl53xiEMFloW2NBWWl%C=zHlI*g;JvT6Ez|;pU ze>9~JXd2MtfH5beeNf8)w_T`agFp)}6FXw~Q;t{hBZsYT=&&#)`-wm2{YyVF@Xy!? zz4};+)T-fstjDvgdiCqoMsA$TRI>l#(MZ_+u*S2whnnjzTi~U~NV6ujB|dVF8v7pt z<7-Ek$f>Nsa$+0SZ*oV-z0V>sCS(Ke0>$&c|8hU@-!FGgE_7i(6rYF6r9CXe%re|O z8~@|~J;j?IE+{&nOrZYYLl)S^18a@|I4UTCfxnfjof6BafO*zH0au{L1u zYZF6a`M3w;8Cmw8x8A8BGe^~saE$%Lf3d>9s;r(~PtF{Okuk%)#vXS))Mw7)b23(8 z?B1^M&%*paGa^*Z?_Z&K|BcsQ@%cOI`$5g?$*BXIG4}6~udZdt^>)63wMt+xW%LqpYnraiXIo-bYPwXzxQ}NGu=cD1n;`P^{;4@6%D{j;gHiUkKfwvY)!& zw%8Hy$BB`$WuLe1wg1k3P5+Cb13D_~iT{!88H)GwlLspuaO{X4k9@|n@aOz=#&G!p zc7g9d--B^syIk2nRnF%QlFxPx2F4%D<-H%{JmT^3E{r}DEl@VNWP*|hdM@FS2TmI! z<_G3j;FJS)eb7A)_@V*5M&Pjx+Q$L<3>{1fmGISz-2F%_iD^*}?m4pd?vyC;tc)7o zLXG|8e~mwNzq5xn$+QXmq3b{6ey7)G^7h%oi3wa@b#id`Mz8x( z2fyD{t^B@ZBrcXOuI0eSQ-Hlc(QFi z(x3siPGHvuibeyz@b@nR?0P^_;uv|hl!G6M<>Txl8))zQdX1aP)RDDiK6F3o{*?Vo zF!pa;&`LhTxF6c0fnS{L&sn`>g53ISo5FwJmeE-A!F(@mqGUIUGjGi_N(=s2bVU=&7-sBO2HVD|A{#xiuX1Cnb9M#Hn&09^X&Kgx^4~~?k2Fm_1Sj$?9h6}`&%QzeTPG2d1_tgQV1Accq6MF%p6fF?%EBi)0RxxOVwBeBtUUEUv zfqgtMbpmB)veAJ}AJB6{rwnlG0v_9todyh>fX3fj53tLCSxddvg@`G!ebm9&R1Z-U z{-sL4Aj5{XRQQJj|3w)4watG|`YhQ2`|Z1Lzi!cr{+;_=kQ1r!zj=Nu)_#V{menD0 zdhZfBeK1~XRfn4+d`s!x6b0XYE1EX28~5_gP#WELK;zK;F6BWuV!@IS|XJO2B&&6kXX#q#WsA>?7ss4 zpWVM!(pJHzb8|n)f=rn|bAfH24l)tqnOvUE8ac51ir-4m~&*R zIp@8r*>dS*id;XNq3n-8Vz0riV{?r)NBcMczXCfAc-e?;>qP!#fbTJY`wH_@+ROXi z@#u=;BRI+4_YDIA74OsTW5=KCy#>I3d&)9-`>j{~V#xpHXGd7PpRukz@DGu5``3W? z6N+RjwAbgST)+HMSqW@bS4Ir(BFhm&ZhPtq_ynZNH+T11G(kDR{bAqV*)HGS%D{SI zx_omT_uODf!*`rlW~#k}^dtJauMR4E!=;mHYCapWe6oze{3QgsP^FLFm3pvYO~(2M z*RN@ZzH<_5&z1~;@0s!|vD<~{i*AzvHa$S?MKkRI+`~*gz*-;l;V-7w1-cI!<;I2B zKI&jhGV6DJ2e!BHU#RRpnEPSgNBr}*&XK)Y>!k{8{r2DJ>!+W7NnwpnZ?*YlaRP@JO4G|1m)0zcR{e&j_)7)bXFV!D`DVBN`jJANZg1zD45< z{Fej&toX5V{z$R}HmzgbZ~rald)Lln$j$THhIrv>owR%qLmD|ef(1kfB$wN-!ee?2{>ecT@N(YhuyY- zt;qx3xDeaIj<@hn$8V_jvxJ-YE8QRSe&Qd$q6_>gQ{kK0UC8V1-)>wpUDOB;7da=Lzaj%QRFX+b~e{_^@zWGMJ_~HvWbLI@*SNK}=T9;nBFc0Igg05SG=EW|utfnuam#b1XX ziL;vq^ye2|_-T8_?EUdmu7?insMaF67JUnLDLeku2R-%xy9}_60o=lS3v7X{c!2eM`@4RL>!_$GzxX$5)aWO@mpVmoaIn;_ zU0Xi<@I$3vlq~tkc<<_6oOj%Sy@P9!-`~lCJ#v_3AJj6yLj!jF-S!}354wGA*xNtE zxsO!izdm-hyWPat-|+?hVckD=L^EUTx8bjJ{|VgZRYURrTEunPoiZ8zHtCYJWd;2E zDocJ=gp&Q&&ZJAi(iW14a(4eZIh+@xY<2c`{F2v0hYt0N|EN)3b0Mpp{_0SwR4Iv% zk5|w9`s=Ud{Q2`rzle>EmHEgA(Wg%zDNL>`nKxQtZ>&WxGW-Wj`>;3u&N0Ag6V~=X z&ze9{@lQ?ivab+hf5-oee^~uOn?Geg?f%Bx&*SS){8vw{i9O!f*R>!7KE6?M1w4Oj zU!2nUIrir!ek_|8BW_Q^P-XY$Jj?$4U;4UUy?TD}-?;Jd)|Xhf`t|F}x8Hv2_nD*( ze{JBr^6$QcEgHQ4E!L!ILsWi5rft}cznTlU)`y+80FA%hH$dxv<~+dV8>DQ(umf=| zz*R?L?CW?5U;ZPCy8oHtC1eKdeop)=t2N){6RRu!Up=*!!hhY&x{|u48)QJ5T*Z8k zbG}o1*Ff$ED&D_vG)~Q>^|ODi^Ly{TC-?8)_lXyIm%Pd~Xk7}c2ld6Iq$HouqE7Mf z;X|oX#qd+|^_;`-Q&wvc!2kA%`Nq1jS|{}Qjd*ClSRZ!U18q8h%@$;z2Rhb+eBlqj zF!}?Oc-HWXGwVr=iM9KvfG?QyPT~LF2Nh-J$m$;aIrrz9znc4*_)n{a_%5}D_^+RZ zy**1?$=-}1-$tn4`E$>&yz+|d-@o54X2k8QufCG} z{CruvcCDHpHfz>Q*$p^HeCef^M33!t>eMOpIZKx=b@P?=dHCSY^4;h83V-sx$7jIw zA@e&1_|pMAI-n7kit_-?|Fi{iEy%YHxHqM()Na_^s+);%1)SYS4Sex0DC*wob?O2C zYKGlk&;6nMYy7GEubx&LzJHAERZrH>sgHQB4YAj!5%zjDlDLIU75=n?N359glj61L zx)k;N+;h)KOiWCnxas+T{Y+lw++oL#9TE`{ArmG{ki&-$`+d&Ut5>CTX)j-E)o-+U zaSSByvs^te0X_-ZUqJg18ZyAc|9T$qIQYAKg#F;ZFQtuycIaitpBNKs_Yr_EnD{O4)>1F+XG0P}!UW&evu9ILR9pT3Vz*XvQ|>C>nC z#m$cS&$;f{v7@~|t!s`epN#Ge+z%@3?|-(=@IkQQZ}=12d_?SPLN*=1@DbE@0GzjZ z>j2)qfyNxbZU-z#X^s374&9d+6KnU;8ejbXD5^byEn5Qrs*3-uxt}%nuL0W+bU(%a zbrk>G@sAB}0{#d7ixHzeWsH*lw=e9#-mf%?fxrHH@4R94nSS3db*4`K-FM&pYBWF@ zQMRn_Tpq8z`m#K@u?yHA60R{SepVU5@t1N`U!-o7C&KVipups^n8JqK`(0n`Ea zr?!^C3CjJ{gZHO2@jj+$Z z3HJGu|C?d{-wbyDAW2;bTHHDjV?nyyy__xgupWOjKUPA68c3;9MYE@%e)e|wyrv#^ z_Uu`o_;cJIGGvI%m@z}vuU{{jnVE9@_;I;&=Z??&-E_kH{rNdIZB)y`{@a@w@Ga5) zXD zCf4pF2wzz8ze$TA3xD^zubTT$bKyU?K4QGs@W- z?D5J`{+r|*`uOAhzep)4fX|O>Er6ddUAkng1#y1&;)^c|=ZrOL))dYIh_A2T@w*>> z_(9nNeAV&Uk|pHifdu7CK%I|k{q#4q{DkcMukiQqKWSy(&IoB(zZ!JPQo=Rm&5<)z ztb*_FX2GX_gDN6{Nok>HLf$Gdm$N>Gq9R=9p{nKEV6oZcV)lo$G5_j%&jzVHP(pz#0ZdW!Nf zGyF|GKIk5wVUPU3ad@hHe=kqkg*A0NoAU6`?)9eMS|Z|9!XE4se?14({O`R_xFEHS zw0Eun5o2QQK0d-1*8KmYsx{R7U$6Ue-QU>jOZ++atLd5h&*t2(fx-Wr`z?U{C;qVe zCoc8iPyVORH}T&Q*;cYQc98vBhQS9kS?Nvm*}H+Y;$Gdtl#K@Uar8@3KaU%S7=Peb zHWp0DB7^{?t~z-mmbM@-NfAWmor)2mbII1^;so%J-k| zR5;QOz&+>}ZTwFi;U4z6HfdPHdY*3MYp=c}-`vi@Sg=d(oLb_*-|i1&%mFn1-s68k zYCCBf;?P-$F|l?ZTo?W)6jhfpFTMo)vEN6}{kh*~g0b#z%>97Bn)_q?H}SXTe!!n| zKL`Hs`P#BNRJJOg|1cB(c9Ij*L3YJ;l(YN75$7pOzP^=*eSCXlE&Qp9vX4~P*M1HR z3>4~m8bAAa=1hk!q}p1&dUc=o>fcdkus>g4bG|oY@?gdH#GmWC^fSJGa1zG!9l$nQ zXa_vH7kb@|TxAPp{Bf=SahzamijRkQ*=W`KdUgp`x&UL>Q+{~X0kIBXtpjqOxPScj zrM8#yuRG!e5@UZp01o^A^pQ2;^JlL60)Msc2fvS%i0iEQ-^71|!oR*}?r+C`nZf_` z`Sakf`MOpOmY7()InF+6Us^-JpR2 z(8(&b4oF%d{-0moE_G^o@1114QpP)FyxO~z0j3SW=?_{s{`sk1whDjte^j;D?{$57 zp73!)htH=c#vAAUCjZZ>D+c}z6#lXE8!P$GxxeCng+F{hfPcnXlm9ok@$V#gi1U`8 z&=oNs;0KvEUB&yOf95s#4t8kcuwVMb!d`D)Q`gh{Yd`PYxl>+#`DN=F^bfjs@1D)n_dB+ytu%GMg9;yFe|10O%kGjT^T&Aou0z}A@B=dZ(J3S73vmDZI^`dD z=|r;6cnM)44Z#oD^26PoD#nNrGscfUxGP2k=YQLi`?>2ujQt(Q@ek|%;lo;b;m^JP zZYkxW**MYP@812RM6|>Wa{d&)yJzlaxzps6p zK>7QJM-=|_7gqk^;OA@bA^$t9`AmQhguYjwOO`AyYnM$@zF-^&sM~WtG4m8LHeJ+e zhn+_Ko-yllGL{>90QNH*_#67a)Ba=V{`T0B#6K?HD<%Lj_IGT?KdgH9>fcG>PrpyS z=fjBc$GKlE*na9@?r-ov@i*rF#2@27_@8tCBp3df5!mxb{G-|-#*Z=n@7`qKpP$%O z3X*%mX4Oj$ZRstCxAv3!mr~@rd;8@3`vo$%zn3ht>T0hyuj%_|$5LO@HdwW)vDb{Y zB7f_<96v%sea9JpuGF(~JF@^(k#Y z%IBXxzl`;Pv0vejxc;lL_GjTw+rORvvGxe_P<+UUH%T zIq*;Fq3}PL2K+Pn%F)dJi2WOlc@q5dzc?VHh81m}IWg9lyU!X|js@=j>CXuX306PY z`-Imsrwok`dXq|16Z?cqSrI1GbY7+>X8B5BZxHs>W)8R zF1U8tCtkl{o|Ai5xc4Ae?N#xN|Hk~!h$HRcf4lvE*o3L>=MiInM}7Rmy8nf;<#o%YM=T{XDq;l=A!`;uN(CZshfxLH*i+pAnA~ zy5EIe*td>2q}15@n{$6d{uBRTOaCMO*-_yCXcK?T{}lcS zT`>N4Q}|Qelw}dx6HOHXJ;7&?m-R}SgJg>%OM`=e^y|NQh)llKkTZ{Tn27iBI=`u=d;)BX%ze^l`uxqmH7;eYeU zEQLSg0}xxrCU4Wyd!00V7U%=~&$*xne_Nb5*ZME9-;?TdUWqCcdfdc+tvY}FaT^Ez zMtpZe|64b+Hs<~Y|6BM|_apx=ZmRe{d3hl0e+K_k|Ib|45^>&I`^0~*8vlWRN>5|_ zPY3^-_@B%gC})u8^UEvA=+}ebt-V6uYI|MX*K5|S@r$v>+I>E8;)Gw`=RT*u!R5{#tlzck(ox~hSU;TqbM0rfssBgV@#pwY{ zl5@L;%fstwiUv;Zk4Nmcm#n(l>&@%FefvHZ{*?Q}h7I%kyxlw2E4gpj_!pYI@50|^ z_vhY0`v2BJ%u9FO&K!ew$fveCPJ@{+ekJI)` z{-5~iJokHv?V}E^4OqXUADE8ydXZ=zki2WBjN5 zH}PK&{5Q6N{BI|_O#JgP{ww^Gx9g(T@4`MGJ9f;kU(cX^9j*Bu_k|Jz_qfkEBG#G@*8Qo|eSRfN8aJr!RllQq zqYeBq547(ErS3=_fcu7YJM>xYPlcW7#^LF%_<+uJA3gThYS7I63}5R$c)a6y1)r?E zK4p>DWzv{HE7q5h+lP7GYC`|>#y`%&-y{DG{DYkMM-l(F3jaLte}00Ae=_h-=??zy ziSeKO-xqPd`pcRTV=+TP8ZH;Y6AobPq%(#73h z>T|gl%gF7E*=o!u@6(QN$KF2fTlizm@7}pJe)<305hEr!?Eu7I`+m|kc>A+0@?zQN zz3TGi^=*&=JF%bqQ?&=!6CczY|McV$^4gp4*`Gm7iS46~(zwCe1N`*U#bv;duIAbg z<9wR=JuLj|!0)Rb{QeC7SNJb#f*9{j5#t?e|0@EO{-3^v_;dc(O2v822L3rQ9{l%g z?qu-4iT`0c{@XqHpCkUe;ZL(?gj!#rzs2o~JAC?=QirGgwlJR8|Kq+vwA*J{GJmWZ zZ)oHH>dK}^V-Mb^K2N(2ZU1lk@O{1YnKAxlSNL~EtY7kfH^u))xAr#pe|tZ~dBZw*4(0z4 zIlr6!l*83r>*4ie@Z}-df;bfRI`f)#{^iS;KN5f1gt)iI{d<0{QLQ5OEN)l4&pF+d zeTV@8-Oi!&*~Wau|M2&tU&oKo|Kc`y?Z1&~Ro+)?U3}i>XAz6Q7B~9N$#BF%+v=15 z?_JI?@z?yX$A0I!-=VZH89Lr;-cL-6njeVc#J}qPc=S| zVFNq?{7>xw{?z|K1D_Fp$XAZH%64{-u{{pSuz}w59oqW2hbtr`M8=OFul$3L9zE)y z3Hk%+w%X5(6%esvs=}VU&-FSd_BvLSIqsuQ+Sl)k3z4u}?~%X&@4fL{?^E-C;D7xf za?#lEXAHx$hd24$C&d^7beJ{3GX>_=h)y?cc-y$;-(9PW&0?mvP=X|J#WS~ zk{9Q}e?Ra)kkVBSBgXHMjGmDHz2)RK@IU2$_CWCeKp)%*{30(blujsL;4*3#FR3xF6B%f~&M;Rn_{0M{~e zLURNEsRsWux8sJ{wQc<0z`{RaNfYGv3P64@;vWe4-vatyFywy-_`fCWKfph_HSGVu zAN;>Z#dyc~uki0?;GfqW{uX>I9xSPVCv27V=(2l=d_HRoW^O3E_|2DwCjlw@a zz613CPA2|cG5#AdzK?C~3H*D@=^g!){MYz%-PDTVY|4QzFK$#aAbj>nFZ-Fj9gn(Z z-WbvmbqcQ2T|0>V&ER*&@1T8-F)SFvn6aN8ApR)#I57_1s9{}||E9m^5A4&{lKWp= z*x<-N%3Lv=FJ3s7AXO_@u=-p-Yu8rfuD_cD`){VQ{~CL~oO&N+z?kV?`X({_sYieO z&{3CplbRSgzU=rT#}o5=dGKd`H{y@{UW)&H;olPapCSKu$F+t2Py9OqfA|4W{ww@@ zV*CgGi1U4FM<3wd5BfjlKjJK!ad@3HFaq;pQ#5@=Ce?S(|+KI0g0TFu>aGxOW$An?|98P z0=LemD&3Fzf#L7vne%J@&w<~B`?vT^41dn?5BRb5+)h2asr-&Q#~X7zZ3O<&ivOA4 zkNoe!KV?NTdy^DI?s6NJL#3!OIL3iIG^}+bh{A~k_+#GHi;G7V?w~Y7s z!~K0e=TP>xxUb2>n@VgGQ|o$Zo4oAxO1`AT&QaKN?ssN;dlP@B?B}@eiuXy(h~3XUUc>{wK(T0`$ACV@ z{C@`ZKO?_qH1oS+3}9|&1OLVf|J3EcANlbsS4LRQ2Ill5>1IP#ddlTA2{&zI- z?59)w`*^U{hIj& zC_7ka=d)tSgRYoE>KphTF!rDQH@>c^=P~Zz!QGLdMMLJ3_ZchHo^#xY_0<(~zF7Ex zX38sO{2co;>(_z5kZJd$Y%_d4Jh6W{=5x+BZNUO}y@(mH`?<$cc)&Om>-jIg`i9Jz z+R~HXS>^Ywi}Byc?`z0^=J)0JPyT0aZ}7jyA9~!oMJ~1LS`v z=zm=x|GQ!QC;s4n>VR3WlLLSHOsQO6+()PAz)1tNsn7?L@n!w34cXhHudgCr4Y8;E z;COH87O>|TbNYQs_hU>a`seH4@yz*o3&a>*!x-mS+x`A?#2@}*ui|_9b?|xG#&7Vy z5%-&U=&AEJs_z~DoONHlWUSKr$ouDDC(?SK-Ono{Ww^Zco|peHF(Y=r#8Ckcargyv z?b}P%!vBZ)-97o8>q7r0|1-Zg@i+4OYW!7xSMopeJ4Z3cV=IOK?$|Je|32`4K~e|g zc>?~a#J?-#e|HoAUf2g?@V|k-j<2n0z^M~ZUXx!L0~mFGWSKs3pcSv>ON{l#o_)P< z-_SLvpHaW0J-{gNO+_9u&JkGX&!dWoJ7fRSzR&rZZ|v9O_qj5BU*LY;$oq%WTFIn&^WDEERuz5;;BC*CiR(Y2SnrxSwY`adEv*04k+}K5U&((v z{!NYi&a1J%Zf$dCe&=Wt|F|&B0o%a-*UrShBk=EpJWs^Go1Dz-0saU6&;ie33^)&e zIeVOabq!g-d@O2Az#bdDw<2Mqmo3byzi!J%h)2gf613ZpSE-xpvBYy8tn5EuLI3{# zbLJXielY`g3wz*B`wiEJ@10)*U1SvOdyMPkiR(b#r~di?bJcI}3nzLXQt)8-M{-_S{tcc(`&v!jEL2*aWuq39d+*1 zt0(4v#2<0M=GT$U3+hQcWI*B);@=44Kk?`I&m7-~1rQMk`ETMM6(YIOEiL@_0{?vp zZ7uwdZ0Rh=(z`$h=q9JOVZ6-hiCj<2*KW(-P5)Uh8ZhXAviEmi?1Mj@|9L`6{<#*({6n-CUBmt!$`a}!obyw^KfEVWI=1!l$+7y9vS>i>FnM@$hsFD! z<@UFD->&m*+&oK4l`dob*2Lte*!drqR$jml9OFQh8uet^+)#;~R|onZa=kAC{)_8l z{?`cWKaGHY6NSGT|B3(l7LflzkpBk$d9f{le;D$-g8xnY4mj|48T|J#96@2)L+H(YRUasZ49cz89#~Pk#gW)(&AC7~& zHXsIe680*=pBH%nSib*!ms-Q8A6G`=0>nEWBEik;y0P;5JZfks*Z_^aUW^IBd=tKG zJ=v-Kq+#>c?%xv=V)LgsI^rc(tO#67`|dqp1A_h+UPtkNlENSS5B$?sHa7V`0P}wn zf69Q3$omNXSNO*vcHHJLDS-SZ{~tvDio@8udNjS0oY>k0_;-`j+kt-;Y^BhrR6aG( zfReS4uk@k!B@>v3g}NI3?U;X@HlA`XzM%5U-p77p{!i`QgwAKj*m14t3upT4(|)@( zaiNM~{uc5GFlGbunm1`!9s5;lVlGz=Ic+{vH0R5YkNssY^!18aH^qVdwSyCVVt+I( zREB=ywNH##5R*UU5sQ~u>%+K~A)|+y_}4Z0zk#GKYiQ!%1o}VmZ)Wg6@Xv_~l3g(& zkpC?u-@?DO97v)LVBmjbO9#k+PLTh=pZu@z*E*F+2j-Z-an?--)ZxCny&ZhH7kMLh zV~-W`$lpeu5A3y3b2Z@qIp$Vgv}42E^S?eSHqWikI=P~Ab_I$5%mwT-%69Z!Lr#`4--a&D+ZSsu4;C~zb%Ns!cH(|Kk(lWXz+h@uMc zK+6Jy7U)mo92<-=g7k0`elzsRrhS<9JnCv5d7)*8O^3I}7d(S928I5)KR|X=ulj-2 zW_$Y!yXLqP5?EIj&mAtGUrM*I=U7iVJiDW_$@hk?Z=dUJN|+)~!LICjKKq^+{5g+c zy!_u#th&AN_WQDAL03syQcqGq1H?aLRU_#Cjlus-G5>D{{wMw|F#ZQ){0IJVp&0*L zV*GDq;Gf(^j(`S^ZfTD-fDW($a17`S8DP)=*G*_Yx38r*uMN52kPRk=8cRJ-JHOL| zuk}CNYuM_Ywwr4QCMr2X-L6OHVB|aZy-$$+L0+g*={@P)EmYR8m>>so);e&fZI6C} zm*C6n@#pf!J}r5aRH*2+hk$*~zW*&8!%+!`E>QmUw z48%NO9t_AxUo>FI11%FChZYK>6Zij^o246Y8>sxf7~6^VVy@qCy~$Bv=b^1f73g$a zJ7BCg+VVK3_ln)>1N&@X|Lk*K`#{*o?Cam+k%~%L`1AUuS6-K8OL|NC%7(Iabt41+ zh$g^405+gzz&}v(Vp>4{2V?vXG4M}pB?mzRhf~AkXj)tFe>?C7V_tN?`Zr{NDx?G7 zw7~p1^rtck#|YAcy|{6;f41Mp`38$E7Q0RUT*h92TiA=iv77b-%JK(hp>HR3joaAI zaUK3+wBH*sn{>=Jox6p6@6q$Mu1~xEt8cvP=u5M2*~h=tgL-HLilg4IzWI)XFB&FW zAp^FN|A{|jKu%!I(F|-KJ+o-y{FQH-28y3Ze<7JOi;vGsMf@Fwowm>Y3f%=|3djQBh{Mw@4^ zt}RxVP2StFU$)-Mk3;t(`;>kAmvB6TN^U~=ZxmgBb?!f6l%%g~jyXUR*}0*q?Ai$Y zqnpW|Sn&U*7Qi1dixWd2|679pTLJ$th5yM6@=jYL_5u3$j4Hlpz&$?rA15Bk=N9Jr zndaFpgVc3lxNDyGjlH(%({F$DG%w#>_8I$-eaSxkOFNdK!vBThpn=f#-6V2NZ;by< zC71lK@NW+M1K|T0B>NMBfq#gBe`+h}fb@G{{{eq9?xBi-p=iK0CfKpDbOk$prrcJ# zgQgAhI|tsNE&Y4@Gi}$D^F}@nj7<)nXFdJkuK3>LyGQ)FSGPm2!HzyM`;2|ZKKx5Q zdZY6H2gT983Kgr#oW)b10~j(OFQ%F7jcX1aFcA0$0sml(0il=!w3K68!sJ9c^(7Y# zxM;zk2|we54L57dDAISDzR2VD;+FB$PwbepuB2OYkES1azany>RIKW~N6_pu_T68@ zQ4fvy3dKPKPd{BkLLdv0qPof+;GZAcTndPPd<)o;j1I1Dib1 zw4l%AM^y~WJUT;B=);Ax^(^0*`^Mdz&l7i>ey`;{*YMi)7~tNct^0?4#XkFMI?ACj zr%)U=0(_QdikFl{E2l{|)`9kIY7YDZm9Xew)FehJFcUx{p<_&$=}jJJBHV~0lrf-QR=xDq)y`&5)m^) zgM&yU$$zSiNx`a!GcEPZ;I`mMk#lQHmaX(t)9a8ML5j!hSY* zS<7(yeRlcc^V(*&)4a~Qv5sq^=lj}^p)u!~ZDpJPn#XxG@3D?{xVr%5-%#v*WnC99 zQ4)I{=1E+_bjeN~fVJUPzG;EjD0*<8?K=6RuJvzC{ax|7jo!>y>&M`i%eutHPgiwg z9sSkcY#ZCiwmvz$d*E4o)dnRKrLcaK2Jn9zIeDh6h+HJ;DWhN`z#I{B!KZ9cdV?K1 zV5|6-XZ!cQuk~~FneWTu#NjQiEqc(n>GMe!omk)7XhDC+GoQ63Wwd%W-@$kBov!$5{_4p# zuq|xUljHGwfO}Zip!|sPA1MC%+3WlAZ&VQGKAW|4p{&{%F0qi&smY^}Q)Q6sO6w*0 zXVLdv^~MG2H~cN1@i^}^>&UvY&cDR|TRi5;fgYfa+!G}gg)vS1>IwMY z<6`!6?`K_DC)SO1{9D%N(fnWicnfa`L79TG8|5ERelCWO`+L5V?`9oBP*|rY$Dg(b zp2F*%L!q3liSh}`Hk9vC9v9C?-Op$8*?b4z#dq@EtizMzx7h>4sT;~Hlo*spay;pQCq3|_2cGo6lOFi1>H#U*0d2~Dd} z#VUBdz`q?gEaK;|6j zfajyCfbI3F0`AYY>R|hiqdKZWw(6(~xj%nve;+F7{(RE@e^hvp{WB`;{%rp@8}NwF zj^?0&?$3_qp@Httw%+HPDm?15qxtBNU;6X6&h|e0OMgD;eEu`P_0PX_``yp`rSW^z z^BzTCZu)e8cGI`}^P~9Xk^f&*%yxi3Pue~f1OK`|e{26g_}|e1keKezjt;0G;%Fe` zkNdNufeXbc5b)71K$QHmRZz)CTLqQ;bbq#0PziWj1uO9RwhAodXIl@dkDdys*V}qX zz24RX=J;W~pn~yxtHr^_XX^##N8RP-<17)YTElzH2UgJcn-8!)8V|63ZvMb?yV1mj zp8NTQ{iE$akGkZ-L-V`Aj~W@8G+B zD@O@bq#?>ul$$93^+MS)|62ud6gsu9CvzqS%jV_5$O(Zs5ZM2B0RG>~2VD7q!xx-q z^ScA^3*Lu4qP&;CnKLO^x_4#l8o$AMMd? z_4psquf<*r9~b^#-)r=VtuIWv*tHpX+h&AHqXre>tDtgZer?u?b^A4s%6K?!=>Pg+ zxw6tGq_QlUR3CZ4jF>Q6Ry2^z)eR*}Vc$gZq64t+F9Bl7hU0{d?92EvQ%>%!S3ev5vpSQ3nsrLixixZR1 zFgEzS+A1a#iZ|%IXV6C(MHz>fjAU59kB#DO)|SrPQyla)&ccF6+uV{}M+fJY)yT zAFEb*OC}DlClQE^y>V_W#6_-yn22>%ER=M_!pcM(q^$J;h<^c@j~v&l!UrM8hsQ^_ zIOIj`8Wm;bf{*3qam0*Ad@Hs04Ex`?2i_>$i^RhI(EjbD4bw-NG@)gLlBEVMkRLW8 zCP&jIl}QKe1J;>!|2ao_{5T5b4L!Q* zg!nIr|CEQgzu5_+F&5TjUA)Q%72cHGjD?7UI1c+P_1;^Y&3${66-K|f`@-x8&;$9x zEgQ%W8<({K9jHFw*uc884L{|eKOgn2e|h8emt=VF8Y(|##Ecp$E^@4*eagKCp#8>( zfz%W+u$#+H#6CN`bvW`W_K;^wmhfsjo+mGrDT6csxK66 zAfAj#69!+f4?MJ>#1C9;(7<>A5uP4+|*cKGFsVE2M z7Myea$A=%hDia4+SNS2C8&J_c@`5lQR08sVrmR2?(3Q=Q|I>*7z9*rZ#IGMGZ}^Fw z^)%vU4eHxY?p{bitkr3V@rjshJ6RZ~%P8*HTTyH=SmqmpabS_-f<)=BA)23tt*XuV2B%I#UeFhQZoL%y-##b z5ls`SAMCVX8z+=ZaL5BgKj6H<u0;4U{jhBF8%7DeL&V`pno#-u+?F#<^_9hd21bNedV!tUfU00cE14CxH)k#kZ4I zp|x2Djt6WT+vxA8j(=P(UHUoc-J!B999tQ=ajQ%6+TJp4TsIXDmN{T>58_TgCBp}G zl5+&G>WBFnZqH&caW?`7jLmcq8-+E288~<15I>@1#3tB$5bEXtz ze4=t)eE9y`GJ04y$xfLo7YaU=OZ#WZ-LuGrd1#}YIuM6^IPq%C_vBu%=la6+?jh)p z!A75`zA$OR;tS@9psb`!plme8Ni7ekFS+@EI$|#Lk-&gTtT$~-Y@;um8s|>=C7&(% zzg^l?mhjP)WhruFM=$G-xWCRAeb1G87I|`p$l3jCLHi#|%<3`n-aBuoexZ(6vwB4d zpEXQQ<}b$>A1>Dq&qm&g#VWou^PB3T^U&ze>WuuC>>p1*fF4ZVFl2+#2bNq^GEwVG z#@I-CsP!XbJP4NAlR~8Q^Uu?Ul8@qRo*01dzj@=0mu2jL>at)=C0Rc=P{L>QQ#o+( zKMVh$X7!|C=UU)CPI3~*Nk{Ox{r|i!{ah);Wo{~Q>!-9K3fpQwNDpIC{=Hu9 z3Nq{CYKr$`mvod-LpwWiw!ZpGIa$AQs+`JSCi$tOWWlUKmW;#iz51a%?x!4#T!pyL zdsoY?Qz*yhtJq=e59Xa_J`u*UWiCp_nD^wTGIF6aUij7hlc6t7R{g_1@W=zLBj|C_ zHx2AV?A?wX8cDIIp89vQt#%%G4&NmfFHu6;hkhjUMpaV0zjZfVI|`5A6~6wi0T8#0xv#r(14*IYaW<7 zHb|Z=^&IP)h{87O;~iXFe&P9NWoXZ;GT&@}{EDtJd0cNPiMYP_zf^edP3Ug(GUZvMP5yb3ilCR3+r6X;814v_c-iE*)A( z&n_X-9kE9{vM6>uwvmjxpNwEtsxT_)6^IjK?8`P?9q)# z0~`-M^Ca2~qL+oq%P*_>D8~V|Ss#sX@w+!)FDDZQd<5B7N$EWs!$V}l^06u=HuGVQ z8G(E~`_@Zt!Z3+hHL}p0sCb@g|1*$>BS(&uyu3U~NJx;$lP9Zw(Eop&GsoU3pY)Tv z=c3dY>Wc=9`I43cl!ICy2tt0s7E-0Mniu^J?`50y(GM5@TC2vpGHXONCHs~@?^`vk zuIz}PD1Cdh7Up-}mAP8>rcaU_#PI9aGfe3K_?>EJVdsGZ5m)l7ujGdxevk_nE=cw2 z&hbS5mhG!jrHWLmR!z}MnKB;R0q=SD?bl^{>QWVdka~i*9H4$|=tPF?fck)k2lgek zmNu>Hv%a*IvCaCJj*I_pQtu6!I}&=&n98!`ld7^}at%pb*;%$H&6AY41#)cnGTFI# z2-Yly`PK399IyTe2ndkt*RRWuKmI76fBw02?AX!k9{#Rs)vA)6oh@h2o|WCZcgwVC z(?I*>)ViJyuqUzf(I~fras`AA9==sLn)!syGu1b@4r#l zW**cB7o+e07#i@7d^)m{lKo33RF#!eYRI~o^<-Q0Albitj_imXAX{U{NN7+4pY_Lc ze18AohabxEsFOx`(o7GLFor(o*K@ds1q4-knKk-Wkmxv8DQ#zM-X#k6zYu!gvI*7D{+hCO26Dm8X&`Y610{K7YspEQ4_O6$@-gydzWnmbs?Ee- zmv6uQR?)(xOPA!}!Gp4W`*yi}`Lgx@w6rvN>n+8rLV39~e5`zREd^uX1VcBXo(vsX z^MLPhK+g#befTKm#$0E^x*FRbfx@rvmQtlk$;y>0h1j$G-+lL;+`fHV9z1v;><8T^ z`h4@|P3h95i}lP_!HrZd5|zV>`XhB@v;EAMex+a%^n*!q9{r(WSK4HNo*OGY2<=}m ztE0S7rYzeZYqp*3k7oP3x36KeAF^*b+P`{gEzo~m)&7|Ijb+oK07+bi{2pA zu#|ePG~2%hg>9!E7>?8b1T}g~&3kC`VEflhs|8zkUF3mp0Gm%^tn&mQ_cz-gB3swB zg59I79Mm$~SRNbGw z1bXynTl+BvnsyPke^{TI?DzjM+HB1OC*boR8r6ME=8di@9Q#+W{nK6TU))rZmIum~ z)gj1tAEw%$8{0wl#3P^G_EB=>ScEVyVclBF{_N<3*Is)~^7D}=8W=x(_)x}=#~xJ3 z{Mgu73;QESj!50QMn0hu#f!_#$wTDp8{3S0#fKI_=P>r8H^5kszhgQ2WUkyfvr3lE z8>!}K%s(+}%0RhwVyTh?#$3pQ{~^TP?9o~2>$HWi&HCtqi+`$G;J@)x1ONENz~5@Wfxm8lL2?f{wrv=AaE+wLFHm|do@w;~W#GDX>s0&6K$c-B})OVB(lO|2VT+7h41CYP%?BPTef0=WnJExY(@&#j6j&|nynK-7m+&Q}e za&Lm1JFr?pTPVE-ww4;OyR28X1b6%QCbW^D7Rna%PpBK)tPk!5`lkHL&&$Mtm6XkE zrK|mM3mOaCpKNP?Ht2ts!oRZ=BzKoXTl&b!tYLEV)EY_M94^(WIBnpRft3BEfxUb8 z%C23z)HOe6Wo60x@4v75i}|J3EuSi1Urz&#Pf_zio-ZDal(5jo>K^7Ix_B%WGI2cU zV7|;leiqIVUM*ivvQiP78unFd4q%S|>FZh`cad5v{RZu2oAp6^!12<^bvvX-b*uer zf&Yft2L5b+0@n78_6LLh5g)_R{%&Z0Z#kCPPtN9kET5l?l&ICymOO5%lIVZk#ayj(>zG^=H_FJ#Y(fml{ zYn-X(&RaIkK%V8Y%FeiK{z#RhjWW=%hZ$??>lU<@axax-U5=x$&HA7mTnAhE|F#bL zNa?=B-)jFn=syb@S?y0>1NpDo-$r)DbwGa0&d6`x4eTir)3d~v6I`IltepxUx>ay8)ZY=5H9_9Mr+YJV5BzX#gi2kjq#_9MqA z>dm|W83_xNeUN(42OoSOEn2h?&IxDFo-HFrjF8f$ORM%*t^B_1+qpr-o2SgXr0Cvg zJKMPl7rn&Lt|^ryiV}HbdURIy>4RGbi;^^90U=v>kBMs&?|OkuUWQ z?qOTqM;UyP_Du2O|J%N0WhMXDsrJ{l@K0RQ1ZzIcB%S%bBSL_G81Qe4_ICvSY(Mh4 zXEL8RY!kW6+YH?l`PXir-6*4A7uItbyhqiO{ZRroCw^wm#`&{8mWMYoR6ZZl&eg-8 zg68MJ9yDLlVy8gH8}qK0!Nbw(rpx{F>y`e`e%`ohw3I1RTFn(`YoooD@{emmM-gju z+=%9aISy$*4TWv>b@auT|NQ=YugI*C(0#Gq7de}L4$Obv5bJ%+du?xjE3^F_(EiS5 z`?02<)mP5tFxM#U+e5*lvn3~eG3fJ6)mFU2>l}hP<%Q$PDreaZ_y%lPJ`T3@&N6mH z7wL?3miJ%>;_ui`V@GtC+vk(y+JQ-G-gjyLH27I`Q1%Ggi}q(5x{<~{GcrtS)l@nX zX`gNMcf5sv93Up$+Z*&BiS@o1WKDtRe9}C?O=`}b2?*<26hQ!J&!qiF;{~uyK-zD zaw7*=?Z$hAYeqZMSI8F^qZFNxX2>sh&To?QM`GpN;aItJe3RV2lnj24P;(yIzIos2 zyqPj#bT{F844>7rOR!uy&K&O}6!wfUJ$85i=R4$kV$Ze}<)Cfs@9Fn3VTj@9#Qeue zSnp3m-dpB8-X6hRr^s^|gB+)uTf^6@y~=IQytd3~eJN?Okb5R%e#B zlTj9BQ4|qS5M0_Gm3AtfPN!$8CZ6LAdXeLu$oj*rBnKb++0C|g!S z_5rNVo0Z=9{+iFv7WjLnuh(b5QNo&&M5pR%_H8smU|?bijPyTj$rv)z)>=aef`z`D)1EO61tSrLt`CEO`xn zI5~fyj_}XvDkrfg{N(+eN)~qWc&M~tT@oIu_BxdH@m-!a=Htu}iw?Zdc51mh5pRSiWU&!{mF0NJn#l~U}Ow5?qYhxg187b5!QKpW%sXbqE z00{xucA5nfZq~h-9!~mrwxIzAf{tur|&G7ft z0)L-p;OmWk-r5h+zgwj8?MJ_Eo$%>KJw0V|l+9|SwFl1C9J_z_!CtjSAr`<8144dr z+`N9aOuW6uKmNw3hk9otqyAzGSx3ZFZ|IR0qrdM}b3J*?cc*WmqFg_$^Oe5)bEM-t z{L;WR@^a8ORzodh{%l|YfOn$LyB7GnJ5xtLSKvQ<9MZoXeVbixoB^LEkikJx{`uzyIGyzF>j4Pr3X&62I_vr%5QG$ zQEPm?tb;oL>&L^Tq+qhxXmiXry1GBP&VOEBm?Oa!&|imI4U(KxcR32b?=97nm9HoI zd1{A`C;IoIZ=W0R>!jg*(FVwa$9&NH=OI7(c%tWxc29f8wsRMK;I}u{$tPIjeSCMf z()oOPZ?}5qf5V=KV|*86{o4Kper4cGqIj{d*w`q20da4vGwc2`f)z5M&B0%-u)m(0 zJOQ$BjDPTTa&8aKw}+3TD~Cey{`6}?oeO;i(3gqM$AI!TVaSW0@KK}ZnZiZJ11GEN zLkbs0Js0Nf z4dbHU*PhxFEg303Vs4@O``5ZUvabJ#z&WH4^t=88jCy^&$4KcCKY0sdApINgYp)lUy1@&_p zPx^lK_*U|)?^_$-o|}+A{01GZj)EKjlKy(J~VL(&t+E8=xrtdDxeIE>3Q zOv^lUc`;As{f{2sP{a!duDM2n!a>VGhe3BiT#x<<^xvTGLEM{=c+Go!#yE`2G)&7p znAeN0s8Br*Opg+IGqFepj&q)8<*-wR6pZu-R?*Hmpf3@h({`Xn)?bNdTyZUu& z_l=(X)xWR){q?_k{^GRrmoq4P;6USsk@lAN zCVAL=84*1C+oWjs|0404_xKFDf(FLbrD56^3HGnN(yw6H&_UOyc-wuuFx{i4W*vN@ zV=g~W|CbH04FU0*_v*_0U`OcH6Bgk3?TF##*TEZ(fA+ti0<3rNAXB50zFs!p7S46+ zJ+RSR?Mtu1?wq(+5@mrT?SIXl_!?{`+ja-b#--l9tcQh}$w}q~dRAWaN8DM%tC;1-Ztp2=e{y1QRyrpLS zRN1>J3g0_UPVbACb;}Zg4b`w)_Rw7%+zCA<@Hh&m2)P$+d1%k1>cV=QguE2r#jp-+ z51|2$e@4H^M|p#la%@k5ynCih?p%Tn8~V>*LkFk`x+>~} z?m-TG7k1#(UnyQZ<^%Ui^oy$X&5$V$l;Nf8$~J}GVBfSr`<{v-UkML#6XL@nLt%S+ zph&V)q2q#Hf!G+Av7@9gcLwnJi=^``@RIEX@6|=qqTGY>)54hO%&;SI?k9#OmU(kRBr6s2qa%yKi*(f< z*e3ZM6c5lAYu5Y2?#QBxWrO@i*_wU6B*R&@t@4$HnW5NkN5R&#P+}rs=LmeTzHI*b z`ufU|BS$1HEe(7b08Ckb^{w39UB$s+l)@QNx7NHLwrJ2L@jFmv%W;Bjkz>>e=r|_0 zS%1#5L2=`qEx#$APg_`b*}pkS8uu=e@{(B!b7NRGuZi*Q=;)B9rX~pw4_CNu;$MjK zDJdxtE7+!Hr%jjl+e=itq#T&?V)lnl$V(_c;CvC{Z_hRm2b$yQX8qmTT-c-mn^v<1 z`q--Ju*sVvp+R0k%#dLnh_xV=`m@hIlWW(mDeT#;TelS6V&=@5;^yKcrw##Ig!ajP zajOmbwA1iqe+oQ+{Du4Qx8burCUV?&;O!jbojSpF*k4#av0=o8?cV@h*sfS<+?_3} zUQbkd3gWa`kAVXRN^Nbe!ZT)PXDj^cr=NZ*b#-+za-^LUFG-c(Tq~E`=kWb6FwLMB{Vb?_KTi!rL7G8rU3mUR<5=b%ceE6p>G%` zM{4G(@saOO{s&FA=bkJE_3$JDQ<-kL1MftUna{eInzs++o4iyM> z(8LAD#lQFF9Baef;C{W8~^F=w8n(kW=*q3I|7Qc~@7L zY6HYrdwWk3;zqhImO-DGFSpJX$+R#pDayw<*}ejOG8l4Qf9YtQugc$9>fg)t3Cji< z8};vB9Thb4A?*TKetiYY50ci}aJg_WTHZO9Bpoet)OfS2G7D{Nj4WQfSoZAMBUxEl z&}TcqCu|XP{HxShbh;r&{C!+xV+qFOi?2&=MzF+8^Oc*e3*a9%T=Fv~JTx&is%F_B zh9no~!S_oSy21t@I{6A;Wq;gS8-_CnX2?576Qtu5bZr>ZZk<~yvlD|9mXvlBwCByA zA18OORLYyX=E6PC}Q1@$3WWC-!g4R<<)pDxT2ay>)D* z+<0r1WI}K2JIO^-XNJo0y%?J>6-o7m1nBsjrFJvcDlIdmWYMHYR#pSgA+6yYtmYuM zu|vOFx5ypkPg1t`t&l67-yebUW1xFV!W>K8bDF%@vKW{dPlcIWw{njB>y;JYd%kLG zJddR7dq3kM8lqtUBB{Kznc~9laap2qheeAzN+4{LhdwcD#73QJ6k%9IPYSvDa zM(BfEcLk#SFkk?HIe`B6b}My$(0iVnFFVUKl#ZV5n{(e?%ze#!FkTcy%aWXMv^Q_{ z-We$SBJAnj2972@(dB`u>43c`&dRW0gKJMqOOwl3fA!Q?_@I3F8poRR3eG~g(FFN9 z^siiB+-Xaed*}1y{R*Zavn+ z%rB!XPlNKFyySNX8#dJRW?Gzc&zoEP;OiXzjUoTO(FnP&(s{rR#X$GfXSWR9@LO5Z zaXMdawgIP%{(7e^1^p*d7G=8k*p4v2$-F@<YrQ;dz9`I^ z@aXt}X zxH-$h!t~_C*KGcfo$T?$=2d>ZhjBi^8R+LP97Nj!@tXHGuk`C>9PbG>e_$G>1u>5o z39L8I8kuHnJfM8&5VP~n4nscj_O$yV(AV~B60doW&lrbsb!mRdJ0s~+1NTqtJL5qC zpeP;jn)mpOah^FyCu9y7#~_y|hs=U<8_H^oNS#=tSKzym`aMU`r{QlW^61v($Glkv z%VL?*ZKUKB{6LPN=a5sdKK9OzmWd&gZOh}rM>mjoJy3DEp6htn%z7-g04@ z7v>R5*|;42=M?tTSSM4*eiQjzJQ&hm@9#MXb@7->$#X`v*b9|t<@W6Vc!}@EK5&pn8Q97C-b#SGo2sM=Amf^ z#tz6ZHm{D6q=f0x*w`qQn<}Jqd5W~v=gC^^Y06e4NL_gh>L2(Z*muNQo1v!BbK@Pp z+_MhnfdMCb=}@e^cQR8-3Zo?^W`<;>#z@1?`LeY%Q8plLMRA<$EQ^*+%YD9davB_s z?`IP_*}7%(QjZ?u%-VsiyLBpAPSmAHkRNQ5m&fAlksPdFlCkzr#@S!fkbYXvoVYP9 zOv^UFI%LK>e1!E;FR?it%~+S5N`>AuMXsHg3qRaxvVM7-tS+1`Th~tSU76?ok%OHX z%hvY=BWFjmtlZgSK0LJ9zvsPU&`EMm)5#5Po=C)5eDQL4+q9k)xn3W-yIN%-tr5sD z46q+z8Z~peL-U3up52GG1pH5HUGPH^uQwKXb*IESH9OjyMyw#329x literal 0 HcmV?d00001 diff --git a/apprise/assets/themes/default/apprise-success-128x128.ico b/apprise/assets/themes/default/apprise-success-128x128.ico new file mode 100644 index 0000000000000000000000000000000000000000..de8cc6b000f207270b24ccb3a4ccc4576d767950 GIT binary patch literal 90022 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 z zF03BNgQfXzwltJUdwNU1q=-V}!%JcR)4uy_J8a;GI13>}0_tt~HBRJ!|DyA3}kHZcsp{i0Zjr=(8Tm!-|b3epbP zcbHKb*n{p#%0ACbua7MI;llD7_%YIQ36;g09&cicB6>+MxC_rf5r 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 literal 0 HcmV?d00001 diff --git a/apprise/plugins/NotifyBase.py b/apprise/plugins/NotifyBase.py index bcf811a9..9f028499 100644 --- a/apprise/plugins/NotifyBase.py +++ b/apprise/plugins/NotifyBase.py @@ -171,7 +171,7 @@ class NotifyBase(object): return - def image_url(self, notify_type, logo=False): + def image_url(self, notify_type, logo=False, extension=None): """ Returns Image URL if possible """ @@ -186,9 +186,10 @@ class NotifyBase(object): notify_type=notify_type, image_size=self.image_size, logo=logo, + extension=extension, ) - def image_path(self, notify_type): + def image_path(self, notify_type, extension=None): """ Returns the path of the image if it can """ @@ -201,9 +202,10 @@ class NotifyBase(object): return self.asset.image_path( notify_type=notify_type, image_size=self.image_size, + extension=extension, ) - def image_raw(self, notify_type): + def image_raw(self, notify_type, extension=None): """ Returns the raw image if it can """ @@ -216,6 +218,7 @@ class NotifyBase(object): return self.asset.image_raw( notify_type=notify_type, image_size=self.image_size, + extension=extension, ) def color(self, notify_type, color_type=None): diff --git a/apprise/plugins/NotifyWindows.py b/apprise/plugins/NotifyWindows.py new file mode 100644 index 00000000..aa0759de --- /dev/null +++ b/apprise/plugins/NotifyWindows.py @@ -0,0 +1,185 @@ +# -*- coding: utf-8 -*- +# +# Windows Notify Wrapper +# +# Copyright (C) 2017-2018 Chris Caron +# +# This file is part of apprise. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +from __future__ import absolute_import +from __future__ import print_function +from __future__ import unicode_literals + +import re +from time import sleep + +from .NotifyBase import NotifyBase +from ..common import NotifyImageSize + +# Default our global support flag +NOTIFY_WINDOWS_SUPPORT_ENABLED = False + +try: + # 3rd party modules (Windows Only) + import win32api + import win32con + import win32gui + + # We're good to go! + NOTIFY_WINDOWS_SUPPORT_ENABLED = True + +except ImportError: + # No problem; we just simply can't support this plugin because we're + # either using Linux, or simply do not have pypiwin32 installed. + pass + + +class NotifyWindows(NotifyBase): + """ + A wrapper for local Windows Notifications + """ + + # The default protocol + protocol = 'windows' + + # Allows the user to specify the NotifyImageSize object + image_size = NotifyImageSize.XY_128 + + # This entry is a bit hacky, but it allows us to unit-test this library + # in an environment that simply doesn't have the windows packages + # available to us. It also allows us to handle situations where the + # packages actually are present but we need to test that they aren't. + # If anyone is seeing this had knows a better way of testing this + # outside of what is defined in test/test_windows_plugin.py, please + # let me know! :) + _enabled = NOTIFY_WINDOWS_SUPPORT_ENABLED + + def __init__(self, **kwargs): + """ + Initialize Windows Object + """ + + # Number of seconds to display notification for + self.duration = 12 + + # Define our handler + self.hwnd = None + + super(NotifyWindows, self).__init__(**kwargs) + + def _on_destroy(self, hwnd, msg, wparam, lparam): + """ + Destroy callback function + """ + + nid = (self.hwnd, 0) + win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, nid) + win32api.PostQuitMessage(0) + + return None + + def notify(self, title, body, notify_type, **kwargs): + """ + Perform Windows Notification + """ + + if not self._enabled: + self.logger.warning( + "Windows Notifications are not supported by this system.") + return False + + # Limit results to just the first 2 line otherwise + # there is just to much content to display + body = re.split('[\r\n]+', body) + body[0] = body[0].strip('#').strip() + body = '\r\n'.join(body[0:2]) + + try: + # Register destruction callback + message_map = {win32con.WM_DESTROY: self._on_destroy, } + + # Register the window class. + self.wc = win32gui.WNDCLASS() + self.hinst = self.wc.hInstance = win32api.GetModuleHandle(None) + self.wc.lpszClassName = str("PythonTaskbar") + self.wc.lpfnWndProc = message_map + self.classAtom = win32gui.RegisterClass(self.wc) + + # Styling and window type + style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU + self.hwnd = win32gui.CreateWindow( + self.classAtom, "Taskbar", style, 0, 0, + win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, 0, 0, + self.hinst, None) + win32gui.UpdateWindow(self.hwnd) + + # image path + icon_path = self.image_path(notify_type, extension='.ico') + icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE + + try: + hicon = win32gui.LoadImage( + self.hinst, icon_path, win32con.IMAGE_ICON, 0, 0, + icon_flags) + + except Exception as e: + self.logger.warning( + "Could not load windows notification icon ({}): {}" + .format(icon_path, e)) + + # disable icon + hicon = win32gui.LoadIcon(0, win32con.IDI_APPLICATION) + + # Taskbar icon + flags = win32gui.NIF_ICON | win32gui.NIF_MESSAGE | win32gui.NIF_TIP + nid = (self.hwnd, 0, flags, win32con.WM_USER + 20, hicon, + "Tooltip") + win32gui.Shell_NotifyIcon(win32gui.NIM_ADD, nid) + win32gui.Shell_NotifyIcon(win32gui.NIM_MODIFY, ( + self.hwnd, 0, win32gui.NIF_INFO, win32con.WM_USER + 20, hicon, + "Balloon Tooltip", body, 200, title)) + + # take a rest then destroy + sleep(self.duration) + win32gui.DestroyWindow(self.hwnd) + win32gui.UnregisterClass(self.wc.lpszClassName, None) + + self.logger.info('Sent Windows notification.') + + except Exception as e: + self.logger.warning('Failed to send Windows notification.') + self.logger.exception('Windows Exception') + return False + + return True + + @staticmethod + def parse_url(url): + """ + There are no parameters nessisary for this protocol; simply having + windows:// is all you need. This function just makes sure that + is in place. + + """ + + # return a very basic set of requirements + return { + 'schema': NotifyWindows.protocol, + 'user': None, + 'password': None, + 'port': None, + 'host': 'localhost', + 'fullpath': None, + 'path': None, + 'url': url, + 'qsd': {}, + } diff --git a/apprise/plugins/NotifyXBMC.py b/apprise/plugins/NotifyXBMC.py index 8b02fda7..8878b646 100644 --- a/apprise/plugins/NotifyXBMC.py +++ b/apprise/plugins/NotifyXBMC.py @@ -55,6 +55,9 @@ class NotifyXBMC(NotifyBase): """ super(NotifyXBMC, self).__init__(**kwargs) + # Number of micro-seconds to display notification for + self.duration = 12000 + if self.secure: self.schema = 'https' @@ -85,7 +88,7 @@ class NotifyXBMC(NotifyBase): 'title': title, 'message': body, # displaytime is defined in microseconds - 'displaytime': 12000, + 'displaytime': self.duration, }, 'id': 1, } @@ -119,7 +122,7 @@ class NotifyXBMC(NotifyBase): 'title': title, 'message': body, # displaytime is defined in microseconds - 'displaytime': 12000, + 'displaytime': self.duration, }, 'id': 1, } diff --git a/apprise/plugins/__init__.py b/apprise/plugins/__init__.py index d4991a74..02adfc13 100644 --- a/apprise/plugins/__init__.py +++ b/apprise/plugins/__init__.py @@ -43,6 +43,7 @@ from .NotifyToasty import NotifyToasty from .NotifyTwitter.NotifyTwitter import NotifyTwitter from .NotifyXBMC import NotifyXBMC from .NotifyXML import NotifyXML +from .NotifyWindows import NotifyWindows from .NotifyPushjet import pushjet from .NotifyGrowl import gntp @@ -60,7 +61,7 @@ __all__ = [ 'NotifyMatterMost', 'NotifyProwl', 'NotifyPushalot', 'NotifyPushBullet', 'NotifyPushjet', 'NotifyPushover', 'NotifyRocketChat', 'NotifySlack', 'NotifyStride', 'NotifyToasty', 'NotifyTwitter', - 'NotifyTelegram', 'NotifyXBMC', 'NotifyXML', + 'NotifyTelegram', 'NotifyXBMC', 'NotifyXML', 'NotifyWindows', # Reference 'NotifyImageSize', 'NOTIFY_IMAGE_SIZES', 'NotifyType', 'NOTIFY_TYPES', diff --git a/setup.py b/setup.py index f9f5eac0..2650f097 100755 --- a/setup.py +++ b/setup.py @@ -17,6 +17,7 @@ # import os +import platform try: from setuptools import setup @@ -26,6 +27,11 @@ except ImportError: from setuptools import find_packages install_options = os.environ.get("APPRISE_INSTALL", "").split(",") +install_requires = open('requirements.txt').readlines() +if platform.system().lower().startswith('win'): + # Windows Notification Support + install_requires += open('win-requirements.txt').readlines() + libonly_flags = set(["lib-only", "libonly", "no-cli", "without-cli"]) if libonly_flags.intersection(install_options): console_scripts = [] @@ -52,9 +58,10 @@ setup( 'apprise': [ 'assets/NotifyXML-1.0.xsd', 'assets/themes/default/*.png', + 'assets/themes/default/*.ico', ], }, - install_requires=open('requirements.txt').readlines(), + install_requires=install_requires, classifiers=( 'Development Status :: 5 - Production/Stable', 'Intended Audience :: Developers', diff --git a/test/test_api.py b/test/test_api.py index 60802200..4dc2e12f 100644 --- a/test/test_api.py +++ b/test/test_api.py @@ -293,8 +293,8 @@ def test_apprise_asset(tmpdir): a = AppriseAsset( theme='dark', - image_path_mask='/{THEME}/{TYPE}-{XY}.png', - image_url_mask='http://localhost/{THEME}/{TYPE}-{XY}.png', + image_path_mask='/{THEME}/{TYPE}-{XY}{EXTENSION}', + image_url_mask='http://localhost/{THEME}/{TYPE}-{XY}{EXTENSION}', ) a.default_html_color = '#abcabc' @@ -431,3 +431,32 @@ def test_apprise_asset(tmpdir): must_exist=False) is None) assert(a.image_path(NotifyType.INFO, NotifyImageSize.XY_256, must_exist=True) is None) + + # Test our default extension out + a = AppriseAsset( + image_path_mask='/{THEME}/{TYPE}-{XY}{EXTENSION}', + image_url_mask='http://localhost/{THEME}/{TYPE}-{XY}{EXTENSION}', + default_extension='.jpeg', + ) + assert(a.image_path( + NotifyType.INFO, + NotifyImageSize.XY_256, + must_exist=False) == '/default/info-256x256.jpeg') + + assert(a.image_url( + NotifyType.INFO, + NotifyImageSize.XY_256) == 'http://localhost/' + 'default/info-256x256.jpeg') + + # extension support + assert(a.image_path( + NotifyType.INFO, + NotifyImageSize.XY_128, + must_exist=False, + extension='.ico') == '/default/info-128x128.ico') + + assert(a.image_url( + NotifyType.INFO, + NotifyImageSize.XY_256, + extension='.test') == 'http://localhost/' + 'default/info-256x256.test') diff --git a/test/test_windows_plugin.py b/test/test_windows_plugin.py new file mode 100644 index 00000000..a5c09107 --- /dev/null +++ b/test/test_windows_plugin.py @@ -0,0 +1,132 @@ +# -*- coding: utf-8 -*- +# +# NotifyWindows - Unit Tests +# +# Copyright (C) 2018 Chris Caron +# +# This file is part of apprise. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. + +import mock +import sys +import types + +# Rebuild our Apprise environment +import apprise + +try: + # Python v3.4+ + from importlib import reload +except ImportError: + try: + # Python v3.0-v3.3 + from imp import reload + except ImportError: + # Python v2.7 + pass + + +def test_windows_plugin(): + """ + API: NotifyWindows Plugin() + + """ + + # We need to fake our windows environment for testing purposes + win32api_name = 'win32api' + win32api = types.ModuleType(win32api_name) + sys.modules[win32api_name] = win32api + win32api.GetModuleHandle = mock.Mock( + name=win32api_name + '.GetModuleHandle') + win32api.PostQuitMessage = mock.Mock( + name=win32api_name + '.PostQuitMessage') + + win32con_name = 'win32con' + win32con = types.ModuleType(win32con_name) + sys.modules[win32con_name] = win32con + win32con.CW_USEDEFAULT = mock.Mock(name=win32con_name + '.CW_USEDEFAULT') + win32con.IDI_APPLICATION = mock.Mock( + name=win32con_name + '.IDI_APPLICATION') + win32con.IMAGE_ICON = mock.Mock(name=win32con_name + '.IMAGE_ICON') + win32con.LR_DEFAULTSIZE = 1 + win32con.LR_LOADFROMFILE = 2 + win32con.WM_DESTROY = mock.Mock(name=win32con_name + '.WM_DESTROY') + win32con.WM_USER = 0 + win32con.WS_OVERLAPPED = 1 + win32con.WS_SYSMENU = 2 + + win32gui_name = 'win32gui' + win32gui = types.ModuleType(win32gui_name) + sys.modules[win32gui_name] = win32gui + win32gui.CreateWindow = mock.Mock(name=win32gui_name + '.CreateWindow') + win32gui.DestroyWindow = mock.Mock(name=win32gui_name + '.DestroyWindow') + win32gui.LoadIcon = mock.Mock(name=win32gui_name + '.LoadIcon') + win32gui.LoadImage = mock.Mock(name=win32gui_name + '.LoadImage') + win32gui.NIF_ICON = 1 + win32gui.NIF_INFO = mock.Mock(name=win32gui_name + '.NIF_INFO') + win32gui.NIF_MESSAGE = 2 + win32gui.NIF_TIP = 4 + win32gui.NIM_ADD = mock.Mock(name=win32gui_name + '.NIM_ADD') + win32gui.NIM_DELETE = mock.Mock(name=win32gui_name + '.NIM_DELETE') + win32gui.NIM_MODIFY = mock.Mock(name=win32gui_name + '.NIM_MODIFY') + win32gui.RegisterClass = mock.Mock(name=win32gui_name + '.RegisterClass') + win32gui.UnregisterClass = mock.Mock( + name=win32gui_name + '.UnregisterClass') + win32gui.Shell_NotifyIcon = mock.Mock( + name=win32gui_name + '.Shell_NotifyIcon') + win32gui.UpdateWindow = mock.Mock(name=win32gui_name + '.UpdateWindow') + win32gui.WNDCLASS = mock.Mock(name=win32gui_name + '.WNDCLASS') + + # The following allows our mocked content to kick in. In python 3.x keys() + # returns an iterator, therefore we need to convert the keys() back into + # a list object to prevent from getting the error: + # "RuntimeError: dictionary changed size during iteration" + # + for mod in list(sys.modules.keys()): + if mod.startswith('apprise.'): + del(sys.modules[mod]) + reload(apprise) + + # Create our instance + obj = apprise.Apprise.instantiate('windows://', suppress_exceptions=False) + obj.duration = 0 + + # Check that it found our mocked environments + assert(obj._enabled is True) + + # _on_destroy check + obj._on_destroy(0, '', 0, 0) + + # test notifications + assert(obj.notify(title='title', body='body', + notify_type=apprise.NotifyType.INFO) is True) + + # Test our loading of our icon exception; it will still allow the + # notification to be sent + win32gui.LoadImage.side_effect = AttributeError + assert(obj.notify(title='title', body='body', + notify_type=apprise.NotifyType.INFO) is True) + # Undo our change + win32gui.LoadImage.side_effect = None + + # Test our global exception handling + win32gui.UpdateWindow.side_effect = AttributeError + assert(obj.notify(title='title', body='body', + notify_type=apprise.NotifyType.INFO) is False) + # Undo our change + win32gui.UpdateWindow.side_effect = None + + # Toggle our testing for when we can't send notifications because the + # package has been made unavailable to us + obj._enabled = False + assert(obj.notify(title='title', body='body', + notify_type=apprise.NotifyType.INFO) is False) diff --git a/win-requirements.txt b/win-requirements.txt new file mode 100644 index 00000000..c22890b9 --- /dev/null +++ b/win-requirements.txt @@ -0,0 +1 @@ +pypiwin32