Compare commits
360 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
18b74b9045 | ||
|
|
1cf4d3b4d2 | ||
|
|
a7772b922c | ||
|
|
131f7ec5bb | ||
|
|
971d0efda9 | ||
|
|
6e566e0165 | ||
|
|
a949c5e287 | ||
|
|
7ec4d9af3e | ||
|
|
9b85dd27ca | ||
|
|
cf9f7ef508 | ||
|
|
7f39d917ab | ||
|
|
2e5a0e056c | ||
|
|
850efbde95 | ||
|
|
a11fb2816b | ||
|
|
23c2ae49c6 | ||
|
|
96556d4a4c | ||
|
|
d601b60903 | ||
|
|
e451dec70c | ||
|
|
51cbb9b310 | ||
|
|
1c4f374e3c | ||
|
|
fd0719db6d | ||
|
|
04dd4e30a8 | ||
|
|
1ffbec0215 | ||
|
|
f68466b072 | ||
|
|
02a8b693af | ||
|
|
53219bcf70 | ||
|
|
81f9c70279 | ||
|
|
233a87a8bc | ||
|
|
00e4cfc345 | ||
|
|
9388e154cf | ||
|
|
3ba2a7931e | ||
|
|
377689ae86 | ||
|
|
62ffd93cb7 | ||
|
|
fe9f02e485 | ||
|
|
130aa67ba0 | ||
|
|
97a4c76043 | ||
|
|
3d89a34adf | ||
|
|
5c7155c3a5 | ||
|
|
f582fbf010 | ||
|
|
c2039da600 | ||
|
|
ffc4cd3415 | ||
|
|
c4ca180745 | ||
|
|
673fea47bd | ||
|
|
83fda73ce3 | ||
|
|
a5f407a458 | ||
|
|
88175aff1f | ||
|
|
2f408cd773 | ||
|
|
7d8ba66211 | ||
|
|
c1ae9e9680 | ||
|
|
34665cd6da | ||
|
|
0c8709ca5f | ||
|
|
12ebae01b0 | ||
|
|
165511fb14 | ||
|
|
fbf3c005ff | ||
|
|
bbe6d2d13b | ||
|
|
633ff4b60e | ||
|
|
b8c2c3991f | ||
|
|
38f788f545 | ||
|
|
9af70551f3 | ||
|
|
316d015d23 | ||
|
|
cfce189201 | ||
|
|
482ecf12ff | ||
|
|
50b0b61118 | ||
|
|
a7b1d83a3c | ||
|
|
8c1cc51c2e | ||
|
|
e2207e33ef | ||
|
|
3f543347b8 | ||
|
|
a7725f03bb | ||
|
|
f0d092f126 | ||
|
|
4f16ad6757 | ||
|
|
689aed7258 | ||
|
|
e966213ff8 | ||
|
|
4169927d83 | ||
|
|
eacc6b7b6e | ||
|
|
4b87363a20 | ||
|
|
9ba331693f | ||
|
|
12be795de7 | ||
|
|
49f56a38fb | ||
|
|
4e80d54be1 | ||
|
|
2096007ed9 | ||
|
|
47ce695142 | ||
|
|
80cd74edc8 | ||
|
|
55583c2237 | ||
|
|
069232ec1b | ||
|
|
5733f4079f | ||
|
|
55fe977d54 | ||
|
|
736789a9ed | ||
|
|
7150811aef | ||
|
|
63103ede81 | ||
|
|
c86252777b | ||
|
|
2bcdf27b03 | ||
|
|
2001d3c617 | ||
|
|
8210a51fdc | ||
|
|
08ff324b1b | ||
|
|
55f60866cb | ||
|
|
e2f08d4161 | ||
|
|
2e7f4c2f21 | ||
|
|
a58c082cfa | ||
|
|
5824afa941 | ||
|
|
adcc11c474 | ||
|
|
4769a1a49f | ||
|
|
f6a6a39d3b | ||
|
|
2940023cb0 | ||
|
|
d426f7242a | ||
|
|
2f9d65b4eb | ||
|
|
a4c1d5fe9d | ||
|
|
13c7c99965 | ||
|
|
fbfa7e7be3 | ||
|
|
e5dda6dd49 | ||
|
|
b9af3c7f34 | ||
|
|
64b8adb3d0 | ||
|
|
cb371f09ac | ||
|
|
9147c12687 | ||
|
|
b5c870d677 | ||
|
|
62a396b661 | ||
|
|
81731139e9 | ||
|
|
8a371b9c1b | ||
|
|
51092fb6a9 | ||
|
|
018abd6aad | ||
|
|
5292d75617 | ||
|
|
401e1166f9 | ||
|
|
45c1427f91 | ||
|
|
73be099d7f | ||
|
|
735faa2d11 | ||
|
|
46946c7323 | ||
|
|
d98bbca353 | ||
|
|
83fcb8e8ed | ||
|
|
ec61aa0080 | ||
|
|
4211501acf | ||
|
|
ae6afad885 | ||
|
|
3b8cee64b8 | ||
|
|
a8da0c18ee | ||
|
|
dac0471157 | ||
|
|
07007ee5a5 | ||
|
|
b78c08a30a | ||
|
|
5a487bc30c | ||
|
|
c913c77fef | ||
|
|
557d363d02 | ||
|
|
839885910c | ||
|
|
ee16070abe | ||
|
|
b8b5ab6378 | ||
|
|
5b88f4d3d2 | ||
|
|
34eb834d94 | ||
|
|
82a3cd9bdb | ||
|
|
e25ecce887 | ||
|
|
9f6d683415 | ||
|
|
dc114d62c5 | ||
|
|
6bf3006eb9 | ||
|
|
fddc3d6ad9 | ||
|
|
f76a2bc224 | ||
|
|
6558a32794 | ||
|
|
b935d54fe7 | ||
|
|
cb827406ca | ||
|
|
36fcf2c60e | ||
|
|
7c173bd63f | ||
|
|
3c43f621ce | ||
|
|
bdab477040 | ||
|
|
550c159ca8 | ||
|
|
aeec5d1542 | ||
|
|
b4aa213c64 | ||
|
|
a241e10208 | ||
|
|
90f6642d33 | ||
|
|
7bd289ed0f | ||
|
|
c8aa35d23c | ||
|
|
4e0e472f97 | ||
|
|
a76658ba46 | ||
|
|
6796204126 | ||
|
|
1c5e91c9a8 | ||
|
|
7f16675d2f | ||
|
|
6c7c442ad2 | ||
|
|
82fb2151a0 | ||
|
|
36b7c1c720 | ||
|
|
06bf67c146 | ||
|
|
8cc0fbc687 | ||
|
|
c846a14118 | ||
|
|
097424c535 | ||
|
|
c7ed36d558 | ||
|
|
95eab45108 | ||
|
|
f852813734 | ||
|
|
ca6a331a26 | ||
|
|
bfae205fbe | ||
|
|
aaa1245430 | ||
|
|
a99ae76ad4 | ||
|
|
6429e8b532 | ||
|
|
cb338e330f | ||
|
|
d12bd0824d | ||
|
|
4c0551ebb1 | ||
|
|
06fc23fc59 | ||
|
|
41977bf515 | ||
|
|
ffd2817d18 | ||
|
|
c48937a2f5 | ||
|
|
091d1157da | ||
|
|
be043a4437 | ||
|
|
fae0bccc9c | ||
|
|
b44cf4a094 | ||
|
|
90f4187ca9 | ||
|
|
ae272074b9 | ||
|
|
9972f7b90e | ||
|
|
f68cefbdc1 | ||
|
|
08841ed895 | ||
|
|
a919737f6e | ||
|
|
8f3510b3c4 | ||
|
|
6c588a8f2f | ||
|
|
4c9ef606f3 | ||
|
|
0b7bb806b7 | ||
|
|
78558e513c | ||
|
|
52e7ddf079 | ||
|
|
e2bc6990c7 | ||
|
|
06c3082fdf | ||
|
|
54cd55523b | ||
|
|
556f75ef6c | ||
|
|
951634a717 | ||
|
|
51d7e177a6 | ||
|
|
81e074115d | ||
|
|
9eb34e496f | ||
|
|
da60739893 | ||
|
|
7be1f16313 | ||
|
|
39b0d9e46f | ||
|
|
7be9e0fb94 | ||
|
|
e3e8d083ea | ||
|
|
9929bfb281 | ||
|
|
effa277a3b | ||
|
|
2661f81fd1 | ||
|
|
661de0c326 | ||
|
|
e1fd43b2a4 | ||
|
|
b697824540 | ||
|
|
eb3eef4b80 | ||
|
|
c3736c6fa3 | ||
|
|
0ef7503917 | ||
|
|
cef50e5f52 | ||
|
|
cb8ff398a5 | ||
|
|
eeb1a6b769 | ||
|
|
66822f7333 | ||
|
|
e466dc9fc7 | ||
|
|
947204bb9d | ||
|
|
f37f097dec | ||
|
|
a8d35b67aa | ||
|
|
4e0d94f347 | ||
|
|
c7e773dd9a | ||
|
|
e64d102efd | ||
|
|
49ea9434f2 | ||
|
|
e21c354428 | ||
|
|
d0614efd65 | ||
|
|
b0baf75fdd | ||
|
|
efb3e92525 | ||
|
|
5cdc563c9e | ||
|
|
a43dfc567c | ||
|
|
ea6e4c6006 | ||
|
|
98930792c3 | ||
|
|
165d1aacae | ||
|
|
831f1b6aee | ||
|
|
2f5fb3688a | ||
|
|
d8897a0cc8 | ||
|
|
3b956c598b | ||
|
|
1ee71bbd5c | ||
|
|
b7ab4fd086 | ||
|
|
44c6050bf2 | ||
|
|
35c759c6bc | ||
|
|
372cf275e0 | ||
|
|
33095966af | ||
|
|
ff53404d5b | ||
|
|
941288b58e | ||
|
|
22441ef80c | ||
|
|
8c2f11de7d | ||
|
|
c7a4d67cfb | ||
|
|
688275ea81 | ||
|
|
266102df2f | ||
|
|
f7aadc352b | ||
|
|
1ae3af0e80 | ||
|
|
97d27fe869 | ||
|
|
fcd2e28abb | ||
|
|
2522e66969 | ||
|
|
b9250edb33 | ||
|
|
54cab2c5a5 | ||
|
|
6231db1411 | ||
|
|
ef5a395c60 | ||
|
|
a200771868 | ||
|
|
914e043abe | ||
|
|
9d66f9cc03 | ||
|
|
e708065446 | ||
|
|
9c64cdb9c4 | ||
|
|
9f8d61ab2f | ||
|
|
0143fd28af | ||
|
|
844d030332 | ||
|
|
ae18ece549 | ||
|
|
10a0c6a086 | ||
|
|
51189fd244 | ||
|
|
1e10529f20 | ||
|
|
8d701ebb4f | ||
|
|
269bb94138 | ||
|
|
9b98ff52ea | ||
|
|
52f2f96f36 | ||
|
|
b53e40f1bf | ||
|
|
4e0d11f517 | ||
|
|
1a24ba857c | ||
|
|
1e254b958e | ||
|
|
23140b3d6a | ||
|
|
8c901d8f71 | ||
|
|
856356ce75 | ||
|
|
b5a65a4519 | ||
|
|
d056c00c67 | ||
|
|
36fb6dac89 | ||
|
|
fcda883878 | ||
|
|
40c0286942 | ||
|
|
59df447fed | ||
|
|
a253d34c00 | ||
|
|
0a5eac50be | ||
|
|
156c3d288c | ||
|
|
154e5660de | ||
|
|
13e6b91ac7 | ||
|
|
a89ad5d0fb | ||
|
|
e11c27048b | ||
|
|
e8dd277a00 | ||
|
|
329db0d8e9 | ||
|
|
eaf3ea9289 | ||
|
|
4156beaa3c | ||
|
|
4115d3d13d | ||
|
|
5f01751660 | ||
|
|
7d4e23448e | ||
|
|
c7aa5ed544 | ||
|
|
1bfe409c93 | ||
|
|
e8d619c740 | ||
|
|
2dc3ec955a | ||
|
|
07ff7c6cb0 | ||
|
|
8d52ca6be6 | ||
|
|
df91b2bfeb | ||
|
|
9d02e539c8 | ||
|
|
241fee80a7 | ||
|
|
83786ddeaf | ||
|
|
0e9793b845 | ||
|
|
2b36dd660b | ||
|
|
35ffc03988 | ||
|
|
5a9d1a3fce | ||
|
|
6776d88688 | ||
|
|
affe9defb5 | ||
|
|
d3fdf433cd | ||
|
|
cec8114b99 | ||
|
|
0a1a5ed70e | ||
|
|
c587c011d2 | ||
|
|
c2fa149ffd | ||
|
|
c63c75018d | ||
|
|
b0077d98f0 | ||
|
|
b5bc7a22af | ||
|
|
e60311811b | ||
|
|
8700c1b08f | ||
|
|
d8b51670e7 | ||
|
|
68c2f563c6 | ||
|
|
bf775cb4ca | ||
|
|
5c4b81434e | ||
|
|
cd1c7c56d3 | ||
|
|
427ceb9a9a | ||
|
|
2a110f0d3e | ||
|
|
d0ed75f3b5 | ||
|
|
be2abd594f | ||
|
|
75a40b83ae | ||
|
|
472a677bca | ||
|
|
dca6e10beb | ||
|
|
122ab94f3d | ||
|
|
2ab40de8b9 | ||
|
|
35659536c5 |
@@ -56,10 +56,6 @@ GOTO:EOF
|
||||
call:logInfo "Build version: %BUILD_VERSION%"
|
||||
set TDESKTOP_BUILD_DEFINES=
|
||||
|
||||
echo %BUILD_VERSION% | findstr /C:"disable_autoupdate">nul && (
|
||||
set TDESKTOP_BUILD_DEFINES=%TDESKTOP_BUILD_DEFINES%,TDESKTOP_DISABLE_AUTOUPDATE
|
||||
)
|
||||
|
||||
echo %BUILD_VERSION% | findstr /C:"disable_register_custom_scheme">nul && (
|
||||
set TDESKTOP_BUILD_DEFINES=%TDESKTOP_BUILD_DEFINES%,TDESKTOP_DISABLE_REGISTER_CUSTOM_SCHEME
|
||||
)
|
||||
|
||||
5
.github/ISSUE_TEMPLATE.md
vendored
@@ -22,8 +22,5 @@ Tell us what happens instead
|
||||
**Used theme**:
|
||||
|
||||
<details><summary><b>Logs</b>:</summary>
|
||||
Insert logs here (if necessary)
|
||||
|
||||
<!-- You can type `debugmode` in settings and then see ~/.TelegramDesktop/DebugLogs/log_...txt for log files.
|
||||
Type `debugmode` in settings again to disable logs. -->
|
||||
Insert log.txt here (if necessary)
|
||||
</details>
|
||||
|
||||
9
.gitignore
vendored
@@ -50,6 +50,15 @@ ipch/
|
||||
project.xcworkspace
|
||||
xcuserdata
|
||||
|
||||
parts
|
||||
prime
|
||||
stage
|
||||
*.snap
|
||||
.snapcraft
|
||||
/snap/gui/*.png
|
||||
/snap/gui/*.desktop
|
||||
/snap/plugins/__pycache__
|
||||
|
||||
/Telegram/*.user.*
|
||||
*.pro.user
|
||||
/Linux/
|
||||
|
||||
3
.gitmodules
vendored
@@ -13,3 +13,6 @@
|
||||
[submodule "Telegram/ThirdParty/crl"]
|
||||
path = Telegram/ThirdParty/crl
|
||||
url = https://github.com/telegramdesktop/crl.git
|
||||
[submodule "Telegram/ThirdParty/xxHash"]
|
||||
path = Telegram/ThirdParty/xxHash
|
||||
url = https://github.com/Cyan4973/xxHash.git
|
||||
|
||||
@@ -10,7 +10,6 @@ cache:
|
||||
env:
|
||||
matrix:
|
||||
- BUILD_VERSION=""
|
||||
- BUILD_VERSION="disable_autoupdate"
|
||||
- BUILD_VERSION="disable_register_custom_scheme"
|
||||
- BUILD_VERSION="disable_crash_reports"
|
||||
- BUILD_VERSION="disable_network_proxy"
|
||||
|
||||
@@ -100,10 +100,6 @@ build() {
|
||||
fi
|
||||
|
||||
# Configure the build
|
||||
if [[ $BUILD_VERSION == *"disable_autoupdate"* ]]; then
|
||||
GYP_DEFINES+=",TDESKTOP_DISABLE_AUTOUPDATE"
|
||||
fi
|
||||
|
||||
if [[ $BUILD_VERSION == *"disable_register_custom_scheme"* ]]; then
|
||||
GYP_DEFINES+=",TDESKTOP_DISABLE_REGISTER_CUSTOM_SCHEME"
|
||||
fi
|
||||
|
||||
@@ -16,7 +16,8 @@ The source code is published under GPLv3 with OpenSSL exception, the license is
|
||||
* Mac OS X 10.8 - Mac OS X 10.11
|
||||
* Mac OS X 10.6 - Mac OS X 10.7 (separate build)
|
||||
* Ubuntu 12.04 - Ubuntu 18.04
|
||||
* Fedora 22 - Fedora 24
|
||||
* Fedora 22 - Fedora 28
|
||||
* [Snappy](https://snapcraft.io/telegram-desktop)
|
||||
|
||||
## Third-party
|
||||
|
||||
@@ -39,6 +40,7 @@ The source code is published under GPLv3 with OpenSSL exception, the license is
|
||||
* Open Sans font ([Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0.html))
|
||||
* Emoji alpha codes ([MIT License](https://github.com/emojione/emojione/blob/master/extras/alpha-codes/LICENSE.md))
|
||||
* Catch test framework ([Boost License](https://github.com/philsquared/Catch/blob/master/LICENSE.txt))
|
||||
* xxHash ([BSD License](https://github.com/Cyan4973/xxHash/blob/dev/LICENSE))
|
||||
|
||||
## Build instructions
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/pylib/gyp/generator/cmake.py b/pylib/gyp/generator/cmake.py
|
||||
index a2b9629..68d7020 100644
|
||||
index a2b9629..ac59461 100644
|
||||
--- a/pylib/gyp/generator/cmake.py
|
||||
+++ b/pylib/gyp/generator/cmake.py
|
||||
@@ -1070,6 +1070,23 @@ def WriteTarget(namer, qualified_target, target_dicts, build_dir, config_to_use,
|
||||
@@ -26,6 +26,43 @@ index a2b9629..68d7020 100644
|
||||
UnsetVariable(output, 'TOOLSET')
|
||||
UnsetVariable(output, 'TARGET')
|
||||
|
||||
@@ -1112,6 +1129,8 @@ def GenerateOutputForConfig(target_list, target_dicts, data,
|
||||
SetVariable(output, 'configuration', config_to_use)
|
||||
|
||||
ar = None
|
||||
+ ranlib = None
|
||||
+ nm = None
|
||||
cc = None
|
||||
cxx = None
|
||||
|
||||
@@ -1121,17 +1140,27 @@ def GenerateOutputForConfig(target_list, target_dicts, data,
|
||||
for key, value in make_global_settings:
|
||||
if key == 'AR':
|
||||
ar = os.path.join(build_to_top, value)
|
||||
+ if key == 'RANLIB':
|
||||
+ ranlib = os.path.join(build_to_top, value)
|
||||
+ if key == 'NM':
|
||||
+ nm = os.path.join(build_to_top, value)
|
||||
if key == 'CC':
|
||||
cc = os.path.join(build_to_top, value)
|
||||
if key == 'CXX':
|
||||
cxx = os.path.join(build_to_top, value)
|
||||
|
||||
ar = gyp.common.GetEnvironFallback(['AR_target', 'AR'], ar)
|
||||
+ ranlib = gyp.common.GetEnvironFallback(['RANLIB_target', 'RANLIB'], ranlib)
|
||||
+ nm = gyp.common.GetEnvironFallback(['NM_target', 'NM'], nm)
|
||||
cc = gyp.common.GetEnvironFallback(['CC_target', 'CC'], cc)
|
||||
cxx = gyp.common.GetEnvironFallback(['CXX_target', 'CXX'], cxx)
|
||||
|
||||
if ar:
|
||||
SetVariable(output, 'CMAKE_AR', ar)
|
||||
+ if ranlib:
|
||||
+ SetVariable(output, 'CMAKE_RANLIB', ranlib)
|
||||
+ if nm:
|
||||
+ SetVariable(output, 'CMAKE_NM', nm)
|
||||
if cc:
|
||||
SetVariable(output, 'CMAKE_C_COMPILER', cc)
|
||||
if cxx:
|
||||
diff --git a/pylib/gyp/generator/xcode.py b/pylib/gyp/generator/xcode.py
|
||||
index db99d6a..8d56baf 100644
|
||||
--- a/pylib/gyp/generator/xcode.py
|
||||
|
||||
@@ -252,6 +252,43 @@ index 41834b21ae..8cdf4ab145 100644
|
||||
if (value == WSAEADDRNOTAVAIL) {
|
||||
setError(QAbstractSocket::NetworkError, AddressNotAvailableErrorString);
|
||||
socketState = QAbstractSocket::UnconnectedState;
|
||||
diff --git a/src/platformsupport/dbustray/qdbustrayicon.cpp b/src/platformsupport/dbustray/qdbustrayicon.cpp
|
||||
index 4d6e70720d..9bdb0beb67 100644
|
||||
--- a/src/platformsupport/dbustray/qdbustrayicon.cpp
|
||||
+++ b/src/platformsupport/dbustray/qdbustrayicon.cpp
|
||||
@@ -58,9 +58,18 @@ QT_BEGIN_NAMESPACE
|
||||
|
||||
Q_LOGGING_CATEGORY(qLcTray, "qt.qpa.tray")
|
||||
|
||||
+static QString cachePath()
|
||||
+{
|
||||
+ QString xdgCache = QString::fromUtf8(getenv("XDG_CACHE_HOME"));
|
||||
+ if (xdgCache.isEmpty()) {
|
||||
+ xdgCache = QDir::cleanPath(QDir::homePath() + QStringLiteral("/.cache"));
|
||||
+ }
|
||||
+ return xdgCache;
|
||||
+}
|
||||
+
|
||||
static const QString KDEItemFormat = QStringLiteral("org.kde.StatusNotifierItem-%1-%2");
|
||||
static const QString KDEWatcherService = QStringLiteral("org.kde.StatusNotifierWatcher");
|
||||
-static const QString TempFileTemplate = QDir::tempPath() + QStringLiteral("/qt-trayicon-XXXXXX.png");
|
||||
+static const QString TempFileTemplate = cachePath() + QStringLiteral("/qt-trayicon-XXXXXX.png");
|
||||
static const QString XdgNotificationService = QStringLiteral("org.freedesktop.Notifications");
|
||||
static const QString XdgNotificationPath = QStringLiteral("/org/freedesktop/Notifications");
|
||||
static const QString DefaultAction = QStringLiteral("default");
|
||||
@@ -151,6 +160,12 @@ QTemporaryFile *QDBusTrayIcon::tempIcon(const QIcon &icon)
|
||||
uint pid = session.interface()->servicePid(KDEWatcherService).value();
|
||||
QString processName = QLockFilePrivate::processNameByPid(pid);
|
||||
necessary = processName.endsWith(QStringLiteral("indicator-application-service"));
|
||||
+ if (!necessary) {
|
||||
+ QString xdgDesktop = QString::fromUtf8(getenv("XDG_CURRENT_DESKTOP"));
|
||||
+ QStringList desktops = xdgDesktop.toLower().split(QLatin1Char(':'));
|
||||
+ necessary = desktops.contains(QStringLiteral("unity")) ||
|
||||
+ desktops.contains(QStringLiteral("ubuntu"));
|
||||
+ }
|
||||
necessity_checked = true;
|
||||
}
|
||||
if (!necessary)
|
||||
diff --git a/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp b/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp
|
||||
index 728b166b71..1dc64593e1 100644
|
||||
--- a/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp
|
||||
@@ -630,7 +667,7 @@ index c2d206fb45..9b9739862d 100644
|
||||
}
|
||||
return ret;
|
||||
diff --git a/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm b/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm
|
||||
index 8152c57ffd..5ddd7b353d 100644
|
||||
index 8152c57ffd..87ba2f3f72 100644
|
||||
--- a/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm
|
||||
+++ b/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm
|
||||
@@ -94,6 +94,8 @@ QT_USE_NAMESPACE
|
||||
@@ -746,7 +783,19 @@ index 8152c57ffd..5ddd7b353d 100644
|
||||
systray = sys;
|
||||
imageCell = [[QNSImageView alloc] initWithParent:self];
|
||||
[item setView: imageCell];
|
||||
@@ -482,6 +513,10 @@ QT_END_NAMESPACE
|
||||
@@ -448,6 +479,11 @@ QT_END_NAMESPACE
|
||||
-(void)dealloc {
|
||||
[[NSStatusBar systemStatusBar] removeStatusItem:item];
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:imageCell];
|
||||
+
|
||||
+ // Patch: Fix crash in macOS 10.14.
|
||||
+ // Somehow item and imageCell are retained and attempt to be drawn if left in view.
|
||||
+ [item setView: nil];
|
||||
+
|
||||
[imageCell release];
|
||||
[item release];
|
||||
[super dealloc];
|
||||
@@ -482,6 +518,10 @@ QT_END_NAMESPACE
|
||||
selector:@selector(menuTrackingDone:)
|
||||
name:NSMenuDidEndTrackingNotification
|
||||
object:m];
|
||||
|
||||
BIN
Telegram/Resources/day-blue.tdesktop-theme
Normal file
530
Telegram/Resources/export_html/css/style.css
Normal file
@@ -0,0 +1,530 @@
|
||||
body {
|
||||
margin: 0;
|
||||
font: 12px/18px 'Open Sans',"Lucida Grande","Lucida Sans Unicode",Arial,Helvetica,Verdana,sans-serif;
|
||||
}
|
||||
strong {
|
||||
font-weight: 700;
|
||||
}
|
||||
code, kbd, pre, samp {
|
||||
font-family: Menlo,Monaco,Consolas,"Courier New",monospace;
|
||||
}
|
||||
code {
|
||||
padding: 2px 4px;
|
||||
font-size: 90%;
|
||||
color: #c7254e;
|
||||
background-color: #f9f2f4;
|
||||
border-radius: 4px;
|
||||
}
|
||||
pre {
|
||||
display: block;
|
||||
margin: 0;
|
||||
line-height: 1.42857143;
|
||||
word-break: break-all;
|
||||
word-wrap: break-word;
|
||||
color: #333;
|
||||
background-color: #f5f5f5;
|
||||
border-radius: 4px;
|
||||
overflow: auto;
|
||||
padding: 3px;
|
||||
border: 1px solid #eee;
|
||||
max-height: none;
|
||||
font-size: inherit;
|
||||
}
|
||||
.clearfix:after {
|
||||
content: " ";
|
||||
visibility: hidden;
|
||||
display: block;
|
||||
height: 0;
|
||||
clear: both;
|
||||
}
|
||||
.pull_left {
|
||||
float: left;
|
||||
}
|
||||
.pull_right {
|
||||
float: right;
|
||||
}
|
||||
.page_wrap {
|
||||
background-color: #ffffff;
|
||||
color: #000000;
|
||||
}
|
||||
.page_wrap a {
|
||||
color: #168acd;
|
||||
text-decoration: none;
|
||||
}
|
||||
.page_wrap a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.page_header {
|
||||
position: fixed;
|
||||
z-index: 10;
|
||||
background-color: #ffffff;
|
||||
width: 100%;
|
||||
border-bottom: 1px solid #e3e6e8;
|
||||
}
|
||||
.page_header .content {
|
||||
width: 480px;
|
||||
margin: 0 auto;
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
.page_header a.content {
|
||||
background-repeat: no-repeat;
|
||||
background-position: 24px 21px;
|
||||
background-size: 24px 24px;
|
||||
}
|
||||
.bold {
|
||||
color: #212121;
|
||||
font-weight: 700;
|
||||
}
|
||||
.details {
|
||||
color: #70777b;
|
||||
}
|
||||
.page_header .content .text {
|
||||
padding: 24px 24px 22px 24px;
|
||||
font-size: 22px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.page_header a.content .text {
|
||||
padding: 24px 24px 22px 82px;
|
||||
}
|
||||
.page_body {
|
||||
padding-top: 64px;
|
||||
width: 480px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.page_about {
|
||||
padding: 24px 24px;
|
||||
}
|
||||
.with_divider {
|
||||
border-top: 1px solid #e3e6e8;
|
||||
}
|
||||
.userpic_link {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
}
|
||||
.userpic_link:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
.userpic {
|
||||
display: block;
|
||||
border-radius: 50%;
|
||||
overflow: hidden;
|
||||
}
|
||||
.userpic .initials {
|
||||
display: block;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
text-transform: uppercase;
|
||||
user-select: none;
|
||||
}
|
||||
.color_red,
|
||||
.userpic1,
|
||||
.media_call .fill,
|
||||
.media_file .fill,
|
||||
.media_live_location .fill {
|
||||
background-color: #ff5555;
|
||||
}
|
||||
.color_green,
|
||||
.userpic2,
|
||||
.media_call.success .fill,
|
||||
.media_photo .fill {
|
||||
background-color: #64bf47;
|
||||
}
|
||||
.color_yellow,
|
||||
.userpic3,
|
||||
.media_venue .fill {
|
||||
background-color: #ffab00;
|
||||
}
|
||||
.color_blue,
|
||||
.userpic4,
|
||||
.media_audio_file .fill,
|
||||
.media_voice_message .fill {
|
||||
background-color: #4f9cd9;
|
||||
}
|
||||
.color_purple,
|
||||
.userpic5,
|
||||
.media_game .fill {
|
||||
background-color: #9884e8;
|
||||
}
|
||||
.color_pink,
|
||||
.userpic6,
|
||||
.media_invoice .fill {
|
||||
background-color: #e671a5;
|
||||
}
|
||||
.color_sea,
|
||||
.userpic7,
|
||||
.media_location .fill,
|
||||
.media_video .fill {
|
||||
background-color: #47bcd1;
|
||||
}
|
||||
.color_orange,
|
||||
.userpic8,
|
||||
.media_contact .fill {
|
||||
background-color: #ff8c44;
|
||||
}
|
||||
.personal_info {
|
||||
padding: 24px;
|
||||
}
|
||||
.personal_info .userpic .initials {
|
||||
font-size: 30px;
|
||||
}
|
||||
.personal_info .rows {
|
||||
float: left;
|
||||
padding-right: 24px;
|
||||
}
|
||||
.personal_info .names {
|
||||
width: 164px;
|
||||
}
|
||||
.personal_info .info {
|
||||
width: 124px;
|
||||
}
|
||||
.personal_info .bio {
|
||||
width: 400px;
|
||||
}
|
||||
.personal_info .row {
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
a.block_link {
|
||||
display: block;
|
||||
text-decoration: none !important;
|
||||
border-radius: 4px;
|
||||
}
|
||||
a.block_link:hover {
|
||||
text-decoration: none !important;
|
||||
background-color: #f5f7f8;
|
||||
}
|
||||
.sections {
|
||||
padding: 11px 0;
|
||||
}
|
||||
.section {
|
||||
height: 48px;
|
||||
background-position: 24px 12px;
|
||||
background-repeat: no-repeat;
|
||||
background-size: 24px 24px;
|
||||
}
|
||||
.section .counter {
|
||||
float: right;
|
||||
padding: 14px 24px 0;
|
||||
font-size: 15px;
|
||||
}
|
||||
.section .label {
|
||||
padding: 15px 0 0 82px;
|
||||
font-size: 15px;
|
||||
}
|
||||
.list_page .page_about {
|
||||
padding: 16px 24px 0;
|
||||
font-size: 11px;
|
||||
}
|
||||
.list_page .entry_list {
|
||||
padding: 16px 0;
|
||||
}
|
||||
.list_page .entry {
|
||||
padding: 10px 16px;
|
||||
}
|
||||
.list_page .entry .userpic .initials {
|
||||
font-size: 18px;
|
||||
}
|
||||
.list_page .entry .body {
|
||||
margin-left: 66px;
|
||||
}
|
||||
.list_page .entry .name {
|
||||
padding: 4px 0 2px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.list_page .entry .subname {
|
||||
padding-top: 4px;
|
||||
}
|
||||
.list_page .entry .details_entry {
|
||||
padding-top: 4px;
|
||||
}
|
||||
.list_page .entry .info {
|
||||
font-size: 11px;
|
||||
padding-top: 5px;
|
||||
}
|
||||
.history {
|
||||
padding: 16px 0;
|
||||
}
|
||||
.message {
|
||||
margin: 0 -10px;
|
||||
transition: background-color 2.0s ease;
|
||||
}
|
||||
div.selected {
|
||||
background-color: rgba(242,246,250,255);
|
||||
transition: background-color 0.5s ease;
|
||||
}
|
||||
.service {
|
||||
padding: 10px 24px;
|
||||
}
|
||||
.service .body {
|
||||
text-align: center;
|
||||
}
|
||||
.service .userpic_wrap {
|
||||
padding-top: 10px;
|
||||
}
|
||||
.service .userpic {
|
||||
margin: 0 auto;
|
||||
}
|
||||
.service .userpic .initials {
|
||||
font-size: 24px;
|
||||
}
|
||||
.message .userpic .initials {
|
||||
font-size: 16px;
|
||||
}
|
||||
.default {
|
||||
padding: 10px;
|
||||
}
|
||||
.default.joined {
|
||||
margin-top: -10px;
|
||||
}
|
||||
.default .from_name {
|
||||
color: #3892db;
|
||||
font-weight: 700;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
.default .from_name .details {
|
||||
font-weight: normal;
|
||||
}
|
||||
.default .body {
|
||||
margin-left: 60px;
|
||||
}
|
||||
.default .text {
|
||||
word-wrap: break-word;
|
||||
line-height: 150%;
|
||||
}
|
||||
.default .reply_to,
|
||||
.default .media_wrap {
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
.default .media {
|
||||
margin: 0 -10px;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
.default .media .fill,
|
||||
.default .media .thumb {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
.default .media .fill {
|
||||
background-repeat: no-repeat;
|
||||
background-position: 12px 12px;
|
||||
background-size: 24px 24px;
|
||||
}
|
||||
.default .media .title {
|
||||
padding-top: 4px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.default .media .description {
|
||||
color: #000000;
|
||||
padding-top: 4px;
|
||||
font-size: 13px;
|
||||
}
|
||||
.default .media .status {
|
||||
padding-top: 4px;
|
||||
font-size: 13px;
|
||||
}
|
||||
.default .video_file_wrap,
|
||||
.default .animated_wrap {
|
||||
position: relative;
|
||||
}
|
||||
.default .video_file,
|
||||
.default .animated,
|
||||
.default .photo,
|
||||
.default .sticker {
|
||||
display: block;
|
||||
}
|
||||
.video_duration {
|
||||
background: rgba(0, 0, 0, .4);
|
||||
padding: 0px 5px;
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
border-radius: 2px;
|
||||
right: 3px;
|
||||
bottom: 3px;
|
||||
color: #ffffff;
|
||||
font-size: 11px;
|
||||
}
|
||||
.video_play_bg {
|
||||
background: rgba(0, 0, 0, .4);
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
line-height: 0;
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
border-radius: 50%;
|
||||
overflow: hidden;
|
||||
margin: -20px auto 0 -20px;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
pointer-events: none;
|
||||
}
|
||||
.video_play {
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
margin-left: -5px;
|
||||
margin-top: -9px;
|
||||
z-index: 1;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-style: solid;
|
||||
border-width: 9px 0 9px 14px;
|
||||
border-color: transparent transparent transparent #fff;
|
||||
}
|
||||
.gif_play {
|
||||
font-weight: 700;
|
||||
color: #FFF;
|
||||
display: block;
|
||||
line-height: 40px;
|
||||
font-size: 13px;
|
||||
text-align: center;
|
||||
}
|
||||
.pagination {
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.toast_container {
|
||||
position: fixed;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
opacity: 0;
|
||||
transition: opacity 3.0s ease;
|
||||
}
|
||||
.toast_body {
|
||||
margin: 0 -50%;
|
||||
float: left;
|
||||
border-radius: 15px;
|
||||
padding: 10px 20px;
|
||||
background: rgba(0, 0, 0, 0.7);
|
||||
color: #ffffff;
|
||||
}
|
||||
div.toast_shown {
|
||||
opacity: 1;
|
||||
transition: opacity 0.4s ease;
|
||||
}
|
||||
|
||||
.section.calls {
|
||||
background-image: url(../images/section_calls.png);
|
||||
}
|
||||
.section.chats {
|
||||
background-image: url(../images/section_chats.png);
|
||||
}
|
||||
.section.contacts {
|
||||
background-image: url(../images/section_contacts.png);
|
||||
}
|
||||
.section.frequent {
|
||||
background-image: url(../images/section_frequent.png);
|
||||
}
|
||||
.section.photos {
|
||||
background-image: url(../images/section_photos.png);
|
||||
}
|
||||
.section.sessions {
|
||||
background-image: url(../images/section_sessions.png);
|
||||
}
|
||||
.section.web {
|
||||
background-image: url(../images/section_web.png);
|
||||
}
|
||||
.section.other {
|
||||
background-image: url(../images/section_other.png)
|
||||
}
|
||||
.page_header a.content {
|
||||
background-image: url(../images/back.png);
|
||||
}
|
||||
.media_call .fill {
|
||||
background-image: url(../images/media_call.png)
|
||||
}
|
||||
.media_contact .fill {
|
||||
background-image: url(../images/media_contact.png)
|
||||
}
|
||||
.media_file .fill {
|
||||
background-image: url(../images/media_file.png)
|
||||
}
|
||||
.media_game .fill {
|
||||
background-image: url(../images/media_game.png)
|
||||
}
|
||||
.media_live_location .fill,
|
||||
.media_location .fill,
|
||||
.media_venue .fill {
|
||||
background-image: url(../images/media_location.png)
|
||||
}
|
||||
.media_audio_file .fill {
|
||||
background-image: url(../images/media_music.png)
|
||||
}
|
||||
.media_invoice .fill {
|
||||
background-image: url(../images/media_shop.png)
|
||||
}
|
||||
.media_voice_message .fill {
|
||||
background-image: url(../images/media_voice.png)
|
||||
}
|
||||
.media_photo .fill {
|
||||
background-image: url(../images/media_photo.png)
|
||||
}
|
||||
.media_video .fill {
|
||||
background-image: url(../images/media_video.png)
|
||||
}
|
||||
|
||||
@media only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2) {
|
||||
.section.calls {
|
||||
background-image: url(../images/section_calls@2x.png);
|
||||
}
|
||||
.section.chats {
|
||||
background-image: url(../images/section_chats@2x.png);
|
||||
}
|
||||
.section.contacts {
|
||||
background-image: url(../images/section_contacts@2x.png);
|
||||
}
|
||||
.section.frequent {
|
||||
background-image: url(../images/section_frequent@2x.png);
|
||||
}
|
||||
.section.photos {
|
||||
background-image: url(../images/section_photos@2x.png);
|
||||
}
|
||||
.section.sessions {
|
||||
background-image: url(../images/section_sessions@2x.png);
|
||||
}
|
||||
.section.web {
|
||||
background-image: url(../images/section_web@2x.png);
|
||||
}
|
||||
.section.other {
|
||||
background-image: url(../images/section_other@2x.png);
|
||||
}
|
||||
.page_header a.content {
|
||||
background-image: url(../images/back@2x.png);
|
||||
}
|
||||
.media_call .fill {
|
||||
background-image: url(../images/media_call@2x.png)
|
||||
}
|
||||
.media_contact .fill {
|
||||
background-image: url(../images/media_contact@2x.png)
|
||||
}
|
||||
.media_file .fill {
|
||||
background-image: url(../images/media_file@2x.png)
|
||||
}
|
||||
.media_game .fill {
|
||||
background-image: url(../images/media_game@2x.png)
|
||||
}
|
||||
.media_live_location .fill,
|
||||
.media_location .fill,
|
||||
.media_venue .fill {
|
||||
background-image: url(../images/media_location@2x.png)
|
||||
}
|
||||
.media_audio_file .fill {
|
||||
background-image: url(../images/media_music@2x.png)
|
||||
}
|
||||
.media_invoice .fill {
|
||||
background-image: url(../images/media_shop@2x.png)
|
||||
}
|
||||
.media_voice_message .fill {
|
||||
background-image: url(../images/media_voice@2x.png)
|
||||
}
|
||||
.media_photo .fill {
|
||||
background-image: url(../images/media_photo@2x.png)
|
||||
}
|
||||
.media_video .fill {
|
||||
background-image: url(../images/media_video@2x.png)
|
||||
}
|
||||
}
|
||||
BIN
Telegram/Resources/export_html/images/back.png
Normal file
|
After Width: | Height: | Size: 312 B |
BIN
Telegram/Resources/export_html/images/back@2x.png
Normal file
|
After Width: | Height: | Size: 518 B |
BIN
Telegram/Resources/export_html/images/media_call.png
Normal file
|
After Width: | Height: | Size: 417 B |
BIN
Telegram/Resources/export_html/images/media_call@2x.png
Normal file
|
After Width: | Height: | Size: 815 B |
BIN
Telegram/Resources/export_html/images/media_contact.png
Normal file
|
After Width: | Height: | Size: 323 B |
BIN
Telegram/Resources/export_html/images/media_contact@2x.png
Normal file
|
After Width: | Height: | Size: 600 B |
BIN
Telegram/Resources/export_html/images/media_file.png
Normal file
|
After Width: | Height: | Size: 236 B |
BIN
Telegram/Resources/export_html/images/media_file@2x.png
Normal file
|
After Width: | Height: | Size: 408 B |
BIN
Telegram/Resources/export_html/images/media_game.png
Normal file
|
After Width: | Height: | Size: 271 B |
BIN
Telegram/Resources/export_html/images/media_game@2x.png
Normal file
|
After Width: | Height: | Size: 510 B |
BIN
Telegram/Resources/export_html/images/media_location.png
Normal file
|
After Width: | Height: | Size: 480 B |
BIN
Telegram/Resources/export_html/images/media_location@2x.png
Normal file
|
After Width: | Height: | Size: 991 B |
BIN
Telegram/Resources/export_html/images/media_music.png
Normal file
|
After Width: | Height: | Size: 275 B |
BIN
Telegram/Resources/export_html/images/media_music@2x.png
Normal file
|
After Width: | Height: | Size: 464 B |
BIN
Telegram/Resources/export_html/images/media_photo.png
Normal file
|
After Width: | Height: | Size: 243 B |
BIN
Telegram/Resources/export_html/images/media_photo@2x.png
Normal file
|
After Width: | Height: | Size: 458 B |
BIN
Telegram/Resources/export_html/images/media_shop.png
Normal file
|
After Width: | Height: | Size: 377 B |
BIN
Telegram/Resources/export_html/images/media_shop@2x.png
Normal file
|
After Width: | Height: | Size: 790 B |
BIN
Telegram/Resources/export_html/images/media_video.png
Normal file
|
After Width: | Height: | Size: 235 B |
BIN
Telegram/Resources/export_html/images/media_video@2x.png
Normal file
|
After Width: | Height: | Size: 411 B |
BIN
Telegram/Resources/export_html/images/media_voice.png
Normal file
|
After Width: | Height: | Size: 328 B |
BIN
Telegram/Resources/export_html/images/media_voice@2x.png
Normal file
|
After Width: | Height: | Size: 660 B |
BIN
Telegram/Resources/export_html/images/section_calls.png
Normal file
|
After Width: | Height: | Size: 656 B |
BIN
Telegram/Resources/export_html/images/section_calls@2x.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
Telegram/Resources/export_html/images/section_chats.png
Normal file
|
After Width: | Height: | Size: 283 B |
BIN
Telegram/Resources/export_html/images/section_chats@2x.png
Normal file
|
After Width: | Height: | Size: 454 B |
BIN
Telegram/Resources/export_html/images/section_contacts.png
Normal file
|
After Width: | Height: | Size: 508 B |
BIN
Telegram/Resources/export_html/images/section_contacts@2x.png
Normal file
|
After Width: | Height: | Size: 1023 B |
BIN
Telegram/Resources/export_html/images/section_frequent.png
Normal file
|
After Width: | Height: | Size: 771 B |
BIN
Telegram/Resources/export_html/images/section_frequent@2x.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
Telegram/Resources/export_html/images/section_leftchats.png
Normal file
|
After Width: | Height: | Size: 402 B |
BIN
Telegram/Resources/export_html/images/section_leftchats@2x.png
Normal file
|
After Width: | Height: | Size: 619 B |
BIN
Telegram/Resources/export_html/images/section_other.png
Normal file
|
After Width: | Height: | Size: 155 B |
BIN
Telegram/Resources/export_html/images/section_other@2x.png
Normal file
|
After Width: | Height: | Size: 269 B |
BIN
Telegram/Resources/export_html/images/section_photos.png
Normal file
|
After Width: | Height: | Size: 415 B |
BIN
Telegram/Resources/export_html/images/section_photos@2x.png
Normal file
|
After Width: | Height: | Size: 750 B |
BIN
Telegram/Resources/export_html/images/section_sessions.png
Normal file
|
After Width: | Height: | Size: 134 B |
BIN
Telegram/Resources/export_html/images/section_sessions@2x.png
Normal file
|
After Width: | Height: | Size: 216 B |
BIN
Telegram/Resources/export_html/images/section_web.png
Normal file
|
After Width: | Height: | Size: 266 B |
BIN
Telegram/Resources/export_html/images/section_web@2x.png
Normal file
|
After Width: | Height: | Size: 447 B |
189
Telegram/Resources/export_html/js/script.js
Normal file
@@ -0,0 +1,189 @@
|
||||
"use strict";
|
||||
|
||||
window.AllowBackFromHistory = false;
|
||||
function CheckLocation() {
|
||||
var start = "#go_to_message";
|
||||
var hash = location.hash;
|
||||
if (hash.substr(0, start.length) == start) {
|
||||
var messageId = parseInt(hash.substr(start.length));
|
||||
if (messageId) {
|
||||
GoToMessage(messageId);
|
||||
}
|
||||
} else if (hash == "#allow_back") {
|
||||
window.AllowBackFromHistory = true;
|
||||
}
|
||||
}
|
||||
|
||||
function ShowToast(text) {
|
||||
var container = document.createElement("div");
|
||||
container.className = "toast_container";
|
||||
var inner = container.appendChild(document.createElement("div"));
|
||||
inner.className = "toast_body";
|
||||
inner.appendChild(document.createTextNode(text));
|
||||
var appended = document.body.appendChild(container);
|
||||
setTimeout(function () {
|
||||
AddClass(appended, "toast_shown");
|
||||
setTimeout(function () {
|
||||
RemoveClass(appended, "toast_shown");
|
||||
setTimeout(function () {
|
||||
document.body.removeChild(appended);
|
||||
}, 3000);
|
||||
}, 3000);
|
||||
}, 0);
|
||||
}
|
||||
|
||||
function ShowHashtag(tag) {
|
||||
ShowToast("This is a hashtag '#" + tag + "' link.");
|
||||
return false;
|
||||
}
|
||||
|
||||
function ShowCashtag(tag) {
|
||||
ShowToast("This is a cashtag '$" + tag + "' link.");
|
||||
return false;
|
||||
}
|
||||
|
||||
function ShowBotCommand(command) {
|
||||
ShowToast("This is a bot command '/" + command + "' link.");
|
||||
return false;
|
||||
}
|
||||
|
||||
function ShowMentionName() {
|
||||
ShowToast("This is a link to a user mentioned by name.");
|
||||
return false;
|
||||
}
|
||||
|
||||
function AddClass(element, name) {
|
||||
var current = element.className;
|
||||
var expression = new RegExp('(^|\\s)' + name + '(\\s|$)', 'g');
|
||||
if (expression.test(current)) {
|
||||
return;
|
||||
}
|
||||
element.className = current + ' ' + name;
|
||||
}
|
||||
|
||||
function RemoveClass(element, name) {
|
||||
var current = element.className;
|
||||
var expression = new RegExp('(^|\\s)' + name + '(\\s|$)', '');
|
||||
var match = expression.exec(current);
|
||||
while ((match = expression.exec(current)) != null) {
|
||||
if (match[1].length > 0 && match[2].length > 0) {
|
||||
current = current.substr(0, match.index + match[1].length)
|
||||
+ current.substr(match.index + match[0].length);
|
||||
} else {
|
||||
current = current.substr(0, match.index)
|
||||
+ current.substr(match.index + match[0].length);
|
||||
}
|
||||
}
|
||||
element.className = current;
|
||||
}
|
||||
|
||||
function EaseOutQuad(t) {
|
||||
return t * t;
|
||||
}
|
||||
|
||||
function EaseInOutQuad(t) {
|
||||
return (t < 0.5) ? (2 * t * t) : ((4 - 2 * t) * t - 1);
|
||||
}
|
||||
|
||||
function ScrollHeight() {
|
||||
if ("innerHeight" in window) {
|
||||
return window.innerHeight;
|
||||
} else if (document.documentElement) {
|
||||
return document.documentElement.clientHeight;
|
||||
}
|
||||
return document.body.clientHeight;
|
||||
}
|
||||
|
||||
function ScrollTo(top, callback) {
|
||||
var html = document.documentElement;
|
||||
var current = html.scrollTop;
|
||||
var delta = top - current;
|
||||
var finish = function () {
|
||||
html.scrollTop = top;
|
||||
if (callback) {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
if (!window.performance.now || delta == 0) {
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
var transition = EaseOutQuad;
|
||||
var max = 300;
|
||||
if (delta < -max) {
|
||||
current = top + max;
|
||||
delta = -max;
|
||||
} else if (delta > max) {
|
||||
current = top - max;
|
||||
delta = max;
|
||||
} else {
|
||||
transition = EaseInOutQuad;
|
||||
}
|
||||
var duration = 150;
|
||||
var interval = 7;
|
||||
var time = window.performance.now();
|
||||
var animate = function () {
|
||||
var now = window.performance.now();
|
||||
if (now >= time + duration) {
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
var dt = (now - time) / duration;
|
||||
html.scrollTop = Math.round(current + delta * transition(dt));
|
||||
setTimeout(animate, interval);
|
||||
};
|
||||
setTimeout(animate, interval);
|
||||
}
|
||||
|
||||
function ScrollToElement(element, callback) {
|
||||
var header = document.getElementsByClassName("page_header")[0];
|
||||
var headerHeight = header.offsetHeight;
|
||||
var html = document.documentElement;
|
||||
var scrollHeight = ScrollHeight();
|
||||
var available = scrollHeight - headerHeight;
|
||||
var padding = 10;
|
||||
var top = element.offsetTop;
|
||||
var height = element.offsetHeight;
|
||||
var desired = top
|
||||
- Math.max((available - height) / 2, padding)
|
||||
- headerHeight;
|
||||
var scrollTopMax = html.offsetHeight - scrollHeight;
|
||||
ScrollTo(Math.min(desired, scrollTopMax), callback);
|
||||
}
|
||||
|
||||
function GoToMessage(messageId) {
|
||||
var element = document.getElementById("message" + messageId);
|
||||
if (element) {
|
||||
var hash = "#go_to_message" + messageId;
|
||||
if (location.hash != hash) {
|
||||
location.hash = hash;
|
||||
}
|
||||
ScrollToElement(element, function () {
|
||||
AddClass(element, "selected");
|
||||
setTimeout(function () {
|
||||
RemoveClass(element, "selected");
|
||||
}, 1000);
|
||||
});
|
||||
} else {
|
||||
ShowToast("This message was not exported. Maybe it was deleted.");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function GoBack(anchor) {
|
||||
if (!window.AllowBackFromHistory) {
|
||||
return true;
|
||||
}
|
||||
history.back();
|
||||
if (!anchor || !anchor.getAttribute) {
|
||||
return true;
|
||||
}
|
||||
var destination = anchor.getAttribute("href");
|
||||
if (!destination) {
|
||||
return true;
|
||||
}
|
||||
setTimeout(function () {
|
||||
location.href = destination;
|
||||
}, 100);
|
||||
return false;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 380 B |
|
Before Width: | Height: | Size: 708 B |
|
Before Width: | Height: | Size: 316 B |
|
Before Width: | Height: | Size: 579 B |
|
Before Width: | Height: | Size: 210 B After Width: | Height: | Size: 714 B |
|
Before Width: | Height: | Size: 392 B After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 336 B After Width: | Height: | Size: 557 B |
|
Before Width: | Height: | Size: 667 B After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 489 B After Width: | Height: | Size: 701 B |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 559 B After Width: | Height: | Size: 716 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.7 KiB |
BIN
Telegram/Resources/icons/settings_advanced.png
Normal file
|
After Width: | Height: | Size: 290 B |
BIN
Telegram/Resources/icons/settings_advanced@2x.png
Normal file
|
After Width: | Height: | Size: 566 B |
BIN
Telegram/Resources/icons/settings_chat.png
Normal file
|
After Width: | Height: | Size: 248 B |
BIN
Telegram/Resources/icons/settings_chat@2x.png
Normal file
|
After Width: | Height: | Size: 393 B |
BIN
Telegram/Resources/icons/settings_edit.png
Normal file
|
After Width: | Height: | Size: 318 B |
BIN
Telegram/Resources/icons/settings_edit@2x.png
Normal file
|
After Width: | Height: | Size: 647 B |
BIN
Telegram/Resources/icons/settings_faq.png
Normal file
|
After Width: | Height: | Size: 715 B |
BIN
Telegram/Resources/icons/settings_faq@2x.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
Telegram/Resources/icons/settings_information.png
Normal file
|
After Width: | Height: | Size: 589 B |
BIN
Telegram/Resources/icons/settings_information@2x.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
Telegram/Resources/icons/settings_interface_scale.png
Normal file
|
After Width: | Height: | Size: 541 B |
BIN
Telegram/Resources/icons/settings_interface_scale@2x.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
Telegram/Resources/icons/settings_language.png
Normal file
|
After Width: | Height: | Size: 382 B |
BIN
Telegram/Resources/icons/settings_language@2x.png
Normal file
|
After Width: | Height: | Size: 729 B |
BIN
Telegram/Resources/icons/settings_name.png
Normal file
|
After Width: | Height: | Size: 586 B |
BIN
Telegram/Resources/icons/settings_name@2x.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
Telegram/Resources/icons/settings_notifications.png
Normal file
|
After Width: | Height: | Size: 431 B |
BIN
Telegram/Resources/icons/settings_notifications@2x.png
Normal file
|
After Width: | Height: | Size: 930 B |
BIN
Telegram/Resources/icons/settings_phone_number.png
Normal file
|
After Width: | Height: | Size: 715 B |
BIN
Telegram/Resources/icons/settings_phone_number@2x.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
Telegram/Resources/icons/settings_privacy_security.png
Normal file
|
After Width: | Height: | Size: 391 B |
BIN
Telegram/Resources/icons/settings_privacy_security@2x.png
Normal file
|
After Width: | Height: | Size: 770 B |
BIN
Telegram/Resources/icons/settings_username.png
Normal file
|
After Width: | Height: | Size: 992 B |
BIN
Telegram/Resources/icons/settings_username@2x.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
55
Telegram/Resources/langs/cloud_lang.strings
Normal file
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
This file is part of Telegram Desktop,
|
||||
the official desktop application for the Telegram messaging service.
|
||||
|
||||
For license and copyright information please follow this link:
|
||||
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
*/
|
||||
|
||||
"cloud_lng_passport_in_ar" = "Arabic";
|
||||
"cloud_lng_passport_in_az" = "Azerbaijani";
|
||||
"cloud_lng_passport_in_bg" = "Bulgarian";
|
||||
"cloud_lng_passport_in_bn" = "Bangla";
|
||||
"cloud_lng_passport_in_cs" = "Czech";
|
||||
"cloud_lng_passport_in_da" = "Danish";
|
||||
"cloud_lng_passport_in_de" = "German";
|
||||
"cloud_lng_passport_in_dv" = "Divehi";
|
||||
"cloud_lng_passport_in_dz" = "Dzongkha";
|
||||
"cloud_lng_passport_in_el" = "Greek";
|
||||
"cloud_lng_passport_in_en" = "English";
|
||||
"cloud_lng_passport_in_es" = "Spanish";
|
||||
"cloud_lng_passport_in_et" = "Estonian";
|
||||
"cloud_lng_passport_in_fa" = "Persian";
|
||||
"cloud_lng_passport_in_fr" = "French";
|
||||
"cloud_lng_passport_in_he" = "Hebrew";
|
||||
"cloud_lng_passport_in_hr" = "Croatian";
|
||||
"cloud_lng_passport_in_hu" = "Hungarian";
|
||||
"cloud_lng_passport_in_hy" = "Armenian";
|
||||
"cloud_lng_passport_in_id" = "Indonesian";
|
||||
"cloud_lng_passport_in_is" = "Icelandic";
|
||||
"cloud_lng_passport_in_it" = "Italian";
|
||||
"cloud_lng_passport_in_ja" = "Japanese";
|
||||
"cloud_lng_passport_in_ka" = "Georgian";
|
||||
"cloud_lng_passport_in_km" = "Khmer";
|
||||
"cloud_lng_passport_in_ko" = "Korean";
|
||||
"cloud_lng_passport_in_lo" = "Lao";
|
||||
"cloud_lng_passport_in_lt" = "Lithuanian";
|
||||
"cloud_lng_passport_in_lv" = "Latvian";
|
||||
"cloud_lng_passport_in_mk" = "Macedonian";
|
||||
"cloud_lng_passport_in_mn" = "Mongolian";
|
||||
"cloud_lng_passport_in_ms" = "Malay";
|
||||
"cloud_lng_passport_in_my" = "Burmese";
|
||||
"cloud_lng_passport_in_ne" = "Nepali";
|
||||
"cloud_lng_passport_in_nl" = "Dutch";
|
||||
"cloud_lng_passport_in_pl" = "Polish";
|
||||
"cloud_lng_passport_in_pt" = "Portuguese";
|
||||
"cloud_lng_passport_in_ro" = "Romanian";
|
||||
"cloud_lng_passport_in_ru" = "Russian";
|
||||
"cloud_lng_passport_in_sk" = "Slovak";
|
||||
"cloud_lng_passport_in_sl" = "Slovenian";
|
||||
"cloud_lng_passport_in_th" = "Thai";
|
||||
"cloud_lng_passport_in_tk" = "Turkmen";
|
||||
"cloud_lng_passport_in_tr" = "Turkish";
|
||||
"cloud_lng_passport_in_uk" = "Ukrainian";
|
||||
"cloud_lng_passport_in_uz" = "Uzbek";
|
||||
"cloud_lng_passport_in_vi" = "Vietnamese";
|
||||
@@ -267,7 +267,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_bio_placeholder" = "Bio";
|
||||
"lng_bio_about" = "You can add a few lines about yourself. Anyone who opens your profile will see this text.";
|
||||
|
||||
"lng_settings_section_info" = "Info";
|
||||
"lng_settings_section_info" = "My info";
|
||||
"lng_settings_username" = "Username:";
|
||||
"lng_settings_choose_username" = "Choose username";
|
||||
"lng_settings_empty_bio" = "None";
|
||||
@@ -294,6 +294,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_languages" = "Languages";
|
||||
"lng_sure_save_language" = "Telegram will restart in order to change language";
|
||||
"lng_settings_update_automatically" = "Update automatically";
|
||||
"lng_settings_install_beta" = "Install beta versions";
|
||||
"lng_settings_current_version_label" = "Version {version}:";
|
||||
"lng_settings_current_version" = "Version {version}";
|
||||
"lng_settings_check_now" = "Check for updates";
|
||||
@@ -324,10 +325,49 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_settings_bg_use_default" = "Use default color theme";
|
||||
"lng_settings_bg_from_gallery" = "Choose from gallery";
|
||||
"lng_settings_bg_from_file" = "Choose from file";
|
||||
"lng_settings_bg_edit_theme" = "Edit theme";
|
||||
"lng_settings_bg_edit_theme" = "Launch theme editor";
|
||||
"lng_settings_bg_tile" = "Tile background";
|
||||
"lng_settings_adaptive_wide" = "Adaptive layout for wide screens";
|
||||
|
||||
"lng_settings_language" = "Language";
|
||||
"lng_settings_default_scale" = "Default interface scale";
|
||||
"lng_settings_edit_info" = "Edit information";
|
||||
"lng_settings_connection_type" = "Connection type";
|
||||
"lng_settings_downloading_update" = "Downloading update {progress}...";
|
||||
"lng_settings_use_night_mode" = "Use night mode";
|
||||
"lng_settings_privacy_title" = "Privacy";
|
||||
"lng_settings_last_seen" = "Last seen";
|
||||
"lng_settings_calls" = "Voice calls";
|
||||
"lng_settings_groups_invite" = "Groups";
|
||||
"lng_settings_group_privacy_about" = "Change who can add you to groups and channel.";
|
||||
"lng_settings_sessions_about" = "Control your sessions on other devices.";
|
||||
"lng_settings_passcode_disable" = "Disable passcode";
|
||||
"lng_settings_password_disable" = "Disable cloud password";
|
||||
"lng_settings_about_bio" = "Any details such as age, occupation or city.\nExample: 23 y.o. designer from San Francisco";
|
||||
"lng_settings_name_label" = "Name";
|
||||
"lng_settings_username_label" = "Username";
|
||||
"lng_settings_phone_label" = "Phone number";
|
||||
"lng_settings_username_add" = "Add username";
|
||||
"lng_settings_close_sure" = "Are you sure you want to close this page? You didn't save your changes.";
|
||||
"lng_settings_peer_to_peer" = "Peer-to-Peer";
|
||||
"lng_settings_peer_to_peer_about" = "Disabling peer-to-peer will relay all calls through Telegram servers to avoid revealing your IP address, but may slightly decrease audio quality.";
|
||||
"lng_settings_advanced" = "Advanced";
|
||||
"lng_settings_stickers_emoji" = "Stickers and emoji";
|
||||
"lng_settings_messages" = "Messages";
|
||||
"lng_settings_themes" = "Themes";
|
||||
"lng_settings_data_storage" = "Data and storage";
|
||||
"lng_settings_information" = "Edit profile";
|
||||
"lng_settings_passcode_title" = "Local passcode";
|
||||
"lng_settings_password_title" = "Two-step verification";
|
||||
"lng_settings_sessions_title" = "Active sessions";
|
||||
"lng_settings_destroy_title" = "Delete my account";
|
||||
"lng_settings_network_proxy" = "Network and proxy";
|
||||
"lng_settings_version_info" = "Version and updates";
|
||||
"lng_settings_system_integration" = "System integration";
|
||||
"lng_settings_performance" = "Performance";
|
||||
"lng_settings_enable_animations" = "Enable animations";
|
||||
"lng_settings_autoplay_gifs" = "Autoplay GIFs";
|
||||
|
||||
"lng_backgrounds_header" = "Choose your new chat background";
|
||||
"lng_theme_sure_keep" = "Keep this theme?";
|
||||
"lng_theme_reverting#one" = "Reverting to the old theme in {count} second.";
|
||||
@@ -335,10 +375,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_theme_keep_changes" = "Keep changes";
|
||||
"lng_theme_revert" = "Revert";
|
||||
|
||||
"lng_download_path_dont_ask" = "Don't ask download path for each file";
|
||||
"lng_download_path_label" = "Download path:";
|
||||
"lng_download_path_temp" = "temp folder";
|
||||
"lng_download_path_default" = "default folder";
|
||||
"lng_download_path_ask" = "Ask download path for each file";
|
||||
"lng_download_path" = "Download path";
|
||||
"lng_download_path_temp" = "Temp folder";
|
||||
"lng_download_path_default" = "Default folder";
|
||||
"lng_download_path_clear" = "Clear all";
|
||||
"lng_download_path_header" = "Choose download path";
|
||||
"lng_download_path_default_radio" = "Telegram folder in system «Downloads»";
|
||||
@@ -355,14 +395,28 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_settings_section_privacy" = "Privacy and Security";
|
||||
|
||||
"lng_local_storage_title" = "Local storage";
|
||||
"lng_settings_no_data_cached" = "No cached data found!";
|
||||
"lng_settings_images_cached#one" = "{count} image, {size}";
|
||||
"lng_settings_images_cached#other" = "{count} images, {size}";
|
||||
"lng_settings_audios_cached#one" = "{count} voice message, {size}";
|
||||
"lng_settings_audios_cached#other" = "{count} voice messages, {size}";
|
||||
"lng_local_storage_empty" = "No cached files";
|
||||
"lng_local_storage_image#one" = "{count} image";
|
||||
"lng_local_storage_image#other" = "{count} images";
|
||||
"lng_local_storage_sticker#one" = "{count} sticker";
|
||||
"lng_local_storage_sticker#other" = "{count} stickers";
|
||||
"lng_local_storage_voice#one" = "{count} voice message";
|
||||
"lng_local_storage_voice#other" = "{count} voice messages";
|
||||
"lng_local_storage_round#one" = "{count} video message";
|
||||
"lng_local_storage_round#other" = "{count} video messages";
|
||||
"lng_local_storage_animation#one" = "{count} animation";
|
||||
"lng_local_storage_animation#other" = "{count} animations";
|
||||
"lng_local_storage_size_limit" = "Total size limit: {size}";
|
||||
"lng_local_storage_time_limit" = "Clear files older than: {limit}";
|
||||
"lng_local_storage_limit_weeks#one" = "{count} week";
|
||||
"lng_local_storage_limit_weeks#other" = "{count} weeks";
|
||||
"lng_local_storage_limit_months#one" = "{count} month";
|
||||
"lng_local_storage_limit_months#other" = "{count} months";
|
||||
"lng_local_storage_limit_never" = "Never";
|
||||
"lng_local_storage_summary" = "Summary";
|
||||
"lng_local_storage_clear_some" = "Clear";
|
||||
"lng_local_storage_clear" = "Clear all";
|
||||
"lng_local_storage_clearing" = "Clearing...";
|
||||
"lng_local_storage_cleared" = "Cleared!";
|
||||
|
||||
"lng_settings_section_advanced_settings" = "Advanced Settings";
|
||||
"lng_settings_enable_night_theme" = "Enable night mode";
|
||||
@@ -376,8 +430,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_passcode_remove" = "Remove local passcode";
|
||||
"lng_passcode_turn_off" = "Turn off";
|
||||
"lng_passcode_autolock" = "Auto-Lock";
|
||||
"lng_passcode_autolock_away" = "Auto-Lock if away for:";
|
||||
"lng_passcode_autolock_inactive" = "Auto-Lock if inactive for:";
|
||||
"lng_passcode_autolock_away" = "Auto-Lock if away for...";
|
||||
"lng_passcode_autolock_inactive" = "Auto-Lock if inactive for...";
|
||||
"lng_passcode_autolock_minutes#one" = "{count} minute";
|
||||
"lng_passcode_autolock_minutes#other" = "{count} minutes";
|
||||
"lng_passcode_autolock_hours#one" = "{count} hour";
|
||||
@@ -423,7 +477,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_cloud_password_is_same" = "Password was not changed";
|
||||
"lng_cloud_password_passport_losing" = "Warning! All data saved in your Telegram Passport will be lost!";
|
||||
|
||||
"lng_connection_type" = "Connection type:";
|
||||
"lng_connection_auto_connecting" = "Default (connecting...)";
|
||||
"lng_connection_auto" = "Default ({transport} used)";
|
||||
"lng_connection_proxy_connecting" = "Connecting through proxy...";
|
||||
@@ -465,11 +518,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_proxy_sponsor_warning" = "This proxy may display a sponsored channel in your chat list. This doesn't reveal any of your Telegram traffic.";
|
||||
|
||||
"lng_settings_blocked_users" = "Blocked users";
|
||||
"lng_settings_last_seen_privacy" = "Last seen privacy";
|
||||
"lng_settings_calls_privacy" = "Phone calls privacy";
|
||||
"lng_settings_groups_invite_privacy" = "Group invite settings";
|
||||
"lng_settings_show_sessions" = "Show all sessions";
|
||||
"lng_settings_self_destruct" = "Account self-destruct settings";
|
||||
"lng_settings_export_data" = "Export Telegram data";
|
||||
"lng_settings_destroy_if" = "If away for...";
|
||||
"lng_settings_change_phone" = "Change phone number";
|
||||
|
||||
"lng_settings_reset" = "Terminate all other sessions";
|
||||
@@ -508,38 +559,29 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_edit_privacy_exceptions" = "Add exceptions";
|
||||
|
||||
"lng_edit_privacy_lastseen_title" = "Last seen privacy";
|
||||
"lng_edit_privacy_lastseen_description" = "You can choose who can see your last seen time:";
|
||||
"lng_edit_privacy_lastseen_header" = "Who can see your last seen time";
|
||||
"lng_edit_privacy_lastseen_warning" = "Important: you won't be able to see Last Seen times for people with whom you don't share your Last Seen time. Approximate last seen will be shown instead (recently, within a week, within a month).";
|
||||
"lng_edit_privacy_lastseen_always_empty" = "Always share with";
|
||||
"lng_edit_privacy_lastseen_always#one" = "Always share with {count} user";
|
||||
"lng_edit_privacy_lastseen_always#other" = "Always share with {count} users";
|
||||
"lng_edit_privacy_lastseen_never_empty" = "Never share with";
|
||||
"lng_edit_privacy_lastseen_never#one" = "Never share with {count} user";
|
||||
"lng_edit_privacy_lastseen_never#other" = "Never share with {count} users";
|
||||
"lng_edit_privacy_exceptions_count#one" = "{count} user";
|
||||
"lng_edit_privacy_exceptions_count#other" = "{count} users";
|
||||
"lng_edit_privacy_exceptions_add" = "Add users";
|
||||
"lng_edit_privacy_lastseen_exceptions" = "These settings will override the values above.";
|
||||
"lng_edit_privacy_lastseen_always_title" = "Always share with";
|
||||
"lng_edit_privacy_lastseen_never_title" = "Never share with";
|
||||
|
||||
"lng_edit_privacy_groups_title" = "Group invite settings";
|
||||
"lng_edit_privacy_groups_description" = "You can choose who can add you to groups and channels with granular precision:";
|
||||
"lng_edit_privacy_groups_header" = "Who can invite you to groups and channels";
|
||||
"lng_edit_privacy_groups_always_empty" = "Always allow";
|
||||
"lng_edit_privacy_groups_always#one" = "Always allow {count} user";
|
||||
"lng_edit_privacy_groups_always#other" = "Always allow {count} users";
|
||||
"lng_edit_privacy_groups_never_empty" = "Never allow";
|
||||
"lng_edit_privacy_groups_never#one" = "Never allow {count} user";
|
||||
"lng_edit_privacy_groups_never#other" = "Never allow {count} users";
|
||||
"lng_edit_privacy_groups_exceptions" = "These users will or will not be able to add you to groups and channels regardless of the settings above.";
|
||||
"lng_edit_privacy_groups_always_title" = "Always allow";
|
||||
"lng_edit_privacy_groups_never_title" = "Never allow";
|
||||
|
||||
"lng_edit_privacy_calls_title" = "Telegram call privacy";
|
||||
"lng_edit_privacy_calls_description" = "You can restrict who can call you:";
|
||||
"lng_edit_privacy_calls_title" = "Voice calls privacy";
|
||||
"lng_edit_privacy_calls_header" = "Who can call you";
|
||||
"lng_edit_privacy_calls_always_empty" = "Always allow";
|
||||
"lng_edit_privacy_calls_always#one" = "Always allow {count} user";
|
||||
"lng_edit_privacy_calls_always#other" = "Always allow {count} users";
|
||||
"lng_edit_privacy_calls_never_empty" = "Never allow";
|
||||
"lng_edit_privacy_calls_never#one" = "Never allow {count} user";
|
||||
"lng_edit_privacy_calls_never#other" = "Never allow {count} users";
|
||||
"lng_edit_privacy_calls_exceptions" = "These users will or will not be able to call you regardless of the settings above.";
|
||||
"lng_edit_privacy_calls_always_title" = "Always allow";
|
||||
"lng_edit_privacy_calls_never_title" = "Never allow";
|
||||
@@ -671,6 +713,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_profile_delete_conversation" = "Delete conversation";
|
||||
"lng_profile_block_user" = "Block user";
|
||||
"lng_profile_unblock_user" = "Unblock user";
|
||||
"lng_profile_export_chat" = "Export chat history";
|
||||
"lng_profile_export_channel" = "Export channel history";
|
||||
"lng_media_selected_photo#one" = "{count} Photo";
|
||||
"lng_media_selected_photo#other" = "{count} Photos";
|
||||
"lng_media_selected_video#one" = "{count} Video";
|
||||
@@ -925,15 +969,15 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_media_video" = "Video";
|
||||
"lng_media_audio" = "Voice message";
|
||||
|
||||
"lng_media_auto_settings" = "Automatic media download settings";
|
||||
"lng_media_auto_photo" = "Automatic photo download";
|
||||
"lng_media_auto_audio" = "Automatic voice message download";
|
||||
"lng_media_auto_gif" = "Automatic GIF download";
|
||||
"lng_media_auto_settings" = "Automatic media download";
|
||||
"lng_media_auto_title" = "Automatically download";
|
||||
"lng_media_photo_title" = "Photos";
|
||||
"lng_media_audio_title" = "Voice messages";
|
||||
"lng_media_gif_title" = "GIFs and animations";
|
||||
"lng_media_auto_private_chats" = "Private chats";
|
||||
"lng_media_auto_groups" = "Groups and channels";
|
||||
"lng_media_auto_play" = "Autoplay";
|
||||
|
||||
"lng_emoji_category0" = "Frequently used";
|
||||
"lng_emoji_category1" = "People";
|
||||
"lng_emoji_category2" = "Nature";
|
||||
"lng_emoji_category3" = "Food & Drink";
|
||||
@@ -972,7 +1016,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_stickers_packs_archived" = "Some of your unused stickers have been archived to make room for the sets you've activated.";
|
||||
"lng_stickers_copied" = "Sticker pack link copied to clipboard.";
|
||||
"lng_stickers_default_set" = "Great Minds";
|
||||
"lng_stickers_you_have" = "Manage and reorder sticker packs";
|
||||
"lng_stickers_you_have" = "Manage sticker packs";
|
||||
"lng_stickers_return" = "Undo";
|
||||
"lng_stickers_count#one" = "{count} sticker";
|
||||
"lng_stickers_count#other" = "{count} stickers";
|
||||
@@ -1105,6 +1149,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_context_view_feed_info" = "View feed info";
|
||||
"lng_context_pin_to_top" = "Pin to top";
|
||||
"lng_context_unpin_from_top" = "Unpin from top";
|
||||
"lng_context_mark_unread" = "Mark as unread";
|
||||
"lng_context_mark_read" = "Mark as read";
|
||||
|
||||
"lng_context_promote_admin" = "Promote to admin";
|
||||
"lng_context_edit_permissions" = "Edit permissions";
|
||||
@@ -1548,7 +1594,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_passport_password_wrong" = "The password you entered is not valid.";
|
||||
"lng_passport_header" = "Requested information";
|
||||
"lng_passport_identity_title" = "Identity document";
|
||||
"lng_passport_identity_description" = "Upload a scan of your passport or another ID";
|
||||
"lng_passport_identity_description" = "Upload proof of your identity";
|
||||
"lng_passport_identity_passport" = "Passport";
|
||||
"lng_passport_identity_passport_upload" = "Upload a scan of your passport";
|
||||
"lng_passport_identity_card" = "Identity card";
|
||||
@@ -1567,16 +1613,19 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_passport_address_agreement" = "Tenancy agreement";
|
||||
"lng_passport_address_agreement_upload" = "Upload a scan of your tenancy agreement";
|
||||
"lng_passport_address_registration" = "Passport registration";
|
||||
"lng_passport_address_registration_upload" = "Upload a scan of your passport registration";
|
||||
"lng_passport_address_registration_upload" = "Upload a scan of your passport registration page";
|
||||
"lng_passport_address_temporary" = "Temporary registration";
|
||||
"lng_passport_address_temporary_upload" = "Upload a scan of your temporary registration";
|
||||
"lng_passport_address_about" = "To confirm your address, please upload a scan or photo of the selected document (all pages).";
|
||||
"lng_passport_or_title" = "{document} or {second_document}";
|
||||
"lng_passport_document_type" = "Please choose the type of your document:";
|
||||
"lng_passport_upload_document" = "Upload document";
|
||||
"lng_passport_phone_title" = "Phone number";
|
||||
"lng_passport_phone_description" = "Enter your phone number";
|
||||
"lng_passport_email_title" = "Email";
|
||||
"lng_passport_email_description" = "Enter your email address";
|
||||
"lng_passport_identity_selfie" = "Take a selfie with your document";
|
||||
"lng_passport_translation_needed" = "Upload a translation of your document";
|
||||
"lng_passport_accept_allow" = "You accept the {policy} and allow their {bot} to send you messages.";
|
||||
"lng_passport_allow" = "You allow {bot} to send you messages.";
|
||||
"lng_passport_policy" = "{bot} privacy policy";
|
||||
@@ -1589,24 +1638,30 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_passport_upload_scans" = "Upload scans";
|
||||
"lng_passport_upload_more" = "Upload additional scans";
|
||||
"lng_passport_selfie_title" = "Selfie";
|
||||
"lng_passport_selfie_name" = "Photo";
|
||||
"lng_passport_selfie_description" = "Upload a photo of yourself holding your document. Make sure the ID and your face are clearly visible.";
|
||||
"lng_passport_upload_selfie" = "Upload selfie";
|
||||
"lng_passport_reupload_selfie" = "Reupload selfie";
|
||||
"lng_passport_front_side_title" = "Front side";
|
||||
"lng_passport_front_side_name" = "Scan";
|
||||
"lng_passport_front_side_description" = "Upload front side of your document.";
|
||||
"lng_passport_upload_front_side" = "Upload front side scan";
|
||||
"lng_passport_front_side_description" = "Upload the front side of your document.";
|
||||
"lng_passport_upload_front_side" = "Upload a scan of the front side";
|
||||
"lng_passport_reupload_front_side" = "Reupload a scan of the front side";
|
||||
"lng_passport_reverse_side_title" = "Reverse side";
|
||||
"lng_passport_reverse_side_name" = "Scan";
|
||||
"lng_passport_reverse_side_description" = "Upload reverse side of your document.";
|
||||
"lng_passport_upload_reverse_side" = "Upload reverse side scan";
|
||||
"lng_passport_reverse_side_description" = "Upload the reverse side of your document.";
|
||||
"lng_passport_upload_reverse_side" = "Upload a scan of the reverse side";
|
||||
"lng_passport_reupload_reverse_side" = "Reupload a scan of the reverse side";
|
||||
"lng_passport_main_page_title" = "Main page";
|
||||
"lng_passport_main_page_description" = "Upload the main page of your document.";
|
||||
"lng_passport_upload_main_page" = "Upload a scan of the main page";
|
||||
"lng_passport_reupload_main_page" = "Reupload a scan of the main page";
|
||||
"lng_passport_personal_details" = "Personal details";
|
||||
"lng_passport_personal_details_enter" = "Enter your personal details";
|
||||
"lng_passport_personal_details_enter" = "Fill in your personal details";
|
||||
"lng_passport_document_details" = "Document details";
|
||||
"lng_passport_choose_image" = "Choose scan image";
|
||||
"lng_passport_delete_scan_undo" = "Undo";
|
||||
"lng_passport_scan_uploaded" = "Uploaded on {date}";
|
||||
"lng_passport_first_name" = "Name";
|
||||
"lng_passport_last_name" = "Surname";
|
||||
"lng_passport_first_name" = "First name";
|
||||
"lng_passport_middle_name" = "Middle name";
|
||||
"lng_passport_last_name" = "Last name";
|
||||
"lng_passport_birth_date" = "Date of birth";
|
||||
"lng_passport_gender" = "Gender";
|
||||
"lng_passport_gender_male" = "Male";
|
||||
@@ -1614,14 +1669,19 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_passport_country" = "Country";
|
||||
"lng_passport_residence_country" = "Residence";
|
||||
"lng_passport_country_choose" = "Choose country";
|
||||
"lng_passport_document_number" = "Card Number";
|
||||
"lng_passport_document_number" = "Document Number";
|
||||
"lng_passport_expiry_date" = "Expiry date";
|
||||
"lng_passport_native_name_title" = "Name in document language";
|
||||
"lng_passport_native_name_about" = "Your name in the language of the country ({country}) that issued the document.";
|
||||
"lng_passport_native_name_language" = "Your name in {language}";
|
||||
"lng_passport_native_name_language_about" = "Your name in the language of the country that issued the document.";
|
||||
"lng_passport_address" = "Address";
|
||||
"lng_passport_address_enter" = "Enter your address";
|
||||
"lng_passport_address_enter" = "Please provide your address";
|
||||
"lng_passport_street" = "Street";
|
||||
"lng_passport_city" = "City";
|
||||
"lng_passport_state" = "State";
|
||||
"lng_passport_postcode" = "Postcode";
|
||||
"lng_passport_translation" = "Translation";
|
||||
"lng_passport_use_existing" = "USE {existing}";
|
||||
"lng_passport_use_existing_phone" = "Use the same phone number as on Telegram.";
|
||||
"lng_passport_new_phone" = "Or enter a new phone number";
|
||||
@@ -1643,15 +1703,80 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_passport_delete_email_sure" = "Are you sure you want to delete your email address?";
|
||||
"lng_passport_delete_phone" = "Delete phone number";
|
||||
"lng_passport_delete_phone_sure" = "Are you sure you want to delete your phone number?";
|
||||
"lng_passport_success" = "Authorization successfull!";
|
||||
"lng_passport_success" = "Authorization successful!";
|
||||
"lng_passport_stop_sure" = "Are you sure you want to stop this authorization?";
|
||||
"lng_passport_stop" = "Stop";
|
||||
"lng_passport_restart_sure" = "An unexpected error has occurred. Perhaps some changes were made from a different Telegram application. Would you like to restart this authorization?";
|
||||
"lng_passport_restart" = "Restart";
|
||||
"lng_passport_error_too_large" = "This file is too large.";
|
||||
"lng_passport_error_bad_size" = "This image has bad dimensions.";
|
||||
"lng_passport_error_too_large" = "Sorry, this file is too large.";
|
||||
"lng_passport_error_bad_size" = "Sorry, this image has wrong dimensions.";
|
||||
"lng_passport_error_cant_read" = "Can't read this file. Please choose an image.";
|
||||
"lng_passport_bad_name" = "Use latin characters only.";
|
||||
"lng_passport_bad_name" = "Please use latin characters only.";
|
||||
"lng_passport_wait_upload" = "Please wait while upload is finished.";
|
||||
"lng_passport_app_out_of_date" = "Sorry, your Telegram app is out of date and can't handle this request. Please update Telegram.";
|
||||
|
||||
"lng_export_title" = "Export Personal Data";
|
||||
"lng_export_progress_title" = "Exporting personal data";
|
||||
"lng_export_option_info" = "Account information";
|
||||
"lng_export_option_info_about" = "Your chosen screen name, username, phone number and profile pictures.";
|
||||
"lng_export_option_contacts" = "Contacts list";
|
||||
"lng_export_option_contacts_about" = "If you allow access, contacts are continuously synced with Telegram. You can adjust this in Settings > Privacy & Security on mobile devices.";
|
||||
"lng_export_option_sessions" = "Active sessions";
|
||||
"lng_export_option_sessions_about" = "We store this to display your connected devices in Settings > Privacy & Security > Active Sessions.";
|
||||
"lng_export_header_other" = "Other";
|
||||
"lng_export_option_other" = "Miscellaneous data";
|
||||
"lng_export_option_other_about" = "Other types of data not mentioned above (beta).";
|
||||
"lng_export_header_chats" = "Chat export settings";
|
||||
"lng_export_option_personal_chats" = "Personal chats";
|
||||
"lng_export_option_bot_chats" = "Bot chats";
|
||||
"lng_export_option_private_groups" = "Private groups";
|
||||
"lng_export_option_private_channels" = "Private channels";
|
||||
"lng_export_option_public_groups" = "Public groups";
|
||||
"lng_export_option_public_channels" = "Public channels";
|
||||
"lng_export_option_only_my" = "Only my messages";
|
||||
"lng_export_header_media" = "Media export settings";
|
||||
"lng_export_option_photos" = "Photos";
|
||||
"lng_export_option_video_files" = "Video files";
|
||||
"lng_export_option_voice_messages" = "Voice messages";
|
||||
"lng_export_option_video_messages" = "Round video messages";
|
||||
"lng_export_option_stickers" = "Stickers";
|
||||
"lng_export_option_gifs" = "Animated GIFs";
|
||||
"lng_export_option_files" = "Files";
|
||||
"lng_export_option_size_limit" = "Size limit: {size}";
|
||||
"lng_export_header_format" = "Location and format";
|
||||
"lng_export_option_location" = "Download path: {path}";
|
||||
"lng_export_option_html" = "Human-readable HTML";
|
||||
"lng_export_option_json" = "Machine-readable JSON";
|
||||
"lng_export_start" = "Export";
|
||||
"lng_export_state_initializing" = "Initializing...";
|
||||
"lng_export_state_userpics" = "Profile pictures";
|
||||
"lng_export_state_chats_list" = "Processing chats...";
|
||||
"lng_export_state_chats" = "Chats";
|
||||
"lng_export_state_progress" = "{count} / {total}";
|
||||
"lng_export_progress" = "You can close this window now. Please don't quit Telegram until the data export is completed.";
|
||||
"lng_export_stop" = "Stop";
|
||||
"lng_export_sure_stop" = "Are you sure you want to stop exporting your data?\n\nIf you do, you'll need to start over.";
|
||||
"lng_export_about_done" = "Your data was successfully exported.";
|
||||
"lng_export_done" = "Show my data";
|
||||
"lng_export_finished" = "Data export completed.";
|
||||
"lng_export_total_files" = "Total files: {count}.";
|
||||
"lng_export_total_size" = "Total size: {size}.";
|
||||
"lng_export_folder" = "Choose export folder";
|
||||
"lng_export_invalid" = "Sorry, you have started a new data export, so this data export is now cancelled.";
|
||||
"lng_export_delay" = "Sorry, for security reasons, you will be able to begin downloading your data in {hours}. We have notified all your devices about the export request to make sure it's authorized and to give you time to react if it's not.\n\nPlease come back on {date} and repeat the request using the same device.";
|
||||
"lng_export_delay_less_than_hour" = "less than an hour";
|
||||
"lng_export_delay_hours#one" = "{count} hour";
|
||||
"lng_export_delay_hours#other" = "{count} hours";
|
||||
"lng_export_suggest_title" = "Data export ready";
|
||||
"lng_export_suggest_text" = "You can now download the data you requested. Start exporting data?";
|
||||
"lng_export_suggest_cancel" = "Not now";
|
||||
"lng_export_about_telegram" = "Here is all the data you requested. Remember: we don’t use your data for ad targeting, we don’t sell it to others, and we’re not part of any “family of companies.”\n\nTelegram only keeps the information it needs to function as a feature-rich cloud service – for example, your cloud chats so that you can access them from any devices without using third-party backups, or your contacts so that you can rely on your existing social graph when messaging people on Telegram.\n\nCheck out Settings > Privacy & Security on Telegram's mobile apps for relevant settings.";
|
||||
"lng_export_about_contacts" = "If you allow access, your contacts are continuously synced with Telegram. Thanks to this, you can easily switch to Telegram without losing your existing social graph – and connect with friends across all your devices. We use data about your contacts to let you know when they join Telegram. We also use it to make sure that you see the names you have in your phone book instead of the screen names people choose for themselves.\n\nYou can disable contact syncing or delete your stored contacts in Settings > Privacy & Security on Telegram's mobile apps.";
|
||||
"lng_export_about_frequent" = "This rating shows which people you are likelier to message frequently. Telegram uses this data to populate the 'People' box at the top of the Search section. This rating is also calculated for inline bots so that the app can suggest the bots you are most likely to use in the attachment menu (or when you start a new message with \"@\").\n\nTo delete this data, go to Settings > Privacy & Security and disable 'Suggest Frequent Contacts' (requires Telegram for iOS v.4.8.3 or Telegram for Android v.4.8.10 or higher).";
|
||||
"lng_export_about_sessions" = "We store session info to display your connected devices in Settings > Privacy & Security > Active Sessions.";
|
||||
"lng_export_about_web_sessions" = "We store this to display the websites where you logged in using authentication via Telegram. This information is shown in Settings > Privacy & Security > Active Sessions.";
|
||||
"lng_export_about_chats" = "This page lists all chats from this export and where to look for their data.";
|
||||
"lng_export_about_left_chats" = "Below are the supergroups and channels from this export that you've left or where you were banned.\n\nNote that when you leave a channel or supergroup you've created, you have the option to either delete it, or simply leave (in case you want to rejoin later, or keep the community alive despite not being a member).";
|
||||
|
||||
// Wnd specific
|
||||
|
||||
|
||||
BIN
Telegram/Resources/night-green.tdesktop-theme
Normal file
@@ -1,4 +1,46 @@
|
||||
<RCC>
|
||||
<qresource prefix="/export">
|
||||
<file alias="css/style.css">../export_html/css/style.css</file>
|
||||
<file alias="images/back.png">../export_html/images/back.png</file>
|
||||
<file alias="images/back@2x.png">../export_html/images/back@2x.png</file>
|
||||
<file alias="images/media_call.png">../export_html/images/media_call.png</file>
|
||||
<file alias="images/media_call@2x.png">../export_html/images/media_call@2x.png</file>
|
||||
<file alias="images/media_contact.png">../export_html/images/media_contact.png</file>
|
||||
<file alias="images/media_contact@2x.png">../export_html/images/media_contact@2x.png</file>
|
||||
<file alias="images/media_file.png">../export_html/images/media_file.png</file>
|
||||
<file alias="images/media_file@2x.png">../export_html/images/media_file@2x.png</file>
|
||||
<file alias="images/media_game.png">../export_html/images/media_game.png</file>
|
||||
<file alias="images/media_game@2x.png">../export_html/images/media_game@2x.png</file>
|
||||
<file alias="images/media_location.png">../export_html/images/media_location.png</file>
|
||||
<file alias="images/media_location@2x.png">../export_html/images/media_location@2x.png</file>
|
||||
<file alias="images/media_music.png">../export_html/images/media_music.png</file>
|
||||
<file alias="images/media_music@2x.png">../export_html/images/media_music@2x.png</file>
|
||||
<file alias="images/media_photo.png">../export_html/images/media_photo.png</file>
|
||||
<file alias="images/media_photo@2x.png">../export_html/images/media_photo@2x.png</file>
|
||||
<file alias="images/media_shop.png">../export_html/images/media_shop.png</file>
|
||||
<file alias="images/media_shop@2x.png">../export_html/images/media_shop@2x.png</file>
|
||||
<file alias="images/media_video.png">../export_html/images/media_video.png</file>
|
||||
<file alias="images/media_video@2x.png">../export_html/images/media_video@2x.png</file>
|
||||
<file alias="images/media_voice.png">../export_html/images/media_voice.png</file>
|
||||
<file alias="images/media_voice@2x.png">../export_html/images/media_voice@2x.png</file>
|
||||
<file alias="images/section_calls.png">../export_html/images/section_calls.png</file>
|
||||
<file alias="images/section_calls@2x.png">../export_html/images/section_calls@2x.png</file>
|
||||
<file alias="images/section_chats.png">../export_html/images/section_chats.png</file>
|
||||
<file alias="images/section_chats@2x.png">../export_html/images/section_chats@2x.png</file>
|
||||
<file alias="images/section_contacts.png">../export_html/images/section_contacts.png</file>
|
||||
<file alias="images/section_contacts@2x.png">../export_html/images/section_contacts@2x.png</file>
|
||||
<file alias="images/section_frequent.png">../export_html/images/section_frequent.png</file>
|
||||
<file alias="images/section_frequent@2x.png">../export_html/images/section_frequent@2x.png</file>
|
||||
<file alias="images/section_other.png">../export_html/images/section_other.png</file>
|
||||
<file alias="images/section_other@2x.png">../export_html/images/section_other@2x.png</file>
|
||||
<file alias="images/section_photos.png">../export_html/images/section_photos.png</file>
|
||||
<file alias="images/section_photos@2x.png">../export_html/images/section_photos@2x.png</file>
|
||||
<file alias="images/section_sessions.png">../export_html/images/section_sessions.png</file>
|
||||
<file alias="images/section_sessions@2x.png">../export_html/images/section_sessions@2x.png</file>
|
||||
<file alias="images/section_web.png">../export_html/images/section_web.png</file>
|
||||
<file alias="images/section_web@2x.png">../export_html/images/section_web@2x.png</file>
|
||||
<file alias="js/script.js">../export_html/js/script.js</file>
|
||||
</qresource>
|
||||
<qresource prefix="/gui">
|
||||
<file alias="fonts/OpenSans-Regular.ttf">../fonts/OpenSans-Regular.ttf</file>
|
||||
<file alias="fonts/OpenSans-Bold.ttf">../fonts/OpenSans-Bold.ttf</file>
|
||||
@@ -8,7 +50,9 @@
|
||||
<file alias="art/logo_256.png">../art/logo_256.png</file>
|
||||
<file alias="art/logo_256_no_margin.png">../art/logo_256_no_margin.png</file>
|
||||
<file alias="art/sunrise.jpg">../art/sunrise.jpg</file>
|
||||
<file alias="day-blue.tdesktop-theme">../day-blue.tdesktop-theme</file>
|
||||
<file alias="night.tdesktop-theme">../night.tdesktop-theme</file>
|
||||
<file alias="night-green.tdesktop-theme">../night-green.tdesktop-theme</file>
|
||||
</qresource>
|
||||
<qresource prefix="/sounds">
|
||||
<file alias="msg_incoming.mp3">../sounds/msg_incoming.mp3</file>
|
||||
|
||||
@@ -167,7 +167,7 @@ inputMediaEmpty#9664f57f = InputMedia;
|
||||
inputMediaUploadedPhoto#1e287d04 flags:# file:InputFile stickers:flags.0?Vector<InputDocument> ttl_seconds:flags.1?int = InputMedia;
|
||||
inputMediaPhoto#b3ba0635 flags:# id:InputPhoto ttl_seconds:flags.0?int = InputMedia;
|
||||
inputMediaGeoPoint#f9c44144 geo_point:InputGeoPoint = InputMedia;
|
||||
inputMediaContact#a6e45987 phone_number:string first_name:string last_name:string = InputMedia;
|
||||
inputMediaContact#f8ab7dfb phone_number:string first_name:string last_name:string vcard:string = InputMedia;
|
||||
inputMediaUploadedDocument#5b38c6c1 flags:# nosound_video:flags.3?true file:InputFile thumb:flags.2?InputFile mime_type:string attributes:Vector<DocumentAttribute> stickers:flags.0?Vector<InputDocument> ttl_seconds:flags.1?int = InputMedia;
|
||||
inputMediaDocument#23ab23d2 flags:# id:InputDocument ttl_seconds:flags.0?int = InputMedia;
|
||||
inputMediaVenue#c13d1c11 geo_point:InputGeoPoint title:string address:string provider:string venue_id:string venue_type:string = InputMedia;
|
||||
@@ -186,12 +186,13 @@ inputGeoPointEmpty#e4c123d6 = InputGeoPoint;
|
||||
inputGeoPoint#f3b7acc9 lat:double long:double = InputGeoPoint;
|
||||
|
||||
inputPhotoEmpty#1cd7bf0d = InputPhoto;
|
||||
inputPhoto#fb95c6c4 id:long access_hash:long = InputPhoto;
|
||||
inputPhoto#3bb3b94a id:long access_hash:long file_reference:bytes = InputPhoto;
|
||||
|
||||
inputFileLocation#14637196 volume_id:long local_id:int secret:long = InputFileLocation;
|
||||
inputFileLocation#dfdaabe1 volume_id:long local_id:int secret:long file_reference:bytes = InputFileLocation;
|
||||
inputEncryptedFileLocation#f5235d55 id:long access_hash:long = InputFileLocation;
|
||||
inputDocumentFileLocation#430f0724 id:long access_hash:long version:int = InputFileLocation;
|
||||
inputDocumentFileLocation#196683d9 id:long access_hash:long file_reference:bytes = InputFileLocation;
|
||||
inputSecureFileLocation#cbc7ee28 id:long access_hash:long = InputFileLocation;
|
||||
inputTakeoutFileLocation#29be5899 = InputFileLocation;
|
||||
|
||||
inputAppEvent#770656a8 time:double type:string peer:long data:string = InputAppEvent;
|
||||
|
||||
@@ -211,7 +212,7 @@ storage.fileMp4#b3cea0e4 = storage.FileType;
|
||||
storage.fileWebp#1081464c = storage.FileType;
|
||||
|
||||
fileLocationUnavailable#7c596b46 volume_id:long local_id:int secret:long = FileLocation;
|
||||
fileLocation#53d69076 dc_id:int volume_id:long local_id:int secret:long = FileLocation;
|
||||
fileLocation#91d11eb dc_id:int volume_id:long local_id:int secret:long file_reference:bytes = FileLocation;
|
||||
|
||||
userEmpty#200250ba id:int = User;
|
||||
user#2e13f4c3 flags:# self:flags.10?true contact:flags.11?true mutual_contact:flags.12?true deleted:flags.13?true bot:flags.14?true bot_chat_history:flags.15?true bot_nochats:flags.16?true verified:flags.17?true restricted:flags.18?true min:flags.20?true bot_inline_geo:flags.21?true id:int access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int restriction_reason:flags.18?string bot_inline_placeholder:flags.19?string lang_code:flags.22?string = User;
|
||||
@@ -252,7 +253,7 @@ messageService#9e19a1f6 flags:# out:flags.1?true mentioned:flags.4?true media_un
|
||||
messageMediaEmpty#3ded6320 = MessageMedia;
|
||||
messageMediaPhoto#695150d7 flags:# photo:flags.0?Photo ttl_seconds:flags.2?int = MessageMedia;
|
||||
messageMediaGeo#56e0d474 geo:GeoPoint = MessageMedia;
|
||||
messageMediaContact#5e7d2f39 phone_number:string first_name:string last_name:string user_id:int = MessageMedia;
|
||||
messageMediaContact#cbf24940 phone_number:string first_name:string last_name:string vcard:string user_id:int = MessageMedia;
|
||||
messageMediaUnsupported#9f84f49e = MessageMedia;
|
||||
messageMediaDocument#9cb070d7 flags:# document:flags.0?Document ttl_seconds:flags.2?int = MessageMedia;
|
||||
messageMediaWebPage#a32dd600 webpage:WebPage = MessageMedia;
|
||||
@@ -284,17 +285,17 @@ messageActionBotAllowed#abe9affe domain:string = MessageAction;
|
||||
messageActionSecureValuesSentMe#1b287353 values:Vector<SecureValue> credentials:SecureCredentialsEncrypted = MessageAction;
|
||||
messageActionSecureValuesSent#d95c6154 types:Vector<SecureValueType> = MessageAction;
|
||||
|
||||
dialog#e4def5db flags:# pinned:flags.2?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage = Dialog;
|
||||
dialog#e4def5db flags:# pinned:flags.2?true unread_mark:flags.3?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage = Dialog;
|
||||
|
||||
photoEmpty#2331b22d id:long = Photo;
|
||||
photo#9288dd29 flags:# has_stickers:flags.0?true id:long access_hash:long date:int sizes:Vector<PhotoSize> = Photo;
|
||||
photo#9c477dd8 flags:# has_stickers:flags.0?true id:long access_hash:long file_reference:bytes date:int sizes:Vector<PhotoSize> = Photo;
|
||||
|
||||
photoSizeEmpty#e17e23c type:string = PhotoSize;
|
||||
photoSize#77bfb61b type:string location:FileLocation w:int h:int size:int = PhotoSize;
|
||||
photoCachedSize#e9a734fa type:string location:FileLocation w:int h:int bytes:bytes = PhotoSize;
|
||||
|
||||
geoPointEmpty#1117dd5f = GeoPoint;
|
||||
geoPoint#2049d70c long:double lat:double = GeoPoint;
|
||||
geoPoint#296f104 long:double lat:double access_hash:long = GeoPoint;
|
||||
|
||||
auth.checkedPhone#811ea28e phone_registered:Bool = auth.CheckedPhone;
|
||||
|
||||
@@ -321,6 +322,7 @@ inputReportReasonSpam#58dbcab8 = ReportReason;
|
||||
inputReportReasonViolence#1e22c78d = ReportReason;
|
||||
inputReportReasonPornography#2e59d922 = ReportReason;
|
||||
inputReportReasonOther#e1746d0a text:string = ReportReason;
|
||||
inputReportReasonCopyright#9b89f93a = ReportReason;
|
||||
|
||||
userFull#f220f3f flags:# blocked:flags.0?true phone_calls_available:flags.4?true phone_calls_private:flags.5?true user:User about:flags.1?string link:contacts.Link profile_photo:flags.2?Photo notify_settings:PeerNotifySettings bot_info:flags.3?BotInfo common_chats_count:int = UserFull;
|
||||
|
||||
@@ -344,6 +346,7 @@ contacts.blockedSlice#900802a1 count:int blocked:Vector<ContactBlocked> users:Ve
|
||||
|
||||
messages.dialogs#15ba6c40 dialogs:Vector<Dialog> messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Dialogs;
|
||||
messages.dialogsSlice#71e094f3 count:int dialogs:Vector<Dialog> messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Dialogs;
|
||||
messages.dialogsNotModified#f0e3e596 count:int = messages.Dialogs;
|
||||
|
||||
messages.messages#8c718e87 messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Messages;
|
||||
messages.messagesSlice#b446ae3 count:int messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Messages;
|
||||
@@ -440,6 +443,7 @@ updateFavedStickers#e511996d = Update;
|
||||
updateChannelReadMessagesContents#89893b45 channel_id:int messages:Vector<int> = Update;
|
||||
updateContactsReset#7084a7be = Update;
|
||||
updateChannelAvailableMessages#70db6837 channel_id:int available_min_id:int = Update;
|
||||
updateDialogUnreadMark#e16459c3 flags:# unread:flags.0?true peer:DialogPeer = Update;
|
||||
|
||||
updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State;
|
||||
|
||||
@@ -466,11 +470,11 @@ upload.fileCdnRedirect#f18cda44 dc_id:int file_token:bytes encryption_key:bytes
|
||||
|
||||
dcOption#18b7a10d flags:# ipv6:flags.0?true media_only:flags.1?true tcpo_only:flags.2?true cdn:flags.3?true static:flags.4?true id:int ip_address:string port:int secret:flags.10?bytes = DcOption;
|
||||
|
||||
config#eb7bb160 flags:# phonecalls_enabled:flags.1?true default_p2p_contacts:flags.3?true preload_featured_stickers:flags.4?true ignore_phone_entities:flags.5?true revoke_pm_inbox:flags.6?true blocked_mode:flags.8?true date:int expires:int test_mode:Bool this_dc:int dc_options:Vector<DcOption> chat_size_max:int megagroup_size_max:int forwarded_count_max:int online_update_period_ms:int offline_blur_timeout_ms:int offline_idle_timeout_ms:int online_cloud_timeout_ms:int notify_cloud_delay_ms:int notify_default_delay_ms:int push_chat_period_ms:int push_chat_limit:int saved_gifs_limit:int edit_time_limit:int revoke_time_limit:int revoke_pm_time_limit:int rating_e_decay:int stickers_recent_limit:int stickers_faved_limit:int channels_read_media_period:int tmp_sessions:flags.0?int pinned_dialogs_count_max:int call_receive_timeout_ms:int call_ring_timeout_ms:int call_connect_timeout_ms:int call_packet_timeout_ms:int me_url_prefix:string autoupdate_url_prefix:flags.7?string suggested_lang_code:flags.2?string lang_pack_version:flags.2?int = Config;
|
||||
config#3213dbba flags:# phonecalls_enabled:flags.1?true default_p2p_contacts:flags.3?true preload_featured_stickers:flags.4?true ignore_phone_entities:flags.5?true revoke_pm_inbox:flags.6?true blocked_mode:flags.8?true date:int expires:int test_mode:Bool this_dc:int dc_options:Vector<DcOption> dc_txt_domain_name:string chat_size_max:int megagroup_size_max:int forwarded_count_max:int online_update_period_ms:int offline_blur_timeout_ms:int offline_idle_timeout_ms:int online_cloud_timeout_ms:int notify_cloud_delay_ms:int notify_default_delay_ms:int push_chat_period_ms:int push_chat_limit:int saved_gifs_limit:int edit_time_limit:int revoke_time_limit:int revoke_pm_time_limit:int rating_e_decay:int stickers_recent_limit:int stickers_faved_limit:int channels_read_media_period:int tmp_sessions:flags.0?int pinned_dialogs_count_max:int call_receive_timeout_ms:int call_ring_timeout_ms:int call_connect_timeout_ms:int call_packet_timeout_ms:int me_url_prefix:string autoupdate_url_prefix:flags.7?string gif_search_username:flags.9?string venue_search_username:flags.10?string img_search_username:flags.11?string static_maps_provider:flags.12?string caption_length_max:int message_length_max:int webfile_dc_id:int suggested_lang_code:flags.2?string lang_pack_version:flags.2?int = Config;
|
||||
|
||||
nearestDc#8e1a1775 country:string this_dc:int nearest_dc:int = NearestDc;
|
||||
|
||||
help.appUpdate#8987f311 id:int critical:Bool url:string text:string = help.AppUpdate;
|
||||
help.appUpdate#1da7158f flags:# popup:flags.0?true id:int version:string text:string entities:Vector<MessageEntity> document:flags.1?Document url:flags.2?string = help.AppUpdate;
|
||||
help.noAppUpdate#c45a6536 = help.AppUpdate;
|
||||
|
||||
help.inviteText#18cb9f78 message:string = help.InviteText;
|
||||
@@ -501,10 +505,10 @@ messages.sentEncryptedMessage#560f8935 date:int = messages.SentEncryptedMessage;
|
||||
messages.sentEncryptedFile#9493ff32 date:int file:EncryptedFile = messages.SentEncryptedMessage;
|
||||
|
||||
inputDocumentEmpty#72f0eaae = InputDocument;
|
||||
inputDocument#18798952 id:long access_hash:long = InputDocument;
|
||||
inputDocument#1abfb575 id:long access_hash:long file_reference:bytes = InputDocument;
|
||||
|
||||
documentEmpty#36f8c871 id:long = Document;
|
||||
document#87232bc7 id:long access_hash:long date:int mime_type:string size:int thumb:PhotoSize dc_id:int version:int attributes:Vector<DocumentAttribute> = Document;
|
||||
document#59534e4c id:long access_hash:long file_reference:bytes date:int mime_type:string size:int thumb:PhotoSize dc_id:int attributes:Vector<DocumentAttribute> = Document;
|
||||
|
||||
help.support#17c6b5f6 phone_number:string user:User = help.Support;
|
||||
|
||||
@@ -586,12 +590,11 @@ authorization#7bf2e6f6 hash:long flags:int device_model:string platform:string s
|
||||
|
||||
account.authorizations#1250abde authorizations:Vector<Authorization> = account.Authorizations;
|
||||
|
||||
account.noPassword#5ea182f6 new_salt:bytes new_secure_salt:bytes secure_random:bytes email_unconfirmed_pattern:string = account.Password;
|
||||
account.password#ca39b447 flags:# has_recovery:flags.0?true has_secure_values:flags.1?true current_salt:bytes new_salt:bytes new_secure_salt:bytes secure_random:bytes hint:string email_unconfirmed_pattern:string = account.Password;
|
||||
account.password#ad2641f8 flags:# has_recovery:flags.0?true has_secure_values:flags.1?true has_password:flags.2?true current_algo:flags.2?PasswordKdfAlgo srp_B:flags.2?bytes srp_id:flags.2?long hint:flags.3?string email_unconfirmed_pattern:flags.4?string new_algo:PasswordKdfAlgo new_secure_algo:SecurePasswordKdfAlgo secure_random:bytes = account.Password;
|
||||
|
||||
account.passwordSettings#7bd9c3f1 email:string secure_salt:bytes secure_secret:bytes secure_secret_id:long = account.PasswordSettings;
|
||||
account.passwordSettings#9a5c33e5 flags:# email:flags.0?string secure_settings:flags.1?SecureSecretSettings = account.PasswordSettings;
|
||||
|
||||
account.passwordInputSettings#21ffa60d flags:# new_salt:flags.0?bytes new_password_hash:flags.0?bytes hint:flags.0?string email:flags.1?string new_secure_salt:flags.2?bytes new_secure_secret:flags.2?bytes new_secure_secret_id:flags.2?long = account.PasswordInputSettings;
|
||||
account.passwordInputSettings#c23727c9 flags:# new_algo:flags.0?PasswordKdfAlgo new_password_hash:flags.0?bytes hint:flags.0?string email:flags.1?string new_secure_settings:flags.2?SecureSecretSettings = account.PasswordInputSettings;
|
||||
|
||||
auth.passwordRecovery#137948a5 email_pattern:string = auth.PasswordRecovery;
|
||||
|
||||
@@ -693,7 +696,7 @@ inputBotInlineMessageMediaAuto#3380c786 flags:# message:string entities:flags.1?
|
||||
inputBotInlineMessageText#3dcd7a87 flags:# no_webpage:flags.0?true message:string entities:flags.1?Vector<MessageEntity> reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
||||
inputBotInlineMessageMediaGeo#c1b15d65 flags:# geo_point:InputGeoPoint period:int reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
||||
inputBotInlineMessageMediaVenue#417bbf11 flags:# geo_point:InputGeoPoint title:string address:string provider:string venue_id:string venue_type:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
||||
inputBotInlineMessageMediaContact#2daf01a7 flags:# phone_number:string first_name:string last_name:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
||||
inputBotInlineMessageMediaContact#a6edbffd flags:# phone_number:string first_name:string last_name:string vcard:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
||||
inputBotInlineMessageGame#4b425864 flags:# reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
||||
|
||||
inputBotInlineResult#88bf9319 flags:# id:string type:string title:flags.1?string description:flags.2?string url:flags.3?string thumb:flags.4?InputWebDocument content:flags.5?InputWebDocument send_message:InputBotInlineMessage = InputBotInlineResult;
|
||||
@@ -705,7 +708,7 @@ botInlineMessageMediaAuto#764cf810 flags:# message:string entities:flags.1?Vecto
|
||||
botInlineMessageText#8c7f65e2 flags:# no_webpage:flags.0?true message:string entities:flags.1?Vector<MessageEntity> reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
||||
botInlineMessageMediaGeo#b722de65 flags:# geo:GeoPoint period:int reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
||||
botInlineMessageMediaVenue#8a86659c flags:# geo:GeoPoint title:string address:string provider:string venue_id:string venue_type:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
||||
botInlineMessageMediaContact#35edb4d4 flags:# phone_number:string first_name:string last_name:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
||||
botInlineMessageMediaContact#18d1cdc2 flags:# phone_number:string first_name:string last_name:string vcard:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
||||
|
||||
botInlineResult#11965f3a flags:# id:string type:string title:flags.1?string description:flags.2?string url:flags.3?string thumb:flags.4?WebDocument content:flags.5?WebDocument send_message:BotInlineMessage = BotInlineResult;
|
||||
botInlineMediaResult#17db940b flags:# id:string type:string photo:flags.0?Photo document:flags.1?Document title:flags.2?string description:flags.3?string send_message:BotInlineMessage = BotInlineResult;
|
||||
@@ -748,8 +751,9 @@ topPeerCategoryPeers#fb834291 category:TopPeerCategory count:int peers:Vector<To
|
||||
|
||||
contacts.topPeersNotModified#de266ef5 = contacts.TopPeers;
|
||||
contacts.topPeers#70b772a8 categories:Vector<TopPeerCategoryPeers> chats:Vector<Chat> users:Vector<User> = contacts.TopPeers;
|
||||
contacts.topPeersDisabled#b52c939d = contacts.TopPeers;
|
||||
|
||||
draftMessageEmpty#ba4baec5 = DraftMessage;
|
||||
draftMessageEmpty#1b0c841a flags:# date:flags.0?int = DraftMessage;
|
||||
draftMessage#fd8e711f flags:# no_webpage:flags.1?true reply_to_msg_id:flags.0?int message:string entities:flags.3?Vector<MessageEntity> date:int = DraftMessage;
|
||||
|
||||
messages.featuredStickersNotModified#4ede3cf = messages.FeaturedStickers;
|
||||
@@ -837,14 +841,13 @@ paymentRequestedInfo#909c3f94 flags:# name:flags.0?string phone:flags.1?string e
|
||||
|
||||
paymentSavedCredentialsCard#cdc27a1f id:string title:string = PaymentSavedCredentials;
|
||||
|
||||
webDocument#c61acbd8 url:string access_hash:long size:int mime_type:string attributes:Vector<DocumentAttribute> dc_id:int = WebDocument;
|
||||
webDocument#1c570ed1 url:string access_hash:long size:int mime_type:string attributes:Vector<DocumentAttribute> = WebDocument;
|
||||
webDocumentNoProxy#f9c8bcc6 url:string size:int mime_type:string attributes:Vector<DocumentAttribute> = WebDocument;
|
||||
|
||||
inputWebDocument#9bed434d url:string size:int mime_type:string attributes:Vector<DocumentAttribute> = InputWebDocument;
|
||||
|
||||
inputWebFileLocation#c239d686 url:string access_hash:long = InputWebFileLocation;
|
||||
inputWebFileGeoPointLocation#66275a62 geo_point:InputGeoPoint w:int h:int zoom:int scale:int = InputWebFileLocation;
|
||||
inputWebFileGeoMessageLocation#553f32eb peer:InputPeer msg_id:int w:int h:int zoom:int scale:int = InputWebFileLocation;
|
||||
inputWebFileGeoPointLocation#9f2221c9 geo_point:InputGeoPoint access_hash:long w:int h:int zoom:int scale:int = InputWebFileLocation;
|
||||
|
||||
upload.webFile#21e753bc size:int mime_type:string file_type:storage.FileType mtime:int bytes:bytes = upload.WebFile;
|
||||
|
||||
@@ -992,9 +995,9 @@ secureValueTypeTemporaryRegistration#ea02ec33 = SecureValueType;
|
||||
secureValueTypePhone#b320aadb = SecureValueType;
|
||||
secureValueTypeEmail#8e3ca7ee = SecureValueType;
|
||||
|
||||
secureValue#b4b4b699 flags:# type:SecureValueType data:flags.0?SecureData front_side:flags.1?SecureFile reverse_side:flags.2?SecureFile selfie:flags.3?SecureFile files:flags.4?Vector<SecureFile> plain_data:flags.5?SecurePlainData hash:bytes = SecureValue;
|
||||
secureValue#187fa0ca flags:# type:SecureValueType data:flags.0?SecureData front_side:flags.1?SecureFile reverse_side:flags.2?SecureFile selfie:flags.3?SecureFile translation:flags.6?Vector<SecureFile> files:flags.4?Vector<SecureFile> plain_data:flags.5?SecurePlainData hash:bytes = SecureValue;
|
||||
|
||||
inputSecureValue#67872e8 flags:# type:SecureValueType data:flags.0?SecureData front_side:flags.1?InputSecureFile reverse_side:flags.2?InputSecureFile selfie:flags.3?InputSecureFile files:flags.4?Vector<InputSecureFile> plain_data:flags.5?SecurePlainData = InputSecureValue;
|
||||
inputSecureValue#db21d0a7 flags:# type:SecureValueType data:flags.0?SecureData front_side:flags.1?InputSecureFile reverse_side:flags.2?InputSecureFile selfie:flags.3?InputSecureFile translation:flags.6?Vector<InputSecureFile> files:flags.4?Vector<InputSecureFile> plain_data:flags.5?SecurePlainData = InputSecureValue;
|
||||
|
||||
secureValueHash#ed1ecdb0 type:SecureValueType hash:bytes = SecureValueHash;
|
||||
|
||||
@@ -1004,16 +1007,41 @@ secureValueErrorReverseSide#868a2aa5 type:SecureValueType file_hash:bytes text:s
|
||||
secureValueErrorSelfie#e537ced6 type:SecureValueType file_hash:bytes text:string = SecureValueError;
|
||||
secureValueErrorFile#7a700873 type:SecureValueType file_hash:bytes text:string = SecureValueError;
|
||||
secureValueErrorFiles#666220e9 type:SecureValueType file_hash:Vector<bytes> text:string = SecureValueError;
|
||||
secureValueError#869d758f type:SecureValueType hash:bytes text:string = SecureValueError;
|
||||
secureValueErrorTranslationFile#a1144770 type:SecureValueType file_hash:bytes text:string = SecureValueError;
|
||||
secureValueErrorTranslationFiles#34636dd8 type:SecureValueType file_hash:Vector<bytes> text:string = SecureValueError;
|
||||
|
||||
secureCredentialsEncrypted#33f0ea47 data:bytes hash:bytes secret:bytes = SecureCredentialsEncrypted;
|
||||
|
||||
account.authorizationForm#cb976d53 flags:# selfie_required:flags.1?true required_types:Vector<SecureValueType> values:Vector<SecureValue> errors:Vector<SecureValueError> users:Vector<User> privacy_policy_url:flags.0?string = account.AuthorizationForm;
|
||||
account.authorizationForm#ad2e1cd8 flags:# required_types:Vector<SecureRequiredType> values:Vector<SecureValue> errors:Vector<SecureValueError> users:Vector<User> privacy_policy_url:flags.0?string = account.AuthorizationForm;
|
||||
|
||||
account.sentEmailCode#811f854f email_pattern:string length:int = account.SentEmailCode;
|
||||
|
||||
help.deepLinkInfoEmpty#66afa166 = help.DeepLinkInfo;
|
||||
help.deepLinkInfo#6a4ee832 flags:# update_app:flags.0?true message:string entities:flags.1?Vector<MessageEntity> = help.DeepLinkInfo;
|
||||
|
||||
savedPhoneContact#1142bd56 phone:string first_name:string last_name:string date:int = SavedContact;
|
||||
|
||||
account.takeout#4dba4501 id:long = account.Takeout;
|
||||
|
||||
passwordKdfAlgoUnknown#d45ab096 = PasswordKdfAlgo;
|
||||
passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow#3a912d4a salt1:bytes salt2:bytes g:int p:bytes = PasswordKdfAlgo;
|
||||
|
||||
securePasswordKdfAlgoUnknown#4a8537 = SecurePasswordKdfAlgo;
|
||||
securePasswordKdfAlgoPBKDF2HMACSHA512iter100000#bbf2dda0 salt:bytes = SecurePasswordKdfAlgo;
|
||||
securePasswordKdfAlgoSHA512#86471d92 salt:bytes = SecurePasswordKdfAlgo;
|
||||
|
||||
secureSecretSettings#1527bcac secure_algo:SecurePasswordKdfAlgo secure_secret:bytes secure_secret_id:long = SecureSecretSettings;
|
||||
|
||||
inputCheckPasswordEmpty#9880f658 = InputCheckPasswordSRP;
|
||||
inputCheckPasswordSRP#d27ff082 srp_id:long A:bytes M1:bytes = InputCheckPasswordSRP;
|
||||
|
||||
secureRequiredType#829d99da flags:# native_names:flags.0?true selfie_required:flags.1?true translation_required:flags.2?true type:SecureValueType = SecureRequiredType;
|
||||
secureRequiredTypeOneOf#27477b4 types:Vector<SecureRequiredType> = SecureRequiredType;
|
||||
|
||||
help.passportConfigNotModified#bfb9f457 = help.PassportConfig;
|
||||
help.passportConfig#a098d6af hash:int countries_langs:DataJSON = help.PassportConfig;
|
||||
|
||||
---functions---
|
||||
|
||||
invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X;
|
||||
@@ -1021,18 +1049,19 @@ invokeAfterMsgs#3dc4b4f0 {X:Type} msg_ids:Vector<long> query:!X = X;
|
||||
initConnection#785188b8 {X:Type} flags:# api_id:int device_model:string system_version:string app_version:string system_lang_code:string lang_pack:string lang_code:string proxy:flags.0?InputClientProxy query:!X = X;
|
||||
invokeWithLayer#da9b0d0d {X:Type} layer:int query:!X = X;
|
||||
invokeWithoutUpdates#bf9459b7 {X:Type} query:!X = X;
|
||||
invokeWithMessagesRange#365275f2 {X:Type} range:MessageRange query:!X = X;
|
||||
invokeWithTakeout#aca9fd2e {X:Type} takeout_id:long query:!X = X;
|
||||
|
||||
auth.sendCode#86aef0ec flags:# allow_flashcall:flags.0?true phone_number:string current_number:flags.0?Bool api_id:int api_hash:string = auth.SentCode;
|
||||
auth.signUp#1b067634 phone_number:string phone_code_hash:string phone_code:string first_name:string last_name:string = auth.Authorization;
|
||||
auth.signIn#bcd51581 phone_number:string phone_code_hash:string phone_code:string = auth.Authorization;
|
||||
auth.logOut#5717da40 = Bool;
|
||||
auth.resetAuthorizations#9fab0d1a = Bool;
|
||||
auth.sendInvites#771c1d97 phone_numbers:Vector<string> message:string = Bool;
|
||||
auth.exportAuthorization#e5bfffcd dc_id:int = auth.ExportedAuthorization;
|
||||
auth.importAuthorization#e3ef9613 id:int bytes:bytes = auth.Authorization;
|
||||
auth.bindTempAuthKey#cdd42a05 perm_auth_key_id:long nonce:long expires_at:int encrypted_message:bytes = Bool;
|
||||
auth.importBotAuthorization#67a3ff2c flags:int api_id:int api_hash:string bot_auth_token:string = auth.Authorization;
|
||||
auth.checkPassword#a63011e password_hash:bytes = auth.Authorization;
|
||||
auth.checkPassword#d18b4d16 password:InputCheckPasswordSRP = auth.Authorization;
|
||||
auth.requestPasswordRecovery#d897bc66 = auth.PasswordRecovery;
|
||||
auth.recoverPassword#4ea56e92 code:string = auth.Authorization;
|
||||
auth.resendCode#3ef1a9bf phone_number:string phone_code_hash:string = auth.SentCode;
|
||||
@@ -1061,11 +1090,11 @@ account.updateDeviceLocked#38df3532 period:int = Bool;
|
||||
account.getAuthorizations#e320c158 = account.Authorizations;
|
||||
account.resetAuthorization#df77f3bc hash:long = Bool;
|
||||
account.getPassword#548a30f5 = account.Password;
|
||||
account.getPasswordSettings#bc8d11bb current_password_hash:bytes = account.PasswordSettings;
|
||||
account.updatePasswordSettings#fa7c4b86 current_password_hash:bytes new_settings:account.PasswordInputSettings = Bool;
|
||||
account.getPasswordSettings#9cd4eaf9 password:InputCheckPasswordSRP = account.PasswordSettings;
|
||||
account.updatePasswordSettings#a59b102f password:InputCheckPasswordSRP new_settings:account.PasswordInputSettings = Bool;
|
||||
account.sendConfirmPhoneCode#1516d7bd flags:# allow_flashcall:flags.0?true hash:string current_number:flags.0?Bool = auth.SentCode;
|
||||
account.confirmPhone#5f2178c3 phone_code_hash:string phone_code:string = Bool;
|
||||
account.getTmpPassword#4a82327e password_hash:bytes period:int = account.TmpPassword;
|
||||
account.getTmpPassword#449e0b51 password:InputCheckPasswordSRP period:int = account.TmpPassword;
|
||||
account.getWebAuthorizations#182e6d6f = account.WebAuthorizations;
|
||||
account.resetWebAuthorization#2d01b9ef hash:long = Bool;
|
||||
account.resetWebAuthorizations#682d2594 = Bool;
|
||||
@@ -1079,6 +1108,8 @@ account.sendVerifyPhoneCode#823380b4 flags:# allow_flashcall:flags.0?true phone_
|
||||
account.verifyPhone#4dd3a7f6 phone_number:string phone_code_hash:string phone_code:string = Bool;
|
||||
account.sendVerifyEmailCode#7011509f email:string = account.SentEmailCode;
|
||||
account.verifyEmail#ecba39db email:string code:string = Bool;
|
||||
account.initTakeoutSession#f05b4804 flags:# contacts:flags.0?true message_users:flags.1?true message_chats:flags.2?true message_megagroups:flags.3?true message_channels:flags.4?true files:flags.5?true file_max_size:flags.5?int = account.Takeout;
|
||||
account.finishTakeoutSession#1d2652ee flags:# success:flags.0?true = Bool;
|
||||
|
||||
users.getUsers#d91a548 id:Vector<InputUser> = Vector<User>;
|
||||
users.getFullUser#ca30a5b1 id:InputUser = UserFull;
|
||||
@@ -1099,9 +1130,11 @@ contacts.resolveUsername#f93ccba3 username:string = contacts.ResolvedPeer;
|
||||
contacts.getTopPeers#d4982db5 flags:# correspondents:flags.0?true bots_pm:flags.1?true bots_inline:flags.2?true phone_calls:flags.3?true groups:flags.10?true channels:flags.15?true offset:int limit:int hash:int = contacts.TopPeers;
|
||||
contacts.resetTopPeerRating#1ae373ac category:TopPeerCategory peer:InputPeer = Bool;
|
||||
contacts.resetSaved#879537f1 = Bool;
|
||||
contacts.getSaved#82f1e39f = Vector<SavedContact>;
|
||||
contacts.toggleTopPeers#8514bdda enabled:Bool = Bool;
|
||||
|
||||
messages.getMessages#63c66506 id:Vector<InputMessage> = messages.Messages;
|
||||
messages.getDialogs#191ba9c5 flags:# exclude_pinned:flags.0?true offset_date:int offset_id:int offset_peer:InputPeer limit:int = messages.Dialogs;
|
||||
messages.getDialogs#b098aee6 flags:# exclude_pinned:flags.0?true offset_date:int offset_id:int offset_peer:InputPeer limit:int hash:int = messages.Dialogs;
|
||||
messages.getHistory#dcbb8260 peer:InputPeer offset_id:int offset_date:int add_offset:int limit:int max_id:int min_id:int hash:int = messages.Messages;
|
||||
messages.search#8614ef68 flags:# peer:InputPeer q:string from_id:flags.0?InputUser filter:MessagesFilter min_date:int max_date:int offset_id:int add_offset:int limit:int max_id:int min_id:int hash:int = messages.Messages;
|
||||
messages.readHistory#e306d3a peer:InputPeer max_id:int = messages.AffectedMessages;
|
||||
@@ -1196,6 +1229,10 @@ messages.getRecentLocations#bbc45b09 peer:InputPeer limit:int hash:int = message
|
||||
messages.sendMultiMedia#2095512f flags:# silent:flags.5?true background:flags.6?true clear_draft:flags.7?true peer:InputPeer reply_to_msg_id:flags.0?int multi_media:Vector<InputSingleMedia> = Updates;
|
||||
messages.uploadEncryptedFile#5057c497 peer:InputEncryptedChat file:InputEncryptedFile = EncryptedFile;
|
||||
messages.searchStickerSets#c2b7d08b flags:# exclude_featured:flags.0?true q:string hash:int = messages.FoundStickerSets;
|
||||
messages.getSplitRanges#1cff7e08 = Vector<MessageRange>;
|
||||
messages.markDialogUnread#c286d98f flags:# unread:flags.0?true peer:InputDialogPeer = Bool;
|
||||
messages.getDialogUnreadMarks#22e24e22 = Vector<DialogPeer>;
|
||||
messages.clearAllDrafts#7e58ee9c = Bool;
|
||||
|
||||
updates.getState#edd4882a = updates.State;
|
||||
updates.getDifference#25939651 flags:# pts:int pts_total_limit:flags.0?int date:int qts:int = updates.Difference;
|
||||
@@ -1217,7 +1254,7 @@ upload.getFileHashes#c7025931 location:InputFileLocation offset:int = Vector<Fil
|
||||
|
||||
help.getConfig#c4f9186b = Config;
|
||||
help.getNearestDc#1fb33026 = NearestDc;
|
||||
help.getAppUpdate#ae2de196 = help.AppUpdate;
|
||||
help.getAppUpdate#522d5a7d source:string = help.AppUpdate;
|
||||
help.saveAppLog#6f02f748 events:Vector<InputAppEvent> = Bool;
|
||||
help.getInviteText#4d392343 = help.InviteText;
|
||||
help.getSupport#9cdf08cd = help.Support;
|
||||
@@ -1229,6 +1266,7 @@ help.getProxyData#3d7758e1 = help.ProxyData;
|
||||
help.getTermsOfServiceUpdate#2ca51fd1 = help.TermsOfServiceUpdate;
|
||||
help.acceptTermsOfService#ee72f79a id:DataJSON = Bool;
|
||||
help.getDeepLinkInfo#3fedc75f path:string = help.DeepLinkInfo;
|
||||
help.getPassportConfig#c661ad08 hash:int = help.PassportConfig;
|
||||
|
||||
channels.readHistory#cc104937 channel:InputChannel max_id:int = Bool;
|
||||
channels.deleteMessages#84c1fd4e channel:InputChannel id:Vector<int> = messages.AffectedMessages;
|
||||
@@ -1262,6 +1300,7 @@ channels.setStickers#ea8ca4f9 channel:InputChannel stickerset:InputStickerSet =
|
||||
channels.readMessageContents#eab5dc38 channel:InputChannel id:Vector<int> = Bool;
|
||||
channels.deleteHistory#af369d42 channel:InputChannel max_id:int = Bool;
|
||||
channels.togglePreHistoryHidden#eabbb94c channel:InputChannel enabled:Bool = Updates;
|
||||
channels.getLeftChannels#8341ecc0 offset:int = messages.Chats;
|
||||
|
||||
bots.sendCustomRequest#aa2769ed custom_method:string params:DataJSON = DataJSON;
|
||||
bots.answerWebhookJSONQuery#e6213f4d query_id:long data:DataJSON = Bool;
|
||||
@@ -1287,9 +1326,9 @@ phone.discardCall#78d413a6 peer:InputPhoneCall duration:int reason:PhoneCallDisc
|
||||
phone.setCallRating#1c536a34 peer:InputPhoneCall rating:int comment:string = Updates;
|
||||
phone.saveCallDebug#277add7e peer:InputPhoneCall debug:DataJSON = Bool;
|
||||
|
||||
langpack.getLangPack#9ab5c58e lang_code:string = LangPackDifference;
|
||||
langpack.getStrings#2e1ee318 lang_code:string keys:Vector<string> = Vector<LangPackString>;
|
||||
langpack.getLangPack#f2f2330a lang_pack:string lang_code:string = LangPackDifference;
|
||||
langpack.getStrings#efea3803 lang_pack:string lang_code:string keys:Vector<string> = Vector<LangPackString>;
|
||||
langpack.getDifference#b2e4d7d from_version:int = LangPackDifference;
|
||||
langpack.getLanguages#800fd57d = Vector<LangPackLanguage>;
|
||||
langpack.getLanguages#42c6978f lang_pack:string = Vector<LangPackLanguage>;
|
||||
|
||||
// LAYER 81
|
||||
// LAYER 86
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<Identity Name="TelegramMessengerLLP.TelegramDesktop"
|
||||
ProcessorArchitecture="ARCHITECTURE"
|
||||
Publisher="CN=536BC709-8EE1-4478-AF22-F0F0F26FF64A"
|
||||
Version="1.3.2.0" />
|
||||
Version="1.3.17.0" />
|
||||
<Properties>
|
||||
<DisplayName>Telegram Desktop</DisplayName>
|
||||
<PublisherDisplayName>Telegram Messenger LLP</PublisherDisplayName>
|
||||
|
||||
@@ -34,8 +34,8 @@ IDI_ICON1 ICON "..\\art\\icon256.ico"
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 1,3,2,0
|
||||
PRODUCTVERSION 1,3,2,0
|
||||
FILEVERSION 1,3,17,0
|
||||
PRODUCTVERSION 1,3,17,0
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
@@ -52,10 +52,10 @@ BEGIN
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Telegram Messenger LLP"
|
||||
VALUE "FileDescription", "Telegram Desktop"
|
||||
VALUE "FileVersion", "1.3.2.0"
|
||||
VALUE "FileVersion", "1.3.17.0"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2014-2018"
|
||||
VALUE "ProductName", "Telegram Desktop"
|
||||
VALUE "ProductVersion", "1.3.2.0"
|
||||
VALUE "ProductVersion", "1.3.17.0"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
|
||||
@@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 1,3,2,0
|
||||
PRODUCTVERSION 1,3,2,0
|
||||
FILEVERSION 1,3,17,0
|
||||
PRODUCTVERSION 1,3,17,0
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
@@ -43,10 +43,10 @@ BEGIN
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Telegram Messenger LLP"
|
||||
VALUE "FileDescription", "Telegram Desktop Updater"
|
||||
VALUE "FileVersion", "1.3.2.0"
|
||||
VALUE "FileVersion", "1.3.17.0"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2014-2018"
|
||||
VALUE "ProductName", "Telegram Desktop"
|
||||
VALUE "ProductVersion", "1.3.2.0"
|
||||
VALUE "ProductVersion", "1.3.17.0"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
|
||||
@@ -13,8 +13,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
//Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin)
|
||||
#endif
|
||||
|
||||
bool AlphaChannel = false;
|
||||
quint64 BetaVersion = 0;
|
||||
bool BetaChannel = false;
|
||||
quint64 AlphaVersion = 0;
|
||||
|
||||
const char *PublicKey = "\
|
||||
-----BEGIN RSA PUBLIC KEY-----\n\
|
||||
@@ -24,7 +24,7 @@ BZpkIfKaRcl6XzNJiN28cVwO1Ui5JSa814UAiDHzWUqCaXUiUEQ6NmNTneiGx2sQ\n\
|
||||
-----END RSA PUBLIC KEY-----\
|
||||
";
|
||||
|
||||
const char *PublicAlphaKey = "\
|
||||
const char *PublicBetaKey = "\
|
||||
-----BEGIN RSA PUBLIC KEY-----\n\
|
||||
MIGJAoGBALWu9GGs0HED7KG7BM73CFZ6o0xufKBRQsdnq3lwA8nFQEvmdu+g/I1j\n\
|
||||
0LQ+0IQO7GW4jAgzF/4+soPDb6uHQeNFrlVx1JS9DZGhhjZ5rf65yg11nTCIHZCG\n\
|
||||
@@ -33,11 +33,11 @@ w/CVnbwQOw0g5GBwwFV3r0uTTvy44xx8XXxk+Qknu4eBCsmrAFNnAgMBAAE=\n\
|
||||
";
|
||||
|
||||
extern const char *PrivateKey;
|
||||
extern const char *PrivateAlphaKey;
|
||||
extern const char *PrivateBetaKey;
|
||||
#include "../../../../TelegramPrivate/packer_private.h" // RSA PRIVATE KEYS for update signing
|
||||
#include "../../../../TelegramPrivate/beta_private.h" // private key for beta version file generation
|
||||
#include "../../../../TelegramPrivate/alpha_private.h" // private key for alpha version file generation
|
||||
|
||||
QString countBetaVersionSignature(quint64 version);
|
||||
QString countAlphaVersionSignature(quint64 version);
|
||||
|
||||
// sha1 hash
|
||||
typedef unsigned char uchar;
|
||||
@@ -124,7 +124,7 @@ int32 *hashSha1(const void *data, uint32 len, void *dest) {
|
||||
return (int32*)sha1To;
|
||||
}
|
||||
|
||||
QString BetaSignature;
|
||||
QString AlphaSignature;
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
@@ -144,18 +144,18 @@ int main(int argc, char *argv[])
|
||||
target32 = (string("mac32") == argv[i + 1]);
|
||||
} else if (string("-version") == argv[i] && i + 1 < argc) {
|
||||
version = QString(argv[i + 1]).toInt();
|
||||
} else if (string("-alpha") == argv[i]) {
|
||||
AlphaChannel = true;
|
||||
} else if (string("-beta") == argv[i] && i + 1 < argc) {
|
||||
BetaVersion = QString(argv[i + 1]).toULongLong();
|
||||
if (BetaVersion > version * 1000ULL && BetaVersion < (version + 1) * 1000ULL) {
|
||||
AlphaChannel = false;
|
||||
BetaSignature = countBetaVersionSignature(BetaVersion);
|
||||
if (BetaSignature.isEmpty()) {
|
||||
} else if (string("-beta") == argv[i]) {
|
||||
BetaChannel = true;
|
||||
} else if (string("-alpha") == argv[i] && i + 1 < argc) {
|
||||
AlphaVersion = QString(argv[i + 1]).toULongLong();
|
||||
if (AlphaVersion > version * 1000ULL && AlphaVersion < (version + 1) * 1000ULL) {
|
||||
BetaChannel = false;
|
||||
AlphaSignature = countAlphaVersionSignature(AlphaVersion);
|
||||
if (AlphaSignature.isEmpty()) {
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
cout << "Bad -beta param value passed, should be for the same version: " << version << ", beta: " << BetaVersion << "\n";
|
||||
cout << "Bad -alpha param value passed, should be for the same version: " << version << ", alpha: " << AlphaVersion << "\n";
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@@ -211,9 +211,9 @@ int main(int argc, char *argv[])
|
||||
QDataStream stream(&buffer);
|
||||
stream.setVersion(QDataStream::Qt_5_1);
|
||||
|
||||
if (BetaVersion) {
|
||||
if (AlphaVersion) {
|
||||
stream << quint32(0x7FFFFFFF);
|
||||
stream << quint64(BetaVersion);
|
||||
stream << quint64(AlphaVersion);
|
||||
} else {
|
||||
stream << quint32(version);
|
||||
}
|
||||
@@ -407,7 +407,7 @@ int main(int argc, char *argv[])
|
||||
uint32 siglen = 0;
|
||||
|
||||
cout << "Signing..\n";
|
||||
RSA *prKey = PEM_read_bio_RSAPrivateKey(BIO_new_mem_buf(const_cast<char*>((AlphaChannel || BetaVersion) ? PrivateAlphaKey : PrivateKey), -1), 0, 0, 0);
|
||||
RSA *prKey = PEM_read_bio_RSAPrivateKey(BIO_new_mem_buf(const_cast<char*>((BetaChannel || AlphaVersion) ? PrivateBetaKey : PrivateKey), -1), 0, 0, 0);
|
||||
if (!prKey) {
|
||||
cout << "Could not read RSA private key!\n";
|
||||
return -1;
|
||||
@@ -430,7 +430,7 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
cout << "Checking signature..\n";
|
||||
RSA *pbKey = PEM_read_bio_RSAPublicKey(BIO_new_mem_buf(const_cast<char*>((AlphaChannel || BetaVersion) ? PublicAlphaKey : PublicKey), -1), 0, 0, 0);
|
||||
RSA *pbKey = PEM_read_bio_RSAPublicKey(BIO_new_mem_buf(const_cast<char*>((BetaChannel || AlphaVersion) ? PublicBetaKey : PublicKey), -1), 0, 0, 0);
|
||||
if (!pbKey) {
|
||||
cout << "Could not read RSA public key!\n";
|
||||
return -1;
|
||||
@@ -443,18 +443,18 @@ int main(int argc, char *argv[])
|
||||
cout << "Signature verified!\n";
|
||||
RSA_free(pbKey);
|
||||
#ifdef Q_OS_WIN
|
||||
QString outName(QString("tupdate%1").arg(BetaVersion ? BetaVersion : version));
|
||||
QString outName(QString("tupdate%1").arg(AlphaVersion ? AlphaVersion : version));
|
||||
#elif defined Q_OS_MAC
|
||||
QString outName((target32 ? QString("tmac32upd%1") : QString("tmacupd%1")).arg(BetaVersion ? BetaVersion : version));
|
||||
QString outName((target32 ? QString("tmac32upd%1") : QString("tmacupd%1")).arg(AlphaVersion ? AlphaVersion : version));
|
||||
#elif defined Q_OS_LINUX32
|
||||
QString outName(QString("tlinux32upd%1").arg(BetaVersion ? BetaVersion : version));
|
||||
QString outName(QString("tlinux32upd%1").arg(AlphaVersion ? AlphaVersion : version));
|
||||
#elif defined Q_OS_LINUX64
|
||||
QString outName(QString("tlinuxupd%1").arg(BetaVersion ? BetaVersion : version));
|
||||
QString outName(QString("tlinuxupd%1").arg(AlphaVersion ? AlphaVersion : version));
|
||||
#else
|
||||
#error Unknown platform!
|
||||
#endif
|
||||
if (BetaVersion) {
|
||||
outName += "_" + BetaSignature;
|
||||
if (AlphaVersion) {
|
||||
outName += "_" + AlphaSignature;
|
||||
}
|
||||
QFile out(outName);
|
||||
if (!out.open(QIODevice::WriteOnly)) {
|
||||
@@ -464,14 +464,14 @@ int main(int argc, char *argv[])
|
||||
out.write(compressed);
|
||||
out.close();
|
||||
|
||||
if (BetaVersion) {
|
||||
QString keyName(QString("tbeta_%1_key").arg(BetaVersion));
|
||||
if (AlphaVersion) {
|
||||
QString keyName(QString("talpha_%1_key").arg(AlphaVersion));
|
||||
QFile key(keyName);
|
||||
if (!key.open(QIODevice::WriteOnly)) {
|
||||
cout << "Can't open '" << keyName.toUtf8().constData() << "' for write..\n";
|
||||
return -1;
|
||||
}
|
||||
key.write(BetaSignature.toUtf8());
|
||||
key.write(AlphaSignature.toUtf8());
|
||||
key.close();
|
||||
}
|
||||
|
||||
@@ -480,10 +480,10 @@ int main(int argc, char *argv[])
|
||||
return 0;
|
||||
}
|
||||
|
||||
QString countBetaVersionSignature(quint64 version) { // duplicated in autoupdater.cpp
|
||||
QByteArray cBetaPrivateKey(BetaPrivateKey);
|
||||
if (cBetaPrivateKey.isEmpty()) {
|
||||
cout << "Error: Trying to count beta version signature without beta private key!\n";
|
||||
QString countAlphaVersionSignature(quint64 version) { // duplicated in autoupdater.cpp
|
||||
QByteArray cAlphaPrivateKey(AlphaPrivateKey);
|
||||
if (cAlphaPrivateKey.isEmpty()) {
|
||||
cout << "Error: Trying to count alpha version signature without alpha private key!\n";
|
||||
return QString();
|
||||
}
|
||||
|
||||
@@ -496,27 +496,27 @@ QString countBetaVersionSignature(quint64 version) { // duplicated in autoupdate
|
||||
|
||||
uint32 siglen = 0;
|
||||
|
||||
RSA *prKey = PEM_read_bio_RSAPrivateKey(BIO_new_mem_buf(const_cast<char*>(cBetaPrivateKey.constData()), -1), 0, 0, 0);
|
||||
RSA *prKey = PEM_read_bio_RSAPrivateKey(BIO_new_mem_buf(const_cast<char*>(cAlphaPrivateKey.constData()), -1), 0, 0, 0);
|
||||
if (!prKey) {
|
||||
cout << "Error: Could not read beta private key!\n";
|
||||
cout << "Error: Could not read alpha private key!\n";
|
||||
return QString();
|
||||
}
|
||||
if (RSA_size(prKey) != keySize) {
|
||||
cout << "Error: Bad beta private key size: " << RSA_size(prKey) << "\n";
|
||||
cout << "Error: Bad alpha private key size: " << RSA_size(prKey) << "\n";
|
||||
RSA_free(prKey);
|
||||
return QString();
|
||||
}
|
||||
QByteArray signature;
|
||||
signature.resize(keySize);
|
||||
if (RSA_sign(NID_sha1, (const uchar*)(sha1Buffer), shaSize, (uchar*)(signature.data()), &siglen, prKey) != 1) { // count signature
|
||||
cout << "Error: Counting beta version signature failed!\n";
|
||||
cout << "Error: Counting alpha version signature failed!\n";
|
||||
RSA_free(prKey);
|
||||
return QString();
|
||||
}
|
||||
RSA_free(prKey);
|
||||
|
||||
if (siglen != keySize) {
|
||||
cout << "Error: Bad beta version signature length: " << siglen << "\n";
|
||||
cout << "Error: Bad alpha version signature length: " << siglen << "\n";
|
||||
return QString();
|
||||
}
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ bool update() {
|
||||
if (!ReadFile(versionFile, &versionNum, sizeof(DWORD), &readLen, NULL) || readLen != sizeof(DWORD)) {
|
||||
versionNum = 0;
|
||||
} else {
|
||||
if (versionNum == 0x7FFFFFFF) { // beta version
|
||||
if (versionNum == 0x7FFFFFFF) { // alpha version
|
||||
|
||||
} else if (!ReadFile(versionFile, &versionLen, sizeof(DWORD), &readLen, NULL) || readLen != sizeof(DWORD) || versionLen > 63) {
|
||||
versionNum = 0;
|
||||
@@ -339,7 +339,7 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE prevInstance, LPWSTR cmdPara
|
||||
LPWSTR *args;
|
||||
int argsCount;
|
||||
|
||||
bool needupdate = false, autostart = false, debug = false, writeprotected = false, startintray = false, testmode = false;
|
||||
bool needupdate = false, autostart = false, debug = false, writeprotected = false, startintray = false, testmode = false, externalupdater = false;
|
||||
args = CommandLineToArgvW(GetCommandLine(), &argsCount);
|
||||
if (args) {
|
||||
for (int i = 1; i < argsCount; ++i) {
|
||||
@@ -355,6 +355,8 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE prevInstance, LPWSTR cmdPara
|
||||
startintray = true;
|
||||
} else if (equal(args[i], L"-testmode")) {
|
||||
testmode = true;
|
||||
} else if (equal(args[i], L"-externalupdater")) {
|
||||
externalupdater = true;
|
||||
} else if (equal(args[i], L"-writeprotected") && ++i < argsCount) {
|
||||
writeLog(std::wstring(L"Argument: ") + args[i]);
|
||||
writeprotected = true;
|
||||
@@ -425,6 +427,7 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE prevInstance, LPWSTR cmdPara
|
||||
if (debug) targs += L" -debug";
|
||||
if (startintray) targs += L" -startintray";
|
||||
if (testmode) targs += L" -testmode";
|
||||
if (externalupdater) targs += L" -externalupdater";
|
||||
if (!customWorkingDir.empty()) {
|
||||
targs += L" -workdir \"" + customWorkingDir + L"\"";
|
||||
}
|
||||
|
||||
@@ -337,6 +337,7 @@ int main(int argc, char *argv[]) {
|
||||
bool tosettings = false;
|
||||
bool startintray = false;
|
||||
bool testmode = false;
|
||||
bool externalupdater = false;
|
||||
bool customWorkingDir = false;
|
||||
|
||||
char *key = 0;
|
||||
@@ -352,6 +353,8 @@ int main(int argc, char *argv[]) {
|
||||
startintray = true;
|
||||
} else if (equal(argv[i], "-testmode")) {
|
||||
testmode = true;
|
||||
} else if (equal(argv[i], "-externalupdater")) {
|
||||
externalupdater = true;
|
||||
} else if (equal(argv[i], "-tosettings")) {
|
||||
tosettings = true;
|
||||
} else if (equal(argv[i], "-workdir_custom")) {
|
||||
@@ -450,6 +453,7 @@ int main(int argc, char *argv[]) {
|
||||
char p_key[] = "-key";
|
||||
char p_startintray[] = "-startintray";
|
||||
char p_testmode[] = "-testmode";
|
||||
char p_externalupdater[] = "-externalupdater";
|
||||
char p_workdir[] = "-workdir";
|
||||
int argIndex = 0;
|
||||
args[argIndex++] = path;
|
||||
@@ -458,6 +462,7 @@ int main(int argc, char *argv[]) {
|
||||
if (debug) args[argIndex++] = p_debug;
|
||||
if (startintray) args[argIndex++] = p_startintray;
|
||||
if (testmode) args[argIndex++] = p_testmode;
|
||||
if (externalupdater) args[argIndex++] = p_externalupdater;
|
||||
if (tosettings) args[argIndex++] = p_tosettings;
|
||||
if (key) {
|
||||
args[argIndex++] = p_key;
|
||||
|
||||