From 28538a0783604dc58fa1f34c9eeca085d21f0d05 Mon Sep 17 00:00:00 2001
From: "littletux89@gmail.com" <littletux89@gmail.com>
Date: Thu, 30 May 2019 00:07:06 +0300
Subject: [PATCH] [*] Changes in the algorithm for obtaining node logs.

---
 KelvinDashboardGUI/DapServiceController.cpp   |  51 ++++++++++--------
 .../DapUiQmlWidgetChainNodeLogs.ui.qml        |  36 +++++++------
 .../Resources/Icons/dialog-error.png          | Bin 0 -> 1936 bytes
 .../Resources/Icons/dialog-information.png    | Bin 0 -> 1033 bytes
 .../Resources/Icons/dialog-question.png       | Bin 0 -> 1336 bytes
 .../Resources/Icons/dialog-warning.png        | Bin 0 -> 1495 bytes
 KelvinDashboardGUI/Resources/Icons/dialog.png | Bin 408 -> 0 bytes
 KelvinDashboardGUI/qml.qrc                    |   5 +-
 .../DapChainDashboardService.cpp              |   4 +-
 .../DapChainDashboardService.h                |   4 +-
 KelvinDashboardService/DapChainLogHandler.cpp |  41 ++++++++++++++
 .../{DapLogReader.h => DapChainLogHandler.h}  |   4 +-
 .../DapChainWalletHandler.cpp                 |   4 +-
 KelvinDashboardService/DapLogReader.cpp       |  38 -------------
 .../KelvinDashboardService.pro                |   8 +--
 KelvinDashboardService/main.cpp               |   2 +-
 libKelvinDashboardCommon/DapLogModel.cpp      |  25 ++++++++-
 17 files changed, 132 insertions(+), 90 deletions(-)
 create mode 100644 KelvinDashboardGUI/Resources/Icons/dialog-error.png
 create mode 100644 KelvinDashboardGUI/Resources/Icons/dialog-information.png
 create mode 100644 KelvinDashboardGUI/Resources/Icons/dialog-question.png
 create mode 100644 KelvinDashboardGUI/Resources/Icons/dialog-warning.png
 delete mode 100644 KelvinDashboardGUI/Resources/Icons/dialog.png
 create mode 100644 KelvinDashboardService/DapChainLogHandler.cpp
 rename KelvinDashboardService/{DapLogReader.h => DapChainLogHandler.h} (78%)
 delete mode 100644 KelvinDashboardService/DapLogReader.cpp

diff --git a/KelvinDashboardGUI/DapServiceController.cpp b/KelvinDashboardGUI/DapServiceController.cpp
index 8543ef039..e1c01a2ed 100644
--- a/KelvinDashboardGUI/DapServiceController.cpp
+++ b/KelvinDashboardGUI/DapServiceController.cpp
@@ -76,28 +76,37 @@ void DapServiceController::getWallets() const
 /// @param aNodeLogs List of node logs.
 void DapServiceController::processGetNodeLogs(const QStringList &aNodeLogs)
 {
-    for(QString s : aNodeLogs)
+    int counter {0};
+    QStringList list;
+    for(int x{0}; x < aNodeLogs.size(); ++x)
     {
-        qDebug() << s;
-        QStringList tempList = s.split(" ");
-        DapLogMessage message;
-        if(tempList.at(1) == "[INF]")
-            message.setType(Type::Info);
-        else if(tempList.at(1) == "[WRN]")
-            message.setType(Type::Warning);
-        else if(tempList.at(1) == "[DBG]")
-            message.setType(Type::Debug);
-        else if(tempList.at(1) == "[ERR]")
-            message.setType(Type::Error);
-        QString str = tempList.at(0);
-        message.setTimeStamp(str.remove("[").remove("]"));
-        QStringList tempList2 = tempList.at(2).split("\t");
-        QString str2 = tempList2.at(0);
-        message.setFile(str2.remove("[").remove("]"));
-        QString str3 = s.split("\t").at(1);
-        int pos = str3.indexOf('\n');
-        message.setMessage(str3.remove(pos, str3.size()-pos));
-        DapLogModel::getInstance().append(message);
+        qDebug() << aNodeLogs[x];
+        if(counter == 4)
+        {
+            DapLogMessage message;
+            message.setTimeStamp(list.at(0));
+            if(list.at(1) == "INF")
+                message.setType(Type::Info);
+            else if(list.at(1) == "WRN")
+                message.setType(Type::Warning);
+            else if(list.at(1) == "DBG")
+                message.setType(Type::Debug);
+            else if(list.at(1) == "ERR")
+                message.setType(Type::Error);
+            else if(list.at(1) == " * ")
+                message.setType(Type::Error);
+            message.setFile(list.at(2));
+            message.setMessage(list.at(3));
+            DapLogModel::getInstance().append(message);
+            list.clear();
+            counter = 0;
+            --x;
+        }
+        else
+        {
+            list.append(aNodeLogs[x]);
+            ++counter;
+        }
     }
 }
 
