Telegram D – Unofficial Telegram Desktop App
This is complete source code and build instructions for alpha version of unofficial desktop client for Telegram messenger, based on Telegram API and MTProto secure protocol.
###Supported systems
Only Windows systems are supported at this moment, OS X and Linux builds are on their way.
- Windows XP
- Windows Vista
- Windows 7
- Windows 8 (not RT)
- Windows 8.1 (not RT)
###Third-party libraries
- Qt 5.3.0, slightly patched
- OpenSSL 1.0.1g
- zlib 1.2.8
- libexif 0.6.20
- LZMA SDK 9.20
##Build instructions for Visual Studio 2013
###Prepare folder
Choose a folder for the future build, for example **D:\TBuild**. There you will have two folders, Libraries for third-party libs and tdesktop (or tdesktop-master) for the app.
###Clone source code
By git – in Git Bash go to /d/tbuild and run
git clone https://github.com/telegramdesktop/tdesktop.git
or download in ZIP and extract to **D:\TBuild**, rename tdesktop-master to tdesktop to have D:\TBuild\tdesktop\Telegram.sln solution
###Prepare libraries
####OpenSSL 1.0.1g
https://www.openssl.org/related/binaries.html > OpenSSL for Windows > Download Win32 OpenSSL v1.0.1g (16 Mb)
Install to D:\TBuild\Libraries\OpenSSL-Win32, while installing Copy OpenSSL DLLs to choose The OpenSSL binaries (/bin) directory
####LZMA SDK 9.20
http://www.7-zip.org/sdk.html > Download LZMA SDK (C, C++, C#, Java) 9.20
Extract to D:\TBuild\Libraries
#####Building library
- Open in VS2013 D:\TBuild\Libraries\lzma\C\Util\LzmaLib\LzmaLib.dsw > One-way upgrade – OK
- For Debug and Release configurations
- LzmaLib Properties > General > Configuration Type = Static library (.lib) – OK
- LzmaLib Properties > Librarian > General > Target Machine = MachineX86 (/MACHINE:X86) – OK
- Build Debug configuration
- Build Release configuration
####zlib 1.2.8
http://www.zlib.net/ > Download zlib source code, version 1.2.8, zipfile format
Extract to *D:\TBuild\Libraries*
#####Building library
- Open in VS2013 D:\TBuild\Libraries\zlib-1.2.8\contrib\vstudio\vc11\zlibvc.sln > One-way upgrade – OK
- We are interested only in zlibstat project, but it depends on some custom pre-build step, so build all
- For Debug configuration
- zlibstat Properties > C/C++ > Code Generation > Runtime Library = Multi-threaded Debug (/MTd) – OK
- For Release configuration
- zlibstat Properties > C/C++ > Code Generation > Runtime Library = Multi-threaded (/MT) – OK
- Build Solution for Debug configuration – only zlibstat project builds successfully
- Build Solution for Release configuration – only zlibstat project builds successfully
####libexif 0.6.20
Get sources from https://github.com/telegramdesktop/libexif-0.6.20, by git – in Git Bash go to /d/tbuild/libraries and run
git clone https://github.com/telegramdesktop/libexif-0.6.20.git
or download in ZIP and extract to **D:\TBuild\Libraries**, rename libexif-0.6.20-master to libexif-0.6.20 to have D:\TBuild\Libraries\libexif-0.6.20\win32\lib_exif.sln solution
#####Building library
- Open in VS2013 D:\TBuild\Libraries\libexif-0.6.20\win32\lib_exif.sln
- Build Debug configuration
- Build Release configuration
####Qt 5.3.0, slightly patched
Extract to **D:\TBuild\Libraries**, rename qt-everywhere-opensource-src-5.3.0 to QtStatic to have *D:\TBuild\Libraries\QtStatic\qtbase* folder
Apply patch – copy (with overwrite!) everything from *D:\TBuild\tdesktop\_qt_5_3_0_patch* to *D:\TBuild\Libraries\QtStatic*
#####Building library
- Install Python 3.3.2 from https://www.python.org/download/releases/3.3.2 > Windows x86 MSI Installer (3.3.2)
- Open VS2013 x86 Native Tools Command Prompt.bat (should be in *\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts* folder)
There go to Qt directory
D:
cd TBuild\Libraries\QtStatic
and after that run configure
configure -debug-and-release -opensource -static -opengl desktop -mp -nomake examples -platform win32-msvc2013
y
to configure Qt build. After configuration is complete run
nmake
nmake install
building (nmake command) will take really long time.
####Qt Visual Studio Addin 1.2.3
http://download.qt-project.org/official_releases/vsaddin/qt-vs-addin-1.2.3-opensource.exe
Close all VS2013 instances and install to default location
###Building Telegram Desktop
- Launch VS2013 for configuring Qt Addin
- QT5 > Qt Options > Add
- Version name: QtStatic.5.3.0
- Path: D:\TBuild\Libraries\QtStatic\qtbase
- Default Qt/Win version: QtStatic.5.3.0 – OK
- File > Open > Project/Solution > D:\TBuild\tdesktop\Telegram.sln
- Build \ Build Solution (Debug and Release configurations)
##Projects in Telegram solution
####Telegram
tdesktop messenger
####Updater
little app, that is launched by Telegram when update is ready, replaces all files and launches it back
####Packer
compiles given files to single update file, compresses it with lzma and signs with a private key, it was not included to Telegram solution, because private key is inaccessible
####Prepare
prepares a release for deployment, puts all files to deploy/{version} folder
- current tsetup{version}exe installer
- current Telegram.exe
- current Telegram.pdb (debug info for crash minidumps view)
- current tupdate{updversion} binary lzma update archive
####MetaEmoji
from two folders
- SourceFiles/art/Emoji
- SourceFiles/art/Emoji_200x
and some inner config creates four sprites and text2emoji replace code
- SourceFiles/art/emoji.png
- SourceFiles/art/emoji_125x.png
- SourceFiles/art/emoji_150x.png
- SourceFiles/art/emoji_200x.png
- SourceFiles/gui/emoji_config.cpp
####MetaStyle
from two files and two sprites
- Resources/style_classes.txt
- Resources/style.txt
- SourceFiles/art/sprite.png
- SourceFiles/art/sprite_200x.png
creates two other sprites, four sprite grids and style constants code
- SourceFiles/art/sprite_125x.png
- SourceFiles/art/sprite_150x.png
- SourceFiles/art/grid.png
- SourceFiles/art/grid_125x.png
- SourceFiles/art/grid_150x.png
- SourceFiles/art/grid_200x.png
- GeneratedFiles/style_classes.h
- GeneratedFiles/style_auto.h
- GeneratedFiles/style_auto.cpp
####MetaLang
from langpack file
- Resources/lang.txt
creates lang constants code and lang file parse code
- GeneratedFiles/lang.h
- GeneratedFiles/lang.cpp