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.
Source code is published under GPL v3, license is available here.
###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 is not built in Debug and Release configurations of 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