diff --git a/KelvinDashboardGUI/DapUiQmlWidgetChainNodeLogs.ui.qml b/KelvinDashboardGUI/DapUiQmlWidgetChainNodeLogs.ui.qml
index ae9cd76bc..c1719d28d 100644
--- a/KelvinDashboardGUI/DapUiQmlWidgetChainNodeLogs.ui.qml
+++ b/KelvinDashboardGUI/DapUiQmlWidgetChainNodeLogs.ui.qml
@@ -16,15 +16,15 @@ Page {
             name: "Node 1"
         }
 
-        ListElement
-        {
-            name: "Node 2"
-        }
+//        ListElement
+//        {
+//            name: "Node 2"
+//        }
 
-        ListElement
-        {
-            name: "Node 3"
-        }
+//        ListElement
+//        {
+//            name: "Node 3"
+//        }
     }
 
         TabView
@@ -55,18 +55,22 @@ Page {
                 
                         TableViewColumn {
                             id: columnType
-//                            role: "type"
+                            role: "type"
                             title: "Type"
                             
                              delegate:
                                  Item{
-                                         Image {
-                                             id: names
-                                             anchors.centerIn: parent
-                                             source: "qrc:/Resources/Icons/dialog.png"
-                                             width: 14
-                                             height: 14
-                                         }
+                                 Text {
+                                     anchors.centerIn: parent
+                                     renderType: Text.NativeRendering
+                                     text: styleData.value
+                                 }
+//                                     Image {
+//                                         anchors.centerIn: parent
+//                                         source: styleData.value
+//                                         width: 14
+//                                         height: 14
+//                                     }
                              }
                         }
                         TableViewColumn {
diff --git a/KelvinDashboardGUI/Resources/Icons/dialog-error.png b/KelvinDashboardGUI/Resources/Icons/dialog-error.png
new file mode 100644
index 0000000000000000000000000000000000000000..eebba2729b5dce38ccf44e7ff6c8e2fedfbf1ae0
GIT binary patch
literal 1936
zcmV;B2XFX^P)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF00006VoOIv0RI60
z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy000McNliru;{_cQB^EKCt)u_|2OUX7
zK~#9!?V4+BTjd$Yf3JP)I=;tA96Rm0Atnu}nx=i)$B7TDlMoWS&>^6RX^d7NK)?!W
zS*x*<t$;el&?Z)?hz^z8rd2}h^Z0}`Y0|V0NKkUcsgpF>$i<F*j(yIv59b`)xz=`^
z#991UuPmQi-v9gmKezV;I@Ym{b*y81*VK9^h7R2-|4%@_`tje_#Hy`#gNW=21$g$l
z3#_XE_J{)3cL6#su*Vh934+a;@8AIG^JmZ!-7R~jHy$PZ(rNrR9o)VJ5Rs-v&m#{I
zIP^98fAtKWSfuIaxWf~RkUDpYz}Igfar{2aCZDry3b;P_JB*=m{09aYIQJ}CBHldn
zu?XqGllTt|P#VoJ{Oea)#KPJZ7Z7P`m~#tEo*YCU9z{zhNu7NfZ#>%YbG*?osk0~W
z9Y|q}W%%To=P|yR10XLJ77fm=VHeoMr#!zv_SqNEN5;@neWZT*Gd$hVy6;!fF#XRx
zg>QcveLTY_rv@?R=fD9iz>-*)s{T1Op@7W|YkrZ*(=TC+jN|L?BYoycys_8~@AE{$
zq|ZEoe;|c1KEc(~FHo9WKnW-dlqi(LXi>ndcdpy10QX}qERuchJo@N3T7NI8(~skc
zM>b$SMC#{{;Tz~j|NI)C{^CVSbMp@K?#wJuQkkKSU~Y*5T4dHjj>)sHV2ow(C3{Jq
zdd!XqD<={OlRo(<{&Wf>ljZ8!^OWZo?Uq#(3Q!12xh<@F3`+L0v_~3TYnTg*WCvft
z7|o#d_0a$HBY2|G%6SzIl0NY;zEl!DljYOrU#2v-V5cw34ainC21qqXyU!>g8>Yx6
z6d)}f)?$wAi?7;B=u40~aSU%Pf+rFr{nT-^bRWjVHLjlfE#-v;Ky1H9P*^A>mCXzL
zm^jx6%5e!dC^ixV*4+^K_~vhINiFP+gh@U5Q+xv{O4%v9dK^e$WTzPV%>_!i+;Z7F
zz*R-~)k!M>rD~b91EgmSV26hPp|(8;u9+ei7nwZ&NA%CHp(T6KlD!xclYI8_1&rKc
zReU&MzrtRXO>t`ghj~@G#lBut{XtOM&;z#01Sp&K04&o4WwVY@WnOIN)e5<~Dsa!+
zYH*aI08w^q*;EkRqK_vWB>C|D_>w*76IluqS^PcS-1N{<yrJNl%u9uNR{6E92IqR^
zT<I!dCkvsqhBp|Z|Dk*F_a-Q1rx^OfC5C_h2E~aif!+i+A3usO8nT%c<tp6yw*6Z<
zzbk67T&398;QVfjLTDNDp)QgS{s>=h0%LNT&tAKPk;_re=NWnJO<M_xIA8h6J!p~e
z8q8ZwF~5mIsCCqPLtP|)e53+?=)#*AxxAguL?|!i8M}Cy!nH~K-7&uWz!9`a$VqkB
zY0yc1%9)!I=a_Q9IlmjNg}2-Vyj?+(_uqxTCqZdyhT)5EW8{`9wY?j_%v^!Y>+e#`
zPUG*6bMWY0XyNeYWWUoc;0Xpu-uFFxi8%W748w1{jh@d}D>@}LMXara%%yiJW~cDQ
zqa3*R`)J`{)3V>uAn5JtqW|tY@g?FI(=&|z={@vZp~7Y*bveP#9cI2j=JH=LCa3Yo
zBJ98WPJE$Im3bOuekT;*=?aiMatB%>hH-tC;kW)mF~79VtZEA!8<&~SlX>e3`qXuN
zu?XoSci;^LYP!JsncsE=c)J25e|S4uchm;|&J~PYv0Av)q_*0DI0cQvs<l)g`_B95
zQ!{AMFzFxMjus3y&U~{9Xm$m9zI!Xac$CugEF<r|kC87pRb5R3vtqb~eI>Fx(cUZ+
znELYvl%{9#MI-cn=i7Be`xa$^X666i4?m(XKEcqH56}w*n_iJ+d409)Yl7Q~fM*t$
zn7r~gisKXf=fjVho>{});J?1~ji$Q+3t>rtrBpRt)z<LtA66^scvjT*HJcyQS=+B?
z-^~2G!Pn!P=!O)~CBjmrdtW_yvAdSa{vNg0N_Eu)<;Z?(`m-(T20bW(0!1fZuVP+q
zz`V4E`5k>btblz2x^nrmH7#wx{I=}}cz}H(7)sg1w+Zt%TmVxV+h<kEmi>B*;1{91
zDj3=u7l?%{18;2$_zf2zQ_MA_fuKh-`}_fIBX`gQOr>z6f+-fW`jV8yVyCQS3;oZ5
zL-zoe>)8!6mBJEXRxgzIX>$DV^ytO5`v-~Uw)*N6jU~()#T^IV@&%{|zXe=3isdd3
z$8MV*eVrY)mMwsZS+jq;5qRAOKQpr9;9IKzlWL>C5qPg^8}Qrma<rYnw>}82@e<Mk
zW=ckRpVvBe+st@df!}fk)Pg_UhTvPQ022|l4E$`l)Yjm)OaZ$Ee2ded-P76N%jLi>
z0N?U7XenW~Tq*}Nb_MvBE<hOxezD8Iw{!vKt@3`aM?H9WX6zCj>sZG+*0GN53i}_%
W=T@;q2>m($0000<MNUMnLSTYT)4sj{

literal 0
HcmV?d00001

diff --git a/KelvinDashboardGUI/Resources/Icons/dialog-information.png b/KelvinDashboardGUI/Resources/Icons/dialog-information.png
new file mode 100644
index 0000000000000000000000000000000000000000..42e42c6144ff2ee5ee48c9a102a5e27ed85e67c6
GIT binary patch
literal 1033
zcmV+k1or!hP)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF00006VoOIv0RI60
z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy000McNliru;{_cQC<pF=^BVvF1C~id
zK~#9!?V3$)(@+$J&rM>-NlFV$K!QP*(G4(R#JFRmE`c2&Bt(~h!~m9nkWeLdQYKYG
zTY}oOcH-FgGI);d*iPGk9oxyfQl!*z?R@8*`}3>-I&|pJp<{c4mVMCw?#d>C{(NC(
zvbL7~hir!fv;fNmknI*gSf_v%KnqY%eBEEX?aSkHp!aBd1mNVg?J*z(^d4470G9O$
zAb{9okO1iJZN3A1PIg=ZKoI8|0D(HY6=;J63h?Uq0<bRuA_x?`8p;Xe+<*mZ6QP_g
z(Af)C{7U8i99{?@0;UcG1hO8KSpy2bb9-08+gA!caDsr;amR)*fvla)9fhgA0}%mD
zu2mtVx${`1#ncYO>TOmEeAzc*e?7**w;KpiOo1R3K#=J~xx?&k?i>)>9uk6wF9}2t
z0?f{4)BryzF2~>{T77U-AZ0pLA{f>NPJ(hf{QS7gT%}WvB9t-*WTrs;l>x8b1DLrG
zA&}9oZx_g%vV+>EoF@@5B^*fr`L6n?W!5wWQWl^n1%S*#7{Y@fOn}VPu+%i_R|L~F
zAOk*b{c!OE_<4HFJe4lZR^5wW3@R({0T5BJX-X7E_SKxwXx3;qm{|iT-3hYbQ|Azb
zS&2Z6Iy)el_xFQW#{e*^_e43h!8JY*2^&t>3Dg@R3eJ@@SnOOS5&+`Z7+vWuklGe4
zt|qD7VJJ*$#iMhHvX9p@1?KQV(d`R_FHr!=aKQTEt1}010zRuH764zG1K#`?1HKy#
zIZ5~wTru#a?FFdSR^Qok1NeY}BpQkYi@#n7s{O*Af&Tw{ma-cJ05scbmiK31p%{Ed
zuaD0IIjwxDDG)lLVJe~h*`4qx0KT*$xF7<V>Uki0Ylpu*1w3AHHStfgxQGDK1RxOh
zV|gD;cu3TOoUOT3fbq%6N_T4Q^!)CVrz`DCg&8-er^2p_vV!uu(DS3~0}=VW3cNiW
zct+bgJb&B&Se5{-+^*!Ww(|C`foE9d!sjc%J=0T|VV_k4K34(QzdNCX8P3_jGdk6P
zU#kOz8P0k6IbUE6@RvS_5N0^PhYJ2(b>P?HfDqoQ9(>^f2s50~&@+r`!sp)xDFOc{
zfPY_2_`)0z!kg8G&sPAR|G0zUTn@cP4d4Nwk?YmihjTgb8cpkPR0H^29pF#g?$o*P
z8qLn(=%^m>xe73yTs=d}dOiBk{{$U6bm-8bqZaWOGYtp1pLZ`U00000NkvXXu0mjf
DSH98<

literal 0
HcmV?d00001

diff --git a/KelvinDashboardGUI/Resources/Icons/dialog-question.png b/KelvinDashboardGUI/Resources/Icons/dialog-question.png
new file mode 100644
index 0000000000000000000000000000000000000000..441fd9363c24a4cd4bebd27fcb8e932fabce9869
GIT binary patch
literal 1336
zcmV-81;_e{P)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF00006VoOIv0RI60
z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy000McNliru;{_cQCL3e}g4zH81jR{2
zK~#9!?U`S16lD~~e`jZQce<b{trZp;pp}S!AW@?vLSjPVh2b0MwMzUN`U$)=CMI4O
z?~GT*7!1*1Bq2xwC?pWEMJUh$TEljCcHZ}RG1KYHwq015?e28<T<zq2XLp|GJm)-T
z-i2WdV;I92#^8pmxA6J9-|1!o`oY)7*2L<rdxs8&0^9+|-$nrgLcze7Kw;2bVErDT
z1K$I(k1b;!dtTel_@1Zmo-PAWUu>{2v&ih(J3P2w-=qWxOds08z9YL3N!xK{)MNLk
z$K=5YuKse9YiH&*wEwheg4sRA)S)WRy}1jupl#6YJG>J=sB`1&z0ETRR7O3f-l$^D
zqkZH4!+V*#au>5Go5Kbt4^DuBMg;ivCg*;<%<aDx5P|Je6TEVCKP9gi-?RI`v;6V%
zEF;cH{(Hc-om*4cKX>9X*Dv2hL{Nn5zt4e%*WY<L-ZMVAjUc#6T@}x*<ePv}#l;#M
zU*Dcth{2132+YsiOYQM0B|vFf9|?rAJJN$5kWmx-;j_~$1+~Zx6d?j1)tRbbjEzeK
zK&_%EqJnRIG=Q?><x>I65?(S765zv6AczP%rk}yu6#^doTMsFcaA#ne2tvsz=kr~_
zb1DczEvT&mzx#zMFCE#J>JtmI_ri4*qOAm`2}<T9Y}h1Nc1BR35!3*|aUBl6^*q(-
zv`bi{%v`(`Dj)*CTrfrhd@Ga+rF@<Tl${Y!XlR31kG{zG<hJyDpm6cj6>9%AQs5P$
z2~sdNz*i_brTmmYD+$%<3C60Usm5ml!==;LxP9&J3V01OFCy`00E?j+_?eK<lLL|M
zd&g3?x3sv#`BPV^{j<~}dkw)SUn`;utCqm}xP@Z=4n(}I<&^Y)J8=nrDQJ^<SplyC
zDu^i7T8tW;f|HLP5TC+`q~za7f^VsLO@LQcz%SdWQ3DDEak4If?!~X)oTm}gW00-g
zULyZbWj+BOB(>M70+xal@=*dsDT4#P@jI418i8LXEV@=zRCLvOL*JeW77OKYsCk^s
z$M+<a5S}$?hneg8yFl9?mm(CPX?&ulA3eT?fTBrI#G)Gcf@sPTHL+J9I|8~H2i~4e
zU7z{>LPwcjYj0W^ecl7K<#gzgYhKp?-?E+y7g&8fw(*(o=^W5XfF=NGi_dGK;kC{L
z$@Ry5-ky}eg`ciqY!J`25|x3rlYL_Elghs5?*hd_5di`XVl&gI+s9%ST`@U{oB>v?
zKk0M!?9WkGiiiqEgNJ8cNr2BL^F8eW@f22YQ45A(?V3->KC7DV3l~U+Q*c2AYfZY_
zCu=@~Zr?Eh)|!sKC>&!upR6@3=P=7Qoa0n9mVGMoDw!*DT>@rne|Gd+Tb!+C!mD<q
zD65uR^}p4(jh-nmGd+EJ?A!NH{pyjyW4Tkm5x9<b{F4(Oe$guedh#~dFW`GZKtF-c
z)&<PN3(8`-)94@YncJYYUF$#a853Z_*VuKz-wa&oFYp`E15)5m_80iB6VUJAGc5rV
zO>{}{^L~GW@0tSg0=_FYs95Hk`2gPq8#K%}=K@!Xxd5Lj0f96s_nQk5_>Xb{K2rh~
uoA-AWDZl^m$>U!#jA0C87{eGwF5-VXl~@#`8?fpC0000<MNUMnLSTYm7Id-z

literal 0
HcmV?d00001

diff --git a/KelvinDashboardGUI/Resources/Icons/dialog-warning.png b/KelvinDashboardGUI/Resources/Icons/dialog-warning.png
new file mode 100644
index 0000000000000000000000000000000000000000..4149e3d1e04397814fbf114062339b9110f535f9
GIT binary patch
literal 1495
zcmV;|1t|K7P)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF00006VoOIv0RI60
z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy000McNliru;{_cQCI$xu?gIb-1!PG?
zK~#9!?V8VTR8<tmKj+QwX-g@E0xcF07ZL&*L_qPkalwMHXCWICSg>?!;*y>I1Dd$d
zy>VlVU`Qj13PNN_69ihO%=G89^Xt8LkBc|I+G(dWeKUQvbCR3P+<WKU_x+x8zW3Ka
z$2!)rj&*G7nyl2IBNz041@!Ijmc<%g@fWIFA_7(>fDQp$oPe#K0@{gyjs~=Ra7_*}
zUvTL$6B|Z=)trD9m;U2Kcb{Zt!EVEN0ZReh_7bQ;RB@7rn4KS`w=1+oB0wzYe+|j}
zK`3*J?FUYgEx_!8vo#_>cN|3uX~?Ar0i|4;p24HckKF;)wnjqxBfyG6-%&{aS*;6C
z{Z9ALaYErZxuU~d&Td--SZz<bT_=$2DA+T#m$0*#*-^TOUk4F#MJ1beH#h=R{V$Oo
zwD)Dm+y+(j@D=p%6;LHI^%seOBShl8poU!DVLs>hH+CRWVBk$;>Ml47fFdG@h}Y)k
zkjcAr51&B*5y+QZ77EVBq=2gWTjB$d+=piFRO`Iqt?GA~yhF721tQz_R$n?-G%OU{
zb&tRC5wQ0iNZ$lgCvYNOseD%(p8ZD8f%m;?6v0p^Ipj-jyG77H@X~V#33sE@_m{Lu
zxzzQY{fAIAL9Fi(f~j&;EV=6>VWZXoA~5(aj9mw_MA^k^97`2R-Jt8>N7yr?9tmZd
zY};Eo#-rBeSqI3DS5Z5UW=EH4Z;Sv?$UZ>aEQvj@Afi=K1jTj@McZvd3ivYhgkkqv
zF#hxM?UndmrcK7Lkr;jtOCkv6I=o`rO38MEKMl(6H_-XVkQ-m2k5w+qwB?_o^N)z{
zJ5!!Az2a%7!Ep_?V*)IK;Uo;4f~VJ;Y>Jl50!s-@T_ZYp8Y|je?IvQXY2g}=h+vA~
z-Vf2qyHK25d5GJeHGf878m8_MAO3*CgYRp4pi=#8jN&4MED4YZ#`=-IBaphW{zyvw
zLU`9PLR~xS1hJM96%vdZzgL3m(7t_V(bNcP=bHAD6IYQFSDQc2&O>U1=>D^f7g;LR
zKsClIYt%shBS5-`k**<h;@9Up7!hmLemXHisC$U;wgZbiUoVa#LD7I0&Y@3!EH8PR
zo4NJr^F7mbVC*L%FP^7#?@L50;A<<1iY~16EZ5fvkp5#3j-iu(`@WaZ%xy$Mgm)fW
z;(4mN;BN%1l}ZUA!{;Er3pxEo%MLI?2hU@s?<4AX+v##7Z2ZNDI%IEtPBvfLz<Az~
z@|K{Y;8NFC*)B-kJg>DrRGuSsee3E}Ys-irT#R(Zy#tQ<f~kAyifC1U>oVYV33y!s
zUK_!$)AKD8!DLiGy>q>q=gTi#Cs<WLD3~Svv=%+0b>OMht=ID{y&6l#Ja6ZU?jmp1
zQbHH4f;YnREx#K~L_x$NUo@+Lr<NLR2H%tb*R|I+31A`C;#oBo1~pK0)LXUH0Z=WU
z1gN6wHV7m%ilE=%n-Vbf`2LzgAlkLv-L`Xo!}H=%&($SI8^Ec$WYeQ+O2x%(i$s!^
zfrlpl5?iY|Kb*Xv@a;<NCC4M79{hafp%dv&T;B8X_*WZsJsxh?K+&+rwe4tNz_)+^
zU4;bC^V6wdfcKdI7qods8Fk4|K6GNq#N~kifNyIA7<HL@_OD|_6PNlgj(<%+EbM0h
zl=rF2gHJyS9C-gzV3|q91OGUX;9H&oHSn=Og7=?*x($?3m$}T7GWdx=g7=jG7q`0i
zH|mnjj0GNiOCrDnKkitu;DcY~OmOXH)bTtYi);$;zD9s!=aaeVv}47hm-;WJHwAcK
x2`J3X425ISPx>yVzoBCt>sZG+*0D`t{{agfoKzL$w7>uW002ovPDHLkV1hIx%gq1)

literal 0
HcmV?d00001

diff --git a/KelvinDashboardGUI/Resources/Icons/dialog.png b/KelvinDashboardGUI/Resources/Icons/dialog.png
deleted file mode 100644
index 176bc26d4962885d56ed46d4c7fb9c62f195529e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 408
zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xawj^(N7l!{JxM1({$v_d#0*}aI
zppNSx%;=;sy8<Z4UgGKN%Kn&DM9kcDYJ>Sh1_nk|PZ!4!jq_V4?e}7K6gXC2yq$9r
zv#U#YiCs&tnVDIbn4P=SN7fvX8m9Pz>H;+^+#7vTHC_G)Pcq)Q_qJrWwche{2bTH`
zXW!L)uC?a*BglAT-&ud(8$YKW*imisBF2j0>n?5?Q*N_ehmL6PdlQ>{fw6<(#M;tt
z!soBO;jPKo&&<cb-&Xt5X3mj4=b55<Cf<|k2&tdk8t~c3dGg+`GhVJvp2K!QWEW>g
zLg=Scfzi$<HZ?qBl1kp$SaqZ{o1H!3UX;^(M-8Pl0Ub$4lzhZXmnJW~BB`~mo%No!
zfbx!_zJm@@eg9Ic`dzp#cviJ5Xm3uiTT+!Q#1t42G1Kk}_k|_(hLvVluNwHXFW&s`
y>L%BM`}!u_t>^677Jq)aNdBfxrPVY0pDY(e`aItVUKIj{A%mx@pUXO@geCwFIi6+!

diff --git a/KelvinDashboardGUI/qml.qrc b/KelvinDashboardGUI/qml.qrc
index 4d465d5ce..eedcc5cd7 100755
--- a/KelvinDashboardGUI/qml.qrc
+++ b/KelvinDashboardGUI/qml.qrc
@@ -24,10 +24,13 @@
         <file>Resources/Icons/about.png</file>
         <file>Resources/Icons/home.png</file>
         <file>Resources/Icons/settings.png</file>
-        <file>Resources/Icons/dialog.png</file>
         <file>Resources/Icons/exit.png</file>
         <file>DapUiQmlScreenDialogAddWallet.qml</file>
         <file>DapUiQmlWidgetChainWallet.qml</file>
         <file>DapUiQmlWidgetChainWalletForm.ui.qml</file>
+        <file>Resources/Icons/dialog-error.png</file>
+        <file>Resources/Icons/dialog-information.png</file>
+        <file>Resources/Icons/dialog-question.png</file>
+        <file>Resources/Icons/dialog-warning.png</file>
     </qresource>
 </RCC>
diff --git a/KelvinDashboardService/DapChainDashboardService.cpp b/KelvinDashboardService/DapChainDashboardService.cpp
index b5530fcc0..f1d558c5b 100755
--- a/KelvinDashboardService/DapChainDashboardService.cpp
+++ b/KelvinDashboardService/DapChainDashboardService.cpp
@@ -3,7 +3,7 @@
 DapChainDashboardService::DapChainDashboardService() : DapRpcService(nullptr)
 {
     // Log reader
-    m_pDapLogReader = new DapLogReader(this);
+    m_pDapChainLogHandler = new DapChainLogHandler(this);
 
     m_pDapChainWalletHandler = new DapChainWalletHandler(this);
 
@@ -38,7 +38,7 @@ bool DapChainDashboardService::start()
 QStringList DapChainDashboardService::getNodeLogs(int aiTimeStamp, int aiRowCount)
 {
     qInfo() << QString("getNodeLogs(%1, %2)").arg(aiTimeStamp).arg(aiRowCount);
-    return m_pDapLogReader->request(aiTimeStamp, aiRowCount);
+    return m_pDapChainLogHandler->request(aiTimeStamp, aiRowCount);
 }
 
 QStringList DapChainDashboardService::addWallet(const QString &asWalletName)
diff --git a/KelvinDashboardService/DapChainDashboardService.h b/KelvinDashboardService/DapChainDashboardService.h
index 6c0f7399e..1e4f2663e 100755
--- a/KelvinDashboardService/DapChainDashboardService.h
+++ b/KelvinDashboardService/DapChainDashboardService.h
@@ -23,7 +23,7 @@
 #include "DapRpcTCPServer.h"
 #include "DapRpcService.h"
 
-#include "DapLogReader.h"
+#include "DapChainLogHandler.h"
 #include "DapChainWalletHandler.h"
 
 #include <QLocalServer>
@@ -39,7 +39,7 @@ class DapChainDashboardService : public DapRpcService
     /// Socket of client connection with the service.
     DapUiSocketServer       * m_pSocketService {nullptr};
     /// Log reader.
-    DapLogReader            * m_pDapLogReader {nullptr};
+    DapChainLogHandler            * m_pDapChainLogHandler {nullptr};
 
     DapChainWalletHandler   * m_pDapChainWalletHandler {nullptr};
 public:
diff --git a/KelvinDashboardService/DapChainLogHandler.cpp b/KelvinDashboardService/DapChainLogHandler.cpp
new file mode 100644
index 000000000..de6211b91
--- /dev/null
+++ b/KelvinDashboardService/DapChainLogHandler.cpp
@@ -0,0 +1,41 @@
+#include "DapChainLogHandler.h"
+
+DapChainLogHandler::DapChainLogHandler(QObject *parent) : QObject(parent)
+{
+
+}
+
+QStringList DapChainLogHandler::parse(const QByteArray &aLogMessages)
+{
+    qDebug() << aLogMessages;
+    QRegExp rx("(\\t|\\[)([\\w\\s]{1,1}[\\w\\s\\W]+)(\\n|\\r|\\])");
+    rx.setMinimal(true);
+
+    int pos{0};
+    QStringList list;
+    while((pos = rx.indexIn(aLogMessages, pos)) != -1)
+    {
+        list.append(rx.cap(2));
+        pos += rx.matchedLength();
+    }
+    qDebug() << list;
+    return list;
+}
+
+QStringList DapChainLogHandler::request(int aiTimeStamp, int aiRowCount)
+{
+    QByteArray result;
+    QProcess process;
+    process.start(QString("%1 print_log ts_after %2 limit %3").arg("/home/andrey/Project/build-kelvin-node/kelvin-node-cli").arg(aiTimeStamp).arg(aiRowCount));
+    process.waitForFinished(-1);
+    result = process.readAll();
+
+    if(result.isEmpty())
+        qDebug() << "FALSE";
+    else
+    {
+        qDebug() << "TRUE";
+    }
+
+    return parse(result);
+}
diff --git a/KelvinDashboardService/DapLogReader.h b/KelvinDashboardService/DapChainLogHandler.h
similarity index 78%
rename from KelvinDashboardService/DapLogReader.h
rename to KelvinDashboardService/DapChainLogHandler.h
index a164d3598..ed50921ab 100644
--- a/KelvinDashboardService/DapLogReader.h
+++ b/KelvinDashboardService/DapChainLogHandler.h
@@ -9,7 +9,7 @@
 
 #include "DapLogMessage.h"
 
-class DapLogReader : public QObject
+class DapChainLogHandler : public QObject
 {
     Q_OBJECT
 
@@ -17,7 +17,7 @@ protected:
     virtual QStringList parse(const QByteArray& aLogMessages);
 
 public:
-    explicit DapLogReader(QObject *parent = nullptr);
+    explicit DapChainLogHandler(QObject *parent = nullptr);
 
 public slots:
     QStringList request(int aiTimeStamp, int aiRowCount);
diff --git a/KelvinDashboardService/DapChainWalletHandler.cpp b/KelvinDashboardService/DapChainWalletHandler.cpp
index 50f3669bd..b02cb255f 100644
--- a/KelvinDashboardService/DapChainWalletHandler.cpp
+++ b/KelvinDashboardService/DapChainWalletHandler.cpp
@@ -16,7 +16,7 @@ QStringList DapChainWalletHandler::createWallet(const QString &asNameWallet)
 {
     QByteArray result;
     QProcess process;
-    process.start(QString("%1 wallet new -w %2").arg("/home/andrey/Demlabs/build-kelvin-node/kelvin-node-cli").arg(asNameWallet));
+    process.start(QString("%1 wallet new -w %2").arg("/home/andrey/Project/build-kelvin-node/kelvin-node-cli").arg(asNameWallet));
     process.waitForFinished(-1);
     result = process.readAll();
     QStringList list;
@@ -29,7 +29,7 @@ QMap<QString, QVariant> DapChainWalletHandler::getWallets()
 {
     QMap<QString, QVariant> map;
     QProcess process;
-    process.start(QString("%1 wallet list").arg("/home/andrey/Demlabs/build-kelvin-node/kelvin-node-cli"));
+    process.start(QString("%1 wallet list").arg("/home/andrey/Project/build-kelvin-node/kelvin-node-cli"));
     process.waitForFinished(-1);
     QString str = QString::fromLatin1(process.readAll()).remove(" ");
     QRegExp rx( ":\\b([a-zA-Z0-9]+)\\n" );
diff --git a/KelvinDashboardService/DapLogReader.cpp b/KelvinDashboardService/DapLogReader.cpp
deleted file mode 100644
index 9907b1c83..000000000
--- a/KelvinDashboardService/DapLogReader.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#include "DapLogReader.h"
-
-
-
-DapLogReader::DapLogReader(QObject *parent) : QObject(parent)
-{
-
-}
-
-QStringList DapLogReader::parse(const QByteArray &aLogMessages)
-{
-    QStringList list = QString::fromLatin1(aLogMessages).split(";");
-
-    auto resultEnd = std::remove_if(list.begin(), list.end(),
-    [] (const QString& aLogMessage)
-    {
-        return !aLogMessage.contains('[');
-    });
-    list.erase(resultEnd, list.end());
-    return list;
-}
-
-QStringList DapLogReader::request(int aiTimeStamp, int aiRowCount)
-{
-    QByteArray result;
-    QProcess process;
-    process.start(QString("%1 print_log ts_after %2 limit %3").arg("/home/andrey/Demlabs/build-kelvin-node/kelvin-node-cli").arg(aiTimeStamp).arg(aiRowCount));
-    process.waitForFinished(-1);
-    result = process.readAll();
-
-    if(result.isEmpty())
-        qDebug() << "FALSE";
-    else
-    {
-        qDebug() << "TRUE";
-    }
-    return parse(result);
-}
diff --git a/KelvinDashboardService/KelvinDashboardService.pro b/KelvinDashboardService/KelvinDashboardService.pro
index 83a63af6c..52458e45e 100755
--- a/KelvinDashboardService/KelvinDashboardService.pro
+++ b/KelvinDashboardService/KelvinDashboardService.pro
@@ -41,15 +41,15 @@ SOURCES += \
     DapChainDashboardService.cpp \
     DapChainNode.cpp \
     DapChainNodeCache.cpp \
-    DapLogReader.cpp \
-    DapChainWalletHandler.cpp
+    DapChainWalletHandler.cpp \
+    DapChainLogHandler.cpp
 
 HEADERS += \
     DapChainDashboardService.h \
     DapChainNode.h \
     DapChainNodeCache.h \
-    DapLogReader.h \
-    DapChainWalletHandler.h
+    DapChainWalletHandler.h \
+    DapChainLogHandler.h
 
 include (../libdap/libdap.pri)
 include (../libdap-crypto/libdap-crypto.pri)
diff --git a/KelvinDashboardService/main.cpp b/KelvinDashboardService/main.cpp
index 7919e48f2..9c4130e8a 100755
--- a/KelvinDashboardService/main.cpp
+++ b/KelvinDashboardService/main.cpp
@@ -5,7 +5,7 @@
 #include "DapHalper.h"
 #include "DapChainDashboardService.h"
 #include "DapLogger.h"
-#include "DapLogReader.h"
+#include "DapChainLogHandler.h"
 
 int main(int argc, char *argv[])
 {
diff --git a/libKelvinDashboardCommon/DapLogModel.cpp b/libKelvinDashboardCommon/DapLogModel.cpp
index ad8d7d4f3..653c0a070 100644
--- a/libKelvinDashboardCommon/DapLogModel.cpp
+++ b/libKelvinDashboardCommon/DapLogModel.cpp
@@ -20,7 +20,30 @@ QVariant DapLogModel::data(const QModelIndex &index, int role) const
 {
     if (index.row() < rowCount())
             switch (role) {
-            case TypeRole: return m_dapLogMessage.at(index.row())->getType();
+            case TypeRole:
+                switch (m_dapLogMessage.at(index.row())->getType()) {
+                case Type::Info:
+                    return "INF";
+                case Type::Warning:
+                    return "WRG";
+                case Type::Error:
+                    return "ERR";
+                case Type::Debug:
+                    return "DBG";
+                default:
+                    break;
+//                case Type::Info:
+//                    return "qrc:/Resources/Icons/dialog-information.png";
+//                case Type::Warning:
+//                    return "qrc:/Resources/Icons/dialog-warning.png";
+//                case Type::Error:
+//                    return "qrc:/Resources/Icons/dialog-error.png";
+//                case Type::Debug:
+//                    return "qrc:/Resources/Icons/dialog-question.png";
+//                default:
+//                    break;
+                }
+
             case TimeStampRole: return m_dapLogMessage.at(index.row())->getTimeStamp();
             case FileRole: return m_dapLogMessage.at(index.row())->getFile();
             case MessageRole: return m_dapLogMessage.at(index.row())->getMessage();
-- 
GitLab