From 8d3aa5c31ee5d941927658d4d9c5c46d9b70081b Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 12 Dec 2014 19:27:03 +0300 Subject: [PATCH] version 0.6.18 - photos up to 1280x1280, single-column layout support, new version notifications --- Telegram/PrepareWin.bat | 6 +- Telegram/Resources/lang.txt | 25 +- Telegram/Resources/style.txt | 58 ++-- Telegram/SourceFiles/_other/genlang.cpp | 4 + Telegram/SourceFiles/app.cpp | 16 +- Telegram/SourceFiles/application.cpp | 8 +- Telegram/SourceFiles/art/sprite.png | Bin 57458 -> 57886 bytes Telegram/SourceFiles/art/sprite_200x.png | Bin 99787 -> 100108 bytes Telegram/SourceFiles/config.h | 13 +- Telegram/SourceFiles/dialogswidget.cpp | 100 ++++--- Telegram/SourceFiles/dialogswidget.h | 11 +- Telegram/SourceFiles/gui/flatbutton.cpp | 28 ++ Telegram/SourceFiles/gui/flatbutton.h | 13 +- Telegram/SourceFiles/gui/text.cpp | 2 +- Telegram/SourceFiles/history.cpp | 43 ++- Telegram/SourceFiles/history.h | 7 +- Telegram/SourceFiles/historywidget.cpp | 66 +++-- Telegram/SourceFiles/historywidget.h | 2 + Telegram/SourceFiles/intro/intro.cpp | 4 + Telegram/SourceFiles/intro/intro.h | 2 + Telegram/SourceFiles/intro/introcode.cpp | 2 +- Telegram/SourceFiles/layerwidget.cpp | 24 +- Telegram/SourceFiles/layerwidget.h | 5 + Telegram/SourceFiles/localimageloader.cpp | 8 +- Telegram/SourceFiles/localstorage.cpp | 28 +- Telegram/SourceFiles/main.cpp | 10 + Telegram/SourceFiles/mainwidget.cpp | 313 +++++++++++++++++--- Telegram/SourceFiles/mainwidget.h | 21 +- Telegram/SourceFiles/pspecific_wnd.cpp | 4 +- Telegram/SourceFiles/settings.cpp | 2 + Telegram/SourceFiles/settings.h | 2 + Telegram/SourceFiles/settingswidget.cpp | 14 +- Telegram/SourceFiles/settingswidget.h | 2 + Telegram/SourceFiles/title.cpp | 89 +++++- Telegram/SourceFiles/title.h | 6 +- Telegram/SourceFiles/window.cpp | 89 +++++- Telegram/SourceFiles/window.h | 16 +- Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 +- Telegram/Version.sh | 2 +- 41 files changed, 869 insertions(+), 190 deletions(-) diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index b5f8e3fd9..5a6375333 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,8 +1,8 @@ @echo OFF -set "AppVersionStrSmall=0.6.17" -set "AppVersionStr=0.6.17" -set "AppVersionStrFull=0.6.17.0" +set "AppVersionStrSmall=0.6.18" +set "AppVersionStr=0.6.18" +set "AppVersionStrFull=0.6.18.0" echo. echo Preparing version %AppVersionStr%.. diff --git a/Telegram/Resources/lang.txt b/Telegram/Resources/lang.txt index 98ef8cd9f..39027f7b8 100644 --- a/Telegram/Resources/lang.txt +++ b/Telegram/Resources/lang.txt @@ -24,6 +24,8 @@ lng_menu_settings: "Settings"; lng_menu_about: "About"; lng_menu_update: "Update"; lng_menu_restart: "Restart"; +lng_menu_start_messaging: "Start Messaging"; +lng_menu_conversations: "Conversations List"; lng_open_from_tray: "Open Telegram"; lng_minimize_to_tray: "Minimize to tray"; @@ -55,6 +57,14 @@ lng_weekday5: "Fri"; lng_weekday6: "Sat"; lng_weekday7: "Sun"; +lng_weekday1_full: "Monday"; +lng_weekday2_full: "Tuesday"; +lng_weekday3_full: "Wednesday"; +lng_weekday4_full: "Thursday"; +lng_weekday5_full: "Friday"; +lng_weekday6_full: "Saturday"; +lng_weekday7_full: "Sunday"; + lng_month_day: "{month} {day}"; lng_cancel: "Cancel"; @@ -252,8 +262,8 @@ lng_connection_port_ph: "Port"; lng_connection_user_ph: "Username"; lng_connection_password_ph: "Password"; lng_connection_save: "Save"; -lng_settings_reset: "Reset other sessions"; -lng_settings_reset_done: "Sessions reset done"; +lng_settings_reset: "Terminate other sessions"; +lng_settings_reset_done: "Other sessions terminated"; lng_settings_logout: "Log Out"; lng_sure_logout: "Are you sure you want to log out?"; @@ -485,6 +495,17 @@ lng_mediaview_doc_image: "Document"; lng_mediaview_saved: "Image was saved to your [c]Downloads[/c] folder"; +lng_new_authorization: "{name}, +We detected a login into your account from a new device on {day}, {date} at {time} + +Device: {device} +Location: {location} + +If this wasn't you, you can go to Settings — Terminate other sessions. + +Thanks, +The Telegram Team"; + // Mac specific lng_mac_choose_app: "Choose Application"; diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 4fbb25bcb..0b0ab8a7c 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -46,7 +46,8 @@ color6: #cd4073; // pink color7: #2996ad; // sea color8: #ce671b; // orange -wndMinWidth: 640px; +wndMinWidth: 380px; +wideModeWidth: 640px; wndMinHeight: 480px; wndDefWidth: 800px; wndDefHeight: 600px; @@ -78,6 +79,22 @@ titleTypingColor: #0080c0; statusFont: font(fsize); versionColor: #777; +btnDefIconed: iconedButton { + color: white; + bgColor: white; + overBgColor: white; + font: font(fsize); + + opacity: 0.78; + overOpacity: 1; + + textPos: point(0px, 0px); + downTextPos: point(0px, 0px); + + duration: 150; + cursor: cursor(pointer); +} + sysBtnDelta: 6px; sysUpd: sysButton { size: size(31px, 39px); @@ -99,6 +116,24 @@ sysRes: sysButton(sysUpd) { sysCls: sysButton(sysUpd) { img: sprite(276px, 1px, 19px, 19px); } +titleBackButton: iconedButton(btnDefIconed) { + icon: sprite(133px, 197px, 13px, 20px); + iconPos: point(5px, 9px); + downIcon: sprite(133px, 197px, 13px, 20px); + downIconPos: point(5px, 10px); + + bgColor: #c4d8e9; + overBgColor: #fff; + + width: -30px; + height: 39px; + + opacity: 1; + cursor: cursor(default); + + textPos: point(23px, 10px); + downTextPos: point(23px, 11px); +} btnWhiteHover: #f5f5f5; btnBoxWhiteHover: #fafafa; @@ -107,22 +142,6 @@ btnYesHover: #0073ad; btnNoColor: #8b8b8b; btnNoHover: #777; -btnDefIconed: iconedButton { - color: white; - bgColor: white; - overBgColor: white; - font: font(fsize); - - opacity: 0.78; - overOpacity: 1; - - textPos: point(0px, 0px); - downTextPos: point(0px, 0px); - - duration: 150; - cursor: cursor(pointer); -} - titleTextButton: flatButton { color: #d4e3ef; overColor: #fff; @@ -138,8 +157,8 @@ titleTextButton: flatButton { overTextTop: 10px; downTextTop: 11px; - font: font(13px); - overFont: font(13px); + font: font(fsize); + overFont: font(fsize); duration: 150; cursor: cursor(default); } @@ -175,6 +194,7 @@ btnDefBack: flatButton(btnDefFlat) { downBgColor: #b9b9b9; } +linkCropLimit: 360px; linkFont: font(fsize); linkOverFont: font(fsize underline); btnDefLink: linkButton { diff --git a/Telegram/SourceFiles/_other/genlang.cpp b/Telegram/SourceFiles/_other/genlang.cpp index 5a2d90157..4ce1f925f 100644 --- a/Telegram/SourceFiles/_other/genlang.cpp +++ b/Telegram/SourceFiles/_other/genlang.cpp @@ -251,6 +251,10 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org\n\ th << "\tint32 day = date.dayOfWeek();\n"; th << "\treturn (day > 0 && day <= 7) ? lang(LangKey(lng_weekday1 + day - 1)) : qsl(\"{err}\");\n"; th << "}\n\n"; + th << "inline QString langDayOfWeekFull(const QDate &date) {\n"; + th << "\tint32 day = date.dayOfWeek();\n"; + th << "\treturn (day > 0 && day <= 7) ? lang(LangKey(lng_weekday1_full + day - 1)) : qsl(\"{err}\");\n"; + th << "}\n\n"; th << "Qt::LayoutDirection langDir();\n\n"; th << "class LangLoader {\n"; th << "public:\n"; diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index 4ed2c6b16..aacdbd56a 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -677,13 +677,13 @@ namespace App { if (user->contact > 0) { if (!wasContact) { App::main()->addNewContact(App::userFromPeer(user->id), false); - user->input = MTP_inputPeerContact(userId); - user->inputUser = MTP_inputUserContact(userId); + if (user->input.type() != mtpc_inputPeerSelf) user->input = MTP_inputPeerContact(userId); + if (user->inputUser.type() != mtpc_inputUserSelf) user->inputUser = MTP_inputUserContact(userId); } } else { if (user->access) { - user->input = MTP_inputPeerForeign(userId, MTP_long(user->access)); - user->inputUser = MTP_inputUserForeign(userId, MTP_long(user->access)); + if (user->input.type() != mtpc_inputPeerSelf) user->input = MTP_inputPeerForeign(userId, MTP_long(user->access)); + if (user->inputUser.type() != mtpc_inputUserSelf) user->inputUser = MTP_inputUserForeign(userId, MTP_long(user->access)); } if (user->contact < 0 && !user->phone.isEmpty() && App::userFromPeer(user->id) != MTP::authedId()) { user->contact = 0; @@ -731,8 +731,8 @@ namespace App { switch (i.key()) { case 's': newThumbLevel = 0; newMediumLevel = 5; newFullLevel = 4; break; // box 100x100 case 'm': newThumbLevel = 2; newMediumLevel = 0; newFullLevel = 3; break; // box 320x320 - case 'x': newThumbLevel = 5; newMediumLevel = 3; newFullLevel = 0; break; // box 800x800 - case 'y': newThumbLevel = 6; newMediumLevel = 6; newFullLevel = 1; break; // box 1280x1280 + case 'x': newThumbLevel = 5; newMediumLevel = 3; newFullLevel = 1; break; // box 800x800 + case 'y': newThumbLevel = 6; newMediumLevel = 6; newFullLevel = 0; break; // box 1280x1280 case 'w': newThumbLevel = 8; newMediumLevel = 8; newFullLevel = 2; break; // box 2560x2560 case 'a': newThumbLevel = 1; newMediumLevel = 4; newFullLevel = 8; break; // crop 160x160 case 'b': newThumbLevel = 3; newMediumLevel = 1; newFullLevel = 7; break; // crop 320x320 @@ -791,8 +791,8 @@ namespace App { switch (size) { case 's': newThumbLevel = 0; newMediumLevel = 5; newFullLevel = 4; break; // box 100x100 case 'm': newThumbLevel = 2; newMediumLevel = 0; newFullLevel = 3; break; // box 320x320 - case 'x': newThumbLevel = 5; newMediumLevel = 3; newFullLevel = 0; break; // box 800x800 - case 'y': newThumbLevel = 6; newMediumLevel = 6; newFullLevel = 1; break; // box 1280x1280 + case 'x': newThumbLevel = 5; newMediumLevel = 3; newFullLevel = 1; break; // box 800x800 + case 'y': newThumbLevel = 6; newMediumLevel = 6; newFullLevel = 0; break; // box 1280x1280 case 'w': newThumbLevel = 8; newMediumLevel = 8; newFullLevel = 2; break; // box 2560x2560 case 'a': newThumbLevel = 1; newMediumLevel = 4; newFullLevel = 8; break; // crop 160x160 case 'b': newThumbLevel = 3; newMediumLevel = 1; newFullLevel = 7; break; // crop 320x320 diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index f9414e5b2..d13f0e06e 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -677,8 +677,14 @@ void Application::startApp() { } QNetworkProxyFactory::setUseSystemConfiguration(true); - if (Local::oldMapVersion() < AppVersion) { + if (Local::oldMapVersion() < AppVersion) { psRegisterCustomScheme(); + if (Local::oldMapVersion() && AppVersion == FeaturesNotifyVersion) { + QString versionFeatures(QString::fromUtf8(FeaturesNotify)); + if (!versionFeatures.isEmpty()) { + window->serviceNotification(versionFeatures); + } + } } } diff --git a/Telegram/SourceFiles/art/sprite.png b/Telegram/SourceFiles/art/sprite.png index 11be67e95bdac80b53ad3429ee932039141fcdb9..a60025e09ac7c6d94d6c94291e13195fae279ffd 100644 GIT binary patch delta 41563 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 z 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 s3G}4@`Xsq@11j*cj{pDw delta 41280 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%0DC=}} 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 m+^WdTC@RLn+&8-KfugltoTE!Z+_x=ZScX!MH diff --git a/Telegram/SourceFiles/art/sprite_200x.png b/Telegram/SourceFiles/art/sprite_200x.png index aecf1f7b1a67458275f4356356d19d9691cf185b..c6d94a8aa72fddfd99d5850be4516d2da3ae2559 100644 GIT binary patch delta 43394 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 delta 43057 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 diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 46dbebe85..4d47f1bf6 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,8 +17,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 6017; -static const wchar_t *AppVersionStr = L"0.6.17"; +static const int32 AppVersion = 6018; +static const wchar_t *AppVersionStr = L"0.6.18"; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; @@ -26,6 +26,9 @@ static const wchar_t *AppName = L"Telegram Desktop"; static const wchar_t *AppId = L"{53F49750-6209-4FBF-9CA8-7A333C87D1ED}"; // used in updater.cpp and Setup.iss for Windows static const wchar_t *AppFile = L"Telegram"; +static const int32 FeaturesNotifyVersion = 6018; +extern const char *FeaturesNotify; + #include "settings.h" enum { @@ -105,10 +108,12 @@ enum { WriteMapTimeout = 1000, SaveDraftTimeout = 1000, // save draft after 1 secs of not changing text SaveDraftAnywayTimeout = 5000, // or save anyway each 5 secs + + ServiceUserId = 777000, }; inline bool isServiceUser(uint64 id) { - return (id == 333000) || (id == 777000); + return (id == 333000) || (id == ServiceUserId); } #ifdef Q_OS_WIN @@ -223,8 +228,6 @@ enum { MessagesFirstLoad = 30, // first history part size requested MessagesPerPage = 50, // next history part size - LinkCropLimit = 360, // 360px link length max - DownloadPartSize = 64 * 1024, // 64kb for photo DocumentDownloadPartSize = 128 * 1024, // 128kb for document MaxUploadPhotoSize = 10 * 1024 * 1024, // 10mb photos max diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index 2def85d74..457bedaa0 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -1245,41 +1245,49 @@ void DialogsWidget::setInnerFocus() { _filter.setFocus(); } -void DialogsWidget::regTyping(History *history, UserData *user) { - uint64 ms = getms(true); - history->typing[user] = ms + 6000; - - Histories::TypingHistories::const_iterator i = App::histories().typing.find(history); - if (i == App::histories().typing.cend()) { - App::histories().typing.insert(history, ms); - history->typingFrame = 0; - } - - history->updateTyping(ms, history->typingFrame, true); +void DialogsWidget::animShow(const QPixmap &bgAnimCache) { + _bgAnimCache = bgAnimCache; + _animCache = myGrab(this, rect()); + scroll.hide(); + _filter.hide(); + _cancelSearch.hide(); + _newGroup.hide(); + a_coord = anim::ivalue(-st::introSlideShift, 0); + a_alpha = anim::fvalue(0, 1); + a_bgCoord = anim::ivalue(0, st::introSlideShift); + a_bgAlpha = anim::fvalue(1, 0); anim::start(this); } -bool DialogsWidget::animStep(float64) { - uint64 ms = getms(true); - Histories::TypingHistories &typing(App::histories().typing); - for (Histories::TypingHistories::iterator i = typing.begin(), e = typing.end(); i != e;) { - uint32 typingFrame = (ms - i.value()) / 150; - if (i.key()->updateTyping(ms, typingFrame)) { - list.dlgUpdated(i.key()); - App::main()->topBar()->update(); - } - if (i.key()->typing.isEmpty()) { - i = typing.erase(i); - } else { - ++i; - } +bool DialogsWidget::animStep(float64 ms) { + float64 fullDuration = st::introSlideDelta + st::introSlideDuration, dt = ms / fullDuration; + float64 dt1 = (ms > st::introSlideDuration) ? 1 : (ms / st::introSlideDuration), dt2 = (ms > st::introSlideDelta) ? (ms - st::introSlideDelta) / (st::introSlideDuration) : 0; + bool res = true; + if (dt2 >= 1) { + res = false; + a_bgCoord.finish(); + a_bgAlpha.finish(); + a_coord.finish(); + a_alpha.finish(); + _bgAnimCache = _animCache = QPixmap(); + scroll.show(); + _filter.show(); + onFilterUpdate(true); + activate(); + } else { + a_bgCoord.update(dt1, st::introHideFunc); + a_bgAlpha.update(dt1, st::introAlphaHideFunc); + a_coord.update(dt2, st::introShowFunc); + a_alpha.update(dt2, st::introAlphaShowFunc); } - return !typing.isEmpty(); + update(); + return res; } void DialogsWidget::onCancel() { - onCancelSearch(); - emit cancelled(); + if (!onCancelSearch() || !App::main()->selectingPeer()) { + emit cancelled(); + } } void DialogsWidget::itemRemoved(HistoryItem *item) { @@ -1296,7 +1304,9 @@ void DialogsWidget::unreadCountsReceived(const QVector &dialogs) { Histories::iterator j = App::histories().find(App::peerFromMTP(d.vpeer)); if (j != App::histories().end()) { App::main()->applyNotifySetting(MTP_notifyPeer(d.vpeer), d.vnotify_settings, j.value()); - j.value()->setUnreadCount(d.vunread_count.v, false); + if (d.vunread_count.v >= j.value()->unreadCount) { + j.value()->setUnreadCount(d.vunread_count.v, false); + } } } if (App::wnd()) App::wnd()->psUpdateCounter(); @@ -1543,17 +1553,17 @@ void DialogsWidget::onListScroll() { } } -void DialogsWidget::onFilterUpdate() { +void DialogsWidget::onFilterUpdate(bool force) { + if (animating() && !force) return; + QString filterText = _filter.text(); list.onFilterUpdate(filterText); if (filterText.isEmpty()) { _searchCache.clear(); _searchQueries.clear(); _searchQuery = QString(); - if (!_cancelSearch.isHidden()) { - _cancelSearch.hide(); - _newGroup.show(); - } + _cancelSearch.hide(); + _newGroup.show(); } else if (_cancelSearch.isHidden()) { _cancelSearch.show(); _newGroup.hide(); @@ -1603,8 +1613,22 @@ void DialogsWidget::keyPressEvent(QKeyEvent *e) { void DialogsWidget::paintEvent(QPaintEvent *e) { QPainter p(this); - if (_drawShadow) { - p.fillRect(width() - st::dlgShadow, 0, st::dlgShadow, height(), st::dlgShadowColor->b); + QRect r(e->rect()); + if (r != rect()) { + p.setClipRect(r); + } + if (animating()) { + p.setOpacity(a_bgAlpha.current()); + p.drawPixmap(a_bgCoord.current(), 0, _bgAnimCache); + p.setOpacity(a_alpha.current()); + p.drawPixmap(a_coord.current(), 0, _animCache); + return; + } + if (cWideMode() && _drawShadow) { + QRect sh(width() - st::dlgShadow, 0, st::dlgShadow, height()); + if (r.intersects(sh)) { + p.fillRect(sh, st::dlgShadowColor->b); + } } } @@ -1648,11 +1672,13 @@ void DialogsWidget::onNewGroup() { App::wnd()->showLayer(new NewGroupBox()); } -void DialogsWidget::onCancelSearch() { +bool DialogsWidget::onCancelSearch() { + bool clearing = !_filter.text().isEmpty(); list.clearFilter(); _filter.clear(); _filter.updatePlaceholder(); onFilterUpdate(); + return clearing; } void DialogsWidget::onDialogToTopFrom(int movedFrom) { diff --git a/Telegram/SourceFiles/dialogswidget.h b/Telegram/SourceFiles/dialogswidget.h index 54d0318bd..055c45839 100644 --- a/Telegram/SourceFiles/dialogswidget.h +++ b/Telegram/SourceFiles/dialogswidget.h @@ -167,8 +167,7 @@ public: void dialogsToUp(); - void regTyping(History *history, UserData *user); - + void animShow(const QPixmap &bgAnimCache); bool animStep(float64 ms); void setInnerFocus(); @@ -201,10 +200,10 @@ public slots: void onCancel(); void onListScroll(); void activate(); - void onFilterUpdate(); + void onFilterUpdate(bool force = false); void onAddContact(); void onNewGroup(); - void onCancelSearch(); + bool onCancelSearch(); void onDialogToTopFrom(int movedFrom); bool onSearchMessages(bool searchCache = false); @@ -229,6 +228,10 @@ private: ScrollArea scroll; DialogsListWidget list; + QPixmap _animCache, _bgAnimCache; + anim::ivalue a_coord, a_bgCoord; + anim::fvalue a_alpha, a_bgAlpha; + QTimer _searchTimer; QString _searchQuery, _peopleQuery; bool _searchFull, _peopleFull; diff --git a/Telegram/SourceFiles/gui/flatbutton.cpp b/Telegram/SourceFiles/gui/flatbutton.cpp index 2b8f5712f..88f31d7d2 100644 --- a/Telegram/SourceFiles/gui/flatbutton.cpp +++ b/Telegram/SourceFiles/gui/flatbutton.cpp @@ -214,3 +214,31 @@ void IconedButton::paintEvent(QPaintEvent *e) { p.drawPixmap(t, App::sprite(), i); } } + +MaskedButton::MaskedButton(QWidget *parent, const style::iconedButton &st, const QString &text) : IconedButton(parent, st, text) { +} + +void MaskedButton::paintEvent(QPaintEvent *e) { + QPainter p(this); + + p.setOpacity(_opacity); + + p.setOpacity(a_opacity.current() * _opacity); + + if (!_text.isEmpty()) { + p.setFont(_st.font->f); + p.setRenderHint(QPainter::TextAntialiasing); + p.setPen(a_bg.current()); + const QPoint &t((_state & StateDown) ? _st.downTextPos : _st.textPos); + p.drawText(t.x(), t.y() + _st.font->ascent, _text); + } + + const QRect &i((_state & StateDown) ? _st.downIcon : _st.icon); + if (i.width()) { + const QPoint &t((_state & StateDown) ? _st.downIconPos : _st.iconPos); + QRect r(i); + r.moveTo(t); + p.fillRect(r, a_bg.current()); + p.drawPixmap(t, App::sprite(), i); + } +} diff --git a/Telegram/SourceFiles/gui/flatbutton.h b/Telegram/SourceFiles/gui/flatbutton.h index 854e134c7..bde084c52 100644 --- a/Telegram/SourceFiles/gui/flatbutton.h +++ b/Telegram/SourceFiles/gui/flatbutton.h @@ -103,7 +103,7 @@ public slots: void onStateChange(int oldState, ButtonStateChangeSource source); -private: +protected: QString _text; @@ -115,3 +115,14 @@ private: float64 _opacity; }; + +class MaskedButton : public IconedButton { + Q_OBJECT + +public: + + MaskedButton(QWidget *parent, const style::iconedButton &st, const QString &text = QString()); + + void paintEvent(QPaintEvent *e); + +}; diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index fc8fbe404..8ce0b26eb 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -404,7 +404,7 @@ public: } else { QUrl url(original), good(url.isValid() ? url.toEncoded() : ""); QString readable = good.isValid() ? good.toDisplayString() : original; - result = _t->_font->m.elidedText(readable, Qt::ElideRight, LinkCropLimit); + result = _t->_font->m.elidedText(readable, Qt::ElideRight, st::linkCropLimit); fullDisplayed = (result == readable) ? 1 : 0; } } diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 3f70556da..3705456f1 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -324,7 +324,11 @@ void UserData::setPhoto(const MTPUserProfilePhoto &p) { } break; default: { photoId = 0; - photo = userDefPhoto(colorIndex); + if (id == ServiceUserId) { + photo = ImagePtr(QPixmap::fromImage(App::wnd()->iconLarge().scaledToWidth(160, Qt::SmoothTransformation)), "PNG"); + } else { + photo = userDefPhoto(colorIndex); + } } break; } emit App::main()->peerPhotoChanged(this); @@ -365,7 +369,7 @@ void UserData::setName(const QString &first, const QString &last, const QString firstName = first; lastName = last; } - updateName(firstName + ' ' + lastName, phoneName, usern); + updateName(lastName.isEmpty() ? firstName : (firstName + ' ' + lastName), phoneName, usern); } if (updUsername) { if (App::main()) { @@ -633,7 +637,7 @@ void DocumentOpenLink::onClick(Qt::MouseButton button) const { if (reader.supportsAnimation() && reader.imageCount() > 1 && App::hoveredLinkItem()) { startGif(App::hoveredLinkItem(), already); } else { - App::wnd()->showDocument(data, QPixmap::fromImage(reader.read()), App::hoveredLinkItem()); + App::wnd()->showDocument(data, QPixmap::fromImage(App::readImage(already)), App::hoveredLinkItem()); } } else { psOpenFile(already); @@ -1068,6 +1072,37 @@ void Histories::clear() { Parent::clear(); } +void Histories::regTyping(History *history, UserData *user) { + uint64 ms = getms(true); + history->typing[user] = ms + 6000; + + TypingHistories::const_iterator i = typing.find(history); + if (i == typing.cend()) { + typing.insert(history, ms); + history->typingFrame = 0; + } + + history->updateTyping(ms, history->typingFrame, true); + anim::start(this); +} + +bool Histories::animStep(float64) { + uint64 ms = getms(true); + for (TypingHistories::iterator i = typing.begin(), e = typing.end(); i != e;) { + uint32 typingFrame = (ms - i.value()) / 150; + if (i.key()->updateTyping(ms, typingFrame)) { + App::main()->dlgUpdated(i.key()); + App::main()->topBar()->update(); + } + if (i.key()->typing.isEmpty()) { + i = typing.erase(i); + } else { + ++i; + } + } + return !typing.isEmpty(); +} + Histories::Parent::iterator Histories::erase(Histories::Parent::iterator i) { delete i.value(); return Parent::erase(i); @@ -4157,7 +4192,7 @@ HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, const fwdNameUpdated(); } -HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, MsgId id, HistoryMessage *msg) : HistoryMessage(history, block, id, true, true, ::date(unixtime()), MTP::authedId(), msg->HistoryMessage::selectedText(FullItemSel), msg->getMedia()) +HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, MsgId id, HistoryMessage *msg) : HistoryMessage(history, block, id, (history->peer->input.type() != mtpc_inputPeerSelf), (history->peer->input.type() != mtpc_inputPeerSelf), ::date(unixtime()), MTP::authedId(), msg->HistoryMessage::selectedText(FullItemSel), msg->getMedia()) , fwdDate(dynamic_cast(msg) ? dynamic_cast(msg)->dateForwarded() : msg->date) , fwdFrom(dynamic_cast(msg) ? dynamic_cast(msg)->fromForwarded() : msg->from()) , fwdFromName(4096) diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index 736f3dbbb..08f2c9216 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -480,12 +480,15 @@ public: MsgId clientMsgId(); struct History; -struct Histories : public QHash { +struct Histories : public QHash, public Animated { typedef QHash Parent; Histories() : unreadFull(0), unreadMuted(0) { } + void regTyping(History *history, UserData *user); + bool animStep(float64 ms); + void clear(); Parent::iterator erase(Parent::iterator i); ~Histories() { @@ -494,7 +497,7 @@ struct Histories : public QHash { unreadFull = unreadMuted = 0; } - HistoryItem *addToBack(const MTPmessage &msg, int msgState = 1); // 1 - new message, 0 - not new message, -1 - searched message + HistoryItem *addToBack(const MTPmessage &msg, int msgState = 1); // 2 - new read message, 1 - new unread 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 diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index f5c15e184..98600bb27 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -665,12 +665,14 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { _menu->addAction(lang(lng_context_clear_selection), historyWidget, SLOT(onClearSelected())); } else if (App::hoveredLinkItem()) { if (isUponSelected != -2) { - if (dynamic_cast(App::hoveredLinkItem())) { + if (dynamic_cast(App::hoveredLinkItem()) && App::hoveredLinkItem()->id > 0) { _menu->addAction(lang(lng_context_forward_msg), historyWidget, SLOT(forwardMessage()))->setEnabled(true); } _menu->addAction(lang(lng_context_delete_msg), historyWidget, SLOT(deleteMessage()))->setEnabled(true); } - _menu->addAction(lang(lng_context_select_msg), historyWidget, SLOT(selectMessage()))->setEnabled(true); + if (App::hoveredLinkItem()->id > 0) { + _menu->addAction(lang(lng_context_select_msg), historyWidget, SLOT(selectMessage()))->setEnabled(true); + } App::contextItem(App::hoveredLinkItem()); } } else { // maybe cursor on some text history item? @@ -711,7 +713,7 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { _menu->addAction(lang(lng_context_forward_selected), historyWidget, SLOT(onForwardSelected())); _menu->addAction(lang(lng_context_delete_selected), historyWidget, SLOT(onDeleteSelected())); _menu->addAction(lang(lng_context_clear_selection), historyWidget, SLOT(onClearSelected())); - } else if (item) { + } else if (item && ((isUponSelected != -2 && (canForward || canDelete)) || item->id > 0)) { if (!_menu) _menu = new ContextMenu(this); if (isUponSelected != -2) { if (canForward) { @@ -722,9 +724,11 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { _menu->addAction(lang((msg && msg->uploading()) ? lng_context_cancel_upload : lng_context_delete_msg), historyWidget, SLOT(deleteMessage()))->setEnabled(true); } } - _menu->addAction(lang(lng_context_select_msg), historyWidget, SLOT(selectMessage()))->setEnabled(true); + if (item->id > 0) { + _menu->addAction(lang(lng_context_select_msg), historyWidget, SLOT(selectMessage()))->setEnabled(true); + } } else { - if (App::mousedItem() && App::mousedItem()->itemType() == HistoryItem::MsgType) { + if (App::mousedItem() && App::mousedItem()->itemType() == HistoryItem::MsgType && App::mousedItem()->id > 0) { if (!_menu) _menu = new ContextMenu(this); _menu->addAction(lang(lng_context_select_msg), historyWidget, SLOT(selectMessage()))->setEnabled(true); item = App::mousedItem(); @@ -1425,10 +1429,14 @@ void HistoryHider::mousePressEvent(QMouseEvent *e) { void HistoryHider::startHide() { if (hiding) return; hiding = true; - if (offered) cacheForAnim = myGrab(this, box); - if (_forwardRequest) MTP::cancel(_forwardRequest); - aOpacity.start(0); - anim::start(this); + if (cWideMode()) { + if (offered) cacheForAnim = myGrab(this, box); + if (_forwardRequest) MTP::cancel(_forwardRequest); + aOpacity.start(0); + anim::start(this); + } else { + QTimer::singleShot(0, this, SLOT(deleteLater())); + } } void HistoryHider::forward() { @@ -1473,6 +1481,13 @@ void HistoryHider::resizeEvent(QResizeEvent *e) { } void HistoryHider::offerPeer(PeerId peer) { + if (!peer) { + offered = 0; + toText.setText(st::boxFont, QString()); + toTextWidth = 0; + resizeEvent(0); + return; + } offered = App::peer(peer); QString phrase; if (_sharedContact) { @@ -1502,6 +1517,10 @@ void HistoryHider::offerPeer(PeerId peer) { setFocus(); } +QString HistoryHider::offeredText() const { + return toText.original(); +} + bool HistoryHider::wasOffered() const { return !!offered; } @@ -1679,12 +1698,10 @@ void HistoryWidget::typingDone(const MTPBool &result, mtpRequestId req) { void HistoryWidget::activate() { if (App::main()->selectingPeer()) { if (hiderOffered) { -// hiderOffered = false; App::main()->focusPeerSelect(); return; } else { App::main()->dialogsActivate(); -// App::main()->hidePeerSelect(); } } if (_list) { @@ -1750,6 +1767,7 @@ void HistoryWidget::showPeer(const PeerId &peer, MsgId msgId, bool force, bool l checkUnreadLoaded(); clearLoadingAround(); + emit peerShown(histPeer); return activate(); } updateTyping(false); @@ -1899,7 +1917,7 @@ void HistoryWidget::checkUnreadLoaded(bool checkOnlyShow) { } void HistoryWidget::updateControlsVisibility() { - if (!hist) { + if (!hist || animating()) { _scroll.hide(); _send.hide(); _toHistoryEnd.hide(); @@ -2225,6 +2243,8 @@ void HistoryWidget::loadMessagesAround() { } void HistoryWidget::onListScroll() { + if (_scroll.isHidden()) return; + App::checkImageCacheSize(); if (histPreloading || !hist || ((_list->isHidden() || _scroll.isHidden() || !App::wnd()->windowHandle()->isVisible()) && hist->readyForWork())) { @@ -2320,7 +2340,7 @@ mtpRequestId HistoryWidget::onForward(const PeerId &peer, SelectedItemSet toForw MTPstring msgText(MTP_string(msg->selectedText(FullItemSel))); - int32 flags = 0x01 | 0x02; // unread, out + int32 flags = (histPeer->input.type() == mtpc_inputPeerSelf) ? 0 : (0x01 | 0x02); // unread, out hist->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(histPeer->id), MTP_int(unixtime()), msgText, MTP_messageMediaEmpty())); hist->sendRequestId = MTP::send(MTPmessages_SendMessage(histPeer->input, msgText, MTP_long(randomId)), App::main()->rpcDone(&MainWidget::sentDataReceived, randomId), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); } @@ -2367,10 +2387,11 @@ void HistoryWidget::shareContact(const PeerId &peer, const QString &phone, const h->loadAround(0); - int32 flags = 0x01 | 0x02; // unread, out + PeerData *p = App::peer(peer); + int32 flags = (p->input.type() == mtpc_inputPeerSelf) ? 0 : (0x01 | 0x02); // unread, out h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(peer), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname), MTP_int(userId)))); - h->sendRequestId = MTP::send(MTPmessages_SendMedia(App::peer(peer)->input, MTP_inputMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname)), MTP_long(randomId)), App::main()->rpcDone(&MainWidget::sentFullDataReceived, randomId), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); + h->sendRequestId = MTP::send(MTPmessages_SendMedia(p->input, MTP_inputMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname)), MTP_long(randomId)), App::main()->rpcDone(&MainWidget::sentFullDataReceived, randomId), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); App::historyRegRandom(randomId, newId); if (hist && histPeer && peer == histPeer->id) { @@ -2434,6 +2455,7 @@ bool HistoryWidget::animStep(float64 ms) { float64 dt1 = (ms > st::introSlideDuration) ? 1 : (ms / st::introSlideDuration), dt2 = (ms > st::introSlideDelta) ? (ms - st::introSlideDelta) / (st::introSlideDuration) : 0; bool res = true; if (dt2 >= 1) { + anim::stop(this); res = false; a_bgCoord.finish(); a_bgAlpha.finish(); @@ -2441,6 +2463,7 @@ bool HistoryWidget::animStep(float64 ms) { a_alpha.finish(); _bgAnimCache = _animCache = _animTopBarCache = _bgAnimTopBarCache = QPixmap(); App::main()->topBar()->stopAnim(); + App::main()->topBar()->enableShadow(); updateControlsVisibility(); if (hist && hist->readyForWork()) { _scroll.show(); @@ -2716,6 +2739,13 @@ void HistoryWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) } } +void HistoryWidget::topBarShadowParams(int32 &x, float64 &o) { + if (animating() && a_coord.current() >= 0) { + x = a_coord.current(); + o = a_alpha.current(); + } +} + void HistoryWidget::topBarClick() { if (hist) App::main()->showPeerProfile(histPeer); } @@ -2896,11 +2926,11 @@ void HistoryWidget::confirmSendImage(const ReadyLocalMedia &img) { History *h = App::history(img.peer); if (img.type == ToPreparePhoto) { h->loadAround(0); - int32 flags = 0x01 | 0x02; // unread, out + int32 flags = (h->peer->input.type() == mtpc_inputPeerSelf) ? 0 : (0x01 | 0x02); // unread, out h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaPhoto(img.photo))); } else if (img.type == ToPrepareDocument) { h->loadAround(0); - int32 flags = 0x01 | 0x02; // unread, out + int32 flags = (h->peer->input.type() == mtpc_inputPeerSelf) ? 0 : (0x01 | 0x02); // unread, out h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(img.peer), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaDocument(img.document))); } @@ -3227,7 +3257,7 @@ void HistoryWidget::setFieldText(const QString &text) { } void HistoryWidget::onCancel() { - showPeer(0); + if (App::main()) App::main()->showPeer(0); emit cancelled(); } diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index 9a80f5abf..1e836c6d1 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -204,6 +204,7 @@ public: void resizeEvent(QResizeEvent *e); void offerPeer(PeerId peer); + QString offeredText() const; bool wasOffered() const; @@ -270,6 +271,7 @@ public: void updateTopBarSelection(); void paintTopBar(QPainter &p, float64 over, int32 decreaseWidth); + void topBarShadowParams(int32 &x, float64 &o); void topBarClick(); void loadMessages(); diff --git a/Telegram/SourceFiles/intro/intro.cpp b/Telegram/SourceFiles/intro/intro.cpp index 59a975588..a83b6f784 100644 --- a/Telegram/SourceFiles/intro/intro.cpp +++ b/Telegram/SourceFiles/intro/intro.cpp @@ -333,6 +333,10 @@ void IntroWidget::keyPressEvent(QKeyEvent *e) { } } +void IntroWidget::updateWideMode() { + +} + void IntroWidget::rpcInvalidate() { if (phone) phone->rpcInvalidate(); if (code) code->rpcInvalidate(); diff --git a/Telegram/SourceFiles/intro/intro.h b/Telegram/SourceFiles/intro/intro.h index 437908ff3..8096b0f60 100644 --- a/Telegram/SourceFiles/intro/intro.h +++ b/Telegram/SourceFiles/intro/intro.h @@ -40,6 +40,8 @@ public: void mousePressEvent(QMouseEvent *e); void keyPressEvent(QKeyEvent *e); + void updateWideMode(); + void animShow(const QPixmap &bgAnimCache, bool back = false); bool animStep(float64 ms); diff --git a/Telegram/SourceFiles/intro/introcode.cpp b/Telegram/SourceFiles/intro/introcode.cpp index da821788a..f338dbf53 100644 --- a/Telegram/SourceFiles/intro/introcode.cpp +++ b/Telegram/SourceFiles/intro/introcode.cpp @@ -106,7 +106,7 @@ void IntroCode::paintEvent(QPaintEvent *e) { p.setOpacity(errorAlpha.current()); p.setFont(st::introErrFont->f); p.setPen(st::introErrColor->p); - p.drawText(textRect.left(), next.y() + next.height() + st::introErrTop + st::introErrFont->ascent, error); + p.drawText(QRect(textRect.left(), next.y() + next.height() + st::introErrTop, st::introTextSize.width(), st::introErrHeight), error, style::al_center); } } diff --git a/Telegram/SourceFiles/layerwidget.cpp b/Telegram/SourceFiles/layerwidget.cpp index c57f074df..8c44b2d87 100644 --- a/Telegram/SourceFiles/layerwidget.cpp +++ b/Telegram/SourceFiles/layerwidget.cpp @@ -33,10 +33,17 @@ BackgroundWidget::BackgroundWidget(QWidget *parent, LayeredWidget *w) : QWidget( show(); connect(w, SIGNAL(closed()), this, SLOT(onInnerClose())); connect(w, SIGNAL(resized()), this, SLOT(update())); + connect(w, SIGNAL(destroyed(QObject*)), this, SLOT(boxDestroyed(QObject*))); w->setFocus(); } +void BackgroundWidget::showFast() { + animStep(st::layerSlideDuration + 1); + update(); +} + void BackgroundWidget::paintEvent(QPaintEvent *e) { + if (!w) return; bool trivial = (rect() == e->rect()); QPainter p(this); @@ -91,6 +98,10 @@ void BackgroundWidget::resizeEvent(QResizeEvent *e) { w->parentResized(); } +void BackgroundWidget::updateWideMode() { + +} + void BackgroundWidget::replaceInner(LayeredWidget *n) { if (_hidden) _hidden->deleteLater(); _hidden = w; @@ -99,6 +110,7 @@ void BackgroundWidget::replaceInner(LayeredWidget *n) { w->setParent(this); connect(w, SIGNAL(closed()), this, SLOT(onInnerClose())); connect(w, SIGNAL(resized()), this, SLOT(update())); + connect(w, SIGNAL(destroyed(QObject*)), this, SLOT(boxDestroyed(QObject*))); w->show(); resizeEvent(0); w->animStep(1); @@ -112,8 +124,9 @@ bool BackgroundWidget::animStep(float64 ms) { if (dt >= 1) { aBackground.finish(); if (hiding) { - QTimer::singleShot(0, App::wnd(), SLOT(layerHidden())); + App::wnd()->layerFinishedHide(this); } + anim::stop(this); res = false; } else { aBackground.update(dt, aBackgroundFunc); @@ -122,6 +135,15 @@ bool BackgroundWidget::animStep(float64 ms) { return res; } +void BackgroundWidget::boxDestroyed(QObject *obj) { + if (obj == w) { + if (App::wnd()) App::wnd()->layerFinishedHide(this); + w = 0; + } else if (_hidden == obj) { + _hidden = 0; + } +} + BackgroundWidget::~BackgroundWidget() { if (App::wnd()) App::wnd()->noBox(this); w->deleteLater(); diff --git a/Telegram/SourceFiles/layerwidget.h b/Telegram/SourceFiles/layerwidget.h index 3e06c5426..a35f387d9 100644 --- a/Telegram/SourceFiles/layerwidget.h +++ b/Telegram/SourceFiles/layerwidget.h @@ -54,11 +54,15 @@ public: BackgroundWidget(QWidget *parent, LayeredWidget *w); + void showFast(); + void paintEvent(QPaintEvent *e); void keyPressEvent(QKeyEvent *e); void mousePressEvent(QMouseEvent *e); void resizeEvent(QResizeEvent *e); + void updateWideMode(); + void replaceInner(LayeredWidget *n); bool animStep(float64 ms); @@ -69,6 +73,7 @@ public slots: void onClose(); bool onInnerClose(); + void boxDestroyed(QObject *obj); private: diff --git a/Telegram/SourceFiles/localimageloader.cpp b/Telegram/SourceFiles/localimageloader.cpp index e49e993f5..d34425db0 100644 --- a/Telegram/SourceFiles/localimageloader.cpp +++ b/Telegram/SourceFiles/localimageloader.cpp @@ -149,13 +149,13 @@ void LocalImageLoaderPrivate::prepareImages() { photoThumbs.insert('m', medium); photoSizes.push_back(MTP_photoSize(MTP_string("m"), MTP_fileLocationUnavailable(MTP_long(0), MTP_int(0), MTP_long(0)), MTP_int(medium.width()), MTP_int(medium.height()), MTP_int(0))); - QPixmap full = (w > 800 || h > 800) ? QPixmap::fromImage(img.scaled(800, 800, Qt::KeepAspectRatio, Qt::SmoothTransformation)) : QPixmap::fromImage(img); - photoThumbs.insert('x', full); - photoSizes.push_back(MTP_photoSize(MTP_string("x"), MTP_fileLocationUnavailable(MTP_long(0), MTP_int(0), MTP_long(0)), MTP_int(full.width()), MTP_int(full.height()), MTP_int(0))); + QPixmap full = (w > 1280 || h > 1280) ? QPixmap::fromImage(img.scaled(1280, 1280, Qt::KeepAspectRatio, Qt::SmoothTransformation)) : QPixmap::fromImage(img); + photoThumbs.insert('y', full); + photoSizes.push_back(MTP_photoSize(MTP_string("y"), MTP_fileLocationUnavailable(MTP_long(0), MTP_int(0), MTP_long(0)), MTP_int(full.width()), MTP_int(full.height()), MTP_int(0))); { QBuffer jpegBuffer(&jpeg); - full.save(&jpegBuffer, "JPG", 87); + full.save(&jpegBuffer, "JPG", 77); } if (!filesize) filesize = jpeg.size(); diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index d36c2156d..d09070c9e 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -1045,6 +1045,24 @@ namespace Local { if (!data->tasks.isEmpty() && (data->tasks.at(0) == ClearManagerAll)) return true; if (task == ClearManagerAll) { data->tasks.clear(); + if (!_storageMap.isEmpty()) { + _storageMap.clear(); + _storageFilesSize = 0; + _mapChanged = true; + } + if (!_draftsMap.isEmpty()) { + _draftsMap.clear(); + _mapChanged = true; + } + if (!_draftsPositionsMap.isEmpty()) { + _draftsPositionsMap.clear(); + _mapChanged = true; + } + if (_locationsKey) { + _locationsKey = 0; + _mapChanged = true; + } + _writeMap(); } else { if (task & ClearManagerImages) { if (data->images.isEmpty()) { @@ -1058,10 +1076,12 @@ namespace Local { data->images.insert(k, i.value()); } } - _storageMap.clear(); - _storageFilesSize = 0; - _mapChanged = true; - _writeMap(); + if (!_storageMap.isEmpty()) { + _storageMap.clear(); + _storageFilesSize = 0; + _mapChanged = true; + _writeMap(); + } } for (int32 i = 0, l = data->tasks.size(); i < l; ++i) { if (data->tasks.at(i) == task) return true; diff --git a/Telegram/SourceFiles/main.cpp b/Telegram/SourceFiles/main.cpp index 7fe9471ff..186d5ee69 100644 --- a/Telegram/SourceFiles/main.cpp +++ b/Telegram/SourceFiles/main.cpp @@ -19,6 +19,16 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "application.h" #include "pspecific.h" +const char *FeaturesNotify = "\ +Telegram Desktop was updated to version 0.6.18\n\ +\n\ + \xe2\x80\x94 Single-column layout support added for small chat window.\n\ + \xe2\x80\x94 Photos are sent up to 1280x1280 size.\n\ + \xe2\x80\x94 New version notifications added.\n\ +\n\ +Full versions log is available here:\n\ +https://desktop.telegram.org/#changelog"; + int main(int argc, char *argv[]) { #ifdef _NEED_WIN_GENERATE_DUMP _oldWndExceptionFilter = SetUnhandledExceptionFilter(_exceptionFilter); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 35c1cb807..aa5edf9f3 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -143,6 +143,7 @@ void TopBarWidget::enableShadow(bool enable) { void TopBarWidget::paintEvent(QPaintEvent *e) { QPainter p(this); + if (e->rect().top() < st::topBarHeight) { // optimize shadow-only drawing p.fillRect(QRect(0, 0, width(), st::topBarHeight), st::topBarBG->b); if (_clearSelection.isHidden()) { @@ -156,7 +157,16 @@ void TopBarWidget::paintEvent(QPaintEvent *e) { } } if (_drawShadow) { - p.fillRect(st::titleShadow, st::topBarHeight, width() - st::titleShadow, st::titleShadow, st::titleShadowColor->b); + int32 shadowCoord = 0; + float64 shadowOpacity = 1.; + main()->topBarShadowParams(shadowCoord, shadowOpacity); + + p.setOpacity(shadowOpacity); + if (cWideMode()) { + p.fillRect(shadowCoord + st::titleShadow, st::topBarHeight, width() - st::titleShadow, st::titleShadow, st::titleShadowColor->b); + } else { + p.fillRect(shadowCoord, st::topBarHeight, width(), st::titleShadow, st::titleShadowColor->b); + } } } @@ -271,8 +281,8 @@ MainWidget *TopBarWidget::main() { return static_cast(parentWidget()); } -MainWidget::MainWidget(Window *window) : QWidget(window), failedObjId(0), _dialogsWidth(st::dlgMinWidth), -dialogs(this), history(this), profile(0), overview(0), _topBar(this), hider(0), _mediaType(this), _mediaTypeMask(0), +MainWidget::MainWidget(Window *window) : QWidget(window), _started(0), failedObjId(0), _dialogsWidth(st::dlgMinWidth), +dialogs(this), history(this), profile(0), overview(0), _topBar(this), _forwardConfirm(0), hider(0), _mediaType(this), _mediaTypeMask(0), updPts(0), updDate(0), updQts(-1), updSeq(0), updInited(false), onlineRequest(0), _failDifferenceTimeout(1), _lastUpdateTime(0) { setGeometry(QRect(0, st::titleHeight, App::wnd()->width(), App::wnd()->height() - st::titleHeight)); @@ -296,7 +306,12 @@ updPts(0), updDate(0), updQts(-1), updSeq(0), updInited(false), onlineRequest(0) } dialogs.show(); - history.show(); + if (cWideMode()) { + history.show(); + } else { + history.hide(); + } + App::wnd()->getTitle()->updateBackButton(); _topBar.hide(); _topBar.raise(); @@ -338,14 +353,70 @@ void MainWidget::onSendPaths(const PeerId &peer) { void MainWidget::noHider(HistoryHider *destroyed) { if (hider == destroyed) { hider = 0; + if (cWideMode()) { + if (_forwardConfirm) { + _forwardConfirm->deleteLater(); + _forwardConfirm = 0; + } + } else { + if (_forwardConfirm) { + _forwardConfirm->startHide(); + _forwardConfirm = 0; + } + onPeerShown(history.peer()); + if (profile || overview || (history.peer() && history.peer()->id)) { + dialogs.enableShadow(false); + QPixmap animCache = myGrab(this, QRect(0, st::topBarHeight, _dialogsWidth, height() - st::topBarHeight)), + animTopBarCache = myGrab(this, QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); + dialogs.enableShadow(); + _topBar.enableShadow(); + dialogs.hide(); + if (overview) { + overview->show(); + overview->animShow(animCache, animTopBarCache); + } else if (profile) { + profile->show(); + profile->animShow(animCache, animTopBarCache); + } else { + history.show(); + history.animShow(animCache, animTopBarCache); + } + } + App::wnd()->getTitle()->updateBackButton(); + } } } -void MainWidget::forwardLayer(bool forwardSelected) { - hider = new HistoryHider(this, forwardSelected); - hider->show(); - resizeEvent(0); - dialogs.activate(); +void MainWidget::hiderLayer(HistoryHider *h) { + hider = h; + if (cWideMode()) { + hider->show(); + resizeEvent(0); + dialogs.activate(); + } else { + hider->hide(); + dialogs.enableShadow(false); + QPixmap animCache = myGrab(this, QRect(0, 0, _dialogsWidth, height())); + dialogs.enableShadow(); + _topBar.enableShadow(); + + onPeerShown(0); + if (overview) { + overview->hide(); + } else if (profile) { + profile->hide(); + } else { + history.hide(); + } + dialogs.show(); + resizeEvent(0); + dialogs.animShow(animCache); + App::wnd()->getTitle()->updateBackButton(); + } +} + +void MainWidget::forwardLayer(int32 forwardSelected) { + hiderLayer((forwardSelected < 0) ? (new HistoryHider(this)) : (new HistoryHider(this, forwardSelected > 0))); } void MainWidget::deleteLayer(int32 selectedCount) { @@ -360,10 +431,7 @@ void MainWidget::deleteLayer(int32 selectedCount) { } void MainWidget::shareContactLayer(UserData *contact) { - hider = new HistoryHider(this, contact); - hider->show(); - resizeEvent(0); - dialogs.activate(); + hiderLayer(new HistoryHider(this, contact)); } bool MainWidget::selectingPeer() { @@ -372,10 +440,23 @@ bool MainWidget::selectingPeer() { void MainWidget::offerPeer(PeerId peer) { hider->offerPeer(peer); + if (!cWideMode()) { + _forwardConfirm = new ConfirmBox(hider->offeredText(), lang(lng_forward)); + connect(_forwardConfirm, SIGNAL(confirmed()), hider, SLOT(forward())); + connect(_forwardConfirm, SIGNAL(cancelled()), this, SLOT(onForwardCancel())); + connect(_forwardConfirm, SIGNAL(destroyed(QObject*)), this, SLOT(onForwardCancel(QObject*))); + App::wnd()->showLayer(_forwardConfirm); + } } -void MainWidget::hidePeerSelect() { - hider->startHide(); +void MainWidget::onForwardCancel(QObject *obj) { + if (!obj || obj == _forwardConfirm) { + if (_forwardConfirm) { + _forwardConfirm->startHide(); + _forwardConfirm = 0; + } + if (hider) hider->offerPeer(0); + } } void MainWidget::focusPeerSelect() { @@ -551,7 +632,7 @@ void MainWidget::sendPreparedText(History *hist, const QString &text) { App::historyRegRandom(randomId, newId); MTPstring msgText(MTP_string(sendingText)); - int32 flags = 0x01 | 0x02; // unread, out + int32 flags = (hist->peer->input.type() == mtpc_inputPeerSelf) ? 0 : (0x01 | 0x02); // unread, out hist->addToBack(MTP_message(MTP_int(flags), MTP_int(newId), MTP_int(MTP::authedId()), App::peerToMTP(hist->peer->id), MTP_int(unixtime()), msgText, MTP_messageMediaEmpty())); hist->sendRequestId = MTP::send(MTPmessages_SendMessage(hist->peer->input, msgText, MTP_long(randomId)), App::main()->rpcDone(&MainWidget::sentDataReceived, randomId), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId); } @@ -962,7 +1043,7 @@ void MainWidget::documentLoadProgress(mtpFileLoader *loader) { if (reader.supportsAnimation() && reader.imageCount() > 1 && item) { startGif(item, already); } else { - App::wnd()->showDocument(document, QPixmap::fromImage(reader.read()), item); + App::wnd()->showDocument(document, QPixmap::fromImage(App::readImage(already)), item); } } else { psOpenFile(already); @@ -1023,11 +1104,44 @@ void MainWidget::cancelSendImage() { void MainWidget::dialogsCancelled() { if (hider) { hider->startHide(); + noHider(hider); + history.activate(); } else { history.activate(); } } +void MainWidget::serviceNotification(const QString &msg, const MTPMessageMedia &media, bool unread) { + int32 flags = unread ? 0x01 : 0; // unread + HistoryItem *item = App::histories().addToBack(MTP_message(MTP_int(flags), MTP_int(clientMsgId()), MTP_int(ServiceUserId), MTP_peerUser(MTP_int(MTP::authedId())), MTP_int(unixtime()), MTP_string(msg), media), unread ? 1 : 2); + if (item) { + history.peerMessagesUpdated(item->history()->peer->id); + } +} + +void MainWidget::serviceHistoryDone(const MTPmessages_Messages &msgs) { + switch (msgs.type()) { + case mtpc_messages_messages: + App::feedUsers(msgs.c_messages_messages().vusers); + App::feedChats(msgs.c_messages_messages().vchats); + App::feedMsgs(msgs.c_messages_messages().vmessages); + break; + + case mtpc_messages_messagesSlice: + App::feedUsers(msgs.c_messages_messagesSlice().vusers); + App::feedChats(msgs.c_messages_messagesSlice().vchats); + App::feedMsgs(msgs.c_messages_messagesSlice().vmessages); + break; + } + + App::wnd()->showDelayedServiceMsgs(); +} + +bool MainWidget::serviceHistoryFail(const RPCError &error) { + App::wnd()->showDelayedServiceMsgs(); + return false; +} + void MainWidget::setInnerFocus() { if (hider || !history.peer()) { if (hider && hider->wasOffered()) { @@ -1052,7 +1166,9 @@ void MainWidget::createDialogAtTop(History *history, int32 unreadCount) { void MainWidget::showPeer(quint64 peerId, qint32 msgId, bool back, bool force) { if (!back && _stack.size() == 1 && _stack[0]->type() == HistoryStackItem && _stack[0]->peer->id == peerId) { - back = true; + if (cWideMode() || !selectingPeer()) { + back = true; + } } App::wnd()->hideLayer(); QPixmap animCache, animTopBarCache; @@ -1061,15 +1177,23 @@ void MainWidget::showPeer(quint64 peerId, qint32 msgId, bool back, bool force) { hider = 0; } if (force || !selectingPeer()) { - if (history.isHidden() && (profile || overview)) { + if ((history.isHidden() && (profile || overview)) || !cWideMode()) { dialogs.enableShadow(false); if (peerId) { _topBar.enableShadow(false); - animCache = myGrab(this, history.geometry()); - } else { + if (cWideMode()) { + animCache = myGrab(this, QRect(_dialogsWidth, st::topBarHeight, width() - _dialogsWidth, height() - st::topBarHeight)); + } else { + animCache = myGrab(this, QRect(0, st::topBarHeight, _dialogsWidth, height() - st::topBarHeight)); + } + } else if (cWideMode()) { animCache = myGrab(this, QRect(_dialogsWidth, 0, width() - _dialogsWidth, height())); + } else { + animCache = myGrab(this, QRect(0, 0, _dialogsWidth, height())); + } + if (peerId || cWideMode()) { + animTopBarCache = myGrab(this, QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); } - animTopBarCache = myGrab(this, QRect(_topBar.x(), _topBar.y(), _topBar.width(), st::topBarHeight)); dialogs.enableShadow(); _topBar.enableShadow(); history.show(); @@ -1077,6 +1201,7 @@ void MainWidget::showPeer(quint64 peerId, qint32 msgId, bool back, bool force) { } history.showPeer(peerId, msgId, force); if (force || !selectingPeer()) { + bool noPeer = (!history.peer() || !history.peer()->id), onlyDialogs = noPeer && !cWideMode(); if (profile || overview) { if (profile) { profile->hide(); @@ -1092,17 +1217,31 @@ void MainWidget::showPeer(quint64 peerId, qint32 msgId, bool back, bool force) { overview = 0; } _stack.clear(); - if (!history.peer() || !history.peer()->id) { + } + if (onlyDialogs) { + _topBar.hide(); + history.hide(); + dialogs.show(); + if (!animCache.isNull()) { + dialogs.animShow(animCache); + } + } else { + if (noPeer) { _topBar.hide(); resizeEvent(0); } + if (!cWideMode()) dialogs.hide(); + history.show(); if (!animCache.isNull()) { history.animShow(animCache, animTopBarCache, back); } } } - dialogs.scrollToPeer(peerId, msgId); - dialogs.update(); + if (!dialogs.isHidden()) { + dialogs.scrollToPeer(peerId, msgId); + dialogs.update(); + } + App::wnd()->getTitle()->updateBackButton(); } void MainWidget::peerBefore(const PeerData *inPeer, MsgId inMsg, PeerData *&outPeer, MsgId &outMsg) { @@ -1198,6 +1337,7 @@ void MainWidget::showMediaOverview(PeerData *peer, MediaOverviewType type, bool dialogs.raise(); _mediaType.raise(); if (hider) hider->raise(); + App::wnd()->getTitle()->updateBackButton(); } void MainWidget::showPeerProfile(PeerData *peer, bool back, int32 lastScrollTop, bool allMediaShown) { @@ -1241,6 +1381,7 @@ void MainWidget::showPeerProfile(PeerData *peer, bool back, int32 lastScrollTop, dialogs.raise(); _mediaType.raise(); if (hider) hider->raise(); + App::wnd()->getTitle()->updateBackButton(); } void MainWidget::showBackFromStack() { @@ -1535,35 +1676,94 @@ void MainWidget::hideAll() { } void MainWidget::showAll() { - dialogs.show(); - if (overview) { - overview->show(); - } else if(profile) { - profile->show(); + if (cWideMode()) { + if (hider) { + hider->show(); + if (_forwardConfirm) { + App::wnd()->hideLayer(true); + _forwardConfirm = 0; + } + } + dialogs.show(); + if (overview) { + overview->show(); + } else if (profile) { + profile->show(); + } else { + history.show(); + } + if (profile || overview || history.peer()) { + _topBar.show(); + } } else { - history.show(); - } - if (profile || overview || history.peer()) { - _topBar.show(); + if (hider) { + hider->hide(); + if (!_forwardConfirm && hider->wasOffered()) { + _forwardConfirm = new ConfirmBox(hider->offeredText(), lang(lng_forward)); + connect(_forwardConfirm, SIGNAL(confirmed()), hider, SLOT(forward())); + connect(_forwardConfirm, SIGNAL(cancelled()), this, SLOT(onForwardCancel())); + App::wnd()->showLayer(_forwardConfirm, true); + } + } + if (selectingPeer()) { + dialogs.show(); + history.hide(); + if (overview) overview->hide(); + if (profile) profile->hide(); + _topBar.hide(); + } else if (overview) { + overview->show(); + } else if (profile) { + profile->show(); + } else if (history.peer()) { + history.show(); + } else { + dialogs.show(); + history.hide(); + } + if (!selectingPeer() && (profile || overview || history.peer())) { + _topBar.show(); + dialogs.hide(); + } } App::wnd()->checkHistoryActivation(); } void MainWidget::resizeEvent(QResizeEvent *e) { - _dialogsWidth = snap((width() * 5) / 14, st::dlgMinWidth, st::dlgMaxWidth); int32 tbh = _topBar.isHidden() ? 0 : st::topBarHeight; - dialogs.setGeometry(0, 0, _dialogsWidth + st::dlgShadow, height()); - _topBar.setGeometry(_dialogsWidth, 0, width() - _dialogsWidth, st::topBarHeight + st::titleShadow); + if (cWideMode()) { + _dialogsWidth = snap((width() * 5) / 14, st::dlgMinWidth, st::dlgMaxWidth); + dialogs.setGeometry(0, 0, _dialogsWidth + st::dlgShadow, height()); + _topBar.setGeometry(_dialogsWidth, 0, width() - _dialogsWidth, st::topBarHeight + st::titleShadow); + history.setGeometry(_dialogsWidth, tbh, width() - _dialogsWidth, height() - tbh); + if (hider) hider->setGeometry(QRect(_dialogsWidth, 0, width() - _dialogsWidth, height())); + } else { + _dialogsWidth = width(); + dialogs.setGeometry(0, 0, _dialogsWidth + st::dlgShadow, height()); + _topBar.setGeometry(0, 0, _dialogsWidth, st::topBarHeight + st::titleShadow); + history.setGeometry(0, tbh, _dialogsWidth, height() - tbh); + if (hider) hider->setGeometry(QRect(0, 0, _dialogsWidth, height())); + } _mediaType.move(width() - _mediaType.width(), st::topBarHeight); - history.setGeometry(_dialogsWidth, tbh, width() - _dialogsWidth, height() - tbh); if (profile) profile->setGeometry(history.geometry()); if (overview) overview->setGeometry(history.geometry()); - if (hider) hider->setGeometry(QRect(_dialogsWidth, 0, width() - _dialogsWidth, height())); } void MainWidget::keyPressEvent(QKeyEvent *e) { } +void MainWidget::updateWideMode() { + showAll(); +} + +bool MainWidget::needBackButton() { + return overview || profile || (history.peer() && history.peer()->id); +} + +void MainWidget::onTitleBack() { + showPeer(0, 0, false, true); +} + void MainWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) { if (profile) { profile->paintTopBar(p, over, decreaseWidth); @@ -1574,6 +1774,12 @@ void MainWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) { } } +void MainWidget::topBarShadowParams(int32 &x, float64 &o) { + if (!profile && !overview && dialogs.isHidden()) { + history.topBarShadowParams(x, o); + } +} + void MainWidget::onPhotosSelect() { if (overview) overview->switchType(OverviewPhotos); _mediaType.hideStart(); @@ -1609,7 +1815,7 @@ void MainWidget::onTopBarClick() { } void MainWidget::onPeerShown(PeerData *peer) { - if (profile || overview || (peer && peer->id)) { + if ((cWideMode() || !selectingPeer()) && (profile || overview || (peer && peer->id))) { _topBar.show(); } else { _topBar.hide(); @@ -1840,6 +2046,12 @@ void MainWidget::start(const MTPUser &user) { openLocalUrl(cStartUrl()); cSetStartUrl(QString()); } + _started = true; + App::wnd()->sendServiceHistoryRequest(); +} + +bool MainWidget::started() { + return _started; } void MainWidget::openLocalUrl(const QString &url) { @@ -1992,10 +2204,7 @@ void MainWidget::activate() { } } else if (App::wnd() && !App::wnd()->layerShown()) { if (!cSendPaths().isEmpty()) { - hider = new HistoryHider(this); - hider->show(); - resizeEvent(0); - dialogs.activate(); + forwardLayer(-1); } else if (history.peer()) { history.activate(); } else { @@ -2250,7 +2459,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { UserData *user = App::userLoaded(d.vuser_id.v); if (history && user) { if (d.vaction.type() == mtpc_sendMessageTypingAction) { - dialogs.regTyping(history, user); + App::histories().regTyping(history, user); } else if (d.vaction.type() == mtpc_sendMessageCancelAction) { history->unregTyping(user); } @@ -2262,7 +2471,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { History *history = App::historyLoaded(App::peerFromChat(d.vchat_id)); UserData *user = (d.vuser_id.v == MTP::authedId()) ? 0 : App::userLoaded(d.vuser_id.v); if (history && user) { - dialogs.regTyping(history, user); + App::histories().regTyping(history, user); } } break; @@ -2412,12 +2621,24 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { case mtpc_updateNewAuthorization: { const MTPDupdateNewAuthorization &d(update.c_updateNewAuthorization()); + QDateTime datetime = date(d.vdate); + + QString text = lang(lng_new_authorization).replace(qsl("{name}"), App::self()->firstName); + text = text.replace(qsl("{day}"), langDayOfWeekFull(datetime.date())); + text = text.replace(qsl("{date}"), langDayOfMonth(datetime.date())); + text = text.replace(qsl("{time}"), datetime.time().toString(qsl("hh:mm"))); + text = text.replace(qsl("{device}"), qs(d.vdevice)); + text = text.replace(qsl("{location}"), qs(d.vlocation)); + App::wnd()->serviceNotification(text); } break; case mtpc_updateServiceNotification: { const MTPDupdateServiceNotification &d(update.c_updateServiceNotification()); if (d.vpopup.v) { App::wnd()->showLayer(new ConfirmBox(qs(d.vmessage), true)); + App::wnd()->serviceNotification(qs(d.vmessage), false, d.vmedia); + } else { + App::wnd()->serviceNotification(qs(d.vmessage), true, d.vmedia); } } break; diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index 94a24891d..772fed892 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -28,6 +28,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org class Window; struct DialogRow; class MainWidget; +class ConfirmBox; class TopBarWidget : public QWidget, public Animated { Q_OBJECT @@ -167,7 +168,12 @@ public: void resizeEvent(QResizeEvent *e); void keyPressEvent(QKeyEvent *e); + void updateWideMode(); + bool needBackButton(); + void onTitleBack(); + void paintTopBar(QPainter &p, float64 over, int32 decreaseWidth); + void topBarShadowParams(int32 &x, float64 &o); TopBarWidget *topBar(); void animShow(const QPixmap &bgAnimCache, bool back = false); @@ -177,6 +183,7 @@ public: void openLocalUrl(const QString &str); void openUserByName(const QString &name); void startFull(const MTPVector &users); + bool started(); void applyNotifySetting(const MTPNotifyPeer &peer, const MTPPeerNotifySettings &settings, History *history = 0); void gotNotifySetting(MTPInputNotifyPeer peer, const MTPPeerNotifySettings &settings); bool failNotifySetting(MTPInputNotifyPeer peer); @@ -229,16 +236,16 @@ public: int32 dlgsWidth() const; - void forwardLayer(bool forwardSelected = false); + void forwardLayer(int32 forwardSelected = 0); // -1 - send paths void deleteLayer(int32 selectedCount = -1); // -1 - context item, else selected, -2 - cancel upload void shareContactLayer(UserData *contact); + void hiderLayer(HistoryHider *h); void noHider(HistoryHider *destroyed); mtpRequestId onForward(const PeerId &peer, bool forwardSelected); void onShareContact(const PeerId &peer, UserData *contact); void onSendPaths(const PeerId &peer); bool selectingPeer(); void offerPeer(PeerId peer); - void hidePeerSelect(); void focusPeerSelect(); void dialogsActivate(); @@ -290,6 +297,10 @@ public: void showAddContact(); void showNewGroup(); + void serviceNotification(const QString &msg, const MTPMessageMedia &media, bool unread); + void serviceHistoryDone(const MTPmessages_Messages &msgs); + bool serviceHistoryFail(const RPCError &error); + ~MainWidget(); signals: @@ -337,11 +348,15 @@ public slots: void onDocumentsSelect(); void onAudiosSelect(); + void onForwardCancel(QObject *obj = 0); + private: void partWasRead(PeerData *peer, const MTPmessages_AffectedHistory &result); void photosLoaded(History *h, const MTPmessages_Messages &msgs, mtpRequestId req); + bool _started; + uint64 failedObjId; QString failedFileName; void loadFailed(mtpFileLoader *loader, bool started, const char *retrySlot); @@ -375,12 +390,12 @@ private: int32 _dialogsWidth; - MTPDuserSelf self; DialogsWidget dialogs; HistoryWidget history; ProfileWidget *profile; OverviewWidget *overview; TopBarWidget _topBar; + ConfirmBox *_forwardConfirm; // for narrow mode HistoryHider *hider; StackItems _stack; QPixmap profileAnimCache; diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index e5aa2c7a0..c6e4451d3 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -1047,8 +1047,8 @@ void PsMainWindow::psInitSize() { TWindowPos pos(cWindowPos()); if (cDebug()) { // temp while design - pos.w = 879; - pos.h = 689; + pos.w = 800; + pos.h = 600; } QRect avail(QDesktopWidget().availableGeometry()); bool maximized = false; diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index 9bbde503a..ea5b0dec1 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -99,6 +99,8 @@ QUrl gUpdateURL = QUrl(qsl("http://tdesktop.com/linux/tupdates/current")); bool gContactsReceived = false; +bool gWideMode = true; + void settingsParseArgs(int argc, char *argv[]) { if (cPlatform() == dbipMac) { gCustomNotifies = false; diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index 17f1343f5..90700a7da 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -161,4 +161,6 @@ DeclareReadSetting(QUrl, UpdateURL); DeclareSetting(bool, ContactsReceived); +DeclareSetting(bool, WideMode); + void settingsParseArgs(int argc, char *argv[]); diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index 19d07fa0c..0da412e7e 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -1343,7 +1343,11 @@ void SettingsWidget::showAll() { _scroll.show(); _inner.show(); _inner.showAll(); - _close.show(); + if (cWideMode()) { + _close.show(); + } else { + _close.hide(); + } } void SettingsWidget::hideAll() { @@ -1364,6 +1368,14 @@ void SettingsWidget::dragEnterEvent(QDragEnterEvent *e) { void SettingsWidget::dropEvent(QDropEvent *e) { } +void SettingsWidget::updateWideMode() { + if (cWideMode()) { + _close.show(); + } else { + _close.hide(); + } +} + void SettingsWidget::updateOnlineDisplay() { _inner.updateOnlineDisplay(); } diff --git a/Telegram/SourceFiles/settingswidget.h b/Telegram/SourceFiles/settingswidget.h index 8f73fa096..bd5d5a3ee 100644 --- a/Telegram/SourceFiles/settingswidget.h +++ b/Telegram/SourceFiles/settingswidget.h @@ -245,6 +245,8 @@ public: void dragEnterEvent(QDragEnterEvent *e); void dropEvent(QDropEvent *e); + void updateWideMode(); + void animShow(const QPixmap &bgAnimCache, bool back = false); bool animStep(float64 ms); diff --git a/Telegram/SourceFiles/title.cpp b/Telegram/SourceFiles/title.cpp index c7dab9e05..0570f255a 100644 --- a/Telegram/SourceFiles/title.cpp +++ b/Telegram/SourceFiles/title.cpp @@ -32,7 +32,7 @@ TitleHider::TitleHider(QWidget *parent) : QWidget(parent), _level(0) { void TitleHider::paintEvent(QPaintEvent *e) { QPainter p(this); p.setOpacity(_level * st::layerAlpha); - p.fillRect(App::main()->dlgsWidth() - 1, 0, width() - App::main()->dlgsWidth(), height(), st::layerBG->b); + p.fillRect(App::main()->dlgsWidth() - st::dlgShadow, 0, width() + st::dlgShadow - App::main()->dlgsWidth(), height(), st::layerBG->b); } void TitleHider::mousePressEvent(QMouseEvent *e) { @@ -51,6 +51,8 @@ TitleWidget::TitleWidget(Window *window) , wnd(window) , hideLevel(0) , hider(0) + , _back(this, st::titleBackButton) + , _cancel(this, lang(lng_cancel), st::titleTextButton) , _settings(this, lang(lng_menu_settings), st::titleTextButton) , _contacts(this, lang(lng_menu_contacts), st::titleTextButton) , _about(this, lang(lng_menu_about), st::titleTextButton) @@ -61,7 +63,6 @@ TitleWidget::TitleWidget(Window *window) , _close(this, window) , lastMaximized(!(window->windowState() & Qt::WindowMaximized)) { - setGeometry(0, 0, wnd->width(), st::titleHeight); _update.hide(); if (App::app()->updatingState() == Application::UpdatingReady) { @@ -69,6 +70,8 @@ TitleWidget::TitleWidget(Window *window) } stateChanged(); + connect(&_back, SIGNAL(clicked()), window, SLOT(onTitleBack())); + connect(&_cancel, SIGNAL(clicked()), this, SIGNAL(hiderClicked())); connect(&_settings, SIGNAL(clicked()), window, SLOT(showSettings())); connect(&_contacts, SIGNAL(clicked()), this, SLOT(onContacts())); connect(&_about, SIGNAL(clicked()), this, SLOT(onAbout())); @@ -87,6 +90,11 @@ void TitleWidget::paintEvent(QPaintEvent *e) { QPainter p(this); p.fillRect(QRect(0, 0, width(), st::titleHeight), st::titleBG->b); + if (!_cancel.isHidden()) { + p.setPen(st::titleTextButton.color->p); + p.setFont(st::titleTextButton.font->f); + p.drawText(st::titleMenuOffset - st::titleTextButton.width / 2, st::titleTextButton.textTop + st::titleTextButton.font->ascent, lang(lng_forward_choose)); + } p.drawPixmap(st::titleIconPos, App::sprite(), st::titleIconRect); } @@ -105,7 +113,11 @@ void TitleWidget::setHideLevel(float64 level) { hider = new TitleHider(this); hider->move(0, 0); hider->resize(size()); - hider->show(); + if (cWideMode()) { + hider->show(); + } else { + hider->hide(); + } } hider->setLevel(hideLevel); } else { @@ -140,6 +152,7 @@ void TitleWidget::resizeEvent(QResizeEvent *e) { _update.move(p); p.setX(p.x() + _update.width()); } + _cancel.move(p.x() - _cancel.width(), 0); if (cPlatform() == dbipWindows) { p.setX(p.x() - _close.width()); @@ -153,18 +166,67 @@ void TitleWidget::resizeEvent(QResizeEvent *e) { } _settings.move(st::titleMenuOffset, 0); - if (MTP::authedId()) { + _back.move(st::titleMenuOffset, 0); + if (MTP::authedId() && _back.isHidden() && _cancel.isHidden()) { _contacts.show(); _contacts.move(_settings.x() + _settings.width(), 0); _about.move(_contacts.x() + _contacts.width(), 0); } else { _contacts.hide(); - _about.move(_settings.x() + _settings.width(), 0); + if (!MTP::authedId()) _about.move(_settings.x() + _settings.width(), 0); } if (hider) hider->resize(size()); } +void TitleWidget::updateBackButton(int authedChanged) { + if (!cWideMode() && App::main() && App::main()->selectingPeer()) { + _cancel.show(); + if (!_back.isHidden()) _back.hide(); + _settings.hide(); + _contacts.hide(); + _about.hide(); + } else { + _cancel.hide(); + bool authed = authedChanged ? (authedChanged > 0) : (MTP::authedId() > 0); + if (authedChanged) { + _back.setText(lang((authedChanged > 0) ? lng_menu_conversations : lng_menu_start_messaging)); + } + if (cWideMode()) { + if (!_back.isHidden()) _back.hide(); + _settings.show(); + if (authed) _contacts.show(); + _about.show(); + } else { + bool need = App::wnd()->needBackButton(); + if (need && _back.isHidden()) { + _back.show(); + _settings.hide(); + _contacts.hide(); + _about.hide(); + } else if (!need && !_back.isHidden()) { + _back.hide(); + _settings.show(); + if (authed) _contacts.show(); + _about.show(); + } + } + } + showUpdateBtn(); + update(); +} + +void TitleWidget::updateWideMode() { + updateBackButton(); + if (hider) { + if (cWideMode()) { + hider->show(); + } else { + hider->hide(); + } + } +} + void TitleWidget::mousePressEvent(QMouseEvent *e) { if (wnd->psHandleTitle()) return; if (e->buttons() & Qt::LeftButton) { @@ -189,6 +251,15 @@ void TitleWidget::stateChanged(Qt::WindowState state) { } void TitleWidget::showUpdateBtn() { + if (!cWideMode() && App::main() && App::main()->selectingPeer()) { + _cancel.show(); + _update.hide(); + _minimize.hide(); + _restore.hide(); + _maximize.hide(); + _close.hide(); + return; + } bool updateReady = App::app()->updatingState() == Application::UpdatingReady; if (updateReady || cEvalScale(cConfigScale()) != cEvalScale(cRealScale())) { _update.setText(lang(updateReady ? lng_menu_update : lng_menu_restart)); @@ -234,7 +305,7 @@ HitTestType TitleWidget::hitTest(const QPoint &p) { if (App::wnd() && App::wnd()->layerShown()) return HitTestNone; int x(p.x()), y(p.y()), w(width()), h(height() - st::titleShadow); - if (hider && x >= App::main()->dlgsWidth()) return HitTestNone; + if (cWideMode() && hider && x >= App::main()->dlgsWidth()) return HitTestNone; if (x >= st::titleIconPos.x() && y >= st::titleIconPos.y() && x < st::titleIconPos.x() + st::titleIconRect.pxWidth() && y < st::titleIconPos.y() + st::titleIconRect.pxHeight()) { return HitTestIcon; @@ -248,9 +319,11 @@ HitTestType TitleWidget::hitTest(const QPoint &p) { return HitTestSysButton; } else if (x >= 0 && x < w && y >= 0 && y < h) { if (false - || _settings.geometry().contains(x, y) + || (!_back.isHidden() && _back.geometry().contains(x, y)) + || (!_cancel.isHidden() && _cancel.geometry().contains(x, y)) + || (!_settings.isHidden() && _settings.geometry().contains(x, y)) || (!_contacts.isHidden() && _contacts.geometry().contains(x, y)) - || _about.geometry().contains(x, y) + || (!_about.isHidden() && _about.geometry().contains(x, y)) ) { return HitTestClient; } diff --git a/Telegram/SourceFiles/title.h b/Telegram/SourceFiles/title.h index 4e4bc9cb0..d9fde83d4 100644 --- a/Telegram/SourceFiles/title.h +++ b/Telegram/SourceFiles/title.h @@ -45,6 +45,9 @@ public: void paintEvent(QPaintEvent *e); void resizeEvent(QResizeEvent *e); + void updateBackButton(int authedChanged = 0); + void updateWideMode(); + void mousePressEvent(QMouseEvent *e); void mouseDoubleClickEvent(QMouseEvent *e); @@ -80,7 +83,8 @@ private: float64 _lastUpdateMs; - FlatButton _settings, _contacts, _about; + MaskedButton _back; + FlatButton _cancel, _settings, _contacts, _about; UpdateBtn _update; MinimizeBtn _minimize; diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index 66d3cc4ac..5524a7b48 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -331,7 +331,7 @@ NotifyWindow::~NotifyWindow() { Window::Window(QWidget *parent) : PsMainWindow(parent), intro(0), main(0), settings(0), layerBG(0), _topWidget(0), -_connecting(0), _clearManager(0), dragging(false), _inactivePress(false), _mediaView(0) { +_connecting(0), _clearManager(0), dragging(false), _inactivePress(false), _mediaView(0), _serviceHistoryRequest(0) { icon16 = icon256.scaledToWidth(16, Qt::SmoothTransformation); icon32 = icon256.scaledToWidth(32, Qt::SmoothTransformation); @@ -438,6 +438,7 @@ void Window::clearWidgets() { void Window::setupIntro(bool anim) { cSetContactsReceived(false); + title->updateBackButton(false); if (intro && (intro->animating() || intro->isVisible()) && !main) return; QPixmap bg = myGrab(this, QRect(0, st::titleHeight, width(), height() - st::titleHeight)); @@ -452,13 +453,49 @@ void Window::setupIntro(bool anim) { fixOrder(); updateTitleStatus(); + + _delayedServiceMsgs.clear(); + if (_serviceHistoryRequest) { + MTP::cancel(_serviceHistoryRequest); + _serviceHistoryRequest = 0; + } } void Window::getNotifySetting(const MTPInputNotifyPeer &peer, uint32 msWait) { MTP::send(MTPaccount_GetNotifySettings(peer), main->rpcDone(&MainWidget::gotNotifySetting, peer), main->rpcFail(&MainWidget::failNotifySetting, peer), 0, msWait); } +void Window::serviceNotification(const QString &msg, bool unread, const MTPMessageMedia &media, bool force) { + History *h = (main && App::userLoaded(ServiceUserId)) ? App::history(ServiceUserId) : 0; + if (!h || (!force && h->isEmpty())) { + _delayedServiceMsgs.push_back(DelayedServiceMsg(qMakePair(msg, media), unread)); + return sendServiceHistoryRequest(); + } + + main->serviceNotification(msg, media, unread); +} + +void Window::showDelayedServiceMsgs() { + QVector toAdd = _delayedServiceMsgs; + _delayedServiceMsgs.clear(); + for (QVector::const_iterator i = toAdd.cbegin(), e = toAdd.cend(); i != e; ++i) { + serviceNotification(i->first.first, i->second, i->first.second, true); + } +} + +void Window::sendServiceHistoryRequest() { + if (!main || !main->started() || _delayedServiceMsgs.isEmpty() || _serviceHistoryRequest) return; + + UserData *user = App::userLoaded(ServiceUserId); + if (!user) { + user = App::feedUsers(MTP_vector(1, MTP_userRequest(MTP_int(ServiceUserId), MTP_string("Telegram"), MTP_string(""), MTP_string(""), MTP_long(-1), MTP_string("42777"), MTP_userProfilePhotoEmpty(), MTP_userStatusRecently()))); + } + _serviceHistoryRequest = MTP::send(MTPmessages_GetHistory(user->input, MTP_int(0), MTP_int(0), MTP_int(1)), main->rpcDone(&MainWidget::serviceHistoryDone), main->rpcFail(&MainWidget::serviceHistoryFail)); +} + void Window::setupMain(bool anim) { + title->updateBackButton(true); + QPixmap bg = myGrab(this, QRect(0, st::titleHeight, width(), height() - st::titleHeight)); clearWidgets(); main = new MainWidget(this); @@ -477,6 +514,15 @@ void Window::setupMain(bool anim) { _mediaView = new MediaView(); } +void Window::onTitleBack() { + if (main) { + main->onTitleBack(); + } + if (settings) { + hideSettings(); + } +} + void Window::showSettings() { if (isHidden()) showFromTray(); @@ -495,6 +541,7 @@ void Window::showSettings() { } settings = new SettingsWidget(this); settings->animShow(bg); + title->updateBackButton(); fixOrder(); } @@ -527,6 +574,7 @@ void Window::hideSettings(bool fast) { main->animShow(bg, true); } } + title->updateBackButton(); fixOrder(); } @@ -594,9 +642,12 @@ void Window::showDocument(DocumentData *doc, QPixmap pix, HistoryItem *item) { _mediaView->setFocus(); } -void Window::showLayer(LayeredWidget *w) { +void Window::showLayer(LayeredWidget *w, bool fast) { layerHidden(); layerBG = new BackgroundWidget(this, w); + if (fast) { + layerBG->showFast(); + } } void Window::showConnecting(const QString &text, const QString &reconnect) { @@ -631,9 +682,13 @@ void Window::replaceLayer(LayeredWidget *w) { } } -void Window::hideLayer() { +void Window::hideLayer(bool fast) { if (layerBG) { layerBG->onClose(); + if (fast) { + layerBG->hide(); + layerBG = 0; + } } if (_mediaView && !_mediaView->isHidden()) { _mediaView->hide(); @@ -663,7 +718,10 @@ void Window::checkHistoryActivation(int state) { } void Window::layerHidden() { - if (layerBG) layerBG->deleteLater(); + if (layerBG) { + layerBG->hide(); + layerBG->deleteLater(); + } layerBG = 0; if (_mediaView && !_mediaView->isHidden()) _mediaView->hide(); if (main) main->setInnerFocus(); @@ -903,6 +961,12 @@ void Window::noBox(BackgroundWidget *was) { } } +void Window::layerFinishedHide(BackgroundWidget *was) { + if (was == layerBG) { + QTimer::singleShot(0, this, SLOT(layerHidden())); + } +} + void Window::fixOrder() { title->raise(); if (layerBG) layerBG->raise(); @@ -957,12 +1021,29 @@ TitleWidget *Window::getTitle() { } void Window::resizeEvent(QResizeEvent *e) { + bool wideMode = (width() >= st::wideModeWidth); + if (wideMode != cWideMode()) { + cSetWideMode(wideMode); + updateWideMode(); + } title->setGeometry(QRect(0, 0, width(), st::titleHeight + st::titleShadow)); if (layerBG) layerBG->resize(width(), height()); if (_connecting) _connecting->setGeometry(0, height() - _connecting->height(), _connecting->width(), _connecting->height()); emit resized(QSize(width(), height() - st::titleHeight)); } +void Window::updateWideMode() { + title->updateWideMode(); + if (main) main->updateWideMode(); + if (settings) settings->updateWideMode(); + if (intro) intro->updateWideMode(); + if (layerBG) layerBG->updateWideMode(); +} + +bool Window::needBackButton() { + return settings || (main && main->needBackButton()); +} + Window::TempDirState Window::tempDirState() { if (_clearManager && _clearManager->hasTask(Local::ClearManagerDownloads)) { return TempDirRemoving; diff --git a/Telegram/SourceFiles/window.h b/Telegram/SourceFiles/window.h index 5331dcd21..45781f33f 100644 --- a/Telegram/SourceFiles/window.h +++ b/Telegram/SourceFiles/window.h @@ -140,11 +140,16 @@ public: void paintEvent(QPaintEvent *e); void resizeEvent(QResizeEvent *e); + void updateWideMode(); + bool needBackButton(); void setupIntro(bool anim); void setupMain(bool anim); void startMain(const MTPUser &user); void getNotifySetting(const MTPInputNotifyPeer &peer, uint32 msWait = 0); + void serviceNotification(const QString &msg, bool unread = true, const MTPMessageMedia &media = MTP_messageMediaEmpty(), bool force = false); + void sendServiceHistoryRequest(); + void showDelayedServiceMsgs(); void mtpStateChanged(int32 dc, int32 state); @@ -169,9 +174,9 @@ public: void showPhoto(PhotoData *photo, HistoryItem *item); void showPhoto(PhotoData *photo, PeerData *item); void showDocument(DocumentData *doc, QPixmap pix, HistoryItem *item); - void showLayer(LayeredWidget *w); + void showLayer(LayeredWidget *w, bool fast = false); void replaceLayer(LayeredWidget *w); - void hideLayer(); + void hideLayer(bool fast = false); bool hideInnerLayer(); bool layerShown(); @@ -184,6 +189,7 @@ public: void noSettings(SettingsWidget *was); void noMain(MainWidget *was); void noBox(BackgroundWidget *was); + void layerFinishedHide(BackgroundWidget *was); void topWidget(QWidget *w); void noTopWidget(QWidget *w); @@ -224,6 +230,8 @@ public slots: void checkHistoryActivation(int state = -1); + void onTitleBack(); + void showSettings(); void layerHidden(); void updateTitleStatus(); @@ -265,6 +273,10 @@ private: QWidget *centralwidget; + typedef QPair, bool> DelayedServiceMsg; + QVector _delayedServiceMsgs; + mtpRequestId _serviceHistoryRequest; + TitleWidget *title; IntroWidget *intro; MainWidget *main; diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 5fdec5450..4b2119d65 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.6.17 + 0.6.18 CFBundleSignature ???? CFBundleURLTypes diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 08e08a47a0840dec26eae5d6575bf62fbe802bf1..e0c0581a5cc268a18d02a8e71bf6b66ef7bf5115 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig^~ delta 53 zcmZ3Yy+nIM5ig_p6O diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index aef9eae91..579b5d5b0 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -1577,7 +1577,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.6.17; + CURRENT_PROJECT_VERSION = 0.6.18; DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1595,7 +1595,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.6.17; + CURRENT_PROJECT_VERSION = 0.6.18; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; @@ -1621,10 +1621,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.6.17; + CURRENT_PROJECT_VERSION = 0.6.18; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.6; - DYLIB_CURRENT_VERSION = 0.6.17; + DYLIB_CURRENT_VERSION = 0.6.18; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -1764,10 +1764,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.6.17; + CURRENT_PROJECT_VERSION = 0.6.18; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.6; - DYLIB_CURRENT_VERSION = 0.6.17; + DYLIB_CURRENT_VERSION = 0.6.18; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; diff --git a/Telegram/Version.sh b/Telegram/Version.sh index a410a845f..a373be447 100755 --- a/Telegram/Version.sh +++ b/Telegram/Version.sh @@ -1,2 +1,2 @@ -echo 6017 0.6.17 +echo 6018 0.6.18