From 29d6bf46c8578ac5dfbd379348d63cf010ec1921 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 4 Jul 2014 15:12:54 +0400 Subject: [PATCH 1/4] version 0.5.6 with serverside messages search, win version only --- Telegram/Resources/lang.txt | 2 + Telegram/Resources/style.txt | 54 +- Telegram/Resources/style_classes.txt | 17 + Telegram/Setup.iss | 6 +- Telegram/SourceFiles/app.cpp | 59 +- Telegram/SourceFiles/app.h | 3 +- Telegram/SourceFiles/art/sprite.png | Bin 28885 -> 29090 bytes Telegram/SourceFiles/art/sprite_200x.png | Bin 53952 -> 51090 bytes Telegram/SourceFiles/boxes/contactsbox.cpp | 2 +- Telegram/SourceFiles/boxes/newgroupbox.cpp | 19 +- Telegram/SourceFiles/boxes/newgroupbox.h | 1 + Telegram/SourceFiles/config.h | 9 +- Telegram/SourceFiles/dialogswidget.cpp | 525 ++- Telegram/SourceFiles/dialogswidget.h | 56 +- Telegram/SourceFiles/fileuploader.cpp | 3 + Telegram/SourceFiles/gui/animation.h | 2 +- Telegram/SourceFiles/gui/switcher.cpp | 157 + Telegram/SourceFiles/gui/switcher.h | 62 + Telegram/SourceFiles/history.cpp | 445 ++- Telegram/SourceFiles/history.h | 109 +- Telegram/SourceFiles/historywidget.cpp | 333 +- Telegram/SourceFiles/historywidget.h | 28 +- Telegram/SourceFiles/mainwidget.cpp | 76 +- Telegram/SourceFiles/mainwidget.h | 7 +- Telegram/SourceFiles/mtproto/generate.py | 15 +- Telegram/SourceFiles/mtproto/mtpConnection.h | 1 + Telegram/SourceFiles/mtproto/mtpCoreTypes.h | 2 + Telegram/SourceFiles/mtproto/mtpScheme.h | 3277 +++++++++--------- Telegram/SourceFiles/mtproto/scheme.tl | 3 + Telegram/SourceFiles/profilewidget.cpp | 4 +- Telegram/SourceFiles/pspecific_wnd.cpp | 36 +- Telegram/SourceFiles/stdafx.h | 1 + Telegram/Telegram.rc | Bin 5558 -> 5558 bytes Telegram/Telegram.vcxproj | 27 + Telegram/Telegram.vcxproj.filters | 15 + 35 files changed, 3294 insertions(+), 2062 deletions(-) create mode 100644 Telegram/SourceFiles/gui/switcher.cpp create mode 100644 Telegram/SourceFiles/gui/switcher.h diff --git a/Telegram/Resources/lang.txt b/Telegram/Resources/lang.txt index 2824bf74f..3a4d9273f 100644 --- a/Telegram/Resources/lang.txt +++ b/Telegram/Resources/lang.txt @@ -122,6 +122,8 @@ lng_signup_firstname: "First Name"; lng_signup_lastname: "Last Name"; lng_dlg_filter: "Search"; +lng_dlg_conversations: "Conversations"; +lng_dlg_messages: "Messages"; lng_dlg_new_group_name: "Group name"; lng_dlg_create_group: "Create"; diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index a7aa82ee4..69abf56f4 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -153,11 +153,12 @@ btnDefBig: flatButton(btnDefFlat) { overFont: font(23px); height: 56px; } +btnNextBG: #2fa9e2; btnDefNext: flatButton(btnDefFlat) { color: white; overColor: white; downColor: white; - bgColor: #2fa9e2; + bgColor: btnNextBG; overBgColor: #279ad0; downBgColor: #279ad0; } @@ -593,6 +594,23 @@ dlgPaddingVer: 8px; dlgHeight: 62px; dlgPhotoPadding: 12px; +dlgState: switcher { + border: 2px; + borderColor: btnNextBG; + + bgColor: #fff; + bgHovered: btnWhiteHover; + bgActive: btnNextBG; + + height: 34px; + + font: font(fsize); + textColor: btnYesColor; + activeColor: #fff; + + duration: 200; +} + dlgSep: 8px; dlgShadowColor: rgba(0, 0, 0, 24);//#ebebeb @@ -709,6 +727,24 @@ topBarActionSkip: 13px; topBarSelectedPos: point(18px, 18px); historyBG: #dfe4e8; + +historyToEnd: iconedButton(btnDefIconed) { + bgColor: transparent; + overBgColor: transparent; + + icon: sprite(252px, 41px, 44px, 44px); + iconPos: point(0px, 0px); + downIcon: sprite(252px, 41px, 44px, 44px); + downIconPos: point(0px, 0px); + + width: 44px; + height: 44px; +} +historyToEndSkip: 10px; + +activeFadeInDuration: 500; +activeFadeOutDuration: 3000; + msgMaxWidth: 550px; msgFont: font(fsize); msgNameFont: font(fsize semibold); @@ -765,9 +801,9 @@ msgDateSpace: 19px; msgDateCheckSpace: 4px; msgDateDelta: point(2px, 5px); -msgImgSendingRect: sprite(280px, 40px, 20px, 20px); +msgImgSendingRect: sprite(320px, 65px, 20px, 20px); msgImgCheckRect: sprite(280px, 20px, 20px, 20px); -msgImgDblCheckRect: sprite(260px, 40px, 20px, 20px); +msgImgDblCheckRect: sprite(300px, 65px, 20px, 20px); msgDateImgDelta: 4px; msgDateImgColor: #fff; msgDateImgBg: #00000054; @@ -877,8 +913,8 @@ btnAttachDocument: iconedButton(btnDefIconed) { height: 46px; } btnAttachPhoto: iconedButton(btnAttachDocument) { - icon: sprite(278px, 68px, 24px, 24px); - downIcon: sprite(278px, 68px, 24px, 24px); + icon: sprite(113px, 0px, 24px, 24px); + downIcon: sprite(113px, 0px, 24px, 24px); } btnAttachEmoji: iconedButton(btnAttachDocument) { overBgColor: white; @@ -957,6 +993,10 @@ btnAddContact: iconedButton(btnNewGroup) { icon: sprite(188px, 93px, 18px, 18px); downIcon: sprite(188px, 93px, 18px, 18px); } +btnCancelSearch: iconedButton(btnNewGroup) { + icon: sprite(188px, 43px, 18px, 18px); + downIcon: sprite(188px, 43px, 18px, 18px); +} notifyBG: white; notifyBorder: #f1f1f1; @@ -1245,8 +1285,8 @@ dropdownAttachDocument: iconedButton(btnAttachDocument) { downTextPos: point(50px, 14px); } dropdownAttachPhoto: iconedButton(dropdownAttachDocument) { - icon: sprite(278px, 68px, 24px, 24px); - downIcon: sprite(278px, 68px, 24px, 24px); + icon: sprite(113px, 0px, 24px, 24px); + downIcon: sprite(113px, 0px, 24px, 24px); } dragFont: font(28px semibold); diff --git a/Telegram/Resources/style_classes.txt b/Telegram/Resources/style_classes.txt index 568e08ace..afa7a3384 100644 --- a/Telegram/Resources/style_classes.txt +++ b/Telegram/Resources/style_classes.txt @@ -229,3 +229,20 @@ flatLabel { width: number; align: align; } + +switcher { + border: number; + borderColor: color; + + bgColor: color; + bgHovered: color; + bgActive: color; + + height: number; + + font: font; + textColor: color; + activeColor: color; + + duration: number; +} diff --git a/Telegram/Setup.iss b/Telegram/Setup.iss index bc6015c83..bd1121cd4 100644 --- a/Telegram/Setup.iss +++ b/Telegram/Setup.iss @@ -3,9 +3,9 @@ #define MyAppShortName "Telegram" #define MyAppName "Telegram Win (Unofficial)" -#define MyAppVersion "0.5.4" -#define MyAppVersionZero "0.5.4" -#define MyAppFullVersion "0.5.4.0" +#define MyAppVersion "0.5.6" +#define MyAppVersionZero "0.5.6" +#define MyAppFullVersion "0.5.6.0" #define MyAppPublisher "Telegram (Unofficial)" #define MyAppURL "https://tdesktop.com" #define MyAppExeName "Telegram.exe" diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index 7f0f2c03c..a600950d7 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -508,7 +508,7 @@ namespace App { } } for (QMap::const_iterator i = msgsIds.cbegin(), e = msgsIds.cend(); i != e; ++i) { - histories().addToBack(v[*i], newMsgs); + histories().addToBack(v[*i], newMsgs ? 1 : 0); } } @@ -557,9 +557,6 @@ namespace App { if (j != msgsData.cend()) { History *h = (*j)->history(); (*j)->destroy(); - if (h->isEmpty()) { - if (App::main()) App::main()->checkPeerHistory(h->peer); - } } } } @@ -1100,23 +1097,26 @@ namespace App { return 0; } - bool historyRegItem(HistoryItem *item) { + HistoryItem *historyRegItem(HistoryItem *item) { MsgsData::const_iterator i = msgsData.constFind(item->id); if (i == msgsData.cend()) { msgsData.insert(item->id, item); if (item->id > ::maxMsgId) ::maxMsgId = item->id; - return true; + return 0; } - return (i.value() == item); + if (i.value() != item && !i.value()->block() && item->block()) { // replace search item + item->history()->itemReplaced(i.value(), item); + if (App::main()) { + emit App::main()->historyItemReplaced(i.value(), item); + } + delete i.value(); + msgsData.insert(item->id, item); + return 0; + } + return (i.value() == item) ? 0 : i.value(); } - void historyUnregItem(HistoryItem *item) { - MsgsData::iterator i = msgsData.find(item->id); - if (i != msgsData.cend()) { - if (i.value() == item) { - msgsData.erase(i); - } - } + void historyItemDetached(HistoryItem *item) { if (::hoveredItem == item) { hoveredItem(0); } @@ -1135,13 +1135,32 @@ namespace App { if (::mousedItem == item) { mousedItem(0); } + } + + void historyUnregItem(HistoryItem *item) { + MsgsData::iterator i = msgsData.find(item->id); + if (i != msgsData.cend()) { + if (i.value() == item) { + msgsData.erase(i); + } + } + historyItemDetached(item); if (App::main()) { emit App::main()->historyItemDeleted(item); } } void historyClearMsgs() { + QVector toDelete; + for (MsgsData::const_iterator i = msgsData.cbegin(), e = msgsData.cend(); i != e; ++i) { + if ((*i)->detached()) { + toDelete.push_back(*i); + } + } msgsData.clear(); + for (int i = 0, l = toDelete.size(); i < l; ++i) { + delete toDelete[i]; + } ::maxMsgId = 0; ::hoveredItem = ::pressedItem = ::hoveredLinkItem = ::pressedLinkItem = ::contextItem = 0; } @@ -1224,6 +1243,12 @@ namespace App { textlnkOver(TextLinkPtr()); textlnkDown(TextLinkPtr()); + if (completely && App::main()) { + App::main()->disconnect(SIGNAL(historyItemDeleted(HistoryItem *))); + } + + histories().clear(); + if (completely) { LOG(("Deleting sound..")); delete newMsgSound; @@ -1242,12 +1267,6 @@ namespace App { clearStorageImages(); } - if (App::main()) { - App::main()->disconnect(SIGNAL(historyItemDeleted(HistoryItem*))); - } - - histories().clear(); - serviceImageCacheSize = imageCacheSize(); } diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index 8a20785ac..8bb4636ff 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -116,7 +116,8 @@ namespace App { History *history(const PeerId &peer, int32 unreadCnt = 0); History *historyLoaded(const PeerId &peer); HistoryItem *histItemById(MsgId itemId); - bool historyRegItem(HistoryItem *item); + HistoryItem *historyRegItem(HistoryItem *item); + void historyItemDetached(HistoryItem *item); void historyUnregItem(HistoryItem *item); void historyClearMsgs(); void historyClearItems(); diff --git a/Telegram/SourceFiles/art/sprite.png b/Telegram/SourceFiles/art/sprite.png index b1713b0737a9fc992ca4899a549272e1f2ceb091..2f5830726de430db6030cf19bc73560fcd4c68bb 100644 GIT binary patch literal 29090 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 literal 28885 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 diff --git a/Telegram/SourceFiles/art/sprite_200x.png b/Telegram/SourceFiles/art/sprite_200x.png index 5da23c725e9cabb47de923ab78d4923f049b9bfb..1d5a6885a315562610aa2bd3c5003c95bb2490b8 100644 GIT binary patch literal 51090 zcmaI72RK|^+Xgxa5`sjOsFCQSB^bT;HVj5@iRiu8Xb}+v(W7@pkKTz0g6O>r(G5YO zChFNEdB5-d|MQ=7UHhJ$ow@8;Ydz~}_w%eUn5sMh9wi`9p(J4wx(>b{~T3FkegFs%h z>6(^sO%$2v$-<$O@|(bTWk(Itn{*md5rHHzOyGyN?kK%^m_0+P-f>q}_6F6LtT$Lu zQGsts)!A={<4xnPKFo;<&V3W!cedo4YdhI;vOaKGJ0-SJdXQc{g!}R4?L-A0bx7dt zA}QLt--3HScQ37SN(A9CIDzimtTub-dO?o?`sFVo!uIGRZW{>0YYhJ;=p!`s<74X3 zE21r_WJ8R=R~R4NVg!_L29kgze4?ZZKoW8of$8s=G(lN6Ku`Oho34Oh9H6Jn0qbL+ z!1Q0qz8D~b_=ltzSur5Gd**LsKvu$_(jo0|S&;5y5Q&BIXF@K~KNX(|dtlC4)%h_H{&lvX$T200S$PTqV-TASfGTaFfFs zS4W4FmSs?poQ;I<8RoMT3C>U6$rRi{yhPs)zJfqmF{Hq34=%h03Cjlu`J(CwO*ppN zajqVjnyy@~4V5@afIv%b{v(&{T-B6;!Z?BUmpP2PH>`~Dv)oT2EUJhkYC&13S)BtX z^xDW~ziXVCSzBG5R{AVu@T^bA@6z&<$w!?FyWjpI=O;(s+LjrDxQ&A3Z~Xf9>Fc3N zKJ`%StyiY=>(TP(_4rrkG-HoGE1EXyf=O1?iJhZlQr;eL=RXRQie>F$9KAAIUSvPR z5?h3TKG=w1_{MM`jGkj1D>L8Gb^Ew{0s`$fJ9dn-+{6mB3SJuWyxJ4Lkk4WS1zIS^ zI)gyQG7OyXzH0HFn;?)(RuK4uB-LTZefEzy)E(IK9r))@`CdseeEuYLM+(m@klN)b zYw1fVme&IxXuwao#wBQYKdM{3j&ma9{G`=DDC$IX`s`*#2TM!Pts9bGZr*$LaP|#` zX}B(Z)J^i_kY5iw6mAelFwphBAyI#%90O5!q7e?K(^8<>7j?lD3^kN%iV^+-;(mGl zx<&p;d{C9T==kkg=|%)UnX={gsbOZgE&a`<1M}$o>FwrXeAYN zRdiLS6%cgP47_(|Z}H#4dZqq}`B5A~xrV9f?(fg{O}U?h>MF3)PZCGpBDWCf1?nZGzXN!98y*StwHP z5rQvwy33tm)QP`pr# zuXUi+505S~*7Pfv)8f%wDY`YDSfW*&4%^nG(zGlRMuZkyA{^o3dH#AAVK{o7DxGT5 zdFok}CMzx7bokFHs=e4B+7gt!b`OGlW~v;RdEo(Wet$vJ93fg#wX^6w#A7_iMk~UCF&*e+pT=%JB8^5 zt+LH}XF-ILJxa`m%<`7egV^aCnlqZnLcBsUsHo6UIcKqLK2>(JjAy$;;qLp4Hsiny z701E_@79e|YCoXZ>uQu9-R}Z%J<1 z=o)B0v(b{z=uvuVb?T=b#9YNL->&s;=zQi^-b~gE zJs#KL&M(s6)YnGD@iP-1+b)*+t4XT`S=MgQb3NyZ(J7nyP@nHveDZ9MTbMN@m_A;+_h(8f8 z#n$D&R@UL5(OqvXwGpfmarU0WTOq|}d##OAD$)>M2ezM3E7{RWD)(uv{ucA(FEuPR42+exD^(|e(9edzGV@bnhBbBnBBA2R}a%Ny^(4_WNY-Dn4 z!RK6l?g3F6uZW(v(gD2JdKUF^EY5O&=xusJx}QJi@A;>5Id#4p&j%N6h#dEt?zkAm>?n~$DZ2P5#Ob1wVK$;r6nTZ;^>S3NGUL=E4*iUc z2MWbGxf99|PQu&(dPfI($-pOJx)L$8N3<1$@s17$gLvgaaKlfP`kBZ%=C>1Bk;RRJ zbBenc6ffy+qAvzzr#p9UNCMZpRZK8mh*Y*lHLX{3Z0wW!{N3rjD{}VbAUFwL2qp}J z=q=R>4onjZ@k%P&w7l$+uD+&*qz;X`y5qCL*4Fgdxw)e1>Np``;jjySc0?F%T^9Ev$r~sMS5q z^!LCB2(ofO<2$UOJ<5d9Nr`r}`c>Wvc5X4#n>p*=!jPf4A{&d4Vhe4A(l2(^Em9c`EESmxiPWl`Q?UKCEFCYe(`=qq9kU>ZrW)l{`YJp> zc^7dI8*#9Vt*D;GgjWz~V}S)xkH&qRf822ILJSxUFlf9iAiqH0Oy{p}7Wy31A~jDB zU?(}jP2@Cg5_Z{Grud@%s%p`hV`D}Gluadi()E+Ys7ZZ@pZeo=#^0lBFRC4a+Vtur zJnL;XceM#b-4`U(()ow8d(DM-8&$|_Rhtm*v4b5kgB?rQNYgAne*VRU`S};Z1~u_k zfew6jX?F8-7x+6S{ZTbnwlguu0jy^~60bi7795(p>n9|TTRl*nP5YAv49R%oS3cXn zJg>IPRu(S?QrFtg&>s;;8)he#(MdKEt$W|q=Jtfo#*R(gk?#E!O}kCz)%A1bKQaEy z^Y3)8Zz-w}2e*-ik+oEfs~tU>i{sL$Hlucl#d4ErZZ9VAqIj(W8qvp_s1aJxgnn&= zVVx8Y8UKLpycZV3O+*pq7z~DVc)y^oF5?L&xqG&!>sW8JGG~+JaI%7hD8e3>K?YQ> zT<)Zj4qY4%gl|mm5k7vX6(h9vkkWoS|5p3<=*V7^8(h>je@l;z^VXYt zuodj?j11Z>6zXBVhN4n_>{kn(R7ZD64lvWRcj>Bl^~N<9?D;(RMf4_dBZmKk^;x^V(X#6nB&{`{UZ864AHeqs^MBw#UMel= zR{a>snPq{e@^2aaT_Wgf%1L2s-Mu{dCig>y`lvQ9sSrEKHqMm7iimYoNCb}0Qclo% zB9gcMI}U8+2E0}uYEyff%V%|$)8AC{w7bJ)acZ6yy{F0C>jLkjxS=~3`lVW`+x7ab%+tbV2HKm_TpM-TSzruhle0$4(C+eYz!`T@d_h9Bp7qizm}fykB~ken2!7*#ZB=BrP|=4`#gGJ#486Q`OR}I(3`6bp z)|-oSyyMNQSqqG~ft2Rc%Pb`mO4=omt+VPbcqtPzv$cy0_fkZj6b2Xd`DN|*FPHs_ zEO(yMJOB)m1vjkz%r6#fUvT~H?)E9_@~p|fNqj`&t^13Ao36hq&E%S#PMw^d=6IKI zI4K3NOD*CS1t&dUSAP=cFMqw##+oqWj_Eaf6t(hZMZkorNMUbiR=JXrk}@YdJDbCn zhxB$E>_>C%_b=O?@ig9|^E=B%F;PV5d5-V+X69{a7j}HZzcn`4Y}{UPP(Ia( zy0f$MaBpgAO5V@UPi$I!nH*^Ae%R@&+Ljb6S_egE;}F#!=#oFON3qv38atL^a6rKn!L5a6zgK;tUGM;=&5?F&Me$ZPw{KgSo2 z%oH`QvUg9h#?E^5A9(A<;pj^f4pDy%=iKC$aXLj$UQaKqzDB5_{#bDJm9V+ z(RLa8A4l&n5r0XK)c46VQ0CWRyUVcL^292SA19I(e|&Os@)8YrFe??me?G7X_qrpU za{*Ps07gRcEeLoYFp`u_J`J^uv5~k9w~u61Mc=6)BW>!MeHgWkjlYlA*VpGXv5V0j z@mE5)R5t9N0RYhp3}lnDbtFmODrR+~{9QwVn@_S*VUi{e5Nxn_)fGc?yjqPb$SYJn zGcUWd{c5Nx3zNo{C&mV(aT6V(T)P+9>`_ugmnIoFqiT5I1>?)lq9*0W(7Be#*>!th zeIz0uE8_=G2z2{a}+ z>Y<&IgrUK9d{i@be1I>=M!N)KW5SzJ40ynA+yx{BY(BK~r1J4$Ui7j^m0t<*kcBE7*pr)vvRoc5KDBFD7cH${jBq4cL8dUO?<@zU!!T~`nesm z`Z+%kgfh~Mmr}7}D$clqxlEht4t4L>(zC(Knv1q-ar-N+DWm%H;_Y$+KHp|D3jV*l z=GxMc1g0cQthJPQ=P4^kyIBV@ni(7%zYANS9~$JP}XYQvPt*Og0zce zBRxF~Sni99>FrO(xHy_Pqkoi(AwfwNoDfcehs{cY7u&zakko&x-GtbHx~JBadTQ6D z(ZRXVP!X%;tT{mL#PjOybU=?!vl-RjS^qaMv|xfoD<`5F%qRq;Vjr0l8$(ZCrZ#0(g&-h$JcKpd&DT^}JH|i)rP%89S!x85O2DYvc!3tK5-IKx81B)gQOs z&stVs31{3cDBAaBo(X9GjHkIs?vQjv^%(jUFcJULA3=D6gzCQ+G@A4KDd*)lhQZxj z6EG!XnLN|boWCS0yqLTFQ%5gq`V?m8m2x$*Fv$t z5j`v3<10T!Qi>!99DWTJ90ot@E7+ZhuTm|fPgmW*+WhnhlY^c8oqicpt^N*HoJP^@ zn+7$xFqRe|^^u4qMtnbdmZbeb{N}VX^mtLY_wtNU?`hvGSQf9=EC>iZ2(lib?Z;mq zi-|}k7$>Za6dLFIhN~Dh{|Gk9fyp?aYsmZDIiCY|5PHnDL9}BMHFb-@(dtTJVfZpe zAmjd^3$-VovBa7{dF)C z7~*;rzzMN%Fk_euF?EH^BMfxRG${w33D{#e+eiS=s<*qRv0^l`Vw9Zy?GQ(HY;fAMJ4gKLR)$P<%d zzM_|EzGCM4F9zb?t9J?vSM;ME8g~ODk##fMM|_rGSTI$4b&+4){cs?Vd|$=-f-nE8 zMBg_-2t-y>Q21-0dxt@^v*3FLTWaoh-})vGWA$Njtlp_omyQ2a zPQhX=qR8JOdCM}aAGpC>)IT1z z8dXICS@?hQDU$2$DUiIrTzEKCK&^%#%eIZ|Apo;l4%Ry43CPp?tMNvkH}6Fcju^ zPEHP6czAd@3n!<4bwk6ifzi>?$^PWVv`OF}+Q)m}kFzX%F8pudSXXtB{5!_Fo=`Ff zzPC2N*rae$&xz^5nvn|Db{+Vs*R&1{&*)KZiL#m7+$}+*hm`8j5&NjCXoQ=`f|BJ% znVF|=@9uHAw@E{5iL-Oiv#xC;2IIX)J1j9HQN((qw9((iM9oi7V>pOXz~o$^)~115 zz3hwS`#vU_{D*Cq!OCY2XWvHK=7=F;^>Y_~Xhf~}2t;j%VHVf}_FXW2utETUSs&NF zlSHk4nOUvAU*vB+EU!uJaOh4opGFbkcx-I!o?+C2cz%AqEE?#&KH6;y90{?yi=m=Zf zn7g^lsY=*eG0jK0sr{Cl>-!W<71kNMwkd^utoO83ldYb0LGjskAr; zxA-XJub1BsJ$_&a9n|_QEvREZ@$0+C83b?~lu;{QfM?fT@e_ZS(UxW@80G8X?frW% zF)8VabId7u3_xaM|A+$qn#5+#G2qa2H2! z1^<)w;=H`oVh(}3g%b}x7VV#5|Jf4Z_x@v_!)JxE+9n;drcMbCL&60a!d#_iY&_z> z4oAgOoZ6vm94eA?=WN$Ek^VHTa}~MjWx;Z_g!?{WEel6=RgoNa&haxHF*6+_M87po zADSpl(WGW?M-4Ds{49CLt{Gw`xT8vkIJ^O#Tjr&PB`7hnCMd-!Zy{s|0RfNZgm%Gbd;EbgX4E#->fp)U{6o$_F*P;#MVZJA32}TY7{8}^D)4NAD=#XgVXL{ z7mVGqqJG&$=GSOgZeYkc#Q`K|RoB!WdOql28y!YNiLyMt&LN&J;E*`DmUG389hti< zj$c4~v=92nz^7~0q@>YQMPBm?co7jKWIA8EfB$@GC6ML8mQ-ZWs4_*HoMRiUlK<8D zlF~%dWQ9$^!XxJEcTAW%>n(Whh=N@12rfKCN)j*R6YluPh&m+=4b(hK2w3^_uC6X3 zQgU+fnp;_7a6`lMJH9Ptm|$Pz^mc7SgF-|^L|Y`uv?(8Y4j=LBe@ax@?@*$={#wev zq5zE_g0^J1mr6Whlkn7dB@wW z3NK}ay#*c(%_jT0xR!*GB$h7uBf8HUT~{S`nz2+c|DRI#hHn{Qy$my}rJ1PjmAwTVBdmV5-eEHLE}@wGSr2tB}h6 zp~OH8gabdLqN04{<>g!7FE3`W`u}yw%P08YxTk+(6@ZQXBa#AKSeXNt9@4m})mXNE zs$>&?&4nTA_xaifKA3QLUQMook_ksn>??K>ozSc@)m^-Y+D;<=Q@W()sP8Wa~!{?I^mJnwx=DP6FKYz zvtE2qQkqKW+icR%>ubx{Alq?s7$F1*cSSg0W;D_0iK5AU-V>#+s2KMD=T20csLAQL z8v`jFozPjlb~Nta032Nb0P+W@eU=z9H^0!gM#A#Fp{HG9xiFt{CTr}7Ww_a4{z}R3 z3OUjXo!s!^LKV2E`J>1QC}oN8l0oF@Q>79;j|S_RC8po8$*am1i}1@=N^1AOq9`5e zJQL?%4i73gR2{{H6!{;d=cV>ppbDyH;{E(w<)QJyHrE^F73B zeSQ7ezRPr^7&40JPO_l{0dAwy#}xsGt2MiRQ-p5MHP3?1jsFtc7C5lcVpD%#A+rGpI^$yzIKlPN8~x($TJ zq0y#Ht8wIhC0+RXa<~Wsz3*SKM%@lf!IL1sZXqcXr#$_r(8(Z<`)P_jC-s z-~=v~@?pnEV!!ntBmm%j?GJWEAZnf&DMXF$2?}N4U^qZU2cUttCtdn1nra^?fC0wb zM&U;YmT_MFoDHJeSLAQ>`zJcT3xYs`W-BT++q+dWxl*CqAG(C65(bCe^LgAR)LD(( z;Y$38s0uYtr^B_1J{0ZQV z)6T2)vT($WSwN0;;SmuJz(7EG6JXWGZXy1R72uz)W5%0-DTESb$$AAT$!j%OD1siH z>Rbgm;czoIXiR)LYwYNW>ep-7Za@xay$J}|XRV%&$k9f9srFbGThctqF4)(5tIbSN zrW(t6U$N=wA#_cx_>i|~^z13vfH%f&L`FL)w6y$lM||$YG?ID-NsVNEH2B-KA%S9gkUa4kH zPUYN~H3i20a?$3Uq1wmpreX0gw^Ld!)Uuy)Q+|%G zZ+-d8`m#ci2~)oR41dVbaxlsqG02&0?a})k>v>K9p*A=o0!~KmSL+qqrZ1w%A3r!u zkk7+P+{$G+T^nB_z*4g$clx#hePtd1Jz+PB6}=Q-OsD7vBsar zSqSl2;{dDpJ3@T^Q6UUQ;3@pChzb+&&(OZ!*wQqj^eI-3tARD3Jqk&`Rge0u9RYCm z9N2QRu8+be+c(B|(>QOzo9$@O07wpEk*#%=rykPdxTF2gG=H$E5|s&vidp&dMpghj zRE$AItI1pgmFQfSPGz)Mw3UFDo^Ns4-@j@K4ioB)26rF$L(>Qodn!;aNim|7S zl{!&vujEq)Rn(zP$zdacG7g8mlUZ0eyV1M8{$+hV)?-U-9^Tfq%M^j!vBmBBNMQrc41xaU zN+|{GrhiSAO~f6M{4zQ=kk z?tiJazC>%gBJ_m6sGjBqfBcut*TfWlMP4awa1p3Wb=<0jP%J#sgweH(N z`qcIjKu<@@<^IkCVAc|#_Sb9u<)uO6M< zAW7@yj_!ha3c3M4@??9?6g}RNuQ|O_WMC3NZTc<^+L!4r!s$_DewADC1_(`u-w4S7 z)NQ1$P@IPZ5?PXuYy}j#Hi&Xh?jpumDiE!-pe&oJsw&=XP(s`90Y?p%EdLd%#fAf_ z#b4d&{z*7ioEvqerKNMr5V5EgUg{oe7MT#t;<=r+u^o@aUQU9i(JKIn>e^^n|Ib{m zy8wXT2z%UwpJTWpm2C4MpGPrfJ6dV;G?%!k$my*Em^xQpZD2UJ&;ns0r3Sg@Gg{i9 zP`!+IYwDHS+L#TsLlm{c;M66nm$RnV`|87p(8gD>F$9s=-bnFD=&r*=Os99oYi zM-3cXYu(c49(?WV6T08S>K_e=<`rf!(&4HUz;~e!8~{z{Hjuba?fGt{A^0DchkoND zAYjEf>X^j#`QYBc-_?fvDOszaGzG+zdk3EnPrOZ=_CG#0@_zch&Dkp+jSK-EX|=TE z>@iIrA<=y1)(PmTJLNA&vhucL)uc{3R-?zUZXNf3!u@}kvQ8p0jVRyMP!ZgKYzEXk zi=wrEpIbr*1$-XUpGi&@=1!dsTi_+6NFbjsjb$bzCCQ(A1)}Y+LmOY<`cpt{zTqU{ zP!9q#YZ<&Cv@|!TiCQ5EV6h@}q2_PsxFB?;_Vh|WqgfZ&ef&rNz<7V^BPqrb$caXU zW+8G^frg&OMz<*|QkNZ|)sl12U~}o&44;3}wDs+dk-O6y2Vo(ldK#L1%M?pg^17Z) z3`LQw1w$MX%5V)1*lp2F~zI4Foq zT5FOK-!7k`&B(JQQX3_0%ypC9W$|18cIO)PW^daJxaGL&21X+6UB@Ao1?7S~fY+#5 zHuQx)P92@(5LT%Fo@HGdR50=SL*%jar^9_lP?hYxUNWeeyU&-cLk3ZmU~>5|2p_Sn z-C-B~3L0*HmGR|Vi3J?6=y0eT+zy=s3w8~GD6EAMu$>|)jQjFJtwDXDX%FX@ivWiF zuPUz=z;q5L0(@tuXk!%McQC+zbyQZrFzdcuR_{?(EupkO;OMWp9|^2e0eY?Yu@|pW z7thxRl2(2Wan#Sd99@4{^jPwxUd`I^T|s)Bji`Iv%f=8U%SS$pgrO@;p`Dc$FH{Q; zEDFcGc?`_DOsi+g>t^h9{+%YF6H&kvoZu21US3 z1q76IsHyWyh;ENe;J)4r%{M)LR`lL@8$N8Cj@Oj+cnmuvdELFAx5D5Ux`fL=8ckNf zqim6)#~p_ph(Qi8?wBH+B+AmcVLS0b@*$#iNWX9BOfS`!^_+y>v1-x?n&?#$?z4S9TGLJ zs9)SZIkS>R;0NaRj`>vEb!>ocpl1C4=FhvJ+lj`Ofh9!_ZLrQ0Akjl()xq zn%7Yi<=#zIPt(fT@2j1i^mZ`{8yQw%0U;2c=J~_opYv9FD~%&nUXn4Qgue4Tm@cIf zfJyWL9N6}Rf+S@HFws2!LNsQ7E|Ki~ast~g5}63`Nu$wc&d-{J1frvmK7lL;2t1CUAQiOL+m9j&=K!2+ z9mZp$r00#)+iNUQMvCxjQuJt1y`|POZscm=fR%7xWXR@dj zc0e>+M?PiLJ*)yznx(G38*4X2i2h&G=~Mk|BF34^^&n{k$~bzvAFNXT^+6#U;9Zh& zC`8BTavNo_1~@1my+*z4Rl;W~aRiHNJ?r~a_a?o*!D?YSr*zr54@_IQ9i_C{lp9;) zCw?wILVW>14@s?eapHvz=Hag~Ao>z=_!Bas4popX`7&pg|1}QmARAX#GgsFdON%oQ+!I5GjLal1mmboi1 zsaV2%BL4#{>64VsM&#&(cdqr7*e|2%6#uDGLhnj`|Jp1V0w_JTNG5;(Z(ox-utm@` zz<8~M`H{jlrs!zXyGn`HCB!QSAU;mT>)tGQ`9z4PPQtRA%*vuef(QS#d!P*va$*q- z*jQOLkzZT$8!D=dwo?l1jXsYvc zdEc3)cWI0r;G|^m4+q-C;Fv|gXT?$9e-&Yu*g zp({Lj`W|sM={Of?t-yrw<4(YXSpV)Cfb#&lA<&NhHBNDFM@($1BUm&S7+V z-p%&+ZKS?f9AE*~I~AJ%oVItFqCuH4Hu@tik>TKU!VqT*6{II5`k0Cgu|`uOIQpo7 zp2Kw3dzE-c#3ig;>k4!ZX?AD(v=%#UFs zdi8;wk&=?)2Z2D&?#t-ihf$~mU$xfNc>wLo9@-4Veoz1e63}P{{7r!nCo1}x^D0i7pK)IhiT7snlh^`iCX` z$5dg%0M@QF!^$L!d6s;$J2&?2R|0wMgPHler*^wHCvFdE4*U@5B`07o;T^8=ft1?A zS+cm_lkrBXOOD<5+Z$#)UC35;o9IvnqG=YSmzfZqj^AS?H2A5h^QZ_3N0%WaEu**K%*|xTrJhd+ z`2Y$yuLt1ne`kwkEHTh?PFG@c2bWRc!xP!W@8_Z+3gw<1W1vsyRsavkN95mVB_=*p znzVD*A9*54N^{RG>sdS@@7vLOJkAj`EP*V7r}6oNY~Ib^4ozvc_{^KLpKdih+8{QH zaSgk4(ohNzU}fA1kEmh$X(H2A?4}@{FHL!R7My!{f(tAFkU>5qFqz^?Qb6@HYQ$2e zGeCr{`P2c4tjURqi>C7O-Kh@E-y@hjzeYiIUO*jc=hZ8CO2@cEy@_T0Tm?R^rpFmU zmVS@3A@cnE{3;FI%JOf0N4JWlP)NA@w5%R_p_o4jo`yMbJ`ZZjefrXaL}fUAZN<&< zcY|Zh_$v+hdrCAvn+wAhMWKM12iuTpYHi%ma#tO0E|fzdHFFP%ypuK`>~oGpi9Ff) za!)>>sAGw>Y3T>a1riACnlCyJTXWP;jYnA0HQ%GsKDD4^;T=2q8Fukwagi=fk91UY zR>Q}R-TfM5p+xnFT(O{Q1C??rfdmy`M5F;Su1%_bsC!XxK4V%uGdnx02ZD$OQd(;e z6!=G8ojqc~gQ^3Dt>+7w9zQtqwbXE_k4Q1IH?+RmXdWzDYz*U`}-L7B1voDbCE{i*1# zUewB9H$H;8N6Up;=hi=U@#|FrnjMp|;c=bPOrfD|MuO6d5rlMm8d%;-J_h-1+TI0o?py0=t^=ZKj{Ajb z8@GoGU2!&-^lyn8vSnjO#F4QNzRB*haT`&}jnF=Qae32EEZ{TlftxQ)fL=wG$t2s0 z$G9-8gCX~WLjY}=Ckq9#P4(7j)zYLylp4WrJSMREJe1W}@cm-d8@%gqcSo|fv{@!j#46tWa^*tEXynN>m zeg0de_b8MJbt)a__I&p-^1ZOiP+D4!rK;*kKqA34j&M0g(5U^r;%0yOD=~8WHBsRv z8hghCBa1s!Iaj`BuP*mu?rtTfA`Be%Tm9$P0FLCTq1sDlQKO%ij{!K%wnahr&4Chh z&kIbTH5aFoSKkR}Df^9g%Je`23d!OQEKqx?r=LUb9X4ZnGS2r*? zlVQm!$C~Z{R8A5E;UQNHd1)@-p}JTC2gW%5*3C5U>y)0etd#J_)Ezj-4pUTD2-hZDaqS*mDhIl z3NIHIN#N^QI*`|KRkhD|wb?FE%L007ygJYt9(N0&{*gC}h6KypN&1q2Ovi|gIIR2# z%kBpw<~C;z(BM=u0DsKOABftf?rEjn^#}vkO%zRSi+T!Hs_r-rXczuZa|k@85KEXF zWL=hOONy6hfr1rj>)zP(;6ATe34U^V*d}?6xf7gC$3?2F_C;}-fcAjRT-m4A#|Ppg zbrNbd9G`b?q}WNA+h;urF>kq!6MI4M_AXV7ovi8c7q=fHot(80J^1cnpum)w$kX7$ zU;Mt!G6?`X(*{7S$5|9;o|M5D_LF1Ds(VynjzZ(YFDL61aBi#=pA=p%Y zK=#t+1efBc&5+YzePFDba`{59$1L7mMNTOqBA!fV789aj1sn)M&+fK_5pFn!eU6Qd z&GE$e`1c6Xf=c5@=w!V}7v01HbUzaGIEw(iETuo&9w?}p3|3S3h&H#hoO=Ri76Qmo zz&V%y^q*W)gccYH6D1pon-i|eZke2A#!Gas`F}N8PKWWi9GHR!6Z$3bmA(0Fkzuy# zn$jn=tX{(Lr-*O@Rbr~NTfwY>DU{;!1t7@%wA-a9oPQbx{#RS;1dvmNR7V_snvq@9 zPQ4lXhJ+ARa;cp&uaR? zi(3*-sR&r)DY}ytc;Vgu4$=_dcHC{lA^Yuxs*)$;tbuH1n%>1ws9J4N?+W9-U9jgL z^5>G(A7|K|?yNnSc!aF*Z$0(DuR)iI-ED20yPy$l4yV0gdT2bw4+9gWsgGb;!rPSP z>qesA@`>uCdjR+R z_)qB?-Oztd4G0-seDA$A{*Cp@WO8tX%XVY)wRGIg<^J+S@7W1%H9mfMKF@s>#bq6Q zyoB>L+=)Qet8cP!ASdCBQE(%Vy8oAcz9z*0A_A(KRmCkV2wXnj-p0}j z7=y;|ahCEapVPX5x3urD$!}<*4s3?|J^flOZa5u+-Ut2|#K@ zd7H6W;+Kj?(2wMICtM`w;W{k8NPROzu|LfnliYOleG(lo7U6xKYCLUni6TEv3ZSg` zQ=&jq`qxFJ1aF`rTK-6Bh`4pMdey)X>yXj2&BZMRjeT7AcyR=MbkdiV{CJLY8=wvt zCM;QbC2lM!tKEXta~13P?U%_u-Y@4StYMxYY+CMEiIlLlqW&x=glJ_^$$V zBfn*Q$LtXG-N#;Bh~xUjSMe?Yf`+m8-{9mAy#(YC3H}lU<+KS2K5*^RWSFY>y*||I zPl^m-`yZ_tMV<5&<9u+TTQsQsx=sor;0)f9knsd`RM;tuAynXRrT>6NZXF~bwD&r%re3K<$r%FJn;q)Plfs{BoxNPOCG^Gur z{8~d~56szRp0~)*nK%V_w0-k8F5k3mF&vrl61g<_;dS2r(UI_fPgw$bF*+xjSMSSm z5*y{hh1#6!VLaSfA#Q4O!VG)vP!T(_qs1-6$v5m=8D!@WW#_<&Tr@`4h>@6xZlCu3 z{e5vZF0LW!H|zW2z5Qzeu{td0gcYz~>EESB=x0K5-Qaq5F1?SCP|gWd7AtvVEeYasY95((Lz9VE zC7By14?O^=hys0xO~YKiFw8q-EufQ){fY`Wa@P#|zzhJ_Ykqw-f_7ysg7$1v1GLcN zC9=@-g9_)balNLB(Z)s5+GliT8&+ z%x5;(K=n>~3$a4R6pNB;`1q~u9avpI*$9zg86>%cG{v*k?BygL8;y_d4YHs-E#t*Dk%vnR z09NZd4BZ5AfQr$gpHC)H>h+DFmy?Gcb6C-pdj5nlt@d9N()GL zgLHS!|Gb2If9HJv+1Itkz1=V~?-MKTb+5HPR~_?@hNT>=ei|`k!p3`at5r5Yp8yWOGnAa|yX?DgAhkJ%ezo!GP#EUqz^bo5aX*7Hvko z8`dU-s~~+d)8@Nq)u!S?Txp2OfKZk`iHZifiU!IfFMt1ZhZUE@^q!^Mkup&yvPyndz!c<;!y7EKVG5#~HdMws2CSWp}&0LFw3u z;mpiTj7Q}%O)r~2y$fo=2Pd|JS)z@+KR^Ik<{a%mg>+D%;{QRkM84|X>9&U5_+f^~ z&)y4Dt~ic-)um75z02Fa_DZR!3?zhwh52ca7xz$qo5kMu+*ZGX%yYs>eglaY&HX#_ zCuaBF@YI$%Ir~_G%L|#uizpm?|6)~x!YDb;A@?JX!)N!>Y$n}#`g_yf`TSWOqe&X8 zQFyLE?+)+j6v1r4CZ(e-swsH4qr_(3?a^Fls}wYwK;^l(;OTLcOCR%HLNO62#azDi z<+fR^V(tXbusq&t*Zj=PS0;)4S0>k;r~og73jK6{|6?yszmEyI*TLRsmovcyGgV< zT&zU?Sa5Z(3$=Vo25W9RIdsdVL#+IEd=kziDHYF;p5H}2uhWS-%=}yoz>R0#o2E8g zetgZ%UdDSoySk3%+w~B5;IRhjgbYS>atAmeSiL7#p?mY!sRs`JyGskDm&6ak1;k3>v~%GmD6HxfoHo}9Ch_Mq&bq3vw_&jVq-5Cbn zH9AC~>To3(IWXer$wPjvg{)0p<;T91*5tHZS<}2t7h`;TiWW}-$#!qXZS9b6MXTO<=gMjjfm{5URQ1 zMXL0yY;1D6y7w}BOyshAP)wpF*9&=EzeLCLDoZhiz1E|V>K0fgi%$QXG(T6$Q%C4& z^NmGoZJBr9#}b`W)Wz&0jm!NC*j8iLYWPWB#u)vv*5Bnhi?E>BZAj^Aawc|<)f0VW zJSa~CACJ=AxB-{N;#KILIOJWo>EU!KTTt&TiPF&yhy(XxVqxY-@z%z~;7u<86#;cG zb$gPnmPN^GF1jJc;z+N|9|Og@Ss95ncco71yJh(GQ9MqG1Tt4 zmt^Xh1wHcwoJ3oK(n5_1KXi&i>r8f8_kzg~!LvLyo9nT&&+2k>NjCS`t0Eg}-YMPw z^@r$kp*QJ$f)e3>?CiN`bNxT_E73;7(|qe@leeUFSppb zebPKfWve7T5bQYfX@dPvZ}){|5OnZ1QUXHq#YfMkU$Oe1_9nB8 zG@t=JCAtLBx8HcWt^T1pS+9z5Tp6sW1a@ggIY|{LFrdd+vU@voRBuVBJ#KB&aAoCp z;+V~%;)%6Y$U5<$1-W)cATkG!-6>afd4K><-yM=~SA5=TZqVcXBGG7RA<@7&Q=jJv z8vonS1v!FYNT#6E44JSfiUQyw3bWhk2TO;*w$%2j%W7L(#b||XVL*Da1+BevOHZ7q z({2fPaqN;e1?J#W>`P-aM3<{^KHYBQY9irjZ6V=_o1>Tg zFBb>3I~UU==ZhqZq&x<~EW1PbPSm4F3nG|1%$;X8gPW>-f8HSD=w4hWvV+R@WM0Jc z*M5dmU;?Ujc97De#)pfmA1^|lW(LBgCLpN7*YtdMYl&{M2X-rR~~H5{(m2z?yWb*Sua>M1LAy0P2~ScS-j3Y#6EvjMKh0@QcU9x8l$N`o^Cn1h|q4`*BBDr`pemUBw5gS?Di zEtJc%x6LE?WRE2j%)fF~)Bo7Gfe zZ(Pp4fRELa>+{&Fyb7u+P6AXjZWs6?DO@*Cl`kDUW-p0TH^ z{|+Rjr!`5@7g}C-8m0_xX!RIVp^y&knP8!x{}u8ePUZVbgj&y$riH?$>%8Z$J*7?T z{R@&0h>XDkpMednw>Dy}g!+QLq%QhF1t0wafJR4bR zyMGi)SC%QlyLa&<7J5{tQdLc3?YKtRGP=xDIEWgoHG`%q2{!iQuk5?E$JA}-RjH^W zRR^mYfPV}5xSLLu!RtWI0xw{Pc1z}sGKTxixQo>+PtjbpLL#L3N?&=p@ z-h29x5y;P};A5d*Ph5064uRCR_H?jUQ=)$vJKGv%a&C!yU=X>}DWSdI`$V4N?4N&KDRl zyOpVjx&Rq*SL|1%`q+}YVXReEc{%guB}UX8<2Gfyco9QWFnZFTSr2@_rdj3`0NGgX zl(($Za9IcxJdVYpi5cUB4IJU2KZ?mpkT-oZ+dZiLrc2+RLqk!#Qzsy^GjI9RS`>gU zn0Y9Xj8F*t_hg=dS!Y4Gxg)gPG$*k4O6Vucm^9qa4x}SV(ctfF)_nxaoU|)Y>#bwo zOmX0=y|24bd6SmoYGm!M?z`Q)>C2x>s@E4FDT-NWCvkI?sU9D?aCpx61*iJ@j6N$x zm00h(*m?R127}#vzIT%3l8b}`)J=;TyX>E`;)#H8MCnJV8) zyi*{V-yJ37YojIPqnsxO3wGx8pDM4@8Yw`SNrK7x+N!+-MeeO_Bz%!^jBZc5yvh@q zr5WemcO`0?D4Hfjjtx@($yj#XLZ1k%#DAsD{s_b%7Y;wPWFUZmzkX(~rX6i8;I8et zpP>a|N0Ppe19YCTCoBIB^m55m(eRaLg=GHVUrBZ=&T`C(x{Ym!L-jqn_U61=o-g#>kp|ezcg($5Jr9n`wGKiHT@I-e-(J zia{KpGalUO=|08Rn$WxL7<;Q90?n!J;5}X@iD9BP=420q6%i4w@W^OP2}s1sYS#q_ z2KoBu_|o6!`@xb)EC$k0w)=gXHv4^sG?FSetpuvNvxs6wzUma-VxDo2*0}9*yFy?K z9GJ`iHSTte-w`h2Zkf$sL>|zcJ4t}fqiX}nFh+STnd9!V+0)h-RrxDo zmA#u*8Yr=dUg#h6rYD75s9^F2XU?EaADAn zpE!IS+iy$-7gnzM38(z&jE}`tLdnk|kBJ$Z2?I!&kB_6`7>DD4xbKb}1&_J2Bd5UW zJKq}UdO&aTysn~P6JytK7H0)ZxKCza-qu+^qkYEvm3Og51mDdw^Km@baiFBdt%{@> zP01dJQ_I(Nw5S7s7<6*~I#$p-!`5jigLj`oqM5X|-!p!{MiwrCnQzi`yAA$9H9S`$ zTz^qcszE>&$aQW8+*uJCvbJEj75VH0M_VXjmOZcE?hjGSih%wmH>9U(U6~LgaG)I^ z4Du|*Jr6)nPdp(u5qsjFGavI?6K{FuiKHoa-OGc~b!N+INbe>EwU2+Q)VC5Jy|Fs0 zl|K+j%U1C;uiV~J(|%F2lH>(lIL#T%NOF1&{^}m+8a#p@dC?q@F)D4b#tx?hsOm<- zOs^8GqxFZ3(y4XE=-U)Kz&`ilam6xZ|CleZV3&-OE(H{eA#9B0LrA_;kd*WwT9&Q9 z4pWL$)^~6|xid!|d2PIkq-3N!bYTBG^=XiP0X|>sM|Q!c%y4|1=cEJp)Rwd>&RvkC zYiBV_gxeX2J(_#^C4G=M+16xvEmoDAJdaKBusM2kRH=81ZPfMpYo#sZx|0x+>h$QI zt81v{HFBTs&QQd7-w&PqYX$DLv*-!<_cz)_j=cOakMmy@D-6F=So>yk zQgnnCCw#M@-YCA~W-GHAhJ0}^M`kY>wJtB;g%*jSz&b2jj}Krw%69fU%0`99dV#Js z3HX0g9YR)Un6T?^d??*g=*0p>v=stHIMiEnHcN1sm3(>LvKS0ys~?9j?b4yFT#12p zlEwAMnX7!ta%1jRg;QluXtAZb4Bp!b&P zehCNtH3Q%Z3~*$Mkg#o659IR7I0lpRkMP>?bj}tJP!PwAXp0fTiqGsu=**tr;3)Q$ z!HvK1CV~U?9tsT~)!*!y|M;b=iFfzhP!RdOo6hjuAQt#vKA)yn)|tD9=H>Y@)0~Mq$`KVA#a<+9Sk?BwjIH6Zvr50a4O!)>J%1Yot4MMJzkd;_% z2yk&e(FoX|d0YVwJ{o2SM`TzGN@!7bj+e;o1PY&8VSn}rf+YomkHgvc3O z4wV1nEGe5_qy((NszExpekd(tw4aWA0M6m7v9_sxtwmZ32(?SLd}+g!ohwhySlVy0leRSAqtA8g_8 zotlq*{_Lk&HSgF_tH(xM*aQLKk6M~y$HwygF1FsLWukTAf+#I68v z45qC;@mibO3{w$>wcIXq5h0-=BGY>uAD?sR-oK0N+7A8=1hzW)ctL{)q{KKuBg;?X z4~U3}WWhiEyZnc-h*R{ce}V9wgr0w008`zh&~N4fvM9x(U`g7+_0e~mgy4Zr9rb^I z{j)YU7KR&#qe(~Aj&9VN4nBNbUlW4xR(4UhQnxtbK2ZY7%xEHzwULvj6PEKpG9Aia znPf;~_MjR*gsprlbZLXu*>FD@8eE1NNmgWaax7|wl?dGmgaM``Budg>U zGrKAf_{6egHJyFP@r|Fc)s91zplgLD8f+?da8NZXHy0PDYdn_EJz6?}FU~n2b;D0< zat5d7Rj9LD*KcOIULcq*7V2mI4<)hv3P0V#aPY2lZ0LE||L;Ki)Vg#pH-3~joNG*T zuO?W|&Ta1iBHIqu^4-hkjbCOMaZ$O6)FxDwv2W(y4ZbNcZ)WcC9vm5w8W|a>Cdh?7 zx}OBQx&CQpYl}rnMy9JHMFhP-Lq0xpWB=w;hu?4WeNS#5;T}KRi$QodkM5$FxP2!+ z%;zsk#-MQ>GbDp)@iZcr0Y8|}oeRI76tf2`YHd34SOhmrVG8x-J*ZMCNo8+Y zix;~I1A#utG1>oqg50ZWSL>v|PQ}OpQe=R2HHw+$Ti*i948yD zI8A-2gDqWBla+l24oA^hrwdvB(X)nzhm^s^69WruaPZwxdsQ6ZPn=%c z#FAM3rRJ!MafuPhBK_xMTEV=VHiQ%eOhz%2)G-^T&vuhQvLRD6J)L0GbfvoL960b! zUQ{}dI;N_^5JGZ3t_3)kcK_Pme-2zZQ6?dYT-sMFipco%O^J*?P-+uQ1lw0eEq?6R zolf{V{w}Ni@3)!0njD1zki_$DW4Y{fQ-K>Hqp{!;>-9qK9TBf>rL zEo+FD;m2SQbIQ2)y%Yn|6kR8G?qhl-d(T*v=ip_u9Q@3m|4WZU0=2ef=?W7M5lBXGw!5poI4pR0u4Wh2 z>?({+b&Cbb#!cUp{uc3rY|(RX;?35?8>)ksT+GZbn3P$ee^Mvwfw}e5ZKul+*`AA&~eb$Yv#_CHy_bzdN75{i#ZmbG#?E~ zsf0|`Iux5dKUR0{$#vZXSX2B8C8tNZ>-5)NqmQP6#QTcq#i`YY;JobCj<2)EQPEm* z@hi4zFr51i04FO*WtQlFK;RTC9DV_&U->Tw#_7*5NuYW%*J?kdX_thM8PK|ya`Su% z#>02(Mj&Ux4d;Lu3G_*#mm7>N?@dwN@I3nQMSeG@gMWyo*tYsL*Q_bi$)#V!oD_U+ zk$6;mOXxI*$QQL+Ki?79P5!*nId7NRHSbnhVK;w6qulQCQa7*ZR(pxK!Xv^|Q0W3u zBcyZ_4QAhY#K%z|a7r&^bM~+*yJVSuVUe>MSdtECT`3~$OW;*j_jJIm?7y4kgc@9% z`?Y$}ck%JlDBDtpqWQbLMImexlJHNVr?|xPP-gGp*xJt^gW4l3D zg<+w4sihKj=1AT${EfIE1>F;lvT#@WYwmeUr4t&CocPd01-;BSn^T6z?eQ8xu{B8SvkV zZ@TpCIizCzMiKCVr!)!(W7hNo`+QVgp#Q<$hCqwxVrU?6}=0m*;4o+FZA?=x+y!{a%@`q^&Cj$H{Y zj?gL1CgT@Wn0n)eY_k|Ev2POJPlEZE?>HT?Xp{G zOl)jwQ&W>UKZqKDYA?qSXr0k&Z<)~wCO9;K{BzsHg8eun)byv(`eZ38C8aqNxmEhO zmKgji82L+EkQgLU8!dCw0U=*ah^Z~lwXB4MOY@1wdE5=xJ$aGbcKk*#?l8r?!A}@@ zr-Y;R4Db5jUj1)nb$+S>ADD^9o2xWSe=@^P82PN}61$Mr;Ep_jkNntzj|@7<(}`g1 zc6HPqn+{5EFGgo-^(_qzZnXxDY#B6Ij4f{*jHXvsmokGxls-K`$jdDY+8R1=v(>eq zRDJy#33`e26~*YB_1BGOHP1M6B*%Kw0V58srnXq2p{8~V{QHB}D^3-oBujDxJACfR zJ9k`?calIK>Am%Mg!=~|*9346UieqZ1XJ>giv&|j-Gup4G4AaHs&W4Y%M&wkzFvAB z(lwuq18`+atur?qfD0sTlx+Ygtg&WZzg#UXg8Ox2jnYiwXi3(Qw zgBMttdUJ`Z>o?sF?WMZ&OgBbWjz|0Efq>R_eaG0#iynTj1D9FM%-Z`2tkx#e&b)GP zq(JM3L8*KK{YR1U+>SxOX`gki^!LZkLLh*C8~L1>`3~4Kw^CChqr}&*F_})A&oWaY zUc6=_V=CGo&0E?WKXlaP#w8uneLb(6Jk|*W4RQT-7308Rm^0CZ*|M0Mtg zTZe8X5RRt2`V}jNA&RycM8*N`AC3Y)i=vz&kTA&_T&veqU?ZQ$NOZ#r*42BINvxx3cZ@;4A*GYt+cTz~>w zy_7Id{Sp(#_JC^G!rxq~Svt{dv1`166x93F);=4%5@v2rHtdjf;W+Ec9}VGl>1o`r zOKcpixf-%GmH@_4xtwfKrC`$J?Hf00N%jXYBrT=m?A12H4n^J9K zO<2z1e;>;+?ry((?%onS9!f3(;gH4x*VuB9`k;si!!k~p5w^MAUDIyQx!-rV?B;$) z3m?Euj3^OVAo)!egv{s8uva8>8GhA$f z0R$k`-A=VU`9Sd;&yYbhnw3vysUsZ?!UdqoqZjtfiVYXdTZGzVow7~Q)qXe#DqK8C=nv< z2Ni674Xb*0^E_V4EsHbCdMhX|RP6w-eR6yr-u4|$u$wHT%F0vgv-1iKNXhJ5v@;~t z&fa@6+n$iIIop0X+WtK0!>i{L(L;ejL7j7RbI}rLK0`$q$cYBfFsl7Z1@F-9dn1sC zt8m6QU_O48r^@tJK?2h{2eip;`(YhxsAEv=3gj>lzOlF-0I= zZ(sH4kgj?|)~+o(d-4O=4B?gypN;}@+e4b2a+I`Nr4gro^xrJnx%=Uq7a+1~zwSo; zv!KI`=2okgZN=*Wag)g0E&6z!W$S)qyG6sxTf-JKP920^WGWSz0VIr_bpa%O!xk0IrphmZ2(T(6w*dFu(Yn1hXW(~g#U_tgYVkt z<^SLwoZ&b;oo8OfLE^q*L%i>02=a6yjyK4I8*!&ly;??da4LBn3QuiF$3&RL`MeDMHbp9owh|= zY4a#Eo&9*nF0#eZ=SX%3U-fxH>`TMDomu_BO{E-%WARIYo1~R3x7vt4vB%P0w%BV= z-#Sl2>jhM>xsneoqJ7fTBv-h7n*1MzvWFf}TIJMT`uAm~@gfWUQYXFi%1LMPa$F?G z(kDkrSbpFgWuN_TCJw9H-@#4h`78aK2 zLr33Q0ZiXo_MS$IhTCKd*8O*{MM(-XMbUwuTmobxn!^`#PK$DELJ4ELcr&|IFCeI_ z634PbqP6`uki9`k3`?tzW>2IXK*~Gp_zrQU{o}*oqS8`%S66P})PQ2ATX7uLKGLxq z6JR<-Wvx&F#D-}mb2mJA=c%XK!N-(q6ifo+rEHs8cPldTmwJcANTVaaoueUN)UK={ZZ_@roR1HH~1AA>J&GnA`4{$ozCh?V)>`|o| zXE!i!CGoZY7sFv;kS*`vlXL3$nhuGxHfJMbHH$IRmrl;3(AgnurkS-O$~pL zy~9FsSMaN`)D14Al0jS+I+9{3JJ}%!f=aH^U=*tAnLn(`>j1KUa{K43uC2Ct7eJz< zGGr2hT(Z0B>xE6s%(jl7MbaeT(}jzhG58y{sRK+uiG#%VW!HZGM*61i3>H9-d6j#P z7-GoqDMikqk-|FBd_Kksesr_$h)0pRG`<5_G=xQ~v_NnusVnrf;mLq0_lSEES6-2% z!SEJiP&*r1Mnvct>z(qyhLAq#-V8=$ZssYPCLYm{2uo71=qy}zu5k!^JE(9M_@}{F zJSBp!^f3T5A*JP_$E%8lh7>5j(_@Ni)MN59kNHu;hFfd|=;qN^Zw(pu_pc0nz1uyR zVU@t_#y3f@v#)(i>6PlyPqNL7h1q)(0`!D#?yOPHldEL0S@S^Nv45$I2w*MATP35* z1mc{x1!xRm@y^WMPW@>pRX;)wMzzI`{aY>6fqVZcQ70g}Ul?tI?Gngw-EhE@yrN+d zJTkM>Pr%CHAojeTF{qh@4#r-vfb2hyTML>lU2$-L&k)njPDU6WHCY6hCy; zOe&hDWe}d9tC%tZ6JR?79aKQgP|j!JRx|MC zfRYpp8@{H=K|d zwrkr=Hro8y)M@e59kMPu>G=yMI5(|sctwDG&@ZyZnv0wr1;Wf@7Rr(Plmv)eGA9Xs zFCIpbBB%dmv?!-LCOiy4R}(g_X8 zZG6-F{w)~t5Cv&@`ogRah&6YU@6)msuk1Lf17I5v9q8FAx^zmESq%adQkYezxl)8a zD|ZLe5O1f1+SsqAs*i93n?VKg6Ee*`yx_0eL4ukmqZe;cvIRTNSf!S-VQPYhQf7J? zjNHjZ%Ni%CM5|>?J|2da^#7N8RU7@rueBwiSv?mqkB5eN2c*lzK0qZ=2Y$yh379Zz zG+`7twDjji8>a~|Yqa{)1oynR%a=*<(OQ36RCu>T_x#Gosf-GdAVW#rlXI%S?s4UR zeEKO@r1r{90U_ueOLLdu@pH2S&dCY79|=upvjL~ga+zS0IXxH7fW+1W0wv^PFJENf z&JI2JeN@=`zJMGq;$P)f7>qfXfd{hh@&GP52uV@GAgKM4a7Y^0Vmsu-xOkLn;PRXj zXTa8Y`Hyd+CR%XAan5O-iOD6&7gUu_N7+x~WuQXK_AeL??ePCh@vER{4|-_&1-Q8nwVUt<_39 zt+i|#96AY#7tX96`jyaZ)q{E(H6UFUCj4jRR3}cJ4F8b_KV`%GO|OgfeX9}JOM&X; zIx+ChLAS(-o$#*t63#dawQ>gk(;%~*Xak8Y@RwBZkCHi0iHbQUZk!VV*EjrXWt-^S*UczB%YMe^lq35=`uELe_*Md<{Xdxn5WVJaN|jY5KuV?H@h>}6p}z4? zUrepUADt5znX}R)AQ5iy9|Qq$On5F%y8a@X5velZSweKnC5{V@Wzf_Grn3rC3XUG<2vslcp!2IHCExK##=e z853Ii{`V2UXc?)nrFB?>3XXabK)+Uq5d_Z7vrcqG(NF9JGd2Z7%U7_# zr!m7h$?=$OUOk(r7gGE3_M0Cc?GkOu)B*l3N=F>3O!pAWI&;2a31E@XL6k1SJwawOf0-z>AP2X zLBVq{rDf5_*xLHzk^{Fjxd?f~{>l$)a$vc^2&yYrz(+K_txl6HwYJ#Go&Wh$P?<$W zQqpW;2(%cm1iu8*xzJ;P2LthkPJX{*C8)TT&IrAVi4JNhKt_(`EW!ihmc()u!Oy+j z4+(M#wAI$WGrkRGVQ8;{Dd29UBms4xf8N=?eE5Z$Rr^wz#O!0NpfAaz`RxPN;0MG3 zO?ph`WGII0r?~_ z(@;Bj227o4{q+k>QW_1PB0UN$LsG$#MroJuQFk=I5%Oabo$++qXT#iS0N?18bM*U} zoQZhNd0`3l&@9c002sVvD*b2T1Mz2$pnGX@Wtf+5P2AR~FOyZF3r8^We^I6z!iMhz zZgzJQo(;0At}_C&6Nk{?V5}ENY%NkU<||8vhK90ma+0F(ARF}x5H)e5OY2+6UN;jH zn&gBI&tE5=w^0Dg4k~6g#)W71kXhXzr=kiTx*G=@b9!yE`w4IA{Z90E(Y)XhyhPR9 z-nXAO!LXo!gIi0j@4L*{^1L&iC*2NhDq3O9w7UZA<+1-ukGNG zKr_R)sMi)bQgT~^n4{-6jF_023)28L69g9iUNqY-ve((egD<`BL9{hlV7-@h)653q zGrc`m9IE^>*akfoG6KBr@!fFYly`fBV@97<&W<}OOr8=^D?juxel7)r=K4p)Y>mRm z$8sn?x!ROXn5V8*d;GR24Fz-wFp^L0<7&;^gH8~vj5T`()IA54WJ?aN{igD|sDSW& zC!_6Non4V=pj~Y3Sn{G>d8C$MoHPmR2^%{2T!s4)=7O%R5M9+AEh}OOw!R@$^JgZ& z1NZ73v3z^uq?a-dNiXpkwe}upR19KZqin*oBH*_>jFj5Tuj@CR^wgu#Oo?OG{gDEZ@RG zu$j0MNm&j!q4!L!?*(bFjJXIOm@obO`Lld1ya5MM8$lx2`J8UhRPpQ%pmcx2%0ga| zzxz?pz95hYK^aUvUJX8x4&^Rs#)t)e}9!m_oJSh zTPzrw>0CAX0gRRbv_$3Ip>CsR#iRCL^Xp$e`ALL0p^qjeCZ5~@H(?61rY)bc-HGCd zDAfCIoqntrfpMO=7i-)RTtkDx9*DT$zJ4272q*&sEMUT`VIz z;?(@0&|)5cy#@BKBr{-IPkICCLUgTiwe|b$TfdYUh1L=VgHzc}Q==jy-@1r%gN|G?;p|jy*q4nVOWI zl0rJ`QX2g5WZ73oWrhk{sRPBnidZv7s*;#$UyG5fmAx?E&9<_G3iz(rVPc@h;FRaD z4{FwVxsgAYQ3whi$RFe^tDJdb{_w+LGcv?U*YA85`mw99caO$z(ISm|lp9EoTE~R5 zM}6~fM=n=?46>~fV$b(DBt62lWVuqWz#r2f%h#IY#^CFUpe-}3NBEc42S)5 zRp?+T0nZRbB$u-IJ9P#m+zSP^kp|tKj-VqFCogYRI-_CgScydufn4g;@Y3X6q$v$M zIHi`pDX1n-hNnIPohyajv$$PfxkuAmr=3)OPtcaT|nd3ti-AJYo>(6gKY%9*^y`hX~5d!aO zN-PHE(c}(ke4Dqk_}ZMXEg?mmD13k=iLkaI7oiC=k;wQpKy`IdL;M;J7@=bM?X%L! z*v~gv}nt1cOljCL`yK^qNDGEmG5|s=1>s_X6Jp=$qh{J@@1zK)laM+ETE0QQk{C6 zI5Ao>o%I&e{mEzr;4%$PK1Q|#Ae@}3Pog3mClkCG?iXC9nkB-flIanGUBSpg7H#kC z?Uj6M_q=-2_c(o$gWX5yKJEb#c3re3j0jt(8~3oUBAhMEo9w+!zH;S+eRWKr;9V8l zU%rl({uqebfYG}Ha;*QMnrNo8M^(tA5g+v2_P9zEkOwT=x9Q<|EqIUJK5kr%$k+%$idK zlGWjaJ}H?ZqhTru_(dV2_gVP)slH6QR|$!+#RLKu5X^iA17;z|>+Z)_W)ej69KJ1P zY@w15hpd{l=!mi0V$%B-(bGM16-`m#y)m5;O?tO>-hg33uLtW)tAqq&#Mbn$pYY21 zHc)|Yo_7oHM3_ypF9+gbpIU4%0B-RxS;Omk@J2#)k4f6 z1vfT0S;<<-jAW#x4?f#Iz#g_>y_o^X2{9&PfK3}0AFpY9*t#@GM2?)Q(!}o+4W4yi zp9P)F5z~l@)jys`P%t(o|7h(|5Qlx|=3Lk_bi=0XO0yxX;2V);}buk^_Oy3+6Tf zClSp4>RS@W1nLseN@yw(1~@3r4j_E~rdG~2cvgzoN=xV#2b!I@q*sqkp}{@(?oX<9 zZxj1ol4(_?3;%-hRxcLV#`MgSfq{Xqfy`flTi7_OKXw^7A@+Il6ciNO?u8^rQWk5a zh$t{%{wfqDLHcOqd7?|zsF!6x$)sv`R8-W53Q92lF?H&yrZ)ux4i3(pj7D9sY?16P z7QnFuispw99QZM*a+z#Ln5^oKzM@{`M90GHgDz|uUgetmHJ0}Vis|=)ulqf}-Zgvm zzCcn)Y5ylnP`Pqi!T(L8nZd&asuS~P9hBLvlTpKlmkhcw&_zFVZX5;j<)HuQRO55Zwa<&zH`M)zY{ ziA%8bdFq>J289pv?+;^QW?tGGii>YH~jKt$pRr6jARWE5Nfz?2$n825sZ8%{xLxjE0E~I6OVHBZQbNok5Dom zA&RUtc@8L?QW5I%=8d%w<0&|9tqI zC2_C~o4rk$M60fxgO0MHtHxeAHKP68?@QC-O;Fm&gkZlgjYoSCOV4X-KqS>jd=oa4z%}81UZ@{2cL~5JV!< zcay=urMDRianjUa$lqH=+{^a+s9w?J0^6(Jw8Q~Fs@ZkRPTlQO3+S3y5Sr?VY#*PW z29telxZpCRpW(Hqn({{f=(dRx^aEpt{gXs^Xb#;U#_(n6k?bKmucE@ zX{e8rNabS9TJ?QPzYFsv5w5f00X9z{uXmg4+0Us{Yaou)k#D-FtAtupK!vrFa$b83 z4m!7Jzeq5wwMj4~9^5l_aA0HT6BV|NGb#`20`uRVCtVh3`T6rwX3v6sP42c6PpV=z zdSWxzwfi=)U<8xrH8V_E$ZNP|3%oJ*L`-CUL5Hr03l9aJ$T!`CRXpPMbKez%3AOt@ z8cp`hj6Psj1(?jn1A3kuP1s_Ip*SHzPCph*bysIlg2&w$wqOTy<03y722#TYN_#;d z3QY|KUapzaE2qFNFpB+oQX-gu3VwOoj%x}NzSHnyY00dgA4P6Cp{k{QgH# zBap+rf8&bS{TqN!nBnJ#0rZsgBY3BNY?F;Sb$!(6lps{DgqE1j3PVMCPcQ|_1|PvU zNP-)XIF!Li5>QrmnkJ3ZxP2rGS~H1MqIJB0WWE9+wl+MIW8r00=FP|W2H96hexfxM zhnk2+bCbIM3b;>ag*K;USUt)~#|yfO$VI;a^0_%Nuo$AJst%UU~B zw`vR7isQ}6XD5abF_~`Yz*Y*BhJxl2qr@9yD(FXv4f?l;#v4!jn4Fbt0k{OhaZW4q z&d?rE?KJ6a!W4D+*@te)H7r*TkN9hs#9DJ~lZBIVDZTt}gYps}py~=7{%4S|T>_MQ z+7PdoDG}3`_`&}LJ~C7vKt{di%)uyDbTB+lhR%`%&4Sn7p8kPOq%4h6m48l<@WS zwcD5$11$gHCt$2Rm`7{u>`V&4AAn3jxTzFTqO|eSmR%JSo%jpCJ`R~e7m@GYSzYr8 zK)(flm6np?`(79zey7g^zHM}lKo4ET+_s|quP3-|)rA3iU&^QOy1|Wx8t#&&*K&HE z@PGl{0LlUH4;~zaHOh;t;AM(yi=OERXQljCLAY~9!mGEzoU4qOdw1{V^-18di?rb3 z<7Ve>3199%NjG6jwv@j|F$)rPS1$RmHs*lZgoz1lK$wE2kAwKJejfY@Frvvx9npR; zWL?8fz&xI27GFoBM6N8B}-LQQVIn|@_dm6Fdmi?ASmQo$Y2hwbRrnl<2GM8 z2gizUu0=W$i_IMki~kY`Ynd?>;ACen&9nxC3%NW`j-neBGC`^Z+FuX{H9DZ!i|b}2 zgt@(H1k1o;=}@0*Xf*Z7xpf9DX;99bMLJGe#EowZOVnFHfH>fR#ndP9G*bqW%RS)` zPItCdV%K2wc=*RkGm|fy-F%UX)Zmr{~fo_VLu+929t1pk?Ew@$MO$I`>$h zMo=;Vb!U+e^oBfNnvmOx)kFE$P()g7jyf8|IZQ4)eVz;`f9nkj7;d370FKnFKwBN1 zyW?fAU%x&-wy3a=xhPqZvzJkH6Lj3S-jSHYt)vM$XpY`JxJAL0cjsMi^-9fQ-bPKf zaslSg#lWtYPcC^`dw6&p?yh60c*d*p~`n5Tk557{+PZ3UL* zGFsx@D<}&?%T(^J2ZFgeBYwiR!WpXv-N;7?cLIJ8+;HDCpdQgU=tx6b+~zChDnlV8 ziS2rYVIm_Fj30oDi@O-qrN^}YS%wJPZ`$freNmlG5@30ao&LCenL6sDmDN?Oi@g-O zaRnam(r`_!Zl{0b=i4n++5ZUF#et*(OB;V{;Dxr{1G1HiGLJ|B%ddjo#k(=y+YJd_sWMX zZd5tpdEBj3JkrQ{_cS@ujdj7hvM3LaJ$J^lva@l%E(@>a=H+QQMpOMgQ}38z$4`xm z%3h!?%W99aBl1eK?wyou`!Odyb+s9us~G9pZvHT})sPAxmwl%U={RfwL(qBn=U7Qe zaj{=zE|UGLl$6vz-|()Ni7f^Le8VcqQQM_ZilT%SjtEz9u98S9rS0+Tel{LIRbbyh zS_ykM^?cWGd1VD}h>Ql_k_Bi*uPbvqjJ8Hr0CW4_@0X?Guy5t0Rrl-la^yi6E$YxG zi*6H|y%PE8-(yZ>Io^Fq1%7fT5Hhts0lR-gsOP0;ilTgNY0v!glp)|b42RQyf^c|9 zUkV6KUhY<@v1Cj@D7;!GRpmou0JYi8p^xXPR{Pf5gYiRG=9RA3r8s~GHmI~8+=U!! z0T11*nA|&yh4Y?jZ9=1}gA!!~J)mVAur^n& z=eJ#ep91VlW=6&vGBUEcrGY~2A<6wQ0BxOVFjiyR^~pLfHld{&&?&W!#GdcALo?m= zZPvgCNnQ(M2rU+q%baaVNq4BO&Db~#x=ZPbJxV-aUr30I{6`tX2r#-oV#MIT#aGP3 zuUQ$GkwRCfG{PCu5jVDZO%6;(2>x40>jlXt!2qxY(7C1U41>bI7LU~)Gy!S?Q0z$R z{lRV5@an;wAkqw~t(-9gvJoS9l})AxqohpLGWMiG4ANIro8UQ~P8H?lS&lSR+RcZo zvVj}F7zFYnr)fv%CGZ}sT{0T2S_q8zUepX&@T@XPb^9mzN z@a~m8V*4sGtJm?Ja3x1ZOnFklQnr9 zmwoe_IuH@sHvmi72mLUEMtPBiAqp_I=H}+rL#*uVZ^)@neUP&kGLgg^*W(h@u6#=y zzUD$Jzn&bZX%U^l9dO?i=Hi(737m}EQ4CwhekrfL4s%M0Oc2&t@GKPdXvrkUEPyI> z4-Awsh-YVKL)(89^F`w!0O?+hU<0uI+z!AI%TSC8%thD-F~q@H`}ON8D02eEiHp*+ zhro%(|2E&)*!UXwrQmX(cb+9cfyV@-0Nsl!s<01kliB_*PgRPjI8bdbMjcYD%hegU z+z;$f0_e1UYtRQ6%G-jMhZK?nH5sZYC*w>5yj!l`JSZW>y7f}a zOvOuUziC@HQG@pdbA8Ay7#=1T)JXu%aMcS8x1LUShyqcKDZ>>bBct1;L%0|F2_}+} zz)0m1vgC8hO16N<0EZQGanh6{G#vG7T8p3FzXxI386cI!+7}L16_L1LQ-;Qdwx%_( zYEyQX>|guzGFkxaQyGsYmz`$e%ED3U5Q&jpt#AM_3Fk05=Lk7?9nc_u{9f85R27YZ z=w(@<=<^1~`Mb|8Qla=4;=8UqM}QhdP?MMpMPU^q)9X%+%MPJK%MU?8Dc~aBaZDg1 zC4G0f?5|csSs+FY3zM8pB>8`heR(`o|Mx#dsHiB)TC!wGi+!gkyNR)6YZDp!zGX@8 zWC_``k9Ec#lATX)l@y5?*+P*pw(J>(-x;d+yU*wM$G690+}ph~_rBJ%KF>L9$dn;< zLc4@`d&j*i1iI(iT&Xjx{Q#rf~X)~YHk&*bHlcTE+eYU{*Y;)YE5 zvOQ&)KiZ!>;)pIcF*Zh*l!yQ#JMw7mu6uz#zP>&7Cqeby*#?mPNB}{?Y_1;`a+|0R zUP&|0A=9QOcOuiV1|OIz_Y%?8p|AE-o%YCzZ(1Tfo@EOpA$& zi6Jgt+zmvbGgmVa(7z`{{=Hzds_3w$2Kf>?JHqO=#7f5E?63@VM|7T$)7lHMq1lqo`mRA&vrDV&iJhkQ z`*N;2^Ku}H4TYAMmOg|s@lOEz!$a7mVd1ZhLlvIWMTfPjd+2X2U1zn5y=L@2rgc`G z6%Dnq0n&7}!WXHnP2V@;@l)UiudaEZ&t0Xl3_xYbwU$1T*N$>f{xIsuQR*gvh%^gF16b4T-^=|Vcst}Sv8?K)K!5Ot)^W5O;{iUtozfz-WmEA?ZyH-p4 zY(5iod9r70O<%)BB@}N=);jVlE5&a<*@J=L1km1p3)X?jZAw7=m-KLV+oW!L=i8*$ zTR8qrcEjgqXP>l6EeBEYrP#lgn38*VVE-4)_?0OMdOT>A5csZf6j4}EaL3CF zKukZG)ss&S=%K4|QmMp~?iEUqM*e>EuLtjB+TPae$ju59@Yk9@`I};`ap%tzA=&;# z1-E(1ukNF+51R6siuwgO0x&sH@F49+t>JxCyZ+g`gMmI1^;YzVa1m520~SIQYy)Ma zq-fFHw%Oe%biqdyU{24YHHWoI13sH(AbR0Ei zIxaP-L?RJeTH3MdE#o{wMMf`!CQv0d?cFEUTiq))p9~49PpDuMgfNRX-ws z_IB958Jp+h04VbT`u+PKD;+-$dMUI8SOrL!KXaTxrZcnqVYZMImxo?f`RRc+!;515 zPo2x1N5!cS(NWyY;p)Q7`aqjNDYcVU$);!HXOpzJ_=`gR^OWr?u@J0Cu|M5MbUP}l z>h9fX@B0|R``{Yhg?)4REd8GAJE3KrJ6P3dja=?{jmojnTOIFSzj%E_&O+&kQoAKO zD<=DAtRN&-*(Sx{ns}lH$P1HVi{0`bH`P|=E1dU4WsuCgA}H}%VJh4wLRHH5`25U8 zz(e}cCw0H2!(XKSHF#JDl`31Hi+QuNv-YM`M@m(Z)8ip4 z0$NSMLwfvKn=J1N(aFysqo@hS6RpO8)Ls>4hDD-!K|E(}C+!6|GA+*@b$T?y?qSyF ztW!z99|{qp)UNFWLFFI?)$@@fM_)-#SC@~bqS%h+Fd-_19DH)U(`Qe`l%yCXkE_>> z40%XhEjA=fPeWRbx9+&UK6S%Fae;e29V{njIwkKG%*g!XU7$3Y82v_6j z$5-Wt?n0?IiG23b5$Y{GffL$*^QQC`Xti>$oEsZ{8NW-IKN%6Obe1K^?Y}a z%+AWn&Itq0Vq%>g45?P2J_N(`y&e!1+EK1E%I_ zskXa&<=hHb3U-M7&z(sj?(x{{iD~Fjj4;bL!{_W+!Fa)&spVK?LC!7$$$waH%i{O} zU*Fu;V@{tGC$9E0qKN^TehXh)pH@kxv{SY;l$IV)(hh#Qa%#WElm6lUe1DHmeN%zA zcB38mK$@i5b??9**JHiV{s-M6Zt+NeXm~cJG&407&WeS7uf~dIwVMsR^}}QR!iAEn zgVWB>2WBW+o`Nyv1lhYurUO4YS8x%Cz*ly=uO918*j?GsAdfOdOE`x*W;y1A%;b`E89+bM=fhN!%sbJFE?}_T*1479K$|xvsI_>X9 zxqm7J{1GJ&djP0SkDWF|*|Ff1(9wP}(Gy>B?}MCRree3y#gZXKX@{KG0{U;dHv$Tb zx;QTLQf_UP3RzF${}T8*lH)X*nx38qONwF|i9{j*Ebyj#9f!m5#A{qE`R0g1Wrc-> z1#UIv0GR1=<-sJZ5<8Vw)MZH|K^Y!2+qJF#!O!aD+hz}s4 zMm&0i(A7NvV)2iD@yhKWoVvL!>#AE3mChTm%>}&wPL8E$dRT+Vwv9}y*afVp#tVRHo zbkq*#IWS{8IZN9uMU^5}yzKd4+NsbZ@;_^7X{e~Q(72t;eApw^G%MyRCar)DKdJ-q zmgh1tu+YDXx#k=@c5IvWxXUU*wRfS9PnpchD?5R%zBHE&+jwJ3ePD&^gf{DgB9!>f0GK>o&;uTD~6nik|+GOPDG_f_XobY4M0 z7&y!RAP!)Szk~i58gVWg^CL^->+I#u938v;`!M zm1gTmq$8rHUGD+)a|bMFD+*-mqj4N_hld3;i5x&imi6+EA-GDD_R+O~6%=1;mT6O* zCL(BvMXBkYk-$!rjC32U(U4f@D=uwr8S-Sp=0!^9U=&^v{MO@zmdGZwML7#m7G@pm z_o;MrEl@cUvR^~yBR|J-M7Ab9TmGZsHBvu2ZB!4&$LfW{5oV6F=kHz z1!^OZ*w*@iq`j4WH<($tMEv@PtAo(B13$hk#((oJVDE}`NPDifkC}yZc}?rhxc9f5 z^TMeT1V_Qcd%^$X-M$EgtbvH{`|%Al{#dX)e6$aLR$s4mA@i(V6JCXaypLFNxj15h z5d1x4t#|8yRHQ0PB^`}mi!;*Pd`6ZJsQHb#Y~17p3m0(f?FjbUhuS?n55^@eJ}niV zKPIl76l#iL!FHFPsCQ5M_C2*nQ(NDPXz+v?x#k~UeBp)7_3PK0Cp|L}YUh*e2Gesz z5^V>!W`<1-_+srtz_zGCn48l*iiqd4{?EBJH2;P~8HRt?dI#7I>1Yc2>=>l@HivZ{ z3W7`4iL1tpJiuHJD(~Iw=%9cSQX{0hcG1YQNO1GqA?rWn;nn_Y=eD$*oK|ylvvYvL z3XR=a@jhAGRp6F5$=^@vWx5qS=b#ReV0O?#HHe_6_0 zHkLZJKUh3ssYlb#PaY;Py7SI{Ssj3NfMpbFj&iLy3keDW)_`X}*4kQ_vSn=PF9F~t zKw|(DOWC5z9nJHV?68JL?MSMk^#@S?ai_C3VMd2+uF>}D;buoB(pDbOV-|WG4Jr?x zOC_$aXPe-84(|mU8~=4p?WzH7d3pI8O{WL31_s=Lto3i~Znko++8T}mj7x;p#Qw*- zy;%)FS=-MZr383}DHo`m6}hpx3*xFW5MKjFQj)V5GzXUk`8hPW&GIO+}&TuDI8nP8>N~ zZcA~mbrgmAyfn6wVl}`=7kNx)?}H$4qf4ePfY<^+h+QT3mog$hPP)AuUzAMkas;^- z5GSIkS<1bnBV2xq8@|dvY{dX}AkL`-MXDNafvvvvFSClhXe-*sy+~gtHi73@fzFPO zbj;6~;?c(%xxlh^MEjR`1>2Lan8kUCYkiBUGVWnIX)7PfINJbX@Nv)KQ?Fnez1=c*OAGr2J`cv!H{uh z&0F5N69SHmyB+UzoJ>iJy4u>Eczm2A`%VP>b}4q$;mK`1!(n*QqT1=6h*|a1F-67o zjdJIwib_yMh6aU;ljiZ-z$~y~v}`vUZgd?kr;Z6o&TC8AQ=rASkB)OI|873A_S&5#I zFxdXBC@RXdAVE%tWVM;;z~rF3Q>i>f4Ga-Lf7j9zNhAG)j12qux36D3zqBp*i!Y=~ zy9U2cl^*rASa~>XxV2Fv&%s7BzzX&bd$f<#8ItLh32Ht1SUwq$|D1>M*^Dy14bNsJ zi-dtU^f@IfeggSw;GmpdejK^`U$_gvJ_PypOjp?qx9r5)xk^>_4(wB?Wgh|W8_1wk zU$$mesKauzIL0BR&fOMO5Xc++&Tjhp_(+I@t%p4JppU>o^dMG9rz63yZoCOAXd(qz znbYeY9Z(Jk{AHfbl*5-6S;w1)FxP4rorDV?(gSH5m|>6-0rVD-Si{1LB4)ecQ79Xm z%!CBy;YEU*3?w!(-CTqck}ue(w`EgSZx!xCp(@Nk+@go?XIsDp z>|6qZcVmvJK7Uu8#8DWG9_j+aLf&G-ecQrS-touAXD+YQ7e%lKhOJuG2g>A^Io^%1 zL8KSxf6#XidvnhRc_Ef{J?{${1y%oAOlmrnX>taL>n>IjWX9xL5~gP7%I!S1L-raQ z8v{pgNu-SW1J<1^B>Y-@s5gRjIZ?DJTUQh=0$T)p#1hw-=%GQ(bc}+76DtQt1Z@gr zX#hkX@W-UTF5FOAJ;uSIt(Lu6Y0jiTkX|Pp8}QCPI5qU{Y*;yDaKF7Gwg?}yA`*O8ocr2DY>% zot9mL=B%{1i{s*!&r8i8I6n8C_~5Ngft(YG?~>)%cSzg3rGN8{orJ!wt}aE^Ul&f0 ztwGISj9q;prUQrvC8D^bBriQZJtVJWlo|=M5ZHde=WoYSRzS0+$iKI$kfuoS^Yf!4 zqrlqFq8Xr^^XJd#Id6V`ej67Tmv;gF&npGkE<^e{Feq<___C@R4@j-lPrE+rR#Y75 zkBhiZdO?TIV?mIbCUGUzJ*qZp_+I%ObLWR?<&iYxs}&~2Q(0oZ5V5 z6YK_*(Lb{<7)acz@SJV39~|cxQhcJh@2K)q%E9D4uY!se!=CRuyIY9SQn|;&JdpI1 z*=D->y=7>gLjtc!4v(H>tj0^Ja=F&5m*HxmjH*|-U#*{5o28laZEFsH_3p%^N(YUX zKb=~-(V3Zv`PDF~6Ifcopnh5Wy?#Os>g_dq6M_*309?z<%d>hi8IE2?970l6x}HPo zZ=!H|O$03V-$7SHGNX0{yHjbp_5i79QrI&|T{P;z9Ebx`)kqin^o&E*>6+ z0Bfg_sEmSd4_{U;IHKx~*!=i0!Oq@3X|p~pjRWk)hYGs|4GZ0`>#x%a>ThVxtiG6Jt3e!~9>-p@G-}v_?xXlnxa@+9bU8%dp_y?< zJG(cpUk3wD`t8I7c9T8v9j{2@)Z5kVVPM9?tM4{?a4S~sInyAq5`3CF!I6nk`^fsx zcx)`w+P4%(OB9OGWqS)!zkHpKWlr!UfSAGQmorP6_c9xquWqC(@L>9g zX7~zoj4wQ;rg0P^?URzClah{+{*JtU_SB2(PiILW=>nN)bVIKk6?lM~JdDAqZ^3|e z^C(A{A08X6X^wpLEJ0D2Q=L0IX$VAz(;z8ugxj2Us4^|@6aHgipjJm%>Q06E@e2gF zwR}CR0GLmo&pz)a;X9<wKQw(MZ+~l(#B>$_|t|fw=mz0r_2nhs1>x)}n zcAsA-#pqyY1hH(LMfIdHi!{qd?|1wGSEItW#LjpZ3scXmi5JCds4kdX6!XU@mV?xXt~;ngcTO&@@NQIbY#Z3o*H#7`$EK&X#I(T#k<*iJlMJP=q-A7Kg3m!q zJROn8jWt3(jtdbvbLQQ`f{S_DOcs?V!l(e&JHddNhc`<@%XZ3+#r+W;U4m3aT%%Vm zMhcEFK6Eaq@kK7Rh&E-re)%$m(TQtS-se6fCqkmC*oCAylM z?=3BOOXJ5B6C?L$tP!;{sxMAPuCwpoGerb^VQqmvPRzM(&^?1KR0a0SjGmR(LFM>h);8K-x@Y)!X|jtkkbAHMKqCF4A-lE|k~ToAH-_ajM1y5rq?Cx%}s|FpdE={4}jWPvReT z#JInsPUg^DE|-CQ^XSo|iH0(hVsI~N6}ozQRyoutRou#l4$&!7{~T7oxVdG)){W)q zd+g87G5R=JJigY!dGyj^YMlU%y3!-AW76$8FCbMlQgtw2M1x*j*QFAVKhqjDOQd&6 z7Dzbbr&H z-X6NSJ1FdUX8@IfMD|rbzpqo0e&?Tif1H0d+xsm^q}Fk0q18&vHW~f;=DB9#8vsm3 zPJJ30l6ds()y;D_>gB5USY>w8L9LG^=&+DS3hGCPJf{l1-uYRWn~R6sDoknZKY~0I zU0i&+d7V?y{}Gy7ZHa69ttYXsE%%PGWZ%tLfB8kzLq2WlJMVJ4fnx1cqE_aoN;E7P zzc|M`cholg1A5$vB!55GZU|b*%?_TSC0NKg9(-L%`lx$wLIt7v^69&+cGE_g6Anmg z?&!0$qmVT1UB}eUod7SdYMl@uC_g*8B_x8)@YZq5Uu$!{*`M4@=pZffW(;VgS(F+j zvX=JPnxxI#b&w4rraWND#`N&746shlAQ7Su%D*&hkxqHoWEdG5E@cc`Ra6>SV}eYC znd#?9#HrGM-Vi{w?ET)A*Kc=+>`6+}hPJ5Qhqnt%no1URHA0FTH;rOy^jd({Mk?8691gsRG{f`WLFce{}v zrqcb}qWAq%=@}VSt3?dd1}c`WuDGY)3~*wwjIy=@x5rr7uh9b8+SY8XeonT+K(?(# zqCxmERo6(1IunFvDR0MC%c0BWjsARmNI;;tn&Ph z&0avb)|laPseuQnY*8w!KAzY*!i;nungo&&94%21)AQD4=1hm`XYUcraWot0=q-MK2)PYK6@1i2SVczd0ao1VWXOp-hz2hLxFj&aqLq?xQ{KccYFJb{Fi^lVVSBlG1YYc|@on)Dbx+ zv{%Ut_bbhoV#8J@Ny#Vvz)VL}I`IWdot~gkKQrE?rfBYyXN{SBA#TiNGQ|S|&5VMG z@70u8URD%+^i)nG4zrvb1xDx4KMt~_`9Zcct^r%+V$K&}lH1|zuw0KQHxPn+9t%$} zy0);*CH)wjf4w};&KGXK4<#7i#cOrzR<^afgPq+(hmA)GN+>A#G^?bbcA zS9H4^2m5S$$NM8R+H>j?gM2(Z@|w1W8hmL{OZ^{`Vx|o?pGkdeZ-~a31My?-}rOx4h8ko z0~i0~P$i-Pw(|4h;;)baQJ58j41?kBRi!8y7QF1#{Jqxv5zV>D+#nPAF@;m<;P!fs z4(`}zKJ!`fBI3*fZ}U{w10Q8=zSx~B`yK>+affou+hUm#Su|S~+>2UfaICyEPkh8Q$iNXiVRE^u z=~JvSkA*=qP)GW8Gx-LGN)sAA>zTufwutpM0->O&q~v2L>g>@tkZQJtAE^cuQ@3Py zi^(|yKa3GA>I{Y$uauvEr}E`r7L^YPDTG_aPtI35rlSqHj&DtNl^xdXkeq*sOWv@% zJ1izm!nFEHx8EU_2W>fVh{xqw1)0?GAvxY>v|7G|AZI?z0WO6&JBh+GLa=_W;5wTO zJ?F304G!|`H6S%Gv0><4+Y*zJ0iy8oD#|gk zzl1Txp)Ycb(4o>W=;cGa9RyhmrW_&*m{S}=TSm1zRDk%E>ee45spR=r#3#GV85Be% z5#RXtKI`btD&=X&$XBpJIXfRxo{_wK`Lc_f8ia7{D>o!mM!ls-K((;X_f zw1>Q~H}@y=W9K4*MH(Jp*;vi(i9>g=_R0|T)40T(<#5NX5(vqGT1LF-wFcwysea96 z^NoT;=STADVl#`QEm6xEqDS|yG`uI=W;Zo8{db4V5ySOkvBv#gB9j{qZ^e||XIWnf zCkwu1GkCYp5oxxd({mtzZ$jqZq(70f|UwMX~GwQM&XH@TuN7=y4 zc?k(V*iZlZMv-Swfk%>}!W%VV^TQ9%2mlEX)kX~0R`Bnu69@&#c3%0?<`Ao0?QT-J zI2H^$j1iZ3V_QRp=MsHaXOsA_tFwc#fHRnMGs)`2-dK93uUy=q{nj&PD&+^M&oxVN zbv$-GaixYRkq;iG#%@5H(oY2rO#afCU>_4!jS)2JvOzLxGDq-9Gp^02P`P@OYbN-9 zURK-nNzL`?#kKv}*a*TjU**(8w$q(bQc_9~*P=`f`vz~Z50!6ruBaw$cxJ`~59ore z^Gux?tA#XQ5*(%l6W;}28C5#|VNqs$e4L(z`^d z);-@%|h}TQJ9C{lsTh5>_5Tf?m8}acRj79U~(z zZ(e1CWm0Zueis~Y*sQKWD7qkR*(%+e*xzox<~93t()OC6b(yi)(!kBKqaGhqyuVEj z)_LBxv6<|WIfR7PDpOZ;2l@2*AS=4wTf=u{SL;%oGwxzW@Y8U@ILm49fG~Kze6tG=jhE@y_wi1^b3V@`Xdn>Gb5PDtxzsDo@hLN5`hxK>fbb+Md|(E8ZaH4g6RQq6@46M&Z?oNRV?>f9a@8&=q|3(H zR+%Ptk%|7WOg4Q~^m$XnvMnn6%2g8+#_(5N<#8s(hVVOkuSbW2_QJ4I1QCrE!p7?i zF@1g_34-O%GZGYQZY?}~b+SgG?95!$gRj7O%rbftw@joHI^_6AA}sgxkAq*DhK8oR zu~7t=pq)etKq00iyY9g@&cS}Z(m+2@(zZ5Og{PN9(l1UA?TF1cQ^%A{K4&C{d4mB-tUwDzPJ5? zKOaDT!LKLn{Eoci{`=L?n*VAaxmo|!zTZv$ee&3`P2|8+99J4Bu)@)SQd(n4%GQpk;5om#ya89@R6 N)Kzs6TADWu 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 diff --git a/Telegram/SourceFiles/boxes/contactsbox.cpp b/Telegram/SourceFiles/boxes/contactsbox.cpp index 1009be8eb..94cb2b509 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.cpp +++ b/Telegram/SourceFiles/boxes/contactsbox.cpp @@ -210,7 +210,7 @@ void ContactsInner::chooseParticipant() { } if (r) { App::wnd()->hideSettings(true); - App::main()->showPeer(r->history->peer->id, false, true); + App::main()->showPeer(r->history->peer->id, 0, false, true); App::wnd()->hideLayer(); } diff --git a/Telegram/SourceFiles/boxes/newgroupbox.cpp b/Telegram/SourceFiles/boxes/newgroupbox.cpp index 3030a59e4..4f994aeb0 100644 --- a/Telegram/SourceFiles/boxes/newgroupbox.cpp +++ b/Telegram/SourceFiles/boxes/newgroupbox.cpp @@ -438,6 +438,15 @@ QVector NewGroupInner::selectedInputs() { return result; } +PeerData *NewGroupInner::selectedUser() { + for (ContactsData::const_iterator i = _contactsData.cbegin(), e = _contactsData.cend(); i != e; ++i) { + if (i.value()->check) { + return i.key(); + } + } + return 0; +} + NewGroupBox::NewGroupBox() : _scroll(this, st::newGroupScroll), _inner(), _filter(this, st::contactsFilter, lang(lng_participant_filter)), _next(this, lang(lng_create_group_next), st::btnSelectDone), @@ -579,13 +588,15 @@ void NewGroupBox::onClose() { void NewGroupBox::onNext() { MTPVector users(MTP_vector(_inner.selectedInputs())); - if (users.c_vector().v.isEmpty()) { + const QVector &v(users.c_vector().v); + if (v.isEmpty()) { _filter.setFocus(); _filter.notaBene(); - return; + } else if (v.size() == 1) { + App::main()->showPeer(_inner.selectedUser()->id); + } else { + App::wnd()->replaceLayer(new CreateGroupBox(users)); } - - App::wnd()->replaceLayer(new CreateGroupBox(users)); } void NewGroupBox::onScroll() { diff --git a/Telegram/SourceFiles/boxes/newgroupbox.h b/Telegram/SourceFiles/boxes/newgroupbox.h index 5ae9e96b6..f08804f13 100644 --- a/Telegram/SourceFiles/boxes/newgroupbox.h +++ b/Telegram/SourceFiles/boxes/newgroupbox.h @@ -39,6 +39,7 @@ public: void selectSkipPage(int32 h, int32 dir); QVector selectedInputs(); + PeerData *selectedUser(); void loadProfilePhotos(int32 yFrom); diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index bc4f5f8fd..92168928a 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,8 +17,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com */ #pragma once -static const int32 AppVersion = 5005; -static const wchar_t *AppVersionStr = L"0.5.5"; +static const int32 AppVersion = 5006; +static const wchar_t *AppVersionStr = L"0.5.6"; #ifdef Q_OS_WIN static const wchar_t *AppName = L"Telegram Win (Unofficial)"; #else @@ -56,7 +56,12 @@ enum { LocalEncryptSaltSize = 32, // 256 bit LocalEncryptKeySize = 256, // 2048 bit + AnimationTimerDelta = 7, + SaveRecentEmojisTimeout = 3000, // 3 secs + + AutoSearchTimeout = 1500, // 1.5 secs + SearchPerPage = 50, }; #ifdef Q_OS_WIN diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index f76fa9426..655fc2d47 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -26,11 +26,16 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "boxes/newgroupbox.h" DialogsListWidget::DialogsListWidget(QWidget *parent, MainWidget *main) : QWidget(parent), -dialogs(false), contactsNoDialogs(true), contacts(true), sel(0), contactSel(false), selByMouse(false), filteredSel(-1) { +dialogs(false), contactsNoDialogs(true), contacts(true), sel(0), contactSel(false), selByMouse(false), filteredSel(-1), searchedSel(-1), _state(DefaultState) { connect(main, SIGNAL(dialogToTop(const History::DialogLinks &)), this, SLOT(onDialogToTop(const History::DialogLinks &))); connect(main, SIGNAL(peerNameChanged(PeerData *, const PeerData::Names &, const PeerData::NameFirstChars &)), this, SLOT(onPeerNameChanged(PeerData *, const PeerData::Names &, const PeerData::NameFirstChars &))); connect(main, SIGNAL(peerPhotoChanged(PeerData *)), this, SLOT(onPeerPhotoChanged(PeerData *))); connect(main, SIGNAL(dialogRowReplaced(DialogRow *, DialogRow *)), this, SLOT(onDialogRowReplaced(DialogRow *, DialogRow *))); + connect(main, SIGNAL(historyItemReplaced(HistoryItem *, HistoryItem *)), this, SLOT(onItemReplaced(HistoryItem *, HistoryItem *))); + connect(main, SIGNAL(historyItemDeleted(HistoryItem *)), this, SLOT(onItemRemoved(HistoryItem *))); + + _updateSearchTimer.setSingleShot(true); + connect(&_updateSearchTimer, SIGNAL(timeout()), this, SIGNAL(searchMessages())); } void DialogsListWidget::paintEvent(QPaintEvent *e) { @@ -42,7 +47,7 @@ void DialogsListWidget::paintEvent(QPaintEvent *e) { p.setClipRect(r); } - if (filter.isEmpty()) { + if (_state == DefaultState) { int32 otherStart = dialogs.list.count * st::dlgHeight; PeerData *active = App::main()->activePeer(), *selected = sel ? sel->history->peer : 0; if (otherStart) { @@ -53,21 +58,40 @@ void DialogsListWidget::paintEvent(QPaintEvent *e) { } else if (!otherStart) { // .. paint no dialogs found } - } else { - if (filtered.isEmpty()) { + } else if (_state == FilteredState) { + if (filterResults.isEmpty()) { // .. paint no dialogs } else { int32 from = r.top() / int32(st::dlgHeight); if (from < 0) from = 0; - if (from < filtered.size()) { + if (from < filterResults.size()) { int32 to = (r.bottom() / int32(st::dlgHeight)) + 1, w = width(); - if (to > filtered.size()) to = filtered.size(); + if (to > filterResults.size()) to = filterResults.size(); p.translate(0, from * st::dlgHeight); for (; from < to; ++from) { - bool active = (filtered[from]->history->peer == App::main()->activePeer()); + bool active = (filterResults[from]->history->peer == App::main()->activePeer()); bool selected = (from == filteredSel); - filtered[from]->paint(p, w, active, selected); + filterResults[from]->paint(p, w, active, selected); + p.translate(0, st::dlgHeight); + } + } + } + } else if (_state == SearchedState) { + if (searchResults.isEmpty()) { + // .. paint no dialogs + } else { + int32 from = r.top() / int32(st::dlgHeight); + if (from < 0) from = 0; + if (from < searchResults.size()) { + int32 to = (r.bottom() / int32(st::dlgHeight)) + 1, w = width(); + if (to > searchResults.size()) to = searchResults.size(); + + p.translate(0, from * st::dlgHeight); + for (; from < to; ++from) { + bool active = (searchResults[from]->_item->id == App::main()->activeMsgId()); + bool selected = (from == searchedSel); + searchResults[from]->paint(p, w, active, selected); p.translate(0, st::dlgHeight); } } @@ -76,7 +100,11 @@ void DialogsListWidget::paintEvent(QPaintEvent *e) { } void DialogsListWidget::activate() { - if ((filter.isEmpty() && !sel) || (!filter.isEmpty() && (filteredSel < 0 || filteredSel >= filtered.size()))) { + if ( + (_state == DefaultState && !sel) || + (_state == FilteredState && (filteredSel < 0 || filteredSel >= filterResults.size())) || + (_state == SearchedState && (searchedSel < 0 || searchedSel >= searchResults.size())) + ) { selectSkip(1); } } @@ -93,7 +121,7 @@ void DialogsListWidget::onUpdateSelected(bool force) { if ((!force && !rect().contains(mouse)) || !selByMouse) return; int w = width(), mouseY = mouse.y(); - if (filter.isEmpty()) { + if (_state == DefaultState) { DialogRow *newSel = dialogs.list.rowAtY(mouseY, st::dlgHeight); int32 otherStart = dialogs.list.count * st::dlgHeight; if (newSel) { @@ -102,32 +130,35 @@ void DialogsListWidget::onUpdateSelected(bool force) { newSel = contactsNoDialogs.list.rowAtY(mouseY - otherStart, st::dlgHeight); contactSel = true; } - if (contactSel) { - mouse.setY(mouse.y() - otherStart); - } - if (newSel) { - mouse.setY(mouse.y() - newSel->pos * st::dlgHeight); - } if (newSel != sel) { sel = newSel; setCursor(sel ? style::cur_pointer : style::cur_default); parentWidget()->update(); } - } else { - if (!filtered.isEmpty()) { + } else if (_state == FilteredState) { + if (!filterResults.isEmpty()) { int32 newFilteredSel = mouseY / int32(st::dlgHeight); - if (newFilteredSel < 0 || newFilteredSel >= filtered.size()) { + if (newFilteredSel < 0 || newFilteredSel >= filterResults.size()) { newFilteredSel = -1; } - if (newFilteredSel >= 0) { - mouse.setY(mouse.y() - newFilteredSel * st::dlgHeight); - } if (newFilteredSel != filteredSel) { filteredSel = newFilteredSel; setCursor((filteredSel >= 0) ? style::cur_pointer : style::cur_default); parentWidget()->update(); } } + } else if (_state == SearchedState) { + if (!searchResults.isEmpty()) { + int32 newSearchedSel = mouseY / int32(st::dlgHeight); + if (newSearchedSel < 0 || newSearchedSel >= searchResults.size()) { + newSearchedSel = -1; + } + if (newSearchedSel != searchedSel) { + searchedSel = newSearchedSel; + setCursor((searchedSel >= 0) ? style::cur_pointer : style::cur_default); + parentWidget()->update(); + } + } } } @@ -141,14 +172,14 @@ void DialogsListWidget::mousePressEvent(QMouseEvent *e) { } void DialogsListWidget::onDialogRowReplaced(DialogRow *oldRow, DialogRow *newRow) { - if (!filter.isEmpty()) { - for (FilteredDialogs::iterator i = filtered.begin(), e = filtered.end(); i != e;) { + if (_state == FilteredState) { + for (FilteredDialogs::iterator i = filterResults.begin(); i != filterResults.end();) { if (*i == oldRow) { // this row is shown in filtered and maybe is in contacts! if (newRow) { *i = newRow; ++i; } else { - i = filtered.erase(i); + i = filterResults.erase(i); } } else { ++i; @@ -210,11 +241,11 @@ void DialogsListWidget::removeContact(UserData *user) { } void DialogsListWidget::dlgUpdated(DialogRow *row) { - if (filter.isEmpty()) { + if (_state == DefaultState) { update(0, row->pos * st::dlgHeight, width(), st::dlgHeight); - } else { + } else if (_state == FilteredState) { int32 cnt = 0; - for (FilteredDialogs::const_iterator i = filtered.cbegin(), e = filtered.cend(); i != e; ++i) { + for (FilteredDialogs::const_iterator i = filterResults.cbegin(), e = filterResults.cend(); i != e; ++i) { if ((*i)->history == row->history) { update(0, cnt * st::dlgHeight, width(), st::dlgHeight); break; @@ -225,7 +256,7 @@ void DialogsListWidget::dlgUpdated(DialogRow *row) { } void DialogsListWidget::dlgUpdated(History *history) { - if (filter.isEmpty()) { + if (_state == DefaultState) { DialogRow *row = 0; DialogsList::RowByPeer::iterator i = dialogs.list.rowByPeer.find(history->peer->id); if (i != dialogs.list.rowByPeer.cend()) { @@ -236,15 +267,24 @@ void DialogsListWidget::dlgUpdated(History *history) { update(0, (dialogs.list.count + i.value()->pos) * st::dlgHeight, width(), st::dlgHeight); } } - } else { + } else if (_state == FilteredState) { int32 cnt = 0; - for (FilteredDialogs::const_iterator i = filtered.cbegin(), e = filtered.cend(); i != e; ++i) { + for (FilteredDialogs::const_iterator i = filterResults.cbegin(), e = filterResults.cend(); i != e; ++i) { if ((*i)->history == history) { update(0, cnt * st::dlgHeight, width(), st::dlgHeight); break; } ++cnt; } + } else if (_state == SearchedState) { + int32 cnt = 0; + for (SearchResults::const_iterator i = searchResults.cbegin(), e = searchResults.cend(); i != e; ++i) { + if ((*i)->_item->history() == history) { + update(0, cnt * st::dlgHeight, width(), st::dlgHeight); + break; + } + ++cnt; + } } } @@ -290,9 +330,14 @@ void DialogsListWidget::onPeerPhotoChanged(PeerData *peer) { parentWidget()->update(); } -void DialogsListWidget::onFilterUpdate(QString newFilter) { +void DialogsListWidget::onFilterUpdate(QString newFilter, bool force) { + if (_state == SearchedState && !newFilter.trimmed().isEmpty()) { + _updateSearchTimer.start(AutoSearchTimeout); + return; + } + newFilter = textAccentFold(newFilter.trimmed().toLower()); - if (newFilter != filter) { + if (newFilter != filter || force) { QStringList f; if (!newFilter.isEmpty()) { QStringList filterList = newFilter.split(cWordSplit(), QString::SkipEmptyParts); @@ -306,12 +351,16 @@ void DialogsListWidget::onFilterUpdate(QString newFilter) { } newFilter = f.join(' '); } - if (newFilter != filter) { + if (newFilter != filter || force) { filter = newFilter; - if (!filter.isEmpty()) { + if (filter.isEmpty()) { + _state = DefaultState; + filterResults.clear(); + } else { QStringList::const_iterator fb = f.cbegin(), fe = f.cend(), fi; - filtered.clear(); + _state = FilteredState; + filterResults.clear(); if (!f.isEmpty()) { DialogsList *dialogsToFilter = 0, *contactsNoDialogsToFilter = 0; if (dialogs.list.count) { @@ -338,7 +387,7 @@ void DialogsListWidget::onFilterUpdate(QString newFilter) { } } } - filtered.reserve((dialogsToFilter ? dialogsToFilter->count : 0) + (contactsNoDialogsToFilter ? contactsNoDialogsToFilter->count : 0)); + filterResults.reserve((dialogsToFilter ? dialogsToFilter->count : 0) + (contactsNoDialogsToFilter ? contactsNoDialogsToFilter->count : 0)); if (dialogsToFilter && dialogsToFilter->count) { for (DialogRow *i = dialogsToFilter->begin, *e = dialogsToFilter->end; i != e; i = i->next) { const PeerData::Names &names(i->history->peer->names); @@ -355,7 +404,7 @@ void DialogsListWidget::onFilterUpdate(QString newFilter) { } } if (fi == fe) { - filtered.push_back(i); + filterResults.push_back(i); } } } @@ -375,7 +424,7 @@ void DialogsListWidget::onFilterUpdate(QString newFilter) { } } if (fi == fe) { - filtered.push_back(i); + filterResults.push_back(i); } } } @@ -387,6 +436,41 @@ void DialogsListWidget::onFilterUpdate(QString newFilter) { } } +DialogsListWidget::~DialogsListWidget() { + clearSearchResults(); +} + +void DialogsListWidget::clearSearchResults() { + if (!searchResults.isEmpty()) { + for (SearchResults::const_iterator i = searchResults.cbegin(), e = searchResults.cend(); i != e; ++i) { + delete *i; + } + searchResults.clear(); + } +} + +void DialogsListWidget::onItemReplaced(HistoryItem *oldItem, HistoryItem *newItem) { + for (int i = 0; i < searchResults.size(); ++i) { + if (searchResults[i]->_item == oldItem) { + searchResults[i]->_item = newItem; + } + } +} + +void DialogsListWidget::onItemRemoved(HistoryItem *item) { + int wasCount = searchResults.size(); + for (int i = 0; i < searchResults.size(); ++i) { + if (searchResults[i]->_item == item) { + searchResults.remove(i); + } else { + ++i; + } + } + if (wasCount != searchResults.size()) { + refresh(); + } +} + void DialogsListWidget::dialogsReceived(const QVector &added) { for (QVector::const_iterator i = added.cbegin(), e = added.cend(); i != e; ++i) { if (i->type() == mtpc_dialog) { @@ -401,6 +485,17 @@ void DialogsListWidget::dialogsReceived(const QVector &added) { refresh(); } +void DialogsListWidget::searchReceived(const QVector &messages, bool fromStart) { + if (fromStart) { + clearSearchResults(); + } + for (QVector::const_iterator i = messages.cbegin(), e = messages.cend(); i != e; ++i) { + HistoryItem *item = App::histories().addToBack(*i, -1); + searchResults.push_back(new FakeDialogRow(item)); + } + refresh(); +} + void DialogsListWidget::contactsReceived(const QVector &contacts) { for (QVector::const_iterator i = contacts.cbegin(), e = contacts.cend(); i != e; ++i) { addNewContact(i->c_contact().vuser_id.v); @@ -436,7 +531,15 @@ int32 DialogsListWidget::addNewContact(int32 uid, bool select) { } void DialogsListWidget::refresh(bool toTop) { - resize(width(), (filter.isEmpty() ? (dialogs.list.count + contactsNoDialogs.list.count) : filtered.count()) * st::dlgHeight); + int32 cnt = 0; + if (_state == DefaultState) { + cnt = dialogs.list.count + contactsNoDialogs.list.count; + } else if (_state == FilteredState) { + cnt = filterResults.count(); + } else if (_state == SearchedState) { + cnt = searchResults.count(); + } + resize(width(), cnt * st::dlgHeight); if (toTop) { emit mustScrollTo(0, 0); loadPeerPhotos(0); @@ -447,17 +550,37 @@ void DialogsListWidget::refresh(bool toTop) { void DialogsListWidget::setMouseSel(bool msel, bool toTop) { selByMouse = msel; if (!selByMouse && toTop) { - if (filter.isEmpty()) { + if (_state == DefaultState) { sel = (dialogs.list.count ? dialogs.list.begin : (contactsNoDialogs.list.count ? contactsNoDialogs.list.begin : 0)); contactSel = !dialogs.list.count && contactsNoDialogs.list.count; - } else { + } else if (_state == FilteredState) { filteredSel = 0; + } else if (_state == SearchedState) { + searchedSel = -1; // don't select first elem in search } } } +void DialogsListWidget::setState(State newState) { + _state = newState; + if (_state == DefaultState || _state == FilteredState) { + clearSearchResults(); + searchedSel = -1; + } else if (_state == DefaultState || _state == SearchedState) { + filterResults.clear(); + filteredSel = -1; + } + onFilterUpdate(filter, true); + refresh(true); +} + +DialogsListWidget::State DialogsListWidget::state() const { + return _state; +} + void DialogsListWidget::clearFilter() { - if (!filter.isEmpty()) { + if (_state == FilteredState) { + _state = DefaultState; filter = QString(); refresh(true); } @@ -473,7 +596,7 @@ void DialogsListWidget::addDialog(const MTPDdialog &dialog) { } void DialogsListWidget::selectSkip(int32 direction) { - if (filter.isEmpty()) { + if (_state == DefaultState) { if (!sel) { if (dialogs.list.count && direction > 0) { sel = dialogs.list.begin; @@ -499,20 +622,27 @@ void DialogsListWidget::selectSkip(int32 direction) { } int32 fromY = (sel->pos + (contactSel ? dialogs.list.count : 0)) * st::dlgHeight; emit mustScrollTo(fromY, fromY + st::dlgHeight); - } else { - if (filtered.isEmpty()) return; - int32 newSel = snap(filteredSel + direction, 0, filtered.size() - 1); + } else if (_state == FilteredState) { + if (filterResults.isEmpty()) return; + int32 newSel = snap(filteredSel + direction, 0, filterResults.size() - 1); if (newSel != filteredSel) { filteredSel = newSel; } emit mustScrollTo(filteredSel * st::dlgHeight, (filteredSel + 1) * st::dlgHeight); + } else if (_state == SearchedState) { + if (searchResults.isEmpty()) return; + int32 newSel = snap(searchedSel + direction, 0, searchResults.size() - 1); + if (newSel != searchedSel) { + searchedSel = newSel; + } + emit mustScrollTo(searchedSel * st::dlgHeight, (searchedSel + 1) * st::dlgHeight); } parentWidget()->update(); } void DialogsListWidget::scrollToPeer(const PeerId &peer) { int32 fromY = -1; - if (filter.isEmpty()) { + if (_state == DefaultState) { DialogsList::RowByPeer::const_iterator i = dialogs.list.rowByPeer.constFind(peer); if (i != dialogs.list.rowByPeer.cend()) { fromY = i.value()->pos * st::dlgHeight; @@ -522,9 +652,9 @@ void DialogsListWidget::scrollToPeer(const PeerId &peer) { fromY = (i.value()->pos + dialogs.list.count) * st::dlgHeight; } } - } else { - for (int32 i = 0, c = filtered.size(); i < c; ++i) { - if (filtered[i]->history->peer->id == peer) { + } else if (_state == FilteredState) { + for (int32 i = 0, c = filterResults.size(); i < c; ++i) { + if (filterResults[i]->history->peer->id == peer) { fromY = i * st::dlgHeight; break; } @@ -537,7 +667,7 @@ void DialogsListWidget::scrollToPeer(const PeerId &peer) { void DialogsListWidget::selectSkipPage(int32 pixels, int32 direction) { int32 toSkip = pixels / int32(st::dlgHeight); - if (filter.isEmpty()) { + if (_state == DefaultState) { if (!sel) { if (direction > 0 && dialogs.list.count) { sel = dialogs.list.begin; @@ -581,7 +711,7 @@ void DialogsListWidget::selectSkipPage(int32 pixels, int32 direction) { void DialogsListWidget::loadPeerPhotos(int32 yFrom) { int32 yTo = yFrom + parentWidget()->height() * 5; MTP::clearLoaderPriorities(); - if (filter.isEmpty()) { + if (_state == DefaultState) { int32 otherStart = dialogs.list.count * st::dlgHeight; if (yFrom < otherStart) { dialogs.list.adjustCurrent(yFrom, st::dlgHeight); @@ -599,99 +729,124 @@ void DialogsListWidget::loadPeerPhotos(int32 yFrom) { row->history->peer->photo->load(); } } - } else { + } else if (_state == FilteredState) { int32 from = yFrom / st::dlgHeight; if (from < 0) from = 0; - if (from < filtered.size()) { + if (from < filterResults.size()) { int32 to = (yTo / int32(st::dlgHeight)) + 1, w = width(); - if (to > filtered.size()) to = filtered.size(); + if (to > filterResults.size()) to = filterResults.size(); for (; from < to; ++from) { - filtered[from]->history->peer->photo->load(); + filterResults[from]->history->peer->photo->load(); + } + } + } else if (_state == SearchedState) { + int32 from = yFrom / st::dlgHeight; + if (from < 0) from = 0; + if (from < searchResults.size()) { + int32 to = (yTo / int32(st::dlgHeight)) + 1, w = width(); + if (to > searchResults.size()) to = searchResults.size(); + + for (; from < to; ++from) { + searchResults[from]->_item->history()->peer->photo->load(); } } } } -void DialogsListWidget::choosePeer() { - History *history = filter.isEmpty() ? (sel ? sel->history : 0) : ((filteredSel >= 0 && filteredSel < filtered.size()) ? filtered[filteredSel]->history : 0); +bool DialogsListWidget::choosePeer() { + History *history = 0; + MsgId msgId = 0; + if (_state == DefaultState) { + if (sel) history = sel->history; + } else if (_state == FilteredState) { + if (filteredSel >= 0 && filteredSel < filterResults.size()) history = filterResults[filteredSel]->history; + } else if (_state == SearchedState) { + if (searchedSel >= 0 && searchedSel < searchResults.size()) { + history = searchResults[searchedSel]->_item->history(); + msgId = searchResults[searchedSel]->_item->id; + } + } if (history) { - emit peerChosen(history->peer->id); + emit peerChosen(history->peer->id, msgId); sel = 0; filteredSel = -1; parentWidget()->update(); + return true; } + return false; } void DialogsListWidget::destroyData() { sel = 0; contactSel = false; filteredSel = 0; - filtered.clear(); + filterResults.clear(); filter.clear(); + searchedSel = 0; + clearSearchResults(); contacts.clear(); contactsNoDialogs.clear(); dialogs.clear(); } PeerData *DialogsListWidget::peerBefore(const PeerData *peer) const { - if (!filter.isEmpty()) { - if (filtered.isEmpty() || filtered.at(0)->history->peer == peer) return 0; + if (_state == DefaultState) { + DialogsList::RowByPeer::const_iterator i = dialogs.list.rowByPeer.constFind(peer->id); + if (i == dialogs.list.rowByPeer.constEnd()) { + i = contactsNoDialogs.list.rowByPeer.constFind(peer->id); + if (i == contactsNoDialogs.list.rowByPeer.cend()) { + return 0; + } + if (i.value()->prev) { + return i.value()->prev->history->peer; + } else if (dialogs.list.count) { + return dialogs.list.end->prev->history->peer; + } + return 0; + } + if (i.value()->prev) { + return i.value()->prev->history->peer; + } + } else if (_state == FilteredState) { + if (filterResults.isEmpty() || filterResults.at(0)->history->peer == peer) return 0; - for (FilteredDialogs::const_iterator b = filtered.cbegin(), i = b + 1, e = filtered.cend(); i != e; ++i) { + for (FilteredDialogs::const_iterator b = filterResults.cbegin(), i = b + 1, e = filterResults.cend(); i != e; ++i) { if ((*i)->history->peer == peer) { FilteredDialogs::const_iterator j = i - 1; return (*j)->history->peer; } } - return 0; - } - - DialogsList::RowByPeer::const_iterator i = dialogs.list.rowByPeer.constFind(peer->id); - if (i == dialogs.list.rowByPeer.constEnd()) { - i = contactsNoDialogs.list.rowByPeer.constFind(peer->id); - if (i == contactsNoDialogs.list.rowByPeer.cend()) { - return 0; - } - if (i.value()->prev) { - return i.value()->prev->history->peer; - } else if (dialogs.list.count) { - return dialogs.list.end->prev->history->peer; - } - return 0; - } - if (i.value()->prev) { - return i.value()->prev->history->peer; } return 0; } PeerData *DialogsListWidget::peerAfter(const PeerData *peer) const { - if (!filter.isEmpty()) { - for (FilteredDialogs::const_iterator i = filtered.cbegin(), e = filtered.cend(); i != e; ++i) { + if (_state == DefaultState) { + DialogsList::RowByPeer::const_iterator i = dialogs.list.rowByPeer.constFind(peer->id); + if (i == dialogs.list.rowByPeer.constEnd()) { + i = contactsNoDialogs.list.rowByPeer.constFind(peer->id); + if (i == contactsNoDialogs.list.rowByPeer.cend()) { + return 0; + } + if (i.value()->next != contactsNoDialogs.list.end) { + return i.value()->next->history->peer; + } + return 0; + } + + if (i.value()->next != dialogs.list.end) { + return i.value()->next->history->peer; + } else if (contactsNoDialogs.list.count) { + return contactsNoDialogs.list.begin->history->peer; + } + } else if (_state == FilteredState) { + for (FilteredDialogs::const_iterator i = filterResults.cbegin(), e = filterResults.cend(); i != e; ++i) { if ((*i)->history->peer == peer) { ++i; return (i == e) ? 0 : (*i)->history->peer; } } - return 0; - } - DialogsList::RowByPeer::const_iterator i = dialogs.list.rowByPeer.constFind(peer->id); - if (i == dialogs.list.rowByPeer.constEnd()) { - i = contactsNoDialogs.list.rowByPeer.constFind(peer->id); - if (i == contactsNoDialogs.list.rowByPeer.cend()) { - return 0; - } - if (i.value()->next != contactsNoDialogs.list.end) { - return i.value()->next->history->peer; - } - return 0; - } - - if (i.value()->next != dialogs.list.end) { - return i.value()->next->history->peer; - } else if (contactsNoDialogs.list.count) { - return contactsNoDialogs.list.begin->history->peer; } return 0; } @@ -704,6 +859,10 @@ DialogsIndexed &DialogsListWidget::dialogsList() { return dialogs; } +DialogsListWidget::SearchResults &DialogsListWidget::searchList() { + return searchResults; +} + DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent) , _configLoaded(false) , _drawShadow(true) @@ -712,17 +871,21 @@ DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent) , dlgPreloading(0) , contactsRequest(0) , _filter(this, st::dlgFilter, lang(lng_dlg_filter)) +, _stateSwitcher(this, st::dlgState) , _newGroup(this, st::btnNewGroup) , _addContact(this, st::btnAddContact) +, _cancelSearch(this, st::btnCancelSearch) , scroll(this, st::dlgScroll) , list(&scroll, parent) +, _searchFull(false) { scroll.setWidget(&list); scroll.setFocusPolicy(Qt::NoFocus); connect(&list, SIGNAL(mustScrollTo(int, int)), &scroll, SLOT(scrollToY(int, int))); connect(&list, SIGNAL(dialogToTopFrom(int)), this, SLOT(onDialogToTopFrom(int))); -// connect(&list, SIGNAL(peerChosen(const PeerId &)), this, SLOT(onCancel())); - connect(&list, SIGNAL(peerChosen(const PeerId &)), this, SIGNAL(peerChosen(const PeerId &))); +// connect(&list, SIGNAL(peerChosen(const PeerId &, MsgId)), this, SLOT(onCancel())); + connect(&list, SIGNAL(peerChosen(const PeerId &, MsgId)), this, SIGNAL(peerChosen(const PeerId &, MsgId))); + connect(&list, SIGNAL(searchMessages()), this, SLOT(onSearchMessages())); connect(&scroll, SIGNAL(geometryChanged()), &list, SLOT(onParentGeometryChanged())); connect(&scroll, SIGNAL(scrolled()), &list, SLOT(onUpdateSelected())); connect(&scroll, SIGNAL(scrolled()), this, SLOT(onListScroll())); @@ -731,17 +894,26 @@ DialogsWidget::DialogsWidget(MainWidget *parent) : QWidget(parent) connect(parent, SIGNAL(dialogsUpdated()), this, SLOT(onListScroll())); connect(&_addContact, SIGNAL(clicked()), this, SLOT(onAddContact())); connect(&_newGroup, SIGNAL(clicked()), this, SLOT(onNewGroup())); + connect(&_cancelSearch, SIGNAL(clicked()), this, SLOT(onCancelSearch())); + + _stateSwitcher.addButton(lang(lng_dlg_conversations)); + _stateSwitcher.addButton(lang(lng_dlg_messages)); + _stateSwitcher.hide(); + + connect(&_stateSwitcher, SIGNAL(changed()), this, SLOT(onStateChange())); scroll.show(); _filter.show(); _filter.move(st::dlgPaddingHor, st::dlgFilterPadding); + _stateSwitcher.move(st::dlgPaddingHor, st::dlgFilterPadding * 2 + _filter.height()); _filter.setFocusPolicy(Qt::StrongFocus); _filter.customUpDown(true); _addContact.hide(); _newGroup.show(); + _cancelSearch.hide(); _newGroup.move(width() - _newGroup.width() - st::dlgPaddingHor, 0); _addContact.move(width() - _addContact.width() - st::dlgPaddingHor, 0); - scroll.move(0, _filter.height() + 2 * st::dlgFilterPadding); + _cancelSearch.move(width() - _cancelSearch.width() - st::dlgPaddingHor, 0); } void DialogsWidget::activate() { @@ -804,12 +976,16 @@ bool DialogsWidget::animStep(float64) { } void DialogsWidget::onCancel() { - list.clearFilter(); - _filter.clear(); - _filter.updatePlaceholder(); + onCancelSearch(); emit cancelled(); } +void DialogsWidget::clearFiltered() { + if (list.state() != DialogsListWidget::SearchedState) { + onCancel(); + } +} + void DialogsWidget::unreadCountsReceived(const QVector &dialogs) { for (QVector::const_iterator i = dialogs.cbegin(), e = dialogs.cend(); i != e; ++i) { const MTPDdialog &d(i->c_dialog()); @@ -875,6 +1051,32 @@ bool DialogsWidget::dialogsFailed(const RPCError &e) { return true; } +void DialogsWidget::onSearchMessages(bool force) { + QString q = _filter.text().trimmed(); + if (q.isEmpty()) { + if (_searchRequest) { + MTP::cancel(_searchRequest); + _searchRequest = 0; + } + if (force) { + list.setState(DialogsListWidget::DefaultState); + } + return; + } + if (force || _searchQuery != q) { + if (_searchRequest) MTP::cancel(_searchRequest); + _searchQuery = q; + _searchFull = false; + _searchRequest = MTP::send(MTPmessages_Search(MTP_inputPeerEmpty(), MTP_string(_searchQuery), MTP_inputMessagesFilterEmpty(), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(SearchPerPage)), rpcDone(&DialogsWidget::searchReceived, true), rpcFail(&DialogsWidget::searchFailed)); + } +} + +void DialogsWidget::onSearchMore(MsgId minMsgId) { + if (!_searchRequest && !_searchFull) { + _searchRequest = MTP::send(MTPmessages_Search(MTP_inputPeerEmpty(), MTP_string(_searchQuery), MTP_inputMessagesFilterEmpty(), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(minMsgId), MTP_int(SearchPerPage)), rpcDone(&DialogsWidget::searchReceived, !minMsgId), rpcFail(&DialogsWidget::searchFailed)); + } +} + void DialogsWidget::loadConfig() { if (!_configLoaded) { mtpConfigLoader()->load(); @@ -905,6 +1107,41 @@ bool DialogsWidget::contactsFailed() { return true; } +void DialogsWidget::searchReceived(bool fromStart, const MTPmessages_Messages &result, mtpRequestId req) { + if (_searchRequest == req) { + switch (result.type()) { + case mtpc_messages_messages: { + App::feedUsers(result.c_messages_messages().vusers); + App::feedChats(result.c_messages_messages().vchats); + const QVector &msgs(result.c_messages_messages().vmessages.c_vector().v); + list.searchReceived(msgs, fromStart); + if (msgs.isEmpty()) { + _searchFull = true; + } + } break; + + case mtpc_messages_messagesSlice: { + App::feedUsers(result.c_messages_messagesSlice().vusers); + App::feedChats(result.c_messages_messagesSlice().vchats); + const QVector &msgs(result.c_messages_messagesSlice().vmessages.c_vector().v); + list.searchReceived(msgs, fromStart); + if (msgs.isEmpty()) { + _searchFull = true; + } + } break; + } + _searchRequest = 0; + } +} + +bool DialogsWidget::searchFailed(const RPCError &error, mtpRequestId req) { + if (_searchRequest == req) { + _searchRequest = 0; + _searchFull = true; + } + return true; +} + bool DialogsWidget::addNewContact(int32 uid, bool show) { _filter.setText(QString()); onFilterUpdate(); @@ -917,21 +1154,53 @@ bool DialogsWidget::addNewContact(int32 uid, bool show) { void DialogsWidget::onListScroll() { list.loadPeerPhotos(scroll.scrollTop()); - if (scroll.scrollTop() > list.dialogsList().list.count * st::dlgHeight - scroll.height()) { + if (list.state() == DialogsListWidget::SearchedState) { + DialogsListWidget::SearchResults &res(list.searchList()); + if (scroll.scrollTop() > res.size() * st::dlgHeight - 2 * scroll.height()) { + onSearchMore(res.isEmpty() ? 0 : res.back()->_item->id); + } + } else if (scroll.scrollTop() > list.dialogsList().list.count * st::dlgHeight - scroll.height()) { loadDialogs(); } } void DialogsWidget::onFilterUpdate() { - list.onFilterUpdate(_filter.text()); + QString filterText = _filter.text(); + list.onFilterUpdate(filterText); + DialogsListWidget::State s = list.state(); + bool switcherVisible = (s != DialogsListWidget::DefaultState); + if (switcherVisible && _stateSwitcher.isHidden() || !switcherVisible && !_stateSwitcher.isHidden()) { + if (switcherVisible) { + _stateSwitcher.show(); + } else { + _stateSwitcher.hide(); + _stateSwitcher.setSelected(0); + } + resizeEvent(0); + } + if (filterText.isEmpty() && !_cancelSearch.isHidden()) { + _cancelSearch.hide(); + _newGroup.show(); + } else if (!filterText.isEmpty() && _cancelSearch.isHidden()) { + _cancelSearch.show(); + _newGroup.hide(); + } } void DialogsWidget::resizeEvent(QResizeEvent *e) { int32 w = width() - st::dlgShadow; _filter.setGeometry(st::dlgPaddingHor, st::dlgFilterPadding, w - 2 * st::dlgPaddingHor, _filter.height()); + _stateSwitcher.setGeometry(st::dlgPaddingHor, st::dlgFilterPadding * 2 + _filter.height(), _filter.width(), _filter.height()); _newGroup.move(w - _newGroup.width() - st::dlgPaddingHor, _filter.y()); _addContact.move(w - _addContact.width() - st::dlgPaddingHor, _filter.y()); - scroll.resize(w, height() - _filter.y() - _filter.height() - st::dlgFilterPadding - st::dlgPaddingVer); + _cancelSearch.move(w - _cancelSearch.width() - st::dlgPaddingHor, _filter.y()); + if (_stateSwitcher.isHidden()) { + scroll.move(0, _filter.height() + 2 * st::dlgFilterPadding); + scroll.resize(w, height() - _filter.y() - _filter.height() - st::dlgFilterPadding - st::dlgPaddingVer); + } else { + scroll.move(0, _filter.height() + _stateSwitcher.height() + 3 * st::dlgFilterPadding); + scroll.resize(w, height() - _stateSwitcher.y() - _stateSwitcher.height() - st::dlgFilterPadding - st::dlgPaddingVer); + } list.resize(w, list.height()); onListScroll(); } @@ -940,7 +1209,9 @@ void DialogsWidget::keyPressEvent(QKeyEvent *e) { if (e->key() == Qt::Key_Escape) { e->ignore(); } else if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) { - list.choosePeer(); + if (!list.choosePeer() && list.state() == DialogsListWidget::SearchedState) { + onSearchMessages(); + } } else if (e->key() == Qt::Key_Down) { list.setMouseSel(false); list.selectSkip(1); @@ -981,7 +1252,9 @@ PeerData *DialogsWidget::peerAfter(const PeerData *peer) const { } void DialogsWidget::scrollToPeer(const PeerId &peer) { - list.scrollToPeer(peer); + if (list.state() != DialogsListWidget::SearchedState) { + list.scrollToPeer(peer); + } } void DialogsWidget::removePeer(PeerData *peer) { @@ -1008,6 +1281,32 @@ void DialogsWidget::onNewGroup() { App::wnd()->showLayer(new NewGroupBox()); } +void DialogsWidget::onCancelSearch() { + list.clearFilter(); + _filter.clear(); + _filter.updatePlaceholder(); + onFilterUpdate(); +} + +void DialogsWidget::onStateChange() { + if (!_stateSwitcher.isHidden()) { + if (_stateSwitcher.selected() == 0) { + list.setState(DialogsListWidget::FilteredState); + _searchQuery = QString(); + if (_searchRequest) { + MTP::cancel(_searchRequest); + _searchRequest = 0; + } + } else { + list.setState(DialogsListWidget::SearchedState); + } + list.onFilterUpdate(_filter.text()); + if (list.state() == DialogsListWidget::SearchedState) { + onSearchMessages(true); + } + } +} + void DialogsWidget::onDialogToTopFrom(int movedFrom) { if (scroll.scrollTop() > 0) { if (movedFrom > scroll.scrollTop()) { diff --git a/Telegram/SourceFiles/dialogswidget.h b/Telegram/SourceFiles/dialogswidget.h index 653bec574..27c471a7c 100644 --- a/Telegram/SourceFiles/dialogswidget.h +++ b/Telegram/SourceFiles/dialogswidget.h @@ -27,6 +27,7 @@ public: DialogsListWidget(QWidget *parent, MainWidget *main); void dialogsReceived(const QVector &dialogs); + void searchReceived(const QVector &messages, bool fromStart); void showMore(int32 pixels); void activate(); @@ -53,7 +54,7 @@ public: void clearFilter(); void refresh(bool toTop = false); - void choosePeer(); + bool choosePeer(); void destroyData(); @@ -61,11 +62,26 @@ public: PeerData *peerAfter(const PeerData *peer) const; void scrollToPeer(const PeerId &peer); + typedef QVector SearchResults; + DialogsIndexed &contactsList(); DialogsIndexed &dialogsList(); + SearchResults &searchList(); void setMouseSel(bool msel, bool toTop = false); + enum State { + DefaultState = 0, + FilteredState = 1, + SearchedState = 2, + }; + void setState(State newState); + State state() const; + + void onFilterUpdate(QString newFilter, bool force = false); + + ~DialogsListWidget(); + public slots: void onUpdateSelected(bool force = false); @@ -74,17 +90,21 @@ public slots: void onPeerNameChanged(PeerData *peer, const PeerData::Names &oldNames, const PeerData::NameFirstChars &oldChars); void onPeerPhotoChanged(PeerData *peer); void onDialogRowReplaced(DialogRow *oldRow, DialogRow *newRow); - void onFilterUpdate(QString newFilter); + + void onItemRemoved(HistoryItem *item); + void onItemReplaced(HistoryItem *oldItem, HistoryItem *newItem); signals: - void peerChosen(const PeerId &); + void peerChosen(const PeerId &, MsgId); void mustScrollTo(int scrollToTop, int scrollToBottom); void dialogToTopFrom(int movedFrom); + void searchMessages(); private: void addDialog(const MTPDdialog &dialog); + void clearSearchResults(); DialogsIndexed dialogs; DialogsIndexed contactsNoDialogs; @@ -95,9 +115,17 @@ private: QString filter; typedef QVector FilteredDialogs; - FilteredDialogs filtered; + FilteredDialogs filterResults; int32 filteredSel; + SearchResults searchResults; + int32 searchedSel; + + State _state; + + QTimer _updateSearchTimer; + QString _searchQuery; + QPoint lastMousePos; void paintDialog(QPainter &p, DialogRow *dialog); @@ -112,6 +140,7 @@ public: void dialogsReceived(const MTPmessages_Dialogs &dialogs); void contactsReceived(const MTPcontacts_Contacts &contacts); + void searchReceived(bool fromStart, const MTPmessages_Messages &result, mtpRequestId req); bool addNewContact(int32 uid, bool show = true); void resizeEvent(QResizeEvent *e); @@ -143,10 +172,13 @@ public: DialogsIndexed &contactsList(); void enableShadow(bool enable = true); + + void onSearchMore(MsgId minMsgId); + void clearFiltered(); signals: - void peerChosen(const PeerId &); + void peerChosen(const PeerId &, MsgId); void cancelled(); public slots: @@ -157,8 +189,12 @@ public slots: void onFilterUpdate(); void onAddContact(); void onNewGroup(); + void onCancelSearch(); + + void onStateChange(); void onDialogToTopFrom(int movedFrom); + void onSearchMessages(bool force = false); private: @@ -169,15 +205,21 @@ private: void unreadCountsReceived(const QVector &dialogs); bool dialogsFailed(const RPCError &e); - bool contactsFailed(); + bool searchFailed(const RPCError &error, mtpRequestId req); int32 dlgOffset, dlgCount; mtpRequestId dlgPreloading; mtpRequestId contactsRequest; FlatInput _filter; - IconedButton _newGroup, _addContact; + Switcher _stateSwitcher; + IconedButton _newGroup, _addContact, _cancelSearch; ScrollArea scroll; DialogsListWidget list; + + QString _searchQuery; + bool _searchFull; + mtpRequestId _searchRequest; + }; diff --git a/Telegram/SourceFiles/fileuploader.cpp b/Telegram/SourceFiles/fileuploader.cpp index a1988fcee..002d6d9a9 100644 --- a/Telegram/SourceFiles/fileuploader.cpp +++ b/Telegram/SourceFiles/fileuploader.cpp @@ -115,6 +115,9 @@ void FileUploader::sendNext() { } } else { toSend = i->media.data.mid(i->docSentParts * i->docPartSize, i->docPartSize); + if (i->media.type == ToPrepareDocument && i->docSentParts <= UseBigFilesFrom) { + i->docHash.feed(toSend.constData(), toSend.size()); + } } if (toSend.size() > i->docPartSize || (toSend.size() < i->docPartSize && i->docSentParts + 1 != i->docPartsCount)) { currentFailed(); diff --git a/Telegram/SourceFiles/gui/animation.h b/Telegram/SourceFiles/gui/animation.h index a86ae4636..e9892461d 100644 --- a/Telegram/SourceFiles/gui/animation.h +++ b/Telegram/SourceFiles/gui/animation.h @@ -224,7 +224,7 @@ public: } } else { if (!objs.size()) { - timer.start(7); + timer.start(AnimationTimerDelta); } objs.insert(obj); } diff --git a/Telegram/SourceFiles/gui/switcher.cpp b/Telegram/SourceFiles/gui/switcher.cpp new file mode 100644 index 000000000..bcb9605ea --- /dev/null +++ b/Telegram/SourceFiles/gui/switcher.cpp @@ -0,0 +1,157 @@ +/* +This file is part of Telegram Desktop, +an unofficial desktop messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It 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 General Public License for more details. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014 John Preston, https://tdesktop.com +*/ +#include "stdafx.h" +#include "switcher.h" + +Switcher::Switcher(QWidget *parent, const style::switcher &st) : TWidget(parent) +, _selected(0) +, _over(-1) +, _wasOver(-1) +, _pressed(-1) +, _st(st) +, a_bgOver(_st.bgColor->c) +, a_bgWasOver(_st.bgHovered->c) { + resize(width(), _st.height); +} + +void Switcher::leaveEvent(QEvent *e) { + setOver(-1); + if (_pressed >= 0) return; + + setMouseTracking(false); + return TWidget::leaveEvent(e); +} + +void Switcher::enterEvent(QEvent *e) { + setMouseTracking(true); + return TWidget::enterEvent(e); +} + +void Switcher::mousePressEvent(QMouseEvent *e) { + if (e->buttons() & Qt::LeftButton) { + mouseMoveEvent(e); + if (_over != _pressed) { + _pressed = _over; + e->accept(); + } + } +} + +void Switcher::mouseMoveEvent(QMouseEvent *e) { + if (rect().contains(e->pos())) { + if (width()) { + setOver((e->pos().x() * _buttons.size()) / width()); + } + } else { + setOver(-1); + } +} + +void Switcher::mouseReleaseEvent(QMouseEvent *e) { + if (_pressed >= 0) { + if (_pressed == _over && _pressed != _selected) { + setSelected(_pressed); + } else { + setSelected(_selected); + } + } else { + leaveEvent(e); + } +} + +void Switcher::addButton(const QString &btn) { + _buttons.push_back(btn); + update(); +} + +bool Switcher::animStep(float64 ms) { + float64 dt = ms / _st.duration; + bool res = true; + if (dt >= 1) { + res = false; + a_bgOver.finish(); + a_bgWasOver.finish(); + } else { + a_bgOver.update(dt, anim::linear); + a_bgWasOver.update(dt, anim::linear); + } + update(); + return res; +} + +void Switcher::paintEvent(QPaintEvent *e) { + QPainter p(this); + + p.fillRect(rect(), _st.bgColor->b); + if (!_buttons.isEmpty()) { + p.setFont(_st.font->f); + float64 btnWidth = float64(width()) / _buttons.size(); + for (int i = 0; i < _buttons.size(); ++i) { + QRect btnRect(qRound(i * btnWidth), 0, qRound((i + 1) * btnWidth) - qRound(i * btnWidth), height()); + if (i == _selected) { + p.fillRect(btnRect, _st.bgActive->b); + } else if (i == _over) { + p.fillRect(btnRect, a_bgOver.current()); + } else if (i == _wasOver) { + p.fillRect(btnRect, a_bgWasOver.current()); + } + p.setPen((i == _selected ? _st.activeColor : _st.textColor)->p); + p.drawText(btnRect, _buttons[i], style::al_center); + } + } + if (_st.border) { + p.setPen(_st.borderColor->p); + for (uint32 i = 0; i < _st.border; ++i) { + p.drawRect(i, i, width() - 2 * i - 1, height() - 2 * i - 1); + } + } +} + +int Switcher::selected() const { + return _selected; +} + +void Switcher::setSelected(int selected) { + if (selected != _selected) { + _selected = selected; + emit changed(); + } + _pressed = _over = _wasOver = -1; + anim::stop(this); + setCursor(style::cur_default); + update(); +} + +void Switcher::setOver(int over) { + if (over != _over) { + QColor c(a_bgOver.current()); + if (_wasOver == over) { + a_bgOver = anim::cvalue(a_bgWasOver.current(), _st.bgHovered->c); + } else { + a_bgOver = anim::cvalue(_st.bgColor->c, _st.bgHovered->c); + } + a_bgWasOver = anim::cvalue(c, _st.bgColor->c); + + _wasOver = _over; + _over = over; + + anim::start(this); + + setCursor((_over >= 0 && _over != _selected) ? style::cur_pointer : style::cur_default); + } +} diff --git a/Telegram/SourceFiles/gui/switcher.h b/Telegram/SourceFiles/gui/switcher.h new file mode 100644 index 000000000..7dd88c5ed --- /dev/null +++ b/Telegram/SourceFiles/gui/switcher.h @@ -0,0 +1,62 @@ +/* +This file is part of Telegram Desktop, +an unofficial desktop messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It 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 General Public License for more details. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014 John Preston, https://tdesktop.com +*/ +#pragma once + +#include +#include "gui/twidget.h" + +class Switcher : public TWidget, public Animated { + Q_OBJECT + +public: + Switcher(QWidget *parent, const style::switcher &st); + + void mousePressEvent(QMouseEvent *e); + void mouseMoveEvent(QMouseEvent *e); + void mouseReleaseEvent(QMouseEvent *e); + + void paintEvent(QPaintEvent *e); + + void enterEvent(QEvent *e); + void leaveEvent(QEvent *e); + + void addButton(const QString &btn); + + bool animStep(float64 ms); + + int selected() const; + void setSelected(int selected); + +signals: + + void changed(); + +private: + + void setOver(int over); + + int _selected; + int _over, _wasOver, _pressed; + + typedef QVector Buttons; + Buttons _buttons; + + style::switcher _st; + anim::cvalue a_bgOver, a_bgWasOver; + +}; diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 226293581..22a760467 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -499,7 +499,8 @@ void DialogRow::paint(QPainter &p, int32 w, bool act, bool sel) const { rectForName.setLeft(rectForName.left() + st::dlgChatImgSkip); } - if (history->isEmpty()) { + HistoryItem *last = history->last; + if (!last) { p.setFont(st::dlgHistFont->f); p.setPen((act ? st::dlgActiveColor : st::dlgSystemColor)->p); if (history->typing.isEmpty()) { @@ -509,7 +510,6 @@ void DialogRow::paint(QPainter &p, int32 w, bool act, bool sel) const { } } else { // draw date - HistoryItem *last = history->back()->back(); QDateTime now(QDateTime::currentDateTime()), lastTime(last->date); QDate nowDate(now.date()), lastDate(lastTime.date()); QString dt; @@ -571,17 +571,77 @@ void DialogRow::paint(QPainter &p, int32 w, bool act, bool sel) const { history->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); } +void FakeDialogRow::paint(QPainter &p, int32 w, bool act, bool sel) const { + QRect fullRect(0, 0, w, st::dlgHeight); + p.fillRect(fullRect, (act ? st::dlgActiveBG : (sel ? st::dlgHoverBG : st::dlgBG))->b); + + History *history = _item->history(); + + p.drawPixmap(st::dlgPaddingHor, st::dlgPaddingVer, history->peer->photo->pix(st::dlgPhotoSize)); + + int32 nameleft = st::dlgPaddingHor + st::dlgPhotoSize + st::dlgPhotoPadding; + int32 namewidth = w - nameleft - st::dlgPaddingHor; + QRect rectForName(nameleft, st::dlgPaddingVer + st::dlgNameTop, namewidth, st::msgNameFont->height); + + // draw chat icon + if (history->peer->chat) { + p.drawPixmap(QPoint(rectForName.left() + st::dlgChatImgLeft, rectForName.top() + st::dlgChatImgTop), App::sprite(), (act ? st::dlgActiveChatImg : st::dlgChatImg)); + rectForName.setLeft(rectForName.left() + st::dlgChatImgSkip); + } + + // draw date + QDateTime now(QDateTime::currentDateTime()), lastTime(_item->date); + QDate nowDate(now.date()), lastDate(lastTime.date()); + QString dt; + if (lastDate == nowDate) { + dt = lastTime.toString(qsl("hh:mm")); + } else if (lastDate.year() == nowDate.year() && lastDate.weekNumber() == nowDate.weekNumber()) { + dt = langDayOfWeek(lastDate); + } else { + dt = lastDate.toString(qsl("d.MM.yy")); + } + int32 dtWidth = st::dlgDateFont->m.width(dt); + rectForName.setWidth(rectForName.width() - dtWidth - st::dlgDateSkip); + p.setFont(st::dlgDateFont->f); + p.setPen((act ? st::dlgActiveDateColor : st::dlgDateColor)->p); + p.drawText(rectForName.left() + rectForName.width() + st::dlgDateSkip, rectForName.top() + st::msgNameFont->height - st::msgDateFont->descent, dt); + + // draw check + if (_item->out() && _item->needCheck()) { + const style::sprite *check; + if (_item->id > 0) { + if (_item->unread()) { + check = act ? &st::dlgActiveCheckImg : &st::dlgCheckImg; + } else { + check = act ? &st::dlgActiveDblCheckImg : &st::dlgDblCheckImg; + } + } else { + check = act ? &st::dlgActiveSendImg : &st::dlgSendImg; + } + rectForName.setWidth(rectForName.width() - check->pxWidth() - st::dlgCheckSkip); + p.drawPixmap(QPoint(rectForName.left() + rectForName.width() + st::dlgCheckLeft, rectForName.top() + st::dlgCheckTop), App::sprite(), *check); + } + + // draw unread + int32 lastWidth = namewidth, unread = history->unreadCount; + _item->drawInDialog(p, QRect(nameleft, st::dlgPaddingVer + st::dlgFont->height + st::dlgSep, lastWidth, st::dlgFont->height), act, _cacheFor, _cache); + + p.setPen((act ? st::dlgActiveColor : st::dlgNameColor)->p); + history->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); +} + History::History(const PeerId &peerId) : width(0), height(0) , msgCount(0) -, offset(0) , unreadCount(0) , inboxReadTill(0) , outboxReadTill(0) , showFrom(0) -, notifyFrom(0) , unreadBar(0) -, unreadLoaded(true) , peer(App::peer(peerId)) +, oldLoaded(false) +, newLoaded(true) +, last(0) +, activeMsgId(0) , lastWidth(0) , lastScrollTop(History::ScrollMax) , mute(isNotifyMuted(peer->notify)) @@ -746,7 +806,7 @@ Histories::Parent::iterator Histories::erase(Histories::Parent::iterator i) { return Parent::erase(i); } -PeerId Histories::addToBack(const MTPmessage &msg, bool newMsg) { +HistoryItem *Histories::addToBack(const MTPmessage &msg, int msgState) { PeerId from_id = 0, to_id = 0; switch (msg.type()) { case mtpc_message: @@ -770,11 +830,24 @@ PeerId Histories::addToBack(const MTPmessage &msg, bool newMsg) { if (h == end()) { h = insert(peer, new History(peer)); } - h.value()->addToBack(msg, newMsg); - return peer; + if (msgState < 0) { + return h.value()->addToHistory(msg); + } + if (!h.value()->loadedAtBottom()) { + HistoryItem *item = h.value()->addToHistory(msg); + if (item) { + h.value()->last = item; + if (msgState > 0) { + h.value()->newItemAdded(item); + } + } + return item; + } + return h.value()->addToBack(msg, msgState > 0); } + /* -PeerId Histories::addToBack(const MTPgeoChatMessage &msg, bool newMsg) { +HistoryItem *Histories::addToBack(const MTPgeoChatMessage &msg, bool newMsg) { PeerId peer = 0; switch (msg.type()) { case mtpc_geoChatMessage: @@ -790,11 +863,10 @@ PeerId Histories::addToBack(const MTPgeoChatMessage &msg, bool newMsg) { if (h == end()) { h = insert(peer, new History(peer)); } - h.value()->addToBack(msg, newMsg); - return peer; + return h.value()->addToBack(msg, newMsg); }/**/ -HistoryItem *History::createItem(HistoryBlock *block, const MTPmessage &msg, bool newMsg) { +HistoryItem *History::createItem(HistoryBlock *block, const MTPmessage &msg, bool newMsg, bool returnExisting) { HistoryItem *result = 0; switch (msg.type()) { @@ -870,7 +942,7 @@ HistoryItem *History::createItem(HistoryBlock *block, const MTPmessage &msg, boo } break; } - return regItem(result); + return regItem(result, returnExisting); } HistoryItem *History::createItemForwarded(HistoryBlock *block, MsgId id, HistoryMessage *msg) { @@ -902,7 +974,7 @@ HistoryItem *History::createItem(HistoryBlock *block, const MTPgeoChatMessage &m return regItem(result); } /**/ -void History::addToBackService(MsgId msgId, QDateTime date, const QString &text, bool out, bool unread, HistoryMedia *media, bool newMsg) { +HistoryItem *History::addToBackService(MsgId msgId, QDateTime date, const QString &text, bool out, bool unread, HistoryMedia *media, bool newMsg) { HistoryBlock *to = 0; bool newBlock = isEmpty(); if (newBlock) { @@ -911,10 +983,10 @@ void History::addToBackService(MsgId msgId, QDateTime date, const QString &text, to = back(); } - doAddToBack(to, newBlock, regItem(new HistoryServiceMsg(this, to, msgId, date, text, out, unread, media)), newMsg); + return doAddToBack(to, newBlock, regItem(new HistoryServiceMsg(this, to, msgId, date, text, out, unread, media)), newMsg); } -void History::addToBack(const MTPmessage &msg, bool newMsg) { +HistoryItem *History::addToBack(const MTPmessage &msg, bool newMsg) { HistoryBlock *to = 0; bool newBlock = isEmpty(); if (newBlock) { @@ -922,10 +994,14 @@ void History::addToBack(const MTPmessage &msg, bool newMsg) { } else { to = back(); } - doAddToBack(to, newBlock, createItem(to, msg, newMsg), newMsg); + return doAddToBack(to, newBlock, createItem(to, msg, newMsg), newMsg); } -void History::addToBackForwarded(MsgId id, HistoryMessage *item) { +HistoryItem *History::addToHistory(const MTPmessage &msg) { + return createItem(0, msg, false, true); +} + +HistoryItem *History::addToBackForwarded(MsgId id, HistoryMessage *item) { HistoryBlock *to = 0; bool newBlock = isEmpty(); if (newBlock) { @@ -933,11 +1009,11 @@ void History::addToBackForwarded(MsgId id, HistoryMessage *item) { } else { to = back(); } - doAddToBack(to, newBlock, createItemForwarded(to, id, item), true); + return doAddToBack(to, newBlock, createItemForwarded(to, id, item), true); } /* -void History::addToBack(const MTPgeoChatMessage &msg, bool newMsg) { +HistoryItem *History::addToBack(const MTPgeoChatMessage &msg, bool newMsg) { HistoryBlock *to = 0; bool newBlock = isEmpty(); if (newBlock) { @@ -946,7 +1022,7 @@ void History::addToBack(const MTPgeoChatMessage &msg, bool newMsg) { to = back(); } - doAddToBack(to, newBlock, createItem(to, msg, newMsg), newMsg); + return doAddToBack(to, newBlock, createItem(to, msg, newMsg), newMsg); } /**/ @@ -965,10 +1041,10 @@ void History::createInitialDateBlock(const QDateTime &date) { push_front(dateBlock); // date block } -void History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem *adding, bool newMsg) { +HistoryItem *History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem *adding, bool newMsg) { if (!adding) { if (newBlock) delete to; - return; + return adding; } if (newBlock) { @@ -987,6 +1063,7 @@ void History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem *adding, } } to->push_back(adding); + last = adding; adding->y = to->height; if (width) { int32 dh = adding->resize(width); @@ -994,37 +1071,42 @@ void History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem *adding, height += dh; } setMsgCount(msgCount + 1); - if (adding->id > 0) { - ++offset; - } if (newMsg) { - App::checkImageCacheSize(); - if (adding->from()) { - TypingUsers::iterator i = typing.find(adding->from()); - if (i != typing.end()) { - uint64 ms = getms(); - i.value() = ms; - updateTyping(ms, 0, true); - App::main()->topBar()->update(); - } - } - if (adding->out()) { - inboxRead(false); - if (unreadBar) unreadBar->destroy(); - } else if (adding->unread()) { - if (!notifyFrom) notifyFrom = adding; - App::main()->newUnreadMsg(this, adding->id); - } - if (dialogs.isEmpty()) { - App::main()->createDialogAtTop(this, unreadCount); - } else { - emit App::main()->dialogToTop(dialogs); + newItemAdded(adding); + } + return adding; +} + +void History::newItemAdded(HistoryItem *item) { + App::checkImageCacheSize(); + if (item->from()) { + TypingUsers::iterator i = typing.find(item->from()); + if (i != typing.end()) { + uint64 ms = getms(); + i.value() = ms; + updateTyping(ms, 0, true); + App::main()->topBar()->update(); } } + if (item->out()) { + inboxRead(false); + if (unreadBar) unreadBar->destroy(); + } else if (item->unread()) { + notifies.push_back(item); + App::main()->newUnreadMsg(this, item->id); + } + if (dialogs.isEmpty()) { + App::main()->createDialogAtTop(this, unreadCount); + } else { + emit App::main()->dialogToTop(dialogs); + } } void History::addToFront(const QVector &slice) { - if (slice.isEmpty()) return; + if (slice.isEmpty()) { + oldLoaded = true; + return; + } int32 addToH = 0, skip = 0; if (!isEmpty()) { @@ -1049,9 +1131,6 @@ void History::addToFront(const QVector &slice) { adding->y = block->height; block->height += adding->resize(width); setMsgCount(msgCount + 1); - if (adding->id > 0) { - ++offset; - } prev = adding; } if (i == e) break; @@ -1063,7 +1142,7 @@ void History::addToFront(const QVector &slice) { block->height += dayItem->resize(width); } if (block->size()) { - if (wasMsgCount < unreadCount && msgCount >= unreadCount) { + if (wasMsgCount < unreadCount && msgCount >= unreadCount && !activeMsgId) { for (int32 i = block->size(); i > 0; --i) { if ((*block)[i - 1]->itemType() == HistoryItem::MsgType) { ++wasMsgCount; @@ -1105,9 +1184,66 @@ void History::addToFront(const QVector &slice) { } } +void History::addToBack(const QVector &slice) { + if (slice.isEmpty()) { + newLoaded = true; + return; + } + + bool wasEmpty = isEmpty(); + + HistoryItem *prev = isEmpty() ? 0 : back()->back(); + + HistoryBlock *block = new HistoryBlock(this); + block->reserve(slice.size()); + int32 wasMsgCount = msgCount; + for (QVector::const_iterator i = slice.cend(), e = slice.cbegin(); i != e;) { + --i; + HistoryItem *adding = createItem(block, *i, false); + if (adding) { + if (prev && prev->date.date() != adding->date.date()) { + HistoryItem *dayItem = createDayServiceMsg(this, block, adding->date); + prev->block()->push_back(dayItem); + dayItem->y = prev->block()->height; + prev->block()->height += dayItem->resize(width); + if (prev->block() != block) { + height += dayItem->height(); + } + } + block->push_back(adding); + adding->y = block->height; + block->height += adding->resize(width); + setMsgCount(msgCount + 1); + prev = adding; + } + if (i == e) break; + } + if (block->size()) { + block->y = height; + push_back(block); + height += block->height; + } else { + newLoaded = true; + fixLastMessage(true); + delete block; + } + if (wasEmpty && !isEmpty()) { + HistoryBlock *dateBlock = new HistoryBlock(this); + HistoryItem *dayItem = createDayServiceMsg(this, dateBlock, front()->front()->date); + dateBlock->push_back(dayItem); + int32 dh = dayItem->resize(width); + dateBlock->height = dh; + for (iterator i = begin(), e = end(); i != e; ++i) { + (*i)->y += dh; + } + push_front(dateBlock); // date block + height += dh; + } +} + void History::inboxRead(bool byThisInstance) { if (unreadCount) { - if (!byThisInstance) App::main()->historyToDown(this); + if (!byThisInstance && loadedAtBottom()) App::main()->historyToDown(this); setUnreadCount(0); } if (!isEmpty()) { @@ -1118,7 +1254,7 @@ void History::inboxRead(bool byThisInstance) { if (App::main()) App::main()->dlgUpdated(dialogs[0]); } App::wnd()->psClearNotify(this); - clearNotifyFrom(); + clearNotifications(); } void History::outboxRead() { @@ -1130,7 +1266,7 @@ void History::outboxRead() { void History::setUnreadCount(int32 newUnreadCount, bool psUpdate) { if (unreadCount != newUnreadCount) { - if (!unreadCount && newUnreadCount == 1) { + if (!unreadCount && newUnreadCount == 1 && loadedAtBottom()) { showFrom = isEmpty() ? 0 : back()->back(); } else if (!newUnreadCount) { showFrom = 0; @@ -1138,7 +1274,6 @@ void History::setUnreadCount(int32 newUnreadCount, bool psUpdate) { App::histories().unreadFull += newUnreadCount - unreadCount; if (mute) App::histories().unreadMuted += newUnreadCount - unreadCount; unreadCount = newUnreadCount; - unreadLoaded = (unreadCount <= msgCount); if (psUpdate) App::wnd()->psUpdateCounter(); if (unreadBar) unreadBar->setCount(unreadCount); } @@ -1147,7 +1282,6 @@ void History::setUnreadCount(int32 newUnreadCount, bool psUpdate) { void History::setMsgCount(int32 newMsgCount) { if (msgCount != newMsgCount) { msgCount = newMsgCount; - unreadLoaded = (unreadCount <= msgCount); } } @@ -1160,6 +1294,10 @@ void History::setMsgCount(int32 newMsgCount) { } void History::getNextShowFrom(HistoryBlock *block, int32 i) { + if (!loadedAtBottom()) { + showFrom = 0; + return; + } if (i >= 0) { int32 l = block->size(); for (++i; i < l; ++i) { @@ -1186,7 +1324,7 @@ void History::getNextShowFrom(HistoryBlock *block, int32 i) { } void History::addUnreadBar() { - if (unreadBar || !showFrom || !unreadCount) return; + if (unreadBar || !showFrom || !unreadCount || !loadedAtBottom()) return; HistoryBlock *block = showFrom->block(); int32 i = block->indexOf(showFrom); @@ -1210,41 +1348,77 @@ void History::addUnreadBar() { height += dh; } -void History::getNextNotifyFrom(HistoryBlock *block, int32 i) { - if (!block) { - if (!notifyFrom) { - return; - } - block = notifyFrom->block(); - i = block->indexOf(notifyFrom); - } - if (i >= 0) { - int32 l = block->size(); - for (++i; i < l; ++i) { - if ((*block)[i]->unread() && !(*block)[i]->out()) { - notifyFrom = (*block)[i]; - return; - } - } - } - - int32 j = indexOf(block), s = size(); - if (j >= 0) { - for (++j; j < s; ++j) { - block = (*this)[j]; - for (int32 i = 0, l = block->size(); i < l; ++i) { - if ((*block)[i]->unread() && !(*block)[i]->out()) { - notifyFrom = (*block)[i]; - return; - } - } - } - } - notifyFrom = 0; +void History::clearNotifications() { + notifies.clear(); } -void History::clearNotifyFrom() { - notifyFrom = 0; +bool History::readyForWork() const { + return activeMsgId ? !isEmpty() : (unreadCount <= msgCount); +} + +bool History::loadedAtBottom() const { + return newLoaded; +} + +bool History::loadedAtTop() const { + return oldLoaded; +} + +void History::fixLastMessage(bool wasAtBottom) { + if (wasAtBottom && isEmpty()) { + wasAtBottom = false; + } + if (wasAtBottom) { + last = back()->back(); + } else { + last = 0; + if (App::main()) { + App::main()->checkPeerHistory(peer); + } + } +} + +void History::loadAround(MsgId msgId) { + if (activeMsgId != msgId) { + activeMsgId = msgId; + lastWidth = 0; + if (activeMsgId) { + HistoryItem *item = App::histItemById(activeMsgId); + if (!item || !item->block()) { + clear(true); + } + newLoaded = last && !last->detached(); + } else { + if (!loadedAtBottom()) { + clear(true); + } + newLoaded = isEmpty() || last && !last->detached(); + } + } +} + +MsgId History::minMsgId() const { + for (const_iterator i = cbegin(), e = cend(); i != e; ++i) { + for (HistoryBlock::const_iterator j = (*i)->cbegin(), en = (*i)->cend(); j != en; ++j) { + if ((*j)->id > 0) { + return (*j)->id; + } + } + } + return 0; +} + +MsgId History::maxMsgId() const { + for (const_iterator i = cend(), e = cbegin(); i != e;) { + --i; + for (HistoryBlock::const_iterator j = (*i)->cend(), en = (*i)->cbegin(); j != en;) { + --j; + if ((*j)->id > 0) { + return (*j)->id; + } + } + } + return 0; } int32 History::geomResize(int32 newWidth, int32 *ytransform) { @@ -1269,13 +1443,26 @@ int32 History::geomResize(int32 newWidth, int32 *ytransform) { return height; } -void History::clear() { +void History::clear(bool leaveItems) { + if (unreadBar) { + unreadBar->destroy(); + } + if (showFrom) { + showFrom = 0; + } for (Parent::const_iterator i = cbegin(), e = cend(); i != e; ++i) { + if (leaveItems) { + (*i)->clear(true); + } delete *i; } Parent::clear(); - setUnreadCount(0); setMsgCount(0); + if (!leaveItems) { + setUnreadCount(0); + } + height = 0; + oldLoaded = false; } History::Parent::iterator History::erase(History::Parent::iterator i) { @@ -1328,12 +1515,19 @@ int32 HistoryBlock::geomResize(int32 newWidth, int32 *ytransform) { return height; } -void HistoryBlock::clear() { - for (Parent::const_iterator i = cbegin(), e = cend(); i != e; ++i) { - delete *i; +void HistoryBlock::clear(bool leaveItems) { + if (leaveItems) { + for (Parent::const_iterator i = cbegin(), e = cend(); i != e; ++i) { + (*i)->detachFast(); + } + } else { + for (Parent::const_iterator i = cbegin(), e = cend(); i != e; ++i) { + delete *i; + } } Parent::clear(); } + HistoryBlock::Parent::iterator HistoryBlock::erase(HistoryBlock::Parent::iterator i) { delete *i; return Parent::erase(i); @@ -1341,9 +1535,6 @@ HistoryBlock::Parent::iterator HistoryBlock::erase(HistoryBlock::Parent::iterato void HistoryBlock::removeItem(HistoryItem *item) { int32 i = indexOf(item), dh = 0; - if (history->notifyFrom == item) { - history->getNextNotifyFrom(this, i); - } if (history->showFrom == item) { history->getNextShowFrom(this, i); } @@ -1406,9 +1597,6 @@ void HistoryBlock::removeItem(HistoryItem *item) { if (!item->out() && item->unread() && history->unreadCount) { history->setUnreadCount(history->unreadCount - 1); } - if (item->id > 0) { - --history->offset; - } int32 itemType = item->itemType(); if (itemType == HistoryItem::MsgType) { history->setMsgCount(history->msgCount - 1); @@ -1430,10 +1618,6 @@ void HistoryBlock::removeItem(HistoryItem *item) { } else { history->removeBlock(this); } - delete item; - if (h->unreadBar && h->back()->back() == h->unreadBar) { - h->unreadBar->destroy(); - } } HistoryItem::HistoryItem(History *history, HistoryBlock *block, MsgId msgId, bool out, bool unread, QDateTime msgDate, int32 from) : y(0) @@ -1460,6 +1644,28 @@ void HistoryItem::markRead() { } } +void HistoryItem::detach() { + if (_history && _history->unreadBar == this) { + _history->unreadBar = 0; + } + if (_block) { + _block->removeItem(this); + detachFast(); + App::historyItemDetached(this); + } else { + if (_history->showFrom == this) { + _history->showFrom = 0; + } + } + if (_history && _history->unreadBar && _history->back()->back() == _history->unreadBar) { + _history->unreadBar->destroy(); + } +} + +void HistoryItem::detachFast() { + _block = 0; +} + HistoryItem::~HistoryItem() { App::historyUnregItem(this); if (id < 0) { @@ -1467,12 +1673,14 @@ HistoryItem::~HistoryItem() { } } -HistoryItem *regItem(HistoryItem *item) { - if (item && App::historyRegItem(item)) { - return item; +HistoryItem *regItem(HistoryItem *item, bool returnExisting) { + if (!item) return 0; + HistoryItem *existing = App::historyRegItem(item); + if (existing) { + delete item; + return returnExisting ? existing : 0; } - delete item; - return 0; + return item; } HistoryPhoto::HistoryPhoto(const MTPDphoto &photo, int32 width) : data(App::feedPhoto(photo)) @@ -2497,6 +2705,21 @@ HistoryMedia *HistoryMessage::getMedia() const { void HistoryMessage::draw(QPainter &p, uint32 selection) const { textstyleSet(&(out() ? st::outTextStyle : st::inTextStyle)); + if (id == _history->activeMsgId) { + uint64 ms = App::main() ? App::main()->animActiveTime() : 0; + if (ms) { + if (ms > st::activeFadeInDuration + st::activeFadeOutDuration) { + App::main()->stopAnimActive(); + } else { + float64 dt = (ms > st::activeFadeInDuration) ? (1 - (ms - st::activeFadeInDuration) / float64(st::activeFadeOutDuration)) : (ms / float64(st::activeFadeInDuration)); + float64 o = p.opacity(); + p.setOpacity(o * dt); + p.fillRect(0, 0, _history->width, _height, textstyleCurrent()->selectOverlay->b); + p.setOpacity(o); + } + } + } + bool selected = (selection == FullItemSel); if (_from->nameVersion > _fromVersion) { fromNameUpdated(); diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index 167f02219..b641d783e 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -527,8 +527,8 @@ struct Histories : public QHash { unreadFull = unreadMuted = 0; } - PeerId addToBack(const MTPmessage &msg, bool newMsg = true); -// PeerId addToBack(const MTPgeoChatMessage &msg, bool newMsg = true); + HistoryItem *addToBack(const MTPmessage &msg, int msgState = 1); // 1 - new message, 0 - not new message, -1 - searched message +// HistoryItem *addToBack(const MTPgeoChatMessage &msg, bool newMsg = true); typedef QMap TypingHistories; // when typing in this history started TypingHistories typing; @@ -551,6 +551,17 @@ struct DialogRow { void *attached; // for any attached data, for example View in contacts list }; +struct FakeDialogRow { + FakeDialogRow(HistoryItem *item) : _item(item), _cacheFor(0), _cache(st::dlgRichMinWidth) { + } + + void paint(QPainter &p, int32 w, bool act, bool sel) const; + + HistoryItem *_item; + mutable const HistoryItem *_cacheFor; + mutable Text _cache; +}; + class HistoryMedia; class HistoryMessage; class HistoryUnreadBar; @@ -558,7 +569,7 @@ struct History : public QList { History(const PeerId &peerId); typedef QList Parent; - void clear(); + void clear(bool leaveItems = false); Parent::iterator erase(Parent::iterator i); void blockResized(HistoryBlock *block, int32 dh); void removeBlock(HistoryBlock *block); @@ -567,16 +578,21 @@ struct History : public QList { clear(); } - HistoryItem *createItem(HistoryBlock *block, const MTPmessage &msg, bool newMsg); + HistoryItem *createItem(HistoryBlock *block, const MTPmessage &msg, bool newMsg, bool returnExisting = false); HistoryItem *createItemForwarded(HistoryBlock *block, MsgId id, HistoryMessage *msg); // HistoryItem *createItem(HistoryBlock *block, const MTPgeoChatMessage &msg, bool newMsg); - void addToBackService(MsgId msgId, QDateTime date, const QString &text, bool out = false, bool unread = false, HistoryMedia *media = 0, bool newMsg = true); - void addToBack(const MTPmessage &msg, bool newMsg = true); - void addToBackForwarded(MsgId id, HistoryMessage *item); -// void addToBack(const MTPgeoChatMessage &msg, bool newMsg = true); + HistoryItem *addToBackService(MsgId msgId, QDateTime date, const QString &text, bool out = false, bool unread = false, HistoryMedia *media = 0, bool newMsg = true); + HistoryItem *addToBack(const MTPmessage &msg, bool newMsg = true); + HistoryItem *addToHistory(const MTPmessage &msg); + HistoryItem *addToBackForwarded(MsgId id, HistoryMessage *item); +// HistoryItem *addToBack(const MTPgeoChatMessage &msg, bool newMsg = true); void addToFront(const QVector &slice); + void addToBack(const QVector &slice); void createInitialDateBlock(const QDateTime &date); - void doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem *adding, bool newMsg); + HistoryItem *doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem *adding, bool newMsg); + + void newItemAdded(HistoryItem *item); + void inboxRead(bool byThisInstance = false); void outboxRead(); @@ -585,18 +601,66 @@ struct History : public QList { void setMute(bool newMute); void getNextShowFrom(HistoryBlock *block, int32 i); void addUnreadBar(); - void getNextNotifyFrom(HistoryBlock *block = 0, int32 i = 0); - void clearNotifyFrom(); + void clearNotifications(); + + bool readyForWork() const; // all unread loaded or loaded around activeMsgId + bool loadedAtBottom() const; // last message is in the list + bool loadedAtTop() const; // nothing was added after loading history back + + void fixLastMessage(bool wasAtBottom); + + void loadAround(MsgId msgId); + + MsgId minMsgId() const; + MsgId maxMsgId() const; int32 geomResize(int32 newWidth, int32 *ytransform = 0); // return new size - int32 width, height, msgCount, offset, unreadCount; + int32 width, height, msgCount, unreadCount; int32 inboxReadTill, outboxReadTill; HistoryItem *showFrom; - HistoryItem *notifyFrom; HistoryUnreadBar *unreadBar; - bool unreadLoaded; PeerData *peer; + bool oldLoaded, newLoaded; + HistoryItem *last; + MsgId activeMsgId; + + typedef QList NotifyQueue; + NotifyQueue notifies; + + void removeNotification(HistoryItem *item) { + if (!notifies.isEmpty()) { + for (NotifyQueue::iterator i = notifies.begin(), e = notifies.end(); i != e; ++i) { + if ((*i) == item) { + notifies.erase(i); + break; + } + } + } + } + HistoryItem *currentNotification() { + return notifies.isEmpty() ? 0 : notifies.front(); + } + void skipNotification() { + if (!notifies.isEmpty()) { + notifies.pop_front(); + } + } + + void itemReplaced(HistoryItem *old, HistoryItem *item) { + if (!notifies.isEmpty()) { + for (NotifyQueue::iterator i = notifies.begin(), e = notifies.end(); i != e; ++i) { + if ((*i) == old) { + *i = item; + break; + } + } + } + if (last == old) { + last = item; + } + // showFrom can't be detached + } QString draft; QTextCursor draftCur; @@ -911,7 +975,7 @@ struct HistoryBlock : public QVector { } typedef QVector Parent; - void clear(); + void clear(bool leaveItems = false); Parent::iterator erase(Parent::iterator i); ~HistoryBlock() { clear(); @@ -979,7 +1043,18 @@ public: } void destroy() { markRead(); - _block->removeItem(this); + bool wasAtBottom = history()->loadedAtBottom(); + _history->removeNotification(this); + detach(); + if (history()->last == this) { + history()->fixLastMessage(wasAtBottom); + } + delete this; + } + void detach(); + void detachFast(); + bool detached() const { + return !_block; } bool out() const { return _out; @@ -1047,7 +1122,7 @@ protected: }; -HistoryItem *regItem(HistoryItem *item); +HistoryItem *regItem(HistoryItem *item, bool returnExisting = false); enum HistoryMediaType { MediaTypePhoto, diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 843df4654..673b446ee 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -72,8 +72,12 @@ void HistoryList::messagesReceived(const QVector &messages) { hist->addToFront(messages); } +void HistoryList::messagesReceivedDown(const QVector &messages) { + hist->addToBack(messages); +} + void HistoryList::updateMsg(HistoryItem *msg) { - if (!msg || !hist || hist != msg->history()) return; + if (!msg || msg->detached() || !hist || hist != msg->history()) return; update(0, height() - hist->height - st::historyPadding + msg->block()->y + msg->y, width(), msg->height()); } @@ -331,7 +335,7 @@ void HistoryList::touchScrollUpdated(const QPoint &screenPos) { } QPoint HistoryList::mapMouseToItem(QPoint p, HistoryItem *item) { - if (!item) return QPoint(0, 0); + if (!item || item->detached()) return QPoint(0, 0); p.setY(p.y() - (height() - hist->height - st::historyPadding) - item->block()->y - item->y); return p; } @@ -550,13 +554,22 @@ void HistoryList::mouseReleaseEvent(QMouseEvent *e) { } void HistoryList::mouseDoubleClickEvent(QMouseEvent *e) { - if (_dragAction == Selecting && _dragSelType == TextSelectLetters && _dragItem && !_selected.isEmpty() && _selected.cbegin().value() != FullItemSel) { + if ((_dragAction == Selecting && !_selected.isEmpty() && _selected.cbegin().value() != FullItemSel || _dragAction == NoDrag && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel)) && _dragSelType == TextSelectLetters && _dragItem) { bool afterDragSymbol, uponSelected; uint16 symbol; _dragItem->getSymbol(symbol, afterDragSymbol, uponSelected, _dragStartPos.x(), _dragStartPos.y()); if (uponSelected) { _dragSymbol = symbol; _dragSelType = TextSelectWords; + if (_dragAction == NoDrag) { + _dragAction = Selecting; + uint32 selStatus = (symbol << 16) | symbol; + if (!_selected.isEmpty()) { + updateMsg(_selected.cbegin().key()); + _selected.clear(); + } + _selected.insert(_dragItem, selStatus); + } mouseMoveEvent(e); _trippleClickPoint = e->globalPos(); @@ -1436,17 +1449,15 @@ HistoryHider::~HistoryHider() { } HistoryWidget::HistoryWidget(QWidget *parent) : QWidget(parent) - , histOffset(0) - , histCount(-1) - , histReadRequestId(0) , histRequestsCount(0) , histPeer(0) - , _activePeer(0) + , _activeHist(0) , histPreloading(0) , _scroll(this, st::historyScroll, false) , _list(0) , hist(0) , _histInited(false) + , _toHistoryEnd(this, st::historyToEnd) , _send(this, lang(lng_send_button), st::btnSend) , _attachDocument(this, st::btnAttachDocument) , _attachPhoto(this, st::btnAttachPhoto) @@ -1472,6 +1483,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : QWidget(parent) setAcceptDrops(true); connect(&_scroll, SIGNAL(scrolled()), this, SLOT(onListScroll())); + connect(&_toHistoryEnd, SIGNAL(clicked()), this, SLOT(onHistoryToEnd())); connect(&_send, SIGNAL(clicked()), this, SLOT(onSend())); connect(&_attachDocument, SIGNAL(clicked()), this, SLOT(onDocumentSelect())); connect(&_attachPhoto, SIGNAL(clicked()), this, SLOT(onPhotoSelect())); @@ -1489,8 +1501,14 @@ HistoryWidget::HistoryWidget(QWidget *parent) : QWidget(parent) _scrollTimer.setSingleShot(false); + _animActiveTimer.setSingleShot(false); + connect(&_animActiveTimer, SIGNAL(timeout()), this, SLOT(onAnimActiveStep())); + _scroll.hide(); _scroll.move(0, 0); + + _toHistoryEnd.hide(); + _field.hide(); _field.resize(width() - _send.width() - _attachDocument.width() - _attachEmoji.width(), _send.height() - 2 * st::sendPadding); _send.hide(); @@ -1509,6 +1527,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : QWidget(parent) _emojiPan.hide(); _attachDragDocument.hide(); _attachDragPhoto.hide(); + connect(&_attachDragDocument, SIGNAL(dropped(QDropEvent*)), this, SLOT(onDocumentDrop(QDropEvent*))); connect(&_attachDragPhoto, SIGNAL(dropped(QDropEvent*)), this, SLOT(onPhotoDrop(QDropEvent*))); } @@ -1565,7 +1584,7 @@ void HistoryWidget::chatLoaded(const MTPmessages_ChatFull &res) { peerUpdated(App::chat(peerId)); } -void HistoryWidget::showPeer(const PeerId &peer, bool force, bool leaveActive) { +void HistoryWidget::showPeer(const PeerId &peer, MsgId msgId, bool force, bool leaveActive) { if (App::main()->selectingPeer() && !force) { hiderOffered = true; App::main()->offerPeer(peer); @@ -1577,19 +1596,31 @@ void HistoryWidget::showPeer(const PeerId &peer, bool force, bool leaveActive) { if (hist) { if (histPeer->id == peer) { if (hist->unreadBar) hist->unreadBar->destroy(); + if (msgId != hist->activeMsgId) { + hist->loadAround(msgId); + if (histPreloading) MTP::cancel(histPreloading); + if (histPreloadingDown) MTP::cancel(histPreloadingDown); + histPreloading = histPreloadingDown = 0; + } checkUnreadLoaded(); return activate(); } updateTyping(false); } - if (histPreload.size() && _list) { - _list->messagesReceived(histPreload); - histPreload.clear(); + if (_list) { + if (!histPreload.isEmpty()) { + _list->messagesReceived(histPreload); + histPreload.clear(); + } + if (!histPreloadDown.isEmpty()) { + _list->messagesReceivedDown(histPreloadDown); + histPreloadDown.clear(); + } } if (hist) { hist->draft = _field.getText(); hist->draftCur = _field.textCursor(); - if (hist->unreadLoaded && _scroll.scrollTop() + 1 <= _scroll.scrollTopMax()) { + if (hist->readyForWork() && _scroll.scrollTop() + 1 <= _scroll.scrollTopMax()) { hist->lastWidth = _list->width(); } else { hist->lastWidth = 0; @@ -1603,26 +1634,25 @@ void HistoryWidget::showPeer(const PeerId &peer, bool force, bool leaveActive) { _list = 0; updateTopBarSelection(); - if (leaveActive && histPeer) { - _activePeer = histPeer; + if (leaveActive && hist) { + _activeHist = hist; } else { if (!leaveActive) { - _activePeer = 0; + _activeHist = 0; } if (hist) { App::main()->dlgUpdated(hist); } } histPeer = peer ? App::peer(peer) : 0; - histOffset = 0; - histReadRequestId = 0; titlePeerText = QString(); titlePeerTextWidth = 0; histRequestsCount = 0; - histCount = -1; histPreload.clear(); + histPreloadDown.clear(); if (histPreloading) MTP::cancel(histPreloading); - histPreloading = 0; + if (histPreloadingDown) MTP::cancel(histPreloadingDown); + histPreloading = histPreloadingDown = 0; hist = 0; _histInited = false; noSelectingScroll(); @@ -1653,14 +1683,15 @@ void HistoryWidget::showPeer(const PeerId &peer, bool force, bool leaveActive) { } else { hist = i.value(); } - if (hist->unreadLoaded) { + if (hist->readyForWork()) { _scroll.show(); } if (hist) { App::main()->dlgUpdated(hist); } - histOffset = hist->offset; _list = new HistoryList(this, &_scroll, hist); + hist->loadAround(msgId); + _list->hide(); _scroll.setWidget(_list); _list->show(); @@ -1689,7 +1720,7 @@ void HistoryWidget::showPeer(const PeerId &peer, bool force, bool leaveActive) { void HistoryWidget::checkUnreadLoaded(bool checkOnlyShow) { if (!hist) return; - if (hist->unreadLoaded) { + if (hist->readyForWork()) { if (checkOnlyShow && !_scroll.isHidden()) return; if (!animating()) { if (_scroll.isHidden()) { @@ -1702,7 +1733,7 @@ void HistoryWidget::checkUnreadLoaded(bool checkOnlyShow) { } updateListSize(0, true); if (!animating()) updateControlsVisibility(); - if (hist->unreadLoaded) { + if (hist->readyForWork()) { if (!_scroll.isHidden() && !_list->isHidden()) { onListScroll(); } @@ -1715,6 +1746,7 @@ void HistoryWidget::updateControlsVisibility() { if (!hist) { _scroll.hide(); _send.hide(); + _toHistoryEnd.hide(); _field.hide(); _attachDocument.hide(); _attachPhoto.hide(); @@ -1724,7 +1756,12 @@ void HistoryWidget::updateControlsVisibility() { return; } - if (hist->unreadLoaded) { + if (hist->readyForWork()) { + if (hist->loadedAtBottom()) { + _toHistoryEnd.hide(); + } else { + _toHistoryEnd.show(); + } if (!histPeer->chat || !histPeer->asChat()->forbidden) { _send.show(); if (cDefaultAttach() == dbidaPhoto) { @@ -1735,6 +1772,7 @@ void HistoryWidget::updateControlsVisibility() { _attachEmoji.show(); if (_field.isHidden()) { _field.show(); + resizeEvent(0); update(); } } else { @@ -1746,15 +1784,17 @@ void HistoryWidget::updateControlsVisibility() { _emojiPan.hide(); if (!_field.isHidden()) { _field.hide(); + resizeEvent(0); update(); } } + if (hist->unreadCount && App::wnd()->historyIsActive()) { historyWasRead(); } } else { loadMessages(); - if (!hist->unreadLoaded) { + if (!hist->readyForWork()) { _scroll.hide(); _send.hide(); _attachDocument.hide(); @@ -1762,6 +1802,7 @@ void HistoryWidget::updateControlsVisibility() { _attachEmoji.hide(); _attachType.hide(); _emojiPan.hide(); + _toHistoryEnd.hide(); if (!_field.isHidden()) { _field.hide(); update(); @@ -1772,7 +1813,7 @@ void HistoryWidget::updateControlsVisibility() { void HistoryWidget::newUnreadMsg(History *history, MsgId msgId) { if (App::wnd()->historyIsActive()) { - if (hist == history && hist->unreadLoaded) { + if (hist == history && hist->readyForWork()) { historyWasRead(); if (_scroll.scrollTop() + 1 > _scroll.scrollTopMax()) { if (history->unreadBar) history->unreadBar->destroy(); @@ -1784,7 +1825,7 @@ void HistoryWidget::newUnreadMsg(History *history, MsgId msgId) { history->setUnreadCount(history->unreadCount + 1); } } else { - if (hist == history && hist->unreadLoaded) { + if (hist == history && hist->readyForWork()) { if (_scroll.scrollTop() + 1 > _scroll.scrollTopMax()) { if (history->unreadBar) history->unreadBar->destroy(); } @@ -1810,15 +1851,17 @@ bool HistoryWidget::messagesFailed(const RPCError &e, mtpRequestId requestId) { LOG(("RPC Error: %1 %2: %3").arg(e.code()).arg(e.type()).arg(e.description())); if (histPreloading == requestId) { histPreloading = 0; + } else if (histPreloadingDown == requestId) { + histPreloadingDown = 0; } return true; } void HistoryWidget::messagesReceived(const MTPmessages_Messages &messages, mtpRequestId requestId) { - if (histPreloading == requestId) { - histPreloading = 0; + if (!hist) { + histPreloading = histPreloadingDown = 0; + return; } - if (!hist) return; PeerId peer = 0; int32 count = 0; @@ -1859,36 +1902,64 @@ void HistoryWidget::messagesReceived(const MTPmessages_Messages &messages, mtpRe peer = (to_id == App::peerFromUser(MTP::authedId())) ? from_id : to_id; } + bool down = false; + if (histPreloading == requestId) { + histPreloading = 0; + } else if (histPreloadingDown == requestId) { + histPreloadingDown = 0; + down = true; + } else { + return; + } + if (peer && peer != histPeer->id) return; if (histList) { - if (!histOffset) { - addMessagesToFront(*histList); + if (!hist->minMsgId() || histList->isEmpty()) { + if (down) { + addMessagesToBack(*histList); + histPreloadDown.clear(); + } else { + addMessagesToFront(*histList); + histPreload.clear(); + } } else { - histPreload = *histList; - } - - if (histList->size()) { - histOffset += histList->size(); - histCount = count; - } else { - histCount = histOffset; + if (down) { + histPreloadDown = *histList; + } else { + histPreload = *histList; + } } } else { - histCount = histOffset; - if (!hist->unreadLoaded) { - hist->setUnreadCount(hist->msgCount); + if (down) { + addMessagesToBack(QVector()); + } else { + addMessagesToFront(QVector()); + } + if (!hist->readyForWork()) { + if (hist->activeMsgId) { + hist->activeMsgId = 0; + } + if (!hist->readyForWork()) { + hist->setUnreadCount(hist->msgCount); + } } checkUnreadLoaded(true); return; } - if (histOffset >= histCount && histPreload.size()) { + if (down && hist->loadedAtBottom() && histPreloadDown.size()) { + addMessagesToBack(histPreloadDown); + histPreloadDown.clear(); + loadMessagesDown(); + } else if (!down && hist->loadedAtTop() && histPreload.size()) { addMessagesToFront(histPreload); histPreload.clear(); loadMessages(); - } else if (histPreload.size()) { + } else if (down && histPreloadDown.size() || !down && histPreload.size()) { onListScroll(); + } else if (down) { + loadMessagesDown(); } else { loadMessages(); } @@ -1901,11 +1972,20 @@ void HistoryWidget::windowShown() { resizeEvent(0); } +bool HistoryWidget::isActive() const { + return !hist || hist->loadedAtBottom(); +} + void HistoryWidget::loadMessages() { if (!hist) return; - if (histCount >= 0 && histOffset >= histCount) { - if (!hist->unreadLoaded) { - hist->setUnreadCount(hist->msgCount); + if (hist->loadedAtTop()) { + if (!hist->readyForWork()) { + if (hist->activeMsgId) { + hist->activeMsgId = 0; + } + if (!hist->readyForWork()) { + hist->setUnreadCount(hist->msgCount); + } } checkUnreadLoaded(true); return; @@ -1913,19 +1993,53 @@ void HistoryWidget::loadMessages() { int32 dh = 0; if (histPreload.size()) { - bool unreadLoaded = hist->unreadLoaded; + bool loaded = hist->readyForWork(); addMessagesToFront(histPreload); histPreload.clear(); checkUnreadLoaded(true); - if (!unreadLoaded && hist->unreadLoaded) { + if (!loaded && hist->readyForWork()) { return; } } - if (!histPreloading && (!hist->unreadLoaded || _scroll.scrollTop() < 3 * _scroll.height())) { - int32 loadCount = histOffset ? MessagesPerPage : MessagesFirstLoad; - histPreloading = MTP::send(MTPmessages_GetHistory(histInputPeer, MTP_int(histOffset), MTP_int(0), MTP_int(loadCount)), rpcDone(&HistoryWidget::messagesReceived), rpcFail(&HistoryWidget::messagesFailed)); + if (!histPreloading && (!hist->readyForWork() || _scroll.scrollTop() < 3 * _scroll.height())) { + MsgId min = hist->minMsgId(); + int32 offset = 0, loadCount = min ? MessagesPerPage : MessagesFirstLoad; + if (!min && hist->activeMsgId) { + min = hist->activeMsgId; + offset = -loadCount / 2; + } + histPreloading = MTP::send(MTPmessages_GetHistory(histInputPeer, MTP_int(offset), MTP_int(min), MTP_int(loadCount)), rpcDone(&HistoryWidget::messagesReceived), rpcFail(&HistoryWidget::messagesFailed)); ++histRequestsCount; - if (!hist->unreadLoaded) update(); + if (!hist->readyForWork()) update(); + } else { + checkUnreadLoaded(true); + } +} + +void HistoryWidget::loadMessagesDown() { + if (!hist) return; + if (hist->loadedAtBottom()) { + return; + } + + int32 dh = 0; + if (histPreloadDown.size()) { + bool loaded = hist->readyForWork(); + addMessagesToBack(histPreloadDown); + histPreloadDown.clear(); + checkUnreadLoaded(true); + if (!loaded && hist->readyForWork()) { + return; + } + } + if (!histPreloadingDown && hist->readyForWork() && (_scroll.scrollTop() + 3 * _scroll.height() > _scroll.scrollTopMax())) { + MsgId max = hist->maxMsgId(); + if (max) { + int32 loadCount = MessagesPerPage, offset = -loadCount; + histPreloadingDown = MTP::send(MTPmessages_GetHistory(histInputPeer, MTP_int(offset), MTP_int(max + 1), MTP_int(loadCount)), rpcDone(&HistoryWidget::messagesReceived), rpcFail(&HistoryWidget::messagesFailed)); + ++histRequestsCount; + if (!hist->readyForWork()) update(); + } } else { checkUnreadLoaded(true); } @@ -1934,12 +2048,16 @@ void HistoryWidget::loadMessages() { void HistoryWidget::onListScroll() { App::checkImageCacheSize(); - if (histPreloading || !hist || ((_list->isHidden() || _scroll.isHidden() || !App::wnd()->windowHandle()->isVisible()) && hist->unreadLoaded)) { + if (histPreloading || !hist || ((_list->isHidden() || _scroll.isHidden() || !App::wnd()->windowHandle()->isVisible()) && hist->readyForWork())) { checkUnreadLoaded(true); return; } - if (!hist->unreadLoaded || _scroll.scrollTop() < 3 * _scroll.height()) { + if (hist->readyForWork() && (_scroll.scrollTop() + 3 * _scroll.height() > _scroll.scrollTopMax())) { + loadMessagesDown(); + } + + if (!hist->readyForWork() || _scroll.scrollTop() < 3 * _scroll.height()) { loadMessages(); } else { checkUnreadLoaded(true); @@ -1961,6 +2079,13 @@ QString HistoryWidget::prepareMessage(QString result) { return (cReplaceEmojis() ? replaceEmojis(result) : result).trimmed(); } +void HistoryWidget::onHistoryToEnd() { + _toHistoryEnd.hide(); + if (hist && !hist->loadedAtBottom()) { + showPeer(histPeer->id, 0); + } +} + void HistoryWidget::onSend() { if (!hist) return; @@ -1971,6 +2096,8 @@ void HistoryWidget::onSend() { App::historyRegRandom(randomId, newId); + hist->loadAround(0); + MTPstring msgText(MTP_string(text)); hist->addToBack(MTP_message(MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(histPeer->id), MTP_bool(true), MTP_bool(true), MTP_int(unixtime()), msgText, MTP_messageMediaEmpty())); App::main()->historyToDown(hist); @@ -1997,7 +2124,7 @@ mtpRequestId HistoryWidget::onForward(const PeerId &peer, bool forwardSelected) if (toForward.isEmpty()) return 0; if (toForward.size() == 1) { - App::main()->showPeer(peer, false, true); + App::main()->showPeer(peer, 0, false, true); if (!hist) return 0; HistoryItem *item = toForward.cbegin().value(); @@ -2006,6 +2133,7 @@ mtpRequestId HistoryWidget::onForward(const PeerId &peer, bool forwardSelected) HistoryServiceMsg *srv = dynamic_cast(item); MsgId newId = 0; + hist->loadAround(0); if (item->id > 0 && msg) { newId = clientMsgId(); hist->addToBackForwarded(newId, msg); @@ -2045,12 +2173,14 @@ mtpRequestId HistoryWidget::onForward(const PeerId &peer, bool forwardSelected) void HistoryWidget::onShareContact(const PeerId &peer, UserData *contact) { if (!contact || contact->phone.isEmpty()) return; - App::main()->showPeer(peer, false, true); + App::main()->showPeer(peer, 0, false, true); if (!hist) return; uint64 randomId = MTP::nonce(); MsgId newId = clientMsgId(); + hist->loadAround(0); + hist->addToBack(MTP_message(MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(histPeer->id), MTP_bool(true), MTP_bool(true), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaContact(MTP_string(contact->phone), MTP_string(contact->firstName), MTP_string(contact->lastName), MTP_int(int32(contact->id & 0xFFFFFFFF))))); MTP::send(MTPmessages_SendMedia(histPeer->input, MTP_inputMediaContact(MTP_string(contact->phone), MTP_string(contact->firstName), MTP_string(contact->lastName)), MTP_long(randomId)), App::main()->rpcDone(&MainWidget::sentFullDataReceived, randomId)); @@ -2066,7 +2196,11 @@ PeerData *HistoryWidget::peer() const { } PeerData *HistoryWidget::activePeer() const { - return histPeer ? histPeer : _activePeer; + return histPeer ? histPeer : (_activeHist ? _activeHist->peer : 0); +} + +MsgId HistoryWidget::activeMsgId() const { + return hist ? hist->activeMsgId : (_activeHist ? _activeHist->activeMsgId : 0); } void HistoryWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTopBarCache, bool back) { @@ -2077,6 +2211,7 @@ void HistoryWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTo _animTopBarCache = myGrab(App::main()->topBar(), QRect(0, 0, width(), st::topBarHeight)); App::main()->topBar()->startAnim(); _scroll.hide(); + _toHistoryEnd.hide(); _attachDocument.hide(); _attachPhoto.hide(); _attachEmoji.hide(); @@ -2103,7 +2238,7 @@ bool HistoryWidget::animStep(float64 ms) { _bgAnimCache = _animCache = _animTopBarCache = _bgAnimTopBarCache = QPixmap(); App::main()->topBar()->stopAnim(); updateControlsVisibility(); - if (hist && hist->unreadLoaded) { + if (hist && hist->readyForWork()) { _scroll.show(); if (hist->lastScrollTop == History::ScrollMax) { _scroll.scrollToY(hist->lastScrollTop); @@ -2197,18 +2332,24 @@ void HistoryWidget::dragEnterEvent(QDragEnterEvent *e) { } void HistoryWidget::dragLeaveEvent(QDragLeaveEvent *e) { - _attachDrag = DragStateNone; - updateDragAreas(); + if (_attachDrag != DragStateNone || !_attachDragPhoto.isHidden() || !_attachDragDocument.isHidden()) { + _attachDrag = DragStateNone; + updateDragAreas(); + } } void HistoryWidget::leaveEvent(QEvent *e) { - _attachDrag = DragStateNone; - updateDragAreas(); + if (_attachDrag != DragStateNone || !_attachDragPhoto.isHidden() || !_attachDragDocument.isHidden()) { + _attachDrag = DragStateNone; + updateDragAreas(); + } } void HistoryWidget::mouseReleaseEvent(QMouseEvent *e) { - _attachDrag = DragStateNone; - updateDragAreas(); + if (_attachDrag != DragStateNone || !_attachDragPhoto.isHidden() || !_attachDragDocument.isHidden()) { + _attachDrag = DragStateNone; + updateDragAreas(); + } } DragState HistoryWidget::getDragState(const QMimeData *d) { @@ -2486,13 +2627,18 @@ void HistoryWidget::confirmSendImage(const ReadyLocalMedia &img) { App::uploader()->uploadMedia(newId, img); + History *h = App::history(img.peer); if (img.type == ToPreparePhoto) { - App::history(img.peer)->addToBack(MTP_message(MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTP_bool(true), MTP_bool(true), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaPhoto(img.photo))); + h->loadAround(0); + h->addToBack(MTP_message(MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTP_bool(true), MTP_bool(true), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaPhoto(img.photo))); } else if (img.type == ToPrepareDocument) { - App::history(img.peer)->addToBack(MTP_message(MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTP_bool(true), MTP_bool(true), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaDocument(img.document))); + h->loadAround(0); + h->addToBack(MTP_message(MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTP_bool(true), MTP_bool(true), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaDocument(img.document))); } - if (hist && histPeer && img.peer == histPeer->id) App::main()->historyToDown(hist); + if (hist && histPeer && img.peer == histPeer->id) { + App::main()->historyToDown(hist); + } App::main()->dialogsToUp(); peerMessagesUpdated(img.peer); } @@ -2580,6 +2726,9 @@ void HistoryWidget::resizeEvent(QResizeEvent *e) { updateListSize(); _field.resize(width() - _send.width() - _attachDocument.width() - _attachEmoji.width(), _field.height()); + + _toHistoryEnd.move((width() - _toHistoryEnd.width()) / 2, _scroll.y() + _scroll.height() - _toHistoryEnd.height() - st::historyToEndSkip); + _attachEmoji.move(_field.x() + _field.width(), height() - _attachEmoji.height()); _send.move(width() - _send.width(), _attachDocument.y()); @@ -2604,15 +2753,16 @@ void HistoryWidget::resizeEvent(QResizeEvent *e) { } } -void HistoryWidget::updateListSize(int32 addToY, bool initial) { +void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown) { if (!hist || (!_histInited && !initial)) return; if (!App::wnd()->isVisible()) return; // scrollTopMax etc are not working after recountHeight() - int32 newScrollHeight = height() - (hist->unreadLoaded && (!histPeer->chat || !histPeer->asChat()->forbidden) ? (_field.height() + 2 * st::sendPadding) : 0); + int32 newScrollHeight = height() - (hist->readyForWork() && (!histPeer->chat || !histPeer->asChat()->forbidden) ? (_field.height() + 2 * st::sendPadding) : 0); bool wasAtBottom = _scroll.scrollTop() + 1 > _scroll.scrollTopMax(), needResize = _scroll.width() != width() || _scroll.height() != newScrollHeight; if (needResize) { _scroll.resize(width(), newScrollHeight); + _toHistoryEnd.move((width() - _toHistoryEnd.width()) / 2, _scroll.y() + _scroll.height() - _toHistoryEnd.height() - st::historyToEndSkip); } if (!initial) { @@ -2627,20 +2777,29 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial) { if (washidden) { _scroll.hide(); } - if (!hist->unreadLoaded) return; + if (!hist->readyForWork()) return; - if (!initial && !wasAtBottom) { + if (!initial && !wasAtBottom || loadedDown) { _scroll.scrollToY(newSt + addToY); return; } - if (!hist->unreadLoaded) return; if (initial) { _histInited = true; } int32 toY = History::ScrollMax; - if (initial && hist->unreadBar) { + if (initial && hist->activeMsgId && !hist->lastWidth) { + HistoryItem *item = App::histItemById(hist->activeMsgId); + if (!item || item->detached()) { + hist->activeMsgId = 0; + return updateListSize(addToY, initial); + } else { + toY = (_scroll.height() > item->height()) ? qMax(item->y + item->block()->y - (_scroll.height() - item->height()) / 2, 0) : (item->y + item->block()->y); + _animActiveStart = getms(); + _animActiveTimer.start(AnimationTimerDelta); + } + } else if (initial && hist->unreadBar) { toY = hist->unreadBar->y + hist->unreadBar->block()->y; } else if (hist->showFrom) { toY = hist->showFrom->y + hist->showFrom->block()->y; @@ -2654,7 +2813,6 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial) { toY = newSt; hist->lastWidth = 0; } else { - int blabla = 0; } _scroll.scrollToY(toY); } @@ -2666,6 +2824,13 @@ void HistoryWidget::addMessagesToFront(const QVector &messages) { checkUnreadLoaded(true); } +void HistoryWidget::addMessagesToBack(const QVector &messages) { + int32 sliceFrom = 0; + _list->messagesReceivedDown(messages); + updateListSize(0, false, true); + checkUnreadLoaded(true); +} + void HistoryWidget::mousePressEvent(QMouseEvent *e) { } @@ -2784,6 +2949,22 @@ void HistoryWidget::onClearSelected() { if (_list) _list->clearSelectedItems(); } +void HistoryWidget::onAnimActiveStep() { + if (!hist || !hist->activeMsgId) return _animActiveTimer.stop(); + HistoryItem *item = App::histItemById(hist->activeMsgId); + if (!item || item->detached()) return _animActiveTimer.stop(); + + App::main()->msgUpdated(histPeer->id, item); +} + +uint64 HistoryWidget::animActiveTime() const { + return _animActiveTimer.isActive() ? (getms() - _animActiveStart) : 0; +} + +void HistoryWidget::stopAnimActive() { + _animActiveTimer.stop(); +} + void HistoryWidget::updateTopBarSelection() { if (!_list) { App::main()->topBar()->showSelected(0); diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index 363e8589b..5e88b8b4a 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -40,6 +40,7 @@ public: HistoryList(HistoryWidget *historyWidget, ScrollArea *scroll, History *history); void messagesReceived(const QVector &messages); + void messagesReceivedDown(const QVector &messages); bool event(QEvent *e); // calls touchEvent when necessary void touchEvent(QTouchEvent *e); @@ -251,6 +252,7 @@ public: void messagesReceived(const MTPmessages_Messages &messages, mtpRequestId requestId); void windowShown(); + bool isActive() const; void resizeEvent(QResizeEvent *e); void keyPressEvent(QKeyEvent *e); @@ -269,6 +271,7 @@ public: void topBarClick(); void loadMessages(); + void loadMessagesDown(); void peerMessagesUpdated(PeerId peer); void peerMessagesUpdated(); @@ -300,6 +303,7 @@ public: PeerData *peer() const; PeerData *activePeer() const; + MsgId activeMsgId() const; void animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTopBarCache, bool back = false); bool animStep(float64 ms); @@ -314,6 +318,9 @@ public: QString prepareMessage(QString text); + uint64 animActiveTime() const; + void stopAnimActive(); + ~HistoryWidget(); signals: @@ -334,6 +341,7 @@ public slots: void onDocumentFailed(MsgId msgId); void onListScroll(); + void onHistoryToEnd(); void onSend(); void onPhotoSelect(); @@ -343,7 +351,7 @@ public slots: void onPhotoReady(); void onPhotoFailed(quint64 id); - void showPeer(const PeerId &peer, bool force = false, bool leaveActive = false); + void showPeer(const PeerId &peer, MsgId msgId = 0, bool force = false, bool leaveActive = false); void activate(); void onTextChange(); @@ -364,11 +372,14 @@ public slots: void onDeleteContextSure(); void onClearSelected(); + void onAnimActiveStep(); + private: bool messagesFailed(const RPCError &error, mtpRequestId requestId); - void updateListSize(int32 addToY = 0, bool initial = false); + void updateListSize(int32 addToY = 0, bool initial = false, bool loadedDown = false); void addMessagesToFront(const QVector &messages); + void addMessagesToBack(const QVector &messages); void chatLoaded(const MTPmessages_ChatFull &res); QStringList getMediasFromMime(const QMimeData *d); @@ -376,18 +387,20 @@ private: void updateDragAreas(); - int32 histOffset, histCount, histReadRequestId; int32 histRequestsCount; - PeerData *histPeer, *_activePeer; + PeerData *histPeer; + History *_activeHist; MTPinputPeer histInputPeer; - mtpRequestId histPreloading; - QVector histPreload; + mtpRequestId histPreloading, histPreloadingDown; + QVector histPreload, histPreloadDown; ScrollArea _scroll; HistoryList *_list; History *hist; bool _histInited; // initial updateListSize() called + IconedButton _toHistoryEnd; + FlatButton _send; IconedButton _attachDocument, _attachPhoto, _attachEmoji; MessageField _field; @@ -422,5 +435,8 @@ private: QTimer _scrollTimer; int32 _scrollDelta; + QTimer _animActiveTimer; + float64 _animActiveStart; + }; diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 8be1ecf1f..84789d3d3 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -85,7 +85,7 @@ void TopBarWidget::onDeleteContactSure() { PeerData *p = App::main() ? App::main()->profilePeer() : 0; UserData *u = (p && !p->chat) ? p->asUser() : 0; if (u) { - App::main()->showPeer(0, true); + App::main()->showPeer(0, 0, true); App::wnd()->hideLayer(); MTP::send(MTPcontacts_DeleteContact(u->inputUser), App::main()->rpcDone(&MainWidget::deletedContact, u)); } @@ -105,7 +105,7 @@ void TopBarWidget::onDeleteAndExitSure() { PeerData *p = App::main() ? App::main()->profilePeer() : 0; ChatData *c = (p && p->chat) ? p->asChat() : 0; if (c) { - App::main()->showPeer(0, true); + App::main()->showPeer(0, 0, true); App::wnd()->hideLayer(); MTP::send(MTPmessages_DeleteChatUser(MTP_int(p->id & 0xFFFFFFFF), App::self()->inputUser), App::main()->rpcDone(&MainWidget::deleteHistory, p), App::main()->rpcFail(&MainWidget::leaveChatFailed, p)); } @@ -266,7 +266,7 @@ MainWidget::MainWidget(Window *window) : QWidget(window), failedObjId(0), _dialo setGeometry(QRect(0, st::titleHeight, App::wnd()->width(), App::wnd()->height() - st::titleHeight)); connect(window, SIGNAL(resized(const QSize &)), this, SLOT(onParentResize(const QSize &))); - connect(&dialogs, SIGNAL(peerChosen(const PeerId &)), this, SLOT(showPeer(const PeerId &))); + connect(&dialogs, SIGNAL(peerChosen(const PeerId &, MsgId)), this, SLOT(showPeer(const PeerId &, MsgId))); connect(&dialogs, SIGNAL(cancelled()), this, SLOT(dialogsCancelled())); connect(&history, SIGNAL(cancelled()), &dialogs, SLOT(activate())); connect(this, SIGNAL(peerPhotoChanged(PeerData *)), this, SIGNAL(dialogsUpdated())); @@ -423,7 +423,7 @@ void MainWidget::addParticipants(ChatData *chat, const QVector &users MTP::send(MTPmessages_AddChatUser(MTP_int(chat->id & 0xFFFFFFFF), (*i)->inputUser, MTP_int(ForwardOnAdd)), rpcDone(&MainWidget::addParticipantDone, chat), rpcFail(&MainWidget::addParticipantFail, chat), 0, 5); } App::wnd()->hideLayer(); - showPeer(chat->id, false); + showPeer(chat->id, 0, false); } void MainWidget::addParticipantDone(ChatData *chat, const MTPmessages_StatedMessage &result) { @@ -439,7 +439,7 @@ bool MainWidget::addParticipantFail(ChatData *chat, const RPCError &e) { void MainWidget::kickParticipant(ChatData *chat, UserData *user) { MTP::send(MTPmessages_DeleteChatUser(MTP_int(chat->id & 0xFFFFFFFF), user->inputUser), rpcDone(&MainWidget::kickParticipantDone, chat), rpcFail(&MainWidget::kickParticipantFail, chat)); App::wnd()->hideLayer(); - showPeer(chat->id, false); + showPeer(chat->id, 0, false); } void MainWidget::kickParticipantDone(ChatData *chat, const MTPmessages_StatedMessage &result) { @@ -476,9 +476,9 @@ void MainWidget::checkedHistory(PeerData *peer, const MTPmessages_Messages &resu } dialogs.removePeer(peer); } else { - if (App::historyLoaded(peer->id)) { - History *h = App::history(peer->id); - h->addToBack((*v)[0], false); + History *h = App::historyLoaded(peer->id); + if (!h->last) { + h->addToBack((*v)[0], 0); } } } @@ -508,6 +508,8 @@ void MainWidget::sendMessage(History *hist, const QString &text) { App::historyRegRandom(randomId, newId); + hist->loadAround(0); + MTPstring msgText(MTP_string(msg)); hist->addToBack(MTP_message(MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(hist->peer->id), MTP_bool(true), MTP_bool(true), MTP_int(unixtime()), msgText, MTP_messageMediaEmpty())); historyToDown(hist); @@ -520,7 +522,7 @@ void MainWidget::sendMessage(History *hist, const QString &text) { } void MainWidget::readServerHistory(History *hist, bool force) { - if (!hist || (!force && (!hist->unreadCount || !hist->unreadLoaded))) return; + if (!hist || (!force && (!hist->unreadCount || !hist->readyForWork()))) return; ReadRequests::const_iterator i = _readRequests.constFind(hist->peer); if (i == _readRequests.cend()) { @@ -529,6 +531,14 @@ void MainWidget::readServerHistory(History *hist, bool force) { } } +uint64 MainWidget::animActiveTime() const { + return history.animActiveTime(); +} + +void MainWidget::stopAnimActive() { + history.stopAnimActive(); +} + void MainWidget::partWasRead(PeerData *peer, const MTPmessages_AffectedHistory &result) { const MTPDmessages_affectedHistory &d(result.c_messages_affectedHistory()); App::main()->updUpdated(d.vpts.v, 0, 0, d.vseq.v); @@ -713,7 +723,7 @@ bool MainWidget::getVideoCoords(VideoData *video, int32 &x, int32 &y, int32 &w) return false; } -void MainWidget::showPeer(const PeerId &peerId, bool back, bool force) { +void MainWidget::showPeer(const PeerId &peerId, MsgId msgId, bool back, bool force) { if (!back && profileStack.size() == 1 && profileStack[0]->id == peerId) { back = true; } @@ -738,7 +748,7 @@ void MainWidget::showPeer(const PeerId &peerId, bool back, bool force) { history.show(); } } - history.showPeer(peerId, force); + history.showPeer(peerId, msgId, force); if (force || !selectingPeer()) { if (profile) { if (profile) profile->deleteLater(); @@ -775,6 +785,10 @@ PeerData *MainWidget::activePeer() { return history.activePeer(); } +MsgId MainWidget::activeMsgId() { + return history.activeMsgId(); +} + PeerData *MainWidget::profilePeer() { return profile ? profile->peer() : 0; } @@ -798,7 +812,7 @@ void MainWidget::showPeerProfile(const PeerData *peer, bool back) { resizeEvent(0); profile->animShow(animCache, animTopBarCache, back); history.animStop(); - history.showPeer(0, false, true); + history.showPeer(0, 0, false, true); history.hide(); _topBar.raise(); dialogs.raise(); @@ -810,7 +824,7 @@ void MainWidget::showPeerBack() { PeerData *peer = profileStack.back(); profileStack.pop_back(); if (profileStack.isEmpty()) { - showPeer(peer->id, true); + showPeer(peer->id, App::main()->activeMsgId(), true); } else { showPeerProfile(peer, true); } @@ -971,7 +985,7 @@ void MainWidget::sentFullDatasReceived(const MTPmessages_StatedMessages &result) void MainWidget::forwardDone(PeerId peer, const MTPmessages_StatedMessages &result) { sentFullDatasReceived(result); if (hider) hider->forwardDone(); - showPeer(peer, false, true); + showPeer(peer, 0, false, true); history.onClearSelected(); } @@ -991,7 +1005,7 @@ void MainWidget::dialogsToUp() { } void MainWidget::dialogsClear() { - dialogs.onCancel(); + dialogs.clearFiltered(); } void MainWidget::newUnreadMsg(History *hist, MsgId msgId) { @@ -1394,7 +1408,7 @@ bool MainWidget::isActive() const { } bool MainWidget::historyIsActive() const { - return isActive() && !profile; + return isActive() && !profile && history.isActive(); } int32 MainWidget::dlgsWidth() const { @@ -1487,8 +1501,10 @@ void MainWidget::updateReceived(const mtpPrime *from, const mtpPrime *end) { } if (!App::userLoaded(d.vfrom_id.v)) return getDifference(); - PeerId peer = App::histories().addToBack(MTP_message(d.vid, d.vfrom_id, MTP_peerUser(MTP_int(MTP::authedId())), MTP_bool(false), MTP_bool(true), d.vdate, d.vmessage, MTP_messageMediaEmpty())); - history.peerMessagesUpdated(peer); + HistoryItem *item = App::histories().addToBack(MTP_message(d.vid, d.vfrom_id, MTP_peerUser(MTP_int(MTP::authedId())), MTP_bool(false), MTP_bool(true), d.vdate, d.vmessage, MTP_messageMediaEmpty())); + if (item) { + history.peerMessagesUpdated(item->history()->peer->id); + } updSetState(d.vpts.v, d.vdate.v, updQts, d.vseq.v); } break; @@ -1500,8 +1516,10 @@ void MainWidget::updateReceived(const mtpPrime *from, const mtpPrime *end) { } if (!App::chatLoaded(d.vchat_id.v) || !App::userLoaded(d.vfrom_id.v)) return getDifference(); - PeerId peer = App::histories().addToBack(MTP_message(d.vid, d.vfrom_id, MTP_peerChat(d.vchat_id), MTP_bool(false), MTP_bool(true), d.vdate, d.vmessage, MTP_messageMediaEmpty())); - history.peerMessagesUpdated(peer); + HistoryItem *item = App::histories().addToBack(MTP_message(d.vid, d.vfrom_id, MTP_peerChat(d.vchat_id), MTP_bool(false), MTP_bool(true), d.vdate, d.vmessage, MTP_messageMediaEmpty())); + if (item) { + history.peerMessagesUpdated(item->history()->peer->id); + } updSetState(d.vpts.v, d.vdate.v, updQts, d.vseq.v); } break; @@ -1523,8 +1541,10 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { switch (update.type()) { case mtpc_updateNewMessage: { const MTPDupdateNewMessage &d(update.c_updateNewMessage()); - PeerId peer = App::histories().addToBack(d.vmessage); - history.peerMessagesUpdated(peer); + HistoryItem *item = App::histories().addToBack(d.vmessage); + if (item) { + history.peerMessagesUpdated(item->history()->peer->id); + } if (updPts < d.vpts.v) updPts = d.vpts.v; } break; @@ -1535,10 +1555,8 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { HistoryItem *msgRow = App::histItemById(msg); if (msgRow) { App::historyUnregItem(msgRow); - if (msgRow->id > 0) --msgRow->history()->offset; msgRow->id = d.vid.v; - if (msgRow->id > 0) ++msgRow->history()->offset; - if (App::historyRegItem(msgRow)) { + if (!App::historyRegItem(msgRow)) { msgUpdated(msgRow->history()->peer->id, msgRow); } else { msgRow->destroy(); @@ -1635,7 +1653,9 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { if (false && !d.vprevious.v && d.vuser_id.v != MTP::authedId() && d.vphoto.type() == mtpc_userProfilePhoto) { MTPPhoto photo(App::photoFromUserPhoto(MTP_int(user->id & 0xFFFFFFFF), d.vdate, d.vphoto)); HistoryMedia *media = new HistoryPhoto(photo.c_photo(), 100); - App::history(user->id)->addToBackService(clientMsgId(), date(d.vdate), lang(lng_action_user_photo).replace(qsl("{from}"), user->name), false, true, media); + if (App::history(user->id)->loadedAtBottom()) { + App::history(user->id)->addToBackService(clientMsgId(), date(d.vdate), lang(lng_action_user_photo).replace(qsl("{from}"), user->name), false, true, media); + } } if (App::main()) App::main()->peerUpdated(user); } @@ -1645,7 +1665,9 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { const MTPDupdateContactRegistered &d(update.c_updateContactRegistered()); UserData *user = App::userLoaded(d.vuser_id.v); if (user) { - App::history(user->id)->addToBackService(clientMsgId(), date(d.vdate), lang(lng_action_user_registered).replace(qsl("{from}"), user->name), false, true); + if (App::history(user->id)->loadedAtBottom()) { + App::history(user->id)->addToBackService(clientMsgId(), date(d.vdate), lang(lng_action_user_registered).replace(qsl("{from}"), user->name), false, true); + } } } break; diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index 491365a9c..0bf767186 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -134,6 +134,7 @@ public: PeerData *peerAfter(const PeerData *peer); PeerData *peer(); PeerData *activePeer(); + MsgId activeMsgId(); PeerData *profilePeer(); void showPeerProfile(const PeerData *peer, bool back = false); void showPeerBack(); @@ -193,6 +194,9 @@ public: void readServerHistory(History *history, bool force = true); + uint64 animActiveTime() const; + void stopAnimActive(); + ~MainWidget(); signals: @@ -201,6 +205,7 @@ signals: void peerNameChanged(PeerData *peer, const PeerData::Names &oldNames, const PeerData::NameFirstChars &oldChars); void peerPhotoChanged(PeerData *peer); void dialogRowReplaced(DialogRow *oldRow, DialogRow *newRow); + void historyItemReplaced(HistoryItem *oldItem, HistoryItem *newItem); void dialogToTop(const History::DialogLinks &links); void dialogsUpdated(); void historyItemDeleted(HistoryItem *item); @@ -227,7 +232,7 @@ public slots: void mainStateChanged(Qt::WindowState state); void updateOnlineDisplay(); - void showPeer(const PeerId &peer, bool back = false, bool force = false); + void showPeer(const PeerId &peer, MsgId msgId = 0, bool back = false, bool force = false); void onTopBarClick(); void onPeerShown(PeerData *peer); diff --git a/Telegram/SourceFiles/mtproto/generate.py b/Telegram/SourceFiles/mtproto/generate.py index 3cab29832..0f40d5f17 100644 --- a/Telegram/SourceFiles/mtproto/generate.py +++ b/Telegram/SourceFiles/mtproto/generate.py @@ -189,19 +189,13 @@ with open('scheme.tl') as f: funcsText += '\tmtpTypeId type() const {\n\t\treturn mtpc_' + name + ';\n\t}\n'; # type id - if (len(prmsList)): - funcsText += '\tvoid read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_' + name + ') {\n'; # read method - else: - funcsText += '\tvoid read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_' + name + ') {\n'; # read method + funcsText += '\tvoid read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_' + name + ') {\n'; # read method for k in prmsList: v = prms[k]; funcsText += '\t\tv' + k + '.read(from, end);\n'; funcsText += '\t}\n'; - if (len(prmsList)): - funcsText += '\tvoid write(mtpBuffer &to) const {\n'; # write method - else: - funcsText += '\tvoid write(mtpBuffer &/*to*/) const {\n'; # write method + funcsText += '\tvoid write(mtpBuffer &to) const {\n'; # write method for k in prmsList: v = prms[k]; funcsText += '\t\tv' + k + '.write(to);\n'; @@ -538,10 +532,7 @@ for restype in typesList: inlineMethods += '}\n'; typesText += '\tvoid write(mtpBuffer &to) const;\n'; # write method - if (len(writer)): - inlineMethods += 'inline void MTP' + restype + '::write(mtpBuffer &to) const {\n'; - else: - inlineMethods += 'inline void MTP' + restype + '::write(mtpBuffer &/*to*/) const {\n'; + inlineMethods += 'inline void MTP' + restype + '::write(mtpBuffer &to) const {\n'; if (withType): inlineMethods += '\tswitch (_type) {\n'; inlineMethods += writer; diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.h b/Telegram/SourceFiles/mtproto/mtpConnection.h index 0714c1823..25fafbc7e 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.h +++ b/Telegram/SourceFiles/mtproto/mtpConnection.h @@ -41,6 +41,7 @@ inline bool mtpRequestData::needAckByType(mtpTypeId type) { case mtpc_http_wait: case mtpc_bad_msg_notification: case mtpc_msgs_all_info: + case mtpc_msgs_state_info: case mtpc_msg_detailed_info: case mtpc_msg_new_detailed_info: return false; diff --git a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h index c19477c7c..eb97e8bf3 100644 --- a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h +++ b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h @@ -328,6 +328,7 @@ enum { mtpc_invokeWithLayer12 = 0xdda60d3c, mtpc_invokeWithLayer13 = 0x427c8ea2, mtpc_invokeWithLayer14 = 0x2b9b08fa, + mtpc_invokeWithLayer15 = 0xb4418b64, // manually parsed mtpc_rpc_result = 0xf35c6d01, @@ -352,6 +353,7 @@ static const mtpTypeId mtpLayers[] = { mtpc_invokeWithLayer12, mtpc_invokeWithLayer13, mtpc_invokeWithLayer14, + mtpc_invokeWithLayer15, }, mtpLayerMax = sizeof(mtpLayers) / sizeof(mtpLayers[0]); template diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.h b/Telegram/SourceFiles/mtproto/mtpScheme.h index 15a4d4bef..9ffa73e61 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.h +++ b/Telegram/SourceFiles/mtproto/mtpScheme.h @@ -213,6 +213,7 @@ enum { mtpc_inputMessagesFilterVideo = 0x9fc00e65, mtpc_inputMessagesFilterPhotoVideo = 0x56e9f0e4, mtpc_inputMessagesFilterDocument = 0x9eddf188, + mtpc_inputMessagesFilterAudio = 0xcfc87522, mtpc_updateNewMessage = 0x13abdb3, mtpc_updateMessageID = 0x4e90bfd6, mtpc_updateReadMessages = 0xc6649e31, @@ -4969,6 +4970,7 @@ private: friend MTPmessagesFilter MTP_inputMessagesFilterVideo(); friend MTPmessagesFilter MTP_inputMessagesFilterPhotoVideo(); friend MTPmessagesFilter MTP_inputMessagesFilterDocument(); + friend MTPmessagesFilter MTP_inputMessagesFilterAudio(); mtpTypeId _type; }; @@ -9829,7 +9831,7 @@ public: mtpTypeId type() const { return mtpc_req_pq; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_req_pq) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_req_pq) { vnonce.read(from, end); } void write(mtpBuffer &to) const { @@ -9873,7 +9875,7 @@ public: mtpTypeId type() const { return mtpc_req_DH_params; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_req_DH_params) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_req_DH_params) { vnonce.read(from, end); vserver_nonce.read(from, end); vp.read(from, end); @@ -9924,7 +9926,7 @@ public: mtpTypeId type() const { return mtpc_set_client_DH_params; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_set_client_DH_params) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_set_client_DH_params) { vnonce.read(from, end); vserver_nonce.read(from, end); vencrypted_data.read(from, end); @@ -9967,7 +9969,7 @@ public: mtpTypeId type() const { return mtpc_rpc_drop_answer; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_rpc_drop_answer) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_rpc_drop_answer) { vreq_msg_id.read(from, end); } void write(mtpBuffer &to) const { @@ -10006,7 +10008,7 @@ public: mtpTypeId type() const { return mtpc_get_future_salts; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_get_future_salts) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_get_future_salts) { vnum.read(from, end); } void write(mtpBuffer &to) const { @@ -10045,7 +10047,7 @@ public: mtpTypeId type() const { return mtpc_ping; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_ping) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_ping) { vping_id.read(from, end); } void write(mtpBuffer &to) const { @@ -10085,7 +10087,7 @@ public: mtpTypeId type() const { return mtpc_ping_delay_disconnect; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_ping_delay_disconnect) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_ping_delay_disconnect) { vping_id.read(from, end); vdisconnect_delay.read(from, end); } @@ -10126,7 +10128,7 @@ public: mtpTypeId type() const { return mtpc_destroy_session; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_destroy_session) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_destroy_session) { vsession_id.read(from, end); } void write(mtpBuffer &to) const { @@ -10169,7 +10171,7 @@ public: mtpTypeId type() const { return mtpc_register_saveDeveloperInfo; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_register_saveDeveloperInfo) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_register_saveDeveloperInfo) { vname.read(from, end); vemail.read(from, end); vphone_number.read(from, end); @@ -10218,7 +10220,7 @@ public: mtpTypeId type() const { return mtpc_invokeAfterMsg; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_invokeAfterMsg) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_invokeAfterMsg) { vmsg_id.read(from, end); vquery.read(from, end); } @@ -10260,7 +10262,7 @@ public: mtpTypeId type() const { return mtpc_invokeAfterMsgs; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_invokeAfterMsgs) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_invokeAfterMsgs) { vmsg_ids.read(from, end); vquery.read(from, end); } @@ -10300,7 +10302,7 @@ public: mtpTypeId type() const { return mtpc_auth_checkPhone; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_auth_checkPhone) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_checkPhone) { vphone_number.read(from, end); } void write(mtpBuffer &to) const { @@ -10343,7 +10345,7 @@ public: mtpTypeId type() const { return mtpc_auth_sendCode; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_auth_sendCode) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_sendCode) { vphone_number.read(from, end); vsms_type.read(from, end); vapi_id.read(from, end); @@ -10391,7 +10393,7 @@ public: mtpTypeId type() const { return mtpc_auth_sendCall; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_auth_sendCall) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_sendCall) { vphone_number.read(from, end); vphone_code_hash.read(from, end); } @@ -10436,7 +10438,7 @@ public: mtpTypeId type() const { return mtpc_auth_signUp; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_auth_signUp) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_signUp) { vphone_number.read(from, end); vphone_code_hash.read(from, end); vphone_code.read(from, end); @@ -10485,7 +10487,7 @@ public: mtpTypeId type() const { return mtpc_auth_signIn; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_auth_signIn) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_signIn) { vphone_number.read(from, end); vphone_code_hash.read(from, end); vphone_code.read(from, end); @@ -10524,9 +10526,9 @@ public: mtpTypeId type() const { return mtpc_auth_logOut; } - void read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_auth_logOut) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_logOut) { } - void write(mtpBuffer &/*to*/) const { + void write(mtpBuffer &to) const { } typedef MTPBool ResponseType; @@ -10555,9 +10557,9 @@ public: mtpTypeId type() const { return mtpc_auth_resetAuthorizations; } - void read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_auth_resetAuthorizations) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_resetAuthorizations) { } - void write(mtpBuffer &/*to*/) const { + void write(mtpBuffer &to) const { } typedef MTPBool ResponseType; @@ -10591,7 +10593,7 @@ public: mtpTypeId type() const { return mtpc_auth_sendInvites; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_auth_sendInvites) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_sendInvites) { vphone_numbers.read(from, end); vmessage.read(from, end); } @@ -10632,7 +10634,7 @@ public: mtpTypeId type() const { return mtpc_auth_exportAuthorization; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_auth_exportAuthorization) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_exportAuthorization) { vdc_id.read(from, end); } void write(mtpBuffer &to) const { @@ -10672,7 +10674,7 @@ public: mtpTypeId type() const { return mtpc_auth_importAuthorization; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_auth_importAuthorization) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_importAuthorization) { vid.read(from, end); vbytes.read(from, end); } @@ -10719,7 +10721,7 @@ public: mtpTypeId type() const { return mtpc_account_registerDevice; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_account_registerDevice) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_registerDevice) { vtoken_type.read(from, end); vtoken.read(from, end); vdevice_model.read(from, end); @@ -10771,7 +10773,7 @@ public: mtpTypeId type() const { return mtpc_account_unregisterDevice; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_account_unregisterDevice) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_unregisterDevice) { vtoken_type.read(from, end); vtoken.read(from, end); } @@ -10813,7 +10815,7 @@ public: mtpTypeId type() const { return mtpc_account_updateNotifySettings; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_account_updateNotifySettings) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_updateNotifySettings) { vpeer.read(from, end); vsettings.read(from, end); } @@ -10854,7 +10856,7 @@ public: mtpTypeId type() const { return mtpc_account_getNotifySettings; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_account_getNotifySettings) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_getNotifySettings) { vpeer.read(from, end); } void write(mtpBuffer &to) const { @@ -10889,9 +10891,9 @@ public: mtpTypeId type() const { return mtpc_account_resetNotifySettings; } - void read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_account_resetNotifySettings) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_resetNotifySettings) { } - void write(mtpBuffer &/*to*/) const { + void write(mtpBuffer &to) const { } typedef MTPBool ResponseType; @@ -10925,7 +10927,7 @@ public: mtpTypeId type() const { return mtpc_account_updateProfile; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_account_updateProfile) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_updateProfile) { vfirst_name.read(from, end); vlast_name.read(from, end); } @@ -10966,7 +10968,7 @@ public: mtpTypeId type() const { return mtpc_account_updateStatus; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_account_updateStatus) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_updateStatus) { voffline.read(from, end); } void write(mtpBuffer &to) const { @@ -11001,9 +11003,9 @@ public: mtpTypeId type() const { return mtpc_account_getWallPapers; } - void read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_account_getWallPapers) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_getWallPapers) { } - void write(mtpBuffer &/*to*/) const { + void write(mtpBuffer &to) const { } typedef MTPVector ResponseType; @@ -11036,7 +11038,7 @@ public: mtpTypeId type() const { return mtpc_users_getUsers; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_users_getUsers) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_users_getUsers) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -11075,7 +11077,7 @@ public: mtpTypeId type() const { return mtpc_users_getFullUser; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_users_getFullUser) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_users_getFullUser) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -11110,9 +11112,9 @@ public: mtpTypeId type() const { return mtpc_contacts_getStatuses; } - void read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_contacts_getStatuses) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_getStatuses) { } - void write(mtpBuffer &/*to*/) const { + void write(mtpBuffer &to) const { } typedef MTPVector ResponseType; @@ -11145,7 +11147,7 @@ public: mtpTypeId type() const { return mtpc_contacts_getContacts; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_contacts_getContacts) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_getContacts) { vhash.read(from, end); } void write(mtpBuffer &to) const { @@ -11185,7 +11187,7 @@ public: mtpTypeId type() const { return mtpc_contacts_importContacts; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_contacts_importContacts) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_importContacts) { vcontacts.read(from, end); vreplace.read(from, end); } @@ -11227,7 +11229,7 @@ public: mtpTypeId type() const { return mtpc_contacts_search; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_contacts_search) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_search) { vq.read(from, end); vlimit.read(from, end); } @@ -11268,7 +11270,7 @@ public: mtpTypeId type() const { return mtpc_contacts_getSuggested; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_contacts_getSuggested) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_getSuggested) { vlimit.read(from, end); } void write(mtpBuffer &to) const { @@ -11307,7 +11309,7 @@ public: mtpTypeId type() const { return mtpc_contacts_deleteContact; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_contacts_deleteContact) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_deleteContact) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -11346,7 +11348,7 @@ public: mtpTypeId type() const { return mtpc_contacts_deleteContacts; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_contacts_deleteContacts) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_deleteContacts) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -11385,7 +11387,7 @@ public: mtpTypeId type() const { return mtpc_contacts_block; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_contacts_block) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_block) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -11424,7 +11426,7 @@ public: mtpTypeId type() const { return mtpc_contacts_unblock; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_contacts_unblock) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_unblock) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -11464,7 +11466,7 @@ public: mtpTypeId type() const { return mtpc_contacts_getBlocked; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_contacts_getBlocked) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_getBlocked) { voffset.read(from, end); vlimit.read(from, end); } @@ -11505,7 +11507,7 @@ public: mtpTypeId type() const { return mtpc_messages_getMessages; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_getMessages) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_getMessages) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -11546,7 +11548,7 @@ public: mtpTypeId type() const { return mtpc_messages_getDialogs; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_getDialogs) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_getDialogs) { voffset.read(from, end); vmax_id.read(from, end); vlimit.read(from, end); @@ -11592,7 +11594,7 @@ public: mtpTypeId type() const { return mtpc_messages_getHistory; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_getHistory) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_getHistory) { vpeer.read(from, end); voffset.read(from, end); vmax_id.read(from, end); @@ -11644,7 +11646,7 @@ public: mtpTypeId type() const { return mtpc_messages_search; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_search) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_search) { vpeer.read(from, end); vq.read(from, end); vfilter.read(from, end); @@ -11699,7 +11701,7 @@ public: mtpTypeId type() const { return mtpc_messages_readHistory; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_readHistory) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_readHistory) { vpeer.read(from, end); vmax_id.read(from, end); voffset.read(from, end); @@ -11743,7 +11745,7 @@ public: mtpTypeId type() const { return mtpc_messages_deleteHistory; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_deleteHistory) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_deleteHistory) { vpeer.read(from, end); voffset.read(from, end); } @@ -11784,7 +11786,7 @@ public: mtpTypeId type() const { return mtpc_messages_deleteMessages; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_deleteMessages) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_deleteMessages) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -11823,7 +11825,7 @@ public: mtpTypeId type() const { return mtpc_messages_restoreMessages; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_restoreMessages) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_restoreMessages) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -11862,7 +11864,7 @@ public: mtpTypeId type() const { return mtpc_messages_receivedMessages; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_receivedMessages) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_receivedMessages) { vmax_id.read(from, end); } void write(mtpBuffer &to) const { @@ -11902,7 +11904,7 @@ public: mtpTypeId type() const { return mtpc_messages_setTyping; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_setTyping) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_setTyping) { vpeer.read(from, end); vtyping.read(from, end); } @@ -11945,7 +11947,7 @@ public: mtpTypeId type() const { return mtpc_messages_sendMessage; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_sendMessage) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_sendMessage) { vpeer.read(from, end); vmessage.read(from, end); vrandom_id.read(from, end); @@ -11990,7 +11992,7 @@ public: mtpTypeId type() const { return mtpc_messages_sendMedia; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_sendMedia) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_sendMedia) { vpeer.read(from, end); vmedia.read(from, end); vrandom_id.read(from, end); @@ -12034,7 +12036,7 @@ public: mtpTypeId type() const { return mtpc_messages_forwardMessages; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_forwardMessages) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_forwardMessages) { vpeer.read(from, end); vid.read(from, end); } @@ -12075,7 +12077,7 @@ public: mtpTypeId type() const { return mtpc_messages_getChats; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_getChats) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_getChats) { vid.read(from, end); } void write(mtpBuffer &to) const { @@ -12114,7 +12116,7 @@ public: mtpTypeId type() const { return mtpc_messages_getFullChat; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_getFullChat) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_getFullChat) { vchat_id.read(from, end); } void write(mtpBuffer &to) const { @@ -12154,7 +12156,7 @@ public: mtpTypeId type() const { return mtpc_messages_editChatTitle; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_editChatTitle) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_editChatTitle) { vchat_id.read(from, end); vtitle.read(from, end); } @@ -12196,7 +12198,7 @@ public: mtpTypeId type() const { return mtpc_messages_editChatPhoto; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_editChatPhoto) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_editChatPhoto) { vchat_id.read(from, end); vphoto.read(from, end); } @@ -12239,7 +12241,7 @@ public: mtpTypeId type() const { return mtpc_messages_addChatUser; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_addChatUser) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_addChatUser) { vchat_id.read(from, end); vuser_id.read(from, end); vfwd_limit.read(from, end); @@ -12283,7 +12285,7 @@ public: mtpTypeId type() const { return mtpc_messages_deleteChatUser; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_deleteChatUser) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_deleteChatUser) { vchat_id.read(from, end); vuser_id.read(from, end); } @@ -12325,7 +12327,7 @@ public: mtpTypeId type() const { return mtpc_messages_createChat; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_createChat) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_createChat) { vusers.read(from, end); vtitle.read(from, end); } @@ -12362,9 +12364,9 @@ public: mtpTypeId type() const { return mtpc_updates_getState; } - void read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_updates_getState) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_updates_getState) { } - void write(mtpBuffer &/*to*/) const { + void write(mtpBuffer &to) const { } typedef MTPupdates_State ResponseType; @@ -12399,7 +12401,7 @@ public: mtpTypeId type() const { return mtpc_updates_getDifference; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_updates_getDifference) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_updates_getDifference) { vpts.read(from, end); vdate.read(from, end); vqts.read(from, end); @@ -12443,7 +12445,7 @@ public: mtpTypeId type() const { return mtpc_photos_updateProfilePhoto; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_photos_updateProfilePhoto) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_photos_updateProfilePhoto) { vid.read(from, end); vcrop.read(from, end); } @@ -12487,7 +12489,7 @@ public: mtpTypeId type() const { return mtpc_photos_uploadProfilePhoto; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_photos_uploadProfilePhoto) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_photos_uploadProfilePhoto) { vfile.read(from, end); vcaption.read(from, end); vgeo_point.read(from, end); @@ -12534,7 +12536,7 @@ public: mtpTypeId type() const { return mtpc_upload_saveFilePart; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_upload_saveFilePart) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_upload_saveFilePart) { vfile_id.read(from, end); vfile_part.read(from, end); vbytes.read(from, end); @@ -12579,7 +12581,7 @@ public: mtpTypeId type() const { return mtpc_upload_getFile; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_upload_getFile) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_upload_getFile) { vlocation.read(from, end); voffset.read(from, end); vlimit.read(from, end); @@ -12618,9 +12620,9 @@ public: mtpTypeId type() const { return mtpc_help_getConfig; } - void read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_help_getConfig) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getConfig) { } - void write(mtpBuffer &/*to*/) const { + void write(mtpBuffer &to) const { } typedef MTPConfig ResponseType; @@ -12649,9 +12651,9 @@ public: mtpTypeId type() const { return mtpc_help_getNearestDc; } - void read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_help_getNearestDc) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getNearestDc) { } - void write(mtpBuffer &/*to*/) const { + void write(mtpBuffer &to) const { } typedef MTPNearestDc ResponseType; @@ -12687,7 +12689,7 @@ public: mtpTypeId type() const { return mtpc_help_getAppUpdate; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_help_getAppUpdate) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getAppUpdate) { vdevice_model.read(from, end); vsystem_version.read(from, end); vapp_version.read(from, end); @@ -12732,7 +12734,7 @@ public: mtpTypeId type() const { return mtpc_help_saveAppLog; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_help_saveAppLog) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_saveAppLog) { vevents.read(from, end); } void write(mtpBuffer &to) const { @@ -12771,7 +12773,7 @@ public: mtpTypeId type() const { return mtpc_help_getInviteText; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_help_getInviteText) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getInviteText) { vlang_code.read(from, end); } void write(mtpBuffer &to) const { @@ -12813,7 +12815,7 @@ public: mtpTypeId type() const { return mtpc_photos_getUserPhotos; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_photos_getUserPhotos) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_photos_getUserPhotos) { vuser_id.read(from, end); voffset.read(from, end); vmax_id.read(from, end); @@ -12860,7 +12862,7 @@ public: mtpTypeId type() const { return mtpc_messages_forwardMessage; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_forwardMessage) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_forwardMessage) { vpeer.read(from, end); vid.read(from, end); vrandom_id.read(from, end); @@ -12905,7 +12907,7 @@ public: mtpTypeId type() const { return mtpc_messages_sendBroadcast; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_sendBroadcast) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_sendBroadcast) { vcontacts.read(from, end); vmessage.read(from, end); vmedia.read(from, end); @@ -12950,7 +12952,7 @@ public: mtpTypeId type() const { return mtpc_geochats_getLocated; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_getLocated) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_getLocated) { vgeo_point.read(from, end); vradius.read(from, end); vlimit.read(from, end); @@ -12994,7 +12996,7 @@ public: mtpTypeId type() const { return mtpc_geochats_getRecents; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_getRecents) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_getRecents) { voffset.read(from, end); vlimit.read(from, end); } @@ -13035,7 +13037,7 @@ public: mtpTypeId type() const { return mtpc_geochats_checkin; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_checkin) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_checkin) { vpeer.read(from, end); } void write(mtpBuffer &to) const { @@ -13074,7 +13076,7 @@ public: mtpTypeId type() const { return mtpc_geochats_getFullChat; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_getFullChat) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_getFullChat) { vpeer.read(from, end); } void write(mtpBuffer &to) const { @@ -13115,7 +13117,7 @@ public: mtpTypeId type() const { return mtpc_geochats_editChatTitle; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_editChatTitle) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_editChatTitle) { vpeer.read(from, end); vtitle.read(from, end); vaddress.read(from, end); @@ -13159,7 +13161,7 @@ public: mtpTypeId type() const { return mtpc_geochats_editChatPhoto; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_editChatPhoto) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_editChatPhoto) { vpeer.read(from, end); vphoto.read(from, end); } @@ -13207,7 +13209,7 @@ public: mtpTypeId type() const { return mtpc_geochats_search; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_search) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_search) { vpeer.read(from, end); vq.read(from, end); vfilter.read(from, end); @@ -13263,7 +13265,7 @@ public: mtpTypeId type() const { return mtpc_geochats_getHistory; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_getHistory) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_getHistory) { vpeer.read(from, end); voffset.read(from, end); vmax_id.read(from, end); @@ -13309,7 +13311,7 @@ public: mtpTypeId type() const { return mtpc_geochats_setTyping; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_setTyping) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_setTyping) { vpeer.read(from, end); vtyping.read(from, end); } @@ -13352,7 +13354,7 @@ public: mtpTypeId type() const { return mtpc_geochats_sendMessage; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_sendMessage) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_sendMessage) { vpeer.read(from, end); vmessage.read(from, end); vrandom_id.read(from, end); @@ -13397,7 +13399,7 @@ public: mtpTypeId type() const { return mtpc_geochats_sendMedia; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_sendMedia) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_sendMedia) { vpeer.read(from, end); vmedia.read(from, end); vrandom_id.read(from, end); @@ -13443,7 +13445,7 @@ public: mtpTypeId type() const { return mtpc_geochats_createGeoChat; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_geochats_createGeoChat) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_createGeoChat) { vtitle.read(from, end); vgeo_point.read(from, end); vaddress.read(from, end); @@ -13489,7 +13491,7 @@ public: mtpTypeId type() const { return mtpc_messages_getDhConfig; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_getDhConfig) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_getDhConfig) { vversion.read(from, end); vrandom_length.read(from, end); } @@ -13532,7 +13534,7 @@ public: mtpTypeId type() const { return mtpc_messages_requestEncryption; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_requestEncryption) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_requestEncryption) { vuser_id.read(from, end); vrandom_id.read(from, end); vg_a.read(from, end); @@ -13577,7 +13579,7 @@ public: mtpTypeId type() const { return mtpc_messages_acceptEncryption; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_acceptEncryption) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_acceptEncryption) { vpeer.read(from, end); vg_b.read(from, end); vkey_fingerprint.read(from, end); @@ -13620,7 +13622,7 @@ public: mtpTypeId type() const { return mtpc_messages_discardEncryption; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_discardEncryption) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_discardEncryption) { vchat_id.read(from, end); } void write(mtpBuffer &to) const { @@ -13660,7 +13662,7 @@ public: mtpTypeId type() const { return mtpc_messages_setEncryptedTyping; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_setEncryptedTyping) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_setEncryptedTyping) { vpeer.read(from, end); vtyping.read(from, end); } @@ -13702,7 +13704,7 @@ public: mtpTypeId type() const { return mtpc_messages_readEncryptedHistory; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_readEncryptedHistory) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_readEncryptedHistory) { vpeer.read(from, end); vmax_date.read(from, end); } @@ -13745,7 +13747,7 @@ public: mtpTypeId type() const { return mtpc_messages_sendEncrypted; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_sendEncrypted) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_sendEncrypted) { vpeer.read(from, end); vrandom_id.read(from, end); vdata.read(from, end); @@ -13791,7 +13793,7 @@ public: mtpTypeId type() const { return mtpc_messages_sendEncryptedFile; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_sendEncryptedFile) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_sendEncryptedFile) { vpeer.read(from, end); vrandom_id.read(from, end); vdata.read(from, end); @@ -13838,7 +13840,7 @@ public: mtpTypeId type() const { return mtpc_messages_sendEncryptedService; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_sendEncryptedService) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_sendEncryptedService) { vpeer.read(from, end); vrandom_id.read(from, end); vdata.read(from, end); @@ -13881,7 +13883,7 @@ public: mtpTypeId type() const { return mtpc_messages_receivedQueue; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_messages_receivedQueue) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_receivedQueue) { vmax_qts.read(from, end); } void write(mtpBuffer &to) const { @@ -13923,7 +13925,7 @@ public: mtpTypeId type() const { return mtpc_upload_saveBigFilePart; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_upload_saveBigFilePart) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_upload_saveBigFilePart) { vfile_id.read(from, end); vfile_part.read(from, end); vfile_total_parts.read(from, end); @@ -13974,7 +13976,7 @@ public: mtpTypeId type() const { return mtpc_initConnection; } - void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId /*cons*/ = mtpc_initConnection) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_initConnection) { vapi_id.read(from, end); vdevice_model.read(from, end); vsystem_version.read(from, end); @@ -14018,9 +14020,9 @@ public: mtpTypeId type() const { return mtpc_help_getSupport; } - void read(const mtpPrime *&/*from*/, const mtpPrime */*end*/, mtpTypeId /*cons*/ = mtpc_help_getSupport) { + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getSupport) { } - void write(mtpBuffer &/*to*/) const { + void write(mtpBuffer &to) const { } typedef MTPhelp_Support ResponseType; @@ -16027,7 +16029,7 @@ inline void MTPstorage_fileType::read(const mtpPrime *&from, const mtpPrime *end default: throw mtpErrorUnexpected(cons, "MTPstorage_fileType"); } } -inline void MTPstorage_fileType::write(mtpBuffer &/*to*/) const { +inline void MTPstorage_fileType::write(mtpBuffer &to) const { switch (_type) { } } @@ -17807,7 +17809,7 @@ inline void MTPinputPeerNotifyEvents::read(const mtpPrime *&from, const mtpPrime default: throw mtpErrorUnexpected(cons, "MTPinputPeerNotifyEvents"); } } -inline void MTPinputPeerNotifyEvents::write(mtpBuffer &/*to*/) const { +inline void MTPinputPeerNotifyEvents::write(mtpBuffer &to) const { switch (_type) { } } @@ -17872,7 +17874,7 @@ inline void MTPpeerNotifyEvents::read(const mtpPrime *&from, const mtpPrime *end default: throw mtpErrorUnexpected(cons, "MTPpeerNotifyEvents"); } } -inline void MTPpeerNotifyEvents::write(mtpBuffer &/*to*/) const { +inline void MTPpeerNotifyEvents::write(mtpBuffer &to) const { switch (_type) { } } @@ -19184,10 +19186,11 @@ inline void MTPmessagesFilter::read(const mtpPrime *&from, const mtpPrime *end, case mtpc_inputMessagesFilterVideo: _type = cons; break; case mtpc_inputMessagesFilterPhotoVideo: _type = cons; break; case mtpc_inputMessagesFilterDocument: _type = cons; break; + case mtpc_inputMessagesFilterAudio: _type = cons; break; default: throw mtpErrorUnexpected(cons, "MTPmessagesFilter"); } } -inline void MTPmessagesFilter::write(mtpBuffer &/*to*/) const { +inline void MTPmessagesFilter::write(mtpBuffer &to) const { switch (_type) { } } @@ -19198,6 +19201,7 @@ inline MTPmessagesFilter::MTPmessagesFilter(mtpTypeId type) : _type(type) { case mtpc_inputMessagesFilterVideo: break; case mtpc_inputMessagesFilterPhotoVideo: break; case mtpc_inputMessagesFilterDocument: break; + case mtpc_inputMessagesFilterAudio: break; default: throw mtpErrorBadTypeId(type, "MTPmessagesFilter"); } } @@ -19216,6 +19220,9 @@ inline MTPmessagesFilter MTP_inputMessagesFilterPhotoVideo() { inline MTPmessagesFilter MTP_inputMessagesFilterDocument() { return MTPmessagesFilter(mtpc_inputMessagesFilterDocument); } +inline MTPmessagesFilter MTP_inputMessagesFilterAudio() { + return MTPmessagesFilter(mtpc_inputMessagesFilterAudio); +} inline uint32 MTPupdate::size() const { switch (_type) { @@ -22007,23 +22014,6 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP QString result; switch (mtpTypeId(cons)) { - case mtpc_userProfilePhotoEmpty: - result = " "; - return "{ userProfilePhotoEmpty" + result + "}"; - - case mtpc_userProfilePhoto: - result += "\n" + add; - result += " photo_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " photo_small: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " photo_big: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ userProfilePhoto" + result + "}"; - - case mtpc_rpc_error: - result += "\n" + add; - result += " error_code: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " error_message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ rpc_error" + result + "}"; - case mtpc_dh_gen_ok: result += "\n" + add; result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; @@ -22045,171 +22035,36 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " new_nonce_hash3: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; return "{ dh_gen_fail" + result + "}"; - case mtpc_inputPeerEmpty: - result = " "; - return "{ inputPeerEmpty" + result + "}"; - - case mtpc_inputPeerSelf: - result = " "; - return "{ inputPeerSelf" + result + "}"; - - case mtpc_inputPeerContact: - result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ inputPeerContact" + result + "}"; - - case mtpc_inputPeerForeign: - result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputPeerForeign" + result + "}"; - - case mtpc_inputPeerChat: - result += "\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ inputPeerChat" + result + "}"; - - case mtpc_photoEmpty: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ photoEmpty" + result + "}"; - - case mtpc_photo: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " caption: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " geo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " sizes: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ photo" + result + "}"; - - case mtpc_p_q_inner_data: - result += "\n" + add; - result += " pq: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " p: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " q: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " new_nonce: " + mtpTextSerialize(from, end, mtpc_int256, level + 1) + ",\n" + add; - return "{ p_q_inner_data" + result + "}"; - - case mtpc_client_DH_inner_data: - result += "\n" + add; - result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " retry_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " g_b: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ client_DH_inner_data" + result + "}"; - - case mtpc_contacts_link: - result += "\n" + add; - result += " my_link: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " foreign_link: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " user: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contacts_link" + result + "}"; - - case mtpc_inputPhotoCropAuto: - result = " "; - return "{ inputPhotoCropAuto" + result + "}"; - - case mtpc_inputPhotoCrop: - result += "\n" + add; - result += " crop_left: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; - result += " crop_top: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; - result += " crop_width: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; - return "{ inputPhotoCrop" + result + "}"; - - case mtpc_inputFile: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " parts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " md5_checksum: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ inputFile" + result + "}"; - - case mtpc_inputFileBig: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " parts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ inputFileBig" + result + "}"; - - case mtpc_messageActionEmpty: - result = " "; - return "{ messageActionEmpty" + result + "}"; - - case mtpc_messageActionChatCreate: - result += "\n" + add; - result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_int) + ",\n" + add; - return "{ messageActionChatCreate" + result + "}"; - - case mtpc_messageActionChatEditTitle: - result += "\n" + add; - result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ messageActionChatEditTitle" + result + "}"; - - case mtpc_messageActionChatEditPhoto: - result += "\n" + add; - result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messageActionChatEditPhoto" + result + "}"; - - case mtpc_messageActionChatDeletePhoto: - result = " "; - return "{ messageActionChatDeletePhoto" + result + "}"; - - case mtpc_messageActionChatAddUser: - result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messageActionChatAddUser" + result + "}"; - - case mtpc_messageActionChatDeleteUser: - result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messageActionChatDeleteUser" + result + "}"; - - case mtpc_messageActionGeoChatCreate: - result += "\n" + add; - result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " address: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ messageActionGeoChatCreate" + result + "}"; - - case mtpc_messageActionGeoChatCheckin: - result = " "; - return "{ messageActionGeoChatCheckin" + result + "}"; - - case mtpc_inputMessagesFilterEmpty: - result = " "; - return "{ inputMessagesFilterEmpty" + result + "}"; - - case mtpc_inputMessagesFilterPhotos: - result = " "; - return "{ inputMessagesFilterPhotos" + result + "}"; - - case mtpc_inputMessagesFilterVideo: - result = " "; - return "{ inputMessagesFilterVideo" + result + "}"; - - case mtpc_inputMessagesFilterPhotoVideo: - result = " "; - return "{ inputMessagesFilterPhotoVideo" + result + "}"; - - case mtpc_inputMessagesFilterDocument: - result = " "; - return "{ inputMessagesFilterDocument" + result + "}"; - case mtpc_help_support: result += "\n" + add; result += " phone_number: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; result += " user: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; return "{ help_support" + result + "}"; - case mtpc_contactFound: + case mtpc_audioEmpty: result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ audioEmpty" + result + "}"; + + case mtpc_audio: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ contactFound" + result + "}"; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " duration: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " mime_type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " size: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ audio" + result + "}"; + + case mtpc_auth_sentCode: + result += "\n" + add; + result += " phone_registered: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " phone_code_hash: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " send_call_timeout: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " is_password: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ auth_sentCode" + result + "}"; case mtpc_future_salts: result += "\n" + add; @@ -22218,99 +22073,42 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " salts: " + mtpTextSerialize(from, end, mtpc_vector, level + 1, mtpc_future_salt) + ",\n" + add; return "{ future_salts" + result + "}"; - case mtpc_inputPhotoEmpty: - result = " "; - return "{ inputPhotoEmpty" + result + "}"; + case mtpc_contactSuggested: + result += "\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " mutual_contacts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ contactSuggested" + result + "}"; - case mtpc_inputPhoto: + case mtpc_inputFileLocation: + result += "\n" + add; + result += " volume_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " local_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " secret: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputFileLocation" + result + "}"; + + case mtpc_inputVideoFileLocation: result += "\n" + add; result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputPhoto" + result + "}"; + return "{ inputVideoFileLocation" + result + "}"; - case mtpc_chatParticipant: + case mtpc_inputEncryptedFileLocation: result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " inviter_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ chatParticipant" + result + "}"; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputEncryptedFileLocation" + result + "}"; - case mtpc_auth_exportedAuthorization: + case mtpc_inputAudioFileLocation: result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - return "{ auth_exportedAuthorization" + result + "}"; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputAudioFileLocation" + result + "}"; - case mtpc_contactStatus: + case mtpc_inputDocumentFileLocation: result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " expires: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ contactStatus" + result + "}"; - - case mtpc_new_session_created: - result += "\n" + add; - result += " first_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " unique_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " server_salt: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ new_session_created" + result + "}"; - - case mtpc_geochats_located: - result += "\n" + add; - result += " results: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ geochats_located" + result + "}"; - - case mtpc_updatesTooLong: - result = " "; - return "{ updatesTooLong" + result + "}"; - - case mtpc_updateShortMessage: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ updateShortMessage" + result + "}"; - - case mtpc_updateShortChatMessage: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ updateShortChatMessage" + result + "}"; - - case mtpc_updateShort: - result += "\n" + add; - result += " update: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ updateShort" + result + "}"; - - case mtpc_updatesCombined: - result += "\n" + add; - result += " updates: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq_start: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ updatesCombined" + result + "}"; - - case mtpc_updates: - result += "\n" + add; - result += " updates: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ updates" + result + "}"; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputDocumentFileLocation" + result + "}"; case mtpc_future_salt: result += "\n" + add; @@ -22319,23 +22117,34 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " salt: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; return "{ future_salt" + result + "}"; - case mtpc_server_DH_inner_data: + case mtpc_messages_dhConfigNotModified: result += "\n" + add; - result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " g: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " dh_prime: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " g_a: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " server_time: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ server_DH_inner_data" + result + "}"; + result += " random: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + return "{ messages_dhConfigNotModified" + result + "}"; - case mtpc_resPQ: + case mtpc_messages_dhConfig: result += "\n" + add; - result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " pq: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " server_public_key_fingerprints: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; - return "{ resPQ" + result + "}"; + result += " g: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " p: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " random: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + return "{ messages_dhConfig" + result + "}"; + + case mtpc_inputChatPhotoEmpty: + result = " "; + return "{ inputChatPhotoEmpty" + result + "}"; + + case mtpc_inputChatUploadedPhoto: + result += "\n" + add; + result += " file: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " crop: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ inputChatUploadedPhoto" + result + "}"; + + case mtpc_inputChatPhoto: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " crop: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ inputChatPhoto" + result + "}"; case mtpc_upload_file: result += "\n" + add; @@ -22344,6 +22153,42 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; return "{ upload_file" + result + "}"; + case mtpc_photos_photo: + result += "\n" + add; + result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ photos_photo" + result + "}"; + + case mtpc_inputPeerNotifyEventsEmpty: + result = " "; + return "{ inputPeerNotifyEventsEmpty" + result + "}"; + + case mtpc_inputPeerNotifyEventsAll: + result = " "; + return "{ inputPeerNotifyEventsAll" + result + "}"; + + case mtpc_inputAppEvent: + result += "\n" + add; + result += " time: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; + result += " type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " peer: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " data: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ inputAppEvent" + result + "}"; + + case mtpc_updates_state: + result += "\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " qts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " unread_count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ updates_state" + result + "}"; + + case mtpc_msgs_state_req: + result += "\n" + add; + result += " msg_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; + return "{ msgs_state_req" + result + "}"; + case mtpc_inputMediaEmpty: result = " "; return "{ inputMediaEmpty" + result + "}"; @@ -22426,6 +22271,200 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; return "{ inputMediaDocument" + result + "}"; + case mtpc_userProfilePhotoEmpty: + result = " "; + return "{ userProfilePhotoEmpty" + result + "}"; + + case mtpc_userProfilePhoto: + result += "\n" + add; + result += " photo_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " photo_small: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " photo_big: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ userProfilePhoto" + result + "}"; + + case mtpc_decryptedMessageLayer: + result += "\n" + add; + result += " layer: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " message: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ decryptedMessageLayer" + result + "}"; + + case mtpc_contacts_foreignLinkUnknown: + result = " "; + return "{ contacts_foreignLinkUnknown" + result + "}"; + + case mtpc_contacts_foreignLinkRequested: + result += "\n" + add; + result += " has_phone: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ contacts_foreignLinkRequested" + result + "}"; + + case mtpc_contacts_foreignLinkMutual: + result = " "; + return "{ contacts_foreignLinkMutual" + result + "}"; + + case mtpc_chatLocated: + result += "\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " distance: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ chatLocated" + result + "}"; + + case mtpc_dcOption: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " hostname: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " ip_address: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " port: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ dcOption" + result + "}"; + + case mtpc_geoPointEmpty: + result = " "; + return "{ geoPointEmpty" + result + "}"; + + case mtpc_geoPoint: + result += "\n" + add; + result += " long: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; + result += " lat: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; + return "{ geoPoint" + result + "}"; + + case mtpc_contacts_myLinkEmpty: + result = " "; + return "{ contacts_myLinkEmpty" + result + "}"; + + case mtpc_contacts_myLinkRequested: + result += "\n" + add; + result += " contact: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ contacts_myLinkRequested" + result + "}"; + + case mtpc_contacts_myLinkContact: + result = " "; + return "{ contacts_myLinkContact" + result + "}"; + + case mtpc_inputNotifyPeer: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ inputNotifyPeer" + result + "}"; + + case mtpc_inputNotifyUsers: + result = " "; + return "{ inputNotifyUsers" + result + "}"; + + case mtpc_inputNotifyChats: + result = " "; + return "{ inputNotifyChats" + result + "}"; + + case mtpc_inputNotifyAll: + result = " "; + return "{ inputNotifyAll" + result + "}"; + + case mtpc_inputNotifyGeoChatPeer: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ inputNotifyGeoChatPeer" + result + "}"; + + case mtpc_userEmpty: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ userEmpty" + result + "}"; + + case mtpc_userSelf: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " phone: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " status: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " inactive: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ userSelf" + result + "}"; + + case mtpc_userContact: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " phone: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " status: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ userContact" + result + "}"; + + case mtpc_userRequest: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " phone: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " status: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ userRequest" + result + "}"; + + case mtpc_userForeign: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " status: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ userForeign" + result + "}"; + + case mtpc_userDeleted: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ userDeleted" + result + "}"; + + case mtpc_messages_sentMessage: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_sentMessage" + result + "}"; + + case mtpc_messages_sentMessageLink: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " links: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_sentMessageLink" + result + "}"; + + case mtpc_msgs_state_info: + result += "\n" + add; + result += " req_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " info: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ msgs_state_info" + result + "}"; + + case mtpc_auth_authorization: + result += "\n" + add; + result += " expires: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " user: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ auth_authorization" + result + "}"; + + case mtpc_contactStatus: + result += "\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " expires: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ contactStatus" + result + "}"; + + case mtpc_config: + result += "\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " test_mode: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " this_dc: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " dc_options: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chat_size_max: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " broadcast_size_max: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ config" + result + "}"; + + case mtpc_msg_resend_req: + result += "\n" + add; + result += " msg_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; + return "{ msg_resend_req" + result + "}"; + case mtpc_documentEmpty: result += "\n" + add; result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; @@ -22444,125 +22483,356 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; return "{ document" + result + "}"; - case mtpc_inputEncryptedFileEmpty: - result = " "; - return "{ inputEncryptedFileEmpty" + result + "}"; - - case mtpc_inputEncryptedFileUploaded: + case mtpc_messages_statedMessages: result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " parts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " md5_checksum: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ inputEncryptedFileUploaded" + result + "}"; - - case mtpc_inputEncryptedFile: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputEncryptedFile" + result + "}"; - - case mtpc_inputEncryptedFileBigUploaded: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " parts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ inputEncryptedFileBigUploaded" + result + "}"; - - case mtpc_contacts_found: - result += "\n" + add; - result += " results: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contacts_found" + result + "}"; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_statedMessages" + result + "}"; - case mtpc_inputFileLocation: + case mtpc_messages_statedMessagesLinks: result += "\n" + add; - result += " volume_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " local_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " secret: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputFileLocation" + result + "}"; + result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " links: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_statedMessagesLinks" + result + "}"; - case mtpc_inputVideoFileLocation: + case mtpc_messages_messages: result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputVideoFileLocation" + result + "}"; + result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_messages" + result + "}"; - case mtpc_inputEncryptedFileLocation: + case mtpc_messages_messagesSlice: result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputEncryptedFileLocation" + result + "}"; + result += " count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_messagesSlice" + result + "}"; - case mtpc_inputAudioFileLocation: + case mtpc_chatPhotoEmpty: + result = " "; + return "{ chatPhotoEmpty" + result + "}"; + + case mtpc_chatPhoto: result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputAudioFileLocation" + result + "}"; + result += " photo_small: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " photo_big: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ chatPhoto" + result + "}"; - case mtpc_inputDocumentFileLocation: + case mtpc_messages_chat: result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputDocumentFileLocation" + result + "}"; + result += " chat: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_chat" + result + "}"; - case mtpc_chatFull: + case mtpc_updates_differenceEmpty: + result += "\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ updates_differenceEmpty" + result + "}"; + + case mtpc_updates_difference: + result += "\n" + add; + result += " new_messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " new_encrypted_messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " other_updates: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " state: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ updates_difference" + result + "}"; + + case mtpc_updates_differenceSlice: + result += "\n" + add; + result += " new_messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " new_encrypted_messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " other_updates: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " intermediate_state: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ updates_differenceSlice" + result + "}"; + + case mtpc_p_q_inner_data: + result += "\n" + add; + result += " pq: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " p: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " q: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " new_nonce: " + mtpTextSerialize(from, end, mtpc_int256, level + 1) + ",\n" + add; + return "{ p_q_inner_data" + result + "}"; + + case mtpc_auth_exportedAuthorization: result += "\n" + add; result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " participants: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chat_photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " notify_settings: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ chatFull" + result + "}"; + result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + return "{ auth_exportedAuthorization" + result + "}"; - case mtpc_chatParticipantsForbidden: + case mtpc_contacts_link: result += "\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ chatParticipantsForbidden" + result + "}"; + result += " my_link: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " foreign_link: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " user: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ contacts_link" + result + "}"; - case mtpc_chatParticipants: + case mtpc_inputPhoneContact: result += "\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " admin_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " participants: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ chatParticipants" + result + "}"; + result += " client_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " phone: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ inputPhoneContact" + result + "}"; - case mtpc_msgs_ack: + case mtpc_decryptedMessage: + result += "\n" + add; + result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " random_bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " media: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ decryptedMessage" + result + "}"; + + case mtpc_decryptedMessageService: + result += "\n" + add; + result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " random_bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + result += " action: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ decryptedMessageService" + result + "}"; + + case mtpc_http_wait: + result += "\n" + add; + result += " max_delay: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " wait_after: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " max_wait: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ http_wait" + result + "}"; + + case mtpc_destroy_session_ok: + result += "\n" + add; + result += " session_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ destroy_session_ok" + result + "}"; + + case mtpc_destroy_session_none: + result += "\n" + add; + result += " session_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ destroy_session_none" + result + "}"; + + case mtpc_inputFile: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " parts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " md5_checksum: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ inputFile" + result + "}"; + + case mtpc_inputFileBig: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " parts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ inputFileBig" + result + "}"; + + case mtpc_msgs_all_info: result += "\n" + add; result += " msg_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; - return "{ msgs_ack" + result + "}"; + result += " info: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ msgs_all_info" + result + "}"; - case mtpc_userFull: + case mtpc_help_inviteText: result += "\n" + add; - result += " user: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " link: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " profile_photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " notify_settings: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " blocked: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " real_first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " real_last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ userFull" + result + "}"; + result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ help_inviteText" + result + "}"; - case mtpc_videoEmpty: + case mtpc_peerUser: result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ videoEmpty" + result + "}"; - - case mtpc_video: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ peerUser" + result + "}"; + + case mtpc_peerChat: + result += "\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ peerChat" + result + "}"; + + case mtpc_contacts_blocked: + result += "\n" + add; + result += " blocked: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ contacts_blocked" + result + "}"; + + case mtpc_contacts_blockedSlice: + result += "\n" + add; + result += " count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " blocked: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ contacts_blockedSlice" + result + "}"; + + case mtpc_geochats_messages: + result += "\n" + add; + result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ geochats_messages" + result + "}"; + + case mtpc_geochats_messagesSlice: + result += "\n" + add; + result += " count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ geochats_messagesSlice" + result + "}"; + + case mtpc_inputGeoPointEmpty: + result = " "; + return "{ inputGeoPointEmpty" + result + "}"; + + case mtpc_inputGeoPoint: + result += "\n" + add; + result += " lat: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; + result += " long: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; + return "{ inputGeoPoint" + result + "}"; + + case mtpc_contactFound: + result += "\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ contactFound" + result + "}"; + + case mtpc_encryptedMessage: + result += "\n" + add; + result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " caption: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " duration: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " mime_type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " size: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " thumb: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " w: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " h: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ video" + result + "}"; + result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + result += " file: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ encryptedMessage" + result + "}"; + + case mtpc_encryptedMessageService: + result += "\n" + add; + result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + return "{ encryptedMessageService" + result + "}"; + + case mtpc_photos_photos: + result += "\n" + add; + result += " photos: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ photos_photos" + result + "}"; + + case mtpc_photos_photosSlice: + result += "\n" + add; + result += " count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " photos: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ photos_photosSlice" + result + "}"; + + case mtpc_dialog: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " top_message: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " unread_count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " notify_settings: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ dialog" + result + "}"; + + case mtpc_updatesTooLong: + result = " "; + return "{ updatesTooLong" + result + "}"; + + case mtpc_updateShortMessage: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ updateShortMessage" + result + "}"; + + case mtpc_updateShortChatMessage: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " from_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ updateShortChatMessage" + result + "}"; + + case mtpc_updateShort: + result += "\n" + add; + result += " update: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ updateShort" + result + "}"; + + case mtpc_updatesCombined: + result += "\n" + add; + result += " updates: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq_start: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ updatesCombined" + result + "}"; + + case mtpc_updates: + result += "\n" + add; + result += " updates: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ updates" + result + "}"; + + case mtpc_contacts_importedContacts: + result += "\n" + add; + result += " imported: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " retry_contacts: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ contacts_importedContacts" + result + "}"; + + case mtpc_resPQ: + result += "\n" + add; + result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " pq: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " server_public_key_fingerprints: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; + return "{ resPQ" + result + "}"; + + case mtpc_inputPhotoCropAuto: + result = " "; + return "{ inputPhotoCropAuto" + result + "}"; + + case mtpc_inputPhotoCrop: + result += "\n" + add; + result += " crop_left: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; + result += " crop_top: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; + result += " crop_width: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; + return "{ inputPhotoCrop" + result + "}"; + + case mtpc_messages_statedMessage: + result += "\n" + add; + result += " message: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_statedMessage" + result + "}"; + + case mtpc_messages_statedMessageLink: + result += "\n" + add; + result += " message: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " links: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_statedMessageLink" + result + "}"; case mtpc_messageEmpty: result += "\n" + add; @@ -22606,66 +22876,12 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " action: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; return "{ messageService" + result + "}"; - case mtpc_notifyPeer: + case mtpc_new_session_created: result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ notifyPeer" + result + "}"; - - case mtpc_notifyUsers: - result = " "; - return "{ notifyUsers" + result + "}"; - - case mtpc_notifyChats: - result = " "; - return "{ notifyChats" + result + "}"; - - case mtpc_notifyAll: - result = " "; - return "{ notifyAll" + result + "}"; - - case mtpc_messages_messageEmpty: - result = " "; - return "{ messages_messageEmpty" + result + "}"; - - case mtpc_messages_message: - result += "\n" + add; - result += " message: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_message" + result + "}"; - - case mtpc_inputPhoneContact: - result += "\n" + add; - result += " client_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " phone: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ inputPhoneContact" + result + "}"; - - case mtpc_rpc_answer_unknown: - result = " "; - return "{ rpc_answer_unknown" + result + "}"; - - case mtpc_rpc_answer_dropped_running: - result = " "; - return "{ rpc_answer_dropped_running" + result + "}"; - - case mtpc_rpc_answer_dropped: - result += "\n" + add; - result += " msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " seq_no: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " bytes: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ rpc_answer_dropped" + result + "}"; - - case mtpc_inputVideoEmpty: - result = " "; - return "{ inputVideoEmpty" + result + "}"; - - case mtpc_inputVideo: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputVideo" + result + "}"; + result += " first_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " unique_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " server_salt: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ new_session_created" + result + "}"; case mtpc_decryptedMessageMediaEmpty: result = " "; @@ -22732,6 +22948,46 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " iv: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; return "{ decryptedMessageMediaAudio" + result + "}"; + case mtpc_inputEncryptedFileEmpty: + result = " "; + return "{ inputEncryptedFileEmpty" + result + "}"; + + case mtpc_inputEncryptedFileUploaded: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " parts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " md5_checksum: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ inputEncryptedFileUploaded" + result + "}"; + + case mtpc_inputEncryptedFile: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputEncryptedFile" + result + "}"; + + case mtpc_inputEncryptedFileBigUploaded: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " parts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ inputEncryptedFileBigUploaded" + result + "}"; + + case mtpc_fileLocationUnavailable: + result += "\n" + add; + result += " volume_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " local_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " secret: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ fileLocationUnavailable" + result + "}"; + + case mtpc_fileLocation: + result += "\n" + add; + result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " volume_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " local_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " secret: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ fileLocation" + result + "}"; + case mtpc_geoChatMessageEmpty: result += "\n" + add; result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; @@ -22757,55 +23013,229 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " action: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; return "{ geoChatMessageService" + result + "}"; - case mtpc_geoPointEmpty: + case mtpc_rpc_error: + result += "\n" + add; + result += " error_code: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " error_message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ rpc_error" + result + "}"; + + case mtpc_msgs_ack: + result += "\n" + add; + result += " msg_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; + return "{ msgs_ack" + result + "}"; + + case mtpc_encryptedChatEmpty: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ encryptedChatEmpty" + result + "}"; + + case mtpc_encryptedChatWaiting: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " admin_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " participant_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ encryptedChatWaiting" + result + "}"; + + case mtpc_encryptedChatRequested: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " admin_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " participant_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " g_a: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + return "{ encryptedChatRequested" + result + "}"; + + case mtpc_encryptedChat: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " admin_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " participant_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " g_a_or_b: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ encryptedChat" + result + "}"; + + case mtpc_encryptedChatDiscarded: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ encryptedChatDiscarded" + result + "}"; + + case mtpc_help_appUpdate: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " critical: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " url: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " text: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ help_appUpdate" + result + "}"; + + case mtpc_help_noAppUpdate: result = " "; - return "{ geoPointEmpty" + result + "}"; + return "{ help_noAppUpdate" + result + "}"; - case mtpc_geoPoint: + case mtpc_chatFull: result += "\n" + add; - result += " long: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; - result += " lat: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; - return "{ geoPoint" + result + "}"; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " participants: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chat_photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " notify_settings: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ chatFull" + result + "}"; - case mtpc_messages_dialogs: - result += "\n" + add; - result += " dialogs: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_dialogs" + result + "}"; + case mtpc_inputUserEmpty: + result = " "; + return "{ inputUserEmpty" + result + "}"; - case mtpc_messages_dialogsSlice: - result += "\n" + add; - result += " count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " dialogs: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_dialogsSlice" + result + "}"; + case mtpc_inputUserSelf: + result = " "; + return "{ inputUserSelf" + result + "}"; - case mtpc_messages_dhConfigNotModified: - result += "\n" + add; - result += " random: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - return "{ messages_dhConfigNotModified" + result + "}"; - - case mtpc_messages_dhConfig: - result += "\n" + add; - result += " g: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " p: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " random: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - return "{ messages_dhConfig" + result + "}"; - - case mtpc_peerUser: + case mtpc_inputUserContact: result += "\n" + add; result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ peerUser" + result + "}"; + return "{ inputUserContact" + result + "}"; - case mtpc_peerChat: + case mtpc_inputUserForeign: + result += "\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputUserForeign" + result + "}"; + + case mtpc_nearestDc: + result += "\n" + add; + result += " country: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " this_dc: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " nearest_dc: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ nearestDc" + result + "}"; + + case mtpc_photoEmpty: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ photoEmpty" + result + "}"; + + case mtpc_photo: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " caption: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " geo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " sizes: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ photo" + result + "}"; + + case mtpc_photoSizeEmpty: + result += "\n" + add; + result += " type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ photoSizeEmpty" + result + "}"; + + case mtpc_photoSize: + result += "\n" + add; + result += " type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " location: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " w: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " h: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " size: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ photoSize" + result + "}"; + + case mtpc_photoCachedSize: + result += "\n" + add; + result += " type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " location: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " w: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " h: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + return "{ photoCachedSize" + result + "}"; + + case mtpc_messages_chatFull: + result += "\n" + add; + result += " full_chat: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_chatFull" + result + "}"; + + case mtpc_messages_affectedHistory: + result += "\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_affectedHistory" + result + "}"; + + case mtpc_userFull: + result += "\n" + add; + result += " user: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " link: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " profile_photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " notify_settings: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " blocked: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " real_first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " real_last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ userFull" + result + "}"; + + case mtpc_chatParticipantsForbidden: result += "\n" + add; result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ peerChat" + result + "}"; + return "{ chatParticipantsForbidden" + result + "}"; + + case mtpc_chatParticipants: + result += "\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " admin_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " participants: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ chatParticipants" + result + "}"; + + case mtpc_messages_messageEmpty: + result = " "; + return "{ messages_messageEmpty" + result + "}"; + + case mtpc_messages_message: + result += "\n" + add; + result += " message: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_message" + result + "}"; + + case mtpc_encryptedFileEmpty: + result = " "; + return "{ encryptedFileEmpty" + result + "}"; + + case mtpc_encryptedFile: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " size: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ encryptedFile" + result + "}"; + + case mtpc_inputVideoEmpty: + result = " "; + return "{ inputVideoEmpty" + result + "}"; + + case mtpc_inputVideo: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputVideo" + result + "}"; + + case mtpc_server_DH_inner_data: + result += "\n" + add; + result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " g: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " dh_prime: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " g_a: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " server_time: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ server_DH_inner_data" + result + "}"; + + case mtpc_contactBlocked: + result += "\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ contactBlocked" + result + "}"; case mtpc_server_DH_params_fail: result += "\n" + add; @@ -22821,34 +23251,77 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " encrypted_answer: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; return "{ server_DH_params_ok" + result + "}"; - case mtpc_inputAppEvent: + case mtpc_importedContact: result += "\n" + add; - result += " time: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; - result += " type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " peer: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " data: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ inputAppEvent" + result + "}"; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " client_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ importedContact" + result + "}"; - case mtpc_photos_photo: - result += "\n" + add; - result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ photos_photo" + result + "}"; - - case mtpc_peerNotifyEventsEmpty: + case mtpc_inputMessagesFilterEmpty: result = " "; - return "{ peerNotifyEventsEmpty" + result + "}"; + return "{ inputMessagesFilterEmpty" + result + "}"; - case mtpc_peerNotifyEventsAll: + case mtpc_inputMessagesFilterPhotos: result = " "; - return "{ peerNotifyEventsAll" + result + "}"; + return "{ inputMessagesFilterPhotos" + result + "}"; - case mtpc_nearestDc: + case mtpc_inputMessagesFilterVideo: + result = " "; + return "{ inputMessagesFilterVideo" + result + "}"; + + case mtpc_inputMessagesFilterPhotoVideo: + result = " "; + return "{ inputMessagesFilterPhotoVideo" + result + "}"; + + case mtpc_inputMessagesFilterDocument: + result = " "; + return "{ inputMessagesFilterDocument" + result + "}"; + + case mtpc_inputMessagesFilterAudio: + result = " "; + return "{ inputMessagesFilterAudio" + result + "}"; + + case mtpc_inputPeerNotifySettings: result += "\n" + add; - result += " country: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " this_dc: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " nearest_dc: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ nearestDc" + result + "}"; + result += " mute_until: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " sound: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " show_previews: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " events_mask: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ inputPeerNotifySettings" + result + "}"; + + case mtpc_inputPeerEmpty: + result = " "; + return "{ inputPeerEmpty" + result + "}"; + + case mtpc_inputPeerSelf: + result = " "; + return "{ inputPeerSelf" + result + "}"; + + case mtpc_inputPeerContact: + result += "\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ inputPeerContact" + result + "}"; + + case mtpc_inputPeerForeign: + result += "\n" + add; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputPeerForeign" + result + "}"; + + case mtpc_inputPeerChat: + result += "\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ inputPeerChat" + result + "}"; + + case mtpc_inputDocumentEmpty: + result = " "; + return "{ inputDocumentEmpty" + result + "}"; + + case mtpc_inputDocument: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputDocument" + result + "}"; case mtpc_wallPaper: result += "\n" + add; @@ -22866,52 +23339,78 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " color: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; return "{ wallPaperSolid" + result + "}"; - case mtpc_geochats_messages: + case mtpc_inputGeoChat: result += "\n" + add; - result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ geochats_messages" + result + "}"; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputGeoChat" + result + "}"; - case mtpc_geochats_messagesSlice: + case mtpc_chatEmpty: result += "\n" + add; - result += " count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ geochats_messagesSlice" + result + "}"; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ chatEmpty" + result + "}"; - case mtpc_contacts_blocked: + case mtpc_chat: result += "\n" + add; - result += " blocked: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contacts_blocked" + result + "}"; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " participants_count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " left: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ chat" + result + "}"; - case mtpc_contacts_blockedSlice: + case mtpc_chatForbidden: result += "\n" + add; - result += " count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " blocked: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contacts_blockedSlice" + result + "}"; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ chatForbidden" + result + "}"; - case mtpc_messages_statedMessage: + case mtpc_geoChat: result += "\n" + add; - result += " message: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_statedMessage" + result + "}"; + result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " address: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " venue: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " geo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " participants_count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " checked_in: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ geoChat" + result + "}"; - case mtpc_messages_statedMessageLink: + case mtpc_inputEncryptedChat: result += "\n" + add; - result += " message: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " links: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_statedMessageLink" + result + "}"; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputEncryptedChat" + result + "}"; + + case mtpc_messages_sentEncryptedMessage: + result += "\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_sentEncryptedMessage" + result + "}"; + + case mtpc_messages_sentEncryptedFile: + result += "\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " file: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_sentEncryptedFile" + result + "}"; + + case mtpc_peerNotifySettingsEmpty: + result = " "; + return "{ peerNotifySettingsEmpty" + result + "}"; + + case mtpc_peerNotifySettings: + result += "\n" + add; + result += " mute_until: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " sound: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " show_previews: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " events_mask: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ peerNotifySettings" + result + "}"; case mtpc_messageMediaEmpty: result = " "; @@ -22955,162 +23454,11 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " audio: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; return "{ messageMediaAudio" + result + "}"; - case mtpc_inputGeoChat: + case mtpc_messages_chats: result += "\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputGeoChat" + result + "}"; - - case mtpc_help_appUpdate: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " critical: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " url: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " text: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ help_appUpdate" + result + "}"; - - case mtpc_help_noAppUpdate: - result = " "; - return "{ help_noAppUpdate" + result + "}"; - - case mtpc_updates_differenceEmpty: - result += "\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ updates_differenceEmpty" + result + "}"; - - case mtpc_updates_difference: - result += "\n" + add; - result += " new_messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " new_encrypted_messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " other_updates: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " state: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ updates_difference" + result + "}"; - - case mtpc_updates_differenceSlice: - result += "\n" + add; - result += " new_messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " new_encrypted_messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " other_updates: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " intermediate_state: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ updates_differenceSlice" + result + "}"; - - case mtpc_msgs_state_info: - result += "\n" + add; - result += " req_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " info: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ msgs_state_info" + result + "}"; - - case mtpc_msgs_state_req: - result += "\n" + add; - result += " msg_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; - return "{ msgs_state_req" + result + "}"; - - case mtpc_msg_resend_req: - result += "\n" + add; - result += " msg_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; - return "{ msg_resend_req" + result + "}"; - - case mtpc_inputDocumentEmpty: - result = " "; - return "{ inputDocumentEmpty" + result + "}"; - - case mtpc_inputDocument: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputDocument" + result + "}"; - - case mtpc_userStatusEmpty: - result = " "; - return "{ userStatusEmpty" + result + "}"; - - case mtpc_userStatusOnline: - result += "\n" + add; - result += " expires: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ userStatusOnline" + result + "}"; - - case mtpc_userStatusOffline: - result += "\n" + add; - result += " was_online: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ userStatusOffline" + result + "}"; - - case mtpc_photos_photos: - result += "\n" + add; - result += " photos: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ photos_photos" + result + "}"; - - case mtpc_photos_photosSlice: - result += "\n" + add; - result += " count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " photos: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ photos_photosSlice" + result + "}"; - - case mtpc_decryptedMessage: - result += "\n" + add; - result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " random_bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " media: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ decryptedMessage" + result + "}"; - - case mtpc_decryptedMessageService: - result += "\n" + add; - result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " random_bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - result += " action: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ decryptedMessageService" + result + "}"; - - case mtpc_contacts_importedContacts: - result += "\n" + add; - result += " imported: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " retry_contacts: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contacts_importedContacts" + result + "}"; - - case mtpc_fileLocationUnavailable: - result += "\n" + add; - result += " volume_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " local_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " secret: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ fileLocationUnavailable" + result + "}"; - - case mtpc_fileLocation: - result += "\n" + add; - result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " volume_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " local_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " secret: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ fileLocation" + result + "}"; - - case mtpc_photoSizeEmpty: - result += "\n" + add; - result += " type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ photoSizeEmpty" + result + "}"; - - case mtpc_photoSize: - result += "\n" + add; - result += " type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " location: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " w: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " h: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " size: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ photoSize" + result + "}"; - - case mtpc_photoCachedSize: - result += "\n" + add; - result += " type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " location: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " w: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " h: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - return "{ photoCachedSize" + result + "}"; + return "{ messages_chats" + result + "}"; case mtpc_msg_detailed_info: result += "\n" + add; @@ -23127,213 +23475,124 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " status: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; return "{ msg_new_detailed_info" + result + "}"; - case mtpc_inputChatPhotoEmpty: + case mtpc_client_DH_inner_data: + result += "\n" + add; + result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " retry_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " g_b: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ client_DH_inner_data" + result + "}"; + + case mtpc_rpc_answer_unknown: result = " "; - return "{ inputChatPhotoEmpty" + result + "}"; + return "{ rpc_answer_unknown" + result + "}"; - case mtpc_inputChatUploadedPhoto: - result += "\n" + add; - result += " file: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " crop: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ inputChatUploadedPhoto" + result + "}"; - - case mtpc_inputChatPhoto: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " crop: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ inputChatPhoto" + result + "}"; - - case mtpc_messages_sentMessage: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_sentMessage" + result + "}"; - - case mtpc_messages_sentMessageLink: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " links: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_sentMessageLink" + result + "}"; - - case mtpc_messages_chatFull: - result += "\n" + add; - result += " full_chat: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_chatFull" + result + "}"; - - case mtpc_geochats_statedMessage: - result += "\n" + add; - result += " message: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ geochats_statedMessage" + result + "}"; - - case mtpc_chatPhotoEmpty: + case mtpc_rpc_answer_dropped_running: result = " "; - return "{ chatPhotoEmpty" + result + "}"; + return "{ rpc_answer_dropped_running" + result + "}"; - case mtpc_chatPhoto: + case mtpc_rpc_answer_dropped: result += "\n" + add; - result += " photo_small: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " photo_big: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ chatPhoto" + result + "}"; + result += " msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " seq_no: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " bytes: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ rpc_answer_dropped" + result + "}"; - case mtpc_encryptedMessage: - result += "\n" + add; - result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - result += " file: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ encryptedMessage" + result + "}"; - - case mtpc_encryptedMessageService: - result += "\n" + add; - result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - return "{ encryptedMessageService" + result + "}"; - - case mtpc_destroy_session_ok: - result += "\n" + add; - result += " session_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ destroy_session_ok" + result + "}"; - - case mtpc_destroy_session_none: - result += "\n" + add; - result += " session_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ destroy_session_none" + result + "}"; - - case mtpc_http_wait: - result += "\n" + add; - result += " max_delay: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " wait_after: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " max_wait: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ http_wait" + result + "}"; - - case mtpc_messages_sentEncryptedMessage: - result += "\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_sentEncryptedMessage" + result + "}"; - - case mtpc_messages_sentEncryptedFile: - result += "\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " file: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_sentEncryptedFile" + result + "}"; - - case mtpc_contacts_myLinkEmpty: + case mtpc_peerNotifyEventsEmpty: result = " "; - return "{ contacts_myLinkEmpty" + result + "}"; + return "{ peerNotifyEventsEmpty" + result + "}"; - case mtpc_contacts_myLinkRequested: - result += "\n" + add; - result += " contact: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contacts_myLinkRequested" + result + "}"; - - case mtpc_contacts_myLinkContact: + case mtpc_peerNotifyEventsAll: result = " "; - return "{ contacts_myLinkContact" + result + "}"; + return "{ peerNotifyEventsAll" + result + "}"; - case mtpc_inputEncryptedChat: + case mtpc_storage_fileUnknown: + result = " "; + return "{ storage_fileUnknown" + result + "}"; + + case mtpc_storage_fileJpeg: + result = " "; + return "{ storage_fileJpeg" + result + "}"; + + case mtpc_storage_fileGif: + result = " "; + return "{ storage_fileGif" + result + "}"; + + case mtpc_storage_filePng: + result = " "; + return "{ storage_filePng" + result + "}"; + + case mtpc_storage_filePdf: + result = " "; + return "{ storage_filePdf" + result + "}"; + + case mtpc_storage_fileMp3: + result = " "; + return "{ storage_fileMp3" + result + "}"; + + case mtpc_storage_fileMov: + result = " "; + return "{ storage_fileMov" + result + "}"; + + case mtpc_storage_filePartial: + result = " "; + return "{ storage_filePartial" + result + "}"; + + case mtpc_storage_fileMp4: + result = " "; + return "{ storage_fileMp4" + result + "}"; + + case mtpc_storage_fileWebp: + result = " "; + return "{ storage_fileWebp" + result + "}"; + + case mtpc_userStatusEmpty: + result = " "; + return "{ userStatusEmpty" + result + "}"; + + case mtpc_userStatusOnline: result += "\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputEncryptedChat" + result + "}"; + result += " expires: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ userStatusOnline" + result + "}"; - case mtpc_messages_chats: + case mtpc_userStatusOffline: result += "\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_chats" + result + "}"; + result += " was_online: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ userStatusOffline" + result + "}"; - case mtpc_encryptedChatEmpty: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ encryptedChatEmpty" + result + "}"; - - case mtpc_encryptedChatWaiting: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " admin_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " participant_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ encryptedChatWaiting" + result + "}"; - - case mtpc_encryptedChatRequested: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " admin_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " participant_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " g_a: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - return "{ encryptedChatRequested" + result + "}"; - - case mtpc_encryptedChat: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " admin_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " participant_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " g_a_or_b: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ encryptedChat" + result + "}"; - - case mtpc_encryptedChatDiscarded: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ encryptedChatDiscarded" + result + "}"; - - case mtpc_messages_messages: - result += "\n" + add; - result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_messages" + result + "}"; - - case mtpc_messages_messagesSlice: - result += "\n" + add; - result += " count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_messagesSlice" + result + "}"; - - case mtpc_auth_checkedPhone: - result += "\n" + add; - result += " phone_registered: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " phone_invited: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ auth_checkedPhone" + result + "}"; - - case mtpc_contactSuggested: + case mtpc_chatParticipant: result += "\n" + add; result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " mutual_contacts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ contactSuggested" + result + "}"; + result += " inviter_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ chatParticipant" + result + "}"; - case mtpc_contacts_foreignLinkUnknown: - result = " "; - return "{ contacts_foreignLinkUnknown" + result + "}"; - - case mtpc_contacts_foreignLinkRequested: + case mtpc_notifyPeer: result += "\n" + add; - result += " has_phone: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contacts_foreignLinkRequested" + result + "}"; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ notifyPeer" + result + "}"; - case mtpc_contacts_foreignLinkMutual: + case mtpc_notifyUsers: result = " "; - return "{ contacts_foreignLinkMutual" + result + "}"; + return "{ notifyUsers" + result + "}"; + + case mtpc_notifyChats: + result = " "; + return "{ notifyChats" + result + "}"; + + case mtpc_notifyAll: + result = " "; + return "{ notifyAll" + result + "}"; + + case mtpc_inputPhotoEmpty: + result = " "; + return "{ inputPhotoEmpty" + result + "}"; + + case mtpc_inputPhoto: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ inputPhoto" + result + "}"; case mtpc_inputAudioEmpty: result = " "; @@ -23345,180 +23604,19 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; return "{ inputAudio" + result + "}"; - case mtpc_contacts_contacts: + case mtpc_contacts_suggested: result += "\n" + add; - result += " contacts: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " results: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contacts_contacts" + result + "}"; + return "{ contacts_suggested" + result + "}"; - case mtpc_contacts_contactsNotModified: - result = " "; - return "{ contacts_contactsNotModified" + result + "}"; - - case mtpc_chatEmpty: + case mtpc_geochats_statedMessage: result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ chatEmpty" + result + "}"; - - case mtpc_chat: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " participants_count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " left: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ chat" + result + "}"; - - case mtpc_chatForbidden: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ chatForbidden" + result + "}"; - - case mtpc_geoChat: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " address: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " venue: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " geo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " participants_count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " checked_in: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ geoChat" + result + "}"; - - case mtpc_pong: - result += "\n" + add; - result += " msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " ping_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ pong" + result + "}"; - - case mtpc_inputPeerNotifyEventsEmpty: - result = " "; - return "{ inputPeerNotifyEventsEmpty" + result + "}"; - - case mtpc_inputPeerNotifyEventsAll: - result = " "; - return "{ inputPeerNotifyEventsAll" + result + "}"; - - case mtpc_inputPeerNotifySettings: - result += "\n" + add; - result += " mute_until: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " sound: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " show_previews: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " events_mask: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ inputPeerNotifySettings" + result + "}"; - - case mtpc_messages_affectedHistory: - result += "\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " message: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_affectedHistory" + result + "}"; - - case mtpc_inputNotifyPeer: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ inputNotifyPeer" + result + "}"; - - case mtpc_inputNotifyUsers: - result = " "; - return "{ inputNotifyUsers" + result + "}"; - - case mtpc_inputNotifyChats: - result = " "; - return "{ inputNotifyChats" + result + "}"; - - case mtpc_inputNotifyAll: - result = " "; - return "{ inputNotifyAll" + result + "}"; - - case mtpc_inputNotifyGeoChatPeer: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ inputNotifyGeoChatPeer" + result + "}"; - - case mtpc_bad_msg_notification: - result += "\n" + add; - result += " bad_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " bad_msg_seqno: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " error_code: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ bad_msg_notification" + result + "}"; - - case mtpc_bad_server_salt: - result += "\n" + add; - result += " bad_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " bad_msg_seqno: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " error_code: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " new_server_salt: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ bad_server_salt" + result + "}"; - - case mtpc_config: - result += "\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " test_mode: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " this_dc: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " dc_options: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chat_size_max: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " broadcast_size_max: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ config" + result + "}"; - - case mtpc_inputGeoPointEmpty: - result = " "; - return "{ inputGeoPointEmpty" + result + "}"; - - case mtpc_inputGeoPoint: - result += "\n" + add; - result += " lat: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; - result += " long: " + mtpTextSerialize(from, end, mtpc_double, level + 1) + ",\n" + add; - return "{ inputGeoPoint" + result + "}"; - - case mtpc_inputUserEmpty: - result = " "; - return "{ inputUserEmpty" + result + "}"; - - case mtpc_inputUserSelf: - result = " "; - return "{ inputUserSelf" + result + "}"; - - case mtpc_inputUserContact: - result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ inputUserContact" + result + "}"; - - case mtpc_inputUserForeign: - result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ inputUserForeign" + result + "}"; - - case mtpc_dialog: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " top_message: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " unread_count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " notify_settings: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ dialog" + result + "}"; - - case mtpc_importedContact: - result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " client_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ importedContact" + result + "}"; - - case mtpc_dcOption: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " hostname: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " ip_address: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " port: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ dcOption" + result + "}"; + return "{ geochats_statedMessage" + result + "}"; case mtpc_updateNewMessage: result += "\n" + add; @@ -23703,191 +23801,138 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " layer: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; return "{ decryptedMessageActionNotifyLayer" + result + "}"; - case mtpc_peerNotifySettingsEmpty: - result = " "; - return "{ peerNotifySettingsEmpty" + result + "}"; - - case mtpc_peerNotifySettings: - result += "\n" + add; - result += " mute_until: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " sound: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " show_previews: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " events_mask: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ peerNotifySettings" + result + "}"; - - case mtpc_userEmpty: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ userEmpty" + result + "}"; - - case mtpc_userSelf: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " phone: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " status: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " inactive: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ userSelf" + result + "}"; - - case mtpc_userContact: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " phone: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " status: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ userContact" + result + "}"; - - case mtpc_userRequest: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " phone: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " status: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ userRequest" + result + "}"; - - case mtpc_userForeign: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " status: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ userForeign" + result + "}"; - - case mtpc_userDeleted: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " first_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ userDeleted" + result + "}"; - - case mtpc_contacts_suggested: - result += "\n" + add; - result += " results: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contacts_suggested" + result + "}"; - - case mtpc_auth_authorization: - result += "\n" + add; - result += " expires: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " user: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ auth_authorization" + result + "}"; - - case mtpc_messages_chat: - result += "\n" + add; - result += " chat: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_chat" + result + "}"; - - case mtpc_auth_sentCode: - result += "\n" + add; - result += " phone_registered: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " phone_code_hash: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " send_call_timeout: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " is_password: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ auth_sentCode" + result + "}"; - - case mtpc_audioEmpty: + case mtpc_videoEmpty: result += "\n" + add; result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ audioEmpty" + result + "}"; + return "{ videoEmpty" + result + "}"; - case mtpc_audio: + case mtpc_video: result += "\n" + add; result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " caption: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; result += " duration: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; result += " mime_type: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; result += " size: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " thumb: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ audio" + result + "}"; + result += " w: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " h: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ video" + result + "}"; - case mtpc_messages_statedMessages: + case mtpc_contacts_found: result += "\n" + add; - result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " results: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_statedMessages" + result + "}"; + return "{ contacts_found" + result + "}"; - case mtpc_messages_statedMessagesLinks: + case mtpc_auth_checkedPhone: result += "\n" + add; - result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " links: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_statedMessagesLinks" + result + "}"; + result += " phone_registered: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " phone_invited: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ auth_checkedPhone" + result + "}"; - case mtpc_contactBlocked: + case mtpc_messageActionEmpty: + result = " "; + return "{ messageActionEmpty" + result + "}"; + + case mtpc_messageActionChatCreate: + result += "\n" + add; + result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_int) + ",\n" + add; + return "{ messageActionChatCreate" + result + "}"; + + case mtpc_messageActionChatEditTitle: + result += "\n" + add; + result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ messageActionChatEditTitle" + result + "}"; + + case mtpc_messageActionChatEditPhoto: + result += "\n" + add; + result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messageActionChatEditPhoto" + result + "}"; + + case mtpc_messageActionChatDeletePhoto: + result = " "; + return "{ messageActionChatDeletePhoto" + result + "}"; + + case mtpc_messageActionChatAddUser: result += "\n" + add; result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ contactBlocked" + result + "}"; + return "{ messageActionChatAddUser" + result + "}"; - case mtpc_storage_fileUnknown: - result = " "; - return "{ storage_fileUnknown" + result + "}"; - - case mtpc_storage_fileJpeg: - result = " "; - return "{ storage_fileJpeg" + result + "}"; - - case mtpc_storage_fileGif: - result = " "; - return "{ storage_fileGif" + result + "}"; - - case mtpc_storage_filePng: - result = " "; - return "{ storage_filePng" + result + "}"; - - case mtpc_storage_filePdf: - result = " "; - return "{ storage_filePdf" + result + "}"; - - case mtpc_storage_fileMp3: - result = " "; - return "{ storage_fileMp3" + result + "}"; - - case mtpc_storage_fileMov: - result = " "; - return "{ storage_fileMov" + result + "}"; - - case mtpc_storage_filePartial: - result = " "; - return "{ storage_filePartial" + result + "}"; - - case mtpc_storage_fileMp4: - result = " "; - return "{ storage_fileMp4" + result + "}"; - - case mtpc_storage_fileWebp: - result = " "; - return "{ storage_fileWebp" + result + "}"; - - case mtpc_help_inviteText: + case mtpc_messageActionChatDeleteUser: result += "\n" + add; - result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ help_inviteText" + result + "}"; + result += " user_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messageActionChatDeleteUser" + result + "}"; - case mtpc_chatLocated: + case mtpc_messageActionGeoChatCreate: result += "\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " distance: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ chatLocated" + result + "}"; + result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " address: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ messageActionGeoChatCreate" + result + "}"; + + case mtpc_messageActionGeoChatCheckin: + result = " "; + return "{ messageActionGeoChatCheckin" + result + "}"; + + case mtpc_messages_dialogs: + result += "\n" + add; + result += " dialogs: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_dialogs" + result + "}"; + + case mtpc_messages_dialogsSlice: + result += "\n" + add; + result += " count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " dialogs: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_dialogsSlice" + result + "}"; + + case mtpc_contacts_contacts: + result += "\n" + add; + result += " contacts: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ contacts_contacts" + result + "}"; + + case mtpc_contacts_contactsNotModified: + result = " "; + return "{ contacts_contactsNotModified" + result + "}"; + + case mtpc_geochats_located: + result += "\n" + add; + result += " results: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " messages: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " chats: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " users: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ geochats_located" + result + "}"; + + case mtpc_pong: + result += "\n" + add; + result += " msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " ping_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ pong" + result + "}"; + + case mtpc_bad_msg_notification: + result += "\n" + add; + result += " bad_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " bad_msg_seqno: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " error_code: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ bad_msg_notification" + result + "}"; + + case mtpc_bad_server_salt: + result += "\n" + add; + result += " bad_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " bad_msg_seqno: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " error_code: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " new_server_salt: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ bad_server_salt" + result + "}"; case mtpc_contact: result += "\n" + add; @@ -23895,60 +23940,38 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " mutual: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; return "{ contact" + result + "}"; - case mtpc_decryptedMessageLayer: + case mtpc_messages_receivedQueue: result += "\n" + add; - result += " layer: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " message: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ decryptedMessageLayer" + result + "}"; + result += " max_qts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_receivedQueue" + result + "}"; - case mtpc_updates_state: + case mtpc_set_client_DH_params: result += "\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " qts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " seq: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " unread_count: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ updates_state" + result + "}"; + result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " encrypted_data: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ set_client_DH_params" + result + "}"; - case mtpc_encryptedFileEmpty: + case mtpc_help_getSupport: result = " "; - return "{ encryptedFileEmpty" + result + "}"; + return "{ help_getSupport" + result + "}"; - case mtpc_encryptedFile: + case mtpc_auth_sendCode: result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " access_hash: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " size: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ encryptedFile" + result + "}"; + result += " phone_number: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " sms_type: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " api_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " api_hash: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " lang_code: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ auth_sendCode" + result + "}"; - case mtpc_msgs_all_info: + case mtpc_geochats_getRecents: result += "\n" + add; - result += " msg_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; - result += " info: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ msgs_all_info" + result + "}"; - - case mtpc_photos_updateProfilePhoto: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " crop: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ photos_updateProfilePhoto" + result + "}"; - - case mtpc_messages_getMessages: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_int) + ",\n" + add; - return "{ messages_getMessages" + result + "}"; - - case mtpc_messages_getHistory: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_getHistory" + result + "}"; + return "{ geochats_getRecents" + result + "}"; - case mtpc_messages_search: + case mtpc_geochats_search: result += "\n" + add; result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; result += " q: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; @@ -23958,23 +23981,20 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_search" + result + "}"; + return "{ geochats_search" + result + "}"; - case mtpc_set_client_DH_params: + case mtpc_geochats_getHistory: result += "\n" + add; - result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " encrypted_data: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ set_client_DH_params" + result + "}"; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ geochats_getHistory" + result + "}"; - case mtpc_contacts_getStatuses: - result = " "; - return "{ contacts_getStatuses" + result + "}"; - - case mtpc_auth_checkPhone: + case mtpc_get_future_salts: result += "\n" + add; - result += " phone_number: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ auth_checkPhone" + result + "}"; + result += " num: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ get_future_salts" + result + "}"; case mtpc_help_getAppUpdate: result += "\n" + add; @@ -23984,99 +24004,14 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " lang_code: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; return "{ help_getAppUpdate" + result + "}"; - case mtpc_updates_getDifference: - result += "\n" + add; - result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " qts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ updates_getDifference" + result + "}"; - case mtpc_help_getInviteText: result += "\n" + add; result += " lang_code: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; return "{ help_getInviteText" + result + "}"; - case mtpc_users_getFullUser: - result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ users_getFullUser" + result + "}"; - - case mtpc_updates_getState: + case mtpc_help_getNearestDc: result = " "; - return "{ updates_getState" + result + "}"; - - case mtpc_contacts_getContacts: - result += "\n" + add; - result += " hash: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ contacts_getContacts" + result + "}"; - - case mtpc_geochats_checkin: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ geochats_checkin" + result + "}"; - - case mtpc_geochats_editChatTitle: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " address: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ geochats_editChatTitle" + result + "}"; - - case mtpc_geochats_editChatPhoto: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ geochats_editChatPhoto" + result + "}"; - - case mtpc_geochats_sendMessage: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ geochats_sendMessage" + result + "}"; - - case mtpc_geochats_sendMedia: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " media: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ geochats_sendMedia" + result + "}"; - - case mtpc_geochats_createGeoChat: - result += "\n" + add; - result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " geo_point: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " address: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " venue: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ geochats_createGeoChat" + result + "}"; - - case mtpc_ping: - result += "\n" + add; - result += " ping_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ ping" + result + "}"; - - case mtpc_ping_delay_disconnect: - result += "\n" + add; - result += " ping_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " disconnect_delay: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ ping_delay_disconnect" + result + "}"; - - case mtpc_help_getSupport: - result = " "; - return "{ help_getSupport" + result + "}"; - - case mtpc_messages_readHistory: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_readHistory" + result + "}"; - - case mtpc_messages_deleteHistory: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_deleteHistory" + result + "}"; + return "{ help_getNearestDc" + result + "}"; case mtpc_messages_deleteMessages: result += "\n" + add; @@ -24093,15 +24028,45 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; return "{ messages_receivedMessages" + result + "}"; - case mtpc_users_getUsers: + case mtpc_contacts_getBlocked: + result += "\n" + add; + result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ contacts_getBlocked" + result + "}"; + + case mtpc_messages_getFullChat: + result += "\n" + add; + result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_getFullChat" + result + "}"; + + case mtpc_geochats_getFullChat: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ geochats_getFullChat" + result + "}"; + + case mtpc_messages_getDhConfig: + result += "\n" + add; + result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " random_length: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_getDhConfig" + result + "}"; + + case mtpc_messages_forwardMessages: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " id: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_int) + ",\n" + add; + return "{ messages_forwardMessages" + result + "}"; + + case mtpc_messages_sendBroadcast: + result += "\n" + add; + result += " contacts: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " media: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ messages_sendBroadcast" + result + "}"; + + case mtpc_users_getFullUser: result += "\n" + add; result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ users_getUsers" + result + "}"; - - case mtpc_get_future_salts: - result += "\n" + add; - result += " num: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ get_future_salts" + result + "}"; + return "{ users_getFullUser" + result + "}"; case mtpc_photos_getUserPhotos: result += "\n" + add; @@ -24111,6 +24076,36 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; return "{ photos_getUserPhotos" + result + "}"; + case mtpc_photos_uploadProfilePhoto: + result += "\n" + add; + result += " file: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " caption: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " geo_point: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " crop: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ photos_uploadProfilePhoto" + result + "}"; + + case mtpc_updates_getState: + result = " "; + return "{ updates_getState" + result + "}"; + + case mtpc_photos_updateProfilePhoto: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " crop: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ photos_updateProfilePhoto" + result + "}"; + + case mtpc_messages_getDialogs: + result += "\n" + add; + result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_getDialogs" + result + "}"; + + case mtpc_users_getUsers: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ users_getUsers" + result + "}"; + case mtpc_register_saveDeveloperInfo: result += "\n" + add; result += " name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; @@ -24236,59 +24231,9 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; return "{ upload_saveBigFilePart" + result + "}"; - case mtpc_req_pq: - result += "\n" + add; - result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - return "{ req_pq" + result + "}"; - - case mtpc_auth_exportAuthorization: - result += "\n" + add; - result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ auth_exportAuthorization" + result + "}"; - - case mtpc_contacts_importContacts: - result += "\n" + add; - result += " contacts: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " replace: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ contacts_importContacts" + result + "}"; - - case mtpc_rpc_drop_answer: - result += "\n" + add; - result += " req_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ rpc_drop_answer" + result + "}"; - - case mtpc_help_getConfig: + case mtpc_account_getWallPapers: result = " "; - return "{ help_getConfig" + result + "}"; - - case mtpc_help_getNearestDc: - result = " "; - return "{ help_getNearestDc" + result + "}"; - - case mtpc_messages_getDialogs: - result += "\n" + add; - result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_getDialogs" + result + "}"; - - case mtpc_account_getNotifySettings: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ account_getNotifySettings" + result + "}"; - - case mtpc_geochats_getLocated: - result += "\n" + add; - result += " geo_point: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " radius: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ geochats_getLocated" + result + "}"; - - case mtpc_messages_getDhConfig: - result += "\n" + add; - result += " version: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " random_length: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_getDhConfig" + result + "}"; + return "{ account_getWallPapers" + result + "}"; case mtpc_account_updateProfile: result += "\n" + add; @@ -24296,30 +24241,10 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " last_name: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; return "{ account_updateProfile" + result + "}"; - case mtpc_messages_getFullChat: - result += "\n" + add; - result += " chat_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_getFullChat" + result + "}"; - - case mtpc_geochats_getFullChat: + case mtpc_account_getNotifySettings: result += "\n" + add; result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ geochats_getFullChat" + result + "}"; - - case mtpc_req_DH_params: - result += "\n" + add; - result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; - result += " p: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " q: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " public_key_fingerprint: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " encrypted_data: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ req_DH_params" + result + "}"; - - case mtpc_contacts_getSuggested: - result += "\n" + add; - result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ contacts_getSuggested" + result + "}"; + return "{ account_getNotifySettings" + result + "}"; case mtpc_auth_signUp: result += "\n" + add; @@ -24343,54 +24268,6 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " bytes: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; return "{ auth_importAuthorization" + result + "}"; - case mtpc_upload_getFile: - result += "\n" + add; - result += " location: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ upload_getFile" + result + "}"; - - case mtpc_photos_uploadProfilePhoto: - result += "\n" + add; - result += " file: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " caption: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " geo_point: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " crop: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ photos_uploadProfilePhoto" + result + "}"; - - case mtpc_auth_sendCode: - result += "\n" + add; - result += " phone_number: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " sms_type: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " api_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " api_hash: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " lang_code: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - return "{ auth_sendCode" + result + "}"; - - case mtpc_messages_forwardMessages: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " id: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_int) + ",\n" + add; - return "{ messages_forwardMessages" + result + "}"; - - case mtpc_messages_sendBroadcast: - result += "\n" + add; - result += " contacts: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " media: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ messages_sendBroadcast" + result + "}"; - - case mtpc_messages_receivedQueue: - result += "\n" + add; - result += " max_qts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ messages_receivedQueue" + result + "}"; - - case mtpc_contacts_search: - result += "\n" + add; - result += " q: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ contacts_search" + result + "}"; - case mtpc_messages_sendMessage: result += "\n" + add; result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; @@ -24398,40 +24275,35 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; return "{ messages_sendMessage" + result + "}"; - case mtpc_geochats_getRecents: - result += "\n" + add; - result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ geochats_getRecents" + result + "}"; - - case mtpc_geochats_search: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " q: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " filter: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " min_date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " max_date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ geochats_search" + result + "}"; - - case mtpc_geochats_getHistory: - result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ geochats_getHistory" + result + "}"; - - case mtpc_destroy_session: - result += "\n" + add; - result += " session_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ destroy_session" + result + "}"; - - case mtpc_account_getWallPapers: + case mtpc_help_getConfig: result = " "; - return "{ account_getWallPapers" + result + "}"; + return "{ help_getConfig" + result + "}"; + + case mtpc_req_DH_params: + result += "\n" + add; + result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " server_nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + result += " p: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " q: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " public_key_fingerprint: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " encrypted_data: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ req_DH_params" + result + "}"; + + case mtpc_messages_getChats: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_int) + ",\n" + add; + return "{ messages_getChats" + result + "}"; + + case mtpc_contacts_importContacts: + result += "\n" + add; + result += " contacts: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " replace: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ contacts_importContacts" + result + "}"; + + case mtpc_rpc_drop_answer: + result += "\n" + add; + result += " req_msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ rpc_drop_answer" + result + "}"; case mtpc_messages_sendEncrypted: result += "\n" + add; @@ -24455,43 +24327,163 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " data: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; return "{ messages_sendEncryptedService" + result + "}"; - case mtpc_contacts_getBlocked: + case mtpc_messages_readHistory: result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_readHistory" + result + "}"; + + case mtpc_messages_deleteHistory: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_deleteHistory" + result + "}"; + + case mtpc_messages_getMessages: + result += "\n" + add; + result += " id: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_int) + ",\n" + add; + return "{ messages_getMessages" + result + "}"; + + case mtpc_messages_getHistory: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - return "{ contacts_getBlocked" + result + "}"; + return "{ messages_getHistory" + result + "}"; + + case mtpc_messages_search: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " q: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " filter: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " min_date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " max_date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " max_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ messages_search" + result + "}"; + + case mtpc_updates_getDifference: + result += "\n" + add; + result += " pts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " date: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " qts: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ updates_getDifference" + result + "}"; + + case mtpc_contacts_getStatuses: + result = " "; + return "{ contacts_getStatuses" + result + "}"; + + case mtpc_auth_exportAuthorization: + result += "\n" + add; + result += " dc_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ auth_exportAuthorization" + result + "}"; case mtpc_contacts_deleteContact: result += "\n" + add; result += " id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; return "{ contacts_deleteContact" + result + "}"; - case mtpc_invokeAfterMsg: + case mtpc_destroy_session: result += "\n" + add; - result += " msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - result += " query: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ invokeAfterMsg" + result + "}"; + result += " session_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ destroy_session" + result + "}"; - case mtpc_invokeAfterMsgs: + case mtpc_upload_getFile: result += "\n" + add; - result += " msg_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; - result += " query: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ invokeAfterMsgs" + result + "}"; + result += " location: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " offset: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ upload_getFile" + result + "}"; - case mtpc_initConnection: + case mtpc_messages_requestEncryption: result += "\n" + add; - result += " api_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " device_model: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " system_version: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " app_version: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " lang_code: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; - result += " query: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - return "{ initConnection" + result + "}"; + result += " user_id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " random_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " g_a: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + return "{ messages_requestEncryption" + result + "}"; - case mtpc_messages_getChats: + case mtpc_messages_acceptEncryption: result += "\n" + add; - result += " id: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_int) + ",\n" + add; - return "{ messages_getChats" + result + "}"; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " g_b: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; + result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ messages_acceptEncryption" + result + "}"; + + case mtpc_contacts_getSuggested: + result += "\n" + add; + result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ contacts_getSuggested" + result + "}"; + + case mtpc_geochats_checkin: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ geochats_checkin" + result + "}"; + + case mtpc_geochats_editChatTitle: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " address: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ geochats_editChatTitle" + result + "}"; + + case mtpc_geochats_editChatPhoto: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " photo: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ geochats_editChatPhoto" + result + "}"; + + case mtpc_geochats_sendMessage: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " message: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ geochats_sendMessage" + result + "}"; + + case mtpc_geochats_sendMedia: + result += "\n" + add; + result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " media: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ geochats_sendMedia" + result + "}"; + + case mtpc_geochats_createGeoChat: + result += "\n" + add; + result += " title: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " geo_point: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " address: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " venue: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ geochats_createGeoChat" + result + "}"; + + case mtpc_contacts_search: + result += "\n" + add; + result += " q: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ contacts_search" + result + "}"; + + case mtpc_auth_checkPhone: + result += "\n" + add; + result += " phone_number: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ auth_checkPhone" + result + "}"; + + case mtpc_contacts_getContacts: + result += "\n" + add; + result += " hash: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + return "{ contacts_getContacts" + result + "}"; + + case mtpc_geochats_getLocated: + result += "\n" + add; + result += " geo_point: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + result += " radius: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " limit: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ geochats_getLocated" + result + "}"; + + case mtpc_req_pq: + result += "\n" + add; + result += " nonce: " + mtpTextSerialize(from, end, mtpc_int128, level + 1) + ",\n" + add; + return "{ req_pq" + result + "}"; case mtpc_messages_sendMedia: result += "\n" + add; @@ -24538,19 +24530,38 @@ inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end, mtpP result += " random_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; return "{ messages_forwardMessage" + result + "}"; - case mtpc_messages_requestEncryption: + case mtpc_ping: result += "\n" + add; - result += " user_id: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " random_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; - result += " g_a: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - return "{ messages_requestEncryption" + result + "}"; + result += " ping_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + return "{ ping" + result + "}"; - case mtpc_messages_acceptEncryption: + case mtpc_ping_delay_disconnect: result += "\n" + add; - result += " peer: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; - result += " g_b: " + mtpTextSerialize(from, end, mtpc_bytes, level + 1) + ",\n" + add; - result += " key_fingerprint: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; - return "{ messages_acceptEncryption" + result + "}"; + result += " ping_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " disconnect_delay: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + return "{ ping_delay_disconnect" + result + "}"; + + case mtpc_invokeAfterMsg: + result += "\n" + add; + result += " msg_id: " + mtpTextSerialize(from, end, mtpc_long, level + 1) + ",\n" + add; + result += " query: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ invokeAfterMsg" + result + "}"; + + case mtpc_invokeAfterMsgs: + result += "\n" + add; + result += " msg_ids: " + mtpTextSerialize(from, end, 0, level + 1, mtpc_long) + ",\n" + add; + result += " query: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ invokeAfterMsgs" + result + "}"; + + case mtpc_initConnection: + result += "\n" + add; + result += " api_id: " + mtpTextSerialize(from, end, mtpc_int, level + 1) + ",\n" + add; + result += " device_model: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " system_version: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " app_version: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " lang_code: " + mtpTextSerialize(from, end, mtpc_string, level + 1) + ",\n" + add; + result += " query: " + mtpTextSerialize(from, end, 0, level + 1) + ",\n" + add; + return "{ initConnection" + result + "}"; } return mtpTextSerializeCore(from, end, cons, level, vcons); diff --git a/Telegram/SourceFiles/mtproto/scheme.tl b/Telegram/SourceFiles/mtproto/scheme.tl index 8b84bcf13..5afcae92d 100644 --- a/Telegram/SourceFiles/mtproto/scheme.tl +++ b/Telegram/SourceFiles/mtproto/scheme.tl @@ -30,6 +30,7 @@ //invokeWithLayer12#dda60d3c query:!X = X; //invokeWithLayer13#427c8ea2 query:!X = X; //invokeWithLayer14#2b9b08fa query:!X = X; +//invokeWithLayer15#b4418b64 query:!X = X; /////////////////////////////// /// Authorization key creation @@ -123,6 +124,7 @@ register.saveDeveloperInfo#9a5f6e95 name:string email:string phone_number:string ---types--- + inputPeerEmpty#7f3b18ea = InputPeer; inputPeerSelf#7da07ec9 = InputPeer; inputPeerContact#1023dbe8 user_id:int = InputPeer; @@ -340,6 +342,7 @@ inputMessagesFilterPhotos#9609a51c = MessagesFilter; inputMessagesFilterVideo#9fc00e65 = MessagesFilter; inputMessagesFilterPhotoVideo#56e9f0e4 = MessagesFilter; inputMessagesFilterDocument#9eddf188 = MessagesFilter; +inputMessagesFilterAudio#cfc87522 = MessagesFilter; updateNewMessage#13abdb3 message:Message pts:int = Update; updateMessageID#4e90bfd6 id:int random_id:long = Update; diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index 15c7bb823..faaadeb6a 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -171,7 +171,7 @@ void ProfileInner::onClearHistory() { } void ProfileInner::onClearHistorySure() { - App::main()->showPeer(0, true); + App::main()->showPeer(0, 0, true); App::wnd()->hideLayer(); App::main()->clearHistory(_peer); } @@ -546,7 +546,7 @@ void ProfileInner::onKickConfirm() { void ProfileInner::keyPressEvent(QKeyEvent *e) { if (e->key() == Qt::Key_Escape) { - App::main()->showPeer(0, true); + App::main()->showPeer(0, 0, true); } } diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index 45fa01185..93660eeb0 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -1393,12 +1393,12 @@ PsMainWindow::~PsMainWindow() { } void PsMainWindow::psNotify(History *history, MsgId msgId) { - if (App::quiting() || !history->notifyFrom) return; + if (App::quiting() || !history->currentNotification()) return; bool haveSetting = (history->peer->notify != UnknownNotifySettings); if (haveSetting) { if (history->peer->notify != EmptyNotifySettings && history->peer->notify->mute > unixtime()) { - history->clearNotifyFrom(); + history->clearNotifications(); return; } } else { @@ -1454,7 +1454,7 @@ void PsMainWindow::psClearNotify(History *history) { (*i)->unlinkHistory(); } for (NotifyWhenMaps::const_iterator i = notifyWhenMaps.cbegin(), e = notifyWhenMaps.cend(); i != e; ++i) { - i.key()->clearNotifyFrom(); + i.key()->clearNotifications(); } notifyWaiters.clear(); notifySettingWaiters.clear(); @@ -1588,24 +1588,24 @@ void PsMainWindow::psShowNextNotify(PsNotifyWindow *remove) { NotifyWaiters::iterator notifyWaiter; for (NotifyWaiters::iterator i = notifyWaiters.begin(); i != notifyWaiters.end(); ++i) { History *history = i.key(); - if (history->notifyFrom && history->notifyFrom->id != i.value().msg) { + if (history->currentNotification() && history->currentNotification()->id != i.value().msg) { NotifyWhenMaps::iterator j = notifyWhenMaps.find(history); if (j == notifyWhenMaps.end()) { - history->clearNotifyFrom(); + history->clearNotifications(); i = notifyWaiters.erase(i); continue; } do { - NotifyWhenMap::const_iterator k = j.value().constFind(history->notifyFrom->id); + NotifyWhenMap::const_iterator k = j.value().constFind(history->currentNotification()->id); if (k != j.value().cend()) { i.value().msg = k.key(); i.value().when = k.value(); break; } - history->getNextNotifyFrom(); - } while (history->notifyFrom); + history->skipNotification(); + } while (history->currentNotification()); } - if (!history->notifyFrom) { + if (!history->currentNotification()) { notifyWhenMaps.remove(history); i = notifyWaiters.erase(i); continue; @@ -1613,7 +1613,7 @@ void PsMainWindow::psShowNextNotify(PsNotifyWindow *remove) { uint64 when = i.value().when; if (!notifyItem || next > when) { next = when; - notifyItem = history->notifyFrom; + notifyItem = history->currentNotification(); notifyWaiter = i; } } @@ -1631,25 +1631,25 @@ void PsMainWindow::psShowNextNotify(PsNotifyWindow *remove) { uint64 ms = getms(); History *history = notifyItem->history(); - history->getNextNotifyFrom(); + history->skipNotification(); NotifyWhenMaps::iterator j = notifyWhenMaps.find(history); - if (j == notifyWhenMaps.end() || !history->notifyFrom) { - history->clearNotifyFrom(); + if (j == notifyWhenMaps.end() || !history->currentNotification()) { + history->clearNotifications(); notifyWaiters.erase(notifyWaiter); if (j != notifyWhenMaps.end()) notifyWhenMaps.erase(j); continue; } j.value().remove(notifyItem->id); do { - NotifyWhenMap::const_iterator k = j.value().constFind(history->notifyFrom->id); + NotifyWhenMap::const_iterator k = j.value().constFind(history->currentNotification()->id); if (k != j.value().cend()) { notifyWaiter.value().msg = k.key(); notifyWaiter.value().when = k.value(); break; } - history->getNextNotifyFrom(); - } while (history->notifyFrom); - if (!history->notifyFrom) { + history->skipNotification(); + } while (history->currentNotification()); + if (!history->currentNotification()) { notifyWaiters.erase(notifyWaiter); notifyWhenMaps.erase(j); continue; @@ -1829,7 +1829,7 @@ void PsNotifyWindow::mousePressEvent(QMouseEvent *e) { } else if (history) { App::wnd()->showFromTray(); App::wnd()->hideSettings(); - App::main()->showPeer(history->peer->id, false, true); + App::main()->showPeer(history->peer->id, 0, false, true); e->ignore(); } } diff --git a/Telegram/SourceFiles/stdafx.h b/Telegram/SourceFiles/stdafx.h index 6ac7aec17..05f1ab58d 100644 --- a/Telegram/SourceFiles/stdafx.h +++ b/Telegram/SourceFiles/stdafx.h @@ -56,6 +56,7 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include "gui/flatinput.h" #include "gui/flattextarea.h" #include "gui/flatbutton.h" +#include "gui/switcher.h" #include "gui/scrollarea.h" #include "gui/images.h" #include "gui/text.h" diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index f817ae7c4225cbdce0cfb4fbb60f353ba6e49c66..722d4c90c377bd00d93a305f8e9016d5bbbea4fe 100644 GIT binary patch delta 42 vcmdm{y-jMgG?BT(!uuk_>$exc17{C;cz5{3+G delta 42 vcmdm{y-jMgG?BT(!uuk_>$exc17{C;cz5yT8* diff --git a/Telegram/Telegram.vcxproj b/Telegram/Telegram.vcxproj index 735b600e7..7becdb7db 100644 --- a/Telegram/Telegram.vcxproj +++ b/Telegram/Telegram.vcxproj @@ -314,6 +314,10 @@ true true + + true + true + true true @@ -498,6 +502,10 @@ true true + + true + true + true true @@ -691,6 +699,10 @@ true true + + true + true + true true @@ -740,6 +752,7 @@ + @@ -1213,6 +1226,20 @@ $(QTDIR)\bin\moc.exe;%(FullPath) + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing switcher.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing switcher.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing switcher.h... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + diff --git a/Telegram/Telegram.vcxproj.filters b/Telegram/Telegram.vcxproj.filters index afe3515a2..3ac3f30a8 100644 --- a/Telegram/Telegram.vcxproj.filters +++ b/Telegram/Telegram.vcxproj.filters @@ -656,6 +656,18 @@ Generated Files\Release + + gui + + + Generated Files\Deploy + + + Generated Files\Debug + + + Generated Files\Release + @@ -891,6 +903,9 @@ gui + + gui + From 1167117ee0a07a4e587f7b3c310a0ad035a2d470 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 6 Jul 2014 07:32:21 +0400 Subject: [PATCH 2/4] search merged to os x version, fixed some retina render, custom notifies code moved to window module --- Telegram/Resources/style.txt | 3 + Telegram/SourceFiles/app.cpp | 4 +- Telegram/SourceFiles/application.cpp | 10 + Telegram/SourceFiles/boxes/addcontactbox.cpp | 3 +- .../SourceFiles/boxes/addparticipantbox.cpp | 3 +- Telegram/SourceFiles/boxes/confirmbox.cpp | 3 +- Telegram/SourceFiles/boxes/connectionbox.cpp | 3 +- Telegram/SourceFiles/boxes/contactsbox.cpp | 3 +- .../SourceFiles/boxes/downloadpathbox.cpp | 3 +- Telegram/SourceFiles/boxes/newgroupbox.cpp | 6 +- Telegram/SourceFiles/boxes/photocropbox.cpp | 3 +- Telegram/SourceFiles/boxes/photosendbox.cpp | 3 +- Telegram/SourceFiles/config.h | 2 +- Telegram/SourceFiles/dialogswidget.cpp | 7 +- Telegram/SourceFiles/dropdown.cpp | 6 +- Telegram/SourceFiles/gui/boxshadow.cpp | 8 +- Telegram/SourceFiles/gui/countryinput.cpp | 3 +- Telegram/SourceFiles/gui/flatbutton.cpp | 3 +- Telegram/SourceFiles/gui/flatinput.cpp | 9 +- Telegram/SourceFiles/gui/switcher.cpp | 8 +- Telegram/SourceFiles/history.cpp | 7 +- Telegram/SourceFiles/historywidget.cpp | 13 +- Telegram/SourceFiles/logs.cpp | 2 +- Telegram/SourceFiles/mainwidget.cpp | 9 +- .../SourceFiles/mtproto/mtpFileLoader.cpp | 2 +- Telegram/SourceFiles/mtproto/mtpRPC.h | 2 +- Telegram/SourceFiles/pspecific_mac.cpp | 502 +--- Telegram/SourceFiles/pspecific_mac.h | 96 +- Telegram/SourceFiles/pspecific_mac.mm | 2466 ----------------- Telegram/SourceFiles/pspecific_wnd.cpp | 499 +--- Telegram/SourceFiles/pspecific_wnd.h | 89 +- Telegram/SourceFiles/settings.cpp | 5 + Telegram/SourceFiles/settingswidget.cpp | 8 +- Telegram/SourceFiles/window.cpp | 501 ++++ Telegram/SourceFiles/window.h | 88 + Telegram/Telegram.plist | 2 +- Telegram/Telegram.xcodeproj/project.pbxproj | 18 +- Telegram/Telegram.xcodeproj/qt_preprocess.mak | 20 +- 38 files changed, 743 insertions(+), 3679 deletions(-) delete mode 100644 Telegram/SourceFiles/pspecific_mac.mm diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 69abf56f4..f95169460 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -30,6 +30,8 @@ counterBG: #b42f35; counterMuteBG: #777; counterColor: #fff; +lineWidth: 1px; + transparent: rgba(255, 255, 255, 0); white: rgba(255, 255, 255, 255); black: rgba(0, 0, 0, 255); @@ -1000,6 +1002,7 @@ btnCancelSearch: iconedButton(btnNewGroup) { notifyBG: white; notifyBorder: #f1f1f1; +notifyBorderWidth: 1px; notifySlowHide: 4000; notifyPhotoSize: 62px; notifyPhotoPos: point(9px, 9px); diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index a600950d7..517a53bf1 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -113,7 +113,7 @@ namespace App { Window *w(wnd()); if (w) { w->tempDirDelete(); - w->psClearNotifyFast(); + w->notifyClearFast(); w->setupIntro(true); } MainWidget *m(main()); @@ -1828,7 +1828,7 @@ namespace App { setQuiting(); if (wnd()) { - wnd()->psClearNotifyFast(); + wnd()->notifyClearFast(); } if (app()) { app()->quit(); diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 395b23c56..7be317a70 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -85,6 +85,16 @@ Application::Application(int &argc, char **argv) : PsApplication(argc, argv), QFontDatabase::addApplicationFont(qsl(":/gui/art/OpenSans-Bold.ttf")); QFontDatabase::addApplicationFont(qsl(":/gui/art/OpenSans-Semibold.ttf")); + { + QImage img(800, 600, QImage::Format_ARGB32_Premultiplied); + QPainter p(&img); + QFont f; + f.setPixelSize(24); + f.setFamily("Open Sans Semibold"); + p.setFont(f); + p.drawText(0, 0, "t"); + } + float64 dpi = primaryScreen()->logicalDotsPerInch(); if (dpi <= 108) { // 0-96-108 cSetScreenScale(dbisOne); diff --git a/Telegram/SourceFiles/boxes/addcontactbox.cpp b/Telegram/SourceFiles/boxes/addcontactbox.cpp index 2ac12c875..5638554b2 100644 --- a/Telegram/SourceFiles/boxes/addcontactbox.cpp +++ b/Telegram/SourceFiles/boxes/addcontactbox.cpp @@ -179,8 +179,7 @@ void AddContactBox::paintEvent(QPaintEvent *e) { p.fillRect(0, size().height() - st::btnSelectCancel.height - st::scrollDef.bottomsh, _width, st::scrollDef.bottomsh, st::scrollDef.shColor->b); // paint button sep - p.setPen(st::btnSelectSep->p); - p.drawLine(st::btnSelectCancel.width, size().height() - st::btnSelectCancel.height, st::btnSelectCancel.width, size().height() - 1); + p.fillRect(st::btnSelectCancel.width, size().height() - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); // draw box title / text p.setPen(st::black->p); diff --git a/Telegram/SourceFiles/boxes/addparticipantbox.cpp b/Telegram/SourceFiles/boxes/addparticipantbox.cpp index 3253f76f0..5659c657c 100644 --- a/Telegram/SourceFiles/boxes/addparticipantbox.cpp +++ b/Telegram/SourceFiles/boxes/addparticipantbox.cpp @@ -587,8 +587,7 @@ void AddParticipantBox::paintEvent(QPaintEvent *e) { p.fillRect(0, st::participantFilter.height, _width, st::scrollDef.topsh, st::scrollDef.shColor->b); // paint button sep - p.setPen(st::btnSelectSep->p); - p.drawLine(st::btnSelectCancel.width, size().height() - st::btnSelectCancel.height, st::btnSelectCancel.width, size().height() - 1); + p.fillRect(st::btnSelectCancel.width, size().height() - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); // draw box title / text p.setPen(st::black->p); diff --git a/Telegram/SourceFiles/boxes/confirmbox.cpp b/Telegram/SourceFiles/boxes/confirmbox.cpp index e1dfdf6ef..3e0f91f90 100644 --- a/Telegram/SourceFiles/boxes/confirmbox.cpp +++ b/Telegram/SourceFiles/boxes/confirmbox.cpp @@ -82,8 +82,7 @@ void ConfirmBox::paintEvent(QPaintEvent *e) { p.fillRect(0, _height - st::btnSelectCancel.height - st::scrollDef.bottomsh, _width, st::scrollDef.bottomsh, st::scrollDef.shColor->b); // paint button sep - p.setPen(st::btnSelectSep->p); - p.drawLine(st::btnSelectCancel.width, _height - st::btnSelectCancel.height, st::btnSelectCancel.width, _height - 1); + p.fillRect(st::btnSelectCancel.width, _height - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); // draw box title / text p.setFont(st::boxFont->f); diff --git a/Telegram/SourceFiles/boxes/connectionbox.cpp b/Telegram/SourceFiles/boxes/connectionbox.cpp index 047270462..f34d8c63a 100644 --- a/Telegram/SourceFiles/boxes/connectionbox.cpp +++ b/Telegram/SourceFiles/boxes/connectionbox.cpp @@ -136,8 +136,7 @@ void ConnectionBox::paintEvent(QPaintEvent *e) { p.fillRect(0, _height - st::btnSelectCancel.height - st::scrollDef.bottomsh, _width, st::scrollDef.bottomsh, st::scrollDef.shColor->b); // paint button sep - p.setPen(st::btnSelectSep->p); - p.drawLine(st::btnSelectCancel.width, _height - st::btnSelectCancel.height, st::btnSelectCancel.width, _height - 1); + p.fillRect(st::btnSelectCancel.width, _height - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); // draw box title / text p.setFont(st::addContactTitleFont->f); diff --git a/Telegram/SourceFiles/boxes/contactsbox.cpp b/Telegram/SourceFiles/boxes/contactsbox.cpp index 94cb2b509..242903f11 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.cpp +++ b/Telegram/SourceFiles/boxes/contactsbox.cpp @@ -479,8 +479,7 @@ void ContactsBox::paintEvent(QPaintEvent *e) { p.fillRect(0, _addContact.height(), _width, st::scrollDef.topsh, st::scrollDef.shColor->b); // paint button sep - p.setPen(st::btnSelectSep->p); - p.drawLine(st::btnSelectCancel.width, size().height() - st::btnSelectCancel.height, st::btnSelectCancel.width, size().height() - 1); + p.fillRect(st::btnSelectCancel.width, size().height() - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); // draw box title / text p.setPen(st::black->p); diff --git a/Telegram/SourceFiles/boxes/downloadpathbox.cpp b/Telegram/SourceFiles/boxes/downloadpathbox.cpp index 0b5d76c19..018261873 100644 --- a/Telegram/SourceFiles/boxes/downloadpathbox.cpp +++ b/Telegram/SourceFiles/boxes/downloadpathbox.cpp @@ -109,8 +109,7 @@ void DownloadPathBox::paintEvent(QPaintEvent *e) { p.fillRect(0, _height - st::btnSelectCancel.height - st::scrollDef.bottomsh, _width, st::scrollDef.bottomsh, st::scrollDef.shColor->b); // paint button sep - p.setPen(st::btnSelectSep->p); - p.drawLine(st::btnSelectCancel.width, _height - st::btnSelectCancel.height, st::btnSelectCancel.width, _height - 1); + p.fillRect(st::btnSelectCancel.width, _height - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); // draw box title / text p.setFont(st::addContactTitleFont->f); diff --git a/Telegram/SourceFiles/boxes/newgroupbox.cpp b/Telegram/SourceFiles/boxes/newgroupbox.cpp index 4f994aeb0..a2822e94a 100644 --- a/Telegram/SourceFiles/boxes/newgroupbox.cpp +++ b/Telegram/SourceFiles/boxes/newgroupbox.cpp @@ -530,8 +530,7 @@ void NewGroupBox::paintEvent(QPaintEvent *e) { p.fillRect(0, st::participantFilter.height, _width, st::scrollDef.topsh, st::scrollDef.shColor->b); // paint button sep - p.setPen(st::btnSelectSep->p); - p.drawLine(st::btnSelectCancel.width, size().height() - st::btnSelectCancel.height, st::btnSelectCancel.width, size().height() - 1); + p.fillRect(st::btnSelectCancel.width, size().height() - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); // draw box title / text p.setPen(st::black->p); @@ -677,8 +676,7 @@ void CreateGroupBox::paintEvent(QPaintEvent *e) { p.fillRect(0, _height - st::btnSelectCancel.height - st::scrollDef.bottomsh, _width, st::scrollDef.bottomsh, st::scrollDef.shColor->b); // paint button sep - p.setPen(st::btnSelectSep->p); - p.drawLine(st::btnSelectCancel.width, _height - st::btnSelectCancel.height, st::btnSelectCancel.width, size().height() - 1); + p.fillRect(st::btnSelectCancel.width, _height - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); // draw box title / text p.setPen(st::black->p); diff --git a/Telegram/SourceFiles/boxes/photocropbox.cpp b/Telegram/SourceFiles/boxes/photocropbox.cpp index 8729aabd6..90bf787c1 100644 --- a/Telegram/SourceFiles/boxes/photocropbox.cpp +++ b/Telegram/SourceFiles/boxes/photocropbox.cpp @@ -218,8 +218,7 @@ void PhotoCropBox::paintEvent(QPaintEvent *e) { p.fillRect(0, _height - st::btnSelectCancel.height - st::scrollDef.bottomsh, _width, st::scrollDef.bottomsh, st::scrollDef.shColor->b); // paint button sep - p.setPen(st::btnSelectSep->p); - p.drawLine(st::btnSelectCancel.width, _height - st::btnSelectCancel.height, st::btnSelectCancel.width, _height - 1); + p.fillRect(st::btnSelectCancel.width, _height - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); p.setFont(st::boxFont->f); p.setPen(st::boxGrayTitle->p); diff --git a/Telegram/SourceFiles/boxes/photosendbox.cpp b/Telegram/SourceFiles/boxes/photosendbox.cpp index c31670d89..405e28068 100644 --- a/Telegram/SourceFiles/boxes/photosendbox.cpp +++ b/Telegram/SourceFiles/boxes/photosendbox.cpp @@ -91,8 +91,7 @@ void PhotoSendBox::paintEvent(QPaintEvent *e) { p.fillRect(0, _height - st::btnSelectCancel.height - st::scrollDef.bottomsh, _width, st::scrollDef.bottomsh, st::scrollDef.shColor->b); // paint button sep - p.setPen(st::btnSelectSep->p); - p.drawLine(st::btnSelectCancel.width, _height - st::btnSelectCancel.height, st::btnSelectCancel.width, _height - 1); + p.fillRect(st::btnSelectCancel.width, _height - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); p.setFont(st::boxFont->f); p.setPen(st::boxGrayTitle->p); diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 92168928a..52ebb0aae 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -171,7 +171,7 @@ enum { NoUpdatesTimeout = 180 * 1000, // if nothing is received in 3 min we reconnect MemoryForImageCache = 64 * 1024 * 1024, // after 64mb of unpacked images we try to clear some memory - NotifyWindows = 3, // 3 desktop notifies at the same time + NotifyWindowsCount = 3, // 3 desktop notifies at the same time NotifyWaitTimeout = 1200, // 1.2 seconds timeout before notification NotifySettingSaveTimeout = 1000, // wait 1 second before saving notify setting to server UpdateChunk = 100 * 1024, // 100kb parts when downloading the update diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index 655fc2d47..13802c6c6 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -1169,7 +1169,7 @@ void DialogsWidget::onFilterUpdate() { list.onFilterUpdate(filterText); DialogsListWidget::State s = list.state(); bool switcherVisible = (s != DialogsListWidget::DefaultState); - if (switcherVisible && _stateSwitcher.isHidden() || !switcherVisible && !_stateSwitcher.isHidden()) { + if ((switcherVisible && _stateSwitcher.isHidden()) || (!switcherVisible && !_stateSwitcher.isHidden())) { if (switcherVisible) { _stateSwitcher.show(); } else { @@ -1232,10 +1232,7 @@ void DialogsWidget::keyPressEvent(QKeyEvent *e) { void DialogsWidget::paintEvent(QPaintEvent *e) { QPainter p(this); if (_drawShadow) { - p.setPen(st::dlgShadowColor->p); - for (int i = 0, w = width() - st::dlgShadow; i < st::dlgShadow; ++i) { - p.drawLine(w + i, 0, w + i, height()); - } + p.fillRect(width() - st::dlgShadow, 0, st::dlgShadow, height(), st::dlgShadowColor->b); } } diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index 51c81c16a..a1b50545a 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -71,10 +71,8 @@ void Dropdown::paintEvent(QPaintEvent *e) { int32 top = st::dropdownPadding.top() + _buttons.front()->height(); p.setPen(st::dropdownBorderColor->p); for (int32 i = 1, s = _buttons.size(); i < s; ++i) { - for (int32 e = top + st::dropdownBorder; top < e; ++top) { - p.drawLine(st::dropdownPadding.left(), top, _width - st::dropdownPadding.right() - 1, top); - } - top += _buttons[i]->height(); + p.fillRect(st::dropdownPadding.left(), top, _width - st::dropdownPadding.left() - st::dropdownPadding.right(), st::dropdownBorder, st::dropdownBorderColor->b); + top += st::dropdownBorder + _buttons[i]->height(); } } } diff --git a/Telegram/SourceFiles/gui/boxshadow.cpp b/Telegram/SourceFiles/gui/boxshadow.cpp index 245c8e514..f90e06413 100644 --- a/Telegram/SourceFiles/gui/boxshadow.cpp +++ b/Telegram/SourceFiles/gui/boxshadow.cpp @@ -66,9 +66,9 @@ void BoxShadow::paint(QPainter &p, const QRect &box, const QPoint &shift, int32 if (left && bottom) p.drawPixmap(box.left() - _size + minus + shift.x(), box.bottom() - minus + 1 + shift.y(), _corners, 0, _size, _size, _size); for (int32 i = 1; i <= count; ++i) { p.setPen(_colors[i - 1]->p); - if (top) p.drawLine(box.left() + (left ? minus : 0) + shift.x(), box.top() - count + i + shift.y(), box.right() - (right ? minus : 0) + shift.x(), box.top() - count + i + shift.y()); - if (right) p.drawLine(box.right() + count - i + shift.x(), box.top() + (top ? minus : 0) + shift.y(), box.right() + count - i + shift.x(), box.bottom() - (bottom ? minus : 0) + shift.y()); - if (bottom) p.drawLine(box.right() - (right ? minus : 0) + shift.x(), box.bottom() + count - i + shift.y(), box.left() + (left ? minus : 0) + shift.x(), box.bottom() + count - i + shift.y()); - if (left) p.drawLine(box.left() - count + i + shift.x(), box.bottom() - (bottom ? minus : 0) + shift.y(), box.left() - count + i + shift.x(), box.top() + (top ? minus : 0) + shift.y()); + if (top) p.fillRect(box.left() + (left ? minus : 0) + shift.x(), box.top() - count + i + shift.y(), box.width() - (right ? minus : 0) - (left ? minus : 0), st::lineWidth, _colors[i - 1]->b); + if (right) p.fillRect(box.right() + count - i + shift.x(), box.top() + (top ? minus : 0) + shift.y(), st::lineWidth, box.height() - (bottom ? minus : 0) - (top ? minus : 0), _colors[i - 1]->b); + if (bottom) p.fillRect(box.left() + (left ? minus : 0) + shift.x(), box.bottom() + count - i + shift.y(), box.width() - (right ? minus : 0) - (left ? minus : 0), st::lineWidth, _colors[i - 1]->b); + if (left) p.fillRect(box.left() - count + i + shift.x(), box.top() + (top ? minus : 0) + shift.y(), st::lineWidth, box.height() - (bottom ? minus : 0) - (top ? minus : 0), _colors[i - 1]->b); } } diff --git a/Telegram/SourceFiles/gui/countryinput.cpp b/Telegram/SourceFiles/gui/countryinput.cpp index 45ad9de78..55870cc4a 100644 --- a/Telegram/SourceFiles/gui/countryinput.cpp +++ b/Telegram/SourceFiles/gui/countryinput.cpp @@ -492,8 +492,7 @@ void CountrySelect::paintEvent(QPaintEvent *e) { p.fillRect(_innerLeft, _innerTop + st::participantFilter.height, _innerWidth, st::scrollDef.topsh, st::scrollDef.shColor->b); // paint button sep - p.setPen(st::btnSelectSep->p); - p.drawLine(_innerLeft + st::btnSelectCancel.width, _innerTop + _innerHeight - st::btnSelectCancel.height, _innerLeft + st::btnSelectCancel.width, _innerTop + _innerHeight - 1); + p.fillRect(_innerLeft + st::btnSelectCancel.width, _innerTop + _innerHeight - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); // draw box title / text p.setPen(st::black->p); diff --git a/Telegram/SourceFiles/gui/flatbutton.cpp b/Telegram/SourceFiles/gui/flatbutton.cpp index 152cabf72..fb4c31281 100644 --- a/Telegram/SourceFiles/gui/flatbutton.cpp +++ b/Telegram/SourceFiles/gui/flatbutton.cpp @@ -101,8 +101,7 @@ BottomButton::BottomButton(QWidget *w, const QString &t, const style::flatButton void BottomButton::paintEvent(QPaintEvent *e) { QPainter p(this); - p.setPen(st::scrollDef.shColor->p); - p.drawLine(0, 0, width(), 0); + p.fillRect(0, 0, width(), st::lineWidth, st::scrollDef.shColor->b); FlatButton::paintEvent(e); } diff --git a/Telegram/SourceFiles/gui/flatinput.cpp b/Telegram/SourceFiles/gui/flatinput.cpp index f032001f4..90fbe6067 100644 --- a/Telegram/SourceFiles/gui/flatinput.cpp +++ b/Telegram/SourceFiles/gui/flatinput.cpp @@ -133,10 +133,11 @@ void FlatInput::paintEvent(QPaintEvent *e) { QPainter p(this); p.fillRect(rect(), a_bgColor.current()); if (_st.borderWidth) { - p.setPen(a_borderColor.current()); - for (uint32 i = 0; i < _st.borderWidth; ++i) { - p.drawRect(i, i, width() - 2 * i - 1, height() - 2 * i - 1); - } + QBrush b(a_borderColor.current()); + p.fillRect(0, 0, width() - _st.borderWidth, _st.borderWidth, b); + p.fillRect(width() - _st.borderWidth, 0, _st.borderWidth, height() - _st.borderWidth, b); + p.fillRect(_st.borderWidth, height() - _st.borderWidth, width() - _st.borderWidth, _st.borderWidth, b); + p.fillRect(0, _st.borderWidth, _st.borderWidth, height() - _st.borderWidth, b); } if (_st.imgRect.pxWidth()) { p.drawPixmap(_st.imgPos, App::sprite(), _st.imgRect); diff --git a/Telegram/SourceFiles/gui/switcher.cpp b/Telegram/SourceFiles/gui/switcher.cpp index bcb9605ea..006969526 100644 --- a/Telegram/SourceFiles/gui/switcher.cpp +++ b/Telegram/SourceFiles/gui/switcher.cpp @@ -115,10 +115,10 @@ void Switcher::paintEvent(QPaintEvent *e) { } } if (_st.border) { - p.setPen(_st.borderColor->p); - for (uint32 i = 0; i < _st.border; ++i) { - p.drawRect(i, i, width() - 2 * i - 1, height() - 2 * i - 1); - } + p.fillRect(0, 0, width() - _st.border, _st.border, _st.borderColor->b); + p.fillRect(width() - _st.border, 0, _st.border, height() - _st.border, _st.borderColor->b); + p.fillRect(_st.border, height() - _st.border, width() - _st.border, _st.border, _st.borderColor->b); + p.fillRect(0, _st.border, _st.border, height() - _st.border, _st.borderColor->b); } } diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 22a760467..c33747f83 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -1253,7 +1253,7 @@ void History::inboxRead(bool byThisInstance) { if (!dialogs.isEmpty()) { if (App::main()) App::main()->dlgUpdated(dialogs[0]); } - App::wnd()->psClearNotify(this); + App::wnd()->notifyClear(this); clearNotifications(); } @@ -1392,7 +1392,7 @@ void History::loadAround(MsgId msgId) { if (!loadedAtBottom()) { clear(true); } - newLoaded = isEmpty() || last && !last->detached(); + newLoaded = isEmpty() || (last && !last->detached()); } } } @@ -3462,8 +3462,7 @@ void HistoryUnreadBar::setCount(int32 count) { void HistoryUnreadBar::draw(QPainter &p, uint32 selection) const { p.fillRect(0, 1, _history->width, st::unreadBarHeight - 2, st::unreadBarBG->b); - p.setPen(st::unreadBarBorder->p); - p.drawLine(0, st::unreadBarHeight - 1, _history->width, st::unreadBarHeight - 1); + p.fillRect(0, st::unreadBarHeight - st::lineWidth, _history->width, st::lineWidth, st::unreadBarBorder->b); p.setFont(st::unreadBarFont->f); p.setPen(st::unreadBarColor->p); p.drawText(QRect(0, 0, _history->width, st::unreadBarHeight - 1), text, style::al_center); diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 673b446ee..ebc311ec0 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -554,7 +554,7 @@ void HistoryList::mouseReleaseEvent(QMouseEvent *e) { } void HistoryList::mouseDoubleClickEvent(QMouseEvent *e) { - if ((_dragAction == Selecting && !_selected.isEmpty() && _selected.cbegin().value() != FullItemSel || _dragAction == NoDrag && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel)) && _dragSelType == TextSelectLetters && _dragItem) { + if (((_dragAction == Selecting && !_selected.isEmpty() && _selected.cbegin().value() != FullItemSel) || (_dragAction == NoDrag && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel))) && _dragSelType == TextSelectLetters && _dragItem) { bool afterDragSymbol, uponSelected; uint16 symbol; _dragItem->getSymbol(symbol, afterDragSymbol, uponSelected, _dragStartPos.x(), _dragStartPos.y()); @@ -1334,8 +1334,7 @@ void HistoryHider::paintEvent(QPaintEvent *e) { p.fillRect(box.x(), box.y() + box.height() - st::btnSelectCancel.height - st::scrollDef.bottomsh, box.width(), st::scrollDef.bottomsh, st::scrollDef.shColor->b); // paint button sep - p.setPen(st::btnSelectSep->p); - p.drawLine(box.x() + st::btnSelectCancel.width, box.y() + box.height() - st::btnSelectCancel.height, box.x() + st::btnSelectCancel.width, box.y() + box.height() - 1); + p.fillRect(box.x() + st::btnSelectCancel.width, box.y() + box.height() - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); p.setPen(st::black->p); toText.drawElided(p, box.left() + (box.width() - toTextWidth) / 2, box.top() + st::boxPadding.top(), toTextWidth + 1); @@ -1820,7 +1819,7 @@ void HistoryWidget::newUnreadMsg(History *history, MsgId msgId) { } } else { if (hist != history) { - App::wnd()->psNotify(history, msgId); + App::wnd()->notifySchedule(history, msgId); } history->setUnreadCount(history->unreadCount + 1); } @@ -1830,7 +1829,7 @@ void HistoryWidget::newUnreadMsg(History *history, MsgId msgId) { if (history->unreadBar) history->unreadBar->destroy(); } } - App::wnd()->psNotify(history, msgId); + App::wnd()->notifySchedule(history, msgId); history->setUnreadCount(history->unreadCount + 1); history->lastWidth = 0; } @@ -1956,7 +1955,7 @@ void HistoryWidget::messagesReceived(const MTPmessages_Messages &messages, mtpRe addMessagesToFront(histPreload); histPreload.clear(); loadMessages(); - } else if (down && histPreloadDown.size() || !down && histPreload.size()) { + } else if ((down && histPreloadDown.size()) || (!down && histPreload.size())) { onListScroll(); } else if (down) { loadMessagesDown(); @@ -2779,7 +2778,7 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown) } if (!hist->readyForWork()) return; - if (!initial && !wasAtBottom || loadedDown) { + if ((!initial && !wasAtBottom) || loadedDown) { _scroll.scrollToY(newSt + addToY); return; } diff --git a/Telegram/SourceFiles/logs.cpp b/Telegram/SourceFiles/logs.cpp index 8b6c30e41..e55b3f888 100644 --- a/Telegram/SourceFiles/logs.cpp +++ b/Telegram/SourceFiles/logs.cpp @@ -116,7 +116,7 @@ void logsInit() { static _StreamCreator streamCreator; if (mainLogStream) return; -#ifdef Q_OS_MAC +#if defined Q_OS_MAC && !defined _DEBUG cForceWorkingDir(psAppDataPath()); #endif diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 84789d3d3..ce9b11f2e 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -155,10 +155,7 @@ void TopBarWidget::paintEvent(QPaintEvent *e) { int a = 0; // optimize shadow-only drawing } if (_drawShadow) { - p.setPen(st::titleShadowColor->p); - for (int32 i = 0; i < st::titleShadow; ++i) { - p.drawLine(st::titleShadow, st::topBarHeight + i, width(), st::topBarHeight + i); - } + p.fillRect(st::titleShadow, st::topBarHeight, width() - st::titleShadow, st::titleShadow, st::titleShadowColor->b); } } @@ -1314,7 +1311,7 @@ void MainWidget::applyNotifySetting(const MTPNotifyPeer &peer, const MTPPeerNoti if (peerId) { if (!history) history = App::history(peerId); if (isNotifyMuted(setTo)) { - App::wnd()->psClearNotify(history); + App::wnd()->notifyClear(history); history->setMute(true); } else { history->setMute(false); @@ -1344,7 +1341,7 @@ void MainWidget::gotNotifySetting(MTPInputNotifyPeer peer, const MTPPeerNotifySe } break; } - App::wnd()->psNotifySettingGot(); + App::wnd()->notifySettingGot(); } bool MainWidget::failNotifySetting(MTPInputNotifyPeer peer) { diff --git a/Telegram/SourceFiles/mtproto/mtpFileLoader.cpp b/Telegram/SourceFiles/mtproto/mtpFileLoader.cpp index f441bbd03..6406dcd56 100644 --- a/Telegram/SourceFiles/mtproto/mtpFileLoader.cpp +++ b/Telegram/SourceFiles/mtproto/mtpFileLoader.cpp @@ -167,7 +167,7 @@ void mtpFileLoader::partLoaded(int32 offset, const MTPupload_File &result) { } removeFromQueue(); App::wnd()->update(); - App::wnd()->psUpdateNotifies(); + App::wnd()->notifyUpdateAll(); } emit progress(this); } diff --git a/Telegram/SourceFiles/mtproto/mtpRPC.h b/Telegram/SourceFiles/mtproto/mtpRPC.h index 8fa3a8886..f27438b30 100644 --- a/Telegram/SourceFiles/mtproto/mtpRPC.h +++ b/Telegram/SourceFiles/mtproto/mtpRPC.h @@ -474,7 +474,7 @@ class RPCBindedDoneHandlerOwnedReq : public RPCOwnedDoneHandler { // done(b, res typedef TReturn (TReceiver::*CallbackType)(T, const TResponse &, mtpRequestId); public: - RPCBindedDoneHandlerOwnedReq(T b, TReceiver *receiver, CallbackType onDone) : RPCOwnedDoneHandler(receiver), _b(b), _onDone(onDone) { + RPCBindedDoneHandlerOwnedReq(T b, TReceiver *receiver, CallbackType onDone) : RPCOwnedDoneHandler(receiver), _onDone(onDone), _b(b) { } virtual void operator()(mtpRequestId requestId, const mtpPrime *from, const mtpPrime *end) const { if (_owner) (static_cast(_owner)->*_onDone)(_b, TResponse(from, end), requestId); diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index 27045ad52..c80536ef5 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -44,7 +44,7 @@ namespace { void MacPrivate::activeSpaceChanged() { if (App::wnd()) { - App::wnd()->psActivateNotifies(); + App::wnd()->notifyActivateAll(); } } @@ -54,7 +54,7 @@ void MacPrivate::notifyClicked(unsigned long long peer) { App::wnd()->showFromTray(); App::wnd()->hideSettings(); App::main()->showPeer(history->peer->id, false, true); - App::wnd()->psClearNotify(history); + App::wnd()->notifyClear(history); } void MacPrivate::notifyReplied(unsigned long long peer, const char *str) { @@ -67,8 +67,6 @@ PsMainWindow::PsMainWindow(QWidget *parent) : QMainWindow(parent), posInited(false), trayIcon(0), trayIconMenu(0), icon256(qsl(":/gui/art/iconround256.png")) { connect(&psIdleTimer, SIGNAL(timeout()), this, SLOT(psIdleTimeout())); psIdleTimer.setSingleShot(false); - connect(¬ifyWaitTimer, SIGNAL(timeout()), this, SLOT(psNotifyFire())); - notifyWaitTimer.setSingleShot(true); } void PsMainWindow::psNotIdle() const { @@ -287,497 +285,39 @@ void PsMainWindow::psFlash() { PsMainWindow::~PsMainWindow() { finished = true; - psClearNotifyFast(); } -void PsMainWindow::psNotify(History *history, MsgId msgId) { - if (App::quiting() || !history->notifyFrom) return; - - bool haveSetting = (history->peer->notify != UnknownNotifySettings); - if (haveSetting) { - if (history->peer->notify != EmptyNotifySettings && history->peer->notify->mute > unixtime()) { - history->clearNotifyFrom(); - return; - } - } else { - App::wnd()->getNotifySetting(MTP_inputNotifyPeer(history->peer->input)); - } - - uint64 ms = getms() + NotifyWaitTimeout; - notifyWhenAlerts[history].insert(ms); - if (cDesktopNotify()) { - NotifyWhenMaps::iterator i = notifyWhenMaps.find(history); - if (i == notifyWhenMaps.end()) { - i = notifyWhenMaps.insert(history, NotifyWhenMap()); - } - if (i.value().constFind(msgId) == i.value().cend()) { - i.value().insert(msgId, ms); - } - NotifyWaiters *addTo = haveSetting ? ¬ifyWaiters : ¬ifySettingWaiters; - if (addTo->constFind(history) == addTo->cend()) { - addTo->insert(history, NotifyWaiter(msgId, ms)); - } - } - if (haveSetting) { - if (!notifyWaitTimer.isActive()) { - notifyWaitTimer.start(NotifyWaitTimeout); - } - } +void PsMainWindow::psClearNotifies(PeerId peerId) { + _private.clearNotifies(peerId); } -void PsMainWindow::psNotifyFire() { - psShowNextNotify(); -} - -void PsMainWindow::psNotifySettingGot() { - int32 t = unixtime(); - for (NotifyWaiters::iterator i = notifySettingWaiters.begin(); i != notifySettingWaiters.end();) { - History *history = i.key(); - if (history->peer->notify == UnknownNotifySettings) { - ++i; - } else { - if (history->peer->notify == EmptyNotifySettings || history->peer->notify->mute <= t) { - notifyWaiters.insert(i.key(), i.value()); - } - i = notifySettingWaiters.erase(i); - } - } - notifyWaitTimer.stop(); - psShowNextNotify(); -} - -void PsMainWindow::psClearNotify(History *history) { - if (!history) { - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->unlinkHistory(); - } - _private.clearNotifies(); - for (NotifyWhenMaps::const_iterator i = notifyWhenMaps.cbegin(), e = notifyWhenMaps.cend(); i != e; ++i) { - i.key()->clearNotifyFrom(); - } - notifyWaiters.clear(); - notifySettingWaiters.clear(); - notifyWhenMaps.clear(); - return; - } - notifyWaiters.remove(history); - notifySettingWaiters.remove(history); - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->unlinkHistory(history); - } - _private.clearNotifies(history->peer->id); - notifyWhenMaps.remove(history); - notifyWhenAlerts.remove(history); -} - -void PsMainWindow::psClearNotifyFast() { - notifyWaiters.clear(); - notifySettingWaiters.clear(); - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->deleteLater(); - } - _private.clearNotifies(); - notifyWindows.clear(); - notifyWhenMaps.clear(); - notifyWhenAlerts.clear(); -} - -void PsMainWindow::psActivateNotifies() { - if (cCustomNotifies()) { - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - _private.activateWnd((*i)->winId()); - } - } +void PsMainWindow::psActivateNotify(NotifyWindow *w) { + _private.activateWnd(w->winId()); } namespace { QRect _monitorRect; uint64 _monitorLastGot = 0; - QRect _desktopRect() { - uint64 tnow = getms(); - if (tnow > _monitorLastGot + 1000 || tnow < _monitorLastGot) { - _monitorLastGot = tnow; - _monitorRect = QApplication::desktop()->availableGeometry(App::wnd()); - } - return _monitorRect; +} + +QRect psDesktopRect() { + uint64 tnow = getms(); + if (tnow > _monitorLastGot + 1000 || tnow < _monitorLastGot) { + _monitorLastGot = tnow; + _monitorRect = QApplication::desktop()->availableGeometry(App::wnd()); } + return _monitorRect; } -void PsMainWindow::psShowNextNotify(PsNotifyWindow *remove) { - if (App::quiting()) return; - - int32 count = NotifyWindows; - if (remove) { - for (PsNotifyWindows::iterator i = notifyWindows.begin(), e = notifyWindows.end(); i != e; ++i) { - if ((*i) == remove) { - notifyWindows.erase(i); - break; - } - } - } - - uint64 ms = getms(), nextAlert = 0; - bool alert = false; - for (NotifyWhenAlerts::iterator i = notifyWhenAlerts.begin(); i != notifyWhenAlerts.end();) { - while (!i.value().isEmpty() && *i.value().begin() <= ms) { - i.value().erase(i.value().begin()); - NotifySettingsPtr n = i.key()->peer->notify; - if (n == EmptyNotifySettings || (n != UnknownNotifySettings && n->mute <= unixtime())) { - alert = true; - } - } - if (i.value().isEmpty()) { - i = notifyWhenAlerts.erase(i); - } else { - if (!nextAlert || nextAlert > *i.value().begin()) { - nextAlert = *i.value().begin(); - } - ++i; - } - } - if (alert) { - psFlash(); - App::playSound(); - } - - if (cCustomNotifies()) { - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - int32 ind = (*i)->index(); - if (ind < 0) continue; - --count; - } - } - if (count <= 0 || !cDesktopNotify()) { - if (nextAlert) { - notifyWaitTimer.start(nextAlert - ms); - } - return; - } - - QRect r = _desktopRect(); - int32 x = r.x() + r.width() - st::notifyWidth - st::notifyDeltaX, y = r.y() + r.height() - st::notifyHeight - st::notifyDeltaY; - while (count > 0) { - uint64 next = 0; - HistoryItem *notifyItem = 0; - NotifyWaiters::iterator notifyWaiter; - for (NotifyWaiters::iterator i = notifyWaiters.begin(); i != notifyWaiters.end(); ++i) { - History *history = i.key(); - if (history->notifyFrom && history->notifyFrom->id != i.value().msg) { - NotifyWhenMaps::iterator j = notifyWhenMaps.find(history); - if (j == notifyWhenMaps.end()) { - history->clearNotifyFrom(); - i = notifyWaiters.erase(i); - continue; - } - do { - NotifyWhenMap::const_iterator k = j.value().constFind(history->notifyFrom->id); - if (k != j.value().cend()) { - i.value().msg = k.key(); - i.value().when = k.value(); - break; - } - history->getNextNotifyFrom(); - } while (history->notifyFrom); - } - if (!history->notifyFrom) { - notifyWhenMaps.remove(history); - i = notifyWaiters.erase(i); - continue; - } - uint64 when = i.value().when; - if (!notifyItem || next > when) { - next = when; - notifyItem = history->notifyFrom; - notifyWaiter = i; - } - } - if (notifyItem) { - if (next > ms) { - if (nextAlert && nextAlert < next) { - next = nextAlert; - nextAlert = 0; - } - notifyWaitTimer.start(next - ms); - break; - } else { - if (cCustomNotifies()) { - PsNotifyWindow *notify = new PsNotifyWindow(notifyItem, x, y); - notifyWindows.push_back(notify); - notify->hide(); - _private.holdOnTop(notify->winId()); - notify->show(); - _private.showOverAll(notify->winId()); - --count; - } else { - _private.showNotify(notifyItem->history()->peer->id, notifyItem->history()->peer->name, notifyItem->notificationHeader(), notifyItem->notificationText()); - } - - uint64 ms = getms(); - History *history = notifyItem->history(); - history->getNextNotifyFrom(); - NotifyWhenMaps::iterator j = notifyWhenMaps.find(history); - if (j == notifyWhenMaps.end() || !history->notifyFrom) { - history->clearNotifyFrom(); - notifyWaiters.erase(notifyWaiter); - if (j != notifyWhenMaps.end()) notifyWhenMaps.erase(j); - continue; - } - j.value().remove(notifyItem->id); - do { - NotifyWhenMap::const_iterator k = j.value().constFind(history->notifyFrom->id); - if (k != j.value().cend()) { - notifyWaiter.value().msg = k.key(); - notifyWaiter.value().when = k.value(); - break; - } - history->getNextNotifyFrom(); - } while (history->notifyFrom); - if (!history->notifyFrom) { - notifyWaiters.erase(notifyWaiter); - notifyWhenMaps.erase(j); - continue; - } - } - } else { - break; - } - } - if (nextAlert) { - notifyWaitTimer.start(nextAlert - ms); - } - - count = NotifyWindows - count; - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - int32 ind = (*i)->index(); - if (ind < 0) continue; - --count; - (*i)->moveTo(x, y - count * (st::notifyHeight + st::notifyDeltaY)); - } +void PsMainWindow::psNotifyShown(NotifyWindow *w) { + w->hide(); + _private.holdOnTop(w->winId()); + w->show(); + _private.showOverAll(w->winId()); } -void PsMainWindow::psStopHiding() { - if (cCustomNotifies()) { - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->stopHiding(); - } - } -} - -void PsMainWindow::psStartHiding() { - if (cCustomNotifies()) { - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->startHiding(); - } - } -} - -void PsMainWindow::psUpdateNotifies() { - if (cCustomNotifies()) { - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->updatePeerPhoto(); - } - } -} - -PsNotifyWindow::PsNotifyWindow(HistoryItem *item, int32 x, int32 y) : history(item->history()),// started(GetTickCount()), -close(this, st::notifyClose), alphaDuration(st::notifyFastAnim), posDuration(st::notifyFastAnim), hiding(false), _index(0), aOpacity(0), aOpacityFunc(st::notifyFastAnimFunc), aY(y + st::notifyHeight + st::notifyDeltaY) { - - int32 w = st::notifyWidth, h = st::notifyHeight; - QImage img(w * cIntRetinaFactor(), h * cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied); - if (cRetina()) img.setDevicePixelRatio(cRetinaFactor()); - img.fill(st::notifyBG->c); - - { - QPainter p(&img); - p.setPen(st::notifyBorder->p); - p.setBrush(Qt::NoBrush); - p.drawRect(0, 0, w - 1, h - 1); - - if (history->peer->photo->loaded()) { - p.drawPixmap(st::notifyPhotoPos.x(), st::notifyPhotoPos.y(), history->peer->photo->pix(st::notifyPhotoSize)); - } else { - MTP::clearLoaderPriorities(); - peerPhoto = history->peer->photo; - peerPhoto->load(true, true); - } - - int32 itemWidth = w - st::notifyPhotoPos.x() - st::notifyPhotoSize - st::notifyTextLeft - st::notifyClosePos.x() - st::notifyClose.width; - - QRect rectForName(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyTextTop, itemWidth, st::msgNameFont->height); - if (history->peer->chat) { - p.drawPixmap(QPoint(rectForName.left() + st::dlgChatImgLeft, rectForName.top() + st::dlgChatImgTop), App::sprite(), st::dlgChatImg); - rectForName.setLeft(rectForName.left() + st::dlgChatImgSkip); - } - - QDateTime now(QDateTime::currentDateTime()), lastTime(item->date); - QDate nowDate(now.date()), lastDate(lastTime.date()); - QString dt = lastTime.toString(qsl("hh:mm")); - int32 dtWidth = st::dlgHistFont->m.width(dt); - rectForName.setWidth(rectForName.width() - dtWidth - st::dlgDateSkip); - p.setFont(st::dlgDateFont->f); - p.setPen(st::dlgDateColor->p); - p.drawText(rectForName.left() + rectForName.width() + st::dlgDateSkip, rectForName.top() + st::dlgHistFont->ascent, dt); - - const HistoryItem *textCachedFor = 0; - Text itemTextCache(itemWidth); - bool active = false; - item->drawInDialog(p, QRect(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyItemTop + st::msgNameFont->height, itemWidth, 2 * st::dlgFont->height), active, textCachedFor, itemTextCache); - - p.setPen(st::dlgNameColor->p); - history->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); - } - pm = QPixmap::fromImage(img); - - hideTimer.setSingleShot(true); - connect(&hideTimer, SIGNAL(timeout()), this, SLOT(hideByTimer())); - - inputTimer.setSingleShot(true); - connect(&inputTimer, SIGNAL(timeout()), this, SLOT(checkLastInput())); - - connect(&close, SIGNAL(clicked()), this, SLOT(unlinkHistory())); - close.setAcceptBoth(true); - close.move(w - st::notifyClose.width - st::notifyClosePos.x(), st::notifyClosePos.y()); - close.show(); - - aY.start(y); - setGeometry(x, aY.current(), st::notifyWidth, st::notifyHeight); - - aOpacity.start(1); - setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint); - setAttribute(Qt::WA_MacAlwaysShowToolWindow); - - show(); - - setWindowOpacity(aOpacity.current()); - - alphaDuration = posDuration = st::notifyFastAnim; - anim::start(this); - - checkLastInput(); -} - -void PsNotifyWindow::checkLastInput() { - // TODO - if (true) { - hideTimer.start(st::notifyWaitLongHide); - } else { - inputTimer.start(300); - } -} - -void PsNotifyWindow::moveTo(int32 x, int32 y, int32 index) { - if (index >= 0) { - _index = index; - } - move(x, aY.current()); - aY.start(y); - aOpacity.restart(); - posDuration = st::notifyFastAnim; - anim::start(this); -} - -void PsNotifyWindow::updatePeerPhoto() { - if (!peerPhoto->isNull() && peerPhoto->loaded()) { - QImage img(pm.toImage()); - { - QPainter p(&img); - p.drawPixmap(st::notifyPhotoPos.x(), st::notifyPhotoPos.y(), peerPhoto->pix(st::notifyPhotoSize)); - } - peerPhoto = ImagePtr(); - pm = QPixmap::fromImage(img); - update(); - } -} - -void PsNotifyWindow::unlinkHistory(History *hist) { - if (!hist || hist == history) { - animHide(st::notifyFastAnim, st::notifyFastAnimFunc); - history = 0; - App::wnd()->psShowNextNotify(); - } -} - -void PsNotifyWindow::enterEvent(QEvent */*e*/) { - if (!history) return; - if (App::wnd()) App::wnd()->psStopHiding(); -} - -void PsNotifyWindow::leaveEvent(QEvent */*e*/) { - if (!history) return; - App::wnd()->psStartHiding(); -} - -void PsNotifyWindow::startHiding() { - hideTimer.start(st::notifyWaitShortHide); -} - -void PsNotifyWindow::mousePressEvent(QMouseEvent *e) { - if (!history) return; - if (e->button() == Qt::RightButton) { - unlinkHistory(); - } else if (history) { - App::wnd()->showFromTray(); - App::wnd()->hideSettings(); - App::main()->showPeer(history->peer->id, false, true); - unlinkHistory(); - e->ignore(); - } -} - -void PsNotifyWindow::paintEvent(QPaintEvent *e) { - QPainter p(this); - p.drawPixmap(0, 0, pm); -} - -void PsNotifyWindow::animHide(float64 duration, anim::transition func) { - if (!history) return; - alphaDuration = duration; - aOpacityFunc = func; - aOpacity.start(0); - aY.restart(); - hiding = true; - anim::start(this); -} - -void PsNotifyWindow::stopHiding() { - if (!history) return; - alphaDuration = st::notifyFastAnim; - aOpacityFunc = st::notifyFastAnimFunc; - aOpacity.start(1); - aY.restart(); - hiding = false; - hideTimer.stop(); - anim::start(this); -} - -void PsNotifyWindow::hideByTimer() { - if (!history) return; - animHide(st::notifySlowHide, st::notifySlowHideFunc); -} - -bool PsNotifyWindow::animStep(float64 ms) { - float64 dtAlpha = ms / alphaDuration, dtPos = ms / posDuration; - if (dtAlpha >= 1) { - aOpacity.finish(); - if (hiding) { - deleteLater(); - } - } else { - aOpacity.update(dtAlpha, aOpacityFunc); - } - setWindowOpacity(aOpacity.current()); - if (dtPos >= 1) { - aY.finish(); - } else { - aY.update(dtPos, anim::linear); - } - move(x(), aY.current()); - update(); - return (dtAlpha < 1 || (!hiding && dtPos < 1)); -} - -PsNotifyWindow::~PsNotifyWindow() { - if (App::wnd()) App::wnd()->psShowNextNotify(this); +void PsMainWindow::psPlatformNotify(HistoryItem *item) { + _private.showNotify(item->history()->peer->id, item->history()->peer->name, item->notificationHeader(), item->notificationText()); } PsApplication::PsApplication(int &argc, char **argv) : QApplication(argc, argv) { diff --git a/Telegram/SourceFiles/pspecific_mac.h b/Telegram/SourceFiles/pspecific_mac.h index ff26e4909..3cfca22dc 100644 --- a/Telegram/SourceFiles/pspecific_mac.h +++ b/Telegram/SourceFiles/pspecific_mac.h @@ -29,60 +29,6 @@ inline void psCheckLocalSocket(const QString &serverName) { } } - -class PsNotifyWindow : public QWidget, public Animated { - Q_OBJECT - -public: - - PsNotifyWindow(HistoryItem *item, int32 x, int32 y); - - void enterEvent(QEvent *e); - void leaveEvent(QEvent *e); - void mousePressEvent(QMouseEvent *e); - void paintEvent(QPaintEvent *e); - - bool animStep(float64 ms); - void animHide(float64 duration, anim::transition func); - void startHiding(); - void stopHiding(); - void moveTo(int32 x, int32 y, int32 index = -1); - - void updatePeerPhoto(); - - int32 index() const { - return history ? _index : -1; - } - - ~PsNotifyWindow(); - - public slots: - - void hideByTimer(); - void checkLastInput(); - - void unlinkHistory(History *hist = 0); - -private: - -// DWORD started; - - History *history; - IconedButton close; - QPixmap pm; - float64 alphaDuration, posDuration; - QTimer hideTimer, inputTimer; - bool hiding; - int32 _index; - anim::fvalue aOpacity; - anim::transition aOpacityFunc; - anim::ivalue aY; - ImagePtr peerPhoto; - -}; - -typedef QList PsNotifyWindows; - class MacPrivate : public PsMacWindowPrivate { public: @@ -92,6 +38,8 @@ public: }; +class NotifyWindow; + class PsMainWindow : public QMainWindow { Q_OBJECT @@ -114,7 +62,6 @@ public: bool psHandleTitle(); void psFlash(); - void psNotifySettingGot(); bool psIsActive(int state = -1) const; bool psIsOnline(int state) const; @@ -126,19 +73,15 @@ public: return false; } - void psNotify(History *history, MsgId msgId); - void psClearNotify(History *history = 0); - void psClearNotifyFast(); - void psShowNextNotify(PsNotifyWindow *remove = 0); - void psActivateNotifies(); - void psStopHiding(); - void psStartHiding(); - void psUpdateNotifies(); - bool psPosInited() const { return posInited; } - + + void psActivateNotify(NotifyWindow *w); + void psClearNotifies(PeerId peerId = 0); + void psNotifyShown(NotifyWindow *w); + void psPlatformNotify(HistoryItem *item); + ~PsMainWindow(); public slots: @@ -147,7 +90,6 @@ public slots: void psUpdateCounter(); void psSavePosition(Qt::WindowState state = Qt::WindowActive); void psIdleTimeout(); - void psNotifyFire(); protected: @@ -159,26 +101,6 @@ protected: QImage icon256; virtual void setupTrayIcon() { } - - typedef QMap NotifyWhenMap; - typedef QMap NotifyWhenMaps; - NotifyWhenMaps notifyWhenMaps; - struct NotifyWaiter { - NotifyWaiter(MsgId msg, uint64 when) : msg(msg), when(when) { - } - MsgId msg; - uint64 when; - }; - typedef QMap NotifyWaiters; - NotifyWaiters notifyWaiters; - NotifyWaiters notifySettingWaiters; - QTimer notifyWaitTimer; - - typedef QSet NotifyWhenAlert; - typedef QMap NotifyWhenAlerts; - NotifyWhenAlerts notifyWhenAlerts; - - PsNotifyWindows notifyWindows; QTimer psUpdatedPositionTimer; @@ -257,6 +179,8 @@ QString psAppDataPath(); QString psCurrentExeDirectory(int argc, char *argv[]); void psAutoStart(bool start, bool silent = false); +QRect psDesktopRect(); + int psCleanup(); int psFixPrevious(); diff --git a/Telegram/SourceFiles/pspecific_mac.mm b/Telegram/SourceFiles/pspecific_mac.mm deleted file mode 100644 index e145ff29c..000000000 --- a/Telegram/SourceFiles/pspecific_mac.mm +++ /dev/null @@ -1,2466 +0,0 @@ -#include "stdafx.h" -#include "pspecific.h" - -#include "lang.h" -#include "application.h" -#include "mainwidget.h" - -#define min(a, b) ((a) < (b) ? (a) : (b)) -#define max(a, b) ((a) < (b) ? (b) : (a)) - -namespace { - bool frameless = true; - bool useDWM = false; - bool useTheme = false; - bool useOpenAs = false; - bool themeInited = false; - bool finished = true; - int menuShown = 0, menuHidden = 0; - int dleft = 0, dtop = 0; - QMargins simpleMargins, margins; - //HICON bigIcon = 0, smallIcon = 0, overlayIcon = 0; - - //UINT tbCreatedMsgId = 0; - //ITaskbarList3 *tbListInterface = 0; - - /*HWND createTaskbarHider() { - HINSTANCE appinst = (HINSTANCE)GetModuleHandle(0); - HWND hWnd = 0; - - QString cn = QString("TelegramTaskbarHider"); - LPCWSTR _cn = (LPCWSTR)cn.utf16(); - WNDCLASSEX wc; - - wc.cbSize = sizeof(wc); - wc.style = 0; - wc.lpfnWndProc = DefWindowProc; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = appinst; - wc.hIcon = 0; - wc.hCursor = 0; - wc.hbrBackground = 0; - wc.lpszMenuName = NULL; - wc.lpszClassName = _cn; - wc.hIconSm = 0; - if (!RegisterClassEx(&wc)) { - DEBUG_LOG(("Application Error: could not register taskbar hider window class, error: %1").arg(GetLastError())); - return hWnd; - } - - hWnd = CreateWindowEx(WS_EX_TOOLWINDOW, _cn, 0, WS_POPUP, 0, 0, 0, 0, 0, 0, appinst, 0); - if (!hWnd) { - DEBUG_LOG(("Application Error: could not create taskbar hider window class, error: %1").arg(GetLastError())); - return hWnd; - } - return hWnd; - } - - enum { - _PsShadowMoved = 0x01, - _PsShadowResized = 0x02, - _PsShadowShown = 0x04, - _PsShadowHidden = 0x08, - _PsShadowActivate = 0x10, - }; - - enum { - _PsInitHor = 0x01, - _PsInitVer = 0x02, - }; - - int32 _psSize = 0; - class _PsShadowWindows { - public: - - _PsShadowWindows() : screenDC(0), max_w(0), max_h(0), _x(0), _y(0), _w(0), _h(0), hidden(true), r(0), g(0), b(0), noKeyColor(RGB(255, 255, 255)) { - for (int i = 0; i < 4; ++i) { - dcs[i] = 0; - bitmaps[i] = 0; - hwnds[i] = 0; - } - } - - void setColor(QColor c) { - r = c.red(); - g = c.green(); - b = c.blue(); - - if (!hwnds[0]) return; - Gdiplus::SolidBrush brush(Gdiplus::Color(_alphas[0], r, g, b)); - for (int i = 0; i < 4; ++i) { - Gdiplus::Graphics graphics(dcs[i]); - graphics.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); - if ((i % 2) && _h || !(i % 2) && _w) { - graphics.FillRectangle(&brush, 0, 0, (i % 2) ? _size : _w, (i % 2) ? _h : _size); - } - } - initCorners(); - - _x = _y = _w = _h = 0; - update(_PsShadowMoved | _PsShadowResized); - } - - bool init(QColor c) { - style::rect topLeft = st::wndShadow; - _fullsize = topLeft.width(); - _shift = st::wndShadowShift; - QImage cornersImage(_fullsize, _fullsize, QImage::Format_ARGB32_Premultiplied); - { - QPainter p(&cornersImage); - p.drawPixmap(QPoint(0, 0), App::sprite(), topLeft); - } - uchar *bits = cornersImage.bits(); - if (bits) { - for ( - quint32 *p = (quint32*)bits, *end = (quint32*)(bits + cornersImage.byteCount()); - p < end; - ++p - ) { - *p = (*p ^ 0x00ffffff) << 24; - } - } - - _metaSize = _fullsize + 2 * _shift; - _alphas.reserve(_metaSize); - _colors.reserve(_metaSize * _metaSize); - for (int32 j = 0; j < _metaSize; ++j) { - for (int32 i = 0; i < _metaSize; ++i) { - _colors.push_back((i < 2 * _shift || j < 2 * _shift) ? 1 : qMax(BYTE(1), BYTE(cornersImage.pixel(QPoint(i - 2 * _shift, j - 2 * _shift)) >> 24))); - } - } - uchar prev = 0; - for (int32 i = 0; i < _metaSize; ++i) { - uchar a = _colors[(_metaSize - 1) * _metaSize + i]; - if (a < prev) break; - - _alphas.push_back(a); - prev = a; - } - _psSize = _size = _alphas.size() - 2 * _shift; - - setColor(c); - - Gdiplus::GdiplusStartupInput gdiplusStartupInput; - ULONG_PTR gdiplusToken; - Gdiplus::Status gdiRes = Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); - - if (gdiRes != Gdiplus::Ok) { - DEBUG_LOG(("Application Error: could not init GDI+, error: %1").arg((int)gdiRes)); - return false; - } - blend.AlphaFormat = AC_SRC_ALPHA; - blend.SourceConstantAlpha = 255; - blend.BlendFlags = 0; - blend.BlendOp = AC_SRC_OVER; - - screenDC = GetDC(0); - if (!screenDC) return false; - - QRect avail(QDesktopWidget().availableGeometry()); - max_w = avail.width(); - if (max_w < st::wndMinWidth) max_w = st::wndMinWidth; - max_h = avail.height(); - if (max_h < st::wndMinHeight) max_h = st::wndMinHeight; - - HINSTANCE appinst = (HINSTANCE)GetModuleHandle(0); - - for (int i = 0; i < 4; ++i) { - QString cn = QString("TelegramShadow%1").arg(i); - LPCWSTR _cn = (LPCWSTR)cn.utf16(); - WNDCLASSEX wc; - - wc.cbSize = sizeof(wc); - wc.style = 0; - wc.lpfnWndProc = wndProc; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = appinst; - wc.hIcon = 0; - wc.hCursor = 0; - wc.hbrBackground = 0; - wc.lpszMenuName = NULL; - wc.lpszClassName = _cn; - wc.hIconSm = 0; - if (!RegisterClassEx(&wc)) { - DEBUG_LOG(("Application Error: could not register shadow window class %1, error: %2").arg(i).arg(GetLastError())); - destroy(); - return false; - } - - hwnds[i] = CreateWindowEx(WS_EX_LAYERED | WS_EX_TOOLWINDOW, _cn, 0, WS_POPUP, 0, 0, 0, 0, 0, 0, appinst, 0); - if (!hwnds[i]) { - DEBUG_LOG(("Application Error: could not create shadow window class %1, error: %2").arg(i).arg(GetLastError())); - destroy(); - return false; - } - - dcs[i] = CreateCompatibleDC(screenDC); - if (!dcs[i]) { - DEBUG_LOG(("Application Error: could not create dc for shadow window class %1, error: %2").arg(i).arg(GetLastError())); - destroy(); - return false; - } - - bitmaps[i] = CreateCompatibleBitmap(screenDC, (i % 2) ? _size : max_w, (i % 2) ? max_h : _size); - if (!bitmaps[i]) { - DEBUG_LOG(("Application Error: could not create bitmap for shadow window class %1, error: %2").arg(i).arg(GetLastError())); - destroy(); - return false; - } - - SelectObject(dcs[i], bitmaps[i]); - } - - initCorners(); - return true; - } - - void initCorners(int directions = (_PsInitHor | _PsInitVer)) { - bool hor = (directions & _PsInitHor), ver = (directions & _PsInitVer); - Gdiplus::Graphics graphics0(dcs[0]), graphics1(dcs[1]), graphics2(dcs[2]), graphics3(dcs[3]); - graphics0.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); - graphics1.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); - graphics2.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); - graphics3.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); - - Gdiplus::SolidBrush brush(Gdiplus::Color(_alphas[0], r, g, b)); - if (hor) graphics0.FillRectangle(&brush, 0, 0, _fullsize - (_size - _shift), 2 * _shift); - - if (ver) { - graphics1.FillRectangle(&brush, 0, 0, _size, 2 * _shift); - graphics3.FillRectangle(&brush, 0, 0, _size, 2 * _shift); - graphics1.FillRectangle(&brush, _size - _shift, 2 * _shift, _shift, _fullsize); - graphics3.FillRectangle(&brush, 0, 2 * _shift, _shift, _fullsize); - } - - if (hor) { - for (int j = 2 * _shift; j < _size; ++j) { - for (int k = 0; k < _fullsize - (_size - _shift); ++k) { - brush.SetColor(Gdiplus::Color(_colors[j * _metaSize + k + (_size + _shift)], r, g, b)); - graphics0.FillRectangle(&brush, k, j, 1, 1); - graphics2.FillRectangle(&brush, k, _size - (j - 2 * _shift) - 1, 1, 1); - } - } - for (int j = _size; j < _size + 2 * _shift; ++j) { - for (int k = 0; k < _fullsize - (_size - _shift); ++k) { - brush.SetColor(Gdiplus::Color(_colors[j * _metaSize + k + (_size + _shift)], r, g, b)); - graphics2.FillRectangle(&brush, k, _size - (j - 2 * _shift) - 1, 1, 1); - } - } - } - if (ver) { - for (int j = 2 * _shift; j < _fullsize + 2 * _shift; ++j) { - for (int k = _shift; k < _size; ++k) { - brush.SetColor(Gdiplus::Color(_colors[j * _metaSize + (k + _shift)], r, g, b)); - graphics1.FillRectangle(&brush, _size - k - 1, j, 1, 1); - graphics3.FillRectangle(&brush, k, j, 1, 1); - } - } - } - } - void verCorners(int h, Gdiplus::Graphics *pgraphics1, Gdiplus::Graphics *pgraphics3) { - Gdiplus::SolidBrush brush(Gdiplus::Color(_alphas[0], r, g, b)); - pgraphics1->FillRectangle(&brush, _size - _shift, h - _fullsize, _shift, _fullsize); - pgraphics3->FillRectangle(&brush, 0, h - _fullsize, _shift, _fullsize); - for (int j = 0; j < _fullsize; ++j) { - for (int k = _shift; k < _size; ++k) { - brush.SetColor(Gdiplus::Color(_colors[(j + 2 * _shift) * _metaSize + k + _shift], r, g, b)); - pgraphics1->FillRectangle(&brush, _size - k - 1, h - j - 1, 1, 1); - pgraphics3->FillRectangle(&brush, k, h - j - 1, 1, 1); - } - } - } - void horCorners(int w, Gdiplus::Graphics *pgraphics0, Gdiplus::Graphics *pgraphics2) { - Gdiplus::SolidBrush brush(Gdiplus::Color(_alphas[0], r, g, b)); - pgraphics0->FillRectangle(&brush, w - 2 * _size - (_fullsize - (_size - _shift)), 0, _fullsize - (_size - _shift), 2 * _shift); - for (int j = 2 * _shift; j < _size; ++j) { - for (int k = 0; k < _fullsize - (_size - _shift); ++k) { - brush.SetColor(Gdiplus::Color(_colors[j * _metaSize + k + (_size + _shift)], r, g, b)); - pgraphics0->FillRectangle(&brush, w - 2 * _size - k - 1, j, 1, 1); - pgraphics2->FillRectangle(&brush, w - 2 * _size - k - 1, _size - (j - 2 * _shift) - 1, 1, 1); - } - } - for (int j = _size; j < _size + 2 * _shift; ++j) { - for (int k = 0; k < _fullsize - (_size - _shift); ++k) { - brush.SetColor(Gdiplus::Color(_colors[j * _metaSize + k + (_size + _shift)], r, g, b)); - pgraphics2->FillRectangle(&brush, w - 2 * _size - k - 1, _size - (j - 2 * _shift) - 1, 1, 1); - } - } - } - - void update(int changes, WINDOWPOS *pos = 0) { - HWND hwnd = Application::wnd() ? Application::wnd()->psHwnd() : 0; - if (!hwnd || !hwnds[0]) return; - - if (changes == _PsShadowActivate) { - for (int i = 0; i < 4; ++i) { - SetWindowPos(hwnds[i], hwnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); - } - return; - } - - if (changes & _PsShadowHidden) { - if (!hidden) { - for (int i = 0; i < 4; ++i) { - hidden = true; - ShowWindow(hwnds[i], SW_HIDE); - } - } - return; - } - if (!Application::wnd()->psPosInited()) return; - - int x = _x, y = _y, w = _w, h = _h; - if (pos && (!(pos->flags & SWP_NOMOVE) || !(pos->flags & SWP_NOSIZE) || !(pos->flags & SWP_NOREPOSITION))) { - if (!(pos->flags & SWP_NOMOVE)) { - x = pos->x - _size; - y = pos->y - _size; - } else if (pos->flags & SWP_NOSIZE) { - for (int i = 0; i < 4; ++i) { - SetWindowPos(hwnds[i], hwnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); - } - return; - } - if (!(pos->flags & SWP_NOSIZE)) { - w = pos->cx + 2 * _size; - h = pos->cy + 2 * _size; - } - } else { - RECT r; - GetWindowRect(hwnd, &r); - x = r.left - _size; - y = r.top - _size; - w = r.right + _size - x; - h = r.bottom + _size - y; - } - if (h < 2 * _fullsize + 2 * _shift) { - h = 2 * _fullsize + 2 * _shift; - } - if (w < 2 * (_fullsize + _shift)) { - w = 2 * (_fullsize + _shift); - } - - if (w != _w) { - int from = (_w > 2 * (_fullsize + _shift)) ? (_w - _size - _fullsize - _shift) : (_fullsize - (_size - _shift)); - int to = w - _size - _fullsize - _shift; - if (w > max_w) { - from = _fullsize - (_size - _shift); - max_w *= 2; - for (int i = 0; i < 4; i += 2) { - DeleteObject(bitmaps[i]); - bitmaps[i] = CreateCompatibleBitmap(screenDC, max_w, _size); - SelectObject(dcs[i], bitmaps[i]); - } - initCorners(_PsInitHor); - } - Gdiplus::Graphics graphics0(dcs[0]), graphics2(dcs[2]); - graphics0.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); - graphics2.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); - Gdiplus::SolidBrush brush(Gdiplus::Color(_alphas[0], r, g, b)); - if (to > from) { - graphics0.FillRectangle(&brush, from, 0, to - from, 2 * _shift); - for (int i = 2 * _shift; i < _size; ++i) { - Gdiplus::Pen pen(Gdiplus::Color(_alphas[i], r, g, b)); - graphics0.DrawLine(&pen, from, i, to, i); - graphics2.DrawLine(&pen, from, _size - (i - 2 * _shift) - 1, to, _size - (i - 2 * _shift) - 1); - } - for (int i = _size; i < _size + 2 * _shift; ++i) { - Gdiplus::Pen pen(Gdiplus::Color(_alphas[i], r, g, b)); - graphics2.DrawLine(&pen, from, _size - (i - 2 * _shift) - 1, to, _size - (i - 2 * _shift) - 1); - } - } - if (_w > w) { - graphics0.FillRectangle(&brush, w - _size - _fullsize - _shift, 0, _fullsize - (_size - _shift), _size); - graphics2.FillRectangle(&brush, w - _size - _fullsize - _shift, 0, _fullsize - (_size - _shift), _size); - } - horCorners(w, &graphics0, &graphics2); - POINT p0 = { x + _size, y }, p2 = { x + _size, y + h - _size }, f = { 0, 0 }; - SIZE s = { w - 2 * _size, _size }; - updateWindow(0, &p0, &s); - updateWindow(2, &p2, &s); - } else if (x != _x || y != _y) { - POINT p0 = { x + _size, y }, p2 = { x + _size, y + h - _size }; - updateWindow(0, &p0); - updateWindow(2, &p2); - } else if (h != _h) { - POINT p2 = { x + _size, y + h - _size }; - updateWindow(2, &p2); - } - - if (h != _h) { - int from = (_h > 2 * _fullsize + 2 * _shift) ? (_h - _fullsize) : (_fullsize + 2 * _shift); - int to = h - _fullsize; - if (h > max_h) { - from = (_fullsize + 2 * _shift); - max_h *= 2; - for (int i = 1; i < 4; i += 2) { - DeleteObject(bitmaps[i]); - bitmaps[i] = CreateCompatibleBitmap(dcs[i], _size, max_h); - SelectObject(dcs[i], bitmaps[i]); - } - initCorners(_PsInitVer); - } - Gdiplus::Graphics graphics1(dcs[1]), graphics3(dcs[3]); - graphics1.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); - graphics3.SetCompositingMode(Gdiplus::CompositingModeSourceCopy); - - Gdiplus::SolidBrush brush(Gdiplus::Color(_alphas[0], r, g, b)); - if (to > from) { - graphics1.FillRectangle(&brush, _size - _shift, from, _shift, to - from); - graphics3.FillRectangle(&brush, 0, from, _shift, to - from); - for (int i = 2 * _shift; i < _size + _shift; ++i) { - Gdiplus::Pen pen(Gdiplus::Color(_alphas[i], r, g, b)); - graphics1.DrawLine(&pen, _size + _shift - i - 1, from, _size + _shift - i - 1, to); - graphics3.DrawLine(&pen, i - _shift, from, i - _shift, to); - } - } - if (_h > h) { - graphics1.FillRectangle(&brush, 0, h - _fullsize, _size, _fullsize); - graphics3.FillRectangle(&brush, 0, h - _fullsize, _size, _fullsize); - } - verCorners(h, &graphics1, &graphics3); - - POINT p1 = {x + w - _size, y}, p3 = {x, y}, f = {0, 0}; - SIZE s = { _size, h }; - updateWindow(1, &p1, &s); - updateWindow(3, &p3, &s); - } else if (x != _x || y != _y) { - POINT p1 = { x + w - _size, y }, p3 = { x, y }; - updateWindow(1, &p1); - updateWindow(3, &p3); - } else if (w != _w) { - POINT p1 = { x + w - _size, y }; - updateWindow(1, &p1); - } - _x = x; - _y = y; - _w = w; - _h = h; - - if (hidden && (changes & _PsShadowShown)) { - for (int i = 0; i < 4; ++i) { - SetWindowPos(hwnds[i], hwnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW | SWP_NOACTIVATE); - } - hidden = false; - } - } - - void updateWindow(int i, POINT *p, SIZE *s = 0) { - static POINT f = {0, 0}; - if (s) { - UpdateLayeredWindow(hwnds[i], (s ? screenDC : 0), p, s, (s ? dcs[i] : 0), (s ? (&f) : 0), noKeyColor, &blend, ULW_ALPHA); - } else { - SetWindowPos(hwnds[i], 0, p->x, p->y, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER); - } - } - - void destroy() { - for (int i = 0; i < 4; ++i) { - if (dcs[i]) DeleteDC(dcs[i]); - if (bitmaps[i]) DeleteObject(bitmaps[i]); - if (hwnds[i]) DestroyWindow(hwnds[i]); - dcs[i] = 0; - bitmaps[i] = 0; - hwnds[i] = 0; - } - if (screenDC) ReleaseDC(0, screenDC); - } - - private: - - int _x, _y, _w, _h; - int _metaSize, _fullsize, _size, _shift; - QVector _alphas, _colors; - - bool hidden; - - HWND hwnds[4]; - HDC dcs[4], screenDC; - HBITMAP bitmaps[4]; - int max_w, max_h; - BLENDFUNCTION blend; - - BYTE r, g, b; - COLORREF noKeyColor; - - static LRESULT CALLBACK _PsShadowWindows::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); - - }; - _PsShadowWindows _psShadowWindows; - - LRESULT CALLBACK _PsShadowWindows::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { - if (finished) return DefWindowProc(hwnd, msg, wParam, lParam); - - int i; - for (i = 0; i < 4; ++i) { - if (_psShadowWindows.hwnds[i] && hwnd == _psShadowWindows.hwnds[i]) { - break; - } - } - if (i == 4) return DefWindowProc(hwnd, msg, wParam, lParam); - - switch (msg) { - case WM_CLOSE: - Application::wnd()->close(); - break; - case WM_NCHITTEST: { - int32 xPos = GET_X_LPARAM(lParam), yPos = GET_Y_LPARAM(lParam); - switch (i) { - case 0: return HTTOP; - case 1: return (yPos < _psShadowWindows._y + _psSize) ? HTTOPRIGHT : ((yPos >= _psShadowWindows._y + _psShadowWindows._h - _psSize) ? HTBOTTOMRIGHT : HTRIGHT); - case 2: return HTBOTTOM; - case 3: return (yPos < _psShadowWindows._y + _psSize) ? HTTOPLEFT : ((yPos >= _psShadowWindows._y + _psShadowWindows._h - _psSize) ? HTBOTTOMLEFT : HTLEFT); - } - return HTTRANSPARENT; - } break; - - case WM_NCACTIVATE: return DefWindowProc(hwnd, msg, wParam, lParam); - case WM_NCLBUTTONDOWN: - case WM_NCLBUTTONUP: - case WM_NCLBUTTONDBLCLK: - case WM_NCMBUTTONDOWN: - case WM_NCMBUTTONUP: - case WM_NCMBUTTONDBLCLK: - case WM_NCRBUTTONDOWN: - case WM_NCRBUTTONUP: - case WM_NCRBUTTONDBLCLK: - case WM_NCXBUTTONDOWN: - case WM_NCXBUTTONUP: - case WM_NCXBUTTONDBLCLK: - case WM_NCMOUSEHOVER: - case WM_NCMOUSELEAVE: - case WM_NCMOUSEMOVE: - case WM_NCPOINTERUPDATE: - case WM_NCPOINTERDOWN: - case WM_NCPOINTERUP: - if (App::wnd() && App::wnd()->psHwnd()) { - if (msg == WM_NCLBUTTONDOWN) { - ::SetForegroundWindow(App::wnd()->psHwnd()); - } - LRESULT res = SendMessage(App::wnd()->psHwnd(), msg, wParam, lParam); - return res; - } - return 0; - break; - case WM_ACTIVATE: - if (App::wnd() && App::wnd()->psHwnd() && wParam == WA_ACTIVE) { - if ((HWND)lParam != App::wnd()->psHwnd()) { - ::SetForegroundWindow(hwnd); - ::SetWindowPos(App::wnd()->psHwnd(), hwnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); - } - } - return DefWindowProc(hwnd, msg, wParam, lParam); - break; - default: - return DefWindowProc(hwnd, msg, wParam, lParam); - } - return 0; - } - - QColor _shActive(0, 0, 0), _shInactive(0, 0, 0); - - typedef BOOL (FAR STDAPICALLTYPE *f_dwmDefWindowProc)(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, _Out_ LRESULT *plResult); - f_dwmDefWindowProc dwmDefWindowProc; - - typedef HRESULT (FAR STDAPICALLTYPE *f_dwmSetWindowAttribute)(HWND hWnd, DWORD dwAttribute, _In_ LPCVOID pvAttribute, DWORD cbAttribute); - f_dwmSetWindowAttribute dwmSetWindowAttribute; - - typedef HRESULT (FAR STDAPICALLTYPE *f_dwmExtendFrameIntoClientArea)(HWND hWnd, const MARGINS *pMarInset); - f_dwmExtendFrameIntoClientArea dwmExtendFrameIntoClientArea; - - typedef HRESULT (FAR STDAPICALLTYPE *f_setWindowTheme)(HWND hWnd, LPCWSTR pszSubAppName, LPCWSTR pszSubIdList); - f_setWindowTheme setWindowTheme; - - typedef HRESULT (FAR STDAPICALLTYPE *f_openAs_RunDLL)(HWND hWnd, HINSTANCE hInstance, LPCWSTR lpszCmdLine, int nCmdShow); - f_openAs_RunDLL openAs_RunDLL; - - typedef HRESULT (FAR STDAPICALLTYPE *f_shOpenWithDialog)(HWND hwndParent, const OPENASINFO *poainfo); - f_shOpenWithDialog shOpenWithDialog; - - template - bool loadFunction(HINSTANCE dll, LPCSTR name, TFunction &func) { - if (!dll) return false; - - func = (TFunction)GetProcAddress(dll, name); - return !!func; - } - - class _PsInitializer { - public: - _PsInitializer() { - setupDWM(); - useDWM = true; - frameless = !useDWM; - - setupUx(); - setupOpenAs(); - } - void setupDWM() { - HINSTANCE procId = LoadLibrary(L"DWMAPI.DLL"); - - if (!loadFunction(procId, "DwmDefWindowProc", dwmDefWindowProc)) return; - if (!loadFunction(procId, "DwmSetWindowAttribute", dwmSetWindowAttribute)) return; - if (!loadFunction(procId, "DwmExtendFrameIntoClientArea", dwmExtendFrameIntoClientArea)) return; - useDWM = true; - } - void setupUx() { - HINSTANCE procId = LoadLibrary(L"UXTHEME.DLL"); - - if (!loadFunction(procId, "SetWindowTheme", setWindowTheme)) return; - useTheme = true; - } - void setupOpenAs() { - HINSTANCE procId = LoadLibrary(L"SHELL32.DLL"); - - if (!loadFunction(procId, "SHOpenWithDialog", shOpenWithDialog) && !loadFunction(procId, "OpenAs_RunDLLW", openAs_RunDLL)) return; - useOpenAs = true; - } - }; - _PsInitializer _psInitializer; - - class _PsEventFilter : public QAbstractNativeEventFilter { - public: - _PsEventFilter() { - } - - bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) { - Window *wnd = Application::wnd(); - if (!wnd) return false; - - MSG *msg = (MSG*)message; - if (msg->message == WM_ENDSESSION) { - App::quit(); - return false; - } - if (msg->hwnd == wnd->psHwnd() || msg->hwnd && !wnd->psHwnd()) { - return mainWindowEvent(msg->hwnd, msg->message, msg->wParam, msg->lParam, (LRESULT*)result); - } - return false; - } - - bool mainWindowEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *result) { - if (tbCreatedMsgId && msg == tbCreatedMsgId) { - if (CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, IID_ITaskbarList3, (void**)&tbListInterface) != S_OK) { - tbListInterface = 0; - } - } - switch (msg) { - - case WM_DESTROY: { - App::quit(); - } return false; - - case WM_ACTIVATE: { - if (LOWORD(wParam) == WA_CLICKACTIVE) { - App::wnd()->inactivePress(true); - } - Application::wnd()->psUpdateMargins(); - if (LOWORD(wParam) != WA_INACTIVE) { - _psShadowWindows.setColor(_shActive); - _psShadowWindows.update(_PsShadowActivate); - } else { - _psShadowWindows.setColor(_shInactive); - } - QTimer::singleShot(0, Application::wnd(), SLOT(psUpdateCounter())); - Application::wnd()->update(); - } return false; - - case WM_NCPAINT: if (QSysInfo::WindowsVersion >= QSysInfo::WV_WINDOWS8) return false; *result = 0; return true; - - case WM_NCCALCSIZE: if (!useDWM) return false; { - if (wParam == TRUE) { - LPNCCALCSIZE_PARAMS params = (LPNCCALCSIZE_PARAMS)lParam; - params->rgrc[0].left += margins.left() - simpleMargins.left(); - params->rgrc[0].top += margins.top() - simpleMargins.top(); - params->rgrc[0].right -= margins.right() - simpleMargins.right(); - params->rgrc[0].bottom -= margins.bottom() - simpleMargins.bottom(); - } else if (wParam == FALSE) { - LPRECT rect = (LPRECT)lParam; - - rect->left += margins.left() - simpleMargins.left(); - rect->top += margins.top() - simpleMargins.top(); - rect->right += margins.right() - simpleMargins.right(); - rect->bottom += margins.bottom() - simpleMargins.bottom(); - } - *result = 0; - } return true; - - case WM_NCACTIVATE: { - Application::wnd()->psUpdateMargins(); - *result = LRESULT(TRUE); - Application::wnd()->repaint(); - } return true; - - case WM_WINDOWPOSCHANGING: - case WM_WINDOWPOSCHANGED: { - _psShadowWindows.update(_PsShadowMoved | _PsShadowResized, (WINDOWPOS*)lParam); - } return false; - - case WM_SIZE: { - if (App::wnd()) { - if (wParam == SIZE_MAXIMIZED || wParam == SIZE_RESTORED || wParam == SIZE_MINIMIZED) { - if (wParam != SIZE_RESTORED || App::wnd()->windowState() != Qt::WindowNoState) { - Qt::WindowState state = Qt::WindowNoState; - if (wParam == SIZE_MAXIMIZED) { - state = Qt::WindowMaximized; - } else if (wParam == SIZE_MINIMIZED) { - state = Qt::WindowMinimized; - } - emit App::wnd()->windowHandle()->windowStateChanged(state); - } else { - App::wnd()->psUpdatedPosition(); - } - int changes = (wParam == SIZE_MINIMIZED || wParam == SIZE_MAXIMIZED) ? _PsShadowHidden : (_PsShadowResized | _PsShadowShown); - _psShadowWindows.update(changes); - } - } - } return false; - - case WM_SHOWWINDOW: { - LONG style = GetWindowLong(hWnd, GWL_STYLE); - int changes = _PsShadowResized | ((wParam && !(style & (WS_MAXIMIZE | WS_MINIMIZE))) ? _PsShadowShown : _PsShadowHidden); - _psShadowWindows.update(changes); - } return false; - - case WM_MOVE: { - _psShadowWindows.update(_PsShadowMoved); - App::wnd()->psUpdatedPosition(); - } return false; - - case WM_NCHITTEST: { - POINTS p = MAKEPOINTS(lParam); - RECT r; - GetWindowRect(hWnd, &r); - HitTestType res = Application::wnd()->hitTest(QPoint(p.x - r.left + dleft, p.y - r.top + dtop)); - switch (res) { - case HitTestClient: - case HitTestSysButton: *result = HTCLIENT; break; - case HitTestIcon: *result = HTCAPTION; break; - case HitTestCaption: *result = HTCAPTION; break; - case HitTestTop: *result = HTTOP; break; - case HitTestTopRight: *result = HTTOPRIGHT; break; - case HitTestRight: *result = HTRIGHT; break; - case HitTestBottomRight: *result = HTBOTTOMRIGHT; break; - case HitTestBottom: *result = HTBOTTOM; break; - case HitTestBottomLeft: *result = HTBOTTOMLEFT; break; - case HitTestLeft: *result = HTLEFT; break; - case HitTestTopLeft: *result = HTTOPLEFT; break; - case HitTestNone: - default: *result = HTTRANSPARENT; break; - }; - } return true; - - case WM_NCRBUTTONUP: { - SendMessage(hWnd, WM_SYSCOMMAND, SC_MOUSEMENU, lParam); - } return true; - - case WM_NCLBUTTONDOWN: { - POINTS p = MAKEPOINTS(lParam); - RECT r; - GetWindowRect(hWnd, &r); - HitTestType res = Application::wnd()->hitTest(QPoint(p.x - r.left + dleft, p.y - r.top + dtop)); - switch (res) { - case HitTestIcon: - if (menuHidden && getms() < menuHidden + 10) { - menuHidden = 0; - if (getms() < menuShown + GetDoubleClickTime()) { - Application::wnd()->close(); - } - } else { - QRect icon = Application::wnd()->iconRect(); - p.x = r.left - dleft + icon.left(); - p.y = r.top - dtop + icon.top() + icon.height(); - Application::wnd()->psUpdateSysMenu(Application::wnd()->windowHandle()->windowState()); - menuShown = getms(); - menuHidden = 0; - TrackPopupMenu(Application::wnd()->psMenu(), TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON, p.x, p.y, 0, hWnd, 0); - menuHidden = getms(); - } - return true; - }; - } return false; - - case WM_NCLBUTTONDBLCLK: { - POINTS p = MAKEPOINTS(lParam); - RECT r; - GetWindowRect(hWnd, &r); - HitTestType res = Application::wnd()->hitTest(QPoint(p.x - r.left + dleft, p.y - r.top + dtop)); - switch (res) { - case HitTestIcon: Application::wnd()->close(); return true; - }; - } return false; - - case WM_SYSCOMMAND: { - if (wParam == SC_MOUSEMENU) { - POINTS p = MAKEPOINTS(lParam); - Application::wnd()->psUpdateSysMenu(Application::wnd()->windowHandle()->windowState()); - TrackPopupMenu(Application::wnd()->psMenu(), TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON, p.x, p.y, 0, hWnd, 0); - } - } return false; - - case WM_COMMAND: { - if (HIWORD(wParam)) return false; - int cmd = LOWORD(wParam); - switch (cmd) { - case SC_CLOSE: Application::wnd()->close(); return true; - case SC_MINIMIZE: Application::wnd()->setWindowState(Qt::WindowMinimized); return true; - case SC_MAXIMIZE: Application::wnd()->setWindowState(Qt::WindowMaximized); return true; - case SC_RESTORE: Application::wnd()->setWindowState(Qt::WindowNoState); return true; - } - } return true; - - } - return false; - } - }; - _PsEventFilter *_psEventFilter = 0;*/ - -}; - -PsMainWindow::PsMainWindow(QWidget *parent) : QMainWindow(parent), -posInited(false), trayIcon(0), trayIconMenu(0), icon256(qsl(":/gui/art/iconround256.png")) { - - //tbCreatedMsgId = RegisterWindowMessage(L"TaskbarButtonCreated"); - icon16 = icon256.scaledToWidth(16, Qt::SmoothTransformation); - icon32 = icon256.scaledToWidth(32, Qt::SmoothTransformation); - //connect(&psIdleTimer, SIGNAL(timeout()), this, SLOT(psIdleTimeout())); - //psIdleTimer.setSingleShot(false); -} - -void PsMainWindow::psIdleTimeout() { - /*LASTINPUTINFO lii; - lii.cbSize = sizeof(LASTINPUTINFO); - BOOL res = GetLastInputInfo(&lii); - if (res) { - uint64 ticks = GetTickCount(); - if (lii.dwTime >= ticks - IdleMsecs) { - psIdle = false; - psIdleTimer.stop(); - if (App::main()) App::main()->setOnline(); - } - }*/ -} - -bool PsMainWindow::psIsActive() const { - return isActiveWindow() && isVisible() && !(windowState() & Qt::WindowMinimized); -} - -bool PsMainWindow::psIsOnline(int windowState) const { - if (windowState < 0) windowState = this->windowState(); - if (windowState & Qt::WindowMinimized) { - return false; - } else if (!isVisible()) { - return false; - } - /*LASTINPUTINFO lii; - lii.cbSize = sizeof(LASTINPUTINFO); - BOOL res = GetLastInputInfo(&lii); - if (res) { - uint64 ticks = GetTickCount(); - if (lii.dwTime < ticks - IdleMsecs) { - if (!psIdle) { - psIdle = true; - psIdleTimer.start(900); - } - return false; - } else { - psIdle = false; - psIdleTimer.stop(); - } - }*/ - return true; -} - -void PsMainWindow::psRefreshTaskbarIcon() { - /*QWidget *w = new QWidget(this); - w->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint); - w->setGeometry(x() + 1, y() + 1, 1, 1); - QPalette p(w->palette()); - p.setColor(QPalette::Background, st::titleBG->c); - QWindow *wnd = w->windowHandle(); - w->setPalette(p); - w->show(); - w->activateWindow(); - delete w;*/ -} - -void PsMainWindow::psUpdateWorkmode() { - /*switch (cWorkMode()) { - case dbiwmWindowAndTray: { - setupTrayIcon(); - HWND psOwner = (HWND)GetWindowLong(ps_hWnd, GWL_HWNDPARENT); - if (psOwner) { - SetWindowLong(ps_hWnd, GWL_HWNDPARENT, 0); - psRefreshTaskbarIcon(); - } - } break; - - case dbiwmTrayOnly: { - setupTrayIcon(); - HWND psOwner = (HWND)GetWindowLong(ps_hWnd, GWL_HWNDPARENT); - if (!psOwner) { - SetWindowLong(ps_hWnd, GWL_HWNDPARENT, (LONG)ps_tbHider_hWnd); - } - } break; - - case dbiwmWindowOnly: { - if (trayIconMenu) trayIconMenu->deleteLater(); - trayIconMenu = 0; - if (trayIcon) trayIcon->deleteLater(); - trayIcon = 0; - - HWND psOwner = (HWND)GetWindowLong(ps_hWnd, GWL_HWNDPARENT); - if (psOwner) { - SetWindowLong(ps_hWnd, GWL_HWNDPARENT, 0); - psRefreshTaskbarIcon(); - } - } break; - }*/ -} - -/*HICON qt_pixmapToWinHICON(const QPixmap &); -static HICON _qt_createHIcon(const QIcon &icon, int xSize, int ySize) { - if (!icon.isNull()) { - const QPixmap pm = icon.pixmap(icon.actualSize(QSize(xSize, ySize))); - if (!pm.isNull()) - return qt_pixmapToWinHICON(pm); - } - return 0; -}*/ - -void PsMainWindow::psUpdateCounter() { - int32 counter = App::histories().unreadFull; - style::color bg = (App::histories().unreadMuted < counter) ? st::counterBG : st::counterMuteBG; - QIcon icon; - QImage cicon16(icon16), cicon32(icon32); - if (counter > 0) { - { - QString cnt = (counter < 1000) ? QString("%1").arg(counter) : QString("..%1").arg(counter % 100, 2, 10, QChar('0')); - QPainter p16(&cicon16); - p16.setBrush(bg->b); - p16.setPen(Qt::NoPen); - p16.setRenderHint(QPainter::Antialiasing); - int32 fontSize = 8; - style::font f(fontSize); - int32 w = f->m.width(cnt), d = 2, r = 3; - p16.drawRoundedRect(QRect(16 - w - d * 2, 16 - f->height, w + d * 2, f->height), r, r); - p16.setFont(f->f); - - p16.setPen(st::counterColor->p); - - p16.drawText(16 - w - d, 16 - f->height + f->ascent, cnt); - } - /*if (!tbListInterface) { - QString cnt = (counter < 10000) ? QString("%1").arg(counter) : ((counter < 1000000) ? QString("%1K").arg(counter / 1000) : QString("%1M").arg(counter / 1000000)); - QPainter p32(&cicon32); - style::font f(10); - int32 w = f->m.width(cnt), d = 3, r = 6; - p32.setBrush(bg->b); - p32.setPen(Qt::NoPen); - p32.setRenderHint(QPainter::Antialiasing); - p32.drawRoundedRect(QRect(32 - w - d * 2, 0, w + d * 2, f->height - 1), r, r); - p32.setPen(st::counterColor->p); - p32.setFont(f->f); - p32.drawText(32 - w - d, f->ascent - 1, cnt); - }*/ - } - icon.addPixmap(QPixmap::fromImage(cicon16)); - icon.addPixmap(QPixmap::fromImage(cicon32)); - if (trayIcon) { - QIcon ticon; - QImage ticon16(icon16); - if (counter > 0) { - QString cnt = (counter < 1000) ? QString("%1").arg(counter) : QString("..%1").arg(counter % 100, 2, 10, QChar('0')); - { - QPainter p16(&ticon16); - p16.setBrush(bg->b); - p16.setPen(Qt::NoPen); - p16.setRenderHint(QPainter::Antialiasing); - int32 fontSize = 8; - style::font f(fontSize); - int32 w = f->m.width(cnt), d = 2, r = 3; - p16.drawRoundedRect(QRect(16 - w - d * 2, 16 - f->height, w + d * 2, f->height), r, r); - p16.setFont(f->f); - - p16.setPen(st::counterColor->p); - - p16.drawText(16 - w - d, 16 - f->height + f->ascent, cnt); - } - } - ticon.addPixmap(QPixmap::fromImage(ticon16)); - ticon.addPixmap(QPixmap::fromImage(cicon32)); - trayIcon->setIcon(ticon); - } - - /*setWindowTitle((counter > 0) ? qsl("Telegram (%1)").arg(counter) : qsl("Telegram")); - psDestroyIcons(); - ps_iconSmall = _qt_createHIcon(icon, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON)); - ps_iconBig = _qt_createHIcon(icon, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON)); - SendMessage(ps_hWnd, WM_SETICON, 0, (LPARAM)ps_iconSmall); - SendMessage(ps_hWnd, WM_SETICON, 1, (LPARAM)(ps_iconBig ? ps_iconBig : ps_iconSmall)); - if (tbListInterface) { - if (counter > 0) { - QString cnt = (counter < 1000) ? QString("%1").arg(counter) : QString("..%1").arg(counter % 100, 2, 10, QChar('0')); - QImage oicon16(16, 16, QImage::Format_ARGB32); - int32 cntSize = cnt.size(); - oicon16.fill(st::transparent->c); - { - QPainter p16(&oicon16); - p16.setBrush(bg->b); - p16.setPen(Qt::NoPen); - p16.setRenderHint(QPainter::Antialiasing); - int32 fontSize = (cntSize < 2) ? 12 : ((cntSize < 3) ? 12 : 8); - style::font f(fontSize); - int32 w = f->m.width(cnt), d = (cntSize < 2) ? 5 : ((cntSize < 3) ? 2 : 2), r = (cntSize < 2) ? 8 : ((cntSize < 3) ? 7 : 3); - p16.drawRoundedRect(QRect(16 - w - d * 2, 16 - f->height, w + d * 2, f->height), r, r); - p16.setFont(f->f); - - p16.setPen(st::counterColor->p); - - p16.drawText(16 - w - d, 16 - f->height + f->ascent, cnt); - } - QIcon oicon(QPixmap::fromImage(oicon16)); - ps_iconOverlay = _qt_createHIcon(oicon, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON)); - } - QString description = counter > 0 ? QString("%1 unread messages").arg(counter) : qsl("No unread messages"); - static WCHAR descriptionArr[1024]; - description.toWCharArray(descriptionArr); - tbListInterface->SetOverlayIcon(ps_hWnd, ps_iconOverlay, descriptionArr); - }*/ -} - -/*namespace { - HMONITOR enumMonitor = 0; - RECT enumMonitorWork; - - BOOL CALLBACK _monitorEnumProc( - _In_ HMONITOR hMonitor, - _In_ HDC hdcMonitor, - _In_ LPRECT lprcMonitor, - _In_ LPARAM dwData - ) { - MONITORINFOEX info; - info.cbSize = sizeof(info); - GetMonitorInfo(hMonitor, &info); - if (dwData == hashCrc32(info.szDevice, sizeof(info.szDevice))) { - enumMonitor = hMonitor; - enumMonitorWork = info.rcWork; - return FALSE; - } - return TRUE; - } -}*/ - -void PsMainWindow::psInitSize() { - setMinimumWidth(st::wndMinWidth); - setMinimumHeight(st::wndMinHeight); - - TWindowPos pos(cWindowPos()); - if (cDebug()) { // temp while design - pos.w = 800; - pos.h = 600; - } - QRect avail(QDesktopWidget().availableGeometry()); - bool maximized = false; - QRect geom(avail.x() + (avail.width() - st::wndDefWidth) / 2, avail.y() + (avail.height() - st::wndDefHeight) / 2, st::wndDefWidth, st::wndDefHeight); - if (pos.w && pos.h) { - if (pos.y < 0) pos.y = 0; - //enumMonitor = 0; - //EnumDisplayMonitors(0, 0, &_monitorEnumProc, pos.moncrc); - /*if (enumMonitor) { - int32 w = enumMonitorWork.right - enumMonitorWork.left, h = enumMonitorWork.bottom - enumMonitorWork.top; - if (w >= st::wndMinWidth && h >= st::wndMinHeight) { - if (pos.w > w) pos.w = w; - if (pos.h > h) pos.h = h; - pos.x += enumMonitorWork.left; - pos.y += enumMonitorWork.top; - if (pos.x < enumMonitorWork.right - 10 && pos.y < enumMonitorWork.bottom - 10) { - geom = QRect(pos.x, pos.y, pos.w, pos.h); - } - } - }*/ - maximized = pos.maximized; - } - setGeometry(geom); -} - -void PsMainWindow::psInitFrameless() { - psUpdatedPositionTimer.setSingleShot(true); - connect(&psUpdatedPositionTimer, SIGNAL(timeout()), this, SLOT(psSavePosition())); - - if (frameless) { -// setWindowFlags(Qt::FramelessWindowHint); - } - - connect(windowHandle(), SIGNAL(windowStateChanged(Qt::WindowState)), this, SLOT(psStateChanged(Qt::WindowState))); -} - -void PsMainWindow::psSavePosition(Qt::WindowState state) { - if (state == Qt::WindowActive) state = windowHandle()->windowState(); - if (state == Qt::WindowMinimized || !posInited) return; -/* - TWindowPos pos(cWindowPos()), curPos = pos; - - if (state == Qt::WindowMaximized) { - curPos.maximized = 1; - } else { - RECT w; - GetWindowRect(ps_hWnd, &w); - curPos.x = w.left; - curPos.y = w.top; - curPos.w = w.right - w.left; - curPos.h = w.bottom - w.top; - curPos.maximized = 0; - } - - HMONITOR hMonitor = MonitorFromWindow(ps_hWnd, MONITOR_DEFAULTTONEAREST); - if (hMonitor) { - MONITORINFOEX info; - info.cbSize = sizeof(info); - GetMonitorInfo(hMonitor, &info); - if (!curPos.maximized) { - curPos.x -= info.rcWork.left; - curPos.y -= info.rcWork.top; - } - curPos.moncrc = hashCrc32(info.szDevice, sizeof(info.szDevice)); - } - - if (curPos.w >= st::wndMinWidth && curPos.h >= st::wndMinHeight) { - if (curPos.x != pos.x || curPos.y != pos.y || curPos.w != pos.w || curPos.h != pos.h || curPos.moncrc != pos.moncrc || curPos.maximized != pos.maximized) { - cSetWindowPos(curPos); - App::writeConfig(); - } - }*/ -} - -void PsMainWindow::psUpdatedPosition() { - //psUpdatedPositionTimer.start(4000); -} - -void PsMainWindow::psStateChanged(Qt::WindowState state) { - psUpdateSysMenu(state); - psUpdateMargins(); - /*if (state == Qt::WindowMinimized && GetWindowLong(ps_hWnd, GWL_HWNDPARENT)) { - minimizeToTray(); - } - psSavePosition(state);*/ -} - -//Q_DECLARE_METATYPE(QMargins); -void PsMainWindow::psFirstShow() { - //_psShadowWindows.init(_shActive); - finished = false; - - //psUpdateMargins(); - - //_psShadowWindows.update(_PsShadowHidden); - bool showShadows = true; - - show(); - if (cWindowPos().maximized) { - setWindowState(Qt::WindowMaximized); - } - - if (cFromAutoStart()) { - if (cStartMinimized()) { - setWindowState(Qt::WindowMinimized); - if (cWorkMode() == dbiwmTrayOnly || cWorkMode() == dbiwmWindowAndTray) { - hide(); - } else { - show(); - } - showShadows = false; - } else { - show(); - } - } else { - show(); - } - posInited = true; - //if (showShadows) { - // _psShadowWindows.update(_PsShadowMoved | _PsShadowResized | _PsShadowShown); - //} -} - -bool PsMainWindow::psHandleTitle() { - //return useDWM; - return true; -} - -void PsMainWindow::psInitSysMenu() { - /*Qt::WindowStates states = windowState(); - ps_menu = GetSystemMenu(ps_hWnd, FALSE); - psUpdateSysMenu(windowHandle()->windowState());*/ -} - -void PsMainWindow::psUpdateSysMenu(Qt::WindowState state) { - /*if (!ps_menu) return; - - int menuToDisable = SC_RESTORE; - if (state == Qt::WindowMaximized) { - menuToDisable = SC_MAXIMIZE; - } else if (state == Qt::WindowMinimized) { - menuToDisable = SC_MINIMIZE; - } - int itemCount = GetMenuItemCount(ps_menu); - for (int i = 0; i < itemCount; ++i) { - MENUITEMINFO itemInfo = {0}; - itemInfo.cbSize = sizeof(itemInfo); - itemInfo.fMask = MIIM_TYPE | MIIM_STATE | MIIM_ID; - if (GetMenuItemInfo(ps_menu, i, TRUE, &itemInfo)) { - if (itemInfo.fType & MFT_SEPARATOR) { - continue; - } - if (itemInfo.wID && !(itemInfo.fState & MFS_DEFAULT)) { - UINT fOldState = itemInfo.fState, fState = itemInfo.fState & ~MFS_DISABLED; - if (itemInfo.wID == SC_CLOSE) { - fState |= MFS_DEFAULT; - } else if (itemInfo.wID == menuToDisable || (itemInfo.wID != SC_MINIMIZE && itemInfo.wID != SC_MAXIMIZE && itemInfo.wID != SC_RESTORE)) { - fState |= MFS_DISABLED; - } - itemInfo.fMask = MIIM_STATE; - itemInfo.fState = fState; - if (!SetMenuItemInfo(ps_menu, i, TRUE, &itemInfo)) { - DEBUG_LOG(("PS Error: could not set state %1 to menu item %2, old state %3, error %4").arg(fState).arg(itemInfo.wID).arg(fOldState).arg(GetLastError())); - DestroyMenu(ps_menu); - ps_menu = 0; - break; - } - } - } else { - DEBUG_LOG(("PS Error: could not get state, menu item %1 of %2, error %3").arg(i).arg(itemCount).arg(GetLastError())); - DestroyMenu(ps_menu); - ps_menu = 0; - break; - } - }*/ -} - -void PsMainWindow::psUpdateMargins() { - /*if (!useDWM) return; - - RECT r, a; - - GetClientRect(ps_hWnd, &r); - a = r; - - LONG style = GetWindowLong(ps_hWnd, GWL_STYLE), styleEx = GetWindowLong(ps_hWnd, GWL_EXSTYLE); - AdjustWindowRectEx(&a, style, false, styleEx); - simpleMargins = QMargins(a.left - r.left, a.top - r.top, r.right - a.right, r.bottom - a.bottom); - if (style & WS_MAXIMIZE) { - RECT w, m; - GetWindowRect(ps_hWnd, &w); - m = w; - - HMONITOR hMonitor = MonitorFromRect(&w, MONITOR_DEFAULTTONEAREST); - if (hMonitor) { - MONITORINFO mi; - mi.cbSize = sizeof(mi); - GetMonitorInfo(hMonitor, &mi); - m = mi.rcWork; - } - - dleft = w.left - m.left; - dtop = w.top - m.top; - - margins.setLeft(simpleMargins.left() - w.left + m.left); - margins.setRight(simpleMargins.right() - m.right + w.right); - margins.setBottom(simpleMargins.bottom() - m.bottom + w.bottom); - margins.setTop(simpleMargins.top() - w.top + m.top); - } else { - margins = simpleMargins; - dleft = dtop = 0; - } - - QPlatformNativeInterface *i = QGuiApplication::platformNativeInterface(); - i->setWindowProperty(windowHandle()->handle(), "WindowsCustomMargins", QVariant::fromValue(margins)); - if (!themeInited) { - themeInited = true; - if (useTheme) { - if (QSysInfo::WindowsVersion < QSysInfo::WV_WINDOWS8) { - setWindowTheme(ps_hWnd, L" ", L" "); - QApplication::setStyle(QStyleFactory::create("Windows")); - } - } - }*/ -} - -void PsMainWindow::psFlash() { - /*if (GetForegroundWindow() == ps_hWnd) return; - - FLASHWINFO info; - info.cbSize = sizeof(info); - info.hwnd = ps_hWnd; - info.dwFlags = FLASHW_ALL; - info.dwTimeout = 0; - info.uCount = 1; - FlashWindowEx(&info);*/ -} - -/*HWND PsMainWindow::psHwnd() const { - return ps_hWnd; -} - -HMENU PsMainWindow::psMenu() const { - return ps_menu; -}*/ - -/*void PsMainWindow::psDestroyIcons() { - if (ps_iconBig) { - DestroyIcon(ps_iconBig); - ps_iconBig = 0; - } - if (ps_iconSmall) { - DestroyIcon(ps_iconSmall); - ps_iconSmall = 0; - } - if (ps_iconOverlay) { - DestroyIcon(ps_iconOverlay); - ps_iconOverlay = 0; - } -}*/ - -PsMainWindow::~PsMainWindow() { - finished = true; - //if (ps_menu) DestroyMenu(ps_menu); - //psDestroyIcons(); - //_psShadowWindows.destroy(); - //psClearNotifyFast(); - //if (ps_tbHider_hWnd) DestroyWindow(ps_tbHider_hWnd); -} - -void PsMainWindow::psNotify(History *history, MsgId msgId) { - /*if (App::quiting()) return; - if (!cDesktopNotify()) { - history->clearNotifyFrom(); - } - if (notifyHistories.constFind(history) != notifyHistories.cend()) return; - notifyHistories.insert(history); - psShowNextNotify();*/ -} - -void PsMainWindow::psClearNotify(History *history) { - /*if (!history) { - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->unlinkHistory(); - } - for (NotifyHistories::const_iterator i = notifyHistories.cbegin(), e = notifyHistories.cend(); i != e; ++i) { - (*i)->clearNotifyFrom(); - } - notifyHistories.clear(); - return; - } - notifyHistories.remove(history); - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->unlinkHistory(history); - }*/ -} - -void PsMainWindow::psClearNotifyFast() { - /*notifyHistories.clear(); - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->deleteLater(); - } - notifyWindows.clear();*/ -} - -/*void PsMainWindow::psShowNextNotify(PsNotifyWindow *remove) { - if (App::quiting()) return; - - int32 count = NotifyWindows; - if (remove) { - for (PsNotifyWindows::iterator i = notifyWindows.begin(), e = notifyWindows.end(); i != e; ++i) { - if ((*i) == remove) { - notifyWindows.erase(i); - break; - } - } - } - QRect r = QApplication::desktop()->availableGeometry(App::wnd()); - int32 x = r.width() - st::notifyWidth - st::notifyDeltaX, y = r.bottom() - st::notifyHeight - st::notifyDeltaY; - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - int32 ind = (*i)->index(); - if (ind < 0) continue; - --count; - } - while (count > 0) { - HistoryItem *notify = 0; - for (NotifyHistories::iterator i = notifyHistories.begin(), e = notifyHistories.end(); i != e;) { - if ((*i)->notifyFrom) { - if (!notify || (*i)->notifyFrom->date < notify->date) { - notify = (*i)->notifyFrom; - } - ++i; - } else { - i = notifyHistories.erase(i); - } - } - if (notify) { - notifyWindows.push_back(new PsNotifyWindow(notify, x, y)); - notify->history()->getNextNotifyFrom(); - --count; - } else { - break; - } - } - count = NotifyWindows - count; - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - int32 ind = (*i)->index(); - if (ind < 0) continue; - --count; - (*i)->moveTo(x, y - count * (st::notifyHeight + st::notifyDeltaY)); - } -}*/ - -void PsMainWindow::psStopHiding() { - /*for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->stopHiding(); - }*/ -} - -void PsMainWindow::psStartHiding() { - /*for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->startHiding(); - }*/ -} - -void PsMainWindow::psUpdateNotifies() { - /*for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->updatePeerPhoto(); - }*/ -} - -void PsMainWindow::psNotifySettingGot() { -} - -/*PsNotifyWindow::PsNotifyWindow(HistoryItem *item, int32 x, int32 y) : history(item->history()), aOpacity(0), _index(0), hiding(false), started(GetTickCount()), - alphaDuration(st::notifyFastAnim), posDuration(st::notifyFastAnim), aY(y + st::notifyHeight + st::notifyDeltaY), close(this, st::notifyClose), aOpacityFunc(st::notifyFastAnimFunc) { - - int32 w = st::notifyWidth, h = st::notifyHeight; - QImage img(w, h, QImage::Format_ARGB32_Premultiplied); - img.fill(st::notifyBG->c); - - { - QPainter p(&img); - p.setPen(st::notifyBorder->p); - p.setBrush(Qt::NoBrush); - p.drawRect(0, 0, w - 1, h - 1); - - if (history->peer->photo->loaded()) { - p.drawPixmap(st::notifyPhotoPos.x(), st::notifyPhotoPos.y(), history->peer->photo->pix(st::notifyPhotoSize)); - } else { - MTP::clearLoaderPriorities(); - peerPhoto = history->peer->photo; - peerPhoto->load(true, true); - } - - int32 itemWidth = w - st::notifyPhotoPos.x() - st::notifyPhotoSize - st::notifyTextLeft - st::notifyClosePos.x() - st::notifyClose.width; - - QRect rectForName(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyTextTop, itemWidth, st::msgNameFont->height); - if (history->peer->chat) { - p.drawPixmap(QPoint(rectForName.left() + st::dlgChatImgLeft, rectForName.top() + st::dlgChatImgTop), App::sprite(), st::dlgChatImg); - rectForName.setLeft(rectForName.left() + st::dlgChatImgSkip); - } - - QDateTime now(QDateTime::currentDateTime()), lastTime(item->date); - QDate nowDate(now.date()), lastDate(lastTime.date()); - QString dt = lastTime.toString(qsl("hh:mm")); - int32 dtWidth = st::dlgHistFont->m.width(dt); - rectForName.setWidth(rectForName.width() - dtWidth - st::dlgDateSkip); - p.setFont(st::dlgDateFont->f); - p.setPen(st::dlgDateColor->p); - p.drawText(rectForName.left() + rectForName.width() + st::dlgDateSkip, rectForName.top() + st::dlgHistFont->ascent, dt); - - const HistoryItem *textCachedFor = 0; - Text itemTextCache(itemWidth); - bool active = false; - item->drawInDialog(p, QRect(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyItemTop + st::msgNameFont->height, itemWidth, 2 * st::dlgFont->height), active, textCachedFor, itemTextCache); - - p.setPen(st::dlgNameColor->p); - history->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); - } - pm = QPixmap::fromImage(img); - - hideTimer.setSingleShot(true); - connect(&hideTimer, SIGNAL(timeout()), this, SLOT(hideByTimer())); - - inputTimer.setSingleShot(true); - connect(&inputTimer, SIGNAL(timeout()), this, SLOT(checkLastInput())); - - connect(&close, SIGNAL(clicked()), this, SLOT(unlinkHistory())); - close.setAcceptBoth(true); - close.move(w - st::notifyClose.width - st::notifyClosePos.x(), st::notifyClosePos.y()); - close.show(); - - aY.start(y); - setGeometry(x, aY.current(), st::notifyWidth, st::notifyHeight); - - aOpacity.start(1); - setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint); - - show(); - - setWindowOpacity(aOpacity.current()); - - alphaDuration = posDuration = st::notifyFastAnim; - anim::start(this); - - checkLastInput(); -} - -void PsNotifyWindow::checkLastInput() { - LASTINPUTINFO lii; - lii.cbSize = sizeof(LASTINPUTINFO); - BOOL res = GetLastInputInfo(&lii); - if (!res || lii.dwTime >= started) { - hideTimer.start(st::notifyWaitLongHide); - } else { - inputTimer.start(300); - } -} - -void PsNotifyWindow::moveTo(int32 x, int32 y, int32 index) { - if (index >= 0) { - _index = index; - } - move(x, aY.current()); - aY.start(y); - aOpacity.restart(); - posDuration = st::notifyFastAnim; - anim::start(this); -} - -void PsNotifyWindow::updatePeerPhoto() { - if (!peerPhoto->isNull() && peerPhoto->loaded()) { - QImage img(pm.toImage()); - { - QPainter p(&img); - p.drawPixmap(st::notifyPhotoPos.x(), st::notifyPhotoPos.y(), peerPhoto->pix(st::notifyPhotoSize)); - } - peerPhoto = ImagePtr(); - pm = QPixmap::fromImage(img); - update(); - } -} - -void PsNotifyWindow::unlinkHistory(History *hist) { - if (!hist || hist == history) { - animHide(st::notifyFastAnim, st::notifyFastAnimFunc); - history = 0; - App::wnd()->psShowNextNotify(); - } -} - -void PsNotifyWindow::enterEvent(QEvent *e) { - if (!history) return; - if (App::wnd()) App::wnd()->psStopHiding(); -} - -void PsNotifyWindow::leaveEvent(QEvent *e) { - if (!history) return; - App::wnd()->psStartHiding(); -} - -void PsNotifyWindow::startHiding() { - hideTimer.start(st::notifyWaitShortHide); -} - -void PsNotifyWindow::mousePressEvent(QMouseEvent *e) { - if (!history) return; - if (e->button() == Qt::RightButton) { - unlinkHistory(); - } else if (history) { - App::wnd()->showFromTray(); - App::wnd()->hideSettings(); - App::main()->showPeer(history->peer->id, false, true); - e->ignore(); - } -} - -void PsNotifyWindow::paintEvent(QPaintEvent *e) { - QPainter p(this); - p.drawPixmap(0, 0, pm); -} - -void PsNotifyWindow::animHide(float64 duration, anim::transition func) { - if (!history) return; - alphaDuration = duration; - aOpacityFunc = func; - aOpacity.start(0); - aY.restart(); - hiding = true; - anim::start(this); -} - -void PsNotifyWindow::stopHiding() { - if (!history) return; - alphaDuration = st::notifyFastAnim; - aOpacityFunc = st::notifyFastAnimFunc; - aOpacity.start(1); - aY.restart(); - hiding = false; - hideTimer.stop(); - anim::start(this); -} - -void PsNotifyWindow::hideByTimer() { - if (!history) return; - animHide(st::notifySlowHide, st::notifySlowHideFunc); -} - -bool PsNotifyWindow::animStep(float64 ms) { - float64 dtAlpha = ms / alphaDuration, dtPos = ms / posDuration; - if (dtAlpha >= 1) { - aOpacity.finish(); - if (hiding) { - deleteLater(); - } - } else { - aOpacity.update(dtAlpha, aOpacityFunc); - } - setWindowOpacity(aOpacity.current()); - if (dtPos >= 1) { - aY.finish(); - } else { - aY.update(dtPos, anim::linear); - } - move(x(), aY.current()); - update(); - return (dtAlpha < 1 || !hiding && dtPos < 1); -} - -PsNotifyWindow::~PsNotifyWindow() { - if (App::wnd()) App::wnd()->psShowNextNotify(this); -}*/ - -PsApplication::PsApplication(int argc, char *argv[]) : QApplication(argc, argv) { -} - -void PsApplication::psInstallEventFilter() { - /*delete _psEventFilter; - _psEventFilter = new _PsEventFilter(); - installNativeEventFilter(_psEventFilter);*/ -} - -PsApplication::~PsApplication() { - //delete _psEventFilter; - //_psEventFilter = 0; -} - -PsUpdateDownloader::PsUpdateDownloader(QThread *thread, const MTPDhelp_appUpdate &update) : already(0), reply(0), full(0) { - updateUrl = qs(update.vurl); - moveToThread(thread); - manager.moveToThread(thread); - App::setProxySettings(manager); - - connect(thread, SIGNAL(started()), this, SLOT(start())); - initOutput(); -} - -PsUpdateDownloader::PsUpdateDownloader(QThread *thread, const QString &url) : already(0), reply(0), full(0) { - updateUrl = url; - moveToThread(thread); - manager.moveToThread(thread); - App::setProxySettings(manager); - - connect(thread, SIGNAL(started()), this, SLOT(start())); - initOutput(); -} - -void PsUpdateDownloader::initOutput() { - QString fileName; - QRegularExpressionMatch m = QRegularExpression(qsl("/([^/\\?]+)(\\?|$)")).match(updateUrl); - if (m.hasMatch()) { - fileName = m.captured(1).replace(QRegularExpression(qsl("[^a-zA-Z0-9_\\-]")), QString()); - } - if (fileName.isEmpty()) { - fileName = qsl("tupdate-%1").arg(rand()); - } - QString dirStr = cWorkingDir() + qsl("tupdates/"); - fileName = dirStr + fileName; - QFileInfo file(fileName); - - QDir dir(dirStr); - if (dir.exists()) { - QFileInfoList all = dir.entryInfoList(QDir::Files); - for (QFileInfoList::iterator i = all.begin(), e = all.end(); i != e; ++i) { - if (i->absoluteFilePath() != file.absoluteFilePath()) { - QFile::remove(i->absoluteFilePath()); - } - } - } else { - dir.mkdir(dir.absolutePath()); - } - outputFile.setFileName(fileName); - if (file.exists()) { - uint64 fullSize = file.size(); - if (fullSize < INT_MAX) { - int32 goodSize = (int32)fullSize; - if (goodSize % UpdateChunk) { - goodSize = goodSize - (goodSize % UpdateChunk); - if (goodSize) { - if (outputFile.open(QIODevice::ReadOnly)) { - QByteArray goodData = outputFile.readAll().mid(0, goodSize); - outputFile.close(); - if (outputFile.open(QIODevice::WriteOnly)) { - outputFile.write(goodData); - outputFile.close(); - - QMutexLocker lock(&mutex); - already = goodSize; - } - } - } - } else { - QMutexLocker lock(&mutex); - already = goodSize; - } - } - if (!already) { - QFile::remove(fileName); - } - } -} - -void PsUpdateDownloader::start() { - sendRequest(); -} - -void PsUpdateDownloader::sendRequest() { - QNetworkRequest req(updateUrl); - QByteArray rangeHeaderValue = "bytes=" + QByteArray::number(already) + "-";// + QByteArray::number(already + cUpdateChunk() - 1); - req.setRawHeader("Range", rangeHeaderValue); - req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true); - if (reply) reply->deleteLater(); - reply = manager.get(req); - connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(partFinished(qint64,qint64))); - connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(partFailed(QNetworkReply::NetworkError))); - connect(reply, SIGNAL(metaDataChanged()), this, SLOT(partMetaGot())); -} - -void PsUpdateDownloader::partMetaGot() { - typedef QList Pairs; - Pairs pairs = reply->rawHeaderPairs(); - for (Pairs::iterator i = pairs.begin(), e = pairs.end(); i != e; ++i) { - if (QString::fromUtf8(i->first).toLower() == "content-range") { - QRegularExpressionMatch m = QRegularExpression(qsl("/(\\d+)([^\\d]|$)")).match(QString::fromUtf8(i->second)); - if (m.hasMatch()) { - { - QMutexLocker lock(&mutex); - full = m.captured(1).toInt(); - } - emit App::app()->updateDownloading(already, full); - } - } - } -} - -int32 PsUpdateDownloader::ready() { - QMutexLocker lock(&mutex); - return already; -} - -int32 PsUpdateDownloader::size() { - QMutexLocker lock(&mutex); - return full; -} - -void PsUpdateDownloader::partFinished(qint64 got, qint64 total) { - if (!reply) return; - - QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); - if (statusCode.isValid()) { - int status = statusCode.toInt(); - if (status != 200 && status != 206 && status != 416) { - LOG(("Update Error: Bad HTTP status received in partFinished(): %1").arg(status)); - return fatalFail(); - } - } - - if (!already && !full) { - QMutexLocker lock(&mutex); - full = total; - } - DEBUG_LOG(("Update Info: part %1 of %2").arg(got).arg(total)); - - if (!outputFile.isOpen()) { - if (!outputFile.open(QIODevice::Append)) { - LOG(("Update Error: Could not open output file '%1' for appending").arg(outputFile.fileName())); - return fatalFail(); - } - } - QByteArray r = reply->readAll(); - if (!r.isEmpty()) { - outputFile.write(r); - - QMutexLocker lock(&mutex); - already += r.size(); - } - if (got >= total) { - reply->deleteLater(); - reply = 0; - outputFile.close(); - unpackUpdate(); - } else { - emit App::app()->updateDownloading(already, full); - } -} - -void PsUpdateDownloader::partFailed(QNetworkReply::NetworkError e) { - if (!reply) return; - - QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); - reply->deleteLater(); - reply = 0; - if (statusCode.isValid()) { - int status = statusCode.toInt(); - if (status == 416) { // Requested range not satisfiable - outputFile.close(); - unpackUpdate(); - return; - } - } - LOG(("Update Error: failed to download part starting from %1, error %2").arg(already).arg(e)); - emit App::app()->updateFailed(); -} - -void PsUpdateDownloader::deleteDir(const QString &dir) { - /*std::wstring wDir = QDir::toNativeSeparators(dir).toStdWString(); - WCHAR path[4096]; - memcpy(path, wDir.c_str(), (wDir.size() + 1) * sizeof(WCHAR)); - path[wDir.size() + 1] = 0; - SHFILEOPSTRUCT file_op = { - NULL, - FO_DELETE, - path, - L"", - FOF_NOCONFIRMATION | - FOF_NOERRORUI | - FOF_SILENT, - false, - 0, - L"" - }; - int res = SHFileOperation(&file_op);*/ -} - -void PsUpdateDownloader::fatalFail() { - clearAll(); - emit App::app()->updateFailed(); -} - -void PsUpdateDownloader::clearAll() { - deleteDir(cWorkingDir() + qsl("tupdates")); -} - -void PsUpdateDownloader::unpackUpdate() { - /*QByteArray packed; - if (!outputFile.open(QIODevice::ReadOnly)) { - LOG(("Update Error: cant read updates file!")); - return fatalFail(); - } - - const int32 hSigLen = 128, hShaLen = 20, hPropsLen = LZMA_PROPS_SIZE, hOriginalSizeLen = sizeof(int32), hSize = hSigLen + hShaLen + hPropsLen + hOriginalSizeLen; // header - - QByteArray compressed = outputFile.readAll(); - int32 compressedLen = compressed.size() - hSize; - if (compressedLen <= 0) { - LOG(("Update Error: bad compressed size: %1").arg(compressed.size())); - return fatalFail(); - } - outputFile.close(); - - QString tempDirPath = cWorkingDir() + qsl("tupdates/temp"), readyDirPath = cWorkingDir() + qsl("tupdates/ready"); - deleteDir(tempDirPath); - deleteDir(readyDirPath); - - QDir tempDir(tempDirPath), readyDir(readyDirPath); - if (tempDir.exists() || readyDir.exists()) { - LOG(("Update Error: cant clear tupdates/temp or tupdates/ready dir!")); - return fatalFail(); - } - - uchar sha1Buffer[20]; - bool goodSha1 = !memcmp(compressed.constData() + hSigLen, hashSha1(compressed.constData() + hSigLen + hShaLen, compressedLen + hPropsLen + hOriginalSizeLen, sha1Buffer), hShaLen); - if (!goodSha1) { - LOG(("Update Error: bad SHA1 hash of update file!")); - return fatalFail(); - } - - RSA *pbKey = PEM_read_bio_RSAPublicKey(BIO_new_mem_buf(const_cast(UpdatesPublicKey), -1), 0, 0, 0); - if (!pbKey) { - LOG(("Update Error: cant read public rsa key!")); - return fatalFail(); - } - if (RSA_verify(NID_sha1, (const uchar*)(compressed.constData() + hSigLen), hShaLen, (const uchar*)(compressed.constData()), hSigLen, pbKey) != 1) { // verify signature - RSA_free(pbKey); - LOG(("Update Error: bad RSA signature of update file!")); - return fatalFail(); - } - RSA_free(pbKey); - - QByteArray uncompressed; - - int32 uncompressedLen; - memcpy(&uncompressedLen, compressed.constData() + hSigLen + hShaLen + hPropsLen, hOriginalSizeLen); - uncompressed.resize(uncompressedLen); - - size_t resultLen = uncompressed.size(); - SizeT srcLen = compressedLen; - int uncompressRes = LzmaUncompress((uchar*)uncompressed.data(), &resultLen, (const uchar*)(compressed.constData() + hSize), &srcLen, (const uchar*)(compressed.constData() + hSigLen + hShaLen), LZMA_PROPS_SIZE); - if (uncompressRes != SZ_OK) { - LOG(("Update Error: could not uncompress lzma, code: %1").arg(uncompressRes)); - return fatalFail(); - } - - tempDir.mkdir(tempDir.absolutePath()); - - quint32 version; - { - QBuffer buffer(&uncompressed); - buffer.open(QIODevice::ReadOnly); - QDataStream stream(&buffer); - stream.setVersion(QDataStream::Qt_5_1); - - stream >> version; - if (stream.status() != QDataStream::Ok) { - LOG(("Update Error: cant read version from downloaded stream, status: %1").arg(stream.status())); - return fatalFail(); - } - if (version <= AppVersion) { - LOG(("Update Error: downloaded version %1 is not greater, than mine %2").arg(version).arg(AppVersion)); - return fatalFail(); - } - - quint32 filesCount; - stream >> filesCount; - if (stream.status() != QDataStream::Ok) { - LOG(("Update Error: cant read files count from downloaded stream, status: %1").arg(stream.status())); - return fatalFail(); - } - if (!filesCount) { - LOG(("Update Error: update is empty!")); - return fatalFail(); - } - for (int32 i = 0; i < filesCount; ++i) { - QString relativeName; - quint32 fileSize; - QByteArray fileInnerData; - - stream >> relativeName >> fileSize >> fileInnerData; - if (stream.status() != QDataStream::Ok) { - LOG(("Update Error: cant read file from downloaded stream, status: %1").arg(stream.status())); - return fatalFail(); - } - if (fileSize != fileInnerData.size()) { - LOG(("Update Error: bad file size %1 not matching data size %2").arg(fileSize).arg(fileInnerData.size())); - return fatalFail(); - } - - QFile f(tempDirPath + '/' + relativeName); - if (!f.open(QIODevice::WriteOnly)) { - LOG(("Update Error: cant open file '%1' for writing").arg(tempDirPath + '/' + relativeName)); - return fatalFail(); - } - if (f.write(fileInnerData) != fileSize) { - f.close(); - LOG(("Update Error: cant write file '%1'").arg(tempDirPath + '/' + relativeName)); - return fatalFail(); - } - f.close(); - } - - // create tdata/version file - tempDir.mkdir(QDir(tempDirPath + qsl("/tdata")).absolutePath()); - std::wstring versionString = ((version % 1000) ? QString("%1.%2.%3").arg(int(version / 1000000)).arg(int((version % 1000000) / 1000)).arg(int(version % 1000)) : QString("%1.%2").arg(int(version / 1000000)).arg(int((version % 1000000) / 1000))).toStdWString(); - DWORD versionNum = DWORD(version), versionLen = DWORD(versionString.size() * sizeof(WCHAR)); - WCHAR versionStr[32]; - memcpy(versionStr, versionString.c_str(), versionLen); - - QFile fVersion(tempDirPath + qsl("/tdata/version")); - if (!fVersion.open(QIODevice::WriteOnly)) { - LOG(("Update Error: cant write version file '%1'").arg(tempDirPath + qsl("/version"))); - return fatalFail(); - } - fVersion.write((const char*)&versionNum, sizeof(DWORD)); - fVersion.write((const char*)&versionLen, sizeof(DWORD)); - fVersion.write((const char*)&versionStr[0], versionLen); - fVersion.close(); - } - - if (!tempDir.rename(tempDir.absolutePath(), readyDir.absolutePath())) { - LOG(("Update Error: cant rename temp dir '%1' to ready dir '%2'").arg(tempDir.absolutePath()).arg(readyDir.absolutePath())); - return fatalFail(); - } - deleteDir(tempDirPath); - outputFile.remove(); - - emit App::app()->updateReady();*/ -} - -PsUpdateDownloader::~PsUpdateDownloader() { - delete reply; - reply = 0; -} - -/*namespace { - BOOL CALLBACK _ActivateProcess(HWND hWnd, LPARAM lParam) { - uint64 &processId(*(uint64*)lParam); - - DWORD dwProcessId; - ::GetWindowThreadProcessId(hWnd, &dwProcessId); - - if ((uint64)dwProcessId == processId) { // found top-level window - static const int32 nameBufSize = 1024; - WCHAR nameBuf[nameBufSize]; - int32 len = GetWindowText(hWnd, nameBuf, nameBufSize); - if (len && len < nameBufSize) { - if (QRegularExpression(qsl("^Telegram(\\s*\\(\\d+\\))?$")).match(QString::fromStdWString(nameBuf)).hasMatch()) { - BOOL res = ::SetForegroundWindow(hWnd); - return FALSE; - } - } - } - return TRUE; - } -}*/ - -void psActivateProcess(uint64 pid) { - //::EnumWindows((WNDENUMPROC)_ActivateProcess, (LPARAM)&pid); -} - -QString psCurrentCountry() { - /*int chCount = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, 0, 0); - if (chCount && chCount < 128) { - WCHAR wstrCountry[128]; - int len = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, wstrCountry, chCount); - return len ? QString::fromStdWString(std::wstring(wstrCountry)) : QString::fromLatin1(DefaultCountry); - } - return QString::fromLatin1(DefaultCountry);*/ - return QString(""); - //TODO -} - -/*namespace { - QString langById(int lngId) { - int primary = lngId & 0xFF; - switch (primary) { - case 0x36: return qsl("af"); - case 0x1C: return qsl("sq"); - case 0x5E: return qsl("am"); - case 0x01: return qsl("ar"); - case 0x2B: return qsl("hy"); - case 0x4D: return qsl("as"); - case 0x2C: return qsl("az"); - case 0x45: return qsl("bn"); - case 0x6D: return qsl("ba"); - case 0x2D: return qsl("eu"); - case 0x23: return qsl("be"); - case 0x1A: - if (lngId == LANG_CROATIAN) { - return qsl("hr"); - } else if (lngId == LANG_BOSNIAN_NEUTRAL || lngId == LANG_BOSNIAN) { - return qsl("bs"); - } - return qsl("sr"); - break; - case 0x7E: return qsl("br"); - case 0x02: return qsl("bg"); - case 0x92: return qsl("ku"); - case 0x03: return qsl("ca"); - case 0x04: return qsl("zh"); - case 0x83: return qsl("co"); - case 0x05: return qsl("cs"); - case 0x06: return qsl("da"); - case 0x65: return qsl("dv"); - case 0x13: return qsl("nl"); - case 0x09: return qsl("en"); - case 0x25: return qsl("et"); - case 0x38: return qsl("fo"); - case 0x0B: return qsl("fi"); - case 0x0c: return qsl("fr"); - case 0x62: return qsl("fy"); - case 0x56: return qsl("gl"); - case 0x37: return qsl("ka"); - case 0x07: return qsl("de"); - case 0x08: return qsl("el"); - case 0x6F: return qsl("kl"); - case 0x47: return qsl("gu"); - case 0x68: return qsl("ha"); - case 0x0D: return qsl("he"); - case 0x39: return qsl("hi"); - case 0x0E: return qsl("hu"); - case 0x0F: return qsl("is"); - case 0x70: return qsl("ig"); - case 0x21: return qsl("id"); - case 0x5D: return qsl("iu"); - case 0x3C: return qsl("ga"); - case 0x34: return qsl("xh"); - case 0x35: return qsl("zu"); - case 0x10: return qsl("it"); - case 0x11: return qsl("ja"); - case 0x4B: return qsl("kn"); - case 0x3F: return qsl("kk"); - case 0x53: return qsl("kh"); - case 0x87: return qsl("rw"); - case 0x12: return qsl("ko"); - case 0x40: return qsl("ky"); - case 0x54: return qsl("lo"); - case 0x26: return qsl("lv"); - case 0x27: return qsl("lt"); - case 0x6E: return qsl("lb"); - case 0x2F: return qsl("mk"); - case 0x3E: return qsl("ms"); - case 0x4C: return qsl("ml"); - case 0x3A: return qsl("mt"); - case 0x81: return qsl("mi"); - case 0x4E: return qsl("mr"); - case 0x50: return qsl("mn"); - case 0x61: return qsl("ne"); - case 0x14: return qsl("no"); - case 0x82: return qsl("oc"); - case 0x48: return qsl("or"); - case 0x63: return qsl("ps"); - case 0x29: return qsl("fa"); - case 0x15: return qsl("pl"); - case 0x16: return qsl("pt"); - case 0x67: return qsl("ff"); - case 0x46: return qsl("pa"); - case 0x18: return qsl("ro"); - case 0x17: return qsl("rm"); - case 0x19: return qsl("ru"); - case 0x3B: return qsl("se"); - case 0x4F: return qsl("sa"); - case 0x32: return qsl("tn"); - case 0x59: return qsl("sd"); - case 0x5B: return qsl("si"); - case 0x1B: return qsl("sk"); - case 0x24: return qsl("sl"); - case 0x0A: return qsl("es"); - case 0x41: return qsl("sw"); - case 0x1D: return qsl("sv"); - case 0x28: return qsl("tg"); - case 0x49: return qsl("ta"); - case 0x44: return qsl("tt"); - case 0x4A: return qsl("te"); - case 0x1E: return qsl("th"); - case 0x51: return qsl("bo"); - case 0x73: return qsl("ti"); - case 0x1F: return qsl("tr"); - case 0x42: return qsl("tk"); - case 0x22: return qsl("uk"); - case 0x20: return qsl("ur"); - case 0x80: return qsl("ug"); - case 0x43: return qsl("uz"); - case 0x2A: return qsl("vi"); - case 0x52: return qsl("cy"); - case 0x88: return qsl("wo"); - case 0x78: return qsl("ii"); - case 0x6A: return qsl("yo"); - } - return QString::fromLatin1(DefaultLanguage); - } -}*/ - -QString psCurrentLanguage() { -/* int chCount = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SNAME, 0, 0); - if (chCount && chCount < 128) { - WCHAR wstrLocale[128]; - int len = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SNAME, wstrLocale, chCount); - if (!len) return QString::fromLatin1(DefaultLanguage); - QString locale = QString::fromStdWString(std::wstring(wstrLocale)); - QRegularExpressionMatch m = QRegularExpression("(^|[^a-z])([a-z]{2})-").match(locale); - if (m.hasMatch()) { - return m.captured(2); - } - } - chCount = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ILANGUAGE, 0, 0); - if (chCount && chCount < 128) { - WCHAR wstrLocale[128]; - int len = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ILANGUAGE, wstrLocale, chCount), lngId = 0; - if (len < 5) return QString::fromLatin1(DefaultLanguage); - - for (int i = 0; i < 4; ++i) { - WCHAR ch = wstrLocale[i]; - lngId *= 16; - if (ch >= WCHAR('0') && ch <= WCHAR('9')) { - lngId += (ch - WCHAR('0')); - } else if (ch >= WCHAR('A') && ch <= WCHAR('F')) { - lngId += (10 + ch - WCHAR('A')); - } else { - return QString::fromLatin1(DefaultLanguage); - } - } - return langById(lngId); - } - return QString::fromLatin1(DefaultLanguage);*/ - return QString("en"); -} - -QString psAppDataPath() { - /*static const int maxFileLen = MAX_PATH * 10; - WCHAR wstrPath[maxFileLen]; - if (GetEnvironmentVariable(L"APPDATA", wstrPath, maxFileLen)) { - QDir appData(QString::fromStdWString(std::wstring(wstrPath))); - return appData.absolutePath() + "/" + QString::fromWCharArray(AppName) + "/"; - }*/ - return QString(); -} - -QString psCurrentExeDirectory() { - /*LPWSTR *args; - int argsCount; - args = CommandLineToArgvW(GetCommandLine(), &argsCount); - if (args) { - QFileInfo info(QDir::fromNativeSeparators(QString::fromWCharArray(args[0]))); - if (info.isFile()) { - return info.absoluteDir().absolutePath() + '/'; - } - LocalFree(args); - }*/ - return QString(); -} - -void psDoCleanup() { - try { - psAutoStart(false, true); - } catch (...) { - } -} - -int psCleanup() { - /*__try - { - psDoCleanup(); - } - __except(EXCEPTION_EXECUTE_HANDLER) - { - return 0; - }*/ - return 0; -} - -void psDoFixPrevious() { - /*try { - static const int bufSize = 4096; - DWORD checkType, checkSize = bufSize * 2; - WCHAR checkStr[bufSize]; - - QString appId = QString::fromStdWString(AppId); - QString newKeyStr1 = QString("Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%1_is1").arg(appId); - QString newKeyStr2 = QString("Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%1_is1").arg(appId); - QString oldKeyStr1 = QString("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%1_is1").arg(appId); - QString oldKeyStr2 = QString("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%1_is1").arg(appId); - HKEY newKey1, newKey2, oldKey1, oldKey2; - LSTATUS newKeyRes1 = RegOpenKeyEx(HKEY_CURRENT_USER, newKeyStr1.toStdWString().c_str(), 0, KEY_READ, &newKey1); - LSTATUS newKeyRes2 = RegOpenKeyEx(HKEY_CURRENT_USER, newKeyStr2.toStdWString().c_str(), 0, KEY_READ, &newKey2); - LSTATUS oldKeyRes1 = RegOpenKeyEx(HKEY_LOCAL_MACHINE, oldKeyStr1.toStdWString().c_str(), 0, KEY_READ, &oldKey1); - LSTATUS oldKeyRes2 = RegOpenKeyEx(HKEY_LOCAL_MACHINE, oldKeyStr2.toStdWString().c_str(), 0, KEY_READ, &oldKey2); - - bool existNew1 = (newKeyRes1 == ERROR_SUCCESS) && (RegQueryValueEx(newKey1, L"InstallDate", 0, &checkType, (BYTE*)checkStr, &checkSize) == ERROR_SUCCESS); checkSize = bufSize * 2; - bool existNew2 = (newKeyRes2 == ERROR_SUCCESS) && (RegQueryValueEx(newKey2, L"InstallDate", 0, &checkType, (BYTE*)checkStr, &checkSize) == ERROR_SUCCESS); checkSize = bufSize * 2; - bool existOld1 = (oldKeyRes1 == ERROR_SUCCESS) && (RegQueryValueEx(oldKey1, L"InstallDate", 0, &checkType, (BYTE*)checkStr, &checkSize) == ERROR_SUCCESS); checkSize = bufSize * 2; - bool existOld2 = (oldKeyRes2 == ERROR_SUCCESS) && (RegQueryValueEx(oldKey2, L"InstallDate", 0, &checkType, (BYTE*)checkStr, &checkSize) == ERROR_SUCCESS); checkSize = bufSize * 2; - - if (newKeyRes1 == ERROR_SUCCESS) RegCloseKey(newKey1); - if (newKeyRes2 == ERROR_SUCCESS) RegCloseKey(newKey2); - if (oldKeyRes1 == ERROR_SUCCESS) RegCloseKey(oldKey1); - if (oldKeyRes2 == ERROR_SUCCESS) RegCloseKey(oldKey2); - - if (existNew1 || existNew2) { - oldKeyRes1 = existOld1 ? RegDeleteKey(HKEY_LOCAL_MACHINE, oldKeyStr1.toStdWString().c_str()) : ERROR_SUCCESS; - oldKeyRes2 = existOld2 ? RegDeleteKey(HKEY_LOCAL_MACHINE, oldKeyStr2.toStdWString().c_str()) : ERROR_SUCCESS; - } - - QString userDesktopLnk, commonDesktopLnk; - WCHAR userDesktopFolder[MAX_PATH], commonDesktopFolder[MAX_PATH]; - HRESULT userDesktopRes = SHGetFolderPath(0, CSIDL_DESKTOPDIRECTORY, 0, SHGFP_TYPE_CURRENT, userDesktopFolder); - HRESULT commonDesktopRes = SHGetFolderPath(0, CSIDL_COMMON_DESKTOPDIRECTORY, 0, SHGFP_TYPE_CURRENT, commonDesktopFolder); - if (SUCCEEDED(userDesktopRes)) { - userDesktopLnk = QString::fromWCharArray(userDesktopFolder) + "\\Telegram.lnk"; - } - if (SUCCEEDED(commonDesktopRes)) { - commonDesktopLnk = QString::fromWCharArray(commonDesktopFolder) + "\\Telegram.lnk"; - } - QFile userDesktopFile(userDesktopLnk), commonDesktopFile(commonDesktopLnk); - if (QFile::exists(userDesktopLnk) && QFile::exists(commonDesktopLnk) && userDesktopLnk != commonDesktopLnk) { - bool removed = QFile::remove(commonDesktopLnk); - } - } catch (...) { - }*/ -} - -int psFixPrevious() { - /*__try - { - psDoFixPrevious(); - } - __except(EXCEPTION_EXECUTE_HANDLER) - { - return 0; - }*/ - return 0; -} - -bool psCheckReadyUpdate() { - /*QString readyPath = cWorkingDir() + qsl("tupdates/ready"); - if (!QDir(readyPath).exists()) { - return false; - } - - // check ready version - QString versionPath = readyPath + qsl("/tdata/version"); - { - QFile fVersion(versionPath); - if (!fVersion.open(QIODevice::ReadOnly)) { - LOG(("Update Error: cant read version file '%1'").arg(versionPath)); - PsUpdateDownloader::clearAll(); - return false; - } - DWORD versionNum; - if (fVersion.read((char*)&versionNum, sizeof(DWORD)) != sizeof(DWORD)) { - LOG(("Update Error: cant read version from file '%1'").arg(versionPath)); - PsUpdateDownloader::clearAll(); - return false; - } - fVersion.close(); - if (versionNum <= AppVersion) { - LOG(("Update Error: cant install version %1 having version %2").arg(versionNum).arg(AppVersion)); - PsUpdateDownloader::clearAll(); - return false; - } - } - - QString curUpdater = (cExeDir() + "Updater.exe"); - QFileInfo updater(cWorkingDir() + "tupdates/ready/Updater.exe"); - if (!updater.exists()) { - QFileInfo current(curUpdater); - if (!current.exists()) { - PsUpdateDownloader::clearAll(); - return false; - } - if (CopyFile(current.absoluteFilePath().toStdWString().c_str(), updater.absoluteFilePath().toStdWString().c_str(), TRUE) == FALSE) { - PsUpdateDownloader::clearAll(); - return false; - } - } - if (CopyFile(updater.absoluteFilePath().toStdWString().c_str(), curUpdater.toStdWString().c_str(), FALSE) == FALSE) { - PsUpdateDownloader::clearAll(); - return false; - } - if (DeleteFile(updater.absoluteFilePath().toStdWString().c_str()) == FALSE) { - PsUpdateDownloader::clearAll(); - return false; - }*/ - return false; // TODO -} - -void psPostprocessFile(const QString &name) { - /*std::wstring zoneFile = QDir::toNativeSeparators(name).toStdWString() + L":Zone.Identifier"; - HANDLE f = CreateFile(zoneFile.c_str(), GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); - if (f == INVALID_HANDLE_VALUE) { // :( - return; - } - - const char data[] = "[ZoneTransfer]\r\nZoneId=3\r\n"; - - DWORD written = 0; - BOOL result = WriteFile(f, data, sizeof(data), &written, NULL); - CloseHandle(f); - - if (!result || written != sizeof(data)) { // :( - return; - }*/ -} - -void psOpenFile(const QString &name, bool openWith) { - /*std::wstring wname = QDir::toNativeSeparators(name).toStdWString(); - - if (openWith && useOpenAs) { - if (shOpenWithDialog) { - OPENASINFO info; - info.oaifInFlags = OAIF_ALLOW_REGISTRATION | OAIF_REGISTER_EXT | OAIF_EXEC; - info.pcszClass = NULL; - info.pcszFile = wname.c_str(); - shOpenWithDialog(0, &info); - } else { - openAs_RunDLL(0, 0, wname.c_str(), SW_SHOWNORMAL); - } - } else { - ShellExecute(0, L"open", wname.c_str(), 0, 0, SW_SHOWNORMAL); - }*/ -} - -void psShowInFolder(const QString &name) { - //QString nameEscaped = QDir::toNativeSeparators(name).replace('"', qsl("\"\"")); - //ShellExecute(0, 0, qsl("explorer").toStdWString().c_str(), (qsl("/select,") + nameEscaped).toStdWString().c_str(), 0, SW_SHOWNORMAL); -} - -void psExecUpdater() { - /*QString targs = qsl("-update"); - if (cFromAutoStart()) targs += qsl(" -autostart"); - if (cDebug()) targs += qsl(" -debug"); - - QString updater(QDir::toNativeSeparators(cExeDir() + "Updater.exe")), wdir(QDir::toNativeSeparators(cWorkingDir())); - - DEBUG_LOG(("Application Info: executing %1 %2").arg(cExeDir() + "Updater.exe").arg(targs)); - HINSTANCE r = ShellExecute(0, 0, updater.toStdWString().c_str(), targs.toStdWString().c_str(), wdir.isEmpty() ? 0 : wdir.toStdWString().c_str(), SW_SHOWNORMAL); - if (long(r) < 32) { - DEBUG_LOG(("Application Error: failed to execute %1, working directory: '%2', result: %3").arg(updater).arg(wdir).arg(long(r))); - QString readyPath = cWorkingDir() + qsl("tupdates/ready"); - PsUpdateDownloader::deleteDir(readyPath); - }*/ -} - -void psExecTelegram() { - /*QString targs = qsl("-noupdate -tosettings"); - if (cFromAutoStart()) targs += qsl(" -autostart"); - if (cDebug()) targs += qsl(" -debug"); - if (cDataFile() != (cTestMode() ? qsl("data_test") : qsl("data"))) targs += qsl(" -key \"") + cDataFile() + '"'; - - QString telegram(QDir::toNativeSeparators(cExeDir() + "Telegram.exe")), wdir(QDir::toNativeSeparators(cWorkingDir())); - - DEBUG_LOG(("Application Info: executing %1 %2").arg(cExeDir() + "Telegram.exe").arg(targs)); - HINSTANCE r = ShellExecute(0, 0, telegram.toStdWString().c_str(), targs.toStdWString().c_str(), wdir.isEmpty() ? 0 : wdir.toStdWString().c_str(), SW_SHOWNORMAL); - if (long(r) < 32) { - DEBUG_LOG(("Application Error: failed to execute %1, working directory: '%2', result: %3").arg(telegram).arg(wdir).arg(long(r))); - }*/ -} - -void psAutoStart(bool start, bool silent) { - /*WCHAR startupFolder[MAX_PATH]; - HRESULT hres = SHGetFolderPath(0, CSIDL_STARTUP, 0, SHGFP_TYPE_CURRENT, startupFolder); - if (SUCCEEDED(hres)) { - QString lnk = QString::fromWCharArray(startupFolder) + "\\Telegram.lnk"; - if (start) { - IShellLink* psl; - hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl); - if (SUCCEEDED(hres)) { - IPersistFile* ppf; - - QString exe = QDir::toNativeSeparators(QDir(cExeDir()).absolutePath() + "//Telegram.exe"), dir = QDir::toNativeSeparators(QDir(cWorkingDir()).absolutePath()); - psl->SetArguments(L"-autostart"); - psl->SetPath(exe.toStdWString().c_str()); - psl->SetWorkingDirectory(dir.toStdWString().c_str()); - psl->SetDescription(L"Telegram autorun link.\nYou can disable autorun in Telegram settings."); - - hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf); - - if (SUCCEEDED(hres)) { - hres = ppf->Save(lnk.toStdWString().c_str(), TRUE); - ppf->Release(); - } else { - if (!silent) LOG(("App Error: could not create interface IID_IPersistFile %1").arg(hres)); - } - psl->Release(); - } else { - if (!silent) LOG(("App Error: could not create instance of IID_IShellLink %1").arg(hres)); - } - } else { - QFile::remove(lnk); - } - } else { - if (!silent) LOG(("App Error: could not get CSIDL_STARTUP folder %1").arg(hres)); - }*/ -} diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index 93660eeb0..532fde78b 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -868,8 +868,6 @@ PsMainWindow::PsMainWindow(QWidget *parent) : QMainWindow(parent), ps_hWnd(0), p icon32 = icon256.scaledToWidth(32, Qt::SmoothTransformation); connect(&psIdleTimer, SIGNAL(timeout()), this, SLOT(psIdleTimeout())); psIdleTimer.setSingleShot(false); - connect(¬ifyWaitTimer, SIGNAL(timeout()), this, SLOT(psNotifyFire())); - notifyWaitTimer.setSingleShot(true); } void PsMainWindow::psNotIdle() const { @@ -1388,506 +1386,41 @@ PsMainWindow::~PsMainWindow() { if (ps_menu) DestroyMenu(ps_menu); psDestroyIcons(); _psShadowWindows.destroy(); - psClearNotifyFast(); if (ps_tbHider_hWnd) DestroyWindow(ps_tbHider_hWnd); } -void PsMainWindow::psNotify(History *history, MsgId msgId) { - if (App::quiting() || !history->currentNotification()) return; - - bool haveSetting = (history->peer->notify != UnknownNotifySettings); - if (haveSetting) { - if (history->peer->notify != EmptyNotifySettings && history->peer->notify->mute > unixtime()) { - history->clearNotifications(); - return; - } - } else { - App::wnd()->getNotifySetting(MTP_inputNotifyPeer(history->peer->input)); - } - - uint64 ms = getms() + NotifyWaitTimeout; - notifyWhenAlerts[history].insert(ms); - if (cDesktopNotify()) { - NotifyWhenMaps::iterator i = notifyWhenMaps.find(history); - if (i == notifyWhenMaps.end()) { - i = notifyWhenMaps.insert(history, NotifyWhenMap()); - } - if (i.value().constFind(msgId) == i.value().cend()) { - i.value().insert(msgId, ms); - } - NotifyWaiters *addTo = haveSetting ? ¬ifyWaiters : ¬ifySettingWaiters; - if (addTo->constFind(history) == addTo->cend()) { - addTo->insert(history, NotifyWaiter(msgId, ms)); - } - } - if (haveSetting) { - if (!notifyWaitTimer.isActive()) { - notifyWaitTimer.start(NotifyWaitTimeout); - } - } -} - -void PsMainWindow::psNotifyFire() { - psShowNextNotify(); -} - -void PsMainWindow::psNotifySettingGot() { - int32 t = unixtime(); - for (NotifyWaiters::iterator i = notifySettingWaiters.begin(); i != notifySettingWaiters.end();) { - History *history = i.key(); - if (history->peer->notify == UnknownNotifySettings) { - ++i; - } else { - if (history->peer->notify == EmptyNotifySettings || history->peer->notify->mute <= t) { - notifyWaiters.insert(i.key(), i.value()); - } - i = notifySettingWaiters.erase(i); - } - } - notifyWaitTimer.stop(); - psShowNextNotify(); -} - -void PsMainWindow::psClearNotify(History *history) { - if (!history) { - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->unlinkHistory(); - } - for (NotifyWhenMaps::const_iterator i = notifyWhenMaps.cbegin(), e = notifyWhenMaps.cend(); i != e; ++i) { - i.key()->clearNotifications(); - } - notifyWaiters.clear(); - notifySettingWaiters.clear(); - notifyWhenMaps.clear(); - return; - } - notifyWaiters.remove(history); - notifySettingWaiters.remove(history); - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->unlinkHistory(history); - } - notifyWhenMaps.remove(history); - notifyWhenAlerts.remove(history); -} - -void PsMainWindow::psClearNotifyFast() { - notifyWaiters.clear(); - notifySettingWaiters.clear(); - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->deleteLater(); - } - notifyWindows.clear(); - notifyWhenMaps.clear(); - notifyWhenAlerts.clear(); -} - -// QApplication::desktop()->availableGeometry(App::wnd()) works not very fine, returns not nearest namespace { - //RECT _monitorRECT; QRect _monitorRect; - //uint32 _monitorDelta; - //int32 _wndX, _wndY; uint64 _monitorLastGot = 0; - - //BOOL CALLBACK _monitorRectProc( - //_In_ HMONITOR hMonitor, - //_In_ HDC hdcMonitor, - //_In_ LPRECT lprcMonitor, - //_In_ LPARAM dwData - //) { - // MONITORINFOEX info; - // info.cbSize = sizeof(info); - // GetMonitorInfo(hMonitor, &info); - // int32 centerx = (info.rcWork.right + info.rcWork.left) / 2, centery = (info.rcWork.bottom + info.rcWork.top) / 2; - // uint32 delta = (info.rcWork.right > _wndX && info.rcWork.left <= _wndX && info.rcWork.bottom > _wndY && info.rcWork.top <= _wndY) ? 0 : ((centerx - _wndX) * (centerx - _wndX) + (centery - _wndY) * (centery - _wndY)); - // if (delta < _monitorDelta) { - // _monitorDelta = delta; - // _monitorRECT = info.rcWork; - // } - // return !!delta; - //} - QRect _desktopRect() { - uint64 tnow = getms(); - if (tnow > _monitorLastGot + 1000 || tnow < _monitorLastGot) { - _monitorLastGot = tnow; - //RECT r; - //GetWindowRect(App::wnd()->psHwnd(), &r); - //_wndX = (r.right + r.left) / 2; - //_wndY = (r.bottom + r.top) / 2; - //_monitorDelta = INT_MAX; - //EnumDisplayMonitors(0, 0, &_monitorRectProc, 0); - //_monitorRect = (_monitorDelta < INT_MAX) ? QRect(_monitorRECT.left, _monitorRECT.top, _monitorRECT.right - _monitorRECT.left, _monitorRECT.bottom - _monitorRECT.top) : QApplication::desktop()->availableGeometry(App::wnd()); - HMONITOR hMonitor = MonitorFromWindow(App::wnd()->psHwnd(), MONITOR_DEFAULTTONEAREST); - if (hMonitor) { - MONITORINFOEX info; - info.cbSize = sizeof(info); - GetMonitorInfo(hMonitor, &info); - _monitorRect = QRect(info.rcWork.left, info.rcWork.top, info.rcWork.right - info.rcWork.left, info.rcWork.bottom - info.rcWork.top); - } else { - _monitorRect = QApplication::desktop()->availableGeometry(App::wnd()); - } - } - return _monitorRect; - } } -void PsMainWindow::psShowNextNotify(PsNotifyWindow *remove) { - if (App::quiting()) return; - - int32 count = NotifyWindows; - if (remove) { - for (PsNotifyWindows::iterator i = notifyWindows.begin(), e = notifyWindows.end(); i != e; ++i) { - if ((*i) == remove) { - notifyWindows.erase(i); - break; - } - } - } - - uint64 ms = getms(), nextAlert = 0; - bool alert = false; - for (NotifyWhenAlerts::iterator i = notifyWhenAlerts.begin(); i != notifyWhenAlerts.end();) { - while (!i.value().isEmpty() && *i.value().begin() <= ms) { - i.value().erase(i.value().begin()); - NotifySettingsPtr n = i.key()->peer->notify; - if (n == EmptyNotifySettings || n != UnknownNotifySettings && n->mute <= unixtime()) { - alert = true; - } - } - if (i.value().isEmpty()) { - i = notifyWhenAlerts.erase(i); +QRect psDesktopRect() { + uint64 tnow = getms(); + if (tnow > _monitorLastGot + 1000 || tnow < _monitorLastGot) { + _monitorLastGot = tnow; + HMONITOR hMonitor = MonitorFromWindow(App::wnd()->psHwnd(), MONITOR_DEFAULTTONEAREST); + if (hMonitor) { + MONITORINFOEX info; + info.cbSize = sizeof(info); + GetMonitorInfo(hMonitor, &info); + _monitorRect = QRect(info.rcWork.left, info.rcWork.top, info.rcWork.right - info.rcWork.left, info.rcWork.bottom - info.rcWork.top); } else { - if (!nextAlert || nextAlert > *i.value().begin()) { - nextAlert = *i.value().begin(); - } - ++i; + _monitorRect = QApplication::desktop()->availableGeometry(App::wnd()); } } - if (alert) { - psFlash(); - App::playSound(); - } - - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - int32 ind = (*i)->index(); - if (ind < 0) continue; - --count; - } - if (count <= 0 || !cDesktopNotify()) { - if (nextAlert) { - notifyWaitTimer.start(nextAlert - ms); - } - return; - } - - QRect r = _desktopRect(); - int32 x = r.x() + r.width() - st::notifyWidth - st::notifyDeltaX, y = r.y() + r.height() - st::notifyHeight - st::notifyDeltaY; - while (count > 0) { - uint64 next = 0; - HistoryItem *notifyItem = 0; - NotifyWaiters::iterator notifyWaiter; - for (NotifyWaiters::iterator i = notifyWaiters.begin(); i != notifyWaiters.end(); ++i) { - History *history = i.key(); - if (history->currentNotification() && history->currentNotification()->id != i.value().msg) { - NotifyWhenMaps::iterator j = notifyWhenMaps.find(history); - if (j == notifyWhenMaps.end()) { - history->clearNotifications(); - i = notifyWaiters.erase(i); - continue; - } - do { - NotifyWhenMap::const_iterator k = j.value().constFind(history->currentNotification()->id); - if (k != j.value().cend()) { - i.value().msg = k.key(); - i.value().when = k.value(); - break; - } - history->skipNotification(); - } while (history->currentNotification()); - } - if (!history->currentNotification()) { - notifyWhenMaps.remove(history); - i = notifyWaiters.erase(i); - continue; - } - uint64 when = i.value().when; - if (!notifyItem || next > when) { - next = when; - notifyItem = history->currentNotification(); - notifyWaiter = i; - } - } - if (notifyItem) { - if (next > ms) { - if (nextAlert && nextAlert < next) { - next = nextAlert; - nextAlert = 0; - } - notifyWaitTimer.start(next - ms); - break; - } else { - notifyWindows.push_back(new PsNotifyWindow(notifyItem, x, y)); - --count; - - uint64 ms = getms(); - History *history = notifyItem->history(); - history->skipNotification(); - NotifyWhenMaps::iterator j = notifyWhenMaps.find(history); - if (j == notifyWhenMaps.end() || !history->currentNotification()) { - history->clearNotifications(); - notifyWaiters.erase(notifyWaiter); - if (j != notifyWhenMaps.end()) notifyWhenMaps.erase(j); - continue; - } - j.value().remove(notifyItem->id); - do { - NotifyWhenMap::const_iterator k = j.value().constFind(history->currentNotification()->id); - if (k != j.value().cend()) { - notifyWaiter.value().msg = k.key(); - notifyWaiter.value().when = k.value(); - break; - } - history->skipNotification(); - } while (history->currentNotification()); - if (!history->currentNotification()) { - notifyWaiters.erase(notifyWaiter); - notifyWhenMaps.erase(j); - continue; - } - } - } else { - break; - } - } - if (nextAlert) { - notifyWaitTimer.start(nextAlert - ms); - } - - count = NotifyWindows - count; - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - int32 ind = (*i)->index(); - if (ind < 0) continue; - --count; - (*i)->moveTo(x, y - count * (st::notifyHeight + st::notifyDeltaY)); - } + return _monitorRect; } -void PsMainWindow::psStopHiding() { - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->stopHiding(); - } +void PsMainWindow::psActivateNotify(NotifyWindow *w) { } -void PsMainWindow::psStartHiding() { - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->startHiding(); - } +void PsMainWindow::psClearNotifies(PeerId peerId) { } -void PsMainWindow::psUpdateNotifies() { - for (PsNotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { - (*i)->updatePeerPhoto(); - } +void PsMainWindow::psNotifyShown(NotifyWindow *w) { } -PsNotifyWindow::PsNotifyWindow(HistoryItem *item, int32 x, int32 y) : history(item->history()), aOpacity(0), _index(0), hiding(false), started(GetTickCount()), - alphaDuration(st::notifyFastAnim), posDuration(st::notifyFastAnim), aY(y + st::notifyHeight + st::notifyDeltaY), close(this, st::notifyClose), aOpacityFunc(st::notifyFastAnimFunc) { - - int32 w = st::notifyWidth, h = st::notifyHeight; - QImage img(w, h, QImage::Format_ARGB32_Premultiplied); - img.fill(st::notifyBG->c); - - { - QPainter p(&img); - p.setPen(st::notifyBorder->p); - p.setBrush(Qt::NoBrush); - p.drawRect(0, 0, w - 1, h - 1); - - if (history->peer->photo->loaded()) { - p.drawPixmap(st::notifyPhotoPos.x(), st::notifyPhotoPos.y(), history->peer->photo->pix(st::notifyPhotoSize)); - } else { - MTP::clearLoaderPriorities(); - peerPhoto = history->peer->photo; - peerPhoto->load(true, true); - } - - int32 itemWidth = w - st::notifyPhotoPos.x() - st::notifyPhotoSize - st::notifyTextLeft - st::notifyClosePos.x() - st::notifyClose.width; - - QRect rectForName(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyTextTop, itemWidth, st::msgNameFont->height); - if (history->peer->chat) { - p.drawPixmap(QPoint(rectForName.left() + st::dlgChatImgLeft, rectForName.top() + st::dlgChatImgTop), App::sprite(), st::dlgChatImg); - rectForName.setLeft(rectForName.left() + st::dlgChatImgSkip); - } - - QDateTime now(QDateTime::currentDateTime()), lastTime(item->date); - QDate nowDate(now.date()), lastDate(lastTime.date()); - QString dt = lastTime.toString(qsl("hh:mm")); - int32 dtWidth = st::dlgHistFont->m.width(dt); - rectForName.setWidth(rectForName.width() - dtWidth - st::dlgDateSkip); - p.setFont(st::dlgDateFont->f); - p.setPen(st::dlgDateColor->p); - p.drawText(rectForName.left() + rectForName.width() + st::dlgDateSkip, rectForName.top() + st::dlgHistFont->ascent, dt); - - const HistoryItem *textCachedFor = 0; - Text itemTextCache(itemWidth); - bool active = false; - item->drawInDialog(p, QRect(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyItemTop + st::msgNameFont->height, itemWidth, 2 * st::dlgFont->height), active, textCachedFor, itemTextCache); - - p.setPen(st::dlgNameColor->p); - history->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); - } - pm = QPixmap::fromImage(img); - - hideTimer.setSingleShot(true); - connect(&hideTimer, SIGNAL(timeout()), this, SLOT(hideByTimer())); - - inputTimer.setSingleShot(true); - connect(&inputTimer, SIGNAL(timeout()), this, SLOT(checkLastInput())); - - connect(&close, SIGNAL(clicked()), this, SLOT(unlinkHistory())); - close.setAcceptBoth(true); - close.move(w - st::notifyClose.width - st::notifyClosePos.x(), st::notifyClosePos.y()); - close.show(); - - aY.start(y); - setGeometry(x, aY.current(), st::notifyWidth, st::notifyHeight); - - aOpacity.start(1); - setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint); - - show(); - - setWindowOpacity(aOpacity.current()); - - alphaDuration = posDuration = st::notifyFastAnim; - anim::start(this); - - checkLastInput(); -} - -void PsNotifyWindow::checkLastInput() { - LASTINPUTINFO lii; - lii.cbSize = sizeof(LASTINPUTINFO); - BOOL res = GetLastInputInfo(&lii); - if (!res || lii.dwTime >= started) { - hideTimer.start(st::notifyWaitLongHide); - } else { - inputTimer.start(300); - } -} - -void PsNotifyWindow::moveTo(int32 x, int32 y, int32 index) { - if (index >= 0) { - _index = index; - } - move(x, aY.current()); - aY.start(y); - aOpacity.restart(); - posDuration = st::notifyFastAnim; - anim::start(this); -} - -void PsNotifyWindow::updatePeerPhoto() { - if (!peerPhoto->isNull() && peerPhoto->loaded()) { - QImage img(pm.toImage()); - { - QPainter p(&img); - p.drawPixmap(st::notifyPhotoPos.x(), st::notifyPhotoPos.y(), peerPhoto->pix(st::notifyPhotoSize)); - } - peerPhoto = ImagePtr(); - pm = QPixmap::fromImage(img); - update(); - } -} - -void PsNotifyWindow::unlinkHistory(History *hist) { - if (!hist || hist == history) { - animHide(st::notifyFastAnim, st::notifyFastAnimFunc); - history = 0; - App::wnd()->psShowNextNotify(); - } -} - -void PsNotifyWindow::enterEvent(QEvent *e) { - if (!history) return; - if (App::wnd()) App::wnd()->psStopHiding(); -} - -void PsNotifyWindow::leaveEvent(QEvent *e) { - if (!history) return; - App::wnd()->psStartHiding(); -} - -void PsNotifyWindow::startHiding() { - hideTimer.start(st::notifyWaitShortHide); -} - -void PsNotifyWindow::mousePressEvent(QMouseEvent *e) { - if (!history) return; - if (e->button() == Qt::RightButton) { - unlinkHistory(); - } else if (history) { - App::wnd()->showFromTray(); - App::wnd()->hideSettings(); - App::main()->showPeer(history->peer->id, 0, false, true); - e->ignore(); - } -} - -void PsNotifyWindow::paintEvent(QPaintEvent *e) { - QPainter p(this); - p.drawPixmap(0, 0, pm); -} - -void PsNotifyWindow::animHide(float64 duration, anim::transition func) { - if (!history) return; - alphaDuration = duration; - aOpacityFunc = func; - aOpacity.start(0); - aY.restart(); - hiding = true; - anim::start(this); -} - -void PsNotifyWindow::stopHiding() { - if (!history) return; - alphaDuration = st::notifyFastAnim; - aOpacityFunc = st::notifyFastAnimFunc; - aOpacity.start(1); - aY.restart(); - hiding = false; - hideTimer.stop(); - anim::start(this); -} - -void PsNotifyWindow::hideByTimer() { - if (!history) return; - animHide(st::notifySlowHide, st::notifySlowHideFunc); -} - -bool PsNotifyWindow::animStep(float64 ms) { - float64 dtAlpha = ms / alphaDuration, dtPos = ms / posDuration; - if (dtAlpha >= 1) { - aOpacity.finish(); - if (hiding) { - deleteLater(); - } - } else { - aOpacity.update(dtAlpha, aOpacityFunc); - } - setWindowOpacity(aOpacity.current()); - if (dtPos >= 1) { - aY.finish(); - } else { - aY.update(dtPos, anim::linear); - } - move(x(), aY.current()); - update(); - return (dtAlpha < 1 || !hiding && dtPos < 1); -} - -PsNotifyWindow::~PsNotifyWindow() { - if (App::wnd()) App::wnd()->psShowNextNotify(this); +void PsMainWindow::psPlatformNotify(HistoryItem *item) { } PsApplication::PsApplication(int &argc, char **argv) : QApplication(argc, argv) { diff --git a/Telegram/SourceFiles/pspecific_wnd.h b/Telegram/SourceFiles/pspecific_wnd.h index cb188d63c..5dfd4341f 100644 --- a/Telegram/SourceFiles/pspecific_wnd.h +++ b/Telegram/SourceFiles/pspecific_wnd.h @@ -23,58 +23,7 @@ inline QString psServerPrefix() { inline void psCheckLocalSocket(const QString &) { } -class PsNotifyWindow : public QWidget, public Animated { - Q_OBJECT - -public: - - PsNotifyWindow(HistoryItem *item, int32 x, int32 y); - - void enterEvent(QEvent *e); - void leaveEvent(QEvent *e); - void mousePressEvent(QMouseEvent *e); - void paintEvent(QPaintEvent *e); - - bool animStep(float64 ms); - void animHide(float64 duration, anim::transition func); - void startHiding(); - void stopHiding(); - void moveTo(int32 x, int32 y, int32 index = -1); - - void updatePeerPhoto(); - - int32 index() const { - return history ? _index : -1; - } - - ~PsNotifyWindow(); - -public slots: - - void hideByTimer(); - void checkLastInput(); - - void unlinkHistory(History *hist = 0); - -private: - - DWORD started; - - History *history; - IconedButton close; - QPixmap pm; - float64 alphaDuration, posDuration; - QTimer hideTimer, inputTimer; - bool hiding; - int32 _index; - anim::fvalue aOpacity; - anim::transition aOpacityFunc; - anim::ivalue aY; - ImagePtr peerPhoto; - -}; - -typedef QList PsNotifyWindows; +class NotifyWindow; class PsMainWindow : public QMainWindow { Q_OBJECT @@ -112,18 +61,15 @@ public: return false; } - void psNotify(History *history, MsgId msgId); - void psClearNotify(History *history = 0); - void psClearNotifyFast(); - void psShowNextNotify(PsNotifyWindow *remove = 0); - void psStopHiding(); - void psStartHiding(); - void psUpdateNotifies(); - bool psPosInited() const { return posInited; } + void psActivateNotify(NotifyWindow *w); + void psClearNotifies(PeerId peerId = 0); + void psNotifyShown(NotifyWindow *w); + void psPlatformNotify(HistoryItem *item); + ~PsMainWindow(); public slots: @@ -132,7 +78,6 @@ public slots: void psUpdateCounter(); void psSavePosition(Qt::WindowState state = Qt::WindowActive); void psIdleTimeout(); - void psNotifyFire(); protected: @@ -145,26 +90,6 @@ protected: virtual void setupTrayIcon() { } - typedef QMap NotifyWhenMap; - typedef QMap NotifyWhenMaps; - NotifyWhenMaps notifyWhenMaps; - struct NotifyWaiter { - NotifyWaiter(MsgId msg, uint64 when) : msg(msg), when(when) { - } - MsgId msg; - uint64 when; - }; - typedef QMap NotifyWaiters; - NotifyWaiters notifyWaiters; - NotifyWaiters notifySettingWaiters; - QTimer notifyWaitTimer; - - typedef QSet NotifyWhenAlert; - typedef QMap NotifyWhenAlerts; - NotifyWhenAlerts notifyWhenAlerts; - - PsNotifyWindows notifyWindows; - QTimer psUpdatedPositionTimer; private: @@ -251,6 +176,8 @@ QString psAppDataPath(); QString psCurrentExeDirectory(int argc, char *argv[]); void psAutoStart(bool start, bool silent = false); +QRect psDesktopRect(); + int psCleanup(); int psFixPrevious(); diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index 7fd4066fc..1c100f6f8 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -86,6 +86,11 @@ QUrl gUpdateURL = QUrl(qsl("http://tdesktop.com/linux/tupdates/current")); #endif void settingsParseArgs(int argc, char *argv[]) { + if (cPlatform() == dbipMac) { + gCustomNotifies = false; + } else { + gCustomNotifies = true; + } memset_rand(&gInstance, sizeof(gInstance)); gExeDir = psCurrentExeDirectory(argc, argv); for (int32 i = 0; i < argc; ++i) { diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index 5fced5e7b..dd359d2ae 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -75,11 +75,7 @@ void Slider::setSelected(int32 sel) { void Slider::paintEvent(QPaintEvent *e) { QPainter p(this); - p.setPen(_st.color->p); - int32 from = (height() - _st.thikness) / 2, to = from + _st.thikness; - for (int32 i = from; i < to; ++i) { - p.drawLine(0, i, width() - 1, i); - } + p.fillRect(0, (height() - _st.thikness) / 2, width(), _st.thikness, _st.color->b); int32 x = qFloor(_sel * float64(width() - _st.bar.pxWidth()) / (_count - 1)), y = (height() - _st.bar.pxHeight()) / 2; p.drawPixmap(QPoint(x, y), App::sprite(), _st.bar); @@ -908,7 +904,7 @@ void SettingsInner::onSoundNotify() { void SettingsInner::onDesktopNotify() { cSetDesktopNotify(_desktopNotify.checked()); if (!_desktopNotify.checked()) { - App::wnd()->psClearNotify(); + App::wnd()->notifyClear(); } App::writeUserConfig(); } diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index 7d0f6e4db..3e383e113 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -76,6 +76,229 @@ void TempDirDeleter::onStart() { } } + +NotifyWindow::NotifyWindow(HistoryItem *item, int32 x, int32 y) : history(item->history()) +#ifdef Q_OS_WIN +, started(GetTickCount()) +#endif +, close(this, st::notifyClose) +, alphaDuration(st::notifyFastAnim) +, posDuration(st::notifyFastAnim) +, hiding(false) +, _index(0) +, aOpacity(0) +, aOpacityFunc(st::notifyFastAnimFunc) +, aY(y + st::notifyHeight + st::notifyDeltaY) { + + int32 w = st::notifyWidth, h = st::notifyHeight; + QImage img(w * cIntRetinaFactor(), h * cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied); + if (cRetina()) img.setDevicePixelRatio(cRetinaFactor()); + img.fill(st::notifyBG->c); + + { + QPainter p(&img); + p.fillRect(0, 0, w - st::notifyBorderWidth, st::notifyBorderWidth, st::notifyBorder->b); + p.fillRect(w - st::notifyBorderWidth, 0, st::notifyBorderWidth, h - st::notifyBorderWidth, st::notifyBorder->b); + p.fillRect(st::notifyBorderWidth, h - st::notifyBorderWidth, w - st::notifyBorderWidth, st::notifyBorderWidth, st::notifyBorder->b); + p.fillRect(0, st::notifyBorderWidth, st::notifyBorderWidth, h - st::notifyBorderWidth, st::notifyBorder->b); + + if (history->peer->photo->loaded()) { + p.drawPixmap(st::notifyPhotoPos.x(), st::notifyPhotoPos.y(), history->peer->photo->pix(st::notifyPhotoSize)); + } else { + MTP::clearLoaderPriorities(); + peerPhoto = history->peer->photo; + peerPhoto->load(true, true); + } + + int32 itemWidth = w - st::notifyPhotoPos.x() - st::notifyPhotoSize - st::notifyTextLeft - st::notifyClosePos.x() - st::notifyClose.width; + + QRect rectForName(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyTextTop, itemWidth, st::msgNameFont->height); + if (history->peer->chat) { + p.drawPixmap(QPoint(rectForName.left() + st::dlgChatImgLeft, rectForName.top() + st::dlgChatImgTop), App::sprite(), st::dlgChatImg); + rectForName.setLeft(rectForName.left() + st::dlgChatImgSkip); + } + + QDateTime now(QDateTime::currentDateTime()), lastTime(item->date); + QDate nowDate(now.date()), lastDate(lastTime.date()); + QString dt = lastTime.toString(qsl("hh:mm")); + int32 dtWidth = st::dlgHistFont->m.width(dt); + rectForName.setWidth(rectForName.width() - dtWidth - st::dlgDateSkip); + p.setFont(st::dlgDateFont->f); + p.setPen(st::dlgDateColor->p); + p.drawText(rectForName.left() + rectForName.width() + st::dlgDateSkip, rectForName.top() + st::dlgHistFont->ascent, dt); + + const HistoryItem *textCachedFor = 0; + Text itemTextCache(itemWidth); + bool active = false; + item->drawInDialog(p, QRect(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyItemTop + st::msgNameFont->height, itemWidth, 2 * st::dlgFont->height), active, textCachedFor, itemTextCache); + + p.setPen(st::dlgNameColor->p); + history->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); + } + pm = QPixmap::fromImage(img); + + hideTimer.setSingleShot(true); + connect(&hideTimer, SIGNAL(timeout()), this, SLOT(hideByTimer())); + + inputTimer.setSingleShot(true); + connect(&inputTimer, SIGNAL(timeout()), this, SLOT(checkLastInput())); + + connect(&close, SIGNAL(clicked()), this, SLOT(unlinkHistory())); + close.setAcceptBoth(true); + close.move(w - st::notifyClose.width - st::notifyClosePos.x(), st::notifyClosePos.y()); + close.show(); + + aY.start(y); + setGeometry(x, aY.current(), st::notifyWidth, st::notifyHeight); + + aOpacity.start(1); + setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint); + setAttribute(Qt::WA_MacAlwaysShowToolWindow); + + show(); + + setWindowOpacity(aOpacity.current()); + + alphaDuration = posDuration = st::notifyFastAnim; + anim::start(this); + + checkLastInput(); +} + +void NotifyWindow::checkLastInput() { +#ifdef Q_OS_WIN + LASTINPUTINFO lii; + lii.cbSize = sizeof(LASTINPUTINFO); + BOOL res = GetLastInputInfo(&lii); + if (!res || lii.dwTime >= started) { + hideTimer.start(st::notifyWaitLongHide); + } else { + inputTimer.start(300); + } +#else + // TODO + if (true) { + hideTimer.start(st::notifyWaitLongHide); + } else { + inputTimer.start(300); + } +#endif +} + +void NotifyWindow::moveTo(int32 x, int32 y, int32 index) { + if (index >= 0) { + _index = index; + } + move(x, aY.current()); + aY.start(y); + aOpacity.restart(); + posDuration = st::notifyFastAnim; + anim::start(this); +} + +void NotifyWindow::updatePeerPhoto() { + if (!peerPhoto->isNull() && peerPhoto->loaded()) { + QImage img(pm.toImage()); + { + QPainter p(&img); + p.drawPixmap(st::notifyPhotoPos.x(), st::notifyPhotoPos.y(), peerPhoto->pix(st::notifyPhotoSize)); + } + peerPhoto = ImagePtr(); + pm = QPixmap::fromImage(img); + update(); + } +} + +void NotifyWindow::unlinkHistory(History *hist) { + if (!hist || hist == history) { + animHide(st::notifyFastAnim, st::notifyFastAnimFunc); + history = 0; + App::wnd()->notifyShowNext(); + } +} + +void NotifyWindow::enterEvent(QEvent *e) { + if (!history) return; + if (App::wnd()) App::wnd()->notifyStopHiding(); +} + +void NotifyWindow::leaveEvent(QEvent *e) { + if (!history) return; + App::wnd()->notifyStartHiding(); +} + +void NotifyWindow::startHiding() { + hideTimer.start(st::notifyWaitShortHide); +} + +void NotifyWindow::mousePressEvent(QMouseEvent *e) { + if (!history) return; + if (e->button() == Qt::RightButton) { + unlinkHistory(); + } else if (history) { + App::wnd()->showFromTray(); + App::wnd()->hideSettings(); + App::main()->showPeer(history->peer->id, 0, false, true); + e->ignore(); + } +} + +void NotifyWindow::paintEvent(QPaintEvent *e) { + QPainter p(this); + p.drawPixmap(0, 0, pm); +} + +void NotifyWindow::animHide(float64 duration, anim::transition func) { + if (!history) return; + alphaDuration = duration; + aOpacityFunc = func; + aOpacity.start(0); + aY.restart(); + hiding = true; + anim::start(this); +} + +void NotifyWindow::stopHiding() { + if (!history) return; + alphaDuration = st::notifyFastAnim; + aOpacityFunc = st::notifyFastAnimFunc; + aOpacity.start(1); + aY.restart(); + hiding = false; + hideTimer.stop(); + anim::start(this); +} + +void NotifyWindow::hideByTimer() { + if (!history) return; + animHide(st::notifySlowHide, st::notifySlowHideFunc); +} + +bool NotifyWindow::animStep(float64 ms) { + float64 dtAlpha = ms / alphaDuration, dtPos = ms / posDuration; + if (dtAlpha >= 1) { + aOpacity.finish(); + if (hiding) { + deleteLater(); + } + } else { + aOpacity.update(dtAlpha, aOpacityFunc); + } + setWindowOpacity(aOpacity.current()); + if (dtPos >= 1) { + aY.finish(); + } else { + aY.update(dtPos, anim::linear); + } + move(x(), aY.current()); + update(); + return (dtAlpha < 1 || (!hiding && dtPos < 1)); +} + +NotifyWindow::~NotifyWindow() { + if (App::wnd()) App::wnd()->notifyShowNext(this); +} + Window::Window(QWidget *parent) : PsMainWindow(parent), intro(0), main(0), settings(0), layer(0), layerBG(0), _topWidget(0), _connecting(0), _tempDeleter(0), _tempDeleterThread(0), myIcon(QPixmap::fromImage(icon256)), dragging(false), _inactivePress(false) { @@ -93,6 +316,9 @@ Window::Window(QWidget *parent) : PsMainWindow(parent), _inactiveTimer.setSingleShot(true); connect(&_inactiveTimer, SIGNAL(timeout()), this, SLOT(onInactiveTimer())); + + connect(¬ifyWaitTimer, SIGNAL(timeout()), this, SLOT(notifyFire())); + notifyWaitTimer.setSingleShot(true); } void Window::inactivePress(bool inactive) { @@ -650,7 +876,282 @@ void Window::onTempDirClearFailed() { emit tempDirClearFailed(); } +void Window::notifySchedule(History *history, MsgId msgId) { + if (App::quiting() || !history->currentNotification()) return; + + bool haveSetting = (history->peer->notify != UnknownNotifySettings); + if (haveSetting) { + if (history->peer->notify != EmptyNotifySettings && history->peer->notify->mute > unixtime()) { + history->clearNotifications(); + return; + } + } else { + App::wnd()->getNotifySetting(MTP_inputNotifyPeer(history->peer->input)); + } + + uint64 ms = getms() + NotifyWaitTimeout; + notifyWhenAlerts[history].insert(ms); + if (cDesktopNotify()) { + NotifyWhenMaps::iterator i = notifyWhenMaps.find(history); + if (i == notifyWhenMaps.end()) { + i = notifyWhenMaps.insert(history, NotifyWhenMap()); + } + if (i.value().constFind(msgId) == i.value().cend()) { + i.value().insert(msgId, ms); + } + NotifyWaiters *addTo = haveSetting ? ¬ifyWaiters : ¬ifySettingWaiters; + if (addTo->constFind(history) == addTo->cend()) { + addTo->insert(history, NotifyWaiter(msgId, ms)); + } + } + if (haveSetting) { + if (!notifyWaitTimer.isActive()) { + notifyWaitTimer.start(NotifyWaitTimeout); + } + } +} + +void Window::notifyFire() { + notifyShowNext(); +} + +void Window::notifyClear(History *history) { + if (!history) { + for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + (*i)->unlinkHistory(); + } + psClearNotifies(); + for (NotifyWhenMaps::const_iterator i = notifyWhenMaps.cbegin(), e = notifyWhenMaps.cend(); i != e; ++i) { + i.key()->clearNotifications(); + } + notifyWaiters.clear(); + notifySettingWaiters.clear(); + notifyWhenMaps.clear(); + return; + } + notifyWaiters.remove(history); + notifySettingWaiters.remove(history); + for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + (*i)->unlinkHistory(history); + } + psClearNotifies(history->peer->id); + notifyWhenMaps.remove(history); + notifyWhenAlerts.remove(history); +} + +void Window::notifyClearFast() { + notifyWaiters.clear(); + notifySettingWaiters.clear(); + for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + (*i)->deleteLater(); + } + psClearNotifies(); + notifyWindows.clear(); + notifyWhenMaps.clear(); + notifyWhenAlerts.clear(); +} + +void Window::notifySettingGot() { + int32 t = unixtime(); + for (NotifyWaiters::iterator i = notifySettingWaiters.begin(); i != notifySettingWaiters.end();) { + History *history = i.key(); + if (history->peer->notify == UnknownNotifySettings) { + ++i; + } else { + if (history->peer->notify == EmptyNotifySettings || history->peer->notify->mute <= t) { + notifyWaiters.insert(i.key(), i.value()); + } + i = notifySettingWaiters.erase(i); + } + } + notifyWaitTimer.stop(); + notifyShowNext(); +} + +void Window::notifyShowNext(NotifyWindow *remove) { + if (App::quiting()) return; + + int32 count = NotifyWindowsCount; + if (remove) { + for (NotifyWindows::iterator i = notifyWindows.begin(), e = notifyWindows.end(); i != e; ++i) { + if ((*i) == remove) { + notifyWindows.erase(i); + break; + } + } + } + + uint64 ms = getms(), nextAlert = 0; + bool alert = false; + for (NotifyWhenAlerts::iterator i = notifyWhenAlerts.begin(); i != notifyWhenAlerts.end();) { + while (!i.value().isEmpty() && *i.value().begin() <= ms) { + i.value().erase(i.value().begin()); + NotifySettingsPtr n = i.key()->peer->notify; + if (n == EmptyNotifySettings || (n != UnknownNotifySettings && n->mute <= unixtime())) { + alert = true; + } + } + if (i.value().isEmpty()) { + i = notifyWhenAlerts.erase(i); + } else { + if (!nextAlert || nextAlert > *i.value().begin()) { + nextAlert = *i.value().begin(); + } + ++i; + } + } + if (alert) { + psFlash(); + App::playSound(); + } + + if (cCustomNotifies()) { + for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + int32 ind = (*i)->index(); + if (ind < 0) continue; + --count; + } + } + if (count <= 0 || !cDesktopNotify()) { + if (nextAlert) { + notifyWaitTimer.start(nextAlert - ms); + } + return; + } + + QRect r = psDesktopRect(); + int32 x = r.x() + r.width() - st::notifyWidth - st::notifyDeltaX, y = r.y() + r.height() - st::notifyHeight - st::notifyDeltaY; + while (count > 0) { + uint64 next = 0; + HistoryItem *notifyItem = 0; + NotifyWaiters::iterator notifyWaiter; + for (NotifyWaiters::iterator i = notifyWaiters.begin(); i != notifyWaiters.end(); ++i) { + History *history = i.key(); + if (history->currentNotification() && history->currentNotification()->id != i.value().msg) { + NotifyWhenMaps::iterator j = notifyWhenMaps.find(history); + if (j == notifyWhenMaps.end()) { + history->clearNotifications(); + i = notifyWaiters.erase(i); + continue; + } + do { + NotifyWhenMap::const_iterator k = j.value().constFind(history->currentNotification()->id); + if (k != j.value().cend()) { + i.value().msg = k.key(); + i.value().when = k.value(); + break; + } + history->skipNotification(); + } while (history->currentNotification()); + } + if (!history->currentNotification()) { + notifyWhenMaps.remove(history); + i = notifyWaiters.erase(i); + continue; + } + uint64 when = i.value().when; + if (!notifyItem || next > when) { + next = when; + notifyItem = history->currentNotification(); + notifyWaiter = i; + } + } + if (notifyItem) { + if (next > ms) { + if (nextAlert && nextAlert < next) { + next = nextAlert; + nextAlert = 0; + } + notifyWaitTimer.start(next - ms); + break; + } else { + if (cCustomNotifies()) { + NotifyWindow *notify = new NotifyWindow(notifyItem, x, y); + notifyWindows.push_back(notify); + psNotifyShown(notify); + --count; + } else { + psPlatformNotify(notifyItem); + } + + + uint64 ms = getms(); + History *history = notifyItem->history(); + history->skipNotification(); + NotifyWhenMaps::iterator j = notifyWhenMaps.find(history); + if (j == notifyWhenMaps.end() || !history->currentNotification()) { + history->clearNotifications(); + notifyWaiters.erase(notifyWaiter); + if (j != notifyWhenMaps.end()) notifyWhenMaps.erase(j); + continue; + } + j.value().remove(notifyItem->id); + do { + NotifyWhenMap::const_iterator k = j.value().constFind(history->currentNotification()->id); + if (k != j.value().cend()) { + notifyWaiter.value().msg = k.key(); + notifyWaiter.value().when = k.value(); + break; + } + history->skipNotification(); + } while (history->currentNotification()); + if (!history->currentNotification()) { + notifyWaiters.erase(notifyWaiter); + notifyWhenMaps.erase(j); + continue; + } + } + } else { + break; + } + } + if (nextAlert) { + notifyWaitTimer.start(nextAlert - ms); + } + + count = NotifyWindowsCount - count; + for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + int32 ind = (*i)->index(); + if (ind < 0) continue; + --count; + (*i)->moveTo(x, y - count * (st::notifyHeight + st::notifyDeltaY)); + } +} + +void Window::notifyStopHiding() { + if (cCustomNotifies()) { + for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + (*i)->stopHiding(); + } + } +} + +void Window::notifyStartHiding() { + if (cCustomNotifies()) { + for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + (*i)->startHiding(); + } + } +} + +void Window::notifyUpdateAll() { + if (cCustomNotifies()) { + for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + (*i)->updatePeerPhoto(); + } + } +} + +void Window::notifyActivateAll() { + if (cCustomNotifies()) { + for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + psActivateNotify(*i); + } + } +} + Window::~Window() { + notifyClearFast(); delete _tempDeleter; delete _tempDeleterThread; delete _connecting; diff --git a/Telegram/SourceFiles/window.h b/Telegram/SourceFiles/window.h index 66fca6df2..395219ceb 100644 --- a/Telegram/SourceFiles/window.h +++ b/Telegram/SourceFiles/window.h @@ -66,6 +66,61 @@ signals: }; + +class NotifyWindow : public QWidget, public Animated { + Q_OBJECT + +public: + + NotifyWindow(HistoryItem *item, int32 x, int32 y); + + void enterEvent(QEvent *e); + void leaveEvent(QEvent *e); + void mousePressEvent(QMouseEvent *e); + void paintEvent(QPaintEvent *e); + + bool animStep(float64 ms); + void animHide(float64 duration, anim::transition func); + void startHiding(); + void stopHiding(); + void moveTo(int32 x, int32 y, int32 index = -1); + + void updatePeerPhoto(); + + int32 index() const { + return history ? _index : -1; + } + + ~NotifyWindow(); + +public slots: + + void hideByTimer(); + void checkLastInput(); + + void unlinkHistory(History *hist = 0); + +private: + +#ifdef Q_OS_WIN + DWORD started; +#endif + History *history; + IconedButton close; + QPixmap pm; + float64 alphaDuration, posDuration; + QTimer hideTimer, inputTimer; + bool hiding; + int32 _index; + anim::fvalue aOpacity; + anim::transition aOpacityFunc; + anim::ivalue aY; + ImagePtr peerPhoto; + +}; + +typedef QList NotifyWindows; + class Window : public PsMainWindow { Q_OBJECT @@ -150,6 +205,16 @@ public: TempDirState tempDirState(); void tempDirDelete(); + void notifySettingGot(); + void notifySchedule(History *history, MsgId msgId); + void notifyClear(History *history = 0); + void notifyClearFast(); + void notifyShowNext(NotifyWindow *remove = 0); + void notifyStopHiding(); + void notifyStartHiding(); + void notifyUpdateAll(); + void notifyActivateAll(); + public slots: void checkHistoryActivation(int state = -1); @@ -165,6 +230,8 @@ public slots: void onTempDirCleared(); void onTempDirClearFailed(); + + void notifyFire(); signals: @@ -202,6 +269,27 @@ private: bool _inactivePress; QTimer _inactiveTimer; + typedef QMap NotifyWhenMap; + typedef QMap NotifyWhenMaps; + NotifyWhenMaps notifyWhenMaps; + struct NotifyWaiter { + NotifyWaiter(MsgId msg, uint64 when) : msg(msg), when(when) { + } + MsgId msg; + uint64 when; + }; + typedef QMap NotifyWaiters; + NotifyWaiters notifyWaiters; + NotifyWaiters notifySettingWaiters; + QTimer notifyWaitTimer; + + typedef QSet NotifyWhenAlert; + typedef QMap NotifyWhenAlerts; + NotifyWhenAlerts notifyWhenAlerts; + + NotifyWindows notifyWindows; + + }; #endif // MAINWINDOW_H diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index c4e8ffab3..5e8852f73 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.5.5 + 0.5.6 CFBundleSignature ???? NOTE diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index e2b170c38..a0da74670 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -40,6 +40,8 @@ 06EABCC49D2EEE4076322BE7 /* moc_mtp.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 924D4939FD169BB4B8AEB1C9 /* moc_mtp.cpp */; settings = {ATTRIBUTES = (); }; }; 07055CC4194EE85B0008DEF6 /* libcrypto.a in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 07055CC3194EE85B0008DEF6 /* libcrypto.a */; }; 0749CE69194D723400345D61 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 07C3AF24194335ED0016CFF1 /* Images.xcassets */; }; + 07C4753B1967DF1C00CAAFE9 /* switcher.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07C475391967DF1C00CAAFE9 /* switcher.cpp */; }; + 07C4753F1967E37300CAAFE9 /* moc_switcher.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 07C4753E1967E37300CAAFE9 /* moc_switcher.cpp */; }; 0A49F3A5DC0680FB31519670 /* phoneinput.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 7C8F9CA4FCE8AF8FCCCB961E /* phoneinput.cpp */; settings = {ATTRIBUTES = (); }; }; 0CB7DE9A54CC9BF86FB7B5CA /* mtp.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 6D50D70712776D7ED3B00E5C /* mtp.cpp */; settings = {ATTRIBUTES = (); }; }; 0F0FC25286E16E5F78962FEE /* moc_newgroupbox.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = 69FE16874104731CE2A66E0D /* moc_newgroupbox.cpp */; settings = {ATTRIBUTES = (); }; }; @@ -241,6 +243,9 @@ 07C3AF2819433ABF0016CFF1 /* lang.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = lang.txt; path = Resources/lang.txt; sourceTree = SOURCE_ROOT; }; 07C3AF2919433ABF0016CFF1 /* style_classes.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = style_classes.txt; path = Resources/style_classes.txt; sourceTree = SOURCE_ROOT; }; 07C3AF2A19433ABF0016CFF1 /* style.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = style.txt; path = Resources/style.txt; sourceTree = SOURCE_ROOT; }; + 07C475391967DF1C00CAAFE9 /* switcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = switcher.cpp; path = SourceFiles/gui/switcher.cpp; sourceTree = SOURCE_ROOT; }; + 07C4753A1967DF1C00CAAFE9 /* switcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = switcher.h; path = SourceFiles/gui/switcher.h; sourceTree = SOURCE_ROOT; }; + 07C4753E1967E37300CAAFE9 /* moc_switcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moc_switcher.cpp; path = GeneratedFiles/Debug/moc_switcher.cpp; sourceTree = SOURCE_ROOT; }; 08A7682548FB7E671FF03822 /* boxshadow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = boxshadow.cpp; path = SourceFiles/gui/boxshadow.cpp; sourceTree = ""; }; 098EA7CE256AAFAE4A17EB77 /* introcode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = introcode.h; path = SourceFiles/intro/introcode.h; sourceTree = ""; }; 09FD01F2BD652EB838A296D8 /* application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = application.h; path = SourceFiles/application.h; sourceTree = ""; }; @@ -757,6 +762,7 @@ 7C8F9CA4FCE8AF8FCCCB961E /* phoneinput.cpp */, 6E1859D714E4471E053D90C9 /* scrollarea.cpp */, 420A06A32B66D250142B4B6D /* style_core.cpp */, + 07C475391967DF1C00CAAFE9 /* switcher.cpp */, 135FD3715BFDC50AD7B00E04 /* text.cpp */, BB1602EA641643DE565005B1 /* twidget.cpp */, 85FABD67716E36CD8B3CA4FA /* animation.h */, @@ -775,6 +781,7 @@ F1B68FFCE8AE823F6D45EB06 /* phoneinput.h */, 83A36F229E897566E011B79E /* scrollarea.h */, 0FC38EE7F29EF895925A2C49 /* style_core.h */, + 07C4753A1967DF1C00CAAFE9 /* switcher.h */, 6E8FD0ED1B60D43929944CD2 /* text.h */, 507CCEEC4CBA3E3BD6EEDED1 /* twidget.h */, ); @@ -994,6 +1001,7 @@ 801973D3334D0FCA849CF485 /* Debug */ = { isa = PBXGroup; children = ( + 07C4753E1967E37300CAAFE9 /* moc_switcher.cpp */, E181C525E21A16F2D4396CA7 /* moc_application.cpp */, 3B3ED09AB00290D78CF1181B /* moc_dialogswidget.cpp */, AC9B5F6FB4B984C8D76F7AE2 /* moc_dropdown.cpp */, @@ -1360,11 +1368,13 @@ E9F1CE7F9B18C7C85A50E62D /* style_auto.cpp in Compile Sources */, EBE29731916DB43BF49FE7A4 /* aboutbox.cpp in Compile Sources */, 4426AF526AAD86D6F73CE36F /* addcontactbox.cpp in Compile Sources */, + 07C4753B1967DF1C00CAAFE9 /* switcher.cpp in Compile Sources */, 830CB6F547B8C80A569A0271 /* addparticipantbox.cpp in Compile Sources */, A0A6B97F7DBEC81004EC9461 /* confirmbox.cpp in Compile Sources */, 4FEA8F51B7BC7CAC71347A1A /* connectionbox.cpp in Compile Sources */, 298BFAB73BF182297584F96F /* contactsbox.cpp in Compile Sources */, BA41D511A9BBCA09365DF88C /* downloadpathbox.cpp in Compile Sources */, + 07C4753F1967E37300CAAFE9 /* moc_switcher.cpp in Compile Sources */, 3ABE4F9B2264F770D944106D /* emojibox.cpp in Compile Sources */, 7422A321DF80CF9FAC7CB51B /* newgroupbox.cpp in Compile Sources */, 77B998AC22A13EF3DDEE07AC /* photocropbox.cpp in Compile Sources */, @@ -1491,9 +1501,9 @@ CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.5.4; + CURRENT_PROJECT_VERSION = 0.5.6; DYLIB_COMPATIBILITY_VERSION = 0.5; - DYLIB_CURRENT_VERSION = 0.5.5; + DYLIB_CURRENT_VERSION = 0.5.6; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; @@ -1615,10 +1625,10 @@ CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.5.4; + CURRENT_PROJECT_VERSION = 0.5.6; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.5; - DYLIB_CURRENT_VERSION = 0.5.5; + DYLIB_CURRENT_VERSION = 0.5.6; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; diff --git a/Telegram/Telegram.xcodeproj/qt_preprocess.mak b/Telegram/Telegram.xcodeproj/qt_preprocess.mak index 034888753..55b17c763 100644 --- a/Telegram/Telegram.xcodeproj/qt_preprocess.mak +++ b/Telegram/Telegram.xcodeproj/qt_preprocess.mak @@ -40,7 +40,7 @@ compilers: GeneratedFiles/qrc_telegram.cpp GeneratedFiles/Debug/moc_application. GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp\ GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp\ GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp\ - GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp\ + GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp\ GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_addparticipantbox.cpp\ GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp\ GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_newgroupbox.cpp\ @@ -88,9 +88,9 @@ GeneratedFiles/qrc_telegram.cpp: SourceFiles/telegram.qrc \ SourceFiles/art/chatcolor2.png /usr/local/Qt-5.3.0/bin/rcc -name telegram SourceFiles/telegram.qrc -o GeneratedFiles/qrc_telegram.cpp -compiler_moc_header_make_all: GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_addparticipantbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_newgroupbox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp +compiler_moc_header_make_all: GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_addparticipantbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_newgroupbox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp compiler_moc_header_clean: - -$(DEL_FILE) GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_addparticipantbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_newgroupbox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp + -$(DEL_FILE) GeneratedFiles/Debug/moc_application.cpp GeneratedFiles/Debug/moc_dialogswidget.cpp GeneratedFiles/Debug/moc_dropdown.cpp GeneratedFiles/Debug/moc_fileuploader.cpp GeneratedFiles/Debug/moc_historywidget.cpp GeneratedFiles/Debug/moc_layerwidget.cpp GeneratedFiles/Debug/moc_profilewidget.cpp GeneratedFiles/Debug/moc_localimageloader.cpp GeneratedFiles/Debug/moc_mainwidget.cpp GeneratedFiles/Debug/moc_settingswidget.cpp GeneratedFiles/Debug/moc_sysbuttons.cpp GeneratedFiles/Debug/moc_title.cpp GeneratedFiles/Debug/moc_window.cpp GeneratedFiles/Debug/moc_mtp.cpp GeneratedFiles/Debug/moc_mtpConnection.cpp GeneratedFiles/Debug/moc_mtpDC.cpp GeneratedFiles/Debug/moc_mtpFileLoader.cpp GeneratedFiles/Debug/moc_mtpSession.cpp GeneratedFiles/Debug/moc_animation.cpp GeneratedFiles/Debug/moc_button.cpp GeneratedFiles/Debug/moc_countrycodeinput.cpp GeneratedFiles/Debug/moc_countryinput.cpp GeneratedFiles/Debug/moc_flatbutton.cpp GeneratedFiles/Debug/moc_flatcheckbox.cpp GeneratedFiles/Debug/moc_flatinput.cpp GeneratedFiles/Debug/moc_flatlabel.cpp GeneratedFiles/Debug/moc_flattextarea.cpp GeneratedFiles/Debug/moc_switcher.cpp GeneratedFiles/Debug/moc_phoneinput.cpp GeneratedFiles/Debug/moc_scrollarea.cpp GeneratedFiles/Debug/moc_twidget.cpp GeneratedFiles/Debug/moc_aboutbox.cpp GeneratedFiles/Debug/moc_addcontactbox.cpp GeneratedFiles/Debug/moc_addparticipantbox.cpp GeneratedFiles/Debug/moc_confirmbox.cpp GeneratedFiles/Debug/moc_connectionbox.cpp GeneratedFiles/Debug/moc_contactsbox.cpp GeneratedFiles/Debug/moc_downloadpathbox.cpp GeneratedFiles/Debug/moc_emojibox.cpp GeneratedFiles/Debug/moc_newgroupbox.cpp GeneratedFiles/Debug/moc_photocropbox.cpp GeneratedFiles/Debug/moc_photosendbox.cpp GeneratedFiles/Debug/moc_intro.cpp GeneratedFiles/Debug/moc_introcode.cpp GeneratedFiles/Debug/moc_introphone.cpp GeneratedFiles/Debug/moc_introsignup.cpp GeneratedFiles/Debug/moc_pspecific_mac.cpp GeneratedFiles/Debug/moc_application.cpp: ../../Libraries/QtStatic/qtbase/include/QtNetwork/QLocalSocket \ ../../Libraries/QtStatic/qtbase/include/QtNetwork/QLocalServer \ ../../Libraries/QtStatic/qtbase/include/QtNetwork/QNetworkReply \ @@ -377,6 +377,20 @@ GeneratedFiles/Debug/moc_flattextarea.cpp: ../../Libraries/QtStatic/qtbase/inclu SourceFiles/gui/flattextarea.h /usr/local/Qt-5.3.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.3.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.3.0/include/QtGui/5.3.0/QtGui -I/usr/local/Qt-5.3.0/include/QtCore/5.3.0/QtCore -I/usr/local/Qt-5.3.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -I/usr/local/Qt-5.3.0/include/QtGui -I/usr/local/Qt-5.3.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/flattextarea.h -o GeneratedFiles/Debug/moc_flattextarea.cpp +GeneratedFiles/Debug/moc_switcher.cpp: ../../Libraries/QtStatic/qtbase/include/QtWidgets/QWidget \ + SourceFiles/gui/twidget.h \ + SourceFiles/style.h \ + GeneratedFiles/style_classes.h \ + GeneratedFiles/style_auto.h \ + SourceFiles/gui/animation.h \ + SourceFiles/types.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QReadWriteLock \ + SourceFiles/logs.h \ + ../../Libraries/QtStatic/qtbase/include/QtCore/QTimer \ + ../../Libraries/QtStatic/qtbase/include/QtGui/QColor \ + SourceFiles/gui/switcher.h + /usr/local/Qt-5.3.0/bin/moc $(DEFINES) -D__APPLE__ -D__GNUC__=4 -I/usr/local/Qt-5.3.0/mkspecs/macx-clang -I. -I/usr/local/Qt-5.3.0/include/QtGui/5.3.0/QtGui -I/usr/local/Qt-5.3.0/include/QtCore/5.3.0/QtCore -I/usr/local/Qt-5.3.0/include -I./SourceFiles -I./GeneratedFiles -I../../Libraries/lzma/C -I../../Libraries/libexif-0.6.20 -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtMultimedia -I/usr/local/Qt-5.3.0/include/QtWidgets -I/usr/local/Qt-5.3.0/include/QtNetwork -I/usr/local/Qt-5.3.0/include/QtGui -I/usr/local/Qt-5.3.0/include/QtCore -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/c++/4.2.1/backward -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/5.1/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include SourceFiles/gui/switcher.h -o GeneratedFiles/Debug/moc_switcher.cpp + GeneratedFiles/Debug/moc_phoneinput.cpp: SourceFiles/gui/flatinput.h \ ../../Libraries/QtStatic/qtbase/include/QtWidgets/QLineEdit \ SourceFiles/style.h \ From 4e763dcb263c442a5962f7d9a44b21ea8984a626 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 6 Jul 2014 07:40:01 +0400 Subject: [PATCH 3/4] removed debug code --- Telegram/SourceFiles/application.cpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 7be317a70..395b23c56 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -85,16 +85,6 @@ Application::Application(int &argc, char **argv) : PsApplication(argc, argv), QFontDatabase::addApplicationFont(qsl(":/gui/art/OpenSans-Bold.ttf")); QFontDatabase::addApplicationFont(qsl(":/gui/art/OpenSans-Semibold.ttf")); - { - QImage img(800, 600, QImage::Format_ARGB32_Premultiplied); - QPainter p(&img); - QFont f; - f.setPixelSize(24); - f.setFamily("Open Sans Semibold"); - p.setFont(f); - p.drawText(0, 0, "t"); - } - float64 dpi = primaryScreen()->logicalDotsPerInch(); if (dpi <= 108) { // 0-96-108 cSetScreenScale(dbisOne); From a810fe258afbf79405240f252632457e7a56bbd6 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 8 Jul 2014 10:36:58 +0400 Subject: [PATCH 4/4] moved to qt 5.3.1, fixed bitmap unpack bug in qt --- MSVC.md | 12 +- README.md | 2 +- Telegram/SourceFiles/localimageloader.cpp | 2 +- Telegram/Telegram.vcxproj | 288 +++--- .../qtbase/mkspecs/win32-msvc2013/qmake.conf | 0 .../qmake/generators/mac/pbuilder_pbx.cpp | 28 +- .../qtbase/qmake/generators/makefile.cpp | 28 +- .../qtbase/src/gui/image/qbmphandler.cpp | 898 ++++++++++++++++++ .../src/gui/kernel/qplatformdialoghelper.h | 0 .../qtbase/src/gui/painting/qpaintengine_p.h | 18 +- .../qtbase/src/gui/text/qtextlayout.h | 0 .../socket/qnativesocketengine_win.cpp | 3 +- .../plugins/platforms/cocoa/qcocoawindow.mm | 37 +- .../src/plugins/platforms/cocoa/qnsview.mm | 43 +- .../windows/qwindowsdialoghelpers.cpp | 0 .../platforms/windows/qwindowswindow.cpp | 31 +- .../platforms/windows/qwindowswindow.h | 2 +- .../src/widgets/dialogs/qfiledialog.cpp | 77 +- .../qtbase/src/widgets/dialogs/qfiledialog.h | 0 .../src/widgets/dialogs/qfiledialog_p.h | 0 20 files changed, 1229 insertions(+), 240 deletions(-) rename Telegram/{_qt_5_3_0_patch => _qt_5_3_1_patch}/qtbase/mkspecs/win32-msvc2013/qmake.conf (100%) rename Telegram/{_qt_5_3_0_patch => _qt_5_3_1_patch}/qtbase/qmake/generators/mac/pbuilder_pbx.cpp (99%) rename Telegram/{_qt_5_3_0_patch => _qt_5_3_1_patch}/qtbase/qmake/generators/makefile.cpp (99%) create mode 100644 Telegram/_qt_5_3_1_patch/qtbase/src/gui/image/qbmphandler.cpp rename Telegram/{_qt_5_3_0_patch => _qt_5_3_1_patch}/qtbase/src/gui/kernel/qplatformdialoghelper.h (100%) rename Telegram/{_qt_5_3_0_patch => _qt_5_3_1_patch}/qtbase/src/gui/painting/qpaintengine_p.h (87%) rename Telegram/{_qt_5_3_0_patch => _qt_5_3_1_patch}/qtbase/src/gui/text/qtextlayout.h (100%) rename Telegram/{_qt_5_3_0_patch => _qt_5_3_1_patch}/qtbase/src/network/socket/qnativesocketengine_win.cpp (99%) rename Telegram/{_qt_5_3_0_patch => _qt_5_3_1_patch}/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm (97%) rename Telegram/{_qt_5_3_0_patch => _qt_5_3_1_patch}/qtbase/src/plugins/platforms/cocoa/qnsview.mm (97%) rename Telegram/{_qt_5_3_0_patch => _qt_5_3_1_patch}/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp (100%) rename Telegram/{_qt_5_3_0_patch => _qt_5_3_1_patch}/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp (98%) rename Telegram/{_qt_5_3_0_patch => _qt_5_3_1_patch}/qtbase/src/plugins/platforms/windows/qwindowswindow.h (99%) rename Telegram/{_qt_5_3_0_patch => _qt_5_3_1_patch}/qtbase/src/widgets/dialogs/qfiledialog.cpp (98%) rename Telegram/{_qt_5_3_0_patch => _qt_5_3_1_patch}/qtbase/src/widgets/dialogs/qfiledialog.h (100%) rename Telegram/{_qt_5_3_0_patch => _qt_5_3_1_patch}/qtbase/src/widgets/dialogs/qfiledialog_p.h (100%) diff --git a/MSVC.md b/MSVC.md index eb0104b24..cf8f5acaf 100644 --- a/MSVC.md +++ b/MSVC.md @@ -66,13 +66,13 @@ or download in ZIP and extract to **D:\TBuild\Libraries\**, rename **libexif-0.6 * Build Debug configuration * Build Release configuration -####Qt 5.3.0, slightly patched +####Qt 5.3.1, slightly patched -http://download.qt-project.org/official_releases/qt/5.3/5.3.0/single/qt-everywhere-opensource-src-5.3.0.zip +http://download.qt-project.org/official_releases/qt/5.3/5.3.1/single/qt-everywhere-opensource-src-5.3.1.zip -Extract to **D:\TBuild\Libraries\**, rename **qt-everywhere-opensource-src-5.3.0** to **QtStatic** to have **D:\TBuild\Libraries\QtStatic\qtbase\** folder +Extract to **D:\TBuild\Libraries\**, rename **qt-everywhere-opensource-src-5.3.1** to **QtStatic** to have **D:\TBuild\Libraries\QtStatic\qtbase\** folder -Apply patch – copy (with overwrite!) everything from **D:\TBuild\tdesktop\\\_qt\_5\_3\_0\_patch\** to **D:\TBuild\Libraries\QtStatic\** +Apply patch – copy (with overwrite!) everything from **D:\TBuild\tdesktop\\\_qt\_5\_3\_1\_patch\** to **D:\TBuild\Libraries\QtStatic\** #####Building library @@ -106,8 +106,8 @@ Close all VS2013 instances and install to default location * Launch VS2013 for configuring Qt Addin * QT5 > Qt Options > Add - * Version name: **QtStatic.5.3.0** + * Version name: **QtStatic.5.3.1** * Path: **D:\TBuild\Libraries\QtStatic\qtbase** -* Default Qt/Win version: **QtStatic.5.3.0** – **OK** +* Default Qt/Win version: **QtStatic.5.3.1** – **OK** * File > Open > Project/Solution > **D:\TBuild\tdesktop\Telegram.sln** * Build \ Build Solution (Debug and Release configurations) diff --git a/README.md b/README.md index b1422e9e0..2dae81eef 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Only Windows and OS X systems are supported at this moment, Linux builds are on ###Third-party -* Qt 5.3.0, slightly patched ([GPL](http://qt-project.org/doc/qt-5/gpl.html)) +* Qt 5.3.1, slightly patched ([GPL](http://qt-project.org/doc/qt-5/gpl.html)) * OpenSSL 1.0.1g ([OpenSSL License](https://www.openssl.org/source/license.html)) * zlib 1.2.8 ([zlib License](http://www.zlib.net/zlib_license.html)) * libexif 0.6.20 ([LGPL](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html)) diff --git a/Telegram/SourceFiles/localimageloader.cpp b/Telegram/SourceFiles/localimageloader.cpp index 8b180efc2..c912c833c 100644 --- a/Telegram/SourceFiles/localimageloader.cpp +++ b/Telegram/SourceFiles/localimageloader.cpp @@ -100,7 +100,7 @@ void LocalImageLoaderPrivate::prepareImages() { } } else { type = ToPreparePhoto; // only photo from QImage - filename = qsl("Photo.jpg"); + filename = qsl("Untitled.jpg"); filesize = 0; } diff --git a/Telegram/Telegram.vcxproj b/Telegram/Telegram.vcxproj index 7becdb7db..58da9772b 100644 --- a/Telegram/Telegram.vcxproj +++ b/Telegram/Telegram.vcxproj @@ -66,7 +66,7 @@ UNICODE;WIN32;WIN64;HAVE_STDINT_H;ZLIB_WINAPI;%(PreprocessorDefinitions) - .\..\..\Libraries\lzma\C;.\..\..\Libraries\libexif-0.6.20;.\..\..\Libraries\zlib-1.2.8;.\..\..\Libraries\OpenSSL-Win32\include;.\SourceFiles;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore;.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui;%(AdditionalIncludeDirectories) + .\..\..\Libraries\lzma\C;.\..\..\Libraries\libexif-0.6.20;.\..\..\Libraries\zlib-1.2.8;.\..\..\Libraries\OpenSSL-Win32\include;.\SourceFiles;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore;.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui;%(AdditionalIncludeDirectories) ProgramDatabase false Use @@ -93,7 +93,7 @@ UNICODE;_WITH_DEBUG;WIN32;WIN64;HAVE_STDINT_H;ZLIB_WINAPI;QT_NO_DEBUG;NDEBUG;%(PreprocessorDefinitions) - .\..\..\Libraries\lzma\C;.\..\..\Libraries\libexif-0.6.20;.\..\..\Libraries\zlib-1.2.8;.\..\..\Libraries\OpenSSL-Win32\include;.\SourceFiles;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore;.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui;%(AdditionalIncludeDirectories) + .\..\..\Libraries\lzma\C;.\..\..\Libraries\libexif-0.6.20;.\..\..\Libraries\zlib-1.2.8;.\..\..\Libraries\OpenSSL-Win32\include;.\SourceFiles;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore;.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui;%(AdditionalIncludeDirectories) ProgramDatabase MultiThreaded false @@ -120,7 +120,7 @@ CUSTOM_API_ID;UNICODE;_WITH_DEBUG;WIN32;WIN64;HAVE_STDINT_H;ZLIB_WINAPI;QT_NO_DEBUG;NDEBUG;%(PreprocessorDefinitions) - .\..\..\Libraries\lzma\C;.\..\..\Libraries\libexif-0.6.20;.\..\..\Libraries\zlib-1.2.8;.\..\..\Libraries\OpenSSL-Win32\include;.\SourceFiles;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore;.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui;%(AdditionalIncludeDirectories) + .\..\..\Libraries\lzma\C;.\..\..\Libraries\libexif-0.6.20;.\..\..\Libraries\zlib-1.2.8;.\..\..\Libraries\OpenSSL-Win32\include;.\SourceFiles;.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore;.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui;%(AdditionalIncludeDirectories) ProgramDatabase MultiThreaded false @@ -793,13 +793,13 @@ Moc%27ing window.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/window.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h" Moc%27ing window.h... Moc%27ing window.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/window.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/window.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -820,13 +820,13 @@ Moc%27ing application.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/application.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/application.h" Moc%27ing application.h... Moc%27ing application.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/application.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/application.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/application.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/application.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -839,13 +839,13 @@ Moc%27ing aboutbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/aboutbox.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/aboutbox.h" Moc%27ing aboutbox.h... Moc%27ing aboutbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/aboutbox.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/aboutbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/aboutbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/aboutbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -853,13 +853,13 @@ Moc%27ing addcontactbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/addcontactbox.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addcontactbox.h" Moc%27ing addcontactbox.h... Moc%27ing addcontactbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/addcontactbox.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addcontactbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addcontactbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addcontactbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -867,13 +867,13 @@ Moc%27ing addparticipantbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/addparticipantbox.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addparticipantbox.h" Moc%27ing addparticipantbox.h... Moc%27ing addparticipantbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/addparticipantbox.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addparticipantbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addparticipantbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/addparticipantbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -881,13 +881,13 @@ Moc%27ing confirmbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/confirmbox.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/confirmbox.h" Moc%27ing confirmbox.h... Moc%27ing confirmbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/confirmbox.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/confirmbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/confirmbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/confirmbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -895,13 +895,13 @@ Moc%27ing connectionbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/connectionbox.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/connectionbox.h" Moc%27ing connectionbox.h... Moc%27ing connectionbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/connectionbox.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/connectionbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/connectionbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/connectionbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -909,13 +909,13 @@ Moc%27ing contactsbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/contactsbox.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/contactsbox.h" Moc%27ing contactsbox.h... Moc%27ing contactsbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/contactsbox.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/contactsbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/contactsbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/contactsbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -923,13 +923,13 @@ Moc%27ing newgroupbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/newgroupbox.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/newgroupbox.h" Moc%27ing newgroupbox.h... Moc%27ing newgroupbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/newgroupbox.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/newgroupbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/newgroupbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/newgroupbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -937,13 +937,13 @@ Moc%27ing photocropbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/photocropbox.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photocropbox.h" Moc%27ing photocropbox.h... Moc%27ing photocropbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/photocropbox.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photocropbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photocropbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photocropbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -951,13 +951,13 @@ Moc%27ing photosendbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/photosendbox.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photosendbox.h" Moc%27ing photosendbox.h... Moc%27ing photosendbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/photosendbox.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photosendbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photosendbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/photosendbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -965,13 +965,13 @@ Moc%27ing emojibox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/emojibox.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/emojibox.h" Moc%27ing emojibox.h... Moc%27ing emojibox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/emojibox.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/emojibox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/emojibox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/emojibox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -979,13 +979,13 @@ Moc%27ing downloadpathbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/downloadpathbox.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/downloadpathbox.h" Moc%27ing downloadpathbox.h... Moc%27ing downloadpathbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/boxes/downloadpathbox.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/downloadpathbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/downloadpathbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/boxes/downloadpathbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -994,13 +994,13 @@ Moc%27ing animation.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/animation.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/animation.h" Moc%27ing animation.h... Moc%27ing animation.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/animation.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/animation.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/animation.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/animation.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1008,13 +1008,13 @@ Moc%27ing button.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/button.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/button.h" Moc%27ing button.h... Moc%27ing button.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/button.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/button.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/button.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/button.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1022,13 +1022,13 @@ Moc%27ing flatbutton.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/flatbutton.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatbutton.h" Moc%27ing flatbutton.h... Moc%27ing flatbutton.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/flatbutton.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatbutton.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatbutton.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatbutton.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1036,13 +1036,13 @@ Moc%27ing flatinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/flatinput.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatinput.h" Moc%27ing flatinput.h... Moc%27ing flatinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/flatinput.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatinput.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1050,13 +1050,13 @@ Moc%27ing countrycodeinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/countrycodeinput.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countrycodeinput.h" Moc%27ing countrycodeinput.h... Moc%27ing countrycodeinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/countrycodeinput.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countrycodeinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countrycodeinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countrycodeinput.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1064,13 +1064,13 @@ Moc%27ing phoneinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/phoneinput.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/phoneinput.h" Moc%27ing phoneinput.h... Moc%27ing phoneinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/phoneinput.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/phoneinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/phoneinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/phoneinput.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1078,13 +1078,13 @@ Moc%27ing countryinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/countryinput.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countryinput.h" Moc%27ing countryinput.h... Moc%27ing countryinput.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/countryinput.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countryinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countryinput.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/countryinput.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1093,13 +1093,13 @@ Moc%27ing scrollarea.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/scrollarea.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/scrollarea.h" Moc%27ing scrollarea.h... Moc%27ing scrollarea.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/scrollarea.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/scrollarea.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/scrollarea.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/scrollarea.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1107,13 +1107,13 @@ Moc%27ing dialogswidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/dialogswidget.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/dialogswidget.h" Moc%27ing dialogswidget.h... Moc%27ing dialogswidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/dialogswidget.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dialogswidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/dialogswidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/dialogswidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1121,13 +1121,13 @@ Moc%27ing flattextarea.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/flattextarea.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flattextarea.h" Moc%27ing flattextarea.h... Moc%27ing flattextarea.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/flattextarea.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flattextarea.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flattextarea.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flattextarea.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1135,13 +1135,13 @@ Moc%27ing fileuploader.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/fileuploader.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/fileuploader.h" Moc%27ing fileuploader.h... Moc%27ing fileuploader.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/fileuploader.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/fileuploader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/fileuploader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/fileuploader.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1149,13 +1149,13 @@ Moc%27ing dropdown.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/dropdown.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/dropdown.h" Moc%27ing dropdown.h... Moc%27ing dropdown.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/dropdown.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/dropdown.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/dropdown.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/dropdown.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1165,13 +1165,13 @@ Moc%27ing flatcheckbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/flatcheckbox.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatcheckbox.h" Moc%27ing flatcheckbox.h... Moc%27ing flatcheckbox.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/flatcheckbox.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatcheckbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatcheckbox.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatcheckbox.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1200,13 +1200,13 @@ Moc%27ing flatlabel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/flatlabel.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatlabel.h" Moc%27ing flatlabel.h... Moc%27ing flatlabel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/flatlabel.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatlabel.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatlabel.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/flatlabel.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1214,13 +1214,13 @@ Moc%27ing twidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/twidget.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/twidget.h" Moc%27ing twidget.h... Moc%27ing twidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/twidget.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/twidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/twidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/twidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1230,28 +1230,28 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing switcher.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing switcher.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing switcher.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/gui/switcher.h" Moc%27ing historywidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/historywidget.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/historywidget.h" Moc%27ing historywidget.h... Moc%27ing historywidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/historywidget.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/historywidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/historywidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/historywidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1259,13 +1259,13 @@ Moc%27ing intro.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/intro/intro.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intro.h" Moc%27ing intro.h... Moc%27ing intro.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/intro/intro.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intro.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intro.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/intro.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1273,13 +1273,13 @@ Moc%27ing introcode.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/intro/introcode.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introcode.h" Moc%27ing introcode.h... Moc%27ing introcode.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/intro/introcode.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introcode.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introcode.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introcode.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1287,13 +1287,13 @@ Moc%27ing introphone.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/intro/introphone.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introphone.h" Moc%27ing introphone.h... Moc%27ing introphone.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/intro/introphone.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introphone.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introphone.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introphone.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1301,13 +1301,13 @@ Moc%27ing introsignup.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/intro/introsignup.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introsignup.h" Moc%27ing introsignup.h... Moc%27ing introsignup.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/intro/introsignup.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introsignup.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introsignup.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/intro/introsignup.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1316,13 +1316,13 @@ Moc%27ing layerwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/layerwidget.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/layerwidget.h" Moc%27ing layerwidget.h... Moc%27ing layerwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/layerwidget.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/layerwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/layerwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/layerwidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1330,13 +1330,13 @@ Moc%27ing localimageloader.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/localimageloader.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/localimageloader.h" Moc%27ing localimageloader.h... Moc%27ing localimageloader.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/localimageloader.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/localimageloader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/localimageloader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/localimageloader.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1346,13 +1346,13 @@ Moc%27ing mtpConnection.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpConnection.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpConnection.h" Moc%27ing mtpConnection.h... Moc%27ing mtpConnection.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpConnection.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpConnection.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpConnection.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpConnection.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1360,13 +1360,13 @@ Moc%27ing mainwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/mainwidget.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/mainwidget.h" Moc%27ing mainwidget.h... Moc%27ing mainwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/mainwidget.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mainwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/mainwidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/mainwidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1374,13 +1374,13 @@ Moc%27ing mtp.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtp.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtp.h" Moc%27ing mtp.h... Moc%27ing mtp.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtp.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtp.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtp.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtp.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1389,13 +1389,13 @@ Moc%27ing mtpFileLoader.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpFileLoader.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpFileLoader.h" Moc%27ing mtpFileLoader.h... Moc%27ing mtpFileLoader.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpFileLoader.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpFileLoader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpFileLoader.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpFileLoader.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1405,13 +1405,13 @@ Moc%27ing mtpDC.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpDC.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpDC.h" Moc%27ing mtpDC.h... Moc%27ing mtpDC.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpDC.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpDC.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpDC.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpDC.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1421,13 +1421,13 @@ Moc%27ing mtpSession.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpSession.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpSession.h" Moc%27ing mtpSession.h... Moc%27ing mtpSession.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpSession.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpSession.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpSession.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/mtproto/mtpSession.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1435,13 +1435,13 @@ Moc%27ing settingswidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/settingswidget.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/settingswidget.h" Moc%27ing settingswidget.h... Moc%27ing settingswidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/settingswidget.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/settingswidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/settingswidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/settingswidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1449,13 +1449,13 @@ Moc%27ing profilewidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/profilewidget.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/profilewidget.h" Moc%27ing profilewidget.h... Moc%27ing profilewidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/profilewidget.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/profilewidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/profilewidget.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/profilewidget.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1463,13 +1463,13 @@ Moc%27ing pspecific_wnd.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/pspecific_wnd.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_wnd.h" Moc%27ing pspecific_wnd.h... Moc%27ing pspecific_wnd.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/pspecific_wnd.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_wnd.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_wnd.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/pspecific_wnd.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1482,13 +1482,13 @@ Moc%27ing sysbuttons.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/sysbuttons.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/sysbuttons.h" Moc%27ing sysbuttons.h... Moc%27ing sysbuttons.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/sysbuttons.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/sysbuttons.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/sysbuttons.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/sysbuttons.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1496,13 +1496,13 @@ Moc%27ing title.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/title.h" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/title.h" Moc%27ing title.h... Moc%27ing title.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fstdafx.h" "-f../../SourceFiles/title.h" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.0\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.0\QtGui" "-fstdafx.h" "-f../../SourceFiles/title.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/title.h" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DCUSTOM_API_ID -DUNICODE -D_WITH_DEBUG -DWIN32 -DWIN64 -DHAVE_STDINT_H -DZLIB_WINAPI -DQT_NO_DEBUG -DNDEBUG "-I.\..\..\Libraries\lzma\C" "-I.\..\..\Libraries\libexif-0.6.20" "-I.\..\..\Libraries\zlib-1.2.8" "-I.\..\..\Libraries\OpenSSL-Win32\include" "-I.\SourceFiles" "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I.\..\..\Libraries\QtStatic\qtbase\include\QtCore\5.3.1\QtCore" "-I.\..\..\Libraries\QtStatic\qtbase\include\QtGui\5.3.1\QtGui" "-fstdafx.h" "-f../../SourceFiles/title.h" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) diff --git a/Telegram/_qt_5_3_0_patch/qtbase/mkspecs/win32-msvc2013/qmake.conf b/Telegram/_qt_5_3_1_patch/qtbase/mkspecs/win32-msvc2013/qmake.conf similarity index 100% rename from Telegram/_qt_5_3_0_patch/qtbase/mkspecs/win32-msvc2013/qmake.conf rename to Telegram/_qt_5_3_1_patch/qtbase/mkspecs/win32-msvc2013/qmake.conf diff --git a/Telegram/_qt_5_3_0_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp b/Telegram/_qt_5_3_1_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp similarity index 99% rename from Telegram/_qt_5_3_0_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp rename to Telegram/_qt_5_3_1_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp index 2dbec5632..6613018fc 100644 --- a/Telegram/_qt_5_3_0_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp +++ b/Telegram/_qt_5_3_1_patch/qtbase/qmake/generators/mac/pbuilder_pbx.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the qmake application of the Qt Toolkit. @@ -1116,7 +1116,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) //all files const ProStringList &files = project->values(ProKey(bundle_data[i] + ".files")); for(int file = 0; file < files.count(); file++) { - QString fn = files[file].toQString(); + QString fn = fileFixify(files[file].toQString(), Option::output_dir, input_dir); QString file_ref_key = keyFor("QMAKE_PBX_BUNDLE_DATA_FILE_REF." + bundle_data[i] + "-" + fn); bundle_file_refs += file_ref_key; t << "\t\t" << file_ref_key << " = {\n" @@ -1390,9 +1390,13 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) (project->first("TEMPLATE") == "lib" && !project->isActiveConfig("staticlib") && project->isActiveConfig("lib_bundle"))) { QString plist = fileFixify(project->first("QMAKE_INFO_PLIST").toQString(), Option::output_dir, input_dir); - if (plist.isEmpty()) + if (!plist.isEmpty()) { + if (exists(plist)) + t << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", plist) << ";\n"; + else + warn_msg(WarnLogic, "Could not resolve Info.plist: '%s'. Check if QMAKE_INFO_PLIST points to a valid file.", plist.toLatin1().constData()); + } else { plist = specdir() + QDir::separator() + "Info.plist." + project->first("TEMPLATE"); - if (exists(plist)) { QFile plist_in_file(plist); if (plist_in_file.open(QIODevice::ReadOnly)) { QTextStream plist_in(&plist_in_file); @@ -1415,21 +1419,19 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) plist_in_text = plist_in_text.replace("@TYPEINFO@", (project->isEmpty("QMAKE_PKGINFO_TYPEINFO") ? QString::fromLatin1("????") : project->first("QMAKE_PKGINFO_TYPEINFO").left(4).toQString())); - QString plist_dir; - if (!project->isEmpty("PLIST_DIR")) - plist_dir = project->first("PLIST_DIR").toQString(); - QString plist_in_filename = QFileInfo(plist_in_file).fileName(); - QFile plist_out_file(plist_dir + plist_in_filename); // QFile plist_out_file("Info.plist"); + QString plist_dir; + if (!project->isEmpty("PLIST_DIR")) + plist_dir = project->first("PLIST_DIR").toQString(); + QString plist_in_filename = QFileInfo(plist_in_file).fileName(); + QFile plist_out_file(plist_dir + plist_in_filename); if (plist_out_file.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream plist_out(&plist_out_file); plist_out << plist_in_text; // t << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", "Info.plist") << ";\n"; - t << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", fixForOutput(plist_dir + plist_in_filename)) << ";\n"; - } + t << "\t\t\t\t" << writeSettings("INFOPLIST_FILE", fixForOutput(plist_dir + plist_in_filename)) << ";\n"; + } } - } else { - warn_msg(WarnLogic, "Could not resolve Info.plist: '%s'. Check if QMAKE_INFO_PLIST points to a valid file.", plist.toLatin1().constData()); } } diff --git a/Telegram/_qt_5_3_0_patch/qtbase/qmake/generators/makefile.cpp b/Telegram/_qt_5_3_1_patch/qtbase/qmake/generators/makefile.cpp similarity index 99% rename from Telegram/_qt_5_3_0_patch/qtbase/qmake/generators/makefile.cpp rename to Telegram/_qt_5_3_1_patch/qtbase/qmake/generators/makefile.cpp index 6eba1ef6c..4242f93f7 100644 --- a/Telegram/_qt_5_3_0_patch/qtbase/qmake/generators/makefile.cpp +++ b/Telegram/_qt_5_3_1_patch/qtbase/qmake/generators/makefile.cpp @@ -370,7 +370,8 @@ MakefileGenerator::findFilesInVPATH(ProStringList l, uchar flags, const QString regex.remove(0, dir.length()); } if(real_dir.isEmpty() || exists(real_dir)) { - QStringList files = QDir(real_dir).entryList(QStringList(regex)); + QStringList files = QDir(real_dir).entryList(QStringList(regex), + QDir::NoDotAndDotDot | QDir::AllEntries); if(files.isEmpty()) { debug_msg(1, "%s:%d Failure to find %s in vpath (%s)", __FILE__, __LINE__, @@ -383,8 +384,6 @@ MakefileGenerator::findFilesInVPATH(ProStringList l, uchar flags, const QString l.removeAt(val_it); QString a; for(int i = (int)files.count()-1; i >= 0; i--) { - if(files[i] == "." || files[i] == "..") - continue; a = real_dir + files[i]; if(!(flags & VPATH_NoFixify)) a = fileFixify(a); @@ -1324,7 +1323,8 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild) continue; } QString local_dirstr = Option::fixPathToLocalOS(dirstr, true); - QStringList files = QDir(local_dirstr).entryList(QStringList(filestr)); + QStringList files = QDir(local_dirstr).entryList(QStringList(filestr), + QDir::NoDotAndDotDot | QDir::AllEntries); if (installConfigValues.contains("no_check_exist") && files.isEmpty()) { QString dst_file = filePrefixRoot(root, dst_dir); QString cmd; @@ -1346,8 +1346,6 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild) } for(int x = 0; x < files.count(); x++) { QString file = files[x]; - if(file == "." || file == "..") //blah - continue; uninst.append(rm_dir_contents + " " + escapeFilePath(filePrefixRoot(root, fileFixify(dst_dir + file, FileFixifyAbsolute, false)))); QFileInfo fi(fileInfo(dirstr + file)); QString dst_file = filePrefixRoot(root, fileFixify(dst_dir, FileFixifyAbsolute, false)); @@ -3217,7 +3215,7 @@ MakefileGenerator::writePkgConfigFile() QString prefix = pkgConfigPrefix(); QString libDir = project->first("QMAKE_PKGCONFIG_LIBDIR").toQString(); if(libDir.isEmpty()) - libDir = prefix + Option::dir_sep + "lib" + Option::dir_sep; + libDir = prefix + "/lib"; QString includeDir = project->first("QMAKE_PKGCONFIG_INCDIR").toQString(); if(includeDir.isEmpty()) includeDir = prefix + "/include"; @@ -3284,10 +3282,12 @@ MakefileGenerator::writePkgConfigFile() // libs t << "Libs: "; - QString pkgConfiglibDir; QString pkgConfiglibName; if (target_mode == TARG_MAC_MODE && project->isActiveConfig("lib_bundle")) { - pkgConfiglibDir = "-F${libdir}"; + if (libDir != QLatin1String("/System/Library/Frameworks") + && libDir != QLatin1String("/Library/Frameworks")) { + t << "-F${libdir} "; + } ProString bundle; if (!project->isEmpty("QMAKE_FRAMEWORK_BUNDLE_NAME")) bundle = unescapeFilePath(project->first("QMAKE_FRAMEWORK_BUNDLE_NAME")); @@ -3298,12 +3298,13 @@ MakefileGenerator::writePkgConfigFile() bundle = bundle.left(suffix); pkgConfiglibName = "-framework " + bundle + " "; } else { - pkgConfiglibDir = "-L${libdir}"; + if (!project->values("QMAKE_DEFAULT_LIBDIRS").contains(libDir)) + t << "-L${libdir} "; pkgConfiglibName = "-l" + unescapeFilePath(project->first("QMAKE_ORIG_TARGET")); if (project->isActiveConfig("shared")) pkgConfiglibName += project->first("TARGET_VERSION_EXT").toQString(); } - t << pkgConfiglibDir << " " << pkgConfiglibName << " \n"; + t << pkgConfiglibName << " \n"; ProStringList libs; if(!project->isEmpty("QMAKE_INTERNAL_PRL_LIBS")) { @@ -3327,7 +3328,10 @@ MakefileGenerator::writePkgConfigFile() << varGlue("PRL_EXPORT_CXXFLAGS", "", " ", " ") << varGlue("QMAKE_PKGCONFIG_CFLAGS", "", " ", " ") // << varGlue("DEFINES","-D"," -D"," ") - << "-I${includedir}\n"; + ; + if (!project->values("QMAKE_DEFAULT_INCDIRS").contains(includeDir)) + t << "-I${includedir}"; + t << endl; // requires const QString requires = project->values("QMAKE_PKGCONFIG_REQUIRES").join(' '); diff --git a/Telegram/_qt_5_3_1_patch/qtbase/src/gui/image/qbmphandler.cpp b/Telegram/_qt_5_3_1_patch/qtbase/src/gui/image/qbmphandler.cpp new file mode 100644 index 000000000..9f7da1015 --- /dev/null +++ b/Telegram/_qt_5_3_1_patch/qtbase/src/gui/image/qbmphandler.cpp @@ -0,0 +1,898 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "private/qbmphandler_p.h" + +#ifndef QT_NO_IMAGEFORMAT_BMP + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +static void swapPixel01(QImage *image) // 1-bpp: swap 0 and 1 pixels +{ + int i; + if (image->depth() == 1 && image->colorCount() == 2) { + uint *p = (uint *)image->bits(); + int nbytes = image->byteCount(); + for (i=0; icolor(0); // swap color 0 and 1 + image->setColor(0, image->color(1)); + image->setColor(1, t); + } +} + +/* + QImageIO::defineIOHandler("BMP", "^BM", 0, + read_bmp_image, write_bmp_image); +*/ + +/***************************************************************************** + BMP (DIB) image read/write functions + *****************************************************************************/ + +const int BMP_FILEHDR_SIZE = 14; // size of BMP_FILEHDR data + +static QDataStream &operator>>(QDataStream &s, BMP_FILEHDR &bf) +{ // read file header + s.readRawData(bf.bfType, 2); + s >> bf.bfSize >> bf.bfReserved1 >> bf.bfReserved2 >> bf.bfOffBits; + return s; +} + +static QDataStream &operator<<(QDataStream &s, const BMP_FILEHDR &bf) +{ // write file header + s.writeRawData(bf.bfType, 2); + s << bf.bfSize << bf.bfReserved1 << bf.bfReserved2 << bf.bfOffBits; + return s; +} + + +const int BMP_OLD = 12; // old Windows/OS2 BMP size +const int BMP_WIN = 40; // Windows BMP v3 size +const int BMP_OS2 = 64; // new OS/2 BMP size +const int BMP_WIN4 = 108; // Windows BMP v4 size +const int BMP_WIN5 = 124; // Windows BMP v5 size + +const int BMP_RGB = 0; // no compression +const int BMP_RLE8 = 1; // run-length encoded, 8 bits +const int BMP_RLE4 = 2; // run-length encoded, 4 bits +const int BMP_BITFIELDS = 3; // RGB values encoded in data as bit-fields + + +static QDataStream &operator>>(QDataStream &s, BMP_INFOHDR &bi) +{ + s >> bi.biSize; + if (bi.biSize == BMP_WIN || bi.biSize == BMP_OS2 || bi.biSize == BMP_WIN4 || bi.biSize == BMP_WIN5) { + s >> bi.biWidth >> bi.biHeight >> bi.biPlanes >> bi.biBitCount; + s >> bi.biCompression >> bi.biSizeImage; + s >> bi.biXPelsPerMeter >> bi.biYPelsPerMeter; + s >> bi.biClrUsed >> bi.biClrImportant; + } + else { // probably old Windows format + qint16 w, h; + s >> w >> h >> bi.biPlanes >> bi.biBitCount; + bi.biWidth = w; + bi.biHeight = h; + bi.biCompression = BMP_RGB; // no compression + bi.biSizeImage = 0; + bi.biXPelsPerMeter = bi.biYPelsPerMeter = 0; + bi.biClrUsed = bi.biClrImportant = 0; + } + return s; +} + +static QDataStream &operator<<(QDataStream &s, const BMP_INFOHDR &bi) +{ + s << bi.biSize; + s << bi.biWidth << bi.biHeight; + s << bi.biPlanes; + s << bi.biBitCount; + s << bi.biCompression; + s << bi.biSizeImage; + s << bi.biXPelsPerMeter << bi.biYPelsPerMeter; + s << bi.biClrUsed << bi.biClrImportant; + return s; +} + +static int calc_shift(uint mask) +{ + int result = 0; + while (mask && !(mask & 1)) { + result++; + mask >>= 1; + } + return result; +} + +static bool read_dib_fileheader(QDataStream &s, BMP_FILEHDR &bf) +{ + // read BMP file header + s >> bf; + if (s.status() != QDataStream::Ok) + return false; + + // check header + if (qstrncmp(bf.bfType,"BM",2) != 0) + return false; + + return true; +} + +static bool read_dib_infoheader(QDataStream &s, BMP_INFOHDR &bi) +{ + s >> bi; // read BMP info header + if (s.status() != QDataStream::Ok) + return false; + + int nbits = bi.biBitCount; + int comp = bi.biCompression; + if (!(nbits == 1 || nbits == 4 || nbits == 8 || nbits == 16 || nbits == 24 || nbits == 32) || + bi.biPlanes != 1 || comp > BMP_BITFIELDS) + return false; // weird BMP image + if (!(comp == BMP_RGB || (nbits == 4 && comp == BMP_RLE4) || + (nbits == 8 && comp == BMP_RLE8) || ((nbits == 16 || nbits == 32) && comp == BMP_BITFIELDS))) + return false; // weird compression type + + return true; +} + +static bool read_dib_body(QDataStream &s, const BMP_INFOHDR &bi, int offset, int startpos, QImage &image) +{ + QIODevice* d = s.device(); + if (d->atEnd()) // end of stream/file + return false; +#if 0 + qDebug("offset...........%d", offset); + qDebug("startpos.........%d", startpos); + qDebug("biSize...........%d", bi.biSize); + qDebug("biWidth..........%d", bi.biWidth); + qDebug("biHeight.........%d", bi.biHeight); + qDebug("biPlanes.........%d", bi.biPlanes); + qDebug("biBitCount.......%d", bi.biBitCount); + qDebug("biCompression....%d", bi.biCompression); + qDebug("biSizeImage......%d", bi.biSizeImage); + qDebug("biXPelsPerMeter..%d", bi.biXPelsPerMeter); + qDebug("biYPelsPerMeter..%d", bi.biYPelsPerMeter); + qDebug("biClrUsed........%d", bi.biClrUsed); + qDebug("biClrImportant...%d", bi.biClrImportant); +#endif + int w = bi.biWidth, h = bi.biHeight, nbits = bi.biBitCount; + int t = bi.biSize, comp = bi.biCompression; + uint red_mask = 0; + uint green_mask = 0; + uint blue_mask = 0; + uint alpha_mask = 0; + int red_shift = 0; + int green_shift = 0; + int blue_shift = 0; + int alpha_shift = 0; + int red_scale = 0; + int green_scale = 0; + int blue_scale = 0; + int alpha_scale = 0; + + if (!d->isSequential()) + d->seek(startpos + BMP_FILEHDR_SIZE + (bi.biSize >= BMP_WIN4 ? BMP_WIN : bi.biSize)); // goto start of colormap + + if (bi.biSize >= BMP_WIN4 || (comp == BMP_BITFIELDS && (nbits == 16 || nbits == 32))) { + if (d->read((char *)&red_mask, sizeof(red_mask)) != sizeof(red_mask)) + return false; + if (d->read((char *)&green_mask, sizeof(green_mask)) != sizeof(green_mask)) + return false; + if (d->read((char *)&blue_mask, sizeof(blue_mask)) != sizeof(blue_mask)) + return false; + + // Read BMP v4+ header + if (bi.biSize >= BMP_WIN4) { + int CSType = 0; + int gamma_red = 0; + int gamma_green = 0; + int gamma_blue = 0; + int endpoints[9]; + + if (d->read((char *)&alpha_mask, sizeof(alpha_mask)) != sizeof(alpha_mask)) + return false; + if (d->read((char *)&CSType, sizeof(CSType)) != sizeof(CSType)) + return false; + if (d->read((char *)&endpoints, sizeof(endpoints)) != sizeof(endpoints)) + return false; + if (d->read((char *)&gamma_red, sizeof(gamma_red)) != sizeof(gamma_red)) + return false; + if (d->read((char *)&gamma_green, sizeof(gamma_green)) != sizeof(gamma_green)) + return false; + if (d->read((char *)&gamma_blue, sizeof(gamma_blue)) != sizeof(gamma_blue)) + return false; + + if (bi.biSize == BMP_WIN5) { + qint32 intent = 0; + qint32 profileData = 0; + qint32 profileSize = 0; + qint32 reserved = 0; + + if (d->read((char *)&intent, sizeof(intent)) != sizeof(intent)) + return false; + if (d->read((char *)&profileData, sizeof(profileData)) != sizeof(profileData)) + return false; + if (d->read((char *)&profileSize, sizeof(profileSize)) != sizeof(profileSize)) + return false; + if (d->read((char *)&reserved, sizeof(reserved)) != sizeof(reserved) || reserved != 0) + return false; + } + } + } + + bool transp = (comp == BMP_BITFIELDS) && alpha_mask; + int ncols = 0; + int depth = 0; + QImage::Format format; + switch (nbits) { + case 32: + case 24: + case 16: + depth = 32; + format = transp ? QImage::Format_ARGB32 : QImage::Format_RGB32; + break; + case 8: + case 4: + depth = 8; + format = QImage::Format_Indexed8; + break; + default: + depth = 1; + format = QImage::Format_Mono; + } + + if (bi.biHeight < 0) + h = -h; // support images with negative height + + if (image.size() != QSize(w, h) || image.format() != format) { + image = QImage(w, h, format); + if (image.isNull()) // could not create image + return false; + } + + if (depth != 32) { + ncols = bi.biClrUsed ? bi.biClrUsed : 1 << nbits; + if (ncols > 256) // sanity check - don't run out of mem if color table is broken + return false; + image.setColorCount(ncols); + } + + image.setDotsPerMeterX(bi.biXPelsPerMeter); + image.setDotsPerMeterY(bi.biYPelsPerMeter); + + if (ncols > 0) { // read color table + uchar rgb[4]; + int rgb_len = t == BMP_OLD ? 3 : 4; + for (int i=0; iread((char *)rgb, rgb_len) != rgb_len) + return false; + image.setColor(i, qRgb(rgb[2],rgb[1],rgb[0])); + if (d->atEnd()) // truncated file + return false; + } + } else if (comp == BMP_BITFIELDS && (nbits == 16 || nbits == 32)) { + red_shift = calc_shift(red_mask); + red_scale = 256 / ((red_mask >> red_shift) + 1); + green_shift = calc_shift(green_mask); + green_scale = 256 / ((green_mask >> green_shift) + 1); + blue_shift = calc_shift(blue_mask); + blue_scale = 256 / ((blue_mask >> blue_shift) + 1); + alpha_shift = calc_shift(alpha_mask); + alpha_scale = 256 / ((alpha_mask >> alpha_shift) + 1); + } else if (comp == BMP_RGB && (nbits == 24 || nbits == 32)) { + blue_mask = 0x000000ff; + green_mask = 0x0000ff00; + red_mask = 0x00ff0000; + blue_shift = 0; + green_shift = 8; + red_shift = 16; + blue_scale = green_scale = red_scale = 1; + } else if (comp == BMP_RGB && nbits == 16) { + blue_mask = 0x001f; + green_mask = 0x03e0; + red_mask = 0x7c00; + blue_shift = 0; + green_shift = 2; + red_shift = 7; + red_scale = 1; + green_scale = 1; + blue_scale = 8; + } + +#if 0 + qDebug("Rmask: %08x Rshift: %08x Rscale:%08x", red_mask, red_shift, red_scale); + qDebug("Gmask: %08x Gshift: %08x Gscale:%08x", green_mask, green_shift, green_scale); + qDebug("Bmask: %08x Bshift: %08x Bscale:%08x", blue_mask, blue_shift, blue_scale); + qDebug("Amask: %08x Ashift: %08x Ascale:%08x", alpha_mask, alpha_shift, alpha_scale); +#endif + + // offset can be bogus, be careful + if (offset>=0 && startpos + offset > d->pos()) { + if (!d->isSequential()) + d->seek(startpos + offset); // start of image data + } + + int bpl = image.bytesPerLine(); + uchar *data = image.bits(); + + if (nbits == 1) { // 1 bit BMP image + while (--h >= 0) { + if (d->read((char*)(data + h*bpl), bpl) != bpl) + break; + } + if (ncols == 2 && qGray(image.color(0)) < qGray(image.color(1))) + swapPixel01(&image); // pixel 0 is white! + } + + else if (nbits == 4) { // 4 bit BMP image + int buflen = ((w+7)/8)*4; + uchar *buf = new uchar[buflen]; + if (comp == BMP_RLE4) { // run length compression + int x=0, y=0, c, i; + quint8 b; + uchar *p = data + (h-1)*bpl; + const uchar *endp = p + w; + while (y < h) { + if (!d->getChar((char *)&b)) + break; + if (b == 0) { // escape code + if (!d->getChar((char *)&b) || b == 1) { + y = h; // exit loop + } else switch (b) { + case 0: // end of line + x = 0; + y++; + p = data + (h-y-1)*bpl; + break; + case 2: // delta (jump) + { + quint8 tmp; + d->getChar((char *)&tmp); + x += tmp; + d->getChar((char *)&tmp); + y += tmp; + } + + // Protection + if ((uint)x >= (uint)w) + x = w-1; + if ((uint)y >= (uint)h) + y = h-1; + + p = data + (h-y-1)*bpl + x; + break; + default: // absolute mode + // Protection + if (p + b > endp) + b = endp-p; + + i = (c = b)/2; + while (i--) { + d->getChar((char *)&b); + *p++ = b >> 4; + *p++ = b & 0x0f; + } + if (c & 1) { + unsigned char tmp; + d->getChar((char *)&tmp); + *p++ = tmp >> 4; + } + if ((((c & 3) + 1) & 2) == 2) + d->getChar(0); // align on word boundary + x += c; + } + } else { // encoded mode + // Protection + if (p + b > endp) + b = endp-p; + + i = (c = b)/2; + d->getChar((char *)&b); // 2 pixels to be repeated + while (i--) { + *p++ = b >> 4; + *p++ = b & 0x0f; + } + if (c & 1) + *p++ = b >> 4; + x += c; + } + } + } else if (comp == BMP_RGB) { // no compression + memset(data, 0, h*bpl); + while (--h >= 0) { + if (d->read((char*)buf,buflen) != buflen) + break; + uchar *p = data + h*bpl; + uchar *b = buf; + for (int i=0; i> 4; + *p++ = *b++ & 0x0f; + } + if (w & 1) // the last nibble + *p = *b >> 4; + } + } + delete [] buf; + } + + else if (nbits == 8) { // 8 bit BMP image + if (comp == BMP_RLE8) { // run length compression + int x=0, y=0; + quint8 b; + uchar *p = data + (h-1)*bpl; + const uchar *endp = p + w; + while (y < h) { + if (!d->getChar((char *)&b)) + break; + if (b == 0) { // escape code + if (!d->getChar((char *)&b) || b == 1) { + y = h; // exit loop + } else switch (b) { + case 0: // end of line + x = 0; + y++; + p = data + (h-y-1)*bpl; + break; + case 2: // delta (jump) + // Protection + if ((uint)x >= (uint)w) + x = w-1; + if ((uint)y >= (uint)h) + y = h-1; + + { + quint8 tmp; + d->getChar((char *)&tmp); + x += tmp; + d->getChar((char *)&tmp); + y += tmp; + } + p = data + (h-y-1)*bpl + x; + break; + default: // absolute mode + // Protection + if (p + b > endp) + b = endp-p; + + if (d->read((char *)p, b) != b) + return false; + if ((b & 1) == 1) + d->getChar(0); // align on word boundary + x += b; + p += b; + } + } else { // encoded mode + // Protection + if (p + b > endp) + b = endp-p; + + char tmp; + d->getChar(&tmp); + memset(p, tmp, b); // repeat pixel + x += b; + p += b; + } + } + } else if (comp == BMP_RGB) { // uncompressed + while (--h >= 0) { + if (d->read((char *)data + h*bpl, bpl) != bpl) + break; + } + } + } + + else if (nbits == 16 || nbits == 24 || nbits == 32) { // 16,24,32 bit BMP image + QRgb *p; + QRgb *end; + uchar *buf24 = new uchar[bpl]; + int bpl24 = ((w*nbits+31)/32)*4; + uchar *b; + int c; + + while (--h >= 0) { + p = (QRgb *)(data + h*bpl); + end = p + w; + if (d->read((char *)buf24,bpl24) != bpl24) + break; + b = buf24; + while (p < end) { + c = *(uchar*)b | (*(uchar*)(b+1)<<8); + if (nbits > 16) + c |= *(uchar*)(b+2)<<16; + if (nbits > 24) + c |= *(uchar*)(b+3)<<24; + *p++ = qRgba(((c & red_mask) >> red_shift) * red_scale, + ((c & green_mask) >> green_shift) * green_scale, + ((c & blue_mask) >> blue_shift) * blue_scale, + transp ? ((c & alpha_mask) >> alpha_shift) * alpha_scale : 0xff); + b += nbits/8; + } + } + delete[] buf24; + } + + if (bi.biHeight < 0) { + // Flip the image + uchar *buf = new uchar[bpl]; + h = -bi.biHeight; + for (int y = 0; y < h/2; ++y) { + memcpy(buf, data + y*bpl, bpl); + memcpy(data + y*bpl, data + (h-y-1)*bpl, bpl); + memcpy(data + (h-y-1)*bpl, buf, bpl); + } + delete [] buf; + } + + return true; +} + +// this is also used in qmime_win.cpp +bool qt_write_dib(QDataStream &s, QImage image) +{ + int nbits; + int bpl_bmp; + int bpl = image.bytesPerLine(); + + QIODevice* d = s.device(); + if (!d->isWritable()) + return false; + + if (image.depth() == 8 && image.colorCount() <= 16) { + bpl_bmp = (((bpl+1)/2+3)/4)*4; + nbits = 4; + } else if (image.depth() == 32) { + bpl_bmp = ((image.width()*24+31)/32)*4; + nbits = 24; + } else { + bpl_bmp = bpl; + nbits = image.depth(); + } + + BMP_INFOHDR bi; + bi.biSize = BMP_WIN; // build info header + bi.biWidth = image.width(); + bi.biHeight = image.height(); + bi.biPlanes = 1; + bi.biBitCount = nbits; + bi.biCompression = BMP_RGB; + bi.biSizeImage = bpl_bmp*image.height(); + bi.biXPelsPerMeter = image.dotsPerMeterX() ? image.dotsPerMeterX() + : 2834; // 72 dpi default + bi.biYPelsPerMeter = image.dotsPerMeterY() ? image.dotsPerMeterY() : 2834; + bi.biClrUsed = image.colorCount(); + bi.biClrImportant = image.colorCount(); + s << bi; // write info header + if (s.status() != QDataStream::Ok) + return false; + + if (image.depth() != 32) { // write color table + uchar *color_table = new uchar[4*image.colorCount()]; + uchar *rgb = color_table; + QVector c = image.colorTable(); + for (int i=0; iwrite((char *)color_table, 4*image.colorCount()) == -1) { + delete [] color_table; + return false; + } + delete [] color_table; + } + + if (image.format() == QImage::Format_MonoLSB) + image = image.convertToFormat(QImage::Format_Mono); + + int y; + + if (nbits == 1 || nbits == 8) { // direct output + for (y=image.height()-1; y>=0; y--) { + if (d->write((char*)image.constScanLine(y), bpl) == -1) + return false; + } + return true; + } + + uchar *buf = new uchar[bpl_bmp]; + uchar *b, *end; + const uchar *p; + + memset(buf, 0, bpl_bmp); + for (y=image.height()-1; y>=0; y--) { // write the image bits + if (nbits == 4) { // convert 8 -> 4 bits + p = image.constScanLine(y); + b = buf; + end = b + image.width()/2; + while (b < end) { + *b++ = (*p << 4) | (*(p+1) & 0x0f); + p += 2; + } + if (image.width() & 1) + *b = *p << 4; + } else { // 32 bits + const QRgb *p = (const QRgb *)image.constScanLine(y); + const QRgb *end = p + image.width(); + b = buf; + while (p < end) { + *b++ = qBlue(*p); + *b++ = qGreen(*p); + *b++ = qRed(*p); + p++; + } + } + if (bpl_bmp != d->write((char*)buf, bpl_bmp)) { + delete[] buf; + return false; + } + } + delete[] buf; + return true; +} + +// this is also used in qmime_win.cpp +bool qt_read_dib(QDataStream &s, QImage &image) +{ + BMP_INFOHDR bi; + if (!read_dib_infoheader(s, bi)) + return false; + return read_dib_body(s, bi, -1, -BMP_FILEHDR_SIZE, image); +} + +QBmpHandler::QBmpHandler(InternalFormat fmt) : + m_format(fmt), state(Ready) +{ +} + +QByteArray QBmpHandler::formatName() const +{ + return m_format == BmpFormat ? "bmp" : "dib"; +} + +bool QBmpHandler::readHeader() +{ + state = Error; + + QIODevice *d = device(); + QDataStream s(d); + startpos = d->pos(); + + // Intel byte order + s.setByteOrder(QDataStream::LittleEndian); + + // read BMP file header + if (m_format == BmpFormat && !read_dib_fileheader(s, fileHeader)) + return false; + + // read BMP info header + if (!read_dib_infoheader(s, infoHeader)) + return false; + + state = ReadHeader; + return true; +} + +bool QBmpHandler::canRead() const +{ + if (m_format == BmpFormat && state == Ready && !canRead(device())) + return false; + + if (state != Error) { + setFormat(formatName()); + return true; + } + + return false; +} + +bool QBmpHandler::canRead(QIODevice *device) +{ + if (!device) { + qWarning("QBmpHandler::canRead() called with 0 pointer"); + return false; + } + + char head[2]; + if (device->peek(head, sizeof(head)) != sizeof(head)) + return false; + + return (qstrncmp(head, "BM", 2) == 0); +} + +bool QBmpHandler::read(QImage *image) +{ + if (state == Error) + return false; + + if (!image) { + qWarning("QBmpHandler::read: cannot read into null pointer"); + return false; + } + + if (state == Ready && !readHeader()) { + state = Error; + return false; + } + + QIODevice *d = device(); + QDataStream s(d); + + // Intel byte order + s.setByteOrder(QDataStream::LittleEndian); + + // read image + const bool readSuccess = m_format == BmpFormat ? + read_dib_body(s, infoHeader, fileHeader.bfOffBits, startpos, *image) : + read_dib_body(s, infoHeader, -1, startpos - BMP_FILEHDR_SIZE, *image); + if (!readSuccess) + return false; + + state = Ready; + return true; +} + +bool QBmpHandler::write(const QImage &img) +{ + if (m_format == DibFormat) { + QDataStream dibStream(device()); + dibStream.setByteOrder(QDataStream::LittleEndian); // Intel byte order + return qt_write_dib(dibStream, img); + } + + QImage image; + switch (img.format()) { + case QImage::Format_ARGB8565_Premultiplied: + case QImage::Format_ARGB8555_Premultiplied: + case QImage::Format_ARGB6666_Premultiplied: + case QImage::Format_ARGB4444_Premultiplied: + case QImage::Format_RGBA8888: + case QImage::Format_RGBA8888_Premultiplied: + image = img.convertToFormat(QImage::Format_ARGB32); + break; + case QImage::Format_RGB16: + case QImage::Format_RGB888: + case QImage::Format_RGB666: + case QImage::Format_RGB555: + case QImage::Format_RGB444: + case QImage::Format_RGBX8888: + image = img.convertToFormat(QImage::Format_RGB32); + break; + default: + image = img; + } + + QIODevice *d = device(); + QDataStream s(d); + BMP_FILEHDR bf; + int bpl_bmp; + int bpl = image.bytesPerLine(); + + // Code partially repeated in qt_write_dib + if (image.depth() == 8 && image.colorCount() <= 16) { + bpl_bmp = (((bpl+1)/2+3)/4)*4; + } else if (image.depth() == 32) { + bpl_bmp = ((image.width()*24+31)/32)*4; + } else { + bpl_bmp = bpl; + } + + // Intel byte order + s.setByteOrder(QDataStream::LittleEndian); + + // build file header + memcpy(bf.bfType, "BM", 2); + + // write file header + bf.bfReserved1 = 0; + bf.bfReserved2 = 0; + bf.bfOffBits = BMP_FILEHDR_SIZE + BMP_WIN + image.colorCount() * 4; + bf.bfSize = bf.bfOffBits + bpl_bmp*image.height(); + s << bf; + + // write image + return qt_write_dib(s, image); +} + +bool QBmpHandler::supportsOption(ImageOption option) const +{ + return option == Size + || option == ImageFormat; +} + +QVariant QBmpHandler::option(ImageOption option) const +{ + if (option == Size) { + if (state == Error) + return QVariant(); + if (state == Ready && !const_cast(this)->readHeader()) + return QVariant(); + return QSize(infoHeader.biWidth, infoHeader.biHeight); + } else if (option == ImageFormat) { + if (state == Error) + return QVariant(); + if (state == Ready && !const_cast(this)->readHeader()) + return QVariant(); + QImage::Format format; + switch (infoHeader.biBitCount) { + case 32: + case 24: + case 16: + format = QImage::Format_RGB32; + break; + case 8: + case 4: + format = QImage::Format_Indexed8; + break; + default: + format = QImage::Format_Mono; + } + return format; + } + return QVariant(); +} + +void QBmpHandler::setOption(ImageOption option, const QVariant &value) +{ + Q_UNUSED(option); + Q_UNUSED(value); +} + +QByteArray QBmpHandler::name() const +{ + return formatName(); +} + +QT_END_NAMESPACE + +#endif // QT_NO_IMAGEFORMAT_BMP diff --git a/Telegram/_qt_5_3_0_patch/qtbase/src/gui/kernel/qplatformdialoghelper.h b/Telegram/_qt_5_3_1_patch/qtbase/src/gui/kernel/qplatformdialoghelper.h similarity index 100% rename from Telegram/_qt_5_3_0_patch/qtbase/src/gui/kernel/qplatformdialoghelper.h rename to Telegram/_qt_5_3_1_patch/qtbase/src/gui/kernel/qplatformdialoghelper.h diff --git a/Telegram/_qt_5_3_0_patch/qtbase/src/gui/painting/qpaintengine_p.h b/Telegram/_qt_5_3_1_patch/qtbase/src/gui/painting/qpaintengine_p.h similarity index 87% rename from Telegram/_qt_5_3_0_patch/qtbase/src/gui/painting/qpaintengine_p.h rename to Telegram/_qt_5_3_1_patch/qtbase/src/gui/painting/qpaintengine_p.h index c9d85033d..642e5b797 100644 --- a/Telegram/_qt_5_3_0_patch/qtbase/src/gui/painting/qpaintengine_p.h +++ b/Telegram/_qt_5_3_1_patch/qtbase/src/gui/painting/qpaintengine_p.h @@ -87,18 +87,18 @@ public: if (hasSystemTransform) { if (systemTransform.type() <= QTransform::TxTranslate) systemClip.translate(qRound(systemTransform.dx()), qRound(systemTransform.dy())); - else { - // Transform the system clip region back from device pixels to device-independent pixels before - // applying systemTransform, which already has transform from device-independent pixels to device pixels + else { + // Transform the system clip region back from device pixels to device-independent pixels before + // applying systemTransform, which already has transform from device-independent pixels to device pixels #ifdef Q_OS_MAC - QTransform scaleTransform; - const qreal invDevicePixelRatio = 1. / pdev->devicePixelRatio(); - scaleTransform.scale(invDevicePixelRatio, invDevicePixelRatio); - systemClip = systemTransform.map(scaleTransform.map(systemClip)); + QTransform scaleTransform; + const qreal invDevicePixelRatio = 1. / pdev->devicePixelRatio(); + scaleTransform.scale(invDevicePixelRatio, invDevicePixelRatio); + systemClip = systemTransform.map(scaleTransform.map(systemClip)); #else - systemClip = systemTransform.map(systemClip); + systemClip = systemTransform.map(systemClip); #endif - } + } } // Make sure we're inside the viewport. diff --git a/Telegram/_qt_5_3_0_patch/qtbase/src/gui/text/qtextlayout.h b/Telegram/_qt_5_3_1_patch/qtbase/src/gui/text/qtextlayout.h similarity index 100% rename from Telegram/_qt_5_3_0_patch/qtbase/src/gui/text/qtextlayout.h rename to Telegram/_qt_5_3_1_patch/qtbase/src/gui/text/qtextlayout.h diff --git a/Telegram/_qt_5_3_0_patch/qtbase/src/network/socket/qnativesocketengine_win.cpp b/Telegram/_qt_5_3_1_patch/qtbase/src/network/socket/qnativesocketengine_win.cpp similarity index 99% rename from Telegram/_qt_5_3_0_patch/qtbase/src/network/socket/qnativesocketengine_win.cpp rename to Telegram/_qt_5_3_1_patch/qtbase/src/network/socket/qnativesocketengine_win.cpp index 8067b89d0..b0e90e198 100644 --- a/Telegram/_qt_5_3_0_patch/qtbase/src/network/socket/qnativesocketengine_win.cpp +++ b/Telegram/_qt_5_3_1_patch/qtbase/src/network/socket/qnativesocketengine_win.cpp @@ -182,7 +182,8 @@ static inline void qt_socket_getPortAndAddress(SOCKET socketDescriptor, const qt if (address) { QHostAddress a; a.setAddress(tmp); - a.setScopeId(QString::number(sa6->sin6_scope_id)); + if (sa6->sin6_scope_id) + a.setScopeId(QString::number(sa6->sin6_scope_id)); *address = a; } if (port) diff --git a/Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm b/Telegram/_qt_5_3_1_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm similarity index 97% rename from Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm rename to Telegram/_qt_5_3_1_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm index 11ad1d63a..f3033316f 100644 --- a/Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/Telegram/_qt_5_3_1_patch/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -182,13 +182,22 @@ static bool isMouseEvent(NSEvent *ev) - (void)detachFromPlatformWindow { + _platformWindow = 0; [self.window.delegate release]; self.window.delegate = nil; } - (void)clearWindow { - _window = nil; + if (_window) { + QCocoaEventDispatcher *cocoaEventDispatcher = qobject_cast(QGuiApplication::instance()->eventDispatcher()); + if (cocoaEventDispatcher) { + QCocoaEventDispatcherPrivate *cocoaEventDispatcherPrivate = static_cast(QObjectPrivate::get(cocoaEventDispatcher)); + cocoaEventDispatcherPrivate->removeQueuedUserInputEvents([_window windowNumber]); + } + + _window = nil; + } } - (void)dealloc @@ -261,8 +270,6 @@ static bool isMouseEvent(NSEvent *ev) { [self close]; - QCocoaIntegration::instance()->setWindow(self, 0); - if (self.helper.grabbingMouse) { self.helper.releaseOnMouseUp = YES; } else { @@ -329,7 +336,6 @@ static bool isMouseEvent(NSEvent *ev) { [self.helper detachFromPlatformWindow]; [self close]; - QCocoaIntegration::instance()->setWindow(self, 0); [self release]; } @@ -420,9 +426,6 @@ QCocoaWindow::~QCocoaWindow() qDebug() << "QCocoaWindow::~QCocoaWindow" << this; #endif - if (QCocoaIntegration *ci = QCocoaIntegration::instance()) - ci->setWindow(m_nsWindow, 0); - QCocoaAutoReleasePool pool; [m_nsWindow setContentView:nil]; [m_nsWindow.helper detachFromPlatformWindow]; @@ -1004,9 +1007,14 @@ bool QCocoaWindow::isExposed() const bool QCocoaWindow::isOpaque() const { + // OpenGL surfaces can be ordered either above(default) or below the NSWindow. + // When ordering below the window must be tranclucent. + static GLint openglSourfaceOrder = qt_mac_resolveOption(1, "QT_MAC_OPENGL_SURFACE_ORDER"); + bool translucent = (window()->format().alphaBufferSize() > 0 || window()->opacity() < 1 - || (m_qtView && [m_qtView hasMask])); + || (m_qtView && [m_qtView hasMask])) + || (surface()->supportsOpenGL() && openglSourfaceOrder == -1); return !translucent; } @@ -1407,7 +1415,13 @@ QCocoaNSWindow * QCocoaWindow::createNSWindow() NSInteger level = windowLevel(flags); [createdWindow setLevel:level]; - if (window()->format().alphaBufferSize() > 0) { + // OpenGL surfaces can be ordered either above(default) or below the NSWindow. + // When ordering below the window must be tranclucent and have a clear background color. + static GLint openglSourfaceOrder = qt_mac_resolveOption(1, "QT_MAC_OPENGL_SURFACE_ORDER"); + + bool isTranslucent = window()->format().alphaBufferSize() > 0 + || (surface()->supportsOpenGL() && openglSourfaceOrder == -1); + if (isTranslucent) { [createdWindow setBackgroundColor:[NSColor clearColor]]; [createdWindow setOpaque:NO]; } @@ -1416,8 +1430,6 @@ QCocoaNSWindow * QCocoaWindow::createNSWindow() applyContentBorderThickness(createdWindow); - QCocoaIntegration::instance()->setWindow(createdWindow, this); - return createdWindow; } @@ -1623,6 +1635,7 @@ void QCocoaWindow::applyContentBorderThickness(NSWindow *window) if (!m_drawContentBorderGradient) { [window setStyleMask:[window styleMask] & ~NSTexturedBackgroundWindowMask]; + [[[window contentView] superview] setNeedsDisplay:YES]; return; } @@ -1653,6 +1666,8 @@ void QCocoaWindow::applyContentBorderThickness(NSWindow *window) [window setContentBorderThickness:effectiveBottomContentBorderThickness forEdge:NSMinYEdge]; [window setAutorecalculatesContentBorderThickness:NO forEdge:NSMinYEdge]; + + [[[window contentView] superview] setNeedsDisplay:YES]; } void QCocoaWindow::updateNSToolbar() diff --git a/Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm b/Telegram/_qt_5_3_1_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm similarity index 97% rename from Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm rename to Telegram/_qt_5_3_1_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm index db9e8137e..58f4d6806 100644 --- a/Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm +++ b/Telegram/_qt_5_3_1_patch/qtbase/src/plugins/platforms/cocoa/qnsview.mm @@ -42,6 +42,7 @@ #include #include +#include #include "qnsview.h" #include "qcocoawindow.h" @@ -65,6 +66,9 @@ static QTouchDevice *touchDevice = 0; +// ### HACK Remove once 10.8 is unsupported +static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; + @interface NSEvent (Qt_Compile_Leopard_DeviceDelta) - (CGFloat)deviceDeltaX; - (CGFloat)deviceDeltaY; @@ -73,6 +77,13 @@ static QTouchDevice *touchDevice = 0; @implementation QNSView ++ (void)initialize +{ + NSString **notificationNameVar = (NSString **)dlsym(RTLD_NEXT, "NSWindowDidChangeOcclusionStateNotification"); + if (notificationNameVar) + _q_NSWindowDidChangeOcclusionStateNotification = *notificationNameVar; +} + - (id) init { self = [super initWithFrame : NSMakeRect(0,0, 300,300)]; @@ -192,6 +203,19 @@ static QTouchDevice *touchDevice = 0; } } +- (void)viewDidMoveToWindow +{ + if (self.window) { + // This is the case of QWidgetAction's generated QWidget inserted in an NSMenu. + // 10.9 and newer get the NSWindowDidChangeOcclusionStateNotification + if (!_q_NSWindowDidChangeOcclusionStateNotification + && [self.window.className isEqualToString:@"NSCarbonMenuWindow"]) + m_platformWindow->exposeWindow(); + } else { + m_platformWindow->obscureWindow(); + } +} + - (void)viewWillMoveToWindow:(NSWindow *)newWindow { // ### Merge "normal" window code path with this one for 5.1. @@ -319,12 +343,29 @@ static QTouchDevice *touchDevice = 0; [self notifyWindowStateChanged:newState]; // NSWindowDidOrderOnScreenAndFinishAnimatingNotification is private API, and not // emitted in 10.6, so we bring back the old behavior for that case alone. - if (newState == Qt::WindowNoState/* && QSysInfo::QSysInfo::MacintoshVersion == QSysInfo::MV_10_6*/) // also not emitted if window restored from the app + if (newState == Qt::WindowNoState/* && QSysInfo::QSysInfo::MacintoshVersion == QSysInfo::MV_10_6*/) m_platformWindow->exposeWindow(); } else if ([notificationName isEqualToString: @"NSWindowDidOrderOffScreenNotification"]) { m_platformWindow->obscureWindow(); } else if ([notificationName isEqualToString: @"NSWindowDidOrderOnScreenAndFinishAnimatingNotification"]) { m_platformWindow->exposeWindow(); + } else if (_q_NSWindowDidChangeOcclusionStateNotification + && [notificationName isEqualToString:_q_NSWindowDidChangeOcclusionStateNotification]) { +#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_9 +// ### HACK Remove the enum declaration, the warning disabling and the cast further down once 10.8 is unsupported +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wobjc-method-access" + enum { NSWindowOcclusionStateVisible = 1UL << 1 }; +#endif + // Older versions managed in -[QNSView viewDidMoveToWindow]. + // Support QWidgetAction in NSMenu. Mavericks only sends this notification. + // Ideally we should support this in Qt as well, in order to disable animations + // when the window is occluded. + if ((NSUInteger)[self.window occlusionState] & NSWindowOcclusionStateVisible) + m_platformWindow->exposeWindow(); +#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_9 +#pragma clang diagnostic pop +#endif } else if (notificationName == NSWindowDidChangeScreenNotification) { if (m_window) { NSUInteger screenIndex = [[NSScreen screens] indexOfObject:self.window.screen]; diff --git a/Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp b/Telegram/_qt_5_3_1_patch/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp similarity index 100% rename from Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp rename to Telegram/_qt_5_3_1_patch/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp diff --git a/Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp b/Telegram/_qt_5_3_1_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp similarity index 98% rename from Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp rename to Telegram/_qt_5_3_1_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp index 684f7532a..1971baf88 100644 --- a/Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/Telegram/_qt_5_3_1_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.cpp @@ -1016,17 +1016,17 @@ QWindow *QWindowsWindow::topLevelOf(QWindow *w) while (QWindow *parent = w->parent()) w = parent; - const QWindowsWindow *ww = static_cast(w->handle()); - - // In case the topmost parent is embedded, find next ancestor using native methods - if (ww->isEmbedded(0)) { - HWND parentHWND = GetAncestor(ww->handle(), GA_PARENT); - const HWND desktopHwnd = GetDesktopWindow(); - const QWindowsContext *ctx = QWindowsContext::instance(); - while (parentHWND && parentHWND != desktopHwnd) { - if (QWindowsWindow *ancestor = ctx->findPlatformWindow(parentHWND)) - return topLevelOf(ancestor->window()); - parentHWND = GetAncestor(parentHWND, GA_PARENT); + if (const QPlatformWindow *handle = w->handle()) { + const QWindowsWindow *ww = static_cast(handle); + if (ww->isEmbedded(0)) { + HWND parentHWND = GetAncestor(ww->handle(), GA_PARENT); + const HWND desktopHwnd = GetDesktopWindow(); + const QWindowsContext *ctx = QWindowsContext::instance(); + while (parentHWND && parentHWND != desktopHwnd) { + if (QWindowsWindow *ancestor = ctx->findPlatformWindow(parentHWND)) + return topLevelOf(ancestor->window()); + parentHWND = GetAncestor(parentHWND, GA_PARENT); + } } } return w; @@ -1949,7 +1949,10 @@ void QWindowsWindow::getSizeHints(MINMAXINFO *mmi) const && (m_data.flags & Qt::FramelessWindowHint)) { // This block fixes QTBUG-8361: Frameless windows shouldn't cover the // taskbar when maximized - if (const QScreen *screen = effectiveScreen(window())) { + const QScreen *screen = effectiveScreen(window()); + + // Documentation of MINMAXINFO states that it will only work for the primary screen + if (screen && screen == QGuiApplication::primaryScreen()) { mmi->ptMaxSize.y = screen->availableGeometry().height(); // Width, because you can have the taskbar on the sides too. @@ -1958,8 +1961,8 @@ void QWindowsWindow::getSizeHints(MINMAXINFO *mmi) const // If you have the taskbar on top, or on the left you don't want it at (0,0): mmi->ptMaxPosition.x = screen->availableGeometry().x(); mmi->ptMaxPosition.y = screen->availableGeometry().y(); - } else { - qWarning() << "Invalid screen"; + } else if (!screen){ + qWarning() << "effectiveScreen() returned a null screen"; } } diff --git a/Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.h b/Telegram/_qt_5_3_1_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.h similarity index 99% rename from Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.h rename to Telegram/_qt_5_3_1_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.h index 085298f39..de56c5674 100644 --- a/Telegram/_qt_5_3_0_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.h +++ b/Telegram/_qt_5_3_1_patch/qtbase/src/plugins/platforms/windows/qwindowswindow.h @@ -282,7 +282,7 @@ private: inline void setParent_sys(const QPlatformWindow *parent); inline void updateTransientParent() const; inline void clearTransientParent() const; - void destroyWindow(); + void destroyWindow(); inline bool isDropSiteEnabled() const { return m_dropTarget != 0; } void setDropSiteEnabled(bool enabled); void updateDropSite(); diff --git a/Telegram/_qt_5_3_0_patch/qtbase/src/widgets/dialogs/qfiledialog.cpp b/Telegram/_qt_5_3_1_patch/qtbase/src/widgets/dialogs/qfiledialog.cpp similarity index 98% rename from Telegram/_qt_5_3_0_patch/qtbase/src/widgets/dialogs/qfiledialog.cpp rename to Telegram/_qt_5_3_1_patch/qtbase/src/widgets/dialogs/qfiledialog.cpp index 44e63c692..ab1125780 100644 --- a/Telegram/_qt_5_3_0_patch/qtbase/src/widgets/dialogs/qfiledialog.cpp +++ b/Telegram/_qt_5_3_1_patch/qtbase/src/widgets/dialogs/qfiledialog.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtWidgets module of the Qt Toolkit. @@ -71,6 +71,7 @@ extern bool qt_priv_ptr_valid; #endif #if defined(Q_OS_UNIX) #include +#include // for pathconf() on OS X #elif defined(Q_OS_WIN) # include #endif @@ -1018,6 +1019,44 @@ QUrl QFileDialog::directoryUrl() const return QUrl::fromLocalFile(directory().absolutePath()); } +// FIXME Qt 5.4: Use upcoming QVolumeInfo class to determine this information? +static inline bool isCaseSensitiveFileSystem(const QString &path) +{ + Q_UNUSED(path) +#if defined(Q_OS_WIN) + // Return case insensitive unconditionally, even if someone has a case sensitive + // file system mounted, wrongly capitalized drive letters will cause mismatches. + return false; +#elif defined(Q_OS_OSX) + return pathconf(QFile::encodeName(path).constData(), _PC_CASE_SENSITIVE); +#else + return true; +#endif +} + +// Determine the file name to be set on the line edit from the path +// passed to selectFile() in mode QFileDialog::AcceptSave. +static inline QString fileFromPath(const QString &rootPath, QString path) +{ + if (!QFileInfo(path).isAbsolute()) + return path; + if (path.startsWith(rootPath, isCaseSensitiveFileSystem(rootPath) ? Qt::CaseSensitive : Qt::CaseInsensitive)) + path.remove(0, rootPath.size()); + + if (path.isEmpty()) + return path; + + if (path.at(0) == QDir::separator() +#ifdef Q_OS_WIN + //On Windows both cases can happen + || path.at(0) == QLatin1Char('/') +#endif + ) { + path.remove(0, 1); + } + return path; +} + /*! Selects the given \a filename in the file dialog. @@ -1049,28 +1088,9 @@ void QFileDialog::selectFile(const QString &filename) } QModelIndex index = d->model->index(filename); - QString file; - if (!index.isValid()) { - // save as dialog where we want to input a default value - QString text = filename; - if (QFileInfo(filename).isAbsolute()) { - QString current = d->rootPath(); - text.remove(current); - if (text.at(0) == QDir::separator() -#ifdef Q_OS_WIN - //On Windows both cases can happen - || text.at(0) == QLatin1Char('/') -#endif - ) - text = text.remove(0,1); - } - file = text; - } else { - file = index.data().toString(); - } d->qFileDialogUi->listView->selectionModel()->clear(); if (!isVisible() || !d->lineEdit()->hasFocus()) - d->lineEdit()->setText(file); + d->lineEdit()->setText(index.isValid() ? index.data().toString() : fileFromPath(d->rootPath(), filename)); } /*! @@ -1263,7 +1283,7 @@ QStringList QFileDialog::selectedFiles() const QStringList files; foreach (const QUrl &file, d->userSelectedFiles()) files.append(file.toLocalFile()); - if (files.isEmpty()) { + if (files.isEmpty() && d->usingWidgets()) { const FileMode fm = fileMode(); if (fm != ExistingFile && fm != ExistingFiles) files.append(d->rootIndex().data(QFileSystemModel::FilePathRole).toString()); @@ -1615,7 +1635,7 @@ QFileDialog::ViewMode QFileDialog::viewMode() const { Q_D(const QFileDialog); if (!d->usingWidgets()) - return QFileDialog::List; + return static_cast(d->options->viewMode()); return (d->qFileDialogUi->stackedWidget->currentWidget() == d->qFileDialogUi->listView->parent() ? QFileDialog::List : QFileDialog::Detail); } @@ -2123,6 +2143,11 @@ QString QFileDialog::getOpenFileName(QWidget *parent, return QString(); } +static inline QUrl dialogResultToUrl(const QString &file) +{ + return file.isEmpty() ? QUrl() : QUrl::fromLocalFile(file); +} + /*! This is a convenience static function that returns an existing file selected by the user. If the user presses Cancel, it returns an @@ -2161,7 +2186,7 @@ QUrl QFileDialog::getOpenFileUrl(QWidget *parent, Q_UNUSED(supportedSchemes); // Falls back to local file - return QUrl::fromLocalFile(getOpenFileName(parent, caption, dir.toLocalFile(), filter, selectedFilter, options)); + return dialogResultToUrl(getOpenFileName(parent, caption, dir.toLocalFile(), filter, selectedFilter, options)); } /*! @@ -2419,7 +2444,7 @@ QUrl QFileDialog::getSaveFileUrl(QWidget *parent, Q_UNUSED(supportedSchemes); // Falls back to local file - return QUrl::fromLocalFile(getSaveFileName(parent, caption, dir.toLocalFile(), filter, selectedFilter, options)); + return dialogResultToUrl(getSaveFileName(parent, caption, dir.toLocalFile(), filter, selectedFilter, options)); } /*! @@ -2527,7 +2552,7 @@ QUrl QFileDialog::getExistingDirectoryUrl(QWidget *parent, Q_UNUSED(supportedSchemes); // Falls back to local file - return QUrl::fromLocalFile(getExistingDirectory(parent, caption, dir.toLocalFile(), options)); + return dialogResultToUrl(getExistingDirectory(parent, caption, dir.toLocalFile(), options)); } inline static QString _qt_get_directory(const QString &path) diff --git a/Telegram/_qt_5_3_0_patch/qtbase/src/widgets/dialogs/qfiledialog.h b/Telegram/_qt_5_3_1_patch/qtbase/src/widgets/dialogs/qfiledialog.h similarity index 100% rename from Telegram/_qt_5_3_0_patch/qtbase/src/widgets/dialogs/qfiledialog.h rename to Telegram/_qt_5_3_1_patch/qtbase/src/widgets/dialogs/qfiledialog.h diff --git a/Telegram/_qt_5_3_0_patch/qtbase/src/widgets/dialogs/qfiledialog_p.h b/Telegram/_qt_5_3_1_patch/qtbase/src/widgets/dialogs/qfiledialog_p.h similarity index 100% rename from Telegram/_qt_5_3_0_patch/qtbase/src/widgets/dialogs/qfiledialog_p.h rename to Telegram/_qt_5_3_1_patch/qtbase/src/widgets/dialogs/qfiledialog_p.h