Skip to content

telegramdesktop/tdesktop

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

http://download.qt-project.org/official_releases/qt/5.3/5.3.0/single/qt-everywhere-opensource-src-5.3.0.zip

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

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.0OK
  • 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