From 070ea58a533d18f905ca64b2b708b44e500fc832 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 18 Jul 2014 14:37:34 +0400 Subject: [PATCH] many small fixes: multi windows users running, touchscreen fix, esc for photo hide, etc + send to menu integration on windows + hide text in notifies --- MSVC.md | 4 +- QTCREATOR.md | 11 +- README.md | 9 +- Telegram/FixMake32.sh | 8 +- Telegram/PrepareLinux.sh | 4 +- Telegram/PrepareLinux32.sh | 4 +- Telegram/PrepareMac.sh | 6 +- Telegram/Resources/lang.txt | 12 +- Telegram/Resources/style.txt | 24 ++- Telegram/Setup.iss | 6 +- Telegram/SourceFiles/_other/Lang.plist | 22 --- Telegram/SourceFiles/_other/packer.cpp | 1 + Telegram/SourceFiles/app.cpp | 39 +++- Telegram/SourceFiles/app.h | 2 +- Telegram/SourceFiles/application.cpp | 74 +++++++- Telegram/SourceFiles/art/sprite.png | Bin 29090 -> 30461 bytes Telegram/SourceFiles/art/sprite_200x.png | Bin 51090 -> 49131 bytes Telegram/SourceFiles/boxes/aboutbox.cpp | 13 +- Telegram/SourceFiles/boxes/aboutbox.h | 5 +- Telegram/SourceFiles/config.h | 4 +- .../etc/{qt.conf => qt_linux.conf} | 0 Telegram/SourceFiles/etc/qt_win.conf | 2 + Telegram/SourceFiles/gui/flattextarea.cpp | 8 +- Telegram/SourceFiles/gui/text.cpp | 13 +- Telegram/SourceFiles/history.h | 2 +- Telegram/SourceFiles/historywidget.cpp | 84 +++++++-- Telegram/SourceFiles/historywidget.h | 11 +- Telegram/SourceFiles/main.cpp | 7 +- Telegram/SourceFiles/mainwidget.cpp | 17 +- Telegram/SourceFiles/mainwidget.h | 1 + .../SourceFiles/mtproto/mtpFileLoader.cpp | 2 +- Telegram/SourceFiles/profilewidget.cpp | 2 +- Telegram/SourceFiles/pspecific_linux.cpp | 4 + Telegram/SourceFiles/pspecific_linux.h | 1 + Telegram/SourceFiles/pspecific_mac.cpp | 9 +- Telegram/SourceFiles/pspecific_mac.h | 1 + Telegram/SourceFiles/pspecific_mac_p.h | 2 +- Telegram/SourceFiles/pspecific_mac_p.mm | 4 +- Telegram/SourceFiles/pspecific_wnd.cpp | 49 +++-- Telegram/SourceFiles/pspecific_wnd.h | 1 + Telegram/SourceFiles/settings.cpp | 12 +- Telegram/SourceFiles/settings.h | 4 + Telegram/SourceFiles/settingswidget.cpp | 71 +++++++- Telegram/SourceFiles/settingswidget.h | 7 +- Telegram/SourceFiles/telegram.qrc | 3 + Telegram/SourceFiles/telegram_linux.qrc | 2 +- Telegram/SourceFiles/types.h | 8 + Telegram/SourceFiles/window.cpp | 171 +++++++++++++----- Telegram/SourceFiles/window.h | 10 + Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5558 -> 5558 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 +- 52 files changed, 561 insertions(+), 209 deletions(-) delete mode 100644 Telegram/SourceFiles/_other/Lang.plist rename Telegram/SourceFiles/etc/{qt.conf => qt_linux.conf} (100%) create mode 100644 Telegram/SourceFiles/etc/qt_win.conf diff --git a/MSVC.md b/MSVC.md index cf8f5acaf..3d7f75689 100644 --- a/MSVC.md +++ b/MSVC.md @@ -14,9 +14,9 @@ or download in ZIP and extract to **D:\TBuild\**, rename **tdesktop-master** to ###Prepare libraries -####OpenSSL 1.0.1g +####OpenSSL 1.0.1h -https://www.openssl.org/related/binaries.html > **OpenSSL for Windows** > Download [**Win32 OpenSSL v1.0.1g** (16 Mb)](http://slproweb.com/download/Win32OpenSSL-1_0_1g.exe) +https://www.openssl.org/related/binaries.html > **OpenSSL for Windows** > Download [**Win32 OpenSSL v1.0.1h** (16 Mb)](http://slproweb.com/download/Win32OpenSSL-1_0_1h.exe) Install to **D:\TBuild\Libraries\OpenSSL-Win32**, while installing **Copy OpenSSL DLLs to** choose **The OpenSSL binaries (/bin) directory** diff --git a/QTCREATOR.md b/QTCREATOR.md index e4d531295..74942a793 100644 --- a/QTCREATOR.md +++ b/QTCREATOR.md @@ -55,13 +55,6 @@ In Terminal go to **/home/user/TBuild/Libraries/QtStatic** and there run building (**make** command) will take really long time. -#####Building pulseaudio plugin - -In Terminal go to **/home/user/TBuild/Libraries/QtStatic/qtmultimedia/src/plugins/pulseaudio** and run - - qmake pulseaudio.pro - make - ###Building Telegram Desktop * Launch Qt Creator, all projects will be taken from **/home/user/TBuild/tdesktop/Telegram** @@ -70,6 +63,6 @@ In Terminal go to **/home/user/TBuild/Libraries/QtStatic/qtmultimedia/src/plugin * Open MetaStyle.pro, configure project with paths **/home/user/TBuild/tdesktop/Linux/DebugIntermediateStyle** and **/home/user/TBuild/tdesktop/Linux/ReleaseIntermediateStyle** and build for Debug * Open MetaEmoji.pro, configure project with paths **/home/user/TBuild/tdesktop/Linux/DebugIntermediateEmoji** and **/home/user/TBuild/tdesktop/Linux/ReleaseIntermediateEmoji** and build for Debug * Open MetaLang.pro, configure project with paths **/home/user/TBuild/tdesktop/Linux/DebugIntermediateLang** and **/home/user/TBuild/tdesktop/Linux/ReleaseIntermediateLang** and build for Debug -* Open Telegram.pro, configure project with paths **/home/user/TBuild/tdesktop/Linux/DebugIntermediate** and **/home/user/TBuild/tdesktop/Linux/ReleaseIntermediate** and build for Debug +* Open Telegram.pro, configure project with paths **/home/user/TBuild/tdesktop/Linux/DebugIntermediate** and **/home/user/TBuild/tdesktop/Linux/ReleaseIntermediate** and build for Debug, if GeneratedFiles are not found click **Run qmake** from **Build** menu and try again * Open Updater.pro, configure project with paths **/home/user/TBuild/tdesktop/Linux/DebugIntermediateUpdater** and **/home/user/TBuild/tdesktop/Linux/ReleaseIntermediateUpdater** and build for Debug -* Release Telegram build will require removing **CUSTOM_API_ID** definition in Telegram.pro project and may require changing paths in **/home/user/TBuild/tdesktop/Telegram/FixMake.sh** or **/home/user/TBuild/tdesktop/Telegram/FixMake32.sh** for static library linking fix +* Release Telegram build will require removing **CUSTOM_API_ID** definition in Telegram.pro project and may require changing paths in **/home/user/TBuild/tdesktop/Telegram/FixMake.sh** or **/home/user/TBuild/tdesktop/Telegram/FixMake32.sh** for static library linking fix, static linking applies only on second Release build (first uses old Makefile) diff --git a/README.md b/README.md index 67f3bc11c..38bb77993 100644 --- a/README.md +++ b/README.md @@ -6,18 +6,17 @@ Source code is published under GPL v3, license is available [here](https://githu ###Supported systems -Only Windows and OS X systems are supported at this moment, Linux builds are on their way. - * Windows XP * Windows Vista * Windows 7 * Windows 8 (**not** RT) * Windows 8.1 (**not** RT) +* OS X 10.7 +* OS X 10.8 * OS X 10.9 -* OS X 10.7-10.8 (not tested) +* Ubuntu 12.04 * Ubuntu 13.04 * Ubuntu 14.04 -* Fedora (not tested) ###Third-party @@ -34,7 +33,7 @@ Only Windows and OS X systems are supported at this moment, Linux builds are on ###[Build instructions for XCode 5.1.1](https://github.com/telegramdesktop/tdesktop/blob/master/XCODE.md) -###[Build instructions for Qt Creator 2.7 Ubuntu](https://github.com/telegramdesktop/tdesktop/blob/master/QTCREATOR.md) +###[Build instructions for Qt Creator 3.1.2 Ubuntu](https://github.com/telegramdesktop/tdesktop/blob/master/QTCREATOR.md) ##Projects in Telegram solution diff --git a/Telegram/FixMake32.sh b/Telegram/FixMake32.sh index 3f63d2d59..4a8692859 100755 --- a/Telegram/FixMake32.sh +++ b/Telegram/FixMake32.sh @@ -1,13 +1,13 @@ -sed -i 's/\-lxcb\-render\-util/\/usr\/lib\/libxcb\-render\-util\.a/g' Makefile +sed -i 's/\-lxcb\-render\-util/\/usr\/lib\/i386\-linux\-gnu\/libxcb\-render\-util\.a/g' Makefile sed -i 's/\-lxcb\-render/\/usr\/lib\/i386\-linux\-gnu\/libxcb\-render\.a/g' Makefile sed -i 's/\-lxcb\-sync/\/usr\/lib\/i386\-linux\-gnu\/libxcb\-sync\.a/g' Makefile -sed -i 's/\-lxcb\-keysyms/\/usr\/lib\/libxcb\-keysyms\.a/g' Makefile -sed -i 's/\-lxcb\-icccm/\/usr\/lib\/libxcb\-icccm\.a/g' Makefile +sed -i 's/\-lxcb\-keysyms/\/usr\/lib\/i386\-linux\-gnu\/libxcb\-keysyms\.a/g' Makefile +sed -i 's/\-lxcb\-icccm/\/usr\/lib\/i386\-linux\-gnu\/libxcb\-icccm\.a/g' Makefile sed -i 's/\-lxcb\-xfixes/\/usr\/lib\/i386\-linux\-gnu\/libxcb\-xfixes\.a/g' Makefile sed -i 's/\-lxcb\-shm/\/usr\/lib\/i386\-linux\-gnu\/libxcb\-shm\.a/g' Makefile sed -i 's/\-lxcb\-randr/\/usr\/lib\/i386\-linux\-gnu\/libxcb\-randr\.a/g' Makefile sed -i 's/\-lxcb\-shape/\/usr\/lib\/i386\-linux\-gnu\/libxcb\-shape\.a/g' Makefile -sed -i 's/\-lxcb\-image/\/usr\/lib\/libxcb\-image\.a \/usr\/lib\/i386\-linux\-gnu\/libxcb\-util\.a/g' Makefile +sed -i 's/\-lxcb\-image/\/usr\/lib\/i386\-linux\-gnu\/libxcb\-image\.a \/usr\/lib\/i386\-linux\-gnu\/libxcb\-util\.a/g' Makefile sed -i 's/\-llzma/\/usr\/lib\/i386\-linux\-gnu\/liblzma\.a/g' Makefile sed -i 's/\-lz/\/usr\/lib\/i386\-linux\-gnu\/libz\.a/g' Makefile sed -i 's/\-lssl/\/usr\/lib\/i386\-linux\-gnu\/libssl\.a/g' Makefile diff --git a/Telegram/PrepareLinux.sh b/Telegram/PrepareLinux.sh index c1ca341cf..dfa0a2a3a 100755 --- a/Telegram/PrepareLinux.sh +++ b/Telegram/PrepareLinux.sh @@ -1,5 +1,5 @@ -AppVersionStr=0.5.8 -AppVersion=5008 +AppVersionStr=0.5.9 +AppVersion=5009 if [ -d "./../Linux/Release/deploy/$AppVersionStr" ]; then echo "Deploy folder for version $AppVersionStr already exists!" diff --git a/Telegram/PrepareLinux32.sh b/Telegram/PrepareLinux32.sh index aa4a5b56d..ef4d22c24 100755 --- a/Telegram/PrepareLinux32.sh +++ b/Telegram/PrepareLinux32.sh @@ -1,5 +1,5 @@ -AppVersionStr=0.5.8 -AppVersion=5008 +AppVersionStr=0.5.9 +AppVersion=5009 if [ -d "./../Linux/Release/deploy/$AppVersionStr" ]; then echo "Deploy folder for version $AppVersionStr already exists!" diff --git a/Telegram/PrepareMac.sh b/Telegram/PrepareMac.sh index ffd792406..79d056d42 100755 --- a/Telegram/PrepareMac.sh +++ b/Telegram/PrepareMac.sh @@ -1,5 +1,5 @@ -AppVersionStr=0.5.8 -AppVersion=5008 +AppVersionStr=0.5.9 +AppVersion=5009 if [ -d "./../Mac/Release/deploy/$AppVersionStr" ]; then echo "Deploy folder for version $AppVersionStr already exists!" @@ -27,7 +27,7 @@ if [ ! -f "./../Mac/Release/Telegram.app/Contents/MacOS/Telegram" ]; then fi if [ ! -f "./../Mac/Release/Telegram.app/Contents/Frameworks/Updater" ]; then - echo "Icon.icns not found in Resources!" + echo "Updater not found in Frameworks!" exit 1 fi diff --git a/Telegram/Resources/lang.txt b/Telegram/Resources/lang.txt index 960bf1426..855e22acf 100644 --- a/Telegram/Resources/lang.txt +++ b/Telegram/Resources/lang.txt @@ -71,6 +71,7 @@ lng_status_lastseen_hours: "%1 hours ago"; lng_status_lastseen_today: "today at {time}"; lng_status_lastseen_yesterday: "yesterday at {time}"; lng_status_lastseen_date: "{date}"; +lng_status_lastseen_date_time: "{date} at {time}"; lng_status_online: "online"; lng_chat_no_members: "Group is unaccessible"; @@ -138,7 +139,12 @@ lng_settings_uploading_photo: "Uploading photo..."; lng_settings_section_notify: "Notifications"; lng_settings_desktop_notify: "Desktop notifications"; -lng_settings_sound_notify: "Sound"; +lng_settings_show_name: "Show sender's name"; +lng_settings_show_preview: "Show message preview"; +lng_settings_sound_notify: "Sound notification"; + +lng_notification_title: "Telegram Desktop"; +lng_notification_preview: "You have a new message"; lng_settings_section_general: "General"; lng_settings_auto_update: "Update automatically"; @@ -154,6 +160,7 @@ lng_settings_workmode_tray: "Show tray icon"; lng_settings_workmode_window: "Show taskbar icon"; lng_settings_auto_start: "Launch Telegram when system starts"; lng_settings_start_min: "Launch minimized"; +lng_settings_add_sendto: "Place Telegram in «Send to» menu"; lng_settings_scale_label: "Interface scale"; lng_settings_scale_auto: "Auto ({cur})"; @@ -338,7 +345,10 @@ lng_really_send_image: "Do you want to send this image?"; lng_forward_choose: "Choose recipient..."; lng_forward_confirm: "Forward to {recipient}?"; lng_forward_share_contact: "Share contact to {recipient}?"; +lng_forward_send_file_confirm: "Send «{name}» to {recipient}?"; +lng_forward_send_files_confirm: "Send selected files to {recipient}?"; lng_forward: "Forward"; +lng_forward_send: "Send"; lng_contact_phone: "Phone number"; lng_enter_contact_data: "New Contact"; diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 1b03a9041..f5a7cb395 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -198,19 +198,20 @@ cbDefFlat: flatCheckbox { disabledCursor: cursor(default); - imageRect: sprite(144px, 68px, 22px, 22px); - chkImageRect: sprite(119px, 68px, 22px, 22px); - overImageRect: sprite(144px, 68px, 22px, 22px); - chkOverImageRect: sprite(119px, 68px, 22px, 22px); - disImageRect: sprite(193px, 68px, 22px, 22px); - chkDisImageRect: sprite(193px, 68px, 22px, 22px); + imageRect: sprite(140px, 68px, 22px, 22px); + chkImageRect: sprite(115px, 68px, 22px, 22px); + overImageRect: sprite(140px, 68px, 22px, 22px); + chkOverImageRect: sprite(115px, 68px, 22px, 22px); + disImageRect: sprite(140px, 43px, 22px, 22px); + chkDisImageRect: sprite(115px, 43px, 22px, 22px); imagePos: point(0px, 0px); } rbDefFlat: flatCheckbox(cbDefFlat) { - chkImageRect: sprite(169px, 68px, 22px, 22px); - chkOverImageRect: sprite(169px, 68px, 22px, 22px); + chkImageRect: sprite(165px, 68px, 22px, 22px); + chkOverImageRect: sprite(165px, 68px, 22px, 22px); + chkDisImageRect: sprite(165px, 43px, 22px, 22px); } inpDefFont: font(17px); @@ -1243,8 +1244,11 @@ aboutHeight: 441px; aboutHeaderFont: font(24px semibold); aboutSubheaderFont: font(24px); aboutHeaderTop: 139px; -aboutVersionFont: font(16px); -aboutVersionColor: #999; +aboutVersion: flatLabel(labelDefFlat) { + font: font(16px); + width: aboutWidth; + align: align(center); +} aboutVersionTop: 178px; aboutTextFont: font(15px); aboutTextTop: 221px; diff --git a/Telegram/Setup.iss b/Telegram/Setup.iss index d2b584d91..1803535dd 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.8" -#define MyAppVersionZero "0.5.8" -#define MyAppFullVersion "0.5.8.0" +#define MyAppVersion "0.5.9" +#define MyAppVersionZero "0.5.9" +#define MyAppFullVersion "0.5.9.0" #define MyAppPublisher "Telegram (Unofficial)" #define MyAppURL "https://tdesktop.com" #define MyAppExeName "Telegram.exe" diff --git a/Telegram/SourceFiles/_other/Lang.plist b/Telegram/SourceFiles/_other/Lang.plist deleted file mode 100644 index 2a5b32ce2..000000000 --- a/Telegram/SourceFiles/_other/Lang.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - NSPrincipalClass - NSApplication - CFBundleIconFile - - CFBundlePackageType - APPL - CFBundleGetInfoString - Created by Qt/QMake - CFBundleSignature - ???? - CFBundleExecutable - MetaLang - CFBundleIdentifier - com.yourcompany.${PRODUCT_NAME:rfc1034identifier} - NOTE - This file was generated by Qt/QMake. - - diff --git a/Telegram/SourceFiles/_other/packer.cpp b/Telegram/SourceFiles/_other/packer.cpp index 4df844bc9..716961025 100644 --- a/Telegram/SourceFiles/_other/packer.cpp +++ b/Telegram/SourceFiles/_other/packer.cpp @@ -431,6 +431,7 @@ int main(int argc, char *argv[]) QString outName(QString("tlinux32upd%1").arg(version)); #elif defined Q_OS_LINUX64 QString outName(QString("tlinuxupd%1").arg(version)); +#else #error Unknown platform! #endif QFile out(outName); diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index bea52c951..8c456aa93 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -180,14 +180,25 @@ namespace App { return dNow.secsTo(dTomorrow); } - QString onlineText(int32 online, int32 now) { + QString onlineText(int32 online, int32 now, bool precise) { if (!online) return lang(lng_status_offline); if (online < 0) return lang(lng_status_invisible); if (online > now) { return lang(lng_status_online); } - int32 minutes = (now - online) / 60; QString when; + if (precise) { + QDateTime dOnline(date(online)), dNow(date(now)); + if (dOnline.date() == dNow.date()) { + when = lang(lng_status_lastseen_today).replace(qsl("{time}"), dOnline.time().toString(qsl("hh:mm"))); + } else if (dOnline.date().addDays(1) == dNow.date()) { + when = lang(lng_status_lastseen_yesterday).replace(qsl("{time}"), dOnline.time().toString(qsl("hh:mm"))); + } else { + when = lang(lng_status_lastseen_date_time).replace(qsl("{date}"), dOnline.date().toString(qsl("dd.MM.yy"))).replace(qsl("{time}"), dOnline.time().toString(qsl("hh:mm"))); + } + return lang(lng_status_lastseen).replace(qsl("{when}"), when); + } + int32 minutes = (now - online) / 60; if (!minutes) { when = lang(lng_status_lastseen_now); } else if (minutes == 1) { @@ -211,9 +222,6 @@ namespace App { } } } - if (when.isEmpty()) { - int a = 0; - } return lang(lng_status_lastseen).replace(qsl("{when}"), when); } @@ -1137,6 +1145,9 @@ namespace App { if (::mousedItem == item) { mousedItem(0); } + if (App::wnd()) { + App::wnd()->notifyItemRemoved(item); + } } void historyUnregItem(HistoryItem *item) { @@ -1360,6 +1371,7 @@ namespace App { configStream << quint32(dbiAutoStart) << qint32(cAutoStart()); configStream << quint32(dbiStartMinimized) << qint32(cStartMinimized()); + configStream << quint32(dbiSendToMenu) << qint32(cSendToMenu()); configStream << quint32(dbiWorkMode) << qint32(cWorkMode()); configStream << quint32(dbiSeenTrayTooltip) << qint32(cSeenTrayTooltip()); configStream << quint32(dbiAutoUpdate) << qint32(cAutoUpdate()); @@ -1421,6 +1433,12 @@ namespace App { cSetStartMinimized(v == 1); } break; + case dbiSendToMenu: { + qint32 v; + configStream >> v; + cSetSendToMenu(v == 1); + } break; + case dbiSoundNotify: { if (configVersion < 3008) { qint32 v; @@ -1542,6 +1560,7 @@ namespace App { stream << quint32(dbiDefaultAttach) << qint32(cDefaultAttach()); stream << quint32(dbiSoundNotify) << qint32(cSoundNotify()); stream << quint32(dbiDesktopNotify) << qint32(cDesktopNotify()); + stream << quint32(dbiNotifyView) << qint32(cNotifyView()); stream << quint32(dbiAskDownloadPath) << qint32(cAskDownloadPath()); stream << quint32(dbiDownloadPath) << (cAskDownloadPath() ? QString() : cDownloadPath()); stream << quint32(dbiEmojiTab) << qint32(cEmojiTab()); @@ -1704,6 +1723,16 @@ namespace App { cSetDesktopNotify(v == 1); } break; + case dbiNotifyView: { + qint32 v; + stream >> v; + switch (v) { + case dbinvShowNothing: cSetNotifyView(dbinvShowNothing); break; + case dbinvShowName: cSetNotifyView(dbinvShowName); break; + default: cSetNotifyView(dbinvShowPreview); break; + } + } + case dbiAskDownloadPath: { qint32 v; stream >> v; diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index c60a1fd18..be6c374c3 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -64,7 +64,7 @@ namespace App { int32 chatFromPeer(const PeerId &peer_id); int32 onlineWillChangeIn(int32 onlineOnServer, int32 nowOnServer); - QString onlineText(int32 onlineOnServer, int32 nowOnServer); + QString onlineText(int32 onlineOnServer, int32 nowOnServer, bool precise = false); void feedUsers(const MTPVector &users); void feedChats(const MTPVector &chats); diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 3430e418b..0ab1ac016 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -73,6 +73,12 @@ namespace { Application::Application(int &argc, char **argv) : PsApplication(argc, argv), serverName(psServerPrefix() + cGUIDStr()), closing(false), updateRequestId(0), updateReply(0), updateThread(0), updateDownloader(0) { + + QByteArray d(QDir((cPlatform() == dbipWindows ? cExeDir() : cWorkingDir()).toLower()).absolutePath().toUtf8()); + char h[33] = { 0 }; + hashMd5Hex(d.constData(), d.size(), h); + serverName = psServerPrefix() + h + '-' + cGUIDStr(); + if (mainApp) { DEBUG_LOG(("Application Error: another Application was created, terminating..")); exit(0); @@ -435,10 +441,57 @@ void Application::startUpdateCheck(bool forceWait) { } } +namespace { + QChar _toHex(ushort v) { + v = v & 0x000F; + return QChar::fromLatin1((v >= 10) ? ('a' + (v - 10)) : ('0' + v)); + } + ushort _fromHex(QChar c) { + return ((c.unicode() >= uchar('a')) ? (c.unicode() - uchar('a') + 10) : (c.unicode() - uchar('0'))) & 0x000F; + } + + QString _escapeTo7bit(const QString &str) { + QString result; + result.reserve(str.size() * 2); + for (int i = 0, l = str.size(); i != l; ++i) { + QChar ch(str.at(i)); + ushort uch(ch.unicode()); + if (uch < 32 || uch > 127 || uch == ushort(uchar('%'))) { + result.append('%').append(_toHex(uch >> 12)).append(_toHex(uch >> 8)).append(_toHex(uch >> 4)).append(_toHex(uch)); + } else { + result.append(ch); + } + } + return result; + } + + QString _escapeFrom7bit(const QString &str) { + QString result; + result.reserve(str.size()); + for (int i = 0, l = str.size(); i != l; ++i) { + QChar ch(str.at(i)); + if (ch == QChar::fromLatin1('%') && i + 4 < l) { + result.append(QChar(ushort((_fromHex(str.at(i + 1)) << 12) | (_fromHex(str.at(i + 2)) << 8) | (_fromHex(str.at(i + 3)) << 4) | _fromHex(str.at(i + 4))))); + i += 4; + } else { + result.append(ch); + } + } + return result; + } +} + void Application::socketConnected() { DEBUG_LOG(("Application Info: socket connected, this is not the first application instance, sending show command..")); closing = true; - socket.write("CMD:show;"); + QString commands; + const QStringList &lst(cSendPaths()); + for (QStringList::const_iterator i = lst.cbegin(), e = lst.cend(); i != e; ++i) { + commands += qsl("SEND:") + _escapeTo7bit(*i) + ';'; + } + commands += qsl("CMD:show;"); + DEBUG_LOG(("Application Info: writing commands %1").arg(commands)); + socket.write(commands.toLocal8Bit()); } void Application::socketWritten(qint64/* bytes*/) { @@ -482,7 +535,7 @@ void Application::socketError(QLocalSocket::LocalSocketError e) { psCheckLocalSocket(serverName); if (!server.listen(serverName)) { - DEBUG_LOG(("Application Error: failed to start listening to %1 server").arg(serverName)); + DEBUG_LOG(("Application Error: failed to start listening to %1 server, error %2").arg(serverName).arg(int(server.serverError()))); return App::quit(); } @@ -551,10 +604,11 @@ void Application::newInstanceConnected() { } void Application::readClients() { + QStringList toSend; for (ClientSockets::iterator i = clients.begin(), e = clients.end(); i != e; ++i) { i->second.append(i->first->readAll()); if (i->second.size()) { - QString cmds(i->second); + QString cmds(QString::fromLocal8Bit(i->second)); int32 from = 0, l = cmds.length(); for (int32 to = cmds.indexOf(QChar(';'), from); to >= from; to = (from < l) ? cmds.indexOf(QChar(';'), from) : -1) { QStringRef cmd(&cmds, from, to - from); @@ -562,6 +616,10 @@ void Application::readClients() { execExternal(cmds.mid(from + 4, to - from - 4)); QByteArray response(QString("RES:%1;").arg(QCoreApplication::applicationPid()).toUtf8()); i->first->write(response.data(), response.size()); + } else if (cmd.indexOf("SEND:") == 0) { + if (cSendPaths().isEmpty()) { + toSend.append(_escapeFrom7bit(cmds.mid(from + 5, to - from - 5))); + } } else { LOG(("Application Error: unknown command %1 passed in local socket").arg(QString(cmd.constData(), cmd.length()))); } @@ -572,6 +630,16 @@ void Application::readClients() { } } } + if (!toSend.isEmpty()) { + QStringList paths(cSendPaths()); + paths.append(toSend); + cSetSendPaths(paths); + } + if (!cSendPaths().isEmpty()) { + if (App::wnd()) { + App::wnd()->sendPaths(); + } + } } void Application::removeClients() { diff --git a/Telegram/SourceFiles/art/sprite.png b/Telegram/SourceFiles/art/sprite.png index 2f5830726de430db6030cf19bc73560fcd4c68bb..d628343ba2f044277ac5b07fa2fa7b515d987c38 100644 GIT binary patch literal 30461 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

nNz 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 literal 29090 zcmX_n1yoe;6X?>?iXZ}lB7*eNNO#u)OGqst-Q6uHEz-U8($d`}Esb;tNJ}go@ACV< z_s-#--TkQ* z8i@1G0rd1q^(SiQI~o+wrJtZ6)7uWLHV}%(B<>SXhf-Px+p8}RguCJ?dME*(Q94{= zKPWs2AO?wgMT-}JM5R#zGLq@kL2z`C;gE^(1_;6eGJNm9H3az0qMq5lc2z3 zL2sU$ew74S2!Kk*G{dDp+H4?VGld>L&>RbhO-{>97WAVY)G_)Lw+i$G55%VWHG~0# z?hP{hNkiiS`kVqHmOjxEJZ36?y3Gi1Dy2%W@g1L3pzaeEM=UKZRx0{YIZ`HK9wStv zR8iJ0&lEC_KrX`7(_s(@9!mmHdwSDyJ$`f5j0Aty0$9#BeY`k&5IacBz3IeUU z_>JE)gR98{1TX_^?{jDm(Jc&c;jR}EW>tiuwIKM;yw<71BX6X#zcv2;z4_eF*3LHxDU6K zlW%+Ej2pEXi8oY<9HS*uBTqT<--d~QXXvG!c=)uw!hC}!yuuCoVI_>>9m|5yH$gjB zc>h$}rDOd91UhN9@0_B4f)-#Ayf)_ka3pdk1E&QAn8|&21c3}B-?2gmt3~>sfIyP) zK*k?p6la|;nL99Fbz&@b;@%qad=`J#(^ZieenDO%wfuG$rJcx>FXNDB|6l zfv?1>Zxv#>W!crjp>H%~DNlr)Q2D;-NjJp``~-0X-G;Wvu*U~hsR~Wu)k-uXc*#FY z=ivVO_1&#ro28gsCJ(UxVVnIVdK4u0zWRicOY9Z{GB$NR=_sB)Eg&4(Cdn;GEiNo8 z{<<_hTS}l(PWq)aF|;G|H|a0hnL8eSC`oYtS95x@w3k>f&B@$fRwOGHkWEIA^+VZs z+4qvSQwUS+HMAM)7=1`$2XPYQ6X+5s7{Sn@;)3GkVqA?=jUi}Ek%78zxwHnS`bH7< zRAPxnaRy{hokHEbNC5Gr*c@RG70L7aco&BGv0JfQMIuiXUJ2W1>3f4~LRRg;Ol^%{ z66zYr-9uM7^4rIau{rsUvN=MixG0-Xf>WMTt6J?e-b@5*BiZpX-9;IDo4zpV)GvIQ z_=sVhfuev*v607m7mkMzTUnmLjBg<;$8p_2 zT~R&RkIgyEh4MPvI$tAmV^Z__-tz9lxYjt|Cf}$#AuRkazX?hxbtwIuYn+JrHTjoQ zN7D~Qe0$FlcfjV_V^7ECI5+B^4>9yuW~ir4%9xXyH#!HOevJrI2pVEd5@t=K=v(^P z`bXXc>8QWvHG#}Xt4`}WKrB=o@*G+oep$>K=E`Eo{K)D2tNW+Ks_N#r2yRvaoApYm zpNfP^pn2^!4cG)6t5r7pqdwog_`>LjRQO!jDQiP`Ly&iwWBDU&n75<;XZ?^$w|yoo zWJSWC=Hb(W*TXodFn|`t94#zREKnEq=F-cDx;i2SCYJguFfEoYXxCXt;fo?xB4++XQN^#yAL9RsJ!M3^h@?Gv?oJzxo zW&RdC&NKdXPC}27O8G>VQOWE3eryZ3=eu6ceCEx@&+m)AwJ72%E~W8jzDRX@W6L4L z-^w2RJ@%WUcrmq7T%Gx@`Ied6P^oE1)qSsBL_L@)0c*gz`dcZ+M;4qq@q)il9r{^D ztSWO;EwlEKutC1Wl1!$NgW>AIg>Ss+M_CUCL|sH{-|O;26|`6=wYOSJt@x@09X%It zHb^j-LNzf<1slTa7;UFjN)EJ=%KcjDyp*g14LS#dI%`p^_i#0EHbZ>(7H1FiRkXn$ zS89!}Lo+CZNy5U*i5EzdNc`vM7dr^E*M4 zaposukr@dYzJ9D%i-rq1b>7=1qbpW~_D4-mUDhU~9wN2{S_DS*P8wWJsunh%Yc*)4 zR`A1YcU^V`@8c#_`kT|6Q_CCmtQ!x#T5G+{E_Ns~c}JJdT0M_nJj_gI@(C@qo_g6| z^j;uWUM%@Jy}uhBYX0s1{;;e?r3H2-dLZ^&V(H7Yi0=L3+|i=HRfjwLbbL|f0y89d z>^>G5Lnwg}lM*u&iXXa{`9YYEZ(YRcZs)d8V(ilxT_)*$&izn1=?k#m<@Da{=y>vY zcG5{wT)VAL{@rfJ9$CdgUsoSh+kgiryTO^}%|WO8qC4eL?h2vGAD=h=^bZzSl}Pnp zg*S0zad8jmXvwFyCY&q_K)(6LL{?1+1oEN}`*idEHs7}M2O0&~5Fp>B@7lZ*^jb#=9K>EqShOwrof`uFfq+TES^?}7k7e=<5WhzcbkKwdN| z$Wlv-)Htj)oG~!$@%KcXpaHXh;8R^ai&^^|=|+OBQcC-=xqs)8_!Y`J$Jg;BkH4aS zg`Q4u|45+t%VT4_ycOg)iAK7)Gzsqu-Z7Boo&mFpf!%tZAUp|nbGn0>6m&n()@>Y9 za~|69u19;J3HML;Q)X@N9#4l#EiPF0#C4Z^5U39=VNy=6L$qMjwzl5gWMpKR9HWx6 z@Cyj^&o3;rXYFGhz?i@;4+@)&3%N^)!$=|w?(rKlqSj9jGT)UT{`X%LR$3mSim_#24U6Ej z1oED@mIM`HdNKB@Z@#XrM# z>{rv$qi1?Ftpk-EAK2JHWtzBYBbZ;hQF6zhgh>)TFTM)5eD_N2I9V}>{HWFmV@lRS zx{HehZbmejj_Nw`r^jAKOBIqOB-!1|3kI)WsB8YTJ#4{n_3|ROyEs2}Z`9LJFNol&QrZM>kOG`RDJ(0fW_kCn;E;M!Vl zk5&Ub0)jq_-F9eZvk8zs8o!h>ox#2HNO$k|mH>;Fs-L=MVorwY-sTG8hf8a#r&=+}+I# zo)Qs;m2}^{rI`5rQHdB@GK~|S^J``0^~pAQ6efs`n>*pxD@Ob*5x*~t;9KF#I*)Ay z^*{y`ZeCHPZAKA%7^tAt{o#M>&pmDC#WFYq9NlkDGW(`PsP=U`yP53F^@!M~hy+`lM_|U9!#6)TTK7(*R*)8agkSQ-+<%v#|{OaL5 zQDq;I`xG)zi;Zv`O%Z1Q^wvQ-?BerGOFL!1awBE(&KKA{hqYofl$n zP(jLoV;}7o<{RZ#PAr9ientET8)2#@U}s`2*Ygs#YB8Sg{uJW;a>_9B_N}=X(*Mw| zo`N+A7x+^ye6Cy==i_#QGIigpbgN$$ElOtYlWUL#L9sq@R3b!hB~!(iYc(v{J^ZwU z2vHI0v69x+)vY>w_|euD4d{JoSy}9ua(Qr5!&+xOIX?PN^bHxxA%})m^eN^*@<y(uC2=9`Yz5~dgWU3?X2^MSF@_by>R;C z-+RbtRpRN@V-G)*`h^FT@&I`Wc^diL#>Pf$z!iPz4vdPzhm}@TOvYBjo0jZsY;BEf zZSl>j$rKb6e(ktuYikGSlu4KS8FX=n=QQcFYRPvfnCeei%ql;bQmEoaHO5&#eZ^AF zY-ff)l~Z)#ug!&Q%k|hI4$5`d^>rSf3JdZm-*#(mS5ln{nBAkqB>$U%0Ni@MhWdX2FgX;?``z_Dx?AmFJ}?8(of)1{5a z+-(H))6Cyw#a>x`{JbP(`f5u3`O)Hw+szLSs~v#>;DNK7LC&Q}k?2h?fUUfkCQZR9 zBE|S#t@r+>6i{;YheqkC|bbuu@v$A#>vWXT>ij_=@mrNTQ8KL0f;_~4ZPww>0 z&yxcJ|MBC;x05mDVi9mr2iG*o&GS~bF8KM&SLhvFJqLO$@orkuVl1irjW32s^Bi{n zC`Q6U+q6aV>BAFPAUkWqLc@jZ`uh4vF#sZb+ybsv1c%VSNgAS#8~FPZ7cy<-Iw&Gg zbl;MfW1hMjepe*QX9m%aC%vd+Iq<#})~ycE{aDm~XpgBxhKB4}4U74biiO(-J04~r zR?g&-Zq8JsyLp|xr6ke8vxW3ps0N7i*l_q@SifLYscpzbZp8KyAOMsgkCCE?Sp>xi zlSHl5#*39j&xSn7h9t+q3!3wHPuHCq?Fcc&8EgoW9n9#gwMEX^GQ|k~x)Jd+z}aC5OJ>?A2$9xMa3Ag7ub_Vk~MGb-o|cxNNo} zq1tDIt2T!2Bq#~;TJ%JbYB1dS#^`?>SbeoCrx^+Rro9b;#b8X?jAl>3`CkzL7JU_Z z&7VQQm=GS28aNgq0x!}D$XQb`?Y)<*c>Wv_6oT)QnExBA5`RHSgIrH5yUU!F@wg&N z$A_&IXQ$X%i}g?ioqy3mE}?4W;ffsJjAb;k?1WUg{V4Km^Q(Kp${vzHYA3_YHetp8 zKA!3@ZNv=F81dY3QMx!&^r?x736=PSgjQ8m)$xz2s@bIo#9wA6Chy#unzQGPcvg%e zV6MEPF0LdUD5MqSH`7?N%`T)})`zjpGT%W4|KU6NR`7P>;fN0ZYp^+uK@&t|Of z?Mk5=aho`cn)y8{3ulIMW!h%~pT;)6ApAic{@j)hzTskb&8O#q^Ms5FdZ5;pus`nUMuc>qz=wF9NI*B4yr~+grG=2q4H+7th)B? z>_b!3T`H@cObJ*13~haVV4pWxNz6v%&!E}A!^SkWh4Xmz)z;!naTcN39qrt#aEp1o zMi^@$?;vWNH`XM6Ar^Tq<$4GSvkuQ{PK(izif3S!zUG>G{z=W9{zFo8KmvT)uS?A! zIJHjW-h(1|z@H)O?c&O_G0hndb|sfI8*KKzWIaq65-PGw8R);f&&%74y zho(zqKSk|}Fen;t!!BCJ8wkQ?Iv@EOp>6;&`+~Jn7Q4}hBc<~&nw_r%P+>_zLNXCS z3Vus^0=d9JRCcAvj&Y6eea1i*1tz2ipY=sB`cy#!$6#u!+hzO?d73YI7ac1mn&~^x z3~h(-kyZEr9mBiBY!&vM!E>6I_Dm_=o$?ww56hfl{mRc1PbenC!*MKujB%a`j!8p` zMai!oNx~dZ8rVBgY*(19wl`SqziM+;+aDKjop-1eT)7(@eD$Mkc2I+jhLzoT@4( z=FEC(Qud_?_{2Yq;H2V%vSYpX?+_+^N{c#0gBGt!p=*6OwB;u6|% z6c;l}q9wFtiFAz5D;pGX&E6ljKCvpV`39e1nB~CS8A*aRltTme6gDq4%Wx|2DcIZo zd}T1_N;D{1z}4nS{|451^O4O+**sLzI>>k+9AC>PSq;RqM0~i;=pa!fNK+B>t3^sw z$s{+sw73}Ois;6K{80F6<_Urfvle2}S(XH~j0grc$yN+hG5EF?kwkoH+Drvli*}tL zHVa!w8k1`Sy~T)i@^mU&$x^3FC;D_1ewrQQ;R*_fzZnicm44#A zkac^L&pur`w|3@{dl-s?WtC-y&zqUn%R;I_hJsvAj|xcbBlQ3GZTa=|>cSHQ`qXDp z->Q{lHR5ux`f3vqS=*@EdLxsfu#g21LNIv&FL~9heCRFuRD;-^#s!gGYo4MoE2E=t7~Tb!#rHw7 zsC=#6oEElu%5S?`XkPhe=|z67OIY?fhG-r3%{2{MrCi(tckd`88jv|0I}P_icq(ptYYyrR2T_<8@&{>lh(z0O=t%i(H_fx8Qi=t26uHrX zCc%#O=|RUkjF0jLS=#HH&rlhGG7fp!l4Cz*3^6e=^9y2PZCo6jOyzU#6A!@{2yyLS zq*obL%=S*6=-tOOYRe~ftXiw5rl*jFbcQceB4YmIyZ?~lXw*x6Qx@(WaqkMw64kp? zabc`!-Abn6k%8A;zi?0z@UE~Csybp~fg2^TJ4UxI=LOsPJ4cR+*x5bTOCCbcR;t|b z%YN+O>&clvVnW*4J?5ihfwVkW`&Lech90le;YWlFQ9G|%6S$<*aY4UI>g>U?8uXl) zyQjhEQ+glcai()=;lN2$S_HC2xU1E6lF;ntRnZp|6qG#LnnTZMn3f}gu&cje4bOSO z5YEx0S6(55fpk~^yf}o8k~iU}!#9SmSUTEWvk|uPW};<|-7I(oO#cFZ+ug(}2x=cn z+gFx%9H1j;*R%3MPVHpAha8Om95RV-Rcfj3y?L}80rx|ez>t^0IuOV|%l4fBoc0Bk z{y7PJdSqQ=V`*4a}(5rNkxgwwA_2H;s47dO9wWQpoPzpE2RN`51egHPC3EL^z~u zXA{2S(qSv0j+(h(-+re)UT$9f`#vZK;nyz3@Ox$^@yJWL@RX-wcJJ7$mFi3PaS?#D zNMm^LW_V-|OTN>hgBwBC2bP{fWu>)d662Pc=73lXinD@ReeCOOHVwLl1THGbUVceK z0VKY1HY6IemmDRbrZi|*BwWSBiw4|p4HtHK3MlL;1_p-a!>PU>o_e*K_{~K(E*&08q9+L1k9~NB zHAK?T2o2pE8(jyhC~qi8#l6%br=FDQgWA@Z48;ipz6y3QyOC-v*9VI$8A?NkPB`U! zk*}YjHZo;0K@8;;kckys{13F_#Aik|L z92n(bqHHTYtdZ}u`{_k9HHrV)ZapSy=)wPJGGEPR#F?GBUfxR4)>zx2GFpDjl87Rm zh8mG$ObrPLjaI@1p@8RUz`?=U2WX@KE?mEQft~)(AY>JA?p?r^>2Rz!sEEj+Z=T&- zg40`d9=W~0Oa1}3nq9o?qQxLc9I7V9(NlldIf;tFrBFi6u3uwk^M1eZnL2+q%-%g4 zt{6n2@QKWq^8Pg}7{6WL>@(^_RqfzwoSzPeKIawRO61g9fx~-PaIon~X)peE-esY} z_k$KS5ygBj&H@eT$ic+QodTjk^CHCE6ENPE0DZQrEh;3`^w}Dx7l5*S z!W1bkO3ShUmqz2HOgJhJ=*b!d6ZYk}m?X4zzxLM%ddlV$jlmkMZI|5B@WL>nFeTfqu&CFj# zuv<7fx+as(M~`o|@&jh3-TU+Qt-L@F{n2-Ljd~>R!P_&rGlvE>0gP1)L$`+Gk%;Qc zv#YDf`vZS}IqZy;AYwpi^-#E974LMoj0IRN<@_5V=O#!TtbUQz_@;X$>$wr64ll%L z8f&+sl!{gWp6D(InW62x;-TJ^A=a+qQ`5930ny=6G*rrd)|KbDsefpY!y3c|RDuuN z>K#-)Y$p?i1Vpu`1K3nmY2W*?Cyqv+I_u}boTWK3dHA4&=+lF@P~@nwa((Le>k<%z z!?K6lT$1deS>@W652zs9Pw)KWF6Y^d-B~$~(PL>F{5VJ8*6_>bA*ni`!m;L(+a#%*}nhzP=s+uB1z! z`>ah=#66+_ZBhuMczmsoQezNMsJlkKTYpnyMQhDBllH;$g5~oVRvIzrr2IV%r(Njf zeB2@J{Cr_Y@evLh<|-CA9k_-gJDu*}k@f3pXR^DrhgxMct$!XOVvzPeB@qN{!!9_L zb)VoBP}C|(9}Y+zOk_s5y1E{5^YG+URzAbW$4>;Xk-J_&B9V;3Sr7SoAnw=EqS^Gt z3!6?$R0nmdTMi$}bLqpyRH4;?h33*1cWxZt_Sw}xWHpFk1eh#EG~`Pr);3%P;bjSP z1~*v>O(~Ql^OolLNj?KTV%}@})@N@Yy zW{Jj2itRWV0_fjJp*Y?JHsS_%Dl{}yP2@xS=B&wGH9YH%427G&Kwv?lnP%z5;-cL} zJwrJ8zXhR9-2Yn%T*s`{YL3-_*fYegr4mYdR4SolIC{^GQN~|sUX^&8Im*B3nGJvc zZ-6t$R?(fx{fA^IMRN6JPZ;*?b=51Ty-F1nkZ5oGGkX5<9eLgr0Gq%Eu8_EoF-pXfBO@ae!R$hh^};t$iZidfhj3hIVSj}GmSq*r zu4`{~Ly0_UieEDokN&MD#4ZWO+_{-5|X3}~E;IMV`#qn6?a+Fbi zoffLp6d#9iu1DUNwePZhz6&CPTnHn?lKm_TwY((QfcU7P;OpCJB@#f+I1#cldS`%p zn1C6)i}dOjq#BED5XA^^s-!J}`)#!lXR&08Wx0^4m0?f&IvXNo|LJt&2|skA3v0aV zW1$@n-8^kLk9?BFClt7@iq`V103>K&*uB~74jx_i0@B)t8NVe=6m9~DiErB#$cnAN zNBCiEcW)c3|1B_W4ia}lmnFL;Tm&={=gwmwhz*`q*;pmrJE z;Ng|Qs?x@4k)s~$-7?u$|5HE*Br4JUosD0$7bh8wQ(a4Hf}XP4uFm9;`E0dtnfPzS zkdv;4t*RA>-4$XAfmZu%6&^F|!R^y_64c3o3?pCnM-FUnf7$7unw@R0$r5vI)T{r} z#r{#zl;iiq6K;EQpZ1J}g$+y+Pl1ujQ%p;g)0fk(3xLR*BzuYbhdc>X+!F=a~!5(Gu`$&CIsDqIBiNcKdT zn(+uDV&^MG3X$IFGWz{y&dc{$E*9zBYf-{1cKn>dX`>39C$H>SQu@Cc(d?3PJ%{%N z0evNIcxY$5a#(5}X--f9n%x|V8;1vuVLMQ{w7@jFzFA#Zw|uOFd$lfS)3;7uYF!0u z-5wRe=A04B01x+spRU<2r}e;EIiuT!_-ciEzh$rZms+zIfGvte?;ID@WSLER;{#F! z5dz&_(*&9QZw<-WC|CVO9;o*HU_dtt0d%7Zd%u0Tc6Z#)#;lK(!V=bf+s(4QePNb9 zw133ZfC!j59Hd8N|BA#?N3}YEUuSER$7_)j0sPiRwYr`MI&ny1DfSiv`x}D15n`!3 zH(T3-is$nTB*m@#HIZp!3KxdMH&SMP=F_FzTaRer_no$7P+6BI6G7BxBzzh4-ugGO z(ZbCf!Tt?q?rN9jI5_09FWs za6lUh1U}_1nH|Z7KDqKJ-Aw}Jz#gRe>y%sO&!;LJ&;R61)xR~8SHb!$o)pm3|7fYP zA*;!vi#i-J1_xe?uwO2vClBhuRO=e%ddXWvh^rQ4d}ti2-*;?9Yy=-3BS>(z{&U)x zoLtYdVFqV$*snVvD+dRWzn!fSSV}e{PjczYM0cG$=nY1t4CLtZFm>Qt1JnN=YIhgK zuRXOa^f-G5C~q~~rKqJFki;9r+1qJfd|dQl`r}VY)awSmsJr(l35VI&M=tY$XJg`J z|DHoGo*_U#Y7YBEW{aPs8?6VvpyY{@G=~KbE_=f#bQO0JZXI^i(5HN#FoF=a%C`Zz zJtNy&vX{MgBRbmkf^z<1&pm@D11;Iyyw}`;ct}n8%rxNvv%NY8DwcnJLOyvnuZF|8 zq<*K`ipiUmLF4E~AR_=IChC)?)URh-XWby1HyI?{a`x=BQ2{uhAAAggzjBr?k~zwm zJC*Y7=oN*_^J41=fk4C(Lpp|JJyejj7vlXw*r&vhbxQMEYeIIR5I#|+W8ArtG;&0t z_)sYyXgA`;Zy*n3B6$by5ERjds<39yU7?sAG?w{fCYfgt=XwndjqKv$@Rntow>M!2hHGlUcR!aRo$W9AC#E0Ci6!<7V7^OFzy^l0Lx9yLx zYWHvXdhs-Pz?(;3S0RS<)X%pi*?T2IYSEr8d0*ujWWxfj34gI$eZy>PG4m@{YHc#7 zz3F;B4SeeZqEmK@0ujl%pB7De+SYG)LN#`H?|bOnA8{q(cZ_#I&{w43FD@Eo)NIx0 zK(bN{{lk(cV#qX3U)>oo%q_0(cLt#`O0kA>C~Lu-TM*|r0HrG1R*vx-Qj1yaqyO4_ z41YX)4Is}>;T8J8Y1GBbI^gi!nFqXn!;PayR8hcOA0N~=~s0AuexYqYrxZ=8lzmswLb!cue=ZO@n2Q$^0VW^>6-Q!;Y z8!kXTp1LIX%o1->tFFbXpU)h zra(bhXu}eQY67V**cr8-e?scz-bVZ-~uvbxBs_bGt;~>`(UN0Sasekk~x@PC! zN)qY6BOmVj;EMCRi~9l$!I|>z)7FR&j?+(ON-=`3@&C@~%{i!EotPg9K#l~jw>p6> zbsvIFj;M7O0dyvgZg+cXZ+w3~h*RIJ9vk0}`(o{s7X{2qsH7YErw7QBqaZs1(cGzg zx66Sin_u7-yw345J|68~x%%SsF<#zuo_J#_Uxd$K_~F>^3)fSPL(WLf6rqCvU|MKI zPH`iU>rHf~!}8T$eS0PoT)IhR&@12EBTH#pxj+cC=bN%y_C23q!pSkYJ&_Hu(Cxob zAKiisvk4|=Wnt7n2oHbq+Xu9QI>^i>LNjG_lp3^*;*b zDPd~+tpuMHzjUP)tY1!3_n%Mkb{5q`cOlSZ&dZ{`-t=z!>U(f(e8`DD@Ok6VC12|q z1RK$aw!3lkLR#WX1V-QYyUF0^3t_?Nw49d9qolDfkTf}}aFEScqTEtVCLB$d9XI-TIZ-uN}(uhXb zVp3!N&VngYw3xIcCrAfU(wp=f_pUeJTRae(9>hXWs zV^!3X5LKcoC^ylgPj?1r+yksba&eJrAfax6P|RB z2fC+GY1Kb&zhFTCZLRve=hKFY_JRW53Or(uut>#xt7@=7|C~l3^4tG`O8-=AG~IUd zuRCdMR%TGfcF01YXk@pe1fn<8#G z{67l1`{)SnwxFN&rk;;&F%^J`s|Y#5J^Qg;Qebx~1;mCx8-)O>9%Wetm+s~w1#*M4 zfr-o>FGNiHDdG4;K~ulEZ~OL1!j5eB-RDzC^%5Y{tT#ofANPx1oILoh1f|MDfk4Lr zBvY1kVo{-%f^e$GNrH@i5q|T^wnA$ct^(=we55QRJa@kB#^U;wDNwHclmgz{<(OzkU)-rbFF5 z_t_15-3KE?>Tg_72^_~%>WPe(<&PJizn{+p8^aXb#5Vuf6~B(7_KzmK>dsDiQn2%X z!O$ZXgr<230UeiAh;)T8Z2&zTRO2SL)(eAk831P)Y(u{0lLyl(`h<-LwN8(TNzi|r z{|96sK)(J6klrew-03Z+f16DJ*E8FIhBzF}Jt6>L_E3anG9=(8Q+*J16W^5Be9*qQ zjjJhQE>ObAO$Crhl>kz_{M63RY)Tl29gE|RWMxIN_jCSYq1RWA($kq(uHbj)@A-$v zdUBv_#bJi2NAS?DDgQu5OGwIM*3%!T!P7j$>G8z^H4${Ny=`{?JOu4Pb8}8QNlHAw z^Po$P1qF8*!y@&6Ngf7fCh_3p3gJ@;Oj<-;TuUXlVFafasE9SMf}-6bj_}|0rq9bq zRoT;|hnngtE$YfGNxU}Z&RPoMfGvinPU-)+vkAqa&nwoz&YT$+5V5OwNH%5aQrmUFzP?AWQd z%KR)(Vs7^4++r2eSs#06hvKF+ZB#|U37><2%oy(GJk{QOpD_oPR%)5`ygO@cOKj!m z2hK%-^LL0mpOxhjo&>-@r*Q&o`(12*ZD6{PMxm>0-Qv)=n8~tqQruty?eVJ4*+F{v zZ8K=z=q`?qp9W7>Nk&c;-;z77{>c+65YiDk7@F3jQQMEqEzDYlkP0yb6ll? z)w2r0TVig}DSu8<=>!2Gt~ z-rhP3T*#3jiUyxPnLcbyx*N9{$vBT5bE=e~kWyV%9L?tlzr?@}lqcAsft!&{jZp$- zd(VcDzWz85QQWEozi@6(F4OQ0S^f|zwCJI~L7U<&yg#Oc^3sY;L- z(qpQ@7l;VDp<4sYT4(6+=wIt=l%p3wp6QJ;oyRuv0x_0RdYxvomBGrKYIe?nxQm-; z!n2oa1<;*05ani23?_vWg-QCo&uuu*s>a?e)e-rTBzEwUq>{sc6Nz^d1I)Y~ctbds zUgGu1M3Xva4bUOyO>GJI8%KOOFKOV>-EK^<{k~;b)D!?^)2uZdk62~Q9 zTUS<4sOf96jeGo;;Xo&372J>FJ1?I+ro*$v>wAe>y}v(CwbfPX&2kzH8lJ$2@W!D1 zx;4FZhinbBGltSN>%Llo)qccVSj@^JVv zj<(hvCxP0jtO66_7QDIpTM2Vx*G3T|eS{}u{s%`&c-JrG!i8syC=Vmy1+)5gW17sf ze<`yzw-%}Wq*~tpN9Xy~fht&u5*KGO+#_n-^2bNP`*U295Q z1w-zczcjkWr#%T_tULF)1GhiU-!5o)S7LnhzMT+u{!?_t!;tZ~kMZ2JSsId#Py&2s zD9Mms-u9#jLs^6yer|8U@X~YL-&t?rM38}-SY=4Wm5eh0e3@Jnxp^hYzpj%r zh1~vt5TW@WHFOXd{ioN%u8`cav*yLjvPWNsJ6^4?jD?7e&M>RR=XAbCGH;0}0v*ur z7c~0L2)^`Sc^Q+3Po7+OSOr^qcdt)J^Ama3mx$R)W(Xy{Sqrrf>_fb7`w}Np_bN7l z99H$Q?b-6$5*67C_%|oYKwhR)gP73V$sM;#`_os?m{K?NH{HDjM>)9ob3qq3#D>jbbE}wqHa&^fk5wv6&EL7f@7$)Ol zU}U%58Eppt7`Nyd9>xQTrEL8C;lM<$cG*li7IIgf0!QXPU>l?VpYh&v`nGExx?xIB ztX*IRtEs7}!?+Tnt{$A3NtHaZwa+R~a@v*&7Aldw%KBKIW;L8N%U0ry5Vr=ij;43o zllzCzEOw(D18^+Vpqm&7o-}+K8X9^q7%Of7?`vu*`S8fdCXnETVhWD`8`7_MP>+f+ zbSPr57oE1MrDtJTLS82&C3PFJebcyqDPH-*g_~3?BL((%G->vq2m8@ZX`l|*^^0f+ z!i}&{Sk9-Dcd5i04b1JICnYL2o?Ng|ZQh|GPdE7pt$;TYfFVeE1qF6Cwg7xevA7kW}5@GGv2MbNnR<>iRM+Bxv&Doyjyr0S`?yJ21;!t|OmggnEgNYnWU^3)L z0mfgcy~R&YPw5#L#N_1U)P(X~T3&M|Qr)Jy`)fmDrbW_8;W}lS=|bK-%m`Xq+TRNd zuBmrBKAo#kReiI9R51ccqWU}w#8;e)+wDE{>#s*YAV|$eR{<(BNndsUb5fYQaom=7 z`0V|1xWwM1Zz9ea9vvAOFz_j-sfipIr8PR@6%xXyiwn!l%>29!ojmqaOcv-emX{F@ zu;NMU2ENpZj^uCT-aY0mEsUCV!`65-Qni%tose8p`>zQpkG^Gj!=%Mb!&3Z`d2YON zHFAtyEIk8-=&cDet@*-Nc<#vWLi>Oh2Yh^dNDBZ`Us6y6>y#~X_v`5EM*#ys;)RpX z9*aVc2SUN5wtu&W$7&Dn{DANsbr-jJOq@OnU2tmRaoUueoVz%2J{o?BsI4aT!KDJ! zWih#O8 zjOdbFh8ItgyQGo=cgEQmjLFi6dt4tfQyV1};k)#$*b=R1o=sMyVv_s7K8fqBE$bBi z!l^y+83fG4c>MAK<+k8h>#rUndTfp`LlQ9yykk zl>w^pO%|vZ++kX=A89rIGxe{iIv9aCu%xh@tR(qpE6Hc`M)y|lSsGfk9X>{sJAW5P|zz0)>>z1hXx~bGZaC>{(@&48`UBI0H z5F|?S%*;&JCyq|LdJ|(~V=epm{*COK8e(927%1Oi?*3ON=}KxX@~?VJtQW0R*jie7 zq1nMp;F#Z&v)OPGmX4$(d%R&oR))9^t`N95+}ZUctGK%*V37pzMEkXykGhu`7CX z#1Icp!FY4YJPWTKAby^;U2A{84RNwn8ICY4>mK%qhM$YjT~9l^R=m_?cJ93RSZn*& z2^V_kjEA{FV~JL)1&b*JzwQK(n;JC;0QgEi@bT3eRo`S%jG^Ii)lr+d^nJi1EzL0~ zv1NoC1#T^i$GX5B%8Z>NB(T+x5DX|33K*!dl@%kLR7X|y8C%WK{yuu#fTX(m^L;k~ zK#PHQW0Dok)UfZ-rvx#9+@wJ7vP-6z+p1=c_(&7y{;7(mu-*3GD{cP^1t3%$k|#JA zce*T9S{}n9`G<~#$m|SwlU|fX0|_SoW2>nqfWKktGvL}EH5o8qz^p9dVO;@EwYn)uvb-6b1O}z zcH!XV%a{K~@_{3KhgtO%(P(p1Q&r}iNE;e`28^5u@w}~HDE>J-Rk0x8c0yY$|0pTE zWy(WzBq8BmYjmddm8DdxHMA?+yU1RXtCgxuhD?R8H3|5~?cndGq%v!Y2=-UH`r8k4 zJDy7Be=}?QGjy45Yah~ifT8o7{0xm7GgA_(ZIJ*IBw=&(F^TluipC0@^}KQjZ$(JhW_)f zOup%@37ju272o-D)8;vq>q@xBevbwOvp>y*txu56iT%FK`G2{Jd7HBOp*T2s?`|*> z<^NA%ZvqbG8~u$VON*scDv?NJ>{%oG7LmbNlBG~FvPIeVP$Wu|tt>GNLb8@UNkq1h zorGi^+t`=?dG!6g*Z;lV_qyJ$xiHT>Gjl)Bec$JN&gY!-3BPyW(=5uIDPfJ*&CI+b z$;ZURfK?%6XD_zkJM1u!b=0&@XyV*OywW4@9^u^G9qq;zQ~rC&Fwv`U zHRO%wq!zMl^)aDemb)u9+cWOaRTz^PDiXv<8rIgjh61eJOC`In7&6V6?m^7?x9oQ~{RM+tFM zd*|G;_Zvxc*sFwv{tOM|CJ8KDAD-0-MZ8#_iM?s{~d>3Jcc5jQGawfQPBt zT|bapDLu5p4NEOp@KUT;3L_KKCiX&G>46Ys%T`>{XvXdY6dS?rsS@M>Cb1l%rRShi0dI%M;Jsq|-`7tbbYCt)h==MQo_-|F2w%b9J~@t_ zhOh0HGVN%{Z~SQC%hL2s#>#b4tVV1HRXkqq9&DoQ5$_Y0S-HLA`ff^ohD z!#7QQ*sj|(R3&?tLL})+5VCzM+ub)#oiw*&h{umu_T^vw-f{^IUJ#CFWI*%G*XZl4JNRu3%J8S6 zZ^7fuNEkXETX$0+>uSyl!*)n$l|jA*!8;^R^>$Iu%aOV2_qGY1X)|?$MzwoH5BYG! z)f?Bk)p0ioaTaAVtt2@+lY-{@`>MseKZyb-R6YL;dG~VY@Dp^xvjes|8@q%oE%@Zz z(n(7;b;9j=BV#rp9$t>mekdUQHRHHz*RIhHWCB%vFoa9^nWCMZ;b_)Z4WFF#e77wY zwKS(x=P@RatZh5X>(#@>my<4PcRml3QBWZ9&-lWPaQp5P0Vd(A z6NgUETOW4C`z?3k*F)w^6v-YXVLKtOf4EPkt|4(qlHoKR*BhoT1-@|_Cl&U%gnXvr zGK3`BbP|?p#QI(>w`C5w@u;cyb7#mv`PT46QSKtg$Qkv>vAU0)Mh_yHI>AgMkO|B* zo}m+yyGYks-Z*}LxEim|CuCL@@Z!abqFV`hUv_f%9Xv{R@$YlCNK93sja_-Kb!RNE zUsrO!Rbudmn)(b#PE`B9b#G2vV z?Y`VmB&2XO9veQj0iindIv}u3n(arPX$Bw)JRVP}vg>m>-Kno5@>xh_baBm zTGw-pF5sF1Mk-tGe4mQfFE35KU;SD*GtsNkA|E!R?M$+Of9Bh9hTZ83qmH$yUq$a+ zz+FEnrK(oVnr5>2HpL#hXy({@=W;hI+~L;1K|NiOlTV}4*)f12IOwYb0Z~X_nn!KW zlVP>0RlfTyMSOR4(IZCNH*j(`9Uvw2WQedv9*(H5O1<-;A#toJD|52XF=6tYT}Sbt z`1zEJJ^o*A-cSC{LQy$dIN(89lz-_}SjKGzgmgHCUB%tJnV~PxO+FCfCDfHJjH3r6pb#DJ(gk|K^o7#{&6UG00f=E=j{(Nx2U@qdRLF^8pBpt|?EtqPK<`krBuQ&7`7tD8m8g6goVBcqAv{WZy(e0u6 z%A4RG=H*}baLP_TFk$vANyD*<Q{AL4T%32eLL8@Y8AAV9>rT7UUa6-%5$2WeZCHL}F$9Y( z9U64S)&+chf6?JXo}jekn}<=n%Uf8#pr-98XOiGQriDKElR@B=Mto>Mw}eHIT*rq4 zQ?9%@JE8x+ODNFm(*`RQ_IK`jQ!{>M=IQTU>5fep2EwEqO1U#yk%eJgFC6^vLej8V z_J?%c4)wo}WuwNqOm!sNTojf#9-;rS2!)1&)_1bYQG_7;;{ zJpl>YXftm|B5Zf6S$|sF>4vR3psl|!BedPTH7|aOaiedURNmI+j=Fp8qTnBeU;af0 zC~@K)i$%Aw@;FuOA041spTGKEiGd&lNzwC^-Nql>U209vsuF5n72+ZkG`rt(bhNVP zFTtAiR@}MlP;D7gG*gN&{OorZ{jNoSpZVEw;$SabjOXxg+OE-s8e4H?o){%=W|~K4 zLJfd{Kffu)HQLi!`a>(~^z<|&F8G4OEz-}Xym*zAgq_^I{9{Z(`Th6YvF(?E*wTJc zS=mF-WC`7tpf6Bq!32*;^-&e)hYuyW#p6F^_=_dBlt)V@wrHvVp!7jngEdDqcA3=h z`bsFAGCc75wYK8wTO5i-6Iq>;XK`BY)S|LS^6ZLDA$Spym7SKQZi8#j?7a2xAq(>pYNH&9)QL+{Qgm=N`BL-gPoS6V zvFcm%{PWN`-(MJl^Y^QW^M9EVn~?;W%vnsOu_$u=oW~AAgR50S|G>Zi(q#Tfne%6N zw+dDCGkaR8h3PW}Uxt|gE&tHo2YuL_-gzK< zz`gS*Zy?Fw_OS(~qx%iquy#jCOIdzVZ-ca2l|oNH4BgkoLFHw8YBFKjC(GaIfvan$ zRQj`rI=iX&2qK9soD&93hW(x(pa3-W>MPd2@{}UYn&vot414e zV0ucCD_hDmloG8*yAdB(j~t6RFy|`#`i{R0J4qLVHbfnVimlInz2~40R~Gt;DJW9& z_?};R*fO1)m$%^++nzUh|0CDif|3&2^1(9;@NDQn9S*oQcA(!53MTyWTcc%Nq3Rle^jz-pmX9 zs;ji;T9(wN7upVcUOuDxDFZr?@pv(P`+zO-@L2q zQO2-3Dg3X8<*69dzB4MiN{@oHa=O0KW9Qojb`wsYK3%oz$;}Kvs!HvnbBg{knpE`3 zw!+N*&!3f5n-3VQcO@Yh@Tg(-qVK9f_K9R>D%@KFAtf}Sls<$*P46)|q1|*|!p=uU zsTf+V3wvi0bHo!{X1b*RZT!AvmC&Fy6CG+W(cHvjf3NHD zgCR$xw4z`68&Ev`+~?2b5!x*5d-;vZR$15<^Aqmh(F&$%obz;N*N|~S(<4LtSERjL zGI1YEjEQDzOD7Gn>gq z(&)+h(qA9VHvI3@8eE_zR<YZ&awz!b|Cn_yq1N?X?NYpH?$6beyX$DY{wV{$yC|jO5%uzD74j<;@&{{5 ziC!8$s6Q%2QdG-oJgfZ;5gx6iQO+Her=4BhHlyUIgV`;2A`6XX=B z!fbn|q=v5T>@p^`wonrq)ytBKx~IvN4@dqa1@F=+D-PBzz)Z|c^rh{Q*J_9P*!g;!(90#Q zHeAwlQbb094f)!o-r6i!$Cp7ymJ*5s(ODRHlsm2te@)2J_uesJ1P)t|mSi{riyPi{(-eOeYm?VhRd2( z9UL6iy-eVmSR=od@><~a*GukT#S`L6EHkFzviMVY30>Hc1rMO=ss3QWsC=_~3Q-X0 zKv>Sp<8uke)RdsT8io6c(Zvas^2UDOH_t@A3?0wP7TuF>;KtNjdd`l`B-it+i*A;T z)^Bl4sO1;Ot&T-#&y}8P&aQ4A?>_znGh=CK*#JC&&BgfqZ%?#&>N+~~zYHqGS7mfh zGsM3+Jh$SZNcO4}iPwh5Ems-MK)a5`R5|j)`rSLnfSGm;F%B=&6^+{}N2)d!$BR`z zXrzo$QH&)(Qc_>My9u)6E3b@(R!`P%g^Bq}4?)q9?^7;6%2Db~;l%~=IZMutE9V67 zdH<%~97U@BPQr|j))$At@4BZ@qSnYWC>FlXBo_X0xAwws->}*-zjgP_9{=JK7Q#s3 z<8u~wWb2$9bt6k4E4;!P(iA5St(R`TjawxL_>1*grjRy~%pYmII|NCpj$M62o+vjy zOXd74pbJa$r1JD~qRw62=$^!pCs+#h08XpcssQL46&9wqS8cSonVqHC z;Pb&u{x>}Tz2U+6mn|}%*i~U}4}IR2Kn)n8>YCr4<0b%h5MVhZC@3h}5^E~J0>$ef z)k1?wJD2j}EMVUyT1;$1L~`LvkAU2u2dY>w9jahgu;zfRx#yd8|oyu5HNG6H#$?AY%abxc^4q|b7ON; z4`^((>NjjLkn*=YJbK&{(HH1XZX88x9)`j*&wW#_f-;wDjA)iwcXP1bx3YbA>QcRO zh@mR@emQ;1!1I}Ot1rJV+)tFJAm-%>!EmX~Vj4z4p@oJmkURD}+|ah3o|9;NWXqkj z($d%ftsta&Ll{lsiyhtGsW~b>m#;ShBM+Wp^3IjJFUyE)TDV|&)Oq-B;)AkM(vb$SqhTAoKG- zizIYw*AP#Ca6l&!RHnK6-fW`WIMi9)ww9rs(WOo?vFJ zXnDmOZ|v~muepn-hUTu*Q#^2XJ`7xPRg45ZZ5?uk5{EtPu@Fe&!VY2nH>Z=eME_bI zTnb}$H*zIs*25;XomK@x>x-P{>xS<28Xkqa=-ZFBLl>J0!Y-}RtO0)TmMD4mbY?~d zAnVq6jgJ|YGj`6J^&qCQ<;kWHpYx;4 zUI}-ssk`-qbMKj7!iT}`S<6S=R$Q!BAUrH*2X4$3i|vze|5Q*=Fzw+L)A$HB&AdlN zz?lDk(}9m;WMIHoN{4$i267mqoZaK;-|-bX$=cOuHeO>webp|@^eO+1nO`CP`h7t? z?FgteNk~Wlp01iruWiWH)zu9K;i1+EQeP58o_mWyAme${>ZHRp5mPc^QYw$%2jeu4 zBY7*O)PZqeLk(69mi-CO@<|?a)X>#sf(0wh#t3~_KI5C8%FBK0cB`u7K}{)U(Rc4Q z5(5$rXj^CX2wU9$we{`bvo7IZ69VUvjbXA))s&ZTR>F}7Q!otrLsnK)RDl%G;6=#K z4^uo_LnIyp`ZlXa7ui)h?1cEw;zQ@qzwHXn1TvE(4*X{xcty!{IJOQAILS&k5X9az znGkzUO(}6T<=S6Kk<|Vxd;}!ES=Xb+?9IUt<9gaH$?6Z2S7(wfd!aqyPGN892afC@ zg@5++(*z4X{i{v|G%S>B-LBHwer~j8P1$90aUG@Ej@vkgv=;m`Aa5kcQ!6g8iT_4F zxwmSu!+h!>U1XIqsvt;9?-(rX@TsXO^UbxKoE#VOl%XZ(@qe@SK$m-EU(Lr`)Az7X z#MbNm{Tgo(8P3Q4da^4{5qE`KG#F6Zf6I4EXjr4v!1$Flt;E{RYUh-W36*;0TDr|6 z|Bc=7W?!`$N`Rfs4Yy;PqWiaFik^V%J}s4O>PEh5y|-s6~O{eMzDvS6vN{ z6UC3hug58nn*I8e4_U4M>#RLP2out@`W*QTa1Z}Jf>=ROZ1;2O^pI;v4j<(MKffWV zisUzM&Zl$~eE2~1L^Y_kR;j3@MEUGt?qfhCo@8Ttq{>wbi~yxXgL1BsHF!ZdOvufp z39Hk*fVH=8@9PV1Z`T9d1i@**RBDCoOVADZ@aVFU%n>wScn}6v54o6c*7())1Z*)Y zXe}N%$0`I;i>XFA(3ZjsU<}q9atx;GEOPH`0PBL1jXcHVP-wlC=9(8vM1A+6xA}=A z!W<2{-l~A923)~oRW6Wcev}Wfz**)eZCzdC<&ITpP=WbE1sd{bgKNW*Oa!j2li_^Q z25oR)Kms0QYUG#I)z$U=wx2&gGEBaG@f0%EyU4fwC6SN?KQ?C5=hr$m#tjGpyw_4m zCg|FQt8#(XTtMAON_Dk@Lv?0#H3u6b9r$6`#hy%9fG-j)oGcNdmoGnk_UzgFrPs!J zW}4W?9N&-CKsD#*ot*dIY!#;}sALET3f^*d7Wo~d2O68)%$la6WDP^E=cu8fzkh9!vmUs)iF3`sC;{=JFC4pc2>Xe}x}&m2g$3VnOhrZI z@P6vQv$G+lxuK0VO}#_OkTi!px|5SITsIU0?I(z;!yv(`2w7IqgMwD1dQ4%ZLZte> z0+XlTV}*m^UQ|}fU^Hq9 z-z|H=$IV5aL;oGJlNX|B=QI2G^JwcaZ zn;uMpy`)byHNtw_&qQeWfz2}B1@Twye1-K4SYKZ`EEfBa{gj-T*go*zc>Va@l#=3N zrL%{}3`xZ5SQK3C&!6gwk<4J`*%*2Ay)t(y5dummHqkw01vPUkM}mx+IS`m_lv5W3 zKVoRRN+xSl^)G=@p4sT-pY;L=p;Gzjc(?0NUmsOOeUReWo^4k03cv}#I%5iiWh&jO zKR$ncFSWwu&?Nb^tT)$Ba4=?awy<7X7E1N__E>Bm#~Ghh=Ui5%u5903d9n9Te{-IL z*KS=YWI4i{YZL*QZs?^Nnd-`sR}{9adJ4B~xH=zNd3<=;&AqFF8TB0Zh5vG59r+3@KW^w=`ea)l`os%7LTHr7>K}_4Hy5d z95&5mfn5Z$QlUmUPy@D@+kA+cN?Tj|FnWoe2=`;S7+O}5o!#4e9TcVD0XzW$WJ@o$ zjyShP)9#Dc!Gh z{Vb~Yb`B2p^YbFG*RpeRd{c~!ja6Vndw84#(@GhomxXa*SmzkYb}`PPPt2>~^q6f% zA!|_FKGJ)rG%M=>L;(N}e?0`gl_er%eSN+1xg_pjG!GAtPxp~0sz*+g{Z04%G-mmM zz>F57)3>xtCdt&*)&2jD|Jg_IZBj)0cfSkvv_5^fvgH8Y^U%RgmgSOJ4EIv#>DJ=E zFyKsjYQwa4>R&y8gv07aZp>Pmo7YcGp=MTQ8!oXix;=bIds#iL{R{ontHjTMOtxN> zd%H~M&dsW9-HDYNr2~jvJ-5tUYs>y9M}2-)9`wgF+2NHM;(GJ{HxHG}&EhW=ZUy@5gJ zP%j^j{)(HGud%VQviFuCON7&*EHfeAls^{;Zlodrd8u+cKyB;j=z!{{3)yi=!r`DI zMYh{Ud%s*n)zXZv`MSuPsa_rjZRzzitxOIEM#haFg&e0&Eo@h$rJc*WOtd+Xt}HhJ zKUdfZ1_lP2PTMcFpoN+GBnQXd*C3wEYkC535%>ZxZ|~L1gj)Xfs}E01sj&=KpZ>xk z&}&Y)8sFxi`sK-w(Phhz$%%4wF-A_dJ?j5wZ3`%IW!&4In=y37`;rLFi)uV*dLI;^#h~;fIMU%C*oup6OoX=QK zEAda%cDsEvL+Go&laorix~+NrKxO*oY!(Fd@f9MWXzW)VAkxFGXP5EYw0jnT@f2M( zgEl5#Uti7ST@W&)4^#}8n{%YXK7)05;k@fkjD8k%Se=rJN?n!7%Zm_zaGTp~`RQq3YM4tz{n!sCTWdx-(-#{Om1+%f030kd> z{Hx7`5R?QFH>HGz628@+_4MhhYpX~Q1Bjr!+}ko>>MFzA3g@s3+{|+;CJ))6_UA+N zm9l=#z{$&$hN)=9vxigi^Myy!^k`{m!81Un2lm%NROBsKexEhc_ES>SgqA-o12@OR{qa;S3r1>XW%Mc$R;VSi`1oXxzh;bA7oa716b zeK8&cQGE@l8wFI4pbP2rot*MXrT{17UcaWllG$M^9+#A~(h`4Pnr(S`c_t@(d&j}y zdvIU8Va3_D5m;rg>^ziGRKP3z1XZ-aDK{BNW+4cee`c_&iw3*`lJ_E{9hzRdUd#+$ ze9Z+<1tIuvpt*cR-aj?&XQ;9g0;0f5yZlV2YsOOCbpaNrG6Y*E3RU2M=9kIj_3)2C zf1RYKrONhiJMQ%Mc-$O`q>B;@2uLuG=Hcb_EzjgqgCv4}JmoqgHo4>3Zbf>HF6y{+ zZ}p=DJ~3=YGc2Y93R#$63c`Fo;~Q2q;7S6%j|Vl3g8MuPupb^!2o6*$R0CDr_gx6+ zyHK!}ZM_hZv){NcO13cEo4@2xRgsp%k>o-Qifq`B@aBzLS%)8_=>S?~wCvwp-2ZZY z-4j6f2JCd*^|-J93?1={+j0 z9qshVYN`m?w8xa?U_#^7G`>x|>z+nvsE!V1c&*-Q0mo-%VZoE~VnP>Mg2I-4O+J&t z#_wZjW?KP}@ied9`p8C`$j^lo!UGdfzA_Pph5R4APMv-P{ z`o`z{^@M2N;84_+Mf)mR-pyF9AQ?b0kTQGxWOL`h4p34j&zyO75c_@L;b0(tc5!s~ zK{^x#Mkm32>TnNLl9>6f+pSxiW22t~r!1*M&j4fBxWt<>=ZfB4dO=0zy4svWB6A(u zfhQLEQUV0PyRaBUEnR``G81y|mIzK>+N1Uut2Gpu5$Tq{m*J zstb6smOGo_S!3)3HzC_}*OdDbfQEc0O{t0BlqQ1IW#~}GDxhQ4Q4IYcT?|qHgE%ej ze|eg0(;KLQzdyWgP>TrT0zn4#S#kNA9J0TwGZl^zAa*!6*B(U;q6hu&>MD;f223>H zDg5sc;Fh4ekugXc6|}NO@{knqt%as?L;1&(_NFmZo>qH!e=k$+y`d-D2j@vtKMnKK~GUpxLib}2hH zy9?{GzBvA$?_VC$P7Yi4Z?HZxId;O@nZzADrM!` zp@t1BZQHAFLJ4s@Rj#t}gTI|OnJ2cDZWow<>siQswYs{hQD0PD?Z0`mvPH-8w@(@8 zuD>B)+N<#hViK14`)*eg%*^P*TjT&zbvv=N%=f!NSL|O+{~W zQ%h~Wq62^FL&wz7&Bn&23Z7Q`)PeFv*U}PbWEqw95D`|w!*yB%#5>EW&<$-Nb)_oY z#+D6cG`MHL6%>`0Za$N2tpByNZtLWvJ9V?>UVs;@2ygx|gf47W*|Bu#TGPaH-Mli( zgaQg3RL!Fx!}x6&7&PZy=l?~9ew1_EYRYrerEBX)PufG+J1pA0P?D9!2P=43l2}2D z`?5oUQ}t5PkyH*$xTo63r-m?}b8#avtWqxE@2knORQZIbpv^-h5|LQk z-(3q~daf`KghQl-Q9~Yl7c#|&o_Y)F;GI>`WJ%t+^7NV`NwlaXBkj1I*Z40m52>Y> zRDz&>K@Z#{)Hs?5yowXa&B@sp)o`e1WRII3%uJyQaA_H@E11dVLvaIS7~YPw&x@AM z&ClO-ew~mI?xh3i*79A5vb5{YtJqlDdMyce(DHr$H zc3Wzoy#bV{ay_$njl!P>BbcD)jP<5TLj;Z!Synp3L~MUZ6%`6;v(y4h{~=uWfE@P|frH-}Kc zPiPo9zw-lW4n7zE$b$`2C(sYOsIy$eQYY?-v-*boot~OP;t7CiFnjPHfK?h4B=3=) z|1qIKK!_qOp?j>j=3a_skA?%dld(<8~B-QqqJA@oXGF3>j>K}!Q6aVko zzu*7+3w!7MA20k5^#{U%NHJ5&3-vu-8KIW<_{9H)1mpNGarA$T4i5Z3hrM?ZF#P}h mdSLua|JPAHXbs%hWuoY@Nf;fEXse@uf0}C7RP&T?2K|3eCk{{m diff --git a/Telegram/SourceFiles/art/sprite_200x.png b/Telegram/SourceFiles/art/sprite_200x.png index 1d5a6885a315562610aa2bd3c5003c95bb2490b8..4a9034189a5c879b3646aea72373727514470578 100644 GIT binary patch literal 49131 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 W)xBQ+)Qp?Ysvx5(T_$N3^nU@!2JR04 literal 51090 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 N)Kzsm.width(qsl("Telegram ")); _subheaderWidth = st::aboutSubheaderFont->m.width(qsl("Desktop")); - _versionText = lang(lng_about_version).replace(qsl("{version}"), QString::fromWCharArray(AppVersionStr)); - _versionWidth = st::aboutVersionFont->m.width(_versionText); - _done.move(0, _height - _done.height()); connect(&_done, SIGNAL(clicked()), this, SLOT(onClose())); @@ -51,11 +50,13 @@ _hiding(false), a_opacity(0, 1) { void AboutBox::hideAll() { _done.hide(); + _version.hide(); _text.hide(); } void AboutBox::showAll() { _done.show(); + _version.show(); _text.show(); } @@ -88,10 +89,6 @@ void AboutBox::paintEvent(QPaintEvent *e) { p.setFont(st::aboutSubheaderFont->f); p.drawText((_width - (_headerWidth + _subheaderWidth)) / 2 + _headerWidth, st::aboutHeaderTop + st::aboutSubheaderFont->ascent, qsl("Desktop")); - - p.setFont(st::aboutVersionFont->f); - p.setPen(st::aboutVersionColor->p); - p.drawText((_width - _versionWidth) / 2, st::aboutVersionTop + st::aboutVersionFont->ascent, _versionText); } } else { p.setOpacity(a_opacity.current()); diff --git a/Telegram/SourceFiles/boxes/aboutbox.h b/Telegram/SourceFiles/boxes/aboutbox.h index 8e7c32523..58649da1a 100644 --- a/Telegram/SourceFiles/boxes/aboutbox.h +++ b/Telegram/SourceFiles/boxes/aboutbox.h @@ -43,12 +43,9 @@ private: int32 _width, _height; BottomButton _done; - FlatLabel _text; + FlatLabel _version, _text; int32 _headerWidth, _subheaderWidth; - QString _versionText; - int32 _versionWidth; - bool _hiding; QPixmap _cache; diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index bfa84d2c7..043acd435 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 = 5008; -static const wchar_t *AppVersionStr = L"0.5.8"; +static const int32 AppVersion = 5009; +static const wchar_t *AppVersionStr = L"0.5.9"; #ifdef Q_OS_WIN static const wchar_t *AppName = L"Telegram Win (Unofficial)"; #else diff --git a/Telegram/SourceFiles/etc/qt.conf b/Telegram/SourceFiles/etc/qt_linux.conf similarity index 100% rename from Telegram/SourceFiles/etc/qt.conf rename to Telegram/SourceFiles/etc/qt_linux.conf diff --git a/Telegram/SourceFiles/etc/qt_win.conf b/Telegram/SourceFiles/etc/qt_win.conf new file mode 100644 index 000000000..f26ffe77f --- /dev/null +++ b/Telegram/SourceFiles/etc/qt_win.conf @@ -0,0 +1,2 @@ +[Platforms] +WindowsArguments = nomousefromtouch diff --git a/Telegram/SourceFiles/gui/flattextarea.cpp b/Telegram/SourceFiles/gui/flattextarea.cpp index 8383763dc..8a90845f4 100644 --- a/Telegram/SourceFiles/gui/flattextarea.cpp +++ b/Telegram/SourceFiles/gui/flattextarea.cpp @@ -446,8 +446,12 @@ void FlatTextarea::keyPressEvent(QKeyEvent *e) { emit submitted(); } else if (e->key() == Qt::Key_Escape) { emit cancelled(); - } else if (e->key() == Qt::Key_Tab) { - emit tabbed(); + } else if (e->key() == Qt::Key_Tab || ctrl && e->key() == Qt::Key_Backtab) { + if (ctrl) { + e->ignore(); + } else { + emit tabbed(); + } } else { QTextCursor tc(textCursor()); if (enter && ctrl) { diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index cd1058ac4..69089b667 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -112,6 +112,7 @@ namespace { } const QRegularExpression reDomain(QString::fromUtf8("(?|'\"\\[\\]\\{\\}`\\~\\!\\%\\^\\*\\(\\)\\-\\+=\\x10])#[A-Za-z_\\.0-9]{4,20}([\\s\\.,:;<>|'\"\\[\\]\\{\\}`\\~\\!\\%\\^\\*\\(\\)\\-\\+=\\x10]|$)")); @@ -315,12 +316,15 @@ public: } } QRegularExpressionMatch mDomain = reDomain.match(src, offset); + QRegularExpressionMatch mExplicitDomain = reExplicitDomain.match(src, offset); QRegularExpressionMatch mHashtag = reHashtag.match(src, offset); - if (!mDomain.hasMatch() && !mHashtag.hasMatch()) break; + if (!mDomain.hasMatch() && !mExplicitDomain.hasMatch() && !mHashtag.hasMatch()) break; LinkRange link; int32 domainOffset = mDomain.hasMatch() ? mDomain.capturedStart() : INT_MAX, domainEnd = mDomain.hasMatch() ? mDomain.capturedEnd() : INT_MAX, + explicitDomainOffset = mExplicitDomain.hasMatch() ? mExplicitDomain.capturedStart() : INT_MAX, + explicitDomainEnd = mExplicitDomain.hasMatch() ? mExplicitDomain.capturedEnd() : INT_MAX, hashtagOffset = mHashtag.hasMatch() ? mHashtag.capturedStart() : INT_MAX, hashtagEnd = mHashtag.hasMatch() ? mHashtag.capturedEnd() : INT_MAX; if (mHashtag.hasMatch()) { @@ -331,6 +335,11 @@ public: --hashtagEnd; } } + if (explicitDomainOffset < domainOffset) { + domainOffset = explicitDomainOffset; + domainEnd = explicitDomainEnd; + mDomain = mExplicitDomain; + } if (hashtagOffset < domainOffset) { if (hashtagOffset > nextCmd) { const QChar *after = skipCommand(srcData + nextCmd, srcData + len); @@ -355,7 +364,7 @@ public: QString topDomain = mDomain.captured(3).toLower(); bool isProtocolValid = protocol.isEmpty() || validProtocols.contains(hashCrc32(protocol.constData(), protocol.size() * sizeof(QChar))); - bool isTopDomainValid = validTopDomains.contains(hashCrc32(topDomain.constData(), topDomain.size() * sizeof(QChar))); + bool isTopDomainValid = !protocol.isEmpty() || validTopDomains.contains(hashCrc32(topDomain.constData(), topDomain.size() * sizeof(QChar))); if (!isProtocolValid || !isTopDomainValid) { offset = domainEnd; diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index 86fa8f59d..152c27706 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -1043,7 +1043,7 @@ public: return _block; } void destroy() { - markRead(); + if (!out()) markRead(); bool wasAtBottom = history()->loadedAtBottom(); _history->removeNotification(this); detach(); diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 59561d859..d2835ddd6 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -1256,8 +1256,9 @@ void MessageField::focusInEvent(QFocusEvent *e) { } HistoryHider::HistoryHider(MainWidget *parent, bool forwardSelected) : QWidget(parent) - , sharedContact(0) + , _sharedContact(0) , _forwardSelected(forwardSelected) + , _sendPath(false) , forwardButton(this, lang(lng_forward), st::btnSelectDone) , cancelButton(this, lang(lng_cancel), st::btnSelectCancel) , offered(0) @@ -1268,21 +1269,14 @@ HistoryHider::HistoryHider(MainWidget *parent, bool forwardSelected) : QWidget(p , toTextWidth(0) , shadow(st::boxShadow) { - - connect(&forwardButton, SIGNAL(clicked()), this, SLOT(forward())); - connect(&cancelButton, SIGNAL(clicked()), this, SLOT(startHide())); - connect(App::wnd()->getTitle(), SIGNAL(hiderClicked()), this, SLOT(startHide())); - - _chooseWidth = st::forwardFont->m.width(lang(lng_forward_choose)); - - resizeEvent(0); - anim::start(this); + init(); } HistoryHider::HistoryHider(MainWidget *parent, UserData *sharedContact) : QWidget(parent) - , sharedContact(sharedContact) + , _sharedContact(sharedContact) , _forwardSelected(false) - , forwardButton(this, lang(lng_forward), st::btnSelectDone) + , _sendPath(false) + , forwardButton(this, lang(lng_forward_send), st::btnSelectDone) , cancelButton(this, lang(lng_cancel), st::btnSelectCancel) , offered(0) , aOpacity(0, 1) @@ -1292,7 +1286,27 @@ HistoryHider::HistoryHider(MainWidget *parent, UserData *sharedContact) : QWidge , toTextWidth(0) , shadow(st::boxShadow) { + init(); +} +HistoryHider::HistoryHider(MainWidget *parent) : QWidget(parent) +, _sharedContact(0) +, _forwardSelected(false) +, _sendPath(true) +, forwardButton(this, lang(lng_forward_send), st::btnSelectDone) +, cancelButton(this, lang(lng_cancel), st::btnSelectCancel) +, offered(0) +, aOpacity(0, 1) +, aOpacityFunc(anim::easeOutCirc) +, hiding(false) +, _forwardRequest(0) +, toTextWidth(0) +, shadow(st::boxShadow) +{ + init(); +} + +void HistoryHider::init() { connect(&forwardButton, SIGNAL(clicked()), this, SLOT(forward())); connect(&cancelButton, SIGNAL(clicked()), this, SLOT(startHide())); connect(App::wnd()->getTitle(), SIGNAL(hiderClicked()), this, SLOT(startHide())); @@ -1397,8 +1411,10 @@ void HistoryHider::forward() { if (_forwardRequest) return; if (!hiding && offered) { - if (sharedContact) { - parent()->onShareContact(offered->id, sharedContact); + if (_sharedContact) { + parent()->onShareContact(offered->id, _sharedContact); + } else if (_sendPath) { + parent()->onSendPaths(offered->id); } else { _forwardRequest = parent()->onForward(offered->id, _forwardSelected); } @@ -1434,7 +1450,24 @@ void HistoryHider::resizeEvent(QResizeEvent *e) { void HistoryHider::offerPeer(PeerId peer) { offered = App::peer(peer); - toText.setText(st::boxFont, lang(sharedContact ? lng_forward_share_contact : lng_forward_confirm).replace(qsl("{recipient}"), offered->chat ? '\xAB' + offered->name + '\xBB' : offered->name), _textNameOptions); + QString phrase; + if (_sharedContact) { + phrase = lang(lng_forward_share_contact); + } else if (_sendPath) { + if (cSendPaths().size() > 1) { + phrase = lang(lng_forward_send_files_confirm); + } else { + QString name(QFileInfo(cSendPaths().front()).fileName()); + if (name.size() > 10) { + name = name.mid(0, 8) + '.' + '.'; + } + phrase = lang(lng_forward_send_file_confirm).replace(qsl("{name}"), name); + } + } else { + phrase = lang(lng_forward_confirm); + } + + toText.setText(st::boxFont, phrase.replace(qsl("{recipient}"), offered->chat ? '\xAB' + offered->name + '\xBB' : offered->name), _textNameOptions); toTextWidth = toText.maxWidth(); if (toTextWidth > box.width() - st::boxPadding.left() - st::boxPadding.right()) { toTextWidth = box.width() - st::boxPadding.left() - st::boxPadding.right(); @@ -1450,6 +1483,7 @@ bool HistoryHider::wasOffered() const { } HistoryHider::~HistoryHider() { + if (_sendPath) cSetSendPaths(QStringList()); if (App::wnd()) App::wnd()->getTitle()->setHideLevel(0); parent()->noHider(this); } @@ -2242,6 +2276,13 @@ void HistoryWidget::onShareContact(const PeerId &peer, UserData *contact) { peerMessagesUpdated(); } +void HistoryWidget::onSendPaths(const PeerId &peer) { + App::main()->showPeer(peer, 0, false, true); + if (!hist) return; + + uploadMedias(cSendPaths(), ToPrepareDocument); +} + PeerData *HistoryWidget::peer() const { return histPeer; } @@ -2908,6 +2949,9 @@ void HistoryWidget::keyPressEvent(QKeyEvent *e) { _scroll.scrollToY(_scroll.scrollTop() + _scroll.height() / 10); } else if (e->key() == Qt::Key_Up) { _scroll.scrollToY(_scroll.scrollTop() - _scroll.height() / 10); + } else if ((e->key() == Qt::Key_Tab || e->key() == Qt::Key_Backtab) && (e->modifiers() & Qt::ControlModifier)) { + PeerData *p = ((e->modifiers() & Qt::ShiftModifier) || e->key() == Qt::Key_Backtab) ? App::main()->peerBefore(histPeer) : App::main()->peerAfter(histPeer); + if (p) App::main()->showPeer(p->id); } else { e->ignore(); } @@ -3028,10 +3072,12 @@ void HistoryWidget::updateTopBarSelection() { App::main()->topBar()->showSelected(_selCount > 0 ? _selCount : 0); updateControlsVisibility(); updateListSize(); - if (_selCount) { - _list->setFocus(); - } else { - _field.setFocus(); + if (!App::wnd()->layerShown()) { + if (_selCount) { + _list->setFocus(); + } else { + _field.setFocus(); + } } App::main()->topBar()->update(); update(); diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index 95ddf393e..968a530b2 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -192,8 +192,9 @@ class HistoryHider : public QWidget, public Animated { public: - HistoryHider(MainWidget *parent, bool forwardSelected); - HistoryHider(MainWidget *parent, UserData *sharedContact); + HistoryHider(MainWidget *parent, bool forwardSelected); // forward messages + HistoryHider(MainWidget *parent, UserData *sharedContact); // share contact + HistoryHider(MainWidget *parent); // send path from command line argument bool animStep(float64 ms); @@ -217,10 +218,11 @@ public slots: private: + void init(); MainWidget *parent(); - UserData *sharedContact; - bool _forwardSelected; + UserData *_sharedContact; + bool _forwardSelected, _sendPath; FlatButton forwardButton; FlatButton cancelButton; @@ -301,6 +303,7 @@ public: mtpRequestId onForward(const PeerId &peer, bool forwardSelected); void onShareContact(const PeerId &peer, UserData *contact); + void onSendPaths(const PeerId &peer); PeerData *peer() const; PeerData *activePeer() const; diff --git a/Telegram/SourceFiles/main.cpp b/Telegram/SourceFiles/main.cpp index f579b141c..e4595ee6e 100644 --- a/Telegram/SourceFiles/main.cpp +++ b/Telegram/SourceFiles/main.cpp @@ -41,7 +41,12 @@ int main(int argc, char *argv[]) { } DEBUG_LOG(("Application Info: Telegram started, test mode: %1, exe dir: %2").arg(logBool(cTestMode())).arg(cExeDir())); - if (cDebug()) LOG(("Application Info: Telegram started in debug mode")); + if (cDebug()) { + LOG(("Application Info: Telegram started in debug mode")); + for (int32 i = 0; i < argc; ++i) { + LOG(("Argument: %1").arg(QString::fromLocal8Bit(argv[i]))); + } + } DEBUG_LOG(("Application Info: ideal thread count: %1, using %2 connections per session").arg(QThread::idealThreadCount()).arg(cConnectionsInSession())); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index e889f294e..b9d3eb397 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -301,6 +301,10 @@ void MainWidget::onShareContact(const PeerId &peer, UserData *contact) { history.onShareContact(peer, contact); } +void MainWidget::onSendPaths(const PeerId &peer) { + history.onSendPaths(peer); +} + void MainWidget::noHider(HistoryHider *destroyed) { if (hider == destroyed) { hider = 0; @@ -1380,10 +1384,17 @@ void MainWidget::activate() { } else { dialogs.activate(); } - } else if (history.peer()) { - history.activate(); } else { - dialogs.activate(); + if (!cSendPaths().isEmpty()) { + hider = new HistoryHider(this); + hider->show(); + resizeEvent(0); + dialogs.activate(); + } else if (history.peer()) { + history.activate(); + } else { + dialogs.activate(); + } } } App::wnd()->fixOrder(); diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index d6a3dde9a..523dc9b50 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -159,6 +159,7 @@ public: 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(); diff --git a/Telegram/SourceFiles/mtproto/mtpFileLoader.cpp b/Telegram/SourceFiles/mtproto/mtpFileLoader.cpp index 6406dcd56..4c662d88e 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()->notifyUpdateAll(); + App::wnd()->notifyUpdateAllPhotos(); } emit progress(this); } diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index faaadeb6a..b8f6e4aba 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -325,7 +325,7 @@ void ProfileInner::reorderParticipants() { } else { _participants.clear(); if (_peerUser) { - _onlineText = App::onlineText(_peerUser->onlineTill, t); + _onlineText = App::onlineText(_peerUser->onlineTill, t, true); } else { _onlineText = lang(lng_chat_no_members); } diff --git a/Telegram/SourceFiles/pspecific_linux.cpp b/Telegram/SourceFiles/pspecific_linux.cpp index 799fbdb9d..ce080255a 100644 --- a/Telegram/SourceFiles/pspecific_linux.cpp +++ b/Telegram/SourceFiles/pspecific_linux.cpp @@ -785,6 +785,7 @@ QString psCurrentExeDirectory(int argc, char *argv[]) { void psDoCleanup() { try { psAutoStart(false, true); + psSendToMenu(false, true); } catch (...) { } } @@ -991,3 +992,6 @@ void psExecTelegram() { void psAutoStart(bool start, bool silent) { } + +void psSendToMenu(bool send, bool silent) { +} diff --git a/Telegram/SourceFiles/pspecific_linux.h b/Telegram/SourceFiles/pspecific_linux.h index 496986d12..bf1adaa5f 100644 --- a/Telegram/SourceFiles/pspecific_linux.h +++ b/Telegram/SourceFiles/pspecific_linux.h @@ -166,6 +166,7 @@ QString psCurrentLanguage(); QString psAppDataPath(); QString psCurrentExeDirectory(int argc, char *argv[]); void psAutoStart(bool start, bool silent = false); +void psSendToMenu(bool send, bool silent = false); QRect psDesktopRect(); diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index 0b682a66d..d1d8e25f2 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -317,7 +317,10 @@ void PsMainWindow::psNotifyShown(NotifyWindow *w) { } void PsMainWindow::psPlatformNotify(HistoryItem *item) { - _private.showNotify(item->history()->peer->id, item->history()->peer->name, item->notificationHeader(), item->notificationText()); + QString title = (cNotifyView() <= dbinvShowName) ? item->history()->peer->name : lang(lng_notification_title); + QString subtitle = (cNotifyView() <= dbinvShowName) ? item->notificationHeader() : QString(); + QString msg = (cNotifyView() <= dbinvShowPreview) ? item->notificationText() : lang(lng_notification_preview); + _private.showNotify(item->history()->peer->id, title, subtitle, msg, (cNotifyView() <= dbinvShowPreview)); } PsApplication::PsApplication(int &argc, char **argv) : QApplication(argc, argv) { @@ -776,6 +779,7 @@ QString psCurrentExeDirectory(int argc, char *argv[]) { void psDoCleanup() { try { psAutoStart(false, true); + psSendToMenu(false, true); } catch (...) { } } @@ -888,3 +892,6 @@ void psExecTelegram() { void psAutoStart(bool start, bool silent) { } + +void psSendToMenu(bool send, bool silent) { +} diff --git a/Telegram/SourceFiles/pspecific_mac.h b/Telegram/SourceFiles/pspecific_mac.h index 3cfca22dc..08906c3bd 100644 --- a/Telegram/SourceFiles/pspecific_mac.h +++ b/Telegram/SourceFiles/pspecific_mac.h @@ -178,6 +178,7 @@ QString psCurrentLanguage(); QString psAppDataPath(); QString psCurrentExeDirectory(int argc, char *argv[]); void psAutoStart(bool start, bool silent = false); +void psSendToMenu(bool send, bool silent = false); QRect psDesktopRect(); diff --git a/Telegram/SourceFiles/pspecific_mac_p.h b/Telegram/SourceFiles/pspecific_mac_p.h index b11bfc561..4b6ec2dcc 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.h +++ b/Telegram/SourceFiles/pspecific_mac_p.h @@ -30,7 +30,7 @@ public: void holdOnTop(WId winId); void showOverAll(WId winId); void activateWnd(WId winId); - void showNotify(uint64 peer, const QString &title, const QString &subtitle, const QString &msg); + void showNotify(uint64 peer, const QString &title, const QString &subtitle, const QString &msg, bool withReply); void clearNotifies(uint64 peer = 0); void enableShadow(WId winId); diff --git a/Telegram/SourceFiles/pspecific_mac_p.mm b/Telegram/SourceFiles/pspecific_mac_p.mm index 4b3daf1af..98a439f6b 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.mm +++ b/Telegram/SourceFiles/pspecific_mac_p.mm @@ -175,7 +175,7 @@ void PsMacWindowPrivate::activateWnd(WId winId) { [wnd orderFront:wnd]; } -void PsMacWindowPrivate::showNotify(uint64 peer, const QString &title, const QString &subtitle, const QString &msg) { +void PsMacWindowPrivate::showNotify(uint64 peer, const QString &title, const QString &subtitle, const QString &msg, bool withReply) { NSUserNotification *notification = [[NSUserNotification alloc] init]; [notification setUserInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedLongLong:peer],@"peer",[NSNumber numberWithUnsignedLongLong:cInstance()],@"inst",nil]]; @@ -184,7 +184,7 @@ void PsMacWindowPrivate::showNotify(uint64 peer, const QString &title, const QSt [notification setSubtitle:QNSString(subtitle).s()]; [notification setInformativeText:QNSString(msg).s()]; - [notification setHasReplyButton:YES]; + if (withReply) [notification setHasReplyButton:YES]; [notification setSoundName:nil]; diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index cdadb1832..e4561724e 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -2011,6 +2011,7 @@ QString psCurrentExeDirectory(int argc, char *argv[]) { void psDoCleanup() { try { psAutoStart(false, true); + psSendToMenu(false, true); } catch (...) { } } @@ -2217,32 +2218,32 @@ void psExecTelegram() { } } -void psAutoStart(bool start, bool silent) { +void _manageAppLnk(bool create, bool silent, int path_csidl, const wchar_t *args, const wchar_t *description) { WCHAR startupFolder[MAX_PATH]; - HRESULT hres = SHGetFolderPath(0, CSIDL_STARTUP, 0, SHGFP_TYPE_CURRENT, startupFolder); + HRESULT hres = SHGetFolderPath(0, path_csidl, 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 lnk = QString::fromWCharArray(startupFolder) + "\\Telegram.lnk"; + if (create) { + 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->SetArguments(args); 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 { + psl->SetDescription(description); + + 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(); + psl->Release(); } else { if (!silent) LOG(("App Error: could not create instance of IID_IShellLink %1").arg(hres)); } @@ -2250,10 +2251,18 @@ void psAutoStart(bool start, bool silent) { QFile::remove(lnk); } } else { - if (!silent) LOG(("App Error: could not get CSIDL_STARTUP folder %1").arg(hres)); + if (!silent) LOG(("App Error: could not get CSIDL %1 folder %2").arg(path_csidl).arg(hres)); } } +void psAutoStart(bool start, bool silent) { + _manageAppLnk(start, silent, CSIDL_STARTUP, L"-autostart", L"Telegram autorun link.\nYou can disable autorun in Telegram settings."); +} + +void psSendToMenu(bool send, bool silent) { + _manageAppLnk(send, silent, CSIDL_SENDTO, L"-sendpath", L"Telegram send to link.\nYou can disable send to menu item in Telegram settings."); +} + #ifdef _NEED_WIN_GENERATE_DUMP static const WCHAR *_programName = L"Telegram Win (Unofficial)"; // folder in APPDATA, if current path is unavailable for writing static const WCHAR *_exeName = L"Telegram.exe"; diff --git a/Telegram/SourceFiles/pspecific_wnd.h b/Telegram/SourceFiles/pspecific_wnd.h index 5dfd4341f..7bb2a58a4 100644 --- a/Telegram/SourceFiles/pspecific_wnd.h +++ b/Telegram/SourceFiles/pspecific_wnd.h @@ -175,6 +175,7 @@ QString psCurrentLanguage(); QString psAppDataPath(); QString psCurrentExeDirectory(int argc, char *argv[]); void psAutoStart(bool start, bool silent = false); +void psSendToMenu(bool send, bool silent = false); QRect psDesktopRect(); diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index 98b2f290a..e70a3c25f 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -25,12 +25,16 @@ bool gManyInstance = false; QString gKeyFile; QString gWorkingDir, gExeDir; +QStringList gSendPaths; + QString gDialogLastPath, gDialogHelperPath; // optimize QFileDialog bool gSoundNotify = true; bool gDesktopNotify = true; +DBINotifyView gNotifyView = dbinvShowPreview; bool gStartMinimized = false; bool gAutoStart = false; +bool gSendToMenu = false; bool gAutoUpdate = true; TWindowPos gWindowPos; bool gFromAutoStart = false; @@ -107,7 +111,7 @@ void settingsParseArgs(int argc, char *argv[]) { } else if (string("-many") == argv[i]) { gManyInstance = true; } else if (string("-key") == argv[i] && i + 1 < argc) { - gKeyFile = QString(argv[i + 1]); + gKeyFile = QString::fromLocal8Bit(argv[++i]); } else if (string("-autostart") == argv[i]) { gFromAutoStart = true; } else if (string("-noupdate") == argv[i]) { @@ -115,7 +119,11 @@ void settingsParseArgs(int argc, char *argv[]) { } else if (string("-tosettings") == argv[i]) { gStartToSettings = true; } else if (string("-lang") == argv[i] && i + 1 < argc) { - gLangFile = QString(argv[i + 1]); + gLangFile = QString(argv[++i]); + } else if (string("-sendpath") == argv[i] && i + 1 < argc) { + for (++i; i < argc; ++i) { + gSendPaths.push_back(QString::fromLocal8Bit(argv[i])); + } } } } diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index 48572950f..ca1ffd73d 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -54,6 +54,7 @@ DeclareSetting(QString, LoggedPhoneNumber); DeclareReadSetting(uint32, ConnectionsInSession); DeclareSetting(bool, AutoStart); DeclareSetting(bool, StartMinimized); +DeclareSetting(bool, SendToMenu); DeclareReadSetting(bool, FromAutoStart); DeclareSetting(QString, WorkingDir); inline void cForceWorkingDir(const QString &newDir) { @@ -72,6 +73,7 @@ DeclareSetting(bool, CatsAndDogs); DeclareSetting(bool, SoundNotify); DeclareSetting(bool, NeedConfigResave); DeclareSetting(bool, DesktopNotify); +DeclareSetting(DBINotifyView, NotifyView); DeclareSetting(bool, AutoUpdate); struct TWindowPos { @@ -130,6 +132,8 @@ const RecentEmojiPack &cGetRecentEmojis(); DeclareReadSetting(QString, LangFile); +DeclareSetting(QStringList, SendPaths); + DeclareSetting(bool, Retina); DeclareSetting(float64, RetinaFactor); DeclareSetting(int32, IntRetinaFactor); diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index dd359d2ae..45bc5a81e 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -106,6 +106,8 @@ SettingsInner::SettingsInner(Settings *parent) : QWidget(parent), // notifications _desktopNotify(this, lang(lng_settings_desktop_notify), cDesktopNotify()), + _senderName(this, lang(lng_settings_show_name), cNotifyView() <= dbinvShowName), + _messagePreview(this, lang(lng_settings_show_preview), cNotifyView() <= dbinvShowPreview), _soundNotify(this, lang(lng_settings_sound_notify), cSoundNotify()), // general @@ -118,6 +120,7 @@ SettingsInner::SettingsInner(Settings *parent) : QWidget(parent), _autoStart(this, lang(lng_settings_auto_start), cAutoStart()), _startMinimized(this, lang(lng_settings_start_min), cStartMinimized()), + _sendToMenu(this, lang(lng_settings_add_sendto), cSendToMenu()), _dpiAutoScale(this, lang(lng_settings_scale_auto).replace(qsl("{cur}"), scaleLabel(cScreenScale())), (cConfigScale() == dbisAuto)), _dpiSlider(this, st::dpiSlider, dbisScaleCount - 1, cEvalScale(cConfigScale()) - 1), @@ -167,7 +170,11 @@ SettingsInner::SettingsInner(Settings *parent) : QWidget(parent), connect(App::app(), SIGNAL(peerPhotoFail(PeerId)), this, SLOT(onPhotoUpdateFail(PeerId))); // notifications + _senderName.setDisabled(!_desktopNotify.checked()); + _messagePreview.setDisabled(_senderName.disabled() || !_senderName.checked()); connect(&_desktopNotify, SIGNAL(changed()), this, SLOT(onDesktopNotify())); + connect(&_senderName, SIGNAL(changed()), this, SLOT(onSenderName())); + connect(&_messagePreview, SIGNAL(changed()), this, SLOT(onMessagePreview())); connect(&_soundNotify, SIGNAL(changed()), this, SLOT(onSoundNotify())); // general @@ -181,6 +188,7 @@ SettingsInner::SettingsInner(Settings *parent) : QWidget(parent), _startMinimized.setDisabled(!_autoStart.checked()); connect(&_autoStart, SIGNAL(changed()), this, SLOT(onAutoStart())); connect(&_startMinimized, SIGNAL(changed()), this, SLOT(onStartMinimized())); + connect(&_sendToMenu, SIGNAL(changed()), this, SLOT(onSendToMenu())); connect(&_dpiAutoScale, SIGNAL(changed()), this, SLOT(onScaleAuto())); connect(&_dpiSlider, SIGNAL(changed(int32)), this, SLOT(onScaleChange())); @@ -313,6 +321,8 @@ void SettingsInner::paintEvent(QPaintEvent *e) { top += st::setHeaderSkip; top += _desktopNotify.height() + st::setLittleSkip; + top += _senderName.height() + st::setLittleSkip; + top += _messagePreview.height() + st::setSectionSkip; top += _soundNotify.height(); } @@ -346,7 +356,9 @@ void SettingsInner::paintEvent(QPaintEvent *e) { top += _workmodeWindow.height() + st::setSectionSkip; top += _autoStart.height() + st::setLittleSkip; - top += _startMinimized.height(); + top += _startMinimized.height() + st::setSectionSkip; + + top += _sendToMenu.height(); } if (!cRetina()) { @@ -441,6 +453,8 @@ void SettingsInner::resizeEvent(QResizeEvent *e) { // notifications top += st::setHeaderSkip; _desktopNotify.move(_left, top); top += _desktopNotify.height() + st::setLittleSkip; + _senderName.move(_left, top); top += _senderName.height() + st::setLittleSkip; + _messagePreview.move(_left, top); top += _messagePreview.height() + st::setSectionSkip; _soundNotify.move(_left, top); top += _soundNotify.height(); } @@ -456,7 +470,9 @@ void SettingsInner::resizeEvent(QResizeEvent *e) { _workmodeWindow.move(_left, top); top += _workmodeWindow.height() + st::setSectionSkip; _autoStart.move(_left, top); top += _autoStart.height() + st::setLittleSkip; - _startMinimized.move(_left, top); top += _startMinimized.height(); + _startMinimized.move(_left, top); top += _startMinimized.height() + st::setSectionSkip; + + _sendToMenu.move(_left, top); top += _sendToMenu.height(); } if (!cRetina()) { top += st::setHeaderSkip; @@ -620,9 +636,13 @@ void SettingsInner::showAll() { // notifications if (_self) { _desktopNotify.show(); + _senderName.show(); + _messagePreview.show(); _soundNotify.show(); } else { _desktopNotify.hide(); + _senderName.hide(); + _messagePreview.hide(); _soundNotify.hide(); } @@ -635,13 +655,17 @@ void SettingsInner::showAll() { _autoStart.show(); _startMinimized.show(); + + _sendToMenu.show(); } else { _workmodeTray.hide(); _workmodeWindow.hide(); _autoStart.hide(); _startMinimized.hide(); - } + + _sendToMenu.show(); + } if (cRetina()) { _dpiSlider.hide(); _dpiAutoScale.hide(); @@ -843,6 +867,12 @@ void SettingsInner::onStartMinimized() { App::writeConfig(); } +void SettingsInner::onSendToMenu() { + cSetSendToMenu(_sendToMenu.checked()); + psSendToMenu(_sendToMenu.checked()); + App::writeConfig(); +} + void SettingsInner::onScaleAuto() { DBIScale newScale = _dpiAutoScale.checked() ? dbisAuto : cEvalScale(cConfigScale()); if (newScale == cScreenScale()) { @@ -905,8 +935,43 @@ void SettingsInner::onDesktopNotify() { cSetDesktopNotify(_desktopNotify.checked()); if (!_desktopNotify.checked()) { App::wnd()->notifyClear(); + _senderName.setDisabled(true); + _messagePreview.setDisabled(true); + App::writeUserConfig(); + } else { + _senderName.setDisabled(false); + _messagePreview.setDisabled(!_senderName.checked()); + App::writeUserConfig(); + } +} + +void SettingsInner::onSenderName() { + _messagePreview.setDisabled(!_senderName.checked()); + if (!_senderName.checked() && _messagePreview.checked()) { + _messagePreview.setChecked(false); + } else { + if (_messagePreview.checked()) { + cSetNotifyView(dbinvShowPreview); + } else if (_senderName.checked()) { + cSetNotifyView(dbinvShowName); + } else { + cSetNotifyView(dbinvShowNothing); + } + App::writeUserConfig(); + App::wnd()->notifyUpdateAll(); + } +} + +void SettingsInner::onMessagePreview() { + if (_messagePreview.checked()) { + cSetNotifyView(dbinvShowPreview); + } else if (_senderName.checked()) { + cSetNotifyView(dbinvShowName); + } else { + cSetNotifyView(dbinvShowNothing); } App::writeUserConfig(); + App::wnd()->notifyUpdateAll(); } void SettingsInner::onReplaceEmojis() { diff --git a/Telegram/SourceFiles/settingswidget.h b/Telegram/SourceFiles/settingswidget.h index 1981bd170..64c114910 100644 --- a/Telegram/SourceFiles/settingswidget.h +++ b/Telegram/SourceFiles/settingswidget.h @@ -99,12 +99,15 @@ public slots: void onAutoStart(); void onStartMinimized(); + void onSendToMenu(); void onScaleAuto(); void onScaleChange(); void onSoundNotify(); void onDesktopNotify(); + void onSenderName(); + void onMessagePreview(); void onReplaceEmojis(); void onViewEmojis(); @@ -158,13 +161,13 @@ private: QString _errorText; // notifications - FlatCheckbox _desktopNotify, _soundNotify; + FlatCheckbox _desktopNotify, _senderName, _messagePreview, _soundNotify; // general FlatCheckbox _autoUpdate; LinkButton _checkNow, _restartNow; FlatCheckbox _workmodeTray, _workmodeWindow; - FlatCheckbox _autoStart, _startMinimized; + FlatCheckbox _autoStart, _startMinimized, _sendToMenu; FlatCheckbox _dpiAutoScale; Slider _dpiSlider; int32 _dpiWidth1, _dpiWidth2, _dpiWidth3, _dpiWidth4; diff --git a/Telegram/SourceFiles/telegram.qrc b/Telegram/SourceFiles/telegram.qrc index 025c2b665..74576d75f 100644 --- a/Telegram/SourceFiles/telegram.qrc +++ b/Telegram/SourceFiles/telegram.qrc @@ -37,4 +37,7 @@ qmime/freedesktop.org.xml + + etc/qt_win.conf + diff --git a/Telegram/SourceFiles/telegram_linux.qrc b/Telegram/SourceFiles/telegram_linux.qrc index e6ebb00de..ac5e08300 100644 --- a/Telegram/SourceFiles/telegram_linux.qrc +++ b/Telegram/SourceFiles/telegram_linux.qrc @@ -38,6 +38,6 @@ qmime/freedesktop.org.xml - etc/qt.conf + etc/qt_linux.conf diff --git a/Telegram/SourceFiles/types.h b/Telegram/SourceFiles/types.h index 501fd4883..71480ed46 100644 --- a/Telegram/SourceFiles/types.h +++ b/Telegram/SourceFiles/types.h @@ -212,6 +212,8 @@ enum DataBlockId { dbiLoggedPhoneNumber = 25, dbiMutedPeers = 26, // 27 reserved + dbiNotifyView = 28, + dbiSendToMenu = 29, dbiEncryptedWithSalt = 333, dbiEncrypted = 444, @@ -224,6 +226,12 @@ enum DBISendKey { dbiskCtrlEnter = 1, }; +enum DBINotifyView { + dbinvShowPreview = 0, + dbinvShowName = 1, + dbinvShowNothing = 2, +}; + enum DBIWorkMode { dbiwmWindowAndTray = 0, dbiwmTrayOnly = 1, diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index 3e383e113..480988511 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -77,7 +77,7 @@ void TempDirDeleter::onStart() { } -NotifyWindow::NotifyWindow(HistoryItem *item, int32 x, int32 y) : history(item->history()) +NotifyWindow::NotifyWindow(HistoryItem *item, int32 x, int32 y) : item(item), history(item->history()) #ifdef Q_OS_WIN , started(GetTickCount()) #endif @@ -90,52 +90,7 @@ NotifyWindow::NotifyWindow(HistoryItem *item, int32 x, int32 y) : history(item-> , 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); + updateNotifyDisplay(); hideTimer.setSingleShot(true); connect(&hideTimer, SIGNAL(timeout()), this, SLOT(hideByTimer())); @@ -145,7 +100,7 @@ NotifyWindow::NotifyWindow(HistoryItem *item, int32 x, int32 y) : history(item-> connect(&close, SIGNAL(clicked()), this, SLOT(unlinkHistory())); close.setAcceptBoth(true); - close.move(w - st::notifyClose.width - st::notifyClosePos.x(), st::notifyClosePos.y()); + close.move(st::notifyWidth - st::notifyClose.width - st::notifyClosePos.x(), st::notifyClosePos.y()); close.show(); aY.start(y); @@ -196,6 +151,78 @@ void NotifyWindow::moveTo(int32 x, int32 y, int32 index) { anim::start(this); } +void NotifyWindow::updateNotifyDisplay() { + if (!item) return; + + 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 (cNotifyView() <= dbinvShowName) { + 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); + } + } else { + static QPixmap icon = QPixmap::fromImage(App::wnd()->iconLarge().scaled(st::notifyPhotoSize, st::notifyPhotoSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + p.drawPixmap(st::notifyPhotoPos.x(), st::notifyPhotoPos.y(), icon); + } + + 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 (cNotifyView() <= dbinvShowName) { + 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); + + if (cNotifyView() <= dbinvShowPreview) { + 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); + } else { + static QString notifyText = st::dlgHistFont->m.elidedText(lang(lng_notification_preview), Qt::ElideRight, itemWidth); + p.setPen(st::dlgSystemColor->p); + p.drawText(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyItemTop + st::msgNameFont->height + st::dlgHistFont->ascent, notifyText); + } + + p.setPen(st::dlgNameColor->p); + if (cNotifyView() <= dbinvShowName) { + history->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); + } else { + p.setFont(st::msgNameFont->f); + static QString notifyTitle = st::msgNameFont->m.elidedText(lang(lng_notification_title), Qt::ElideRight, rectForName.width()); + p.drawText(rectForName.left(), rectForName.top() + st::msgNameFont->ascent, notifyTitle); + } + } + + pm = QPixmap::fromImage(img); + update(); +} + void NotifyWindow::updatePeerPhoto() { if (!peerPhoto->isNull() && peerPhoto->loaded()) { QImage img(pm.toImage()); @@ -209,10 +236,17 @@ void NotifyWindow::updatePeerPhoto() { } } +void NotifyWindow::itemRemoved(HistoryItem *del) { + if (item == del) { + unlinkHistory(); + } +} + void NotifyWindow::unlinkHistory(History *hist) { if (!hist || hist == history) { animHide(st::notifyFastAnim, st::notifyFastAnimFunc); history = 0; + item = 0; App::wnd()->notifyShowNext(); } } @@ -559,10 +593,13 @@ void Window::hideLayer() { if (layerBG) { layerBG->onClose(); } + if (layer) { + layer->startHide(); + } } bool Window::layerShown() { - return !!layerBG || !!_topWidget; + return !!layer || !!layerBG || !!_topWidget; } bool Window::historyIsActive(int state) const { @@ -1118,6 +1155,14 @@ void Window::notifyShowNext(NotifyWindow *remove) { } } +void Window::notifyItemRemoved(HistoryItem *item) { + if (cCustomNotifies()) { + for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + (*i)->itemRemoved(item); + } + } +} + void Window::notifyStopHiding() { if (cCustomNotifies()) { for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { @@ -1134,7 +1179,7 @@ void Window::notifyStartHiding() { } } -void Window::notifyUpdateAll() { +void Window::notifyUpdateAllPhotos() { if (cCustomNotifies()) { for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { (*i)->updatePeerPhoto(); @@ -1142,6 +1187,15 @@ void Window::notifyUpdateAll() { } } +void Window::notifyUpdateAll() { + if (cCustomNotifies()) { + for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { + (*i)->updateNotifyDisplay(); + } + } + psClearNotifies(); +} + void Window::notifyActivateAll() { if (cCustomNotifies()) { for (NotifyWindows::const_iterator i = notifyWindows.cbegin(), e = notifyWindows.cend(); i != e; ++i) { @@ -1150,6 +1204,23 @@ void Window::notifyActivateAll() { } } +QImage Window::iconLarge() const { + return icon256; +} + +void Window::sendPaths() { + if (settings) { + hideSettings(); + } else { + if (layerShown()) { + hideLayer(); + } + if (main && !main->animating()) { + main->activate(); + } + } +} + Window::~Window() { notifyClearFast(); delete _tempDeleter; diff --git a/Telegram/SourceFiles/window.h b/Telegram/SourceFiles/window.h index 395219ceb..b4989db4a 100644 --- a/Telegram/SourceFiles/window.h +++ b/Telegram/SourceFiles/window.h @@ -85,8 +85,11 @@ public: void stopHiding(); void moveTo(int32 x, int32 y, int32 index = -1); + void updateNotifyDisplay(); void updatePeerPhoto(); + void itemRemoved(HistoryItem *del); + int32 index() const { return history ? _index : -1; } @@ -106,6 +109,7 @@ private: DWORD started; #endif History *history; + HistoryItem *item; IconedButton close; QPixmap pm; float64 alphaDuration, posDuration; @@ -210,11 +214,17 @@ public: void notifyClear(History *history = 0); void notifyClearFast(); void notifyShowNext(NotifyWindow *remove = 0); + void notifyItemRemoved(HistoryItem *item); void notifyStopHiding(); void notifyStartHiding(); + void notifyUpdateAllPhotos(); void notifyUpdateAll(); void notifyActivateAll(); + QImage iconLarge() const; + + void sendPaths(); + public slots: void checkHistoryActivation(int state = -1); diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 3ff431313..41727d8f2 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.5.8 + 0.5.9 CFBundleSignature ???? NOTE diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 8e0c995cea3e8b53c4f55b3e1e3e10258852b812..4e67d78c998ab85895ba77d6f8db1a5c04604db2 100644 GIT binary patch delta 42 vcmdm{y-jMgG?BT(!uuk_>$exc17{C;cz6R8Y$ delta 42 vcmdm{y-jMgG?BT(!uuk_>$exc17{C;cz6G#km diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index 54848de0e..7af6996f4 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -1453,7 +1453,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.5.8; + CURRENT_PROJECT_VERSION = 0.5.9; DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1471,7 +1471,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.5.8; + CURRENT_PROJECT_VERSION = 0.5.9; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; @@ -1495,9 +1495,9 @@ CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.5.8; + CURRENT_PROJECT_VERSION = 0.5.9; DYLIB_COMPATIBILITY_VERSION = 0.5; - DYLIB_CURRENT_VERSION = 0.5.8; + DYLIB_CURRENT_VERSION = 0.5.9; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; @@ -1620,10 +1620,10 @@ CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.5.8; + CURRENT_PROJECT_VERSION = 0.5.9; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.5; - DYLIB_CURRENT_VERSION = 0.5.8; + DYLIB_CURRENT_VERSION = 0.5.9; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0;