2
0
mirror of https://github.com/kotatogram/kotatogram-desktop synced 2025-08-30 14:17:45 +00:00

[Branding] App name and logo

Featuring macOS icon contributed by gershik.
This commit is contained in:
RadRussianRus 2022-08-08 04:39:58 +03:00
parent b6258d9954
commit 20376f0b4f
81 changed files with 779 additions and 152 deletions

View File

@ -1265,7 +1265,7 @@ PRIVATE
qrc/emoji_preview.qrc
qrc/telegram/telegram.qrc
qrc/telegram/sounds.qrc
winrc/Telegram.rc
winrc/Kotatogram.rc
winrc/Telegram.manifest
langs/lang.strings
langs/cloud_lang.strings
@ -1290,8 +1290,20 @@ elseif (APPLE)
target_link_libraries(Telegram PRIVATE desktop-app::external_iconv)
endif()
set(icons_path ${CMAKE_CURRENT_SOURCE_DIR}/Telegram/Images.xcassets)
target_add_resource(Telegram ${icons_path})
set(appicon_path ${CMAKE_CURRENT_SOURCE_DIR}/Telegram/Images.xcassets/Icon.iconset)
add_custom_command(
OUTPUT AppIcon.icns
COMMAND iconutil
ARGS
--convert icns
--output AppIcon.icns
${appicon_path}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
set_source_files_properties(AppIcon.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
target_add_resource(Telegram AppIcon.icns)
set(lang_packs
en
@ -1361,10 +1373,15 @@ else()
endif()
endif()
set(bundle_identifier "io.github.kotatogram")
if (LINUX AND DESKTOP_APP_USE_PACKAGED)
set(output_name "kotatogram-desktop")
else()
set(output_name "Kotatogram")
endif()
if (build_macstore)
set(bundle_identifier "org.telegram.desktop")
set(bundle_entitlements "Telegram Lite.entitlements")
set(output_name "Telegram Lite")
set_target_properties(Telegram PROPERTIES
XCODE_ATTRIBUTE_FRAMEWORK_SEARCH_PATHS ${libs_loc}/breakpad/src/client/mac/build/Release
)
@ -1378,19 +1395,13 @@ if (build_macstore)
COMMAND rm -rf $<TARGET_FILE_DIR:Telegram>/../Frameworks/Breakpad.framework/Resources/Inspector
)
else()
set(bundle_identifier "com.tdesktop.Telegram$<$<CONFIG:Debug>:Debug>")
set(bundle_entitlements "Telegram.entitlements")
if (LINUX AND DESKTOP_APP_USE_PACKAGED)
set(output_name "telegram-desktop")
else()
set(output_name "Telegram")
endif()
endif()
set_target_properties(Telegram PROPERTIES
OUTPUT_NAME ${output_name}
MACOSX_BUNDLE_GUI_IDENTIFIER ${bundle_identifier}
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Telegram.plist
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Telegram.plist.in
XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/Telegram/${bundle_entitlements}"
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER ${bundle_identifier}
XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION ${desktop_app_version_string}
@ -1416,13 +1427,13 @@ target_compile_definitions(Telegram
PRIVATE
TDESKTOP_API_ID=${TDESKTOP_API_ID}
TDESKTOP_API_HASH=${TDESKTOP_API_HASH}
G_LOG_DOMAIN="Telegram"
G_LOG_DOMAIN="Kotatogram"
)
if (APPLE
OR "${CMAKE_GENERATOR}" STREQUAL "Ninja Multi-Config"
OR NOT CMAKE_EXECUTABLE_SUFFIX STREQUAL ""
OR NOT "${output_name}" STREQUAL "Telegram")
OR NOT "${output_name}" STREQUAL "Kotatogram")
set(output_folder ${CMAKE_BINARY_DIR})
else()
set(output_folder ${CMAKE_BINARY_DIR}/bin)
@ -1472,6 +1483,11 @@ if ((NOT DESKTOP_APP_DISABLE_AUTOUPDATE OR APPLE) AND NOT build_macstore AND NOT
_other/updater.h
)
nice_target_sources(Updater ${res_loc}
PRIVATE
winrc/KotatogramUpdater.rc
)
set_target_properties(Updater PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${output_folder}
)
@ -1538,16 +1554,16 @@ endif()
if (LINUX AND DESKTOP_APP_USE_PACKAGED)
include(GNUInstallDirs)
configure_file("../lib/xdg/telegramdesktop.metainfo.xml.in" "${CMAKE_CURRENT_BINARY_DIR}/telegramdesktop.metainfo.xml" @ONLY)
generate_appdata_changelog(Telegram "${CMAKE_SOURCE_DIR}/changelog.txt" "${CMAKE_CURRENT_BINARY_DIR}/telegramdesktop.metainfo.xml")
configure_file("../lib/xdg/kotatogramdesktop.metainfo.xml.in" "${CMAKE_CURRENT_BINARY_DIR}/kotatogramdesktop.metainfo.xml" @ONLY)
# generate_appdata_changelog(Telegram "${CMAKE_SOURCE_DIR}/changelog.txt" "${CMAKE_CURRENT_BINARY_DIR}/kotatogramdesktop.metainfo.xml")
install(TARGETS Telegram RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" BUNDLE DESTINATION "${CMAKE_INSTALL_BINDIR}")
install(FILES "Resources/art/icon16.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/16x16/apps" RENAME "telegram.png")
install(FILES "Resources/art/icon32.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/32x32/apps" RENAME "telegram.png")
install(FILES "Resources/art/icon48.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/48x48/apps" RENAME "telegram.png")
install(FILES "Resources/art/icon64.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/64x64/apps" RENAME "telegram.png")
install(FILES "Resources/art/icon128.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/128x128/apps" RENAME "telegram.png")
install(FILES "Resources/art/icon256.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/256x256/apps" RENAME "telegram.png")
install(FILES "Resources/art/icon512.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/512x512/apps" RENAME "telegram.png")
install(FILES "../lib/xdg/telegramdesktop.desktop" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications" RENAME "${TDESKTOP_LAUNCHER_BASENAME}.desktop")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/telegramdesktop.metainfo.xml" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/metainfo" RENAME "${TDESKTOP_LAUNCHER_BASENAME}.metainfo.xml")
install(FILES "Resources/art/icon16.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/16x16/apps" RENAME "kotatogram.png")
install(FILES "Resources/art/icon32.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/32x32/apps" RENAME "kotatogram.png")
install(FILES "Resources/art/icon48.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/48x48/apps" RENAME "kotatogram.png")
install(FILES "Resources/art/icon64.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/64x64/apps" RENAME "kotatogram.png")
install(FILES "Resources/art/icon128.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/128x128/apps" RENAME "kotatogram.png")
install(FILES "Resources/art/icon256.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/256x256/apps" RENAME "kotatogram.png")
install(FILES "Resources/art/icon512.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/512x512/apps" RENAME "kotatogram.png")
install(FILES "../lib/xdg/kotatogramdesktop.desktop" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications" RENAME "${TDESKTOP_LAUNCHER_BASENAME}.desktop")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/kotatogramdesktop.metainfo.xml" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/metainfo" RENAME "${TDESKTOP_LAUNCHER_BASENAME}.metainfo.xml")
endif()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 401 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 452 B

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 884 B

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -85,6 +85,6 @@
</qresource>
<qresource prefix="/misc">
<file alias="default_shortcuts-custom.json">../../default_shortcuts-custom.json</file>
<file alias="telegramdesktop.desktop">../../../../lib/xdg/telegramdesktop.desktop</file>
<file alias="kotatogramdesktop.desktop">../../../../lib/xdg/kotatogramdesktop.desktop</file>
</qresource>
</RCC>

View File

@ -0,0 +1,67 @@
// Microsoft Visual C++ generated resource script.
//
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "winres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON1 ICON "..\\art\\icon256.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,4,9,0
PRODUCTVERSION 1,4,9,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x0L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Kotatogram"
VALUE "FileDescription", "Kotatogram Desktop"
VALUE "FileVersion", "1.4.9.0"
VALUE "LegalCopyright", "Copyright (C) 2019-2022"
VALUE "ProductName", "Kotatogram Desktop"
VALUE "ProductVersion", "1.4.9.0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////

View File

@ -0,0 +1,58 @@
// Microsoft Visual C++ generated resource script.
//
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "winres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,4,9,0
PRODUCTVERSION 1,4,9,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x0L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Kotatogram"
VALUE "FileDescription", "Kotatogram Desktop Updater"
VALUE "FileVersion", "1.4.9.0"
VALUE "LegalCopyright", "Copyright (C) 2019-2022"
VALUE "ProductName", "Kotatogram Desktop"
VALUE "ProductVersion", "1.4.9.0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////

View File

@ -266,7 +266,7 @@ bool update(bool writeprotected) {
writeLog("Error: bad update, has Updater! '%s' equal '%s'", tofname.c_str(), updaterName.c_str());
delFolder();
return false;
} else if (equal(tofname, exePath + "Telegram") && exeName != "Telegram") {
} else if (equal(tofname, exePath + "Kotatogram") && exeName != "Kotatogram") {
string fullBinaryPath = exePath + exeName;
writeLog("Target binary found: '%s', changing to '%s'", tofname.c_str(), fullBinaryPath.c_str());
tofname = fullBinaryPath;
@ -391,7 +391,7 @@ int main(int argc, char *argv[]) {
}
}
if (exeName.empty() || exeName.find('/') != string::npos) {
exeName = "Telegram";
exeName = "Kotatogram";
}
openLog();
@ -423,6 +423,7 @@ int main(int argc, char *argv[]) {
customWorkingDir = false;
writeLog("No workdir, trying to figure it out");
/*
struct passwd *pw = getpwuid(getuid());
if (pw && pw->pw_dir && strlen(pw->pw_dir)) {
string tryDir = pw->pw_dir + string("/.TelegramDesktop/");
@ -436,6 +437,7 @@ int main(int argc, char *argv[]) {
}
}
}
*/
if (workDir.empty()) {
workDir = exePath;
@ -503,7 +505,7 @@ int main(int argc, char *argv[]) {
}
}
writeLog("Executed Telegram, closing log and quitting..");
writeLog("Executed Kotatogram, closing log and quitting..");
closeLog();
return 0;

View File

@ -8,7 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#import <Cocoa/Cocoa.h>
#include <sys/xattr.h>
NSString *appName = @"Telegram.app";
NSString *appName = @"Kotatogram.app";
NSString *appDir = nil;
NSString *workDir = nil;
@ -54,7 +54,7 @@ void RemoveQuarantineAttribute(NSString *path) {
void RemoveQuarantineFromBundle(NSString *path) {
RemoveQuarantineAttribute(path);
RemoveQuarantineAttribute([path stringByAppendingString:@"/Contents/MacOS/Telegram"]);
RemoveQuarantineAttribute([path stringByAppendingString:@"/Contents/MacOS/Kotatogram"]);
RemoveQuarantineAttribute([path stringByAppendingString:@"/Contents/Helpers/crashpad_handler"]);
RemoveQuarantineAttribute([path stringByAppendingString:@"/Contents/Frameworks/Updater"]);
}
@ -163,9 +163,9 @@ int main(int argc, const char * argv[]) {
writeLog([@"Starting update files iteration, path: " stringByAppendingString: srcEnum]);
// Take the Updater (this currently running binary) from the place where it was placed by Telegram
// Take the Updater (this currently running binary) from the place where it was placed by Kotatogram
// and copy it to the folder with the new version of the app (ready),
// so it won't be deleted when we will clear the "Telegram.app/Contents" folder.
// so it won't be deleted when we will clear the "Kotatogram.app/Contents" folder.
NSString *oldVersionUpdaterPath = [appDirFull stringByAppendingString: @"/Contents/Frameworks/Updater" ];
NSString *newVersionUpdaterPath = [srcEnum stringByAppendingString:[[NSArray arrayWithObjects:@"/", appName, @"/Contents/Frameworks/Updater", nil] componentsJoinedByString:@""]];
writeLog([[NSArray arrayWithObjects: @"Copying Updater from old path ", oldVersionUpdaterPath, @" to new path ", newVersionUpdaterPath, nil] componentsJoinedByString:@""]);

View File

@ -204,7 +204,7 @@ bool update() {
writeLog(L"Error: bad update, has Updater.exe! '" + tofname + L"' equal '" + updaterName + L"'");
delFolder();
return false;
} else if (equal(tofname, updateTo + L"Telegram.exe") && exeName != L"Telegram.exe") {
} else if (equal(tofname, updateTo + L"Kotatogram.exe") && exeName != L"Kotatogram.exe") {
wstring fullBinaryPath = updateTo + exeName;
writeLog(L"Target binary found: '" + tofname + L"', changing to '" + fullBinaryPath + L"'");
tofname = fullBinaryPath;
@ -261,7 +261,7 @@ bool update() {
if (!copyResult) {
writeLog(L"Error: failed to copy, asking to retry..");
WCHAR errMsg[2048];
wsprintf(errMsg, L"Failed to update Telegram :(\n%s is not accessible.", tofname.c_str());
wsprintf(errMsg, L"Failed to update Kotatogram :(\n%s is not accessible.", tofname.c_str());
if (MessageBox(0, errMsg, L"Update error!", MB_ICONERROR | MB_RETRYCANCEL) != IDRETRY) {
delFolder();
return false;
@ -280,7 +280,7 @@ void updateRegistry() {
writeLog(L"Updating registry..");
versionStr[versionLen / 2] = 0;
HKEY rkey;
LSTATUS status = RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{53F49750-6209-4FBF-9CA8-7A333C87D1ED}_is1", 0, KEY_QUERY_VALUE | KEY_SET_VALUE, &rkey);
LSTATUS status = RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{C4A4AE8F-B9F7-4CC7-8A6C-BF7EEE87ACA5}_is1", 0, KEY_QUERY_VALUE | KEY_SET_VALUE, &rkey);
if (status == ERROR_SUCCESS) {
writeLog(L"Checking registry install location..");
static const int bufSize = 4096;
@ -307,16 +307,16 @@ void updateRegistry() {
SYSTEMTIME stLocalTime;
GetLocalTime(&stLocalTime);
RegSetValueEx(rkey, L"DisplayVersion", 0, REG_SZ, (const BYTE*)versionStr, ((versionLen / 2) + 1) * sizeof(WCHAR));
wsprintf(nameStr, L"Telegram Desktop version %s", versionStr);
wsprintf(nameStr, L"Kotatogram Desktop version %s", versionStr);
RegSetValueEx(rkey, L"DisplayName", 0, REG_SZ, (const BYTE*)nameStr, (wcslen(nameStr) + 1) * sizeof(WCHAR));
wsprintf(publisherStr, L"Telegram FZ-LLC");
wsprintf(publisherStr, L"Kotatogram");
RegSetValueEx(rkey, L"Publisher", 0, REG_SZ, (const BYTE*)publisherStr, (wcslen(publisherStr) + 1) * sizeof(WCHAR));
wsprintf(icongroupStr, L"Telegram Desktop");
wsprintf(icongroupStr, L"Kotatogram Desktop");
RegSetValueEx(rkey, L"Inno Setup: Icon Group", 0, REG_SZ, (const BYTE*)icongroupStr, (wcslen(icongroupStr) + 1) * sizeof(WCHAR));
wsprintf(dateStr, L"%04d%02d%02d", stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay);
RegSetValueEx(rkey, L"InstallDate", 0, REG_SZ, (const BYTE*)dateStr, (wcslen(dateStr) + 1) * sizeof(WCHAR));
const WCHAR *appURL = L"https://desktop.telegram.org";
const WCHAR *appURL = L"https://t.me/kotatogram";
RegSetValueEx(rkey, L"HelpLink", 0, REG_SZ, (const BYTE*)appURL, (wcslen(appURL) + 1) * sizeof(WCHAR));
RegSetValueEx(rkey, L"URLInfoAbout", 0, REG_SZ, (const BYTE*)appURL, (wcslen(appURL) + 1) * sizeof(WCHAR));
RegSetValueEx(rkey, L"URLUpdateInfo", 0, REG_SZ, (const BYTE*)appURL, (wcslen(appURL) + 1) * sizeof(WCHAR));
@ -379,14 +379,14 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE prevInstance, LPWSTR cmdPara
exeName = args[i];
for (int j = 0, l = exeName.size(); j < l; ++j) {
if (exeName[j] == L'/' || exeName[j] == L'\\') {
exeName = L"Telegram.exe";
exeName = L"Kotatogram.exe";
break;
}
}
}
}
if (exeName.empty()) {
exeName = L"Telegram.exe";
exeName = L"Kotatogram.exe";
}
if (needupdate) writeLog(L"Need to update!");
if (autostart) writeLog(L"From autostart!");
@ -494,7 +494,7 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE prevInstance, LPWSTR cmdPara
return 0;
}
static const WCHAR *_programName = L"Telegram Desktop"; // folder in APPDATA, if current path is unavailable for writing
static const WCHAR *_programName = L"Kotatogram Desktop"; // folder in APPDATA, if current path is unavailable for writing
static const WCHAR *_exeName = L"Updater.exe";
LPTOP_LEVEL_EXCEPTION_FILTER _oldWndExceptionFilter = 0;

View File

@ -1274,7 +1274,7 @@ void Application::RegisterUrlScheme() {
.arguments = qsl("-workdir \"%1\"").arg(cWorkingDir()),
.protocol = qsl("tg"),
.protocolName = qsl("Telegram Link"),
.shortAppName = qsl("tdesktop"),
.shortAppName = qsl("ktgdesktop"),
.longAppName = QCoreApplication::applicationName(),
.displayAppName = AppName.utf16(),
.displayAppDescription = AppName.utf16(),

View File

@ -37,7 +37,7 @@ PreLaunchWindow::PreLaunchWindow(QString title) {
setWindowIcon(Window::CreateIcon());
setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint);
setWindowTitle(title.isEmpty() ? qsl("Telegram") : title);
setWindowTitle(title.isEmpty() ? qsl("Kotatogram") : title);
QPalette p(palette());
p.setColor(QPalette::Window, QColor(255, 255, 255));
@ -179,7 +179,7 @@ NotStartedWindow::NotStartedWindow()
: _label(this)
, _log(this)
, _close(this) {
_label.setText(qsl("Could not start Telegram Desktop!\nYou can see complete log below:"));
_label.setText(qsl("Could not start Kotatogram Desktop!\nYou can see complete log below:"));
_log.setPlainText(Logs::full());
@ -322,9 +322,9 @@ LastCrashedWindow::LastCrashedWindow(
[=] { networkSettings(); });
if (_sendingState == SendingNoReport) {
_label.setText(qsl("Last time Telegram Desktop was not closed properly."));
_label.setText(qsl("Last time Kotatogram Desktop was not closed properly."));
} else {
_label.setText(qsl("Last time Telegram Desktop crashed :("));
_label.setText(qsl("Last time Kotatogram Desktop crashed :("));
}
if (_updaterData) {
@ -399,7 +399,7 @@ LastCrashedWindow::LastCrashedWindow(
}
}
_pleaseSendReport.setText(qsl("Please send us a crash report."));
_pleaseSendReport.setText(qsl("You can view and save your crash report here."));
_yourReportName.setText(qsl("Your Report Tag: %1\nYour User Tag: %2").arg(QString(_minidumpName).replace(".dmp", "")).arg(launcher->installationTag(), 0, 16));
_yourReportName.setCursor(style::cur_text);
_yourReportName.setTextInteractionFlags(Qt::TextSelectableByMouse);
@ -415,15 +415,17 @@ LastCrashedWindow::LastCrashedWindow(
});
_saveReport.setText(qsl("SAVE TO FILE"));
connect(&_saveReport, &QPushButton::clicked, [=] { saveReport(); });
_getApp.setText(qsl("GET THE LATEST OFFICIAL VERSION OF TELEGRAM DESKTOP"));
_getApp.setText(qsl("GET THE LATEST OFFICIAL VERSION OF KOTATOGRAM DESKTOP"));
connect(&_getApp, &QPushButton::clicked, [=] {
QDesktopServices::openUrl(qsl("https://desktop.telegram.org"));
QDesktopServices::openUrl(qsl("https://kotatgram.github.io"));
});
/*
_send.setText(qsl("SEND CRASH REPORT"));
connect(&_send, &QPushButton::clicked, [=] { sendReport(); });
*/
_sendSkip.setText(qsl("SKIP"));
_sendSkip.setText(qsl("CLOSE AND START APP"));
connect(&_sendSkip, &QPushButton::clicked, [=] { processContinue(); });
_continue.setText(qsl("CONTINUE"));
connect(&_continue, &QPushButton::clicked, [=] { processContinue(); });
@ -550,12 +552,12 @@ void LastCrashedWindow::checkingFinished() {
LOG(("Crash report check for sending done, result: %1").arg(QString::fromUtf8(result)));
if (result == "Old") {
_pleaseSendReport.setText(qsl("This report is about some old version of Telegram Desktop."));
_pleaseSendReport.setText(qsl("This report is about some old version of Kotatogram Desktop."));
_sendingState = SendingTooOld;
updateControls();
return;
} else if (result == "Unofficial") {
_pleaseSendReport.setText(qsl("You use some custom version of Telegram Desktop."));
_pleaseSendReport.setText(qsl("You use some custom version of Kotatogram Desktop."));
_sendingState = SendingUnofficial;
updateControls();
return;
@ -632,6 +634,7 @@ void LastCrashedWindow::updateControls() {
int padding = _size, h = padding + _networkSettings.height() + padding;
_label.show();
_send.hide();
if (_updaterData) {
h += _networkSettings.height() + padding;
if (_updaterData->state == UpdatingFail && (_sendingState == SendingNoReport || _sendingState == SendingUpdateCheck)) {
@ -740,7 +743,7 @@ void LastCrashedWindow::updateControls() {
if (_sendingState == SendingProgress || _sendingState == SendingUploading) {
_send.hide();
} else {
_send.show();
//_send.show();
}
_sendSkip.show();
_continue.hide();
@ -827,7 +830,7 @@ void LastCrashedWindow::updateControls() {
if (_sendingState == SendingProgress || _sendingState == SendingUploading) {
_send.hide();
} else {
_send.show();
//_send.show();
}
_sendSkip.show();
if (_sendingState == SendingFail) {
@ -843,7 +846,7 @@ void LastCrashedWindow::updateControls() {
h += _networkSettings.height() + padding;
}
QSize s(2 * padding + QFontMetrics(_label.font()).horizontalAdvance(qsl("Last time Telegram Desktop was not closed properly.")) + padding + _networkSettings.width(), h);
QSize s(2 * padding + QFontMetrics(_label.font()).horizontalAdvance(qsl("Last time Kotatogram Desktop was not closed properly.")) + padding + _networkSettings.width(), h);
if (s == size()) {
resizeEvent(0);
} else {
@ -1024,12 +1027,15 @@ void LastCrashedWindow::resizeEvent(QResizeEvent *e) {
int padding = _size;
_label.move(padding, padding + (_networkSettings.height() - _label.height()) / 2);
/*
_send.move(width() - padding - _send.width(), height() - padding - _send.height());
if (_sendingState == SendingProgress || _sendingState == SendingUploading) {
_sendSkip.move(width() - padding - _sendSkip.width(), height() - padding - _sendSkip.height());
} else {
_sendSkip.move(width() - padding - _send.width() - padding - _sendSkip.width(), height() - padding - _sendSkip.height());
}
*/
_sendSkip.move(width() - padding - _sendSkip.width(), height() - padding - _sendSkip.height());
_updating.move(padding, padding * 2 + _networkSettings.height() + (_networkSettings.height() - _updating.height()) / 2);

View File

@ -402,7 +402,7 @@ StartResult Start() {
fclose(f);
LOG(("Opened '%1' for reading, the previous "
"Telegram Desktop launch was not finished properly :( "
"Kotatogram Desktop launch was not finished properly :( "
"Crash log size: %2").arg(ReportPath).arg(lastdump.size()));
return lastdump;

View File

@ -292,7 +292,7 @@ void Launcher::init() {
prepareSettings();
initQtMessageLogging();
QApplication::setApplicationName(qsl("TelegramDesktop"));
QApplication::setApplicationName(qsl("KotatogramDesktop"));
QApplication::setAttribute(Qt::AA_DisableHighDpiScaling, true);
QApplication::setHighDpiScaleFactorRoundingPolicy(
Qt::HighDpiScaleFactorRoundingPolicy::Floor);
@ -344,7 +344,7 @@ int Launcher::exec() {
Platform::start();
auto result = executeApplication();
DEBUG_LOG(("Telegram finished, result: %1").arg(result));
DEBUG_LOG(("Kotatogram finished, result: %1").arg(result));
if (!UpdaterDisabled() && cRestartingUpdate()) {
DEBUG_LOG(("Sandbox Info: executing updater to install update."));
@ -352,7 +352,7 @@ int Launcher::exec() {
base::Platform::DeleteDirectory(cWorkingDir() + qsl("tupdates/temp"));
}
} else if (cRestarting()) {
DEBUG_LOG(("Sandbox Info: executing Telegram because of restart."));
DEBUG_LOG(("Sandbox Info: executing Kotatogram because of restart."));
launchUpdater(UpdaterLaunch::JustRelaunch);
}

View File

@ -396,7 +396,7 @@ void Manager::writeDefaultFile() {
return;
}
const char *defaultHeader = R"HEADER(
// This is a list of default shortcuts for Telegram Desktop
// This is a list of default shortcuts for Kotatogram Desktop
// Please don't modify it, its content is not used in any way
// You can place your own shortcuts in the 'shortcuts-custom.json' file

View File

@ -1550,7 +1550,7 @@ bool checkReadyUpdate() {
QFileInfo updater(cWorkingDir() + qsl("tupdates/temp/Updater.exe"));
#elif defined Q_OS_MAC // Q_OS_WIN
QString curUpdater = (cExeDir() + cExeName() + qsl("/Contents/Frameworks/Updater"));
QFileInfo updater(cWorkingDir() + qsl("tupdates/temp/Telegram.app/Contents/Frameworks/Updater"));
QFileInfo updater(cWorkingDir() + qsl("tupdates/temp/Kotatogram.app/Contents/Frameworks/Updater"));
#elif defined Q_OS_UNIX // Q_OS_MAC
QString curUpdater = (cExeDir() + qsl("Updater"));
QFileInfo updater(cWorkingDir() + qsl("tupdates/temp/Updater"));
@ -1635,13 +1635,13 @@ void UpdateApplication() {
return "https://itunes.apple.com/ae/app/telegram-desktop/id946399090";
#elif defined Q_OS_UNIX && !defined Q_OS_MAC // OS_WIN_STORE || OS_MAC_STORE
if (Platform::InFlatpak()) {
return "https://flathub.org/apps/details/org.telegram.desktop";
} else if (Platform::InSnap()) {
return "https://snapcraft.io/telegram-desktop";
return "https://flathub.org/apps/details/io.github.kotatogram";
//} else if (Platform::InSnap()) {
// return "https://snapcraft.io/telegram-desktop";
}
return "https://desktop.telegram.org";
return "https://github.com/kotatogram/kotatogram-desktop";
#else // OS_WIN_STORE || OS_MAC_STORE || (defined Q_OS_UNIX && !defined Q_OS_MAC)
return "https://desktop.telegram.org";
return "https://github.com/kotatogram/kotatogram-desktop";
#endif // OS_WIN_STORE || OS_MAC_STORE || (defined Q_OS_UNIX && !defined Q_OS_MAC)
}();
UrlClickHandler::Open(url);

View File

@ -18,10 +18,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#endif // TDESKTOP_ALLOW_CLOSED_ALPHA
// used in Updater.cpp and Setup.iss for Windows
constexpr auto AppId = "{53F49750-6209-4FBF-9CA8-7A333C87D1ED}"_cs;
constexpr auto AppId = "{C4A4AE8F-B9F7-4CC7-8A6C-BF7EEE87ACA5}"_cs;
constexpr auto AppNameOld = "Telegram Win (Unofficial)"_cs;
constexpr auto AppName = "Telegram Desktop"_cs;
constexpr auto AppFile = "Telegram"_cs;
constexpr auto AppName = "Kotatogram Desktop"_cs;
constexpr auto AppFile = "Kotatogram"_cs;
constexpr auto AppVersion = 3005002;
constexpr auto AppVersionStr = "3.5.2";
constexpr auto AppBetaVersion = false;

View File

@ -165,8 +165,8 @@ Stats AbstractWriter::produceTestExample(
auto sessions = Data::SessionsList();
auto session = Data::Session();
session.applicationName = "Telegram Desktop";
session.applicationVersion = "1.3.8";
session.applicationName = "Kotatogram Desktop";
session.applicationVersion = "1.8.8";
session.country = "GB";
session.created = date();
session.deviceModel = "PC";

View File

@ -928,7 +928,7 @@ auto HtmlWriter::Wrap::pushMessage(
dialog,
basePath,
"This message is not supported by this version "
"of Telegram Desktop. Please update the application.") };
"of Kotatogram Desktop. Please update the application.") };
}
const auto wrapReplyToLink = [&](const QByteArray &text) {

View File

@ -21,6 +21,10 @@ introCoverIcon: icon {
{ "intro_plane_outer", introCoverPlaneOuter },
{ "intro_plane_top", introCoverPlaneTop },
};
introKotatoCoverIcon: icon {
{ "intro_kotato_trace", introCoverPlaneTrace },
{ "intro_kotato_top", introCoverPlaneTop },
};
introCoverIconLeft: 50px;
introCoverIconTop: 46px;

View File

@ -390,7 +390,7 @@ void Step::paintCover(Painter &p, int top) {
st::introCoverLeft.paint(p, left, coverHeight - st::introCoverLeft.height(), width());
st::introCoverRight.paint(p, width() - right - st::introCoverRight.width(), coverHeight - st::introCoverRight.height(), width());
auto planeLeft = (width() - st::introCoverIcon.width()) / 2 - st::introCoverIconLeft;
auto planeLeft = (width() - st::introKotatoCoverIcon.width()) / 2 - st::introCoverIconLeft;
auto planeTop = top + st::introCoverIconTop;
if (top < 0 && !_hasCover) {
auto deltaLeft = -qRound(float64(st::introPlaneWidth / st::introPlaneHeight) * top);
@ -398,7 +398,7 @@ void Step::paintCover(Painter &p, int top) {
planeLeft += deltaLeft;
// planeTop += top;
}
st::introCoverIcon.paint(p, planeLeft, planeTop, width());
st::introKotatoCoverIcon.paint(p, planeLeft, planeTop, width());
}
int Step::contentLeft() const {

View File

@ -52,7 +52,7 @@ SystemMediaControlsManager::SystemMediaControlsManager(
base::Platform::SystemMediaControls::PlaybackStatus;
using Command = base::Platform::SystemMediaControls::Command;
_controls->setServiceName(qsl("org.mpris.MediaPlayer2.tdesktop"));
_controls->setServiceName(qsl("org.mpris.MediaPlayer2.Kotatogram"));
_controls->setApplicationName(AppName.utf16());
const auto inited = _controls->init(controller->widget());
if (!inited) {

View File

@ -60,9 +60,9 @@ namespace {
using internal::WaylandIntegration;
using WorkMode = Core::Settings::WorkMode;
constexpr auto kPanelTrayIconName = "telegram-panel"_cs;
constexpr auto kMutePanelTrayIconName = "telegram-mute-panel"_cs;
constexpr auto kAttentionPanelTrayIconName = "telegram-attention-panel"_cs;
constexpr auto kPanelTrayIconName = "kotatogram-panel"_cs;
constexpr auto kMutePanelTrayIconName = "kotatogram-mute-panel"_cs;
constexpr auto kAttentionPanelTrayIconName = "kotatogram-attention-panel"_cs;
bool TrayIconMuted = true;
int32 TrayIconCount = 0;
@ -614,7 +614,7 @@ void MainWindow::createGlobalMenu() {
});
auto quit = file->addAction(
tr::lng_mac_menu_quit_telegram(tr::now, lt_telegram, qsl("Telegram")),
tr::lng_mac_menu_quit_telegram(tr::now, lt_telegram, qsl("Kotatogram")),
this,
[=] { quitFromTray(); },
QKeySequence::Quit);
@ -775,7 +775,7 @@ void MainWindow::createGlobalMenu() {
tr::lng_mac_menu_about_telegram(
tr::now,
lt_telegram,
qsl("Telegram")),
qsl("Kotatogram")),
[=] {
ensureWindowShown();
controller().show(Box<AboutBox>());

View File

@ -65,14 +65,14 @@ using Platform::internal::WaylandIntegration;
namespace Platform {
namespace {
constexpr auto kDesktopFile = ":/misc/telegramdesktop.desktop"_cs;
constexpr auto kIconName = "telegram"_cs;
constexpr auto kDesktopFile = ":/misc/kotatogramdesktop.desktop"_cs;
constexpr auto kIconName = "kotatogram"_cs;
constexpr auto kDarkColorLimit = 192;
constexpr auto kXDGDesktopPortalService = "org.freedesktop.portal.Desktop"_cs;
constexpr auto kXDGDesktopPortalObjectPath = "/org/freedesktop/portal/desktop"_cs;
constexpr auto kIBusPortalService = "org.freedesktop.portal.IBus"_cs;
constexpr auto kWebviewService = "org.telegram.desktop.GtkIntegration.WebviewHelper-%1-%2"_cs;
constexpr auto kWebviewService = "io.github.kotatogram.GtkIntegration.WebviewHelper-%1-%2"_cs;
#ifndef DESKTOP_APP_DISABLE_DBUS_INTEGRATION
void PortalAutostart(bool start, bool silent) {
@ -308,7 +308,7 @@ bool GenerateDesktopFile(
fileText = fileText.replace(
QRegularExpression(
qsl("^Exec=telegram-desktop(.*)$"),
qsl("^Exec=kotatogram-desktop(.*)$"),
QRegularExpression::MultilineOption),
qsl("Exec=%1 -workdir %2\\1").arg(
EscapeShellInLauncher(cExeDir() + cExeName()),
@ -326,8 +326,8 @@ bool GenerateDesktopFile(
if (!Core::UpdaterDisabled()) {
DEBUG_LOG(("App Info: removing old .desktop files"));
QFile::remove(qsl("%1telegram.desktop").arg(targetPath));
QFile::remove(qsl("%1telegramdesktop.desktop").arg(targetPath));
QFile::remove(qsl("%1kotatogram.desktop").arg(targetPath));
QFile::remove(qsl("%1kotatogramdesktop.desktop").arg(targetPath));
}
return true;
@ -621,14 +621,14 @@ void HaikuAutostart(bool start) {
return;
}
QFile file(home + "/config/settings/boot/launch/telegram-desktop");
QFile file(home + "/config/settings/boot/launch/kotatogram-desktop");
if (start) {
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
QTextStream out(&file);
out
<< "#!/bin/bash" << Qt::endl
<< "cd /system/apps" << Qt::endl
<< "./Telegram -autostart" << " &" << Qt::endl;
<< "./Kotatogram -autostart" << " &" << Qt::endl;
file.close();
file.setPermissions(file.permissions()
| QFileDevice::ExeOwner
@ -644,8 +644,8 @@ void HaikuAutostart(bool start) {
} // namespace
QString psAppDataPath() {
// Previously we used ~/.TelegramDesktop, so look there first.
// If we find data there, we should still use it.
// We should not use ~/.TelegramDesktop, since it's a fork.
/*
auto home = QDir::homePath();
if (!home.isEmpty()) {
auto oldPath = home + qsl("/.TelegramDesktop/");
@ -656,6 +656,7 @@ QString psAppDataPath() {
return oldPath;
}
}
*/
return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + '/';
}

View File

@ -432,7 +432,7 @@ void MainWindow::createGlobalMenu() {
}
};
auto main = psMainMenu.addMenu(qsl("Telegram"));
auto main = psMainMenu.addMenu(qsl("Kotatogram"));
{
auto callback = [=] {
ensureWindowShown();
@ -442,7 +442,7 @@ void MainWindow::createGlobalMenu() {
tr::lng_mac_menu_about_telegram(
tr::now,
lt_telegram,
qsl("Telegram")),
qsl("Kotatogram")),
std::move(callback))
->setMenuRole(QAction::AboutQtRole);
}

View File

@ -78,7 +78,7 @@ void PreviewWindowTitle(Painter &p, const style::palette &palette, QRect body, i
p.setPen(st::titleFgActive[palette]);
p.setFont(font);
p.drawText(titleRect, qsl("Telegram"), style::al_center);
p.drawText(titleRect, qsl("Kotatogram"), style::al_center);
auto isGraphite = ([NSColor currentControlTint] == NSGraphiteControlTint);
auto buttonSkip = 8;

View File

@ -88,7 +88,7 @@ BOOL CALLBACK ActivateProcessByPid(HWND hWnd, LPARAM lParam) {
WCHAR nameBuf[nameBufSize];
int32 len = GetWindowText(hWnd, nameBuf, nameBufSize);
if (len && len < nameBufSize) {
if (QRegularExpression(qsl("^Telegram(\\s*\\(\\d+\\))?$")).match(QString::fromStdWString(nameBuf)).hasMatch()) {
if (QRegularExpression(qsl("^Kotatogram(\\s*\\(\\d+\\))?$")).match(QString::fromStdWString(nameBuf)).hasMatch()) {
BOOL res = ::SetForegroundWindow(hWnd);
::SetFocus(hWnd);
return FALSE;
@ -203,7 +203,7 @@ QString psAppDataPath() {
if (GetEnvironmentVariable(L"APPDATA", wstrPath, maxFileLen)) {
QDir appData(QString::fromStdWString(std::wstring(wstrPath)));
#ifdef OS_WIN_STORE
return appData.absolutePath() + qsl("/Telegram Desktop UWP/");
return appData.absolutePath() + qsl("/Kotatogram Desktop UWP/");
#else // OS_WIN_STORE
return appData.absolutePath() + '/' + AppName.utf16() + '/';
#endif // OS_WIN_STORE
@ -284,10 +284,10 @@ void psDoFixPrevious() {
HRESULT userDesktopRes = SHGetFolderPath(0, CSIDL_DESKTOPDIRECTORY, 0, SHGFP_TYPE_CURRENT, userDesktopFolder);
HRESULT commonDesktopRes = SHGetFolderPath(0, CSIDL_COMMON_DESKTOPDIRECTORY, 0, SHGFP_TYPE_CURRENT, commonDesktopFolder);
if (SUCCEEDED(userDesktopRes)) {
userDesktopLnk = QString::fromWCharArray(userDesktopFolder) + "\\Telegram.lnk";
userDesktopLnk = QString::fromWCharArray(userDesktopFolder) + "\\Kotatogram.lnk";
}
if (SUCCEEDED(commonDesktopRes)) {
commonDesktopLnk = QString::fromWCharArray(commonDesktopFolder) + "\\Telegram.lnk";
commonDesktopLnk = QString::fromWCharArray(commonDesktopFolder) + "\\Kotatogram.lnk";
}
QFile userDesktopFile(userDesktopLnk), commonDesktopFile(commonDesktopLnk);
if (QFile::exists(userDesktopLnk) && QFile::exists(commonDesktopLnk) && userDesktopLnk != commonDesktopLnk) {
@ -411,7 +411,7 @@ void AutostartToggle(bool enabled, Fn<void(bool)> done) {
done ? Fn<void(bool)>(callback) : nullptr);
#else // OS_WIN_STORE
const auto silent = !done;
ManageAppLink(enabled, silent, CSIDL_STARTUP, L"-autostart", L"Telegram autorun link.\nYou can disable autorun in Telegram settings.");
ManageAppLink(enabled, silent, CSIDL_STARTUP, L"-autostart", L"Kotatogram autorun link.\nYou can disable autorun in Kotatogram settings.");
if (done) {
done(enabled);
}
@ -583,7 +583,7 @@ void psNewVersion() {
}
void psSendToMenu(bool send, bool silent) {
ManageAppLink(send, silent, CSIDL_SENDTO, L"-sendpath", L"Telegram send to link.\nYou can disable send to menu item in Telegram settings.");
ManageAppLink(send, silent, CSIDL_SENDTO, L"-sendpath", L"Kotatogram send to link.\nYou can disable send to menu item in Kotatogram settings.");
}
bool psLaunchMaps(const Data::LocationPoint &point) {

View File

@ -25,11 +25,11 @@ const PROPERTYKEY pkey_AppUserModel_StartPinOption = { { 0x9F4C2855, 0x9F79, 0x4
const PROPERTYKEY pkey_AppUserModel_ToastActivator = { { 0x9F4C2855, 0x9F79, 0x4B39, { 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3 } }, 26 };
#ifdef OS_WIN_STORE
const WCHAR AppUserModelIdRelease[] = L"Telegram.TelegramDesktop.Store";
const WCHAR AppUserModelIdRelease[] = L"Kotatogram.KotatogramDesktop.Store";
#else // OS_WIN_STORE
const WCHAR AppUserModelIdRelease[] = L"Telegram.TelegramDesktop";
const WCHAR AppUserModelIdRelease[] = L"Kotatogram.KotatogramDesktop";
#endif // OS_WIN_STORE
const WCHAR AppUserModelIdAlpha[] = L"Telegram.TelegramDesktop.Alpha";
const WCHAR AppUserModelIdAlpha[] = L"Kotatogram.KotatogramDesktop.Alpha";
} // namespace
@ -188,7 +188,7 @@ QString systemShortcutPath() {
void cleanupShortcut() {
static const int maxFileLen = MAX_PATH * 10;
QString path = systemShortcutPath() + qsl("Telegram.lnk");
QString path = systemShortcutPath() + qsl("Kotatogram.lnk");
std::wstring p = QDir::toNativeSeparators(path).toStdWString();
DWORD attributes = GetFileAttributes(p.c_str());
@ -316,19 +316,17 @@ bool validateShortcut() {
}
if (cAlphaVersion()) {
path += u"TelegramAlpha.lnk"_q;
path += u"KotatogramAlpha.lnk"_q;
if (validateShortcutAt(path)) {
return true;
}
} else {
const auto installed = u"Telegram Desktop/Telegram.lnk"_q;
const auto old = u"Telegram Win (Unofficial)/Telegram.lnk"_q;
if (validateShortcutAt(path + installed)
|| validateShortcutAt(path + old)) {
const auto installed = u"Kotatogram Desktop/Kotatogram.lnk"_q;
if (validateShortcutAt(path + installed)) {
return true;
}
path += u"Telegram.lnk"_q;
path += u"Kotatogram.lnk"_q;
if (validateShortcutAt(path)) {
return true;
}

View File

@ -298,7 +298,7 @@ void NotificationsCount::prepareNotificationSampleLarge() {
p.setPen(st::dialogsNameFg);
p.setFont(st::msgNameFont);
auto notifyTitle = st::msgNameFont->elided(qsl("Telegram Desktop"), rectForName.width());
auto notifyTitle = st::msgNameFont->elided(qsl("Kotatogram Desktop"), rectForName.width());
p.drawText(rectForName.left(), rectForName.top() + st::msgNameFont->ascent, notifyTitle);
st::notifyClose.icon.paint(p, w - st::notifyClosePos.x() - st::notifyClose.width + st::notifyClose.iconPosition.x(), st::notifyClosePos.y() + st::notifyClose.iconPosition.y(), w);

View File

@ -808,7 +808,7 @@ void MainWindow::updateUnreadCounter() {
}
const auto counter = Core::App().unreadBadge();
setTitle((counter > 0) ? qsl("Telegram (%1)").arg(counter) : qsl("Telegram"));
setTitle((counter > 0) ? qsl("Kotatogram (%1)").arg(counter) : qsl("Kotatogram"));
unreadCounterChangedHook();
}

View File

@ -954,7 +954,7 @@ void NativeManager::doShowNotification(NotificationFields &&fields) {
&& (item->out() || peer->isSelf())
&& item->isFromScheduled();
const auto title = options.hideNameAndPhoto
? qsl("Telegram Desktop")
? qsl("Kotatogram Desktop")
: (scheduled && peer->isSelf())
? tr::lng_notification_reminder(tr::now)
: peer->name;

View File

@ -868,7 +868,7 @@ void Notification::updateNotifyDisplay() {
p.setPen(st::dialogsNameFg);
Ui::Text::String titleText;
const auto title = options.hideNameAndPhoto
? qsl("Telegram Desktop")
? qsl("Kotatogram Desktop")
: reminder
? tr::lng_notification_reminder(tr::now)
: _history->peer->nameText().toString();

View File

@ -642,29 +642,14 @@ MainMenu::MainMenu(
refreshMenu();
refreshBackground();
_telegram->setMarkedText(Ui::Text::Link(
qsl("Telegram Desktop"),
qsl("https://desktop.telegram.org")));
_telegram->setLinksTrusted();
_version->setMarkedText(
Ui::Text::Link(
tr::lng_settings_current_version(
tr::now,
lt_version,
currentVersionText()),
1) // Link 1.
.append(QChar(' '))
.append(QChar(8211))
.append(QChar(' '))
.append(Ui::Text::Link(tr::lng_menu_about(tr::now), 2))); // Link 2.
_version->setLink(
_telegram->setMarkedText(Ui::Text::Link(qsl("Kotatogram Desktop"), 1));
_telegram->setLink(
1,
std::make_shared<UrlClickHandler>(Core::App().changelogLink()));
_version->setLink(
2,
std::make_shared<LambdaClickHandler>([=] {
controller->show(Box<AboutBox>());
}));
_version->setMarkedText(Ui::Text::Link(currentVersionText(), 1));
_version->setLink(1, std::make_shared<UrlClickHandler>(qsl("https://github.com/kotatogram/kotatogram-desktop")));
_controller->session().downloaderTaskFinished(
) | rpl::start_with_next([=] {

View File

@ -3,15 +3,19 @@
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>$(PRODUCT_NAME)</string>
<string>@output_name@</string>
<key>CFBundleGetInfoString</key>
<string>Telegram Desktop messaging app</string>
<key>CFBundleIconFile</key>
<string>AppIcon</string>
<key>CFBundleIconName</key>
<string>AppIcon</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<string>@bundle_identifier@</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<string>@desktop_app_version_string@</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleURLTypes</key>
@ -20,9 +24,9 @@
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleURLIconFile</key>
<string>Icon.icns</string>
<string>AppIcon</string>
<key>CFBundleURLName</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<string>@bundle_identifier@</string>
<key>CFBundleURLSchemes</key>
<array>
<string>tg</string>
@ -30,11 +34,11 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<string>@desktop_app_version_string@</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.social-networking</string>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<string>@CMAKE_OSX_DEPLOYMENT_TARGET@</string>
<key>LSFileQuarantineEnabled</key>
<true/>
<key>NOTE</key>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 806 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 806 KiB

View File

@ -1,9 +1,9 @@
#define MyAppShortName "Telegram"
#define MyAppName "Telegram Desktop"
#define MyAppPublisher "Telegram FZ-LLC"
#define MyAppURL "https://desktop.telegram.org"
#define MyAppExeName "Telegram.exe"
#define MyAppId "53F49750-6209-4FBF-9CA8-7A333C87D1ED"
#define MyAppShortName "Kotatogram"
#define MyAppName "Kotatogram Desktop"
#define MyAppPublisher "Kotatogram"
#define MyAppURL "https://kotatogram.github.io"
#define MyAppExeName "Kotatogram.exe"
#define MyAppId "C4A4AE8F-B9F7-4CC7-8A6C-BF7EEE87ACA5"
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
@ -22,7 +22,7 @@ AllowNoIcons=yes
OutputDir={#ReleasePath}
SetupIconFile={#SourcePath}..\Resources\art\icon256.ico
UninstallDisplayName={#MyAppName}
UninstallDisplayIcon={app}\Telegram.exe
UninstallDisplayIcon={app}\Kotatogram.exe
Compression=lzma
SolidCompression=yes
DisableStartupPrompt=yes
@ -35,10 +35,10 @@ DisableProgramGroupPage=no
#if MyBuildTarget == "win64"
ArchitecturesAllowed="x64 arm64"
ArchitecturesInstallIn64BitMode="x64 arm64"
OutputBaseFilename=tsetup-x64.{#MyAppVersionFull}
OutputBaseFilename=ksetup-x64.{#MyAppVersionFull}
#define ArchModulesFolder "x64"
#else
OutputBaseFilename=tsetup.{#MyAppVersionFull}
OutputBaseFilename=ksetup.{#MyAppVersionFull}
#define ArchModulesFolder "x86"
#endif
@ -60,7 +60,7 @@ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; OnlyBelowVersion: 0,6.1
[Files]
Source: "{#ReleasePath}\Telegram.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#ReleasePath}\Kotatogram.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#ReleasePath}\Updater.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#ReleasePath}\{#ModulesFolder}\d3d\d3dcompiler_47.dll"; DestDir: "{app}\{#ModulesFolder}\d3d"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

View File

@ -52,6 +52,6 @@ if (DESKTOP_APP_SPECIAL_TARGET)
endif()
if (NOT TDESKTOP_LAUNCHER_BASENAME)
set(TDESKTOP_LAUNCHER_BASENAME "telegramdesktop")
set(TDESKTOP_LAUNCHER_BASENAME "kotatogramdesktop")
endif()
target_compile_definitions(Telegram PRIVATE TDESKTOP_LAUNCHER_BASENAME=${TDESKTOP_LAUNCHER_BASENAME})

View File

@ -0,0 +1,20 @@
[Desktop Entry]
Version=1.0
Name=Kotatogram Desktop
Comment=Experimental Telegram Desktop fork
TryExec=kotatogram-desktop
Exec=kotatogram-desktop -- %u
Icon=kotatogram
Terminal=false
StartupWMClass=KotatogramDesktop
Type=Application
Categories=Chat;Network;InstantMessaging;Qt;
MimeType=x-scheme-handler/tg;
Keywords=tg;chat;im;messaging;messenger;sms;tdesktop;kotatogram;
Actions=Quit;
X-GNOME-UsesNotifications=true
[Desktop Action Quit]
Exec=kotatogram-desktop -quit
Name=Quit Kotatogram
Icon=application-exit

View File

@ -0,0 +1,466 @@
<?xml version="1.0" encoding="utf-8"?>
<component type="desktop">
<id>io.github.kotatogram</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-3.0</project_license>
<name>Kotatogram Desktop</name>
<summary>Kotatogram Desktop messenger</summary>
<description>
<p>Kotatogram Desktop is unofficial messaging based on Telegram Desktop.</p>
<p>Telegram is a popular messaging protocol with encryption and security as its key focus.</p>
</description>
<categories>
<category>Network</category>
<category>InstantMessaging</category>
</categories>
<update_contact></update_contact>
<developer_name>RadRussianRus</developer_name>
<url type="homepage">https://kotatogram.github.io/</url>
<url type="bugtracker">https://github.com/kotatogram/kotatogram-desktop/issues</url>
<url type="help">https://github.com/kotatogram/kotatogram-desktop/issues</url>
<screenshots>
<screenshot type="default">
<image>https://raw.githubusercontent.com/kotatogram/kotatogram-desktop/dev/docs/assets/ktg_preview.png</image>
</screenshot>
</screenshots>
<keywords>
<keyword>tg</keyword>
<keyword>telegram</keyword>
<keyword>kotatogram</keyword>
<keyword>tdesktop</keyword>
<keyword>messaging</keyword>
<keyword>messenger</keyword>
<keyword>chat</keyword>
<keyword>sms</keyword>
<keyword>im</keyword>
</keywords>
<releases>
<release version="1.4.9" date="2022-03-08">
<description>
<p>TDesktop sources were updated to 3.5.2.</p>
<p>Also in this update:</p>
<ul>
<li>Internal rework of Kotatogram Settings.</li>
<li>Allow select time when jumping to date in chat.</li>
<li>Always show TDesktop's experimental settings and allow their translation.</li>
<li>Make message icon color same as name color.</li>
<li>Fix avatar cropping in Windows system notifications.</li>
<li>Warn when trying to unquoted forward a quiz (by blank-x).</li>
<li>Show "Copy callback data" only for callback buttons (by blank-x).</li>
<li>Go to chat on Shift+Enter in Forward box (by blank-x).</li>
<li>Fix name icons (by blank-x).</li>
<li>Fix tg://user?id links for 64-bit IDs (by blank-x).</li>
<li>Fix showing "Mention user" for channels (by blank-x).</li>
<li>Fix profile pictures rounding (by blank-x).</li>
<li>Fix chat status filters by admin rights (by blank-x).</li>
<li>New Kotatogram macOS icon (by gershik).</li>
</ul>
</description>
</release>
<release version="1.4.8" date="2021-12-31">
<description>
<p>In this update:</p>
<ul>
<li>Better font settings.</li>
<li>Fixed severe crash in Saved Messages.</li>
<li>Fixed non-clickable part of message author name if there an icon near it.</li>
</ul>
</description>
</release>
<release version="1.4.7" date="2021-12-30">
<description>
<p>In this update:</p>
<ul>
<li>Ability to switch accounts by hotkeys.</li>
<li>Added icon near the author name in message.</li>
<li>Fixed ranks in admin list.</li>
</ul>
</description>
</release>
<release version="1.4.6" date="2021-12-18">
<description>
<p>TDesktop sources were updated to 3.3.</p>
<p>Also in this update:</p>
<ul>
<li>Ability to disable remembering image compression when sending.</li>
<li>Custom auto-replaces now work without emoji replacement enabled.</li>
<li>Removed window size restiction.</li>
<li>Fixed tg:// link protocol in system.</li>
<li>Fixed "External video player" option.</li>
</ul>
</description>
</release>
<release version="1.4.5" date="2021-12-04">
<description>
<p>TDesktop sources were updated to 3.1.1.</p>
<p>Also in this update:</p>
<ul>
<li>Fixed caption sending modes in unquoted forward.</li>
<li>Fixed "Qt scaling" option.</li>
<li>Removed duplicate of GIF button in shared media.</li>
<li>Fixed animated emoji size.</li>
<li>Fix custom font size scale.</li>
</ul>
</description>
</release>
<release version="1.4.4" date="2021-09-22">
<description>
<p>TDesktop sources were updated to 3.1.</p>
<p>Also in this update:</p>
<ul>
<li>Added option to remember forward mode.</li>
<li>Added ability to set default forward mode.</li>
<li>Replaced unquoted forward method with option to restore the old one.</li>
<li>Added option to disable per-chat themes.</li>
<li>Removed GTK integration option, since it's not needed anymore.</li>
<li>Fixed missing sending inline bot response preview option.</li>
<li>Fixed missing sending inline bot response preview in comments and scheduled messages.</li>
<li>Fixed option "Disable edit by Up key" in comments and scheduled messages.</li>
<li>GIF section in shared media and forwarded sticker info are now same as in TDesktop.</li>
</ul>
</description>
</release>
<release version="1.4.3" date="2021-08-26">
<description>
<p>In this update:</p>
<ul>
<li>Reworked sending without "via @bot" tag.</li>
<li>Optional hotkeys to restart application and to reload Kotatogram translation.</li>
<li>Fixed blocking user in "Recent Actions".</li>
<li>Updated translations, including phrases from previous version.</li>
<li>Fixed errors and crashes in AppImage related to gdk-pixbuf.</li>
</ul>
</description>
</release>
<release version="1.4.2" date="2021-08-21">
<description>
<p>TDesktop sources were updated to 2.8.11.</p>
<p>Also in this update:</p>
<ul>
<li>Manually choose notification mute time.</li>
<li>Auto-login option for Telegram sites.</li>
<li>Multi-threaded video decoding option.</li>
<li>External video player.</li>
<li>Sending without "via @bot" mark.</li>
<li>Font size JSON option.</li>
<li>Backported message self-destruct 1 month option.</li>
<li>Localized self-destruct messages button to Russian.</li>
<li>Fixed missing "Copy Share Link" in forward window when a single album is selected.</li>
<li>Fixed applying of some bundled Kotatogram translations.</li>
</ul>
</description>
</release>
<release version="1.4.1" date="2021-04-29">
<description>
<p>TDesktop sources were updated to 2.7.4.</p>
<p>Also in this update:</p>
<ul>
<li>Separate Kotatogram's MPRIS and TDesktop's MPRIS.</li>
<li>Fix crash on right clicking emoji button.</li>
<li>Attempt to fix repeating changelogs.</li>
<li>Smaller font for options with radio buttons.</li>
<li>Don't show top notification switch in own profile.</li>
<li>Remove unnecessary separator in own profile.</li>
<li>Fix dependent separated "Send stickers and GIFs" restriction.</li>
<li>Updated translations.</li>
</ul>
</description>
</release>
<release version="1.4" date="2021-04-13">
<description>
<p>TDesktop sources were updated to 2.7.1.</p>
<p>Also in this update:</p>
<ul>
<li>Ability to forward messages without author.</li>
<li>Local folders.</li>
<li>Ability to set API ID and hash by start parameter or environment variable.</li>
<li>Use checkboxes in polls with multiple answers.</li>
<li>Reworked admins info.</li>
<li>Show group type in chat lists.</li>
<li>Show star icon for groups where you're an admin.</li>
<li>Do not notify when pinning by default.</li>
<li>Ability to mention user from context menu in members list.</li>
<li>Improved theme keys search.</li>
<li>Experimental top bar customization.</li>
<li>Reworked changning time when scheduling messages.</li>
<li>Improved keyboard navigation for calendar.</li>
<li>Ability to jump to date in chat (Ctrl+H by default).</li>
<li>Use ghost icon from Android app.</li>
<li>Hide Edit and All Chats from context menu.</li>
<li>Show button to remove recent sticker.</li>
<li>Option to retain selection after forward.</li>
<li>Hide account name in notification if it's the current one.</li>
<li>Possible fix for crash on Permissions click in profile.</li>
<li>Fix for crash on profile double open in blocked users list.</li>
<li>Option to disable monospace bubbles expansion (user-contributed).</li>
<li>Click-to-copy for ID, phone and username in profile.</li>
<li>Revoke messages by default.</li>
<li>Additional info for chats in folders.</li>
<li>Manage buttons in profile.</li>
<li>Forward to multiple chats.</li>
<li>Allow add up to 10 accounts in 32-bit build and up to 100 in 64 bit builds.</li>
<li>Do not share phone number by default (from 64Gram).</li>
<li>GIFs shared media section (from 64Gram).</li>
<li>Uwrapped "Stickers and GIFs" permission (from 64Gram).</li>
<li>Option to disable emoji panel on hover.</li>
<li>Option to use native window frame on Windows and macOS.</li>
<li>Option to disable tray counter.</li>
<li>Option to use Telegram tray icon on Linux panels.</li>
<li>Set media clear limit down to 1 day.</li>
<li>Many translations from Crowdin page.</li>
</ul>
</description>
</release>
<release version="1.3.9" date="2020-09-09">
<description>
<p>TDesktop sources were updated to 2.3.2.</p>
<p>Also in this update:</p>
<ul>
<li>Ability to forward messages without author.</li>
<li>Local folders.</li>
<li>Ability to set API ID and hash by start parameter or environment variable.</li>
<li>Use checkboxes in polls with multiple answers.</li>
<li>Reworked admins info.</li>
<li>Show group type in chat lists.</li>
<li>Show star icon for groups where you're an admin.</li>
<li>Do not notify when pinning by default.</li>
<li>Ability to mention user from context menu in members list.</li>
<li>Open pop-up emoji panel on RMB when disabled by hover.</li>
<li>Improved theme keys search.</li>
<li>Experimental top bar customization.</li>
<li>Reworked changning time when scheduling messages.</li>
<li>Improved keyboard navigation for calendar.</li>
<li>Italian translation (by alsoGAMER and CrisMystik).</li>
<li>Ability to jump to date in chat (Ctrl+J by default).</li>
<li>Use ghost icon from Android app.</li>
<li>Hide Edit and All Chats from context menu.</li>
<li>Show button to remove recent sticker.</li>
<li>Portuguese (Brasil) translation (by lipetst).</li>
</ul>
</description>
</release>
<release version="1.3.8" date="2020-07-10">
<description>
<p>TDesktop sources were updated to 2.1.18.</p>
<p>Also in this update:</p>
<ul>
<li>Restored one-click forward to Saved Messages.</li>
<li>Ability to go to chat from forward when selecting one.</li>
<li>Make retaining selection after forward optional.</li>
<li>Option to open chat on click in forward.</li>
<li>Hide account name in notification if it's the current one.</li>
<li>Possible fix for crash on Permissions click in profile.</li>
<li>Turkish translation (by disk3).</li>
<li>Polish translation (by Sebek).</li>
</ul>
</description>
</release>
<release version="1.3.7" date="2020-07-03">
<description>
<p>TDesktop sources were updated to 2.1.17.</p>
<p>Also in this update:</p>
<ul>
<li>Option to disable monospace bubbles expansion (user-contributed).</li>
<li>Click-to-copy for ID, phone and username in profile.</li>
<li>Revoke messages by default.</li>
<li>Additional info for chats in folders.</li>
<li>Manage buttons in profile.</li>
<li>Forward to multiple chats.</li>
<li>Allow add up to 10 accounts.</li>
<li>Do not share phone number by default (from TDesktop-x64).</li>
<li>GIFs shared media section (from TDesktop-x64).</li>
<li>Uwrapped "Stickers and GIFs" permission (from TDesktop-x64).</li>
<li>Ukranian translation (by winqooq).</li>
</ul>
</description>
</release>
<release version="1.3.6" date="2020-05-22">
<description>
<p>TDesktop sources were updated to 2.1.6.</p>
<p>Also in this update:</p>
<ul>
<li>Option to disable emoji panel on hover.</li>
<li>Option to use native window frame on Windows and macOS.</li>
<li>Option to disable tray counter.</li>
<li>Option to use Telegram tray icon on Linux panels.</li>
<li>Set media clear limit down to 1 day.</li>
</ul>
</description>
</release>
<release version="1.3.5" date="2020-05-10">
<description>
<p>TDesktop sources were updated to 2.1.4.</p>
</description>
</release>
<release version="1.3.4" date="2020-05-06">
<description>
<p>TDesktop sources were updated to 2.1.2.</p>
<p>Also in this update:</p>
<ul>
<li>Optional Bot API chat ID format.</li>
<li>Message ID in date tooltip.</li>
<li>Option to scale sticker width along with height.</li>
<li>Show time of service message.</li>
</ul>
</description>
</release>
<release version="1.3.3" date="2020-05-03">
<description>
<p>TDesktop sources were updated to 2.1.1.</p>
<p>1.3.2 had crash with "All chats" enabled, so there is 1.3.3.</p>
</description>
</release>
<release version="1.3.2" date="2020-05-02">
<description>
<p>TDesktop sources were updated to 2.1.1.</p>
</description>
</release>
<release version="1.3.1" date="2020-04-27">
<description>
<p>Some post-release bugfixes, including folder names.</p>
</description>
</release>
<release version="1.3" date="2020-04-25">
<description>
<p>TDesktop sources were updated to 2.1.</p>
<p>Also in this update:</p>
<ul>
<li>Search messages from user from context menu.</li>
<li>"query" parameter for tg://resolve and t.me links to set search query.</li>
<li>Select and copy text in link open box and bot button click.</li>
<li>Select and copy text of poll explanation, showing it in box.</li>
<li>Added two existed options to menu: tray icon and profile picture rounding.</li>
<li>Suggest to hide pinned message when unpinning.</li>
<li>Show Discuss button even if you haven't subscribed to channel.</li>
</ul>
</description>
</release>
<release version="1.2.2" date="2020-04-02">
<description>
<p>TDesktop sources were updated to 2.0.1.</p>
<p>Also in this update:</p>
<ul>
<li>Option to hide All chats folder.</li>
</ul>
</description>
</release>
<release version="1.2.1" date="2020-03-31">
<description>
<p>TDesktop sources were updated to 2.0.</p>
<p>Also in this update:</p>
<ul>
<li>Option to set default folder. Also added context menu to All chats filter.</li>
<li>Option to show only unmuted chats in folder counter.</li>
<li>Option to hide Edit button in folder sidebar.</li>
<li>Compact folder sidebar option.</li>
<li>Restored unreleased notification toggle as option.</li>
<li>tg://settings/kotato link to open Kotatogram Settings. Also added three-dots menu there.</li>
</ul>
</description>
</release>
<release version="1.2" date="2020-03-19">
<description>
<p>TDesktop sources were updated to 1.9.21.</p>
<p>Also in this update:</p>
<ul>
<li>New logo and option to choose alternative icons.</li>
<li>Support for taskbar flashing alert.</li>
<li>Bot privacy status in members list.</li>
<li>Custom tray and taskbar icon.</li>
<li>Show working dir in tray icon tooltip.</li>
<li>Option to change rounding of profile pictures.</li>
<li>Option to always show profile picture in top bar.</li>
<li>Ban members option in Recent Actions.</li>
<li>Control notification sound from tray menu.</li>
<li>Option to change recent stickers show limit (up to 200 or disable at all).</li>
<li>Show video playback controls for GIFs.</li>
<li>Allow up to 64px as minimal sticker size.</li>
<li>Optional confirmation before calling.</li>
<li>"Disable Up to edit" now in options menu.</li>
<li>Option to use original font height.</li>
</ul>
</description>
</release>
<release version="1.1.9" date="2020-03-15">
<description>
<p>TDesktop sources were updated to 1.9.20 beta.</p>
<p>Also in this update:</p>
<ul>
<li>Support for taskbar flashing alert.</li>
<li>Bot privacy status in members list.</li>
<li>Custom tray and taskbar icon.</li>
<li>Show working dir in tray icon tooltip.</li>
<li>Option to change rounding of profile pictures.</li>
<li>Option to always show profile picture in top bar.</li>
<li>Ban members option in Recent Actions.</li>
</ul>
</description>
</release>
<release version="1.1.8" date="2020-02-26">
<description>
<p>TDesktop sources were updated to 1.9.19 beta.</p>
<p>Also in this update:</p>
<ul>
<li>Control notification sound from tray menu.</li>
<li>Option to change recent stickers show limit (up to 200 or disable at all).</li>
<li>Show video playback controls for GIFs.</li>
</ul>
</description>
</release>
<release version="1.1.7" date="2020-02-08">
<description>
<p>TDesktop sources were updated to 1.9.10 beta.</p>
<p>Also in this update:</p>
<ul>
<li>Allow up to 64px as minimal sticker size.</li>
<li>Optional confirmation before calling.</li>
<li>"Disable Up to edit" now in options menu.</li>
<li>Option to use original font height.</li>
</ul>
</description>
</release>
<release version="1.1.6" date="2020-01-31">
<description>
<p>TDesktop sources were updated to 1.9.9.</p>
<p>Also in this update:</p>
<ul>
<li>Custom instant replaces in JSON settings.</li>
<li>Ability to use system font (user-contributed).</li>
</ul>
</description>
</release>
</releases>
<content_rating type="oars-1.1">
<content_attribute id="violence-cartoon">none</content_attribute>
<content_attribute id="violence-fantasy">none</content_attribute>
<content_attribute id="violence-realistic">none</content_attribute>
<content_attribute id="violence-bloodshed">none</content_attribute>
<content_attribute id="violence-sexual">none</content_attribute>
<content_attribute id="violence-desecration">none</content_attribute>
<content_attribute id="violence-slavery">none</content_attribute>
<content_attribute id="violence-worship">none</content_attribute>
<content_attribute id="drugs-alcohol">none</content_attribute>
<content_attribute id="drugs-narcotics">none</content_attribute>
<content_attribute id="drugs-tobacco">none</content_attribute>
<content_attribute id="sex-nudity">none</content_attribute>
<content_attribute id="sex-themes">none</content_attribute>
<content_attribute id="sex-homosexuality">none</content_attribute>
<content_attribute id="sex-prostitution">none</content_attribute>
<content_attribute id="sex-adultery">none</content_attribute>
<content_attribute id="sex-appearance">none</content_attribute>
<content_attribute id="language-profanity">none</content_attribute>
<content_attribute id="language-humor">none</content_attribute>
<content_attribute id="language-discrimination">none</content_attribute>
<content_attribute id="social-chat">intense</content_attribute>
<content_attribute id="social-info">none</content_attribute>
<content_attribute id="social-audio">intense</content_attribute>
<content_attribute id="social-location">none</content_attribute>
<content_attribute id="social-contacts">intense</content_attribute>
<content_attribute id="money-purchasing">none</content_attribute>
<content_attribute id="money-gambling">none</content_attribute>
</content_rating>
<launchable type="desktop-id">@TDESKTOP_LAUNCHER_BASENAME@.desktop</launchable>
<provides>
<binary>kotatogram-desktop</binary>
</provides>
</component>