From 037649b7a0cf442a7a3f2c9862489604bddd9f8a Mon Sep 17 00:00:00 2001 From: etotheipi Date: Fri, 13 Jan 2012 09:58:31 -0500 Subject: [PATCH] Updated status bar, and a few warning dialogs --- ArmoryQt.py | 27 ++++++++++++++++++ Using_Armory.README | 2 ++ WindowsBuild.txt | 52 ++++++++++++++++++++++++++++++++++ armoryengine.py | 23 +++++++++++++++ img/armory_logo_green_h72.png | Bin 0 -> 94241 bytes qtdialogs.py | 9 ++++++ 6 files changed, 113 insertions(+) create mode 100644 WindowsBuild.txt create mode 100644 img/armory_logo_green_h72.png diff --git a/ArmoryQt.py b/ArmoryQt.py index cfcee1ef5..6bc8da002 100644 --- a/ArmoryQt.py +++ b/ArmoryQt.py @@ -65,6 +65,10 @@ def __init__(self, parent=None, settingsPath=None): self.extraHeartbeatFunctions = [] + self.lblArmoryStatus = QRichLabel('Offline', \ + doWrap=False) + self.statusBar().insertPermanentWidget(0, self.lblArmoryStatus) + # Keep a persistent printer object for paper backups self.printer = QPrinter(QPrinter.HighResolution) self.printer.setPageSize(QPrinter.Letter) @@ -746,9 +750,13 @@ def loadBlockchain(self): self.ledgerSize = len(self.combinedLedger) print 'Ledger entries:', len(self.combinedLedger), 'Max Block:', self.latestBlockNum self.statusBar().showMessage('Blockchain loaded, wallets sync\'d!', 10000) + self.lblArmoryStatus.setText(\ + 'Connected (%s blocks) ' % self.latestBlockNum) + self.blkReceived = self.settings.getSettingOrSetDefault('LastBlkRecvTime', 0) else: self.statusBar().showMessage('! Blockchain loading failed !', 10000) + # This will force the table to refresh with new data self.walletModel.reset() @@ -1479,6 +1487,7 @@ def Heartbeat(self, nextBeatSec=2): # Check for new blocks in the blk0001.dat file if TheBDM.isInitialized(): newBlks = TheBDM.readBlkFileUpdate() + self.topTimestamp = TheBDM.getTopBlockHeader().getTimestamp() if newBlks>0: self.ledgerModel.reset() self.latestBlockNum = TheBDM.getTopBlockHeader().getBlockHeight() @@ -1495,6 +1504,23 @@ def Heartbeat(self, nextBeatSec=2): self.walletListChanged() self.NetworkingFactory.purgeMemoryPool() self.createCombinedLedger() + self.blkReceived = RightNow() + self.settings.set('LastBlkRecvTime', self.blkReceived) + self.lblArmoryStatus.setText(\ + 'Connected (%s blocks) ' % self.latestBlockNum) + + nowtime = RightNow() + blkRecvAgo = nowtime - self.blkReceived + blkStampAgo = nowtime - self.topTimestamp + #if self.usermode==USERMODE.Standard: + #self.lblArmoryStatus.setToolTip( 'Last block was received %s ago' % \ + #secondsToHumanTime(blkRecvAgo)) + #else: + ##self.lblArmoryStatus.setToolTip( \ + #'Last block was received %s ago \n(block timestamp is %s ago)' % \ + #(secondsToHumanTime(blkRecvAgo), secondsToHumanTime(blkStampAgo))) + self.lblArmoryStatus.setToolTip('Last block timestamp is %s ago' % \ + secondsToHumanTime(blkStampAgo)) #for wltID, wlt in self.walletMap.iteritems(): @@ -1503,6 +1529,7 @@ def Heartbeat(self, nextBeatSec=2): self.walletBalances[idx] = self.walletMap[wltID].getBalance() self.walletMap[wltID].checkWalletLockTimeout() + for func in self.extraHeartbeatFunctions: func() diff --git a/Using_Armory.README b/Using_Armory.README index 91b94e241..b0ba64ef0 100755 --- a/Using_Armory.README +++ b/Using_Armory.README @@ -54,6 +54,8 @@ that all features with an X in either column are accessible in SWIG. All OS: https://launchpad.net/qt4reactor Windows Only: qt4reactor relies on pywin32 (for win32event module) http://sourceforge.net/projects/pywin32/files/pywin32/Build216/ + + - pywin32 - py2exe (OPTIONAL - if you want to make a standalone executable in Windows) Windows: http://www.py2exe.org/ diff --git a/WindowsBuild.txt b/WindowsBuild.txt new file mode 100644 index 000000000..12c9207fc --- /dev/null +++ b/WindowsBuild.txt @@ -0,0 +1,52 @@ + +Make sure you have MSVS 2005 or 2008. [b]And if you are on a 64-bit system, make sure you select to install the x64 compilers under C++ options + +(The MSVS 2010 project is desperately out of date. Don't even bother trying it unless you're ready for a battle! However, I will be updating at some point in the future, I just want to make available the 2005 project first. + + +Install Git and TortoiseGit + http://code.google.com/p/msysgit/downloads/detail?name=Git-1.7.8-preview20111206.exe + http://code.google.com/p/tortoisegit/downloads/list + + +Clone the repo: + Right click on the directory where you want the code to go: select "Git clone..." + URL: git://github.com/etotheipi/BitcoinArmory.git + Click OK + + +While that's going, start downloading python-related stuff (there's a lot!) + +-- Download and install Python 2.6 or 2.7: + http://www.python.org/ftp/python/2.7.2/ +-- Download and install Python-Twisted: + http://twistedmatrix.com/trac/wiki/Downloads +-- Download and install zope.interface (for python-twisted): + http://pypi.python.org/pypi/zope.interface/3.8.0#downloads + Unless you know what to with an .egg file, you're going to have + to download the tar.gz, unpack it, and then execute setup.py via: + python setup.py install + +-- Download and UNPACK SWIG. + http://www.swig.org/download.html + + Move the inner-most swig-2.0.4 directory to BtcoinArmory/cppForSwig + (you should now see 3 subdirectories in cppForSwig dir: + cryptopp, reorgTest and swig-2.0.4): + +-- Download and full-install PyQt4: + http://www.riverbankcomputing.co.uk/software/pyqt/download + +-- (OPTIONAL) py2exe AND pywin32 AND MSVCP90.dll + http://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/ + http://sourceforge.net/projects/pywin32/files/pywin32/Build216/ + + MSVS is setup to create a standalone .exe of Armory if it finds + py2exe (otherwise it bails at the last build-step, but you can + still manually run ArmoryQt.py as long as the SWIG dir is in the + right place, and all packages are installed). pywin32 is needed + to + + + +During the last compilation step, you might observe an error about not finding 'python'. For whatever reason, python doesn't add itself to your PATH environment variable. You'll have to add ";C:\Python27\" or ";C:\Python26" to your path depending on which version you're using. Do this through control panel, search for "environment" and then edit the path and append the appropriate string. Reboot diff --git a/armoryengine.py b/armoryengine.py index f1bf2ef33..592f0af94 100644 --- a/armoryengine.py +++ b/armoryengine.py @@ -612,6 +612,29 @@ def unixTimeToFormatStr(unixTime, formatStr='%Y-%b-%d %I:%M%p'): dtstr = dtobj.strftime(formatStr) return dtstr[:-2] + dtstr[-2:].lower() +def secondsToHumanTime(nSec): + strPieces = [] + floatSec = float(nSec) + if floatSec < 0.9*MINUTE: + strPieces = [floatSec, 'second'] + elif floatSec < 0.9*HOUR: + strPieces = [floatSec/MINUTE, 'minute'] + elif floatSec < 0.9*DAY: + strPieces = [floatSec/HOUR, 'hour'] + elif floatSec < 0.9*WEEK: + strPieces = [floatSec/DAY, 'day'] + elif floatSec < 0.9*MONTH: + strPieces = [floatSec/WEEK, 'week'] + else: + strPieces = [floatSec/MONTH, 'month'] + + if strPieces[0]<1.25: + return '1 '+strPieces[1] + elif strPieces[0]<=1.75: + return '1.5 '+strPieces[1]+'s' + else: + return '%d %ss' % (int(strPieces[0]+0.5), strPieces[1]) + ##### HEXSTR/VARINT ##### def packVarInt(n): diff --git a/img/armory_logo_green_h72.png b/img/armory_logo_green_h72.png new file mode 100644 index 0000000000000000000000000000000000000000..1dbf62407bfedda14eb5e0c80ca253af24dcca74 GIT binary patch literal 94241 zcmdU&2cTV5nYQ=2H$5RF^iCi^DAELCZ-66+*x*+{g~0;Y5JVi*QFPStx1x?+868Cw z6chwR5EOrD0YRimFCnya(%U`%`>eCyeZRBrKDQ({=&WR&uf1PcYwxqpZs*+3zy7ta z+F;yPuVo^*f4n6o4 zN1o9rPCfH0pKLt;n6rvSxBZ}KG#aTln@xEsm*m*cqk~3F)LD<8dB=%S!e3GMUI%k*dvBGj$u8y zV|>>#6zc7_Cc?)y7z}b*>%Rb-;J=GMvqc zJb}b^LKlYI$!-jO=Arm7*r<1|q|^&`V~leQV@%Q8=K5@lvT;#o95(dMX&IfHb;#zi z!_(cOE&AI&Sh_C0&JpXfZe1yL<+VAF^_ESYGoN4dImSBcO&tT-HAGwFciL$u!`GVL zbkj`*eYh9J{tEIK7@v9Y`MlPRzb-B@9LF*0aQ}?Dx-ohzL#a0{jC?xN2pT6P214&i ziWnCH)_QhiW24dpZW9&RHm^z(( zqYXaBM|QW~n7W)%w=O(6*0t4*&oOPYoKufA*ITwd(l{@!KT_wk&T<}e=bd-9>YswH zS+k~XU#%<3WAS`MjCFC`b$IOP{hlO-eT|QCqaEKEKgT_rGVf*A6W`Y!U#vUUm5(v4 zi2g*5z{uOlgU@ZAKer@RqM6xVCs ze#Rk3Onc^*WUOf&CdQ5S7~8pwjkvYt2ihM76W28|KG$f!x-lCM279EoS#O);V0W_) zxl>-pG1f9Z!!dT^oPYlLkacPtdB(B1wy5(M>Js&51K*!Le-D9m-rUb}#MIUEZ0I~k z9$(Dq`k{2{jV;#Sb}DUfbTAldzAkCh^_RE~=i;0b;STaRqs_9(k{ z>x{Q-drs@@=-iEu@#=hx`$tjN7xSZ|#d@R8V~jfR{mHq_@na72reOY=8e{O-U88lb z)B0SFxU?|F34ynaV+12RXw(~Tn{mdVr+32Te)zlD*EGhk&J-W)#vt2PN3q9d3_9~r zn&VoZl;I`fP+P9!9m926jz0D?2APHoF4ohs^yZv@*;}nzE9%%dJJ(PGxkmeVe8`UN zv6^CYF8f=K7;t&R9x>5B>g|W!%~)h(r%u)V%VB8ia@2Um6<4%X;F|NX8syrMjj@k) zrnV#J7-Z`r50-{5=CaP%+?JdM`O>v&!61?Ku-O+MoeZu8N~0#%Z63Yt#<+H9+rkK7 zpoWt>*vLm2ecr5dLH0GZfAqr!-rY9)SZ~?Xu`KsT^O$wA{at&EZ$76jpXpy;IM&Ys z^v(%3x16`!^6!1qTkkx`v7X4+#kOuJ)bl$OpZ>6}(PN1en`L6a=d$(2+8*n)pE35a z9+_sleQk%@7EjGuUeEsPvhe!&0|AvyvK&lcH4}D(y-GUKg!9Fy*Q5X znR(FSxTk+NXly4SHPAf9I$W&R_I!+Or_}~U8V8&6xokh{p|m_Hx@e1bcx>*IH=OXP zO`m`Anl0XN!JjvM{RLauj~F!L>S&Cc+wrx%E)F_3`y#`~8tZh%*xwlRH2hBgi;@ z*A(l`Ym7GV_~*JFa*^qm2(g ze_JpywkH7nP@Cg8hGkRYVY3W%i#)nI4Ep}&4!c{#5zDgk zsYPFSH~9RBIogebTJL(G)?x@kvGP;&LXPk?Oq2AbyOADhX0;NHn0^6Pk z&+*{;!#IxpjE7E|H0gPwPs#r!T2hLxiBt5BW8CzG4h7a z-L@#(AL`rx#zkr$C=I-ImZQ$N1P(9JC#b7f(J%553m@Y+ueWE89ju(^BkoWeG3*y> zjIph^4*b3M-kVa{H|7Ory?wAd4mR7ZhemxJHu`|4)#+N6_4|7B%{QmquCp$i#{-S? zkYkN=EaNSk+RyTc5hJWh6g|y$$4ScUr9WE+trbVCc&Zq+@U~i8f6CRXSGSqt*xL-H zfIYTc9`K0K&Yl$HxNyV*Jb~85Waf<_4!Rf@ofgF}OMip9D%TrfqD49v5qq+@OlJMhij=DZyaZCx6S^s zOvkm&&#rln@wF}bna^`Ytn(6U`|Y>4%R1Ac9yNLluFZ8(NYv#xZ0>bMI}X%6;<~%L ztN4y%ALE?g@^I6!bFV2HJNe#qwWZU1OM6Iu?&sI3x?Xnb6`#5D zmK(o_OLA+W65l$=jGqoAuly~%!N!Q1E#tKixgKo`IPdCHs(JCaurj_l+30BKV~etR z$AQKew%gw}v8>X?o}&Rl03bSQS$X`07zJYwc!HP*EZl-IG0x4-qK*y}J6|7`G_ zLc4VuJNDd0?bb!!u}nQ*5gTprJX{{ttJ`W-;%tn~mFO%A}q(t2U733%l+6y!)o@eZY}zsAoyo=)kWP8z21jVxxn; z-ZnQLYb=Agu^x&Xk92Iq$Mcv|Y~W%?H(bqei5Khb6d!!75!t@E54hMI-~PMpwp)60 zGAFL1&W9Me{p3S0_(oB*eiy(w>}!hNe5?~)r;d-Y@WastI)Y^Ut|#WRj(W_SMqK1= zhuSaNBOkF*k6-kSe8k}&n{!6pQ28+nZXA*ei+iW$x?Pv$h(|~BTy#9Gu5)%E+dLu2 z4xD2wn;I93#3nt9U0X}>$4sKyHob&KvGDK3*o}A4k>%>vh>AiFr8R!B^Pc-%ztbMi z-8FZ3wq!4q`J5nozFdoC&x!Ss8e^TY=xsC2F_wo)^V)~%?|NJ-{?<8`WiasW$o$B| zefQnhwohR<*759P*|9Byr@I*sb+g?%V{D%?Ws2GLN@vWNk>b0KSi5V2T5p`Gi!%l} zw?!Q`+Z}VCefDXaFYulp_}J`Yonu*E7s?_x`-w+~6vB17E@&L1gSpO}+HP9AFxtr= zXr2VwMHq)}+5v~`@#6PhxNpS6(_F0ir0ji}*vpn&b4}5`!47@YDyArw&nd=C-Y%YU zm+ydvZsHVo@3{MZznZe^-hCF^zQKlH<7+k^HyPj=zxg;n*4t(p_2y&D6ihGJtcN$& z_VrCYHs^LNrZK-U=<4hd+X)l%#Tdl4Y#!M<$FmG3>N@EYXqaC5J8I15#`V;t_V{ee zW$U4iV`>|+yLEXD=+V)lf6m7^{ne5J_4Be~#fswb#~&}2uI&Br>IYt#Tz6haUQ4ul z45n2uF==7U4GspS*&gM{8?)>5SD)MH8g+Zuh_Sc4=>3=7_o9<8-^ISroX>Ri3*&}6 zq#D{@bYrHua$zxYJP*X?6WC1U%kX+_(%IYXviJAfe4houKL`-V8`E0vIkXLZDqhsh zm~5_+**0T`i^g1oiRqf{m)B+4wt8o%P&yTKC&BjAxi(^4wC!=?+z4zW5u`Lg>?NFNQNP=E$cYO5d za-8w~(S-{arbUsv&D|Sp*B`W_&2_l0PC(b^TA?)S+ZINY1^_Z|Fglv`EvYD`?SJTA z)21K#u=GcdoUobH+R2N?PFl0>dH#DZyZCwUxonbSL|=HzviDgSn`>4TT^rVYZA*jD z(d42h?ku`Tj$t$|#k8epH29UvcWym(&xKn|-RpxkKHD^o-QzW-mN*aa5${?f-uCEg zU5sVlq0$(GxH0!oW99ffcC_cY?z-!)KDqIaW3|6)%qdvojWu;Gb(m;#O#7`XtvhOT z4yfyK4dk=kxg#dGM?d51sAE7oHP_S09`*gjiMUSuym|9FnFiE*%%*lgc8k1q&^mqF zsWbovXBwUJ0AT3T_CMr3S_N;@?x!WbS&W>xm1ep1A0LG~Tx9+MCtda*`=9t5T`+7l z=OEweJHDaSt?2UzPGiK_qA|L1v8#R>Wu^FL@%T;W7JvK6amC`t{;FrfyL;`uoVWM} zD)!5pPkGLLn{L1RfxYJS!*QhJqa8AMuAs3+y?NuI-WJ&Moz6DLi?Jhb`%q}^pXbhF zxjt~l<}vWeYc@8<^G!kPxZarS90%$S-gTHquB*ebp|OUDx8Aye;>4Ik;eBn9d@+~v zS?`#6T~Rj1zEJyHXFOQ*TwCnajOk=YA9KK4?$2i++lY;Zew%l+Oj>x=*ioY%I>|iQG8sh*Zk+6aOsKro^a_X zPastJpBwWeCxz%5vr)~0r?pPk7s=JtJ+fH6Y(eqh6`v{oe%=Yi%EkQTInC=~OR_?_ zrmFO-Hri(QJ0@+p>*kepn3>53em&h~WnMk$aeN*-X|1;|%H~}j7^+IXJ=Xz|$z;|lVuMQvWj$vKQ9c^_yI{R^ozwNf^%U6c36ZKJJymS!r z)r~9KbH7*&WAr%DM?T`}Y{VsZ9wYiSo2MMK|ND!g^(;VZo5p%QXV&$XKgJyne!*{# z?HHzROs)~9Iy?Hdqem36*~x?E4Tx^n>4#`N@cSsQM#%Qa&+ow{x-N^Kg|RPLyz%w1i>9-Hw@>rfj$YvY&a8IBml>=eg!*4gv< za2#Xn>|o-&8H+w|(H42*93NYZX}xj7L0KsMo{I5e?x=@%O;B)kW61S&7-FIKbw*@b zCv41T9(?4HhpUa)XxgAdO*-_){bD^I9vd~+wfMnP|8A9+gT(+2to3x~M*8YrnwW;> zSL;}_Sh##-ao4pM77L!#sZcl1l-InuTMN@zmG-;m9RHiY?(vS_y-?Q`_j9pL9ToPh zT2^$8->MkB(ysO?{?J%B4sB0W3dYzAT1NjbzJ+G78of_Do)E2RMo=!RZ z^}$#NzH}BA^mRu)#zeom9N=PIImUMM!}%?lZMNB_dX|&et`|ykO}UKCI^*n%Ov}gY zSS@SI-rwo8W8`t{A8DT3w!!!syDoIzr33#IU#yY3;`})`I@|iJ8U`6)*-ov&Hg{)X zGGT+#N{qIm73ec!Qc z(LKLb$PvZpE%z@*Z+B49n6Q0XAbavRC3mM6KkTyl&@^BTaLKHji^ab@u9&pP5yb{O zAEwZHfLu3ks;0Rq`O$)(GG^nc@6wy=11sl0e0GIdOQtnP`eS9IN55A5c*SkqHZR9w zJK^I7@_b6YQ2O5@M{JHq&YSQ%Dc}CHFFvZxzeY7m+e)ug$>XbNe=4a;cr@5+p53+{qL6%JFfvur<~Yyd7(@79d19c zjC~MIE{$uRdFC0N6}7gJ^Fz1WZoA^qM;}dL_Sj>O(bDarxH^j}HWa^=>fTEJn~EPT z9b*T}9m>4T5l*{!bD8K$_4(?L3p7)7q2ge_ZHXE&#J7zXnWn!%Gg4T-^w4Jm*avF9 ztf#o+jysZneBt}k&V}ANL`g=C%e1}ulJhL=G)(2T!gnL}L!@S0RZioeG;9!UpI<0m zpYH;9PagPs<5RyrYGcJXRQam~ri|?xjE(Nj#`?$+X|SO2m2)85KI>dNAUA3mzM?Up%3*W|5=Eq8fA(KV8N zq^4=18^7Z#$BvzPh$dIFsk_oWnx~#Me222nc9u$iCu7O1LXQX41nX6$`ZX5|@BVeM z@U9Ds$W5g=`#eUg0*CJjeJnp3=!Y)ON>{?qKa~Fw zbl1T)aa`-mdAmnGAC~=M`;;-B5j|afAL=KL=NaA|EWDm!JWPvm=Zk~@J2d6KP`O`< z*)@_gHtH|)UntwTJQf5NJhS0*f zFdmOOR(+Oq>8qZ3PVJD!;#%9B2c!MbmHPBUBCgE=q8xeb$cpp1R=8Gr$Ay-5hpMAJ zF{XXBDDsHe6Y3m&@FBzzBe`fPPK!;8Tw3TD11;Dq869|Gz@`AbB-PoiI`&lmlKPx+ zzM1PN8Xse~)S2BmAK2vH< z42sqeU7N(_+q77{J@^;hlcz$)YG5Kbd}n#$44=Vk$q& zjE|mH7#JGCZ7|S!Y&7gER;-%#)V$@zhTHwEnD^1|6?ebr5gkA(V0XFTXcK{7JaJWV z%csvNwm#}>T96(u9=`SW#e&BlD7wwvXi+nC!WWCbkxw)Mm%NJs#RK~Tg`rX z43EvYI*N~XcH8rKuG2VE@VTvwm)`U;Q?JTsjFg`5xTQICe93*r9ChF#78}jFa(r*l zU-+AovSz7Mh+^S$D8J(#5Cgk z#T?cK-&?tI<-n_98T_$d9`P^oJ()78hj>t$Wq1-u zzFFxH1w#{`@K86~EGK&EnP2&2+v?b6&4d_X=7Kc`?Xmlx7S4LtpNo}aR;86O!JSZ1 zoxMl8Sv$`u7Ilx-P}UR+XFpOrde@(eB@3R`(H!YNGy1=Dle+zP0kY&B#qP(t_c`N| zuIHRGMv&9g7ngOmZ6@5&yYpAmH`!zp-6a}TjGcMDicQl1tgfX|=|#uALu*g}PS1Qc z8fPePx3&^-($-`PdMnn^UBl>)6=*?y$}jym@Gp&EubA z(5ZPj+E`dFIJGtW^G40igWVWt)QguY>At|z;LDfy{%)0hVr+DD#XqIwMcQK;U)rnv z)_POyG${4z=y6Ahhm~?#89g74W!Zj~v73iRxsG={sAH)H+J-vUKE`^U~G=F>>SYOTk1)sw{sWtD=Aobk)8{-FB7&)ot9!4B00_qv`S*l20eDUlr$TH+E9PI@K-HSJjOoVzAF6byZ!W{hG~zU=Tc>mtR5 zJdnK(BOez;fLEp<;RPS+u`i~mvtE>zJfU>?v4hiIz2lBMZZLD^%r?99ZE=%PcRr*) z4x3tf^T0?>iW-W!PxBl?%YLBwGE|j2%J5a3Qt8RZqW8|N{;(bYc`giY5R2%4< zVkXF!I#SYn2a|r8`sM0Nb6Z(w@|Ar9#rr&g#i#h4Uhvb7SecE7X1v5!EZd;?Qwuv- zUXz2OS4&60c?|T*&v^F)6q}BGQw`n*(YMsiRP5{38FwlU61(D!kv%){L1Vb)RI6ZMk;2HBVgrz7(Gr<;15jG3M+mTZ`kUQKPsj_9jg{JCZlH>yvxy z&|jD@2>VH0X!)f0PsCVkG}WJc$S3|idISBtD9_9E+rYaKlSR%g*tqm?f%GGSF1<0p zIzKjIK+%b3Y_F2cm*Ug->~CBt??4=y?bN}T+>A#iws73WK3@Fq@j*umxU{dycGQ$9 zQ$FzEgAXnl;P0XyK@7!|ODZ+RLy%r!8y}T|Q(`W3A*Wmk6kcR+(+kI4hJ<&GB|OCi zueMtBB7v?Gy;gmJc4H`O1=7M(0BUhez!_>F@=DY+fUmiO5wVzR*!vT;G678x56DrKd zD(9Wi9(mc*IHC?;^fdUiFfzb0Xl0B}IWO!)?g&% zsUOv{*!!mK1veHv_3PJh%dJ;60H=H(SLbMvR-xI6Bol}?2g$x!+P^OT-(~MA^Q2_h z=xl7+M#}a9;r>&-Pb=ee)Z6ZuqO&I*`qSf+Lp8QWF>*wAdR_$mg5SQSEnb`hy&3ON zUEJv?L$uyh(g~K1Dn>;cJo{JP&>JUPm&Q3)@?X{WAs;s8jRsFwvuW! zvPTJb|2ePOPq;Ibi=7~ihrBfWY4TBdsf5$DD4vs)9bUlE?F%gO$bI%$JJo^FO}zMi zR;-#OP{BsG&kYY}Z#Sz;_mlM$sdD4rvB`=zec6(Q#e%s{>iQ$k%+VaTIkzRZUOhMu zDwAJQV*BJxcuh=?o*8N^jz+k=x6nX<_Y}rglja_QON}P^5H~FH8S?n zpW2wq^EK~_M5}$@m;~(SMLuJRVZ7ut7E{^2tp_k`7eyAtt+(E~cI;>X+4NG_clRAYKDrXi=Qc$JhM>s_>{15 zyK$~5%GOcmb=O^YpKRBvht#bN2~Hckc;w-SidDsEhsbIEz*cV0Wsd52hDG7qj|Qlx z?8~$!i5dajslERty5w0<~SuTnaw*MO8D;{{>4j+qWoO|$@a}- zCcHk!R<82A*CCRQYjufTvVEgx%e?fhcieEbuy-3B**Y-?Yjw$dKp=^*1T9HG{PGj2diY`3(m#b8bvK?axfpiE9; zH%E@uV&03`ZqBNoE%?i~bvWI8xyH-nk-g7k^m_Di+C&MuZ0WM*^5rX=dg{FPP_I+1 z(sMLYHO9u_`26|vi^m>&OjYRgV-#mfb*<;mb=o?eHaMqoA65LclaPnzx-3ieC+%bl zY{Ncw?AWEMiR*0DyhOi}=Tzf#<>Aelb_}Q+V;X;;ZY*_Zj)$2YY@kNHq2@NY^jk$m zz_Ft<@Vl`)r|qWLB5y2TS18-RmXsSieXynPM-6r!EqFYI{SE0|M^!_KMW3!=)x~wZ zPE@{}F^waC^k+U@gKV|?=T=*7)n^=?@}SrC*~dkeMhtnK2fbvyr`qQkOy2BQXUnmj zWX&yyK;yB;8sIhlw7_Xj(kXtY7}jea=E$9Ek33Prf}8xYQ)9V*ruTyQv((>C4*Q$3 z4O%W~UhWnDeAUx;0_-qE%79Zr3^ERyB0IE~*6AB#dgDa<)F;!U^TnJQ-}uv}(?2*` z52l~2_3kSrh9rFk9sR|(F#2B7(iN+#H$<#2^3hjEkdMFcg)cl?_IEHgaICizW<+H4f%XO~f?2g?{JV&0dRX!57 z&58YG8l}3ws3V0_>}NXWrQbGNQQ|v?a;I%;`SAluWk85POteMq1qc|<2qdO!MAMb&beeRNS$dr)EMd+s0qu_BBy(8a~AzHm-C}+ zo_Qsg^I6}C>O*3+PW{sn82RvXje+03&fj*nxm%fc#P!!-KZ+;lv9Yk2YQ78QOK|oF z>g9uqGc0|OZzsd|g!f96d>vbLF|YH5zrTdo)RAhxdQ?a4hX`!oH-2 z%(eS!dzLouqv?ZFn5X1FT{ot9e|5|`R6`o9om@m&V^YIAA-vum2N)me=#lk1*Za<$ zdYy4k-}vPlemF!M|Tt3k*jp?-nQ>Eh<;_35ZV36Z309xk;4fGmWg|wevk9 z`Dcjg(O+Wq!9lEJwG)hp;~ewSZ-J?rbRn zD2w&xs3I-|#cD*D+!r`kTK z(pVhZex|awZ3p!3FUj%jkVg=TFlb+MyH496R-U%ZFk`ps}8VS-gt$2swd=6 z^C~;r=`867Je5|As%dfjlZ2D-*Y-%0Dc*CXaIN_@#Sxw^T&hJXj;arwFkwQ!>jJ(* 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 GAO9bs?JfTR literal 0 HcmV?d00001 diff --git a/qtdialogs.py b/qtdialogs.py index ba92786db..3c4598608 100755 --- a/qtdialogs.py +++ b/qtdialogs.py @@ -4708,6 +4708,15 @@ def signTx(self): def broadTx(self): + if not self.main.internetAvail: + QMessageBox.warning(self, 'No Internet!', \ + 'You do not currently have a connection to the Bitcoin network. ' + 'If this does not seem correct, verify your internet connection ' + 'and restart Armory!', QMessageBox.Ok) + return + + + try: finalTx = self.txdpObj.prepareFinalTx() except: