From 0854dba76af7be950f12f6c6a264c4ead8beaca4 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 27 Apr 2016 15:03:10 +0300 Subject: [PATCH] Added moved files to git. --- .../langs/de.lproj/Localizable.strings | 17 + Telegram/Resources/langs/download.sh | 35 + .../langs/en.lproj/Localizable.strings | 17 + .../langs/es.lproj/Localizable.strings | 17 + .../langs/it.lproj/Localizable.strings | 17 + Telegram/Resources/langs/lang.strings | 959 ++++++++++++++++++ Telegram/Resources/langs/list | 1 + .../langs/nl.lproj/Localizable.strings | 17 + .../langs/pt-BR.lproj/Localizable.strings | 17 + Telegram/Resources/langs/upload.sh | 28 + Telegram/Resources/winrc/Telegram.rc | 80 ++ Telegram/Resources/winrc/Updater.rc | 72 ++ Telegram/Resources/winrc/resource.h | Bin 0 -> 904 bytes Telegram/Resources/winrc/resource1.h | 14 + Telegram/SourceFiles/core/version.h | 30 + Telegram/build/build.bat | 213 ++++ Telegram/build/build.sh | 361 +++++++ Telegram/build/deploy.sh | 224 ++++ Telegram/build/makefile_static.sh | 65 ++ Telegram/build/replace.vbs | 23 + Telegram/build/set_version.bat | 139 +++ Telegram/build/setup.iss | 118 +++ Telegram/build/version | 6 + 23 files changed, 2470 insertions(+) create mode 100644 Telegram/Resources/langs/de.lproj/Localizable.strings create mode 100644 Telegram/Resources/langs/download.sh create mode 100644 Telegram/Resources/langs/en.lproj/Localizable.strings create mode 100644 Telegram/Resources/langs/es.lproj/Localizable.strings create mode 100644 Telegram/Resources/langs/it.lproj/Localizable.strings create mode 100644 Telegram/Resources/langs/lang.strings create mode 100644 Telegram/Resources/langs/list create mode 100644 Telegram/Resources/langs/nl.lproj/Localizable.strings create mode 100644 Telegram/Resources/langs/pt-BR.lproj/Localizable.strings create mode 100644 Telegram/Resources/langs/upload.sh create mode 100644 Telegram/Resources/winrc/Telegram.rc create mode 100644 Telegram/Resources/winrc/Updater.rc create mode 100644 Telegram/Resources/winrc/resource.h create mode 100644 Telegram/Resources/winrc/resource1.h create mode 100644 Telegram/SourceFiles/core/version.h create mode 100644 Telegram/build/build.bat create mode 100644 Telegram/build/build.sh create mode 100644 Telegram/build/deploy.sh create mode 100644 Telegram/build/makefile_static.sh create mode 100644 Telegram/build/replace.vbs create mode 100644 Telegram/build/set_version.bat create mode 100644 Telegram/build/setup.iss create mode 100644 Telegram/build/version diff --git a/Telegram/Resources/langs/de.lproj/Localizable.strings b/Telegram/Resources/langs/de.lproj/Localizable.strings new file mode 100644 index 0000000000..affee91bc2 --- /dev/null +++ b/Telegram/Resources/langs/de.lproj/Localizable.strings @@ -0,0 +1,17 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014 John Preston, https://desktop.telegram.org +*/ diff --git a/Telegram/Resources/langs/download.sh b/Telegram/Resources/langs/download.sh new file mode 100644 index 0000000000..0e428434ed --- /dev/null +++ b/Telegram/Resources/langs/download.sh @@ -0,0 +1,35 @@ +set -e +FullExecPath=$PWD +pushd `dirname $0` > /dev/null +FullScriptPath=`pwd` +popd > /dev/null + +if [ ! -d "$FullScriptPath/../../../../TelegramPrivate" ]; then + echo "" + echo "This script is for building the production version of Telegram Desktop." + echo "" + echo "For building custom versions please visit the build instructions page at:" + echo "https://github.com/telegramdesktop/tdesktop/#build-instructions" + exit +fi + +Error () { + cd $FullExecPath + echo "$1" + exit 1 +} + +cd $FullScriptPath/../../../../ +while IFS='' read -r line || [[ -n "$line" ]]; do + tx pull -f -l $line --minimum-perc=100 +done < tdesktop/Telegram/Resources/langs/list +cd translations/telegram-desktop.langstrings/ +for file in *.strings; do + iconv -f "UTF-16LE" -t "UTF-8" "$file" > "../../tdesktop/Telegram/Resources/langs/lang_$file.tmp" + awk '{ if (NR==1) sub(/^\xef\xbb\xbf/,""); sub(/ +/,""); print }' "../../tdesktop/Telegram/Resources/langs/lang_$file.tmp" > "../../tdesktop/Telegram/Resources/langs/lang_$file" + rm "../../tdesktop/Telegram/Resources/langs/lang_$file.tmp" +done +touch $FullScriptPath/../telegram.qrc + +cd $FullExecPath diff --git a/Telegram/Resources/langs/en.lproj/Localizable.strings b/Telegram/Resources/langs/en.lproj/Localizable.strings new file mode 100644 index 0000000000..affee91bc2 --- /dev/null +++ b/Telegram/Resources/langs/en.lproj/Localizable.strings @@ -0,0 +1,17 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014 John Preston, https://desktop.telegram.org +*/ diff --git a/Telegram/Resources/langs/es.lproj/Localizable.strings b/Telegram/Resources/langs/es.lproj/Localizable.strings new file mode 100644 index 0000000000..affee91bc2 --- /dev/null +++ b/Telegram/Resources/langs/es.lproj/Localizable.strings @@ -0,0 +1,17 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014 John Preston, https://desktop.telegram.org +*/ diff --git a/Telegram/Resources/langs/it.lproj/Localizable.strings b/Telegram/Resources/langs/it.lproj/Localizable.strings new file mode 100644 index 0000000000..affee91bc2 --- /dev/null +++ b/Telegram/Resources/langs/it.lproj/Localizable.strings @@ -0,0 +1,17 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014 John Preston, https://desktop.telegram.org +*/ diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings new file mode 100644 index 0000000000..f71a41df26 --- /dev/null +++ b/Telegram/Resources/langs/lang.strings @@ -0,0 +1,959 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org +*/ +"lng_language_name" = "English"; +"lng_switch_to_this" = "Switch to English"; + +"lng_menu_contacts" = "Contacts"; +"lng_menu_settings" = "Settings"; +"lng_menu_about" = "About"; +"lng_menu_update" = "Update"; +"lng_menu_restart" = "Restart"; +"lng_menu_back" = "Back"; + +"lng_disable_notifications_from_tray" = "Disable notifications"; +"lng_enable_notifications_from_tray" = "Enable notifications"; +"lng_open_from_tray" = "Open Telegram"; +"lng_minimize_to_tray" = "Minimize to tray"; +"lng_quit_from_tray" = "Quit Telegram"; +"lng_tray_icon_text" = "Telegram is still running here,\nyou can change this from settings page.\nIf this icon disappears from tray menu,\nyou can drag it here from hidden icons."; + +"lng_month1" = "January"; +"lng_month2" = "February"; +"lng_month3" = "March"; +"lng_month4" = "April"; +"lng_month5" = "May"; +"lng_month6" = "June"; +"lng_month7" = "July"; +"lng_month8" = "August"; +"lng_month9" = "September"; +"lng_month10" = "October"; +"lng_month11" = "November"; +"lng_month12" = "December"; + +"lng_month1_small" = "Jan"; +"lng_month2_small" = "Feb"; +"lng_month3_small" = "Mar"; +"lng_month4_small" = "Apr"; +"lng_month5_small" = "May"; +"lng_month6_small" = "Jun"; +"lng_month7_small" = "Jul"; +"lng_month8_small" = "Aug"; +"lng_month9_small" = "Sep"; +"lng_month10_small" = "Oct"; +"lng_month11_small" = "Nov"; +"lng_month12_small" = "Dec"; + +"lng_weekday1" = "Mon"; +"lng_weekday2" = "Tue"; +"lng_weekday3" = "Wed"; +"lng_weekday4" = "Thu"; +"lng_weekday5" = "Fri"; +"lng_weekday6" = "Sat"; +"lng_weekday7" = "Sun"; + +"lng_weekday1_full" = "Monday"; +"lng_weekday2_full" = "Tuesday"; +"lng_weekday3_full" = "Wednesday"; +"lng_weekday4_full" = "Thursday"; +"lng_weekday5_full" = "Friday"; +"lng_weekday6_full" = "Saturday"; +"lng_weekday7_full" = "Sunday"; + +"lng_month_day" = "{month} {day}"; +"lng_month_day_year" = "{month} {day}, {year}"; +"lng_month_year" = "{month}, {year}"; + +"lng_box_ok" = "OK"; + +"lng_cancel" = "Cancel"; +"lng_continue" = "Continue"; +"lng_close" = "Close"; +"lng_connecting" = "Connecting..."; +"lng_reconnecting" = "Reconnect {count:now|in # s|in # s}..."; +"lng_reconnecting_try_now" = "Try now"; + +"lng_status_service_notifications" = "service notifications"; +"lng_status_support" = "support"; +"lng_status_bot" = "bot"; +"lng_status_bot_reads_all" = "has access to messages"; +"lng_status_bot_not_reads_all" = "has no access to messages"; +"lng_status_offline" = "last seen a long time ago"; +"lng_status_recently" = "last seen recently"; +"lng_status_last_week" = "last seen within a week"; +"lng_status_last_month" = "last seen within a month"; +"lng_status_invisible" = "invisible"; +"lng_status_lastseen_now" = "last seen just now"; +"lng_status_lastseen_minutes" = "last seen {count:_not_used_|# minute|# minutes} ago"; +"lng_status_lastseen_hours" = "last seen {count:_not_used_|# hour|# hours} ago"; +"lng_status_lastseen_today" = "last seen today at {time}"; +"lng_status_lastseen_yesterday" = "last seen yesterday at {time}"; +"lng_status_lastseen_date" = "last seen {date}"; +"lng_status_lastseen_date_time" = "last seen {date} at {time}"; +"lng_status_online" = "online"; +"lng_status_connecting" = "connecting..."; + +"lng_chat_status_unaccessible" = "group is unaccessible"; +"lng_chat_status_members" = "{count:no members|# member|# members}"; +"lng_chat_status_members_online" = "{count:_not_used_|# member|# members}, {count_online:_not_used_|# online|# online}"; + +"lng_channel_status" = "channel"; +"lng_group_status" = "group"; + +"lng_channel_members_link" = "{count:_not_used_|# member|# members} »"; +"lng_channel_admins_link" = "{count:Manage administrators|# administrator|# administrators} »"; + +"lng_server_error" = "Internal server error."; +"lng_flood_error" = "Too many tries. Please try again later."; +"lng_gif_error" = "An error has occured while reading GIF animation :("; +"lng_edit_error" = "You cannot edit this message"; +"lng_edit_deleted" = "This message was deleted"; +"lng_edit_too_long" = "Your message text is too long"; +"lng_edit_message" = "Edit message"; +"lng_edit_message_text" = "New message text..."; +"lng_deleted" = "Unknown"; +"lng_deleted_message" = "Deleted message"; +"lng_pinned_message" = "Pinned message"; +"lng_pinned_unpin_sure" = "Would you like to unpin this message?"; +"lng_pinned_pin_sure" = "Would you like to pin this message?"; +"lng_pinned_pin" = "Pin"; +"lng_pinned_unpin" = "Unpin"; +"lng_pinned_notify" = "Notify all members"; + +"lng_intro" = "Welcome to the official [a href=\"https://telegram.org/\"]Telegram[/a] desktop app.\nIt's [b]fast[/b] and [b]secure[/b]."; +"lng_start_msgs" = "START MESSAGING"; + +"lng_intro_next" = "NEXT"; +"lng_intro_finish" = "SIGN UP"; +"lng_intro_submit" = "SUBMIT"; + +"lng_photo_caption" = "Caption"; + +"lng_phone_ph" = "Your phone number"; +"lng_phone_title" = "Your Phone"; +"lng_phone_desc" = "Please confirm your country code and\nenter your phone number."; +"lng_phone_notreg" = "Note: if you don't have a Telegram account yet,\nplease [b]sign up[/b] with your [a href=\"https://telegram.org/\"]iOS / Android[/a] or {signup_start}here »{signup_end}"; +"lng_country_code" = "Country Code"; +"lng_bad_country_code" = "Invalid Country Code"; +"lng_country_ph" = "Search"; +"lng_country_done" = "Done"; +"lng_country_none" = "Country not found"; +"lng_country_select" = "Select country"; + +"lng_code_ph" = "Your code"; +"lng_code_desc" = "We have sent you a message with activation\ncode to your phone. Please enter it below."; +"lng_code_telegram" = "Please enter the code you've just\nreceived in your previous [b]Telegram[/b] app."; +"lng_code_no_telegram" = "Send code via SMS"; +"lng_code_call" = "Telegram will dial your number in {minutes}:{seconds}"; +"lng_code_calling" = "Requesting a call from Telegram..."; +"lng_code_called" = "Telegram dialed your number"; + +"lng_bad_phone" = "Invalid phone number. Please try again."; +"lng_bad_phone_noreg" = "Phone number not registered."; +"lng_bad_code" = "You have entered an invalid code."; +"lng_bad_name" = "Please enter your first and last name."; +"lng_bad_photo" = "Bad image selected."; + +"lng_signin_title" = "Cloud password check"; +"lng_signin_desc" = "Please enter your cloud password."; +"lng_signin_recover_desc" = "Please enter the code from the e-mail."; +"lng_signin_password" = "Your cloud password"; +"lng_signin_code" = "Code from e-mail"; +"lng_signin_recover" = "Forgot password?"; +"lng_signin_recover_title" = "Password reset"; +"lng_signin_hint" = "Hint: {password_hint}"; +"lng_signin_recover_hint" = "Code was sent to {recover_email}"; +"lng_signin_bad_password" = "You have entered a wrong password."; +"lng_signin_wrong_code" = "You have entered an invalid code."; +"lng_signin_try_password" = "Having trouble accessing your e-mail?"; +"lng_signin_password_removed" = "Your cloud password was disabled.\nYou can set a new one in Settings."; +"lng_signin_no_email_forgot" = "Since you haven't provided a recovery\ne-mail when setting up your password, your remaining options are either to remember your password or to reset your account."; +"lng_signin_cant_email_forgot" = "If you can't restore access to the e-mail, your remaining options are either to remember your password or to reset your account."; +"lng_signin_reset_account" = "Reset your account"; +"lng_signin_sure_reset" = "Warning!\n\nYou will lose all your chats and messages, along with any media and files you shared!\n\nDo you want to reset your account?"; +"lng_signin_reset" = "Reset"; + +"lng_signup_title" = "Information and photo"; +"lng_signup_desc" = "Please enter your name and\nupload a photo."; + +"lng_signup_firstname" = "First Name"; +"lng_signup_lastname" = "Last Name"; + +"lng_dlg_filter" = "Search"; +"lng_dlg_new_group_name" = "Group name"; +"lng_dlg_new_channel_name" = "Channel name"; +"lng_no_contacts" = "You have no contacts"; +"lng_no_chats" = "Your chats will be here"; +"lng_contacts_loading" = "Loading..."; +"lng_contacts_not_found" = "No contacts found"; +"lng_dlg_search_chat" = "Search in this chat"; +"lng_dlg_search_channel" = "Search in this channel"; +"lng_dlg_search_for_messages" = "Search for messages"; + +"lng_settings_save" = "Save"; +"lng_settings_upload" = "Set Profile Photo"; +"lng_settings_crop_profile" = "Select a square area for your profile photo"; +"lng_settings_uploading_photo" = "Uploading photo..."; + +"lng_username_title" = "Username"; +"lng_username_about" = "You can choose a username on Telegram.\nIf you do, other people will be able to find\nyou by this username and contact you\nwithout knowing your phone number.\n\nYou can use a-z, 0-9 and underscores.\nMinimum length is 5 characters."; +"lng_username_choose" = "Choose your username."; +"lng_username_invalid" = "This username is invalid."; +"lng_username_occupied" = "This username is already occupied."; +"lng_username_too_short" = "This username is too short."; +"lng_username_bad_symbols" = "This username has bad symbols."; +"lng_username_available" = "This username is available."; +"lng_username_not_found" = "User @{user} not found."; +"lng_username_link_willbe" = "Such link will open a chat with you:"; +"lng_username_link" = "This link opens a chat with you:"; +"lng_username_copied" = "Link copied to clipboard."; + +"lng_settings_section_contact_info" = "Contact info"; +"lng_settings_phone_number" = "Phone number:"; +"lng_settings_username" = "Username:"; +"lng_settings_choose_username" = "Choose username"; + +"lng_settings_section_notify" = "Notifications"; +"lng_settings_desktop_notify" = "Desktop notifications"; +"lng_settings_show_name" = "Show sender's name"; +"lng_settings_show_preview" = "Show message preview"; +"lng_settings_use_windows" = "Use Windows notifications"; +"lng_settings_sound_notify" = "Play sound"; +"lng_settings_include_muted" = "Include muted chats in unread count"; + +"lng_notification_preview" = "You have a new message"; + +"lng_settings_section_general" = "General"; +"lng_settings_change_lang" = "Change language"; +"lng_languages" = "Languages"; +"lng_sure_save_language" = "Telegram will restart in order to change language"; +"lng_settings_auto_update" = "Update automatically"; +"lng_settings_current_version" = "Version {version}"; +"lng_settings_check_now" = "Check for updates"; +"lng_settings_update_checking" = "Checking for updates..."; +"lng_settings_latest_installed" = "Latest version is installed"; +"lng_settings_downloading" = "Downloading update {ready} / {total} MB..."; +"lng_settings_update_ready" = "New version is ready"; +"lng_settings_update_now" = "Restart Now"; +"lng_settings_update_fail" = "Update check failed :("; +"lng_settings_workmode_tray" = "Show tray icon"; +"lng_settings_workmode_window" = "Show taskbar icon"; +"lng_settings_auto_start" = "Launch Telegram when system starts"; +"lng_settings_start_min" = "Launch minimized"; +"lng_settings_add_sendto" = "Place Telegram in «Send to» menu"; +"lng_settings_scale_label" = "Interface scale"; +"lng_settings_scale_auto" = "Auto ({cur})"; + +"lng_settings_section_chat" = "Chat options"; +"lng_settings_replace_emojis" = "Replace emoji"; +"lng_settings_view_emojis" = "View list"; +"lng_settings_emoji_list" = "Supported emoji"; +"lng_settings_send_enter" = "Send by Enter"; +"lng_settings_send_ctrlenter" = "Send by Ctrl+Enter"; +"lng_settings_send_cmdenter" = "Send by Cmd+Enter"; + +"lng_settings_section_background" = "Chat background"; +"lng_settings_bg_from_gallery" = "Choose from gallery"; +"lng_settings_bg_from_file" = "Choose from file"; +"lng_settings_bg_tile" = "Tile background"; +"lng_settings_adaptive_wide" = "Adaptive layout for wide screens"; + +"lng_backgrounds_header" = "Choose your new chat background"; + +"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_clear" = "Clear all"; +"lng_download_path_header" = "Choose download path"; +"lng_download_path_default_radio" = "Telegram folder in system «Downloads»"; +"lng_download_path_temp_radio" = "Temp folder, cleared on logout or uninstall"; +"lng_download_path_dir_radio" = "Custom folder, cleared only manually"; +"lng_download_path_choose" = "Choose download path"; +"lng_sure_clear_downloads" = "Do you want to remove all downloaded files from temp folder? It is done automatically on logout or program uninstall."; +"lng_download_path_failed" = "File download could not be started. It could happen because of a bad download location.\n\nYou can change download path in Settings."; +"lng_download_path_settings" = "Settings"; +"lng_download_finish_failed" = "File download could not be finished.\n\nWould you like to try again?"; +"lng_download_path_clearing" = "Clearing..."; +"lng_download_path_cleared" = "Cleared!"; +"lng_download_path_clear_failed" = "Clear failed :("; + +"lng_settings_section_cache" = "Local storage"; +"lng_settings_no_data_cached" = "No cached data found!"; +"lng_settings_images_cached" = "{count:_not_used_|# image|# images}, {size}"; +"lng_settings_audios_cached" = "{count:_not_used_|# voice message|# voice messages}, {size}"; +"lng_local_storage_clear" = "Clear all"; +"lng_local_storage_clearing" = "Clearing..."; +"lng_local_storage_cleared" = "Cleared!"; +"lng_local_storage_clear_failed" = "Clear failed :("; + +"lng_settings_section_advanced" = "Advanced"; + +"lng_passcode_remove_button" = "Remove"; + +"lng_passcode_turn_on" = "Turn on local passcode"; +"lng_passcode_change" = "Change local passcode"; +"lng_passcode_create" = "Local passcode"; +"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_minutes" = "{count:_not_used_|# minute|# minutes}"; +"lng_passcode_autolock_hours" = "{count:_not_used_|# hour|# hours}"; +"lng_passcode_enter_old" = "Enter current passcode"; +"lng_passcode_enter_first" = "Enter a passcode"; +"lng_passcode_enter_new" = "Enter new passcode"; +"lng_passcode_confirm_new" = "Re-enter new passcode"; +"lng_passcode_about" = "When a local passcode is set, a lock icon appears in the top right corner of the window. Click it to lock the app.\n\nNote: if you forget your local passcode, you'll need to relogin in Telegram Desktop."; +"lng_passcode_differ" = "Passcodes are different"; +"lng_passcode_wrong" = "Wrong passcode"; +"lng_passcode_is_same" = "Passcode was not changed"; +"lng_passcode_enter" = "Enter your local passcode"; +"lng_passcode_submit" = "Submit"; +"lng_passcode_logout" = "Log out"; +"lng_passcode_need_unblock" = "You need to unlock me first."; + +"lng_cloud_password_waiting" = "Confirmation link sent to {email}..."; +"lng_cloud_password_change" = "Change cloud password"; +"lng_cloud_password_create" = "Cloud password"; +"lng_cloud_password_remove" = "Remove cloud password"; +"lng_cloud_password_set" = "Enable two-step verification"; +"lng_cloud_password_edit" = "Change cloud password"; +"lng_cloud_password_enter_old" = "Enter current password"; +"lng_cloud_password_enter_first" = "Enter a password"; +"lng_cloud_password_enter_new" = "Enter new password"; +"lng_cloud_password_confirm_new" = "Re-enter new password"; +"lng_cloud_password_hint" = "Enter password hint"; +"lng_cloud_password_change_hint" = "Enter new password hint"; +"lng_cloud_password_bad" = "Password and hint cannot be the same."; +"lng_cloud_password_email" = "Enter recovery e-mail"; +"lng_cloud_password_bad_email" = "Incorrect e-mail, please try other."; +"lng_cloud_password_about" = "This password will be asked when you log in on a new device in addition to the pin code."; +"lng_cloud_password_about_recover" = "Warning! Are you sure you don't want to\nadd a password recovery e-mail?\n\nIf you forget your password, you will\nlose access to your Telegram account."; +"lng_cloud_password_skip_email" = "Skip e-mail"; +"lng_cloud_password_almost" = "A confirmation link was sent to the\ne-mail you provided. Two-step verification will be enabled as soon as you follow that link."; +"lng_cloud_password_was_set" = "Two-step verification enabled."; +"lng_cloud_password_updated" = "Your cloud password was updated."; +"lng_cloud_password_removed" = "Two-step verification was disabled."; +"lng_cloud_password_differ" = "Passwords do not match"; +"lng_cloud_password_wrong" = "Wrong cloud password"; +"lng_cloud_password_is_same" = "Password was not changed"; + +"lng_connection_type" = "Connection type:"; +"lng_connection_auto_connecting" = "Default (connecting...)"; +"lng_connection_auto" = "Default ({transport} used)"; +"lng_connection_proxy_connecting" = "Connecting through proxy..."; +"lng_connection_proxy" = "{transport} with proxy"; +"lng_connection_header" = "Connection type"; +"lng_connection_auto_rb" = "Auto (TCP if available or HTTP)"; +"lng_connection_http_proxy_rb" = "HTTP with custom http-proxy"; +"lng_connection_tcp_proxy_rb" = "TCP with custom socks5-proxy"; +"lng_connection_try_ipv6" = "Try connecting through IPv6"; +"lng_connection_host_ph" = "Hostname"; +"lng_connection_port_ph" = "Port"; +"lng_connection_user_ph" = "Username"; +"lng_connection_password_ph" = "Password"; +"lng_connection_save" = "Save"; +"lng_settings_show_sessions" = "Show all sessions"; +"lng_settings_reset" = "Terminate all other sessions"; +"lng_settings_reset_sure" = "Are you sure you want to terminate\nall other sessions?"; +"lng_settings_reset_one_sure" = "Do you want to terminate this session?"; +"lng_settings_reset_button" = "Terminate"; +"lng_settings_reset_done" = "Other sessions terminated"; +"lng_settings_ask_question" = "Ask a Question"; +"lng_settings_ask_sure" = "Please note that Telegram Support is done by volunteers. We try to respond as quickly as possible, but it may take a while.\n\nPlease take a look at the Telegram FAQ: it has important troubleshooting tips and answers to most questions."; +"lng_settings_faq_button" = "Go to FAQ"; +"lng_settings_ask_ok" = "Ask"; +"lng_settings_faq" = "Telegram FAQ"; +"lng_settings_logout" = "Log Out"; +"lng_sure_logout" = "Are you sure you want to log out?"; + +"lng_settings_need_restart" = "You need to restart for applying some of the new settings. Restart now?"; +"lng_settings_restart_now" = "RESTART"; +"lng_settings_restart_later" = "LATER"; + +"lng_sessions_header" = "Current session"; +"lng_sessions_other_header" = "Active sessions"; +"lng_sessions_no_other" = "No other sessions"; +"lng_sessions_other_desc" = "You can log in to Telegram from other mobile, tablet and desktop devices, using the same phone number. All your data will be instantly synchronized."; +"lng_sessions_terminate_all" = "Terminate all other sessions"; + +"lng_preview_loading" = "Getting Link Info..."; + +"lng_profile_chat_unaccessible" = "Group is unaccessible"; +"lng_profile_about_section" = "About"; +"lng_profile_description_section" = "Description"; +"lng_profile_settings_section" = "Settings"; +"lng_profile_actions_section" = "Actions"; +"lng_profile_bot_settings" = "Settings"; +"lng_profile_bot_help" = "Help"; +"lng_profile_create_public_link" = "Create public link"; +"lng_profile_edit_public_link" = "Edit public link"; +"lng_profile_participants_section" = "Members"; +"lng_profile_info" = "Contact info"; +"lng_profile_group_info" = "Group info"; +"lng_profile_channel_info" = "Channel info"; +"lng_profile_add_contact" = "Add Contact"; +"lng_profile_edit_contact" = "Edit"; +"lng_profile_enable_notifications" = "Notifications"; +"lng_profile_clear_history" = "Clear history"; +"lng_profile_delete_conversation" = "Delete conversation"; +"lng_profile_clear_and_exit" = "Delete and exit"; +"lng_profile_leave_channel" = "Leave channel"; +"lng_profile_delete_channel" = "Delete channel"; +"lng_profile_leave_group" = "Leave group"; +"lng_profile_delete_group" = "Delete group"; +"lng_profile_search_messages" = "Search for messages"; +"lng_profile_block_user" = "Block user"; +"lng_profile_unblock_user" = "Unblock user"; +"lng_profile_block_bot" = "Stop and block bot"; +"lng_profile_unblock_bot" = "Unblock bot"; +"lng_profile_send_message" = "Send Message"; +"lng_profile_share_contact" = "Share Contact"; +"lng_profile_invite_to_group" = "Add to Group"; +"lng_profile_delete_contact" = "Delete"; +"lng_profile_set_group_photo" = "Set Photo"; +"lng_profile_add_participant" = "Add Members"; +"lng_profile_delete_and_exit" = "Leave"; +"lng_profile_kick" = "Remove"; +"lng_profile_admin" = "admin"; +"lng_profile_sure_kick" = "Remove {user} from the group?"; +"lng_profile_sure_kick_channel" = "Remove {user} from the channel?"; +"lng_profile_sure_kick_admin" = "Remove {user} from administrators?"; +"lng_profile_loading" = "Loading..."; +"lng_profile_shared_media" = "Shared media"; +"lng_profile_no_media" = "No media in this conversation."; +"lng_profile_photos" = "{count:_not_used_|# photo|# photos} »"; +"lng_profile_photos_header" = "Photos overview"; +"lng_profile_videos" = "{count:_not_used_|# video file|# video files} »"; +"lng_profile_videos_header" = "Video files overview"; +"lng_profile_songs" = "{count:_not_used_|# audio file|# audio files} »"; +"lng_profile_songs_header" = "Audio files overview"; +"lng_profile_files" = "{count:_not_used_|# file|# files} »"; +"lng_profile_files_header" = "Files overview"; +"lng_profile_audios" = "{count:_not_used_|# voice message|# voice messages} »"; +"lng_profile_audios_header" = "Voice messages overview"; +"lng_profile_shared_links" = "{count:_not_used_|# shared link|# shared links} »"; +"lng_profile_shared_links_header" = "Shared links overview"; +"lng_profile_copy_phone" = "Copy phone number"; +"lng_profile_copy_fullname" = "Copy name"; + +"lng_channel_add_admins" = "New administrator"; +"lng_channel_add_members" = "Add members"; +"lng_channel_members" = "Members"; +"lng_channel_only_last_shown" = "Only the last {count:_not_used_|# member is|# members are} shown here"; +"lng_channel_admins" = "Administrators"; +"lng_channel_add_admin" = "Add Administrator"; +"lng_channel_admin_sure" = "Add {user} to administrators?"; +"lng_channel_admins_too_much" = "Sorry, you have reached the limit of the administrators. Please remove one administrator first."; + +"lng_chat_all_members_admins" = "All Members Are Admins"; +"lng_chat_about_all_admins" = "Group members can add new members, edit name and photo of the group."; +"lng_chat_about_admins" = "Group admins can add and remove members, edit name and photo of the group."; + +"lng_participant_filter" = "Search"; +"lng_participant_invite" = "Invite"; +"lng_participant_invite_sorry" = "Sorry, you can only add the first {count:_not_used|# member|# members} to a channel personally.\n\nFrom now on, people will need to join via your invite link."; +"lng_create_group_back" = "Back"; +"lng_create_group_next" = "Next"; +"lng_create_group_create" = "Create"; +"lng_create_group_title" = "New Group"; +"lng_create_group_about" = "Groups are ideal for limited communities,\nthey can have up to {count:_not_used|# member|# members}"; +"lng_create_channel_title" = "New Channel"; +"lng_create_channel_about" = "Channels are a tool for broadcasting your messages to unlimited audiences"; +"lng_create_public_channel_title" = "Public Channel"; +"lng_create_public_channel_about" = "Anyone can find the channel in search and join"; +"lng_create_private_channel_title" = "Private Channel"; +"lng_create_private_channel_about" = "Only people with a special invite link may join"; +"lng_create_public_group_title" = "Public Group"; +"lng_create_public_group_about" = "Anyone can find the group in search and join, chat history is available to everybody"; +"lng_create_private_group_title" = "Private Group"; +"lng_create_private_group_about" = "People can only join if they were invited or have an invite link"; +"lng_create_channel_comments" = "Enable Comments"; +"lng_create_channel_comments_about" = "If you enable comments, members will be able to discuss your posts in the channel"; +"lng_create_group_skip" = "Skip"; + +"lng_create_channel_link_invalid" = "This link is invalid"; +"lng_create_channel_link_occupied" = "Sorry, this link is already occupied"; +"lng_create_channel_link_too_short" = "Sorry, this link is too short"; +"lng_create_channel_link_bad_symbols" = "Sorry, this link has bad symbols"; +"lng_create_channel_link_available" = "This link is available"; +"lng_create_channel_link_copied" = "Link copied to clipboard"; + +"lng_create_group_crop" = "Select a square area for group photo"; +"lng_create_channel_crop" = "Select a square area for channel photo"; + +"lng_failed_add_participant" = "Could not add user. Please try again later."; +"lng_failed_add_not_mutual" = "Sorry, if a person leaves a group, only a mutual contact can bring them back (they need to have your phone number, and you need theirs)."; +"lng_failed_add_not_mutual_channel" = "Sorry, if a person leaves a channel, only a mutual contact can bring them back (they need to have your phone number, and you need theirs)."; + +"lng_sure_delete_contact" = "Are you sure, you want to delete {contact} from your contact list?"; +"lng_sure_delete_history" = "Are you sure, you want to delete all message history with {contact}?\n\nThis action cannot be undone."; +"lng_sure_delete_group_history" = "Are you sure, you want to delete all message history in «{group}»?\n\nThis action cannot be undone."; +"lng_sure_delete_and_exit" = "Are you sure, you want to delete all message history and leave «{group}»?\n\nThis action cannot be undone."; +"lng_sure_leave_channel" = "Are you sure, you want to leave\nthis channel?"; +"lng_sure_delete_channel" = "Are you sure, you want to delete this channel? All members will be removed and all messages will be lost."; +"lng_sure_leave_group" = "Are you sure, you want to leave\nthis group? This action cannot be undone."; +"lng_sure_delete_group" = "Are you sure, you want to delete this group? All members will be removed and all messages will be lost."; + +"lng_message_empty" = "Empty Message"; +"lng_message_unsupported" = "This message is not supported by your version of Telegram Desktop. Please update to the last version in Settings or install it from {link}"; + +"lng_action_add_user" = "{from} added {user}"; +"lng_action_add_users_many" = "{from} added {users}"; +"lng_action_add_users_and_one" = "{accumulated}, {user}"; +"lng_action_add_users_and_last" = "{accumulated} and {user}"; +"lng_action_add_you" = "{from} added you to this channel"; +"lng_action_you_joined" = "You joined this channel"; +"lng_action_add_you_group" = "{from} added you to this group"; +"lng_action_you_joined_group" = "You joined this group"; +"lng_action_kick_user" = "{from} removed {user}"; +"lng_action_user_left" = "{from} left the group"; +"lng_action_user_joined" = "{from} joined the group"; +"lng_action_user_joined_by_link" = "{from} joined the group via invite link"; +"lng_action_user_registered" = "{from} just joined Telegram"; +"lng_action_removed_photo" = "{from} removed group photo"; +"lng_action_removed_photo_channel" = "Channel photo removed"; +"lng_action_changed_photo" = "{from} updated group photo"; +"lng_action_changed_photo_channel" = "Channel photo updated"; +"lng_action_changed_title" = "{from} changed group name to «{title}»"; +"lng_action_changed_title_channel" = "Channel name was changed to «{title}»"; +"lng_action_created_chat" = "{from} created group «{title}»"; +"lng_action_created_channel" = "Channel «{title}» created"; +"lng_action_group_migrate" = "The group was upgraded to a supergroup"; +"lng_action_pinned_message" = "{from} pinned «{text}»"; +"lng_action_pinned_media" = "{from} pinned {media}"; +"lng_action_pinned_media_photo" = "a photo"; +"lng_action_pinned_media_video" = "a video file"; +"lng_action_pinned_media_audio" = "an audio file"; +"lng_action_pinned_media_voice" = "a voice message"; +"lng_action_pinned_media_file" = "a file"; +"lng_action_pinned_media_gif" = "a GIF animation"; +"lng_action_pinned_media_contact" = "a contact information"; +"lng_action_pinned_media_location" = "a location mark"; +"lng_action_pinned_media_sticker" = "a sticker"; + +"lng_profile_migrate_reached" = "{count:_not_used_|# member|# members} limit reached"; +"lng_profile_migrate_about" = "If you'd like to go over this limit, you can upgrade your group to a supergroup. In supergroups:"; +"lng_profile_migrate_feature1" = "— The members limit is {count:_not_used_|# user|# users}"; +"lng_profile_migrate_feature2" = "— New members see the entire chat history"; +"lng_profile_migrate_feature3" = "— Admins delete messages for everyone"; +"lng_profile_migrate_feature4" = "— Notifications are muted by default"; +"lng_profile_migrate_button" = "Upgrade to supergroup"; +"lng_profile_migrate_sure" = "Are you sure you want to upgrade this group to supergroup? This action cannot be undone."; +"lng_profile_convert_button" = "Convert to supergroup"; +"lng_profile_convert_title" = "Convert to supergroup"; +"lng_profile_convert_about" = "In supergroups:"; +"lng_profile_convert_feature1" = "— New members see the full message history"; +"lng_profile_convert_feature2" = "— Messages are deleted for all members"; +"lng_profile_convert_feature3" = "— Members can edit their own messages"; +"lng_profile_convert_feature4" = "— Creator can set a public link for the group"; +"lng_profile_convert_warning" = "{bold_start}Note:{bold_end} This action can not be undone"; +"lng_profile_convert_confirm" = "Convert"; +"lng_profile_add_more_after_upgrade" = "You will be able to add up to {count:_not_used_|# member|# members} after you upgrade your group to a supergroup."; + +"lng_channel_comments_count" = "{count:_not_used_|# comment|# comments}"; +"lng_channel_hide_comments" = "Hide comments"; +"lng_channel_not_accessible" = "Sorry, this channel is not accessible."; +"lng_group_not_accessible" = "Sorry, this group is not accessible."; + +"lng_channels_too_much_public_existing" = "Sorry, you have created too many public channels already. Please delete one first."; +"lng_channels_too_much_public" = "Sorry, you have created too many public channels.\n\nYou can either create a private channel\nor delete one of your public channels first."; + +"lng_group_invite_bad_link" = "This invite link is broken or has expired."; +"lng_group_invite_want_join" = "Do you want to join the group «{title}»?"; +"lng_group_invite_want_join_channel" = "Do you want to join the channel «{title}»?"; +"lng_group_invite_join" = "Join"; + +"lng_group_invite_link" = "Invite link:"; +"lng_group_invite_create" = "Create an invite link"; +"lng_group_invite_about" = "Telegram users will be able to join\nyour group by following this link."; +"lng_group_invite_create_new" = "Revoke invite link"; +"lng_group_invite_about_new" = "Your previous link will be deactivated\nand we'll generate a new invite link for you."; +"lng_group_invite_copied" = "Invite link copied to clipboard."; +"lng_group_invite_no_room" = "Unable to join this group because there are too many members in it already."; + +"lng_channel_public_link_copied" = "Link copied to clipboard."; + +"lng_forwarded" = "Forwarded from {user}"; +"lng_forwarded_channel" = "Forwarded from {channel}"; +"lng_forwarded_via" = "Forwarded from {user} via {inline_bot}"; +"lng_forwarded_channel_via" = "Forwarded from {channel} via {inline_bot}"; +"lng_forwarded_signed" = "{channel} ({user})"; +"lng_in_reply_to" = "In reply to"; +"lng_edited" = "Edited"; +"lng_edited_date" = "Edited: {date}"; +"lng_cancel_edit_post_sure" = "Cancel editing?"; +"lng_cancel_edit_post_yes" = "Yes"; +"lng_cancel_edit_post_no" = "No"; + +"lng_bot_share_location_unavailable" = "Sorry, the location sharing is currently unavailable in Telegram Desktop."; +"lng_bot_inline_geo_unavailable" = "Sorry, this bot requires location sharing.\nIt is not available in Telegram Desktop."; +"lng_bot_share_phone" = "Share Phone Number?"; +"lng_bot_share_phone_confirm" = "Share"; + +"lng_attach_failed" = "Failed"; +"lng_attach_file" = "File"; +"lng_attach_photo" = "Photo"; + +"lng_media_type" = "Media type"; +"lng_media_type_photos" = "Photos"; +"lng_media_type_videos" = "Video files"; +"lng_media_type_songs" = "Audio files"; +"lng_media_type_files" = "Files"; +"lng_media_type_audios" = "Voice messages"; +"lng_media_type_links" = "Shared links"; + +"lng_media_open_with" = "Open With"; +"lng_media_download" = "Download"; +"lng_media_cancel" = "Cancel"; +"lng_media_video" = "Video file"; +"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_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"; +"lng_emoji_category4" = "Activity"; +"lng_emoji_category5" = "Travel & Places"; +"lng_emoji_category6" = "Objects"; +"lng_emoji_category7" = "Symbols & Flags"; + +"lng_switch_stickers" = "Stickers"; +"lng_switch_stickers_gifs" = "GIFs & Stickers"; +"lng_switch_emoji" = "Emoji"; + +"lng_saved_gifs" = "Saved GIFs"; +"lng_inline_bot_results" = "Results from {inline_bot}"; +"lng_inline_bot_no_results" = "No results"; +"lng_inline_bot_via" = "via {inline_bot}"; + +"lng_box_remove" = "Remove"; + +"lng_custom_stickers" = "Custom stickers"; +"lng_stickers_remove_pack" = "Remove «{sticker_pack}»?"; +"lng_stickers_add_pack" = "Add stickers"; +"lng_stickers_share_pack" = "Share Stickers"; +"lng_stickers_not_found" = "Sticker pack not found."; +"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_packs" = "Sticker Packs"; +"lng_stickers_reorder" = "Click and drag to reorder sticker packs"; +"lng_stickers_remove" = "Delete"; +"lng_stickers_return" = "Undo"; +"lng_stickers_restore" = "Restore"; +"lng_stickers_count" = "{count:Loading...|# sticker|# stickers}"; + +"lng_in_dlg_photo" = "Photo"; +"lng_in_dlg_video" = "Video file"; +"lng_in_dlg_audio_file" = "Audio file"; +"lng_in_dlg_contact" = "Contact"; +"lng_in_dlg_audio" = "Voice message"; +"lng_in_dlg_file" = "File"; +"lng_in_dlg_sticker" = "Sticker"; +"lng_in_dlg_sticker_emoji" = "{emoji} (sticker)"; + +"lng_ban_user" = "Ban User"; +"lng_delete_all_from" = "Delete all from this user"; +"lng_report_spam" = "Report Spam"; +"lng_report_spam_hide" = "Hide"; +"lng_report_spam_thanks" = "Thank you for your report!"; +"lng_report_spam_sure" = "Are you sure you want to report spam from this user?"; +"lng_report_spam_sure_group" = "Are you sure you want to report spam in this group?"; +"lng_report_spam_sure_channel" = "Are you sure you want to report spam in this channel?"; +"lng_report_spam_ok" = "Report"; +"lng_cant_send_to_not_contact" = "Sorry, you can only send messages to\nmutual contacts at the moment.\n{more_info}"; +"lng_cant_invite_not_contact" = "Sorry, you can only add mutual contacts\nto groups at the moment.\n{more_info}"; +"lng_cant_invite_not_contact_channel" = "Sorry, you can only add mutual contacts\nto channels at the moment.\n{more_info}"; +"lng_cant_more_info" = "More info »"; +"lng_cant_invite_banned" = "Sorry, only admin can add this user."; +"lng_cant_invite_privacy" = "Sorry, you cannot add this user to groups because of their privacy settings."; +"lng_cant_invite_privacy_channel" = "Sorry, you cannot add this user to channels because of their privacy settings."; +"lng_cant_do_this" = "Sorry, this action is unavailable."; + +"lng_send_button" = "Send"; +"lng_message_ph" = "Write a message..."; +"lng_comment_ph" = "Write a comment..."; +"lng_broadcast_ph" = "Broadcast a message..."; +"lng_broadcast_silent_ph" = "Silent broadcast..."; +"lng_record_cancel" = "Release outside this field to cancel"; +"lng_will_be_notified" = "Members will be notified when you post"; +"lng_wont_be_notified" = "Members will not be notified when you post"; +"lng_empty_history" = ""; +"lng_willbe_history" = "Please select a chat to start messaging"; +"lng_message_with_from" = "[c]{from}:[/c] {message}"; +"lng_from_you" = "You"; +"lng_bot_description" = "What can this bot do?"; +"lng_unblock_button" = "Unblock"; +"lng_channel_join" = "Join Channel"; +"lng_channel_mute" = "Mute"; +"lng_channel_unmute" = "Unmute"; + +"lng_open_this_link" = "Open this link?"; +"lng_open_link" = "Open"; + +"lng_bot_start" = "Start"; +"lng_bot_choose_group" = "Choose Group"; +"lng_bot_no_groups" = "You have no groups"; +"lng_bot_groups_not_found" = "No groups found"; +"lng_bot_sure_invite" = "Add the bot to «{group}»?"; +"lng_bot_already_in_group" = "The bot is already a member of the group."; + +"lng_typing" = "typing"; +"lng_user_typing" = "{user} is typing"; +"lng_users_typing" = "{user} and {second_user} are typing"; +"lng_many_typing" = "{count:_not_used_|# is|# are} typing"; +"lng_send_action_record_video" = "recording a video"; +"lng_user_action_record_video" = "{user} is recording a video"; +"lng_send_action_upload_video" = "sending a video"; +"lng_user_action_upload_video" = "{user} is sending a video"; +"lng_send_action_record_audio" = "recording a voice message"; +"lng_user_action_record_audio" = "{user} is recording a voice message"; +"lng_send_action_upload_audio" = "sending a voice message"; +"lng_user_action_upload_audio" = "{user} is sending a voice message"; +"lng_send_action_upload_photo" = "sending a photo"; +"lng_user_action_upload_photo" = "{user} is sending a photo"; +"lng_send_action_upload_file" = "sending a file"; +"lng_user_action_upload_file" = "{user} is sending a file"; +"lng_send_action_geo_location" = "picking a location"; +"lng_user_action_geo_location" = "{user} is picking a location"; +"lng_send_action_choose_contact" = "choosing a contact"; +"lng_user_action_choose_contact" = "{user} is choosing a contact"; +"lng_unread_bar" = "{count:_not_used_|# unread message|# unread messages}"; + +"lng_maps_point" = "Location"; +"lng_save_photo" = "Save image"; +"lng_save_video" = "Save video file"; +"lng_save_audio_file" = "Save audio file"; +"lng_save_audio" = "Save voice message"; +"lng_save_file" = "Save file"; +"lng_save_downloaded" = "{ready} / {total} {mb}"; +"lng_duration_and_size" = "{duration}, {size}"; +"lng_duration_played" = "{played} / {duration}"; +"lng_date_and_duration" = "{date}, {duration}"; +"lng_choose_images" = "Choose images"; + +"lng_context_view_profile" = "View profile"; +"lng_context_view_group" = "View group info"; +"lng_context_view_channel" = "View channel info"; + +"lng_context_copy_link" = "Copy Link"; +"lng_context_copy_post_link" = "Copy Post Link"; +"lng_context_copy_email" = "Copy email address"; +"lng_context_copy_hashtag" = "Copy hashtag"; +"lng_context_copy_mention" = "Copy username"; +"lng_context_save_image" = "Save Image As..."; +"lng_context_forward_image" = "Forward Image"; +"lng_context_delete_image" = "Delete Image"; +"lng_context_copy_image" = "Copy Image"; +"lng_context_close_image" = "Close Image"; +"lng_context_cancel_download" = "Cancel Download"; +"lng_context_show_in_folder" = "Show in Folder"; +"lng_context_show_in_finder" = "Show in Finder"; +"lng_context_save_video" = "Save Video File As..."; +"lng_context_save_audio_file" = "Save Audio File As..."; +"lng_context_save_audio" = "Save Voice Message As..."; +"lng_context_pack_info" = "Pack Info"; +"lng_context_pack_add" = "Add Stickers"; +"lng_context_save_file" = "Save File As..."; +"lng_context_forward_file" = "Forward File"; +"lng_context_delete_file" = "Delete File"; +"lng_context_close_file" = "Close File"; +"lng_context_copy_text" = "Copy Text"; +"lng_context_save_gif" = "Save GIF"; +"lng_context_to_msg" = "Go To Message"; +"lng_context_reply_msg" = "Reply"; +"lng_context_edit_msg" = "Edit"; +"lng_context_forward_msg" = "Forward Message"; +"lng_context_delete_msg" = "Delete Message"; +"lng_context_select_msg" = "Select Message"; +"lng_context_pin_msg" = "Pin Message"; +"lng_context_unpin_msg" = "Unpin Message"; +"lng_context_cancel_upload" = "Cancel Upload"; +"lng_context_copy_selected" = "Copy Selected Text"; +"lng_context_forward_selected" = "Forward Selected"; +"lng_context_delete_selected" = "Delete Selected"; +"lng_context_clear_selection" = "Clear Selection"; +"lng_really_send_image" = "Do you want to send this image?"; +"lng_really_send_file" = "Do you want to send this file?"; +"lng_really_share_contact" = "Do you want to share this contact?"; +"lng_send_image_compressed" = "Send compressed image"; +"lng_send_image_empty" = "Could not send an empty file :("; +"lng_send_image_too_large" = "Could not send a file, because it is larger than 1.5 GB :("; +"lng_send_folder" = "Could not send «{name}» because it is a directory :("; + +"lng_forward_choose" = "Choose recipient..."; +"lng_forward_cant" = "Sorry, no way to forward here :("; +"lng_forward_confirm" = "Forward to {recipient}?"; +"lng_forward_share_contact" = "Share contact to {recipient}?"; +"lng_forward_send_file_confirm" = "Send «{name}» to {recipient}?"; +"lng_forward_send_files_confirm" = "Send selected files to {recipient}?"; +"lng_forward_send" = "Send"; +"lng_forward_messages" = "{count:_not_used_|Forwarded message|# forwarded messages}"; +"lng_forwarding_from" = "{user} and {count:_not_used_|# other|# others}"; +"lng_forwarding_from_two" = "{user} and {second_user}"; +"lng_inline_switch_choose" = "Choose conversation..."; +"lng_inline_switch_cant" = "Sorry, no way to write here :("; + +"lng_share_cant" = "Sorry, no way to share here :("; +"lng_reply_cant" = "Sorry, no way to reply to an old message in supergroup :("; +"lng_reply_cant_forward" = "Sorry, no way to reply to an old message in supergroup :( Do you wish to forward it and add your comment?"; + +"lng_contact_phone" = "Phone number"; +"lng_enter_contact_data" = "New Contact"; +"lng_edit_group_title" = "Edit group name"; +"lng_edit_contact_title" = "Edit contact name"; +"lng_edit_channel_title" = "Edit channel"; +"lng_edit_sign_messages" = "Sign messages"; +"lng_edit_group" = "Edit group"; +"lng_edit_self_title" = "Edit your name"; +"lng_confirm_contact_data" = "New Contact"; +"lng_add_contact" = "Create"; +"lng_add_contact_button" = "New contact"; +"lng_contacts_header" = "Contacts"; +"lng_contact_not_joined" = "Unfortunately {name} did not join Telegram yet, but you can send your friend an invitation.\n\nWe will notify you about any of your contacts who is joining Telegram."; +"lng_try_other_contact" = "Try other"; +"lng_create_group_link" = "Link"; +"lng_create_group_invite_link" = "Invite link"; +"lng_create_group_photo" = "Set Photo"; +"lng_create_group_description" = "Description (optional)"; + +"lng_drag_images_here" = "Drop images here"; +"lng_drag_photos_here" = "Drop photos here"; +"lng_drag_files_here" = "Drop files here"; + +"lng_drag_to_send_quick" = "to send them in a quick way"; +"lng_drag_to_send_no_compression" = "to send them without compression"; +"lng_drag_to_send_files" = "to send them as files"; + +"lng_selected_clear" = "Cancel"; +"lng_selected_delete" = "Delete"; +"lng_selected_forward" = "Forward"; +"lng_selected_count" = "{count:_not_used_|# message|# messages}"; +"lng_selected_cancel_sure_this" = "Cancel uploading?"; +"lng_selected_upload_stop" = "Stop"; +"lng_selected_delete_sure_this" = "Do you want to delete this message?"; +"lng_selected_delete_sure" = "Do you want to delete {count:_not_used_|# message|# messages}?"; +"lng_box_delete" = "Delete"; +"lng_box_leave" = "Leave"; + +"lng_about_version" = "version {version}"; +"lng_about_text_1" = "Official free messaging app based on [a href=\"https://core.telegram.org/api\"]Telegram API[/a]\nfor speed and security"; +"lng_about_text_2" = "This software is licensed under [a href=\"https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\"]GNU GPL[/a] version 3.\nSource code is available on [a href=\"https://github.com/telegramdesktop/tdesktop\"]GitHub[/a]."; +"lng_about_text_3" = "Visit {faq_open}Telegram FAQ{faq_close} for more info."; +"lng_about_done" = "Done"; + +"lng_search_found_results" = "{count:No messages found|Found # message|Found # messages}"; +"lng_search_global_results" = "Global search results"; + +"lng_media_save_progress" = "{ready} of {total} {mb}"; +"lng_mediaview_save_as" = "Save As..."; +"lng_mediaview_copy" = "Copy"; +"lng_mediaview_forward" = "Forward"; +"lng_mediaview_delete" = "Delete"; +"lng_mediaview_photos_all" = "View all photos"; +"lng_mediaview_files_all" = "View all files"; +"lng_mediaview_single_photo" = "Single Photo"; +"lng_mediaview_group_photo" = "Group Photo"; +"lng_mediaview_channel_photo" = "Channel Photo"; +"lng_mediaview_profile_photo" = "Profile Photo"; +"lng_mediaview_file_n_of_count" = "{file} {n} of {count}"; +"lng_mediaview_n_of_count" = "Photo {n} of {count}"; +"lng_mediaview_doc_image" = "File"; +"lng_mediaview_today" = "today at {time}"; +"lng_mediaview_yesterday" = "yesterday at {time}"; +"lng_mediaview_date_time" = "{date} at {time}"; + +"lng_mediaview_saved" = "Image was saved to your [c]Downloads[/c] folder"; + +"lng_new_authorization" = "{name},\nWe detected a login into your account from a new device on {day}, {date} at {time}\n\nDevice: {device}\nLocation: {location}\n\nIf this wasn't you, you can go to Settings — Show all sessions and terminate that session.\n\nIf you think that somebody logged in to your account against your will, you can enable two-step verification in Settings.\n\nSincerely,\nThe Telegram Team"; + +"lng_new_version_wrap" = "Telegram Desktop was updated to version {version}\n\n{changes}\n\nFull version history is available here:\n{link}"; +"lng_new_version_minor" = "— Bug fixes and other minor improvements"; +"lng_new_version_text" = "BOTS 2.0\n\n— Introducing Bot API 2.0, the biggest update to our bot platform since June 2015.\n— Bots can now update existing messages on the fly as you interact with them.\n— New Inline keyboards with callback, 'open URL' or 'switch to inline mode' buttons help create seamless interfaces.\n— Inline bots can now send all attachments supported by Telegram (videos, music, stickers, locations, etc.).\n— Try out these sample bots to see what's coming your way soon: @music, @sticker, @youtube, @foursquare\n\nMore info: {link}"; + +"lng_menu_insert_unicode" = "Insert Unicode control character"; + +"lng_full_name" = "{first_name} {last_name}"; + +// Not used + +"lng_topbar_info" = "Info"; + +// Wnd specific + +"lng_wnd_choose_program_menu" = "Choose Default Program..."; + +"lng_wnd_menu_undo" = "Undo"; +"lng_wnd_menu_redo" = "Redo"; + +// Linux specific + +"lng_linux_menu_undo" = "Undo"; +"lng_linux_menu_redo" = "Redo"; + +// Mac specific + +"lng_mac_choose_program_menu" = "Other..."; + +"lng_mac_choose_app" = "Choose Application"; +"lng_mac_choose_text" = "Choose an application to open the document \"{file}\"."; +"lng_mac_enable_filter" = "Enable:"; +"lng_mac_recommended_apps" = "Recommended Applications"; +"lng_mac_all_apps" = "All Applications"; +"lng_mac_always_open_with" = "Always Open With"; +"lng_mac_this_app_can_open" = "This application can open \"{file}\"."; +"lng_mac_not_known_app" = "It's not known if this application can open \"{file}\"."; + +"lng_mac_menu_services" = "Services"; +"lng_mac_menu_hide_telegram" = "Hide {telegram}"; +"lng_mac_menu_hide_others" = "Hide Others"; +"lng_mac_menu_show_all" = "Show All"; +"lng_mac_menu_preferences" = "Preferences..."; +"lng_mac_menu_quit_telegram" = "Quit {telegram}"; +"lng_mac_menu_about_telegram" = "About {telegram}"; +"lng_mac_menu_file" = "File"; +"lng_mac_menu_logout" = "Log Out"; +"lng_mac_menu_edit" = "Edit"; +"lng_mac_menu_undo" = "Undo"; +"lng_mac_menu_redo" = "Redo"; +"lng_mac_menu_cut" = "Cut"; +"lng_mac_menu_copy" = "Copy"; +"lng_mac_menu_paste" = "Paste"; +"lng_mac_menu_delete" = "Delete"; +"lng_mac_menu_select_all" = "Select All"; +"lng_mac_menu_window" = "Window"; +"lng_mac_menu_contacts" = "Contacts"; +"lng_mac_menu_add_contact" = "Add Contact"; +"lng_mac_menu_new_group" = "New Group"; +"lng_mac_menu_new_channel" = "New Channel"; +"lng_mac_menu_show" = "Show Telegram"; + +// Keys finished diff --git a/Telegram/Resources/langs/list b/Telegram/Resources/langs/list new file mode 100644 index 0000000000..6581227605 --- /dev/null +++ b/Telegram/Resources/langs/list @@ -0,0 +1 @@ +de,es,it,ko,nl,pt_BR diff --git a/Telegram/Resources/langs/nl.lproj/Localizable.strings b/Telegram/Resources/langs/nl.lproj/Localizable.strings new file mode 100644 index 0000000000..affee91bc2 --- /dev/null +++ b/Telegram/Resources/langs/nl.lproj/Localizable.strings @@ -0,0 +1,17 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014 John Preston, https://desktop.telegram.org +*/ diff --git a/Telegram/Resources/langs/pt-BR.lproj/Localizable.strings b/Telegram/Resources/langs/pt-BR.lproj/Localizable.strings new file mode 100644 index 0000000000..affee91bc2 --- /dev/null +++ b/Telegram/Resources/langs/pt-BR.lproj/Localizable.strings @@ -0,0 +1,17 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014 John Preston, https://desktop.telegram.org +*/ diff --git a/Telegram/Resources/langs/upload.sh b/Telegram/Resources/langs/upload.sh new file mode 100644 index 0000000000..dd29fa92e6 --- /dev/null +++ b/Telegram/Resources/langs/upload.sh @@ -0,0 +1,28 @@ +set -e +FullExecPath=$PWD +pushd `dirname $0` > /dev/null +FullScriptPath=`pwd` +popd > /dev/null + +if [ ! -d "$FullScriptPath/../../../../TelegramPrivate" ]; then + echo "" + echo "This script is for building the production version of Telegram Desktop." + echo "" + echo "For building custom versions please visit the build instructions page at:" + echo "https://github.com/telegramdesktop/tdesktop/#build-instructions" + exit +fi + +Error () { + cd $FullExecPath + echo "$1" + exit 1 +} + +cd $FullScriptPath/../../../../ +while IFS='' read -r line || [[ -n "$line" ]]; do + tx pull -f -l $line +done < tdesktop/Telegram/Resources/langs/list +tx push -s + +cd $FullExecPath diff --git a/Telegram/Resources/winrc/Telegram.rc b/Telegram/Resources/winrc/Telegram.rc new file mode 100644 index 0000000000..74fb00be93 --- /dev/null +++ b/Telegram/Resources/winrc/Telegram.rc @@ -0,0 +1,80 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#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 0,9,46,0 + PRODUCTVERSION 0,9,46,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", "Telegram Messenger LLP" + VALUE "FileVersion", "0.9.46.0" + VALUE "LegalCopyright", "Copyright (C) 2014-2016" + VALUE "ProductName", "Telegram Desktop" + VALUE "ProductVersion", "0.9.46.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/Telegram/Resources/winrc/Updater.rc b/Telegram/Resources/winrc/Updater.rc new file mode 100644 index 0000000000..e6fe4379fe --- /dev/null +++ b/Telegram/Resources/winrc/Updater.rc @@ -0,0 +1,72 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource1.h" + +#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 0,9,46,0 + PRODUCTVERSION 0,9,46,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", "Telegram Messenger LLP" + VALUE "FileDescription", "Telegram Updater" + VALUE "FileVersion", "0.9.46.0" + VALUE "LegalCopyright", "Copyright (C) 2014-2016" + VALUE "ProductName", "Telegram Desktop" + VALUE "ProductVersion", "0.9.46.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/Telegram/Resources/winrc/resource.h b/Telegram/Resources/winrc/resource.h new file mode 100644 index 0000000000000000000000000000000000000000..fb440adacf4d4d393e65644b5955590cb513dd1f GIT binary patch literal 904 zcmb7@-%7(!4934}!FM>YOTjtu1!}vC;a0`2L$8XP>zK?9+SNaZude=by2%`4OhS5+ zkbL=)(C@FNn)*OuT`NDhIP8pAqA_>9_pQ(KAz=FJkm3{1sH2a_BK44 zVOc*1?+DG%kjY}Ti2X-eRJ44Dbr%Q9SZ{t>W1cfp1uL8W#m`+4E%9=;Qt%p+SKft& zdcq!&TmG_k-fF-&UvYN|*nYyasb_B&>Ckn+1XtW4+NhZCsktRLAlv5d>K>GYZ%>y* zy4bt+m92Vb)UzUD~$J4@S0|^pJpV(Oz7q3!QnXud#jS pUA*gy_hD`G?qls>ZRm$%*PFCk?8mkJ81@?3{)0z<>w5ct{T~?%eQy8& literal 0 HcmV?d00001 diff --git a/Telegram/Resources/winrc/resource1.h b/Telegram/Resources/winrc/resource1.h new file mode 100644 index 0000000000..fa4d7c2ea6 --- /dev/null +++ b/Telegram/Resources/winrc/resource1.h @@ -0,0 +1,14 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Updater.rc + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/Telegram/SourceFiles/core/version.h b/Telegram/SourceFiles/core/version.h new file mode 100644 index 0000000000..bdc6e5654b --- /dev/null +++ b/Telegram/SourceFiles/core/version.h @@ -0,0 +1,30 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org +*/ +#pragma once + +#include "core/basic_types.h" + +#define BETA_VERSION_MACRO (0ULL) + +static constexpr int AppVersion = 9046; +static constexpr str_const AppVersionStr = "0.9.46"; +static constexpr bool AppAlphaVersion = true; +static constexpr uint64 AppBetaVersion = BETA_VERSION_MACRO; diff --git a/Telegram/build/build.bat b/Telegram/build/build.bat new file mode 100644 index 0000000000..8e62ef2bdb --- /dev/null +++ b/Telegram/build/build.bat @@ -0,0 +1,213 @@ +@echo OFF +setlocal enabledelayedexpansion +set "FullScriptPath=%~dp0" +set "FullExecPath=%cd%" + +if not exist "%FullScriptPath%..\..\..\TelegramPrivate" ( + echo. + echo This script is for building the production version of Telegram Desktop. + echo. + echo For building custom versions please visit the build instructions page at: + echo https://github.com/telegramdesktop/tdesktop/#build-instructions + exit /b +) + +FOR /F "tokens=1,2* delims= " %%i in (%FullScriptPath%version) do set "%%i=%%j" + +set "VersionForPacker=%AppVersion%" +if %BetaVersion% neq 0 ( + set "AppVersion=%BetaVersion%" + set "AppVersionStrFull=%AppVersionStr%_%BetaVersion%" + set "AlphaBetaParam=-beta %BetaVersion%" + set "BetaKeyFile=tbeta_%BetaVersion%_key" +) else ( + if %AlphaChannel% neq 0 ( + set "AlphaBetaParam=-alpha" + set "AppVersionStrFull=%AppVersionStr%.alpha" + ) else ( + set "AlphaBetaParam=" + set "AppVersionStrFull=%AppVersionStr%" + ) +) + +echo. +echo Building version %AppVersionStrFull% for Windows.. +echo. + +set "HomePath=%FullScriptPath%.." +set "ResourcesPath=%HomePath%\Resources" +set "SolutionPath=%HomePath%\.." +set "UpdateFile=tupdate%AppVersion%" +set "SetupFile=tsetup.%AppVersionStrFull%.exe" +set "PortableFile=tportable.%AppVersionStrFull%.zip" +set "ReleasePath=%HomePath%\..\Win32\Deploy" +set "DeployPath=%ReleasePath%\deploy\%AppVersionStrMajor%\%AppVersionStrFull%" +set "SignPath=%HomePath%\..\..\TelegramPrivate\Sign.bat" +set "BinaryName=Telegram" +set "DropboxSymbolsPath=X:\Telegram\symbols" + +if %BetaVersion% neq 0 ( + if exist %DeployPath%\ ( + echo Deploy folder for version %AppVersionStr% already exists! + exit /b 1 + ) + if exist %ReleasePath%\%BetaKeyFile% ( + echo Beta version key file for version %AppVersion% already exists! + exit /b 1 + ) +) else ( + if exist %ReleasePath%\deploy\%AppVersionStrMajor%\%AppVersionStr%.alpha\ ( + echo Deploy folder for version %AppVersionStr%.alpha already exists! + exit /b 1 + ) + if exist %ReleasePath%\deploy\%AppVersionStrMajor%\%AppVersionStr%.dev\ ( + echo Deploy folder for version %AppVersionStr%.dev already exists! + exit /b 1 + ) + if exist %ReleasePath%\deploy\%AppVersionStrMajor%\%AppVersionStr%\ ( + echo Deploy folder for version %AppVersionStr% already exists! + exit /b 1 + ) + if exist %ReleasePath%\tupdate%AppVersion% ( + echo Update file for version %AppVersion% already exists! + exit /b 1 + ) +) +cd "%ResourcesPath%" +if "%1" == "fast" ( + echo Skipping touching of telegram.qrc... +) else ( + copy telegram.qrc /B+,,/Y +) +if %errorlevel% neq 0 goto error + +cd "%SolutionPath%" +MSBuild Telegram.sln /property:Configuration=Deploy +if %errorlevel% neq 0 goto error + +echo . +echo Version %AppVersionStrFull% build successfull. Preparing.. +echo . + +echo Dumping debug symbols.. +call "%SolutionPath%\..\Libraries\breakpad\src\tools\windows\binaries\dump_syms.exe" "%ReleasePath%\%BinaryName%.pdb" > "%ReleasePath%\%BinaryName%.sym" +echo Done! + +set "PATH=%PATH%;C:\Program Files\7-Zip;C:\Program Files (x86)\Inno Setup 5" + +cd "%ReleasePath%" +call "%SignPath%" "%BinaryName%.exe" +if %errorlevel% neq 0 goto error + +call "%SignPath%" "Updater.exe" +if %errorlevel% neq 0 goto error + +if %BetaVersion% equ 0 ( + iscc /dMyAppVersion=%AppVersionStrSmall% /dMyAppVersionZero=%AppVersionStr% /dMyAppVersionFull=%AppVersionStrFull% "%FullScriptPath%setup.iss" + if %errorlevel% neq 0 goto error + + call "%SignPath%" "tsetup.%AppVersionStrFull%.exe" + if %errorlevel% neq 0 goto error +) + +call Packer.exe -version %VersionForPacker% -path %BinaryName%.exe -path Updater.exe %AlphaBetaParam% +if %errorlevel% neq 0 goto error + +if %BetaVersion% neq 0 ( + if not exist "%ReleasePath%\%BetaKeyFile%" ( + echo Beta version key file not found! + exit /b 1 + ) + + FOR /F "tokens=1* delims= " %%i in (%ReleasePath%\%BetaKeyFile%) do set "BetaSignature=%%i" +) +if %errorlevel% neq 0 goto error + +if %BetaVersion% neq 0 ( + set "UpdateFile=%UpdateFile%_%BetaSignature%" + set "PortableFile=tbeta%BetaVersion%_%BetaSignature%.zip" +) + +for /f ^"usebackq^ eol^=^ + +^ delims^=^" %%a in (%ReleasePath%\%BinaryName%.sym) do ( + set "SymbolsHashLine=%%a" + goto symbolslinedone +) +:symbolslinedone +FOR /F "tokens=1,2,3,4* delims= " %%i in ("%SymbolsHashLine%") do set "SymbolsHash=%%l" + +echo Copying %BinaryName%.sym to %DropboxSymbolsPath%\%BinaryName%.pdb\%SymbolsHash% +if not exist %DropboxSymbolsPath%\%BinaryName%.pdb mkdir %DropboxSymbolsPath%\%BinaryName%.pdb +if not exist %DropboxSymbolsPath%\%BinaryName%.pdb\%SymbolsHash% mkdir %DropboxSymbolsPath%\%BinaryName%.pdb\%SymbolsHash% +xcopy "%ReleasePath%\%BinaryName%.sym" %DropboxSymbolsPath%\%BinaryName%.pdb\%SymbolsHash%\ +echo Done! + +if not exist "%ReleasePath%\deploy" mkdir "%ReleasePath%\deploy" +if not exist "%ReleasePath%\deploy\%AppVersionStrMajor%" mkdir "%ReleasePath%\deploy\%AppVersionStrMajor%" +mkdir "%DeployPath%" +mkdir "%DeployPath%\Telegram" +if %errorlevel% neq 0 goto error + +move "%ReleasePath%\Telegram.exe" "%DeployPath%\Telegram\" +move "%ReleasePath%\Updater.exe" "%DeployPath%\" +move "%ReleasePath%\Telegram.pdb" "%DeployPath%\" +move "%ReleasePath%\Updater.pdb" "%DeployPath%\" +if %BetaVersion% equ 0 ( + move "%ReleasePath%\%SetupFile%" "%DeployPath%\" +) else ( + move "%ReleasePath%\%BetaKeyFile%" "%DeployPath%\" +) +move "%ReleasePath%\%UpdateFile%" "%DeployPath%\" +if %errorlevel% neq 0 goto error + +cd "%DeployPath%" +7z a -mx9 %PortableFile% Telegram\ +if %errorlevel% neq 0 goto error + +echo . +echo Version %AppVersionStrFull% is ready for deploy! +echo . + +set "FinalReleasePath=Z:\TBuild\tother\tsetup" +set "FinalDeployPath=%FinalReleasePath%\%AppVersionStrMajor%\%AppVersionStrFull%" + +if not exist "%DeployPath%\%UpdateFile%" goto error +if not exist "%DeployPath%\%PortableFile%" goto error +if %BetaVersion% equ 0 ( + if not exist "%DeployPath%\%SetupFile%" goto error +) +if not exist "%DeployPath%\%BinaryName%.pdb" goto error +if not exist "%DeployPath%\Updater.exe" goto error +if not exist "%DeployPath%\Updater.pdb" goto error +if not exist "%FinalReleasePath%\%AppVersionStrMajor%" mkdir "%FinalReleasePath%\%AppVersionStrMajor%" +if not exist "%FinalDeployPath%" mkdir "%FinalDeployPath%" + +xcopy "%DeployPath%\%UpdateFile%" "%FinalDeployPath%\" +xcopy "%DeployPath%\%PortableFile%" "%FinalDeployPath%\" +if %BetaVersion% equ 0 ( + xcopy "%DeployPath%\%SetupFile%" "%FinalDeployPath%\" +) else ( + xcopy "%DeployPath%\%BetaKeyFile%" "%FinalDeployPath%\" /Y +) +xcopy "%DeployPath%\%BinaryName%.pdb" "%FinalDeployPath%\" +xcopy "%DeployPath%\Updater.exe" "%FinalDeployPath%\" +xcopy "%DeployPath%\Updater.pdb" "%FinalDeployPath%\" + +echo Version %AppVersionStrFull% is ready! + +cd "%FullExecPath%" +exit /b + +:error +( + set ErrorCode=%errorlevel% + if !ErrorCode! neq 0 ( + echo Error !ErrorCode! + ) else ( + echo Error 666 + set ErrorCode=666 + ) + cd "%FullExecPath%" + exit /b !ErrorCode! +) diff --git a/Telegram/build/build.sh b/Telegram/build/build.sh new file mode 100644 index 0000000000..281938622c --- /dev/null +++ b/Telegram/build/build.sh @@ -0,0 +1,361 @@ +set -e +FullExecPath=$PWD +pushd `dirname $0` > /dev/null +FullScriptPath=`pwd` +popd > /dev/null +QMakePath="/usr/local/tdesktop/Qt-5.6.0/bin/qmake" + +if [ ! -d "$FullScriptPath/../../../TelegramPrivate" ]; then + echo "" + echo "This script is for building the production version of Telegram Desktop." + echo "" + echo "For building custom versions please visit the build instructions page at:" + echo "https://github.com/telegramdesktop/tdesktop/#build-instructions" + exit +fi + +Error () { + cd $FullExecPath + echo "$1" + exit 1 +} + +FastParam="$1" + +if [ ! -f "$FullScriptPath/target" ]; then + Error "Build target not found!" +fi + +while IFS='' read -r line || [[ -n "$line" ]]; do + BuildTarget="$line" +done < "$FullScriptPath/target" + +while IFS='' read -r line || [[ -n "$line" ]]; do + set $line + eval $1="$2" +done < "$FullScriptPath/version" + +VersionForPacker="$AppVersion" +if [ "$BetaVersion" != "0" ]; then + AppVersion="$BetaVersion" + AppVersionStrFull="${AppVersionStr}_${BetaVersion}" + AlphaBetaParam="-beta $BetaVersion" + BetaKeyFile="tbeta_${AppVersion}_key" +elif [ "$AlphaChannel" == "0" ]; then + AppVersionStrFull="$AppVersionStr" + AlphaBetaParam='' +else + AppVersionStrFull="$AppVersionStr.alpha" + AlphaBetaParam='-alpha' +fi + +echo "" +HomePath="$FullScriptPath/.." +if [ "$BuildTarget" == "linux" ]; then + echo "Building version $AppVersionStrFull for Linux 64bit.." + UpdateFile="tlinuxupd$AppVersion" + SetupFile="tsetup.$AppVersionStrFull.tar.xz" + WorkPath="$HomePath/../Linux" + ReleasePath="$WorkPath/Release" + BinaryName="Telegram" +elif [ "$BuildTarget" == "linux32" ]; then + echo "Building version $AppVersionStrFull for Linux 32bit.." + UpdateFile="tlinux32upd$AppVersion" + SetupFile="tsetup32.$AppVersionStrFull.tar.xz" + WorkPath="$HomePath/../Linux" + ReleasePath="$WorkPath/Release" + BinaryName="Telegram" +elif [ "$BuildTarget" == "mac" ]; then + echo "Building version $AppVersionStrFull for OS X 10.8+.." + UpdateFile="tmacupd$AppVersion" + SetupFile="tsetup.$AppVersionStrFull.dmg" + ReleasePath="$HomePath/../../Mac/Release" + BinaryName="Telegram" +elif [ "$BuildTarget" == "mac32" ]; then + echo "Building version $AppVersionStrFull for OS X 10.6 and 10.7.." + UpdateFile="tmac32upd$AppVersion" + SetupFile="tsetup32.$AppVersionStrFull.dmg" + ReleasePath="$HomePath/../../Mac/Release" + BinaryName="Telegram" +elif [ "$BuildTarget" == "macstore" ]; then + if [ "$BetaVersion" != "0" ]; then + Error "Can't build macstore beta version!" + fi + + echo "Building version $AppVersionStrFull for Mac App Store.." + ReleasePath="$HomePath/../../Mac/Release" + BinaryName="Telegram Desktop" + DropboxPath="/Volumes/Storage/Dropbox/Telegram/deploy/$AppVersionStrMajor" + DropboxDeployPath="$DropboxPath/$AppVersionStrFull" +else + Error "Invalid target!" +fi + +#if [ "$BuildTarget" == "linux" ] || [ "$BuildTarget" == "linux32" ] || [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ] || [ "$BuildTarget" == "macstore" ]; then + if [ "$BetaVersion" != "0" ]; then + if [ -f "$ReleasePath/$BetaKeyFile" ]; then + Error "Beta version key file for version $AppVersion already exists!" + fi + + if [ -d "$ReleasePath/deploy/$AppVersionStrMajor/$AppVersionStrFull" ]; then + Error "Deploy folder for version $AppVersionStrFull already exists!" + fi + else + if [ -d "$ReleasePath/deploy/$AppVersionStrMajor/$AppVersionStr.alpha" ]; then + Error "Deploy folder for version $AppVersionStr.alpha already exists!" + fi + + if [ -d "$ReleasePath/deploy/$AppVersionStrMajor/$AppVersionStr.dev" ]; then + Error "Deploy folder for version $AppVersionStr.dev already exists!" + fi + + if [ -d "$ReleasePath/deploy/$AppVersionStrMajor/$AppVersionStr" ]; then + Error "Deploy folder for version $AppVersionStr already exists!" + fi + + if [ -f "$ReleasePath/$UpdateFile" ]; then + Error "Update file for version $AppVersion already exists!" + fi + fi + + DeployPath="$ReleasePath/deploy/$AppVersionStrMajor/$AppVersionStrFull" +#fi + +if [ "$BuildTarget" == "linux" ] || [ "$BuildTarget" == "linux32" ]; then + + DropboxSymbolsPath="/media/psf/Dropbox/Telegram/symbols" + + mkdir -p "$WorkPath/ReleaseIntermediateUpdater" + cd "$WorkPath/ReleaseIntermediateUpdater" + "$QMakePath" "$HomePath/Updater.pro" -r -spec linux-g++ + make + echo "Updater build complete!" + + mkdir -p "$WorkPath/ReleaseIntermediate" + cd "$WorkPath/ReleaseIntermediate" + "$QMakePath" "$HomePath/Telegram.pro" -r -spec linux-g++ + eval "$HomePath/build/makefile_static.sh" + make + echo "$BinaryName build complete!" + + if [ ! -f "$ReleasePath/$BinaryName" ]; then + Error "$BinaryName not found!" + fi + + if [ ! -f "$ReleasePath/Updater" ]; then + Error "Updater not found!" + fi + + echo "Dumping debug symbols.." + "$HomePath/../../Libraries/breakpad/src/tools/linux/dump_syms/dump_syms" "$ReleasePath/$BinaryName" > "$ReleasePath/$BinaryName.sym" + echo "Done!" + + echo "Stripping the executable.." + strip -s "$ReleasePath/$BinaryName" + echo "Done!" + + echo "Preparing version $AppVersionStrFull, executing Packer.." + cd "$ReleasePath" + "./Packer" -path "$BinaryName" -path Updater -version $VersionForPacker $AlphaBetaParam + echo "Packer done!" + + if [ "$BetaVersion" != "0" ]; then + if [ ! -f "$ReleasePath/$BetaKeyFile" ]; then + Error "Beta version key file not found!" + fi + + while IFS='' read -r line || [[ -n "$line" ]]; do + BetaSignature="$line" + done < "$ReleasePath/$BetaKeyFile" + + UpdateFile="${UpdateFile}_${BetaSignature}" + SetupFile="tbeta${BetaVersion}_${BetaSignature}.tar.xz" + fi + + SymbolsHash=`head -n 1 "$ReleasePath/$BinaryName.sym" | awk -F " " 'END {print $4}'` + echo "Copying $BinaryName.sym to $DropboxSymbolsPath/$BinaryName/$SymbolsHash" + mkdir -p "$DropboxSymbolsPath/$BinaryName/$SymbolsHash" + cp "$ReleasePath/$BinaryName.sym" "$DropboxSymbolsPath/$BinaryName/$SymbolsHash/" + echo "Done!" + + if [ ! -d "$ReleasePath/deploy" ]; then + mkdir "$ReleasePath/deploy" + fi + + if [ ! -d "$ReleasePath/deploy/$AppVersionStrMajor" ]; then + mkdir "$ReleasePath/deploy/$AppVersionStrMajor" + fi + + echo "Copying $BinaryName, Updater and $UpdateFile to deploy/$AppVersionStrMajor/$AppVersionStrFull.."; + mkdir "$DeployPath" + mkdir "$DeployPath/$BinaryName" + mv "$ReleasePath/$BinaryName" "$DeployPath/$BinaryName/" + mv "$ReleasePath/Updater" "$DeployPath/$BinaryName/" + mv "$ReleasePath/$UpdateFile" "$DeployPath/" + if [ "$BetaVersion" != "0" ]; then + mv "$ReleasePath/$BetaKeyFile" "$DeployPath/" + fi + cd "$DeployPath" + tar -cJvf "$SetupFile" "$BinaryName/" +fi + +if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ] || [ "$BuildTarget" == "macstore" ]; then + + DropboxSymbolsPath="/Volumes/Storage/Dropbox/Telegram/symbols" + + if [ "$FastParam" != "fast" ]; then + touch "./Resources/telegram.qrc" + fi + xcodebuild -project Telegram.xcodeproj -alltargets -configuration Release build + + if [ ! -d "$ReleasePath/$BinaryName.app" ]; then + Error "$BinaryName.app not found!" + fi + + if [ ! -d "$ReleasePath/$BinaryName.app.dSYM" ]; then + Error "$BinaryName.app.dSYM not found!" + fi + + if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ]; then + echo "Removing Updater debug symbols.." + rm -rf "$ReleasePath/$BinaryName.app/Contents/Frameworks/Updater.dSYM" + echo "Done!" + fi + + echo "Dumping debug symbols.." + "./../../Libraries/breakpad/src/tools/mac/dump_syms/build/Release/dump_syms" "$ReleasePath/$BinaryName.app.dSYM" > "$ReleasePath/$BinaryName.sym" 2>/dev/null + echo "Done!" + + echo "Stripping the executable.." + strip "$ReleasePath/$BinaryName.app/Contents/MacOS/$BinaryName" + echo "Done!" + + echo "Signing the application.." + if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ]; then + codesign --force --deep --sign "Developer ID Application: John Preston" "$ReleasePath/$BinaryName.app" + elif [ "$BuildTarget" == "macstore" ]; then + codesign --force --deep --sign "3rd Party Mac Developer Application: TELEGRAM MESSENGER LLP (6N38VWS5BX)" "$ReleasePath/$BinaryName.app" --entitlements "Telegram/Telegram Desktop.entitlements" + fi + echo "Done!" + + AppUUID=`dwarfdump -u "$ReleasePath/$BinaryName.app/Contents/MacOS/$BinaryName" | awk -F " " '{print $2}'` + DsymUUID=`dwarfdump -u "$ReleasePath/$BinaryName.app.dSYM" | awk -F " " '{print $2}'` + if [ "$AppUUID" != "$DsymUUID" ]; then + Error "UUID of binary '$AppUUID' and dSYM '$DsymUUID' differ!" + fi + + if [ ! -f "$ReleasePath/$BinaryName.app/Contents/Resources/Icon.icns" ]; then + Error "Icon.icns not found in Resources!" + fi + + if [ ! -f "$ReleasePath/$BinaryName.app/Contents/MacOS/$BinaryName" ]; then + Error "$BinaryName not found in MacOS!" + fi + + if [ ! -d "$ReleasePath/$BinaryName.app/Contents/_CodeSignature" ]; then + Error "$BinaryName signature not found!" + fi + + if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ]; then + if [ ! -f "$ReleasePath/$BinaryName.app/Contents/Frameworks/Updater" ]; then + Error "Updater not found in Frameworks!" + fi + elif [ "$BuildTarget" == "macstore" ]; then + if [ ! -f "$ReleasePath/$BinaryName.pkg" ]; then + Error "$BinaryName.pkg not found!" + fi + fi + + SymbolsHash=`head -n 1 "$ReleasePath/$BinaryName.sym" | awk -F " " 'END {print $4}'` + echo "Copying $BinaryName.sym to $DropboxSymbolsPath/$BinaryName/$SymbolsHash" + mkdir -p "$DropboxSymbolsPath/$BinaryName/$SymbolsHash" + cp "$ReleasePath/$BinaryName.sym" "$DropboxSymbolsPath/$BinaryName/$SymbolsHash/" + echo "Done!" + + if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ]; then + if [ "$BetaVersion" == "0" ]; then + cd "$ReleasePath" + temppath=`hdiutil attach -readwrite tsetup.dmg | awk -F "\t" 'END {print $3}'` + cp -R "./$BinaryName.app" "$temppath/" + bless --folder "$temppath/" --openfolder "$temppath/" + hdiutil detach "$temppath" + hdiutil convert tsetup.dmg -format UDZO -imagekey zlib-level=9 -ov -o "$SetupFile" + fi + cd "$ReleasePath" + "./Packer.app/Contents/MacOS/Packer" -path "$BinaryName.app" -version $VersionForPacker $AlphaBetaParam + echo "Packer done!" + + if [ "$BetaVersion" != "0" ]; then + if [ ! -f "$ReleasePath/$BetaKeyFile" ]; then + Error "Beta version key file not found!" + fi + + while IFS='' read -r line || [[ -n "$line" ]]; do + BetaSignature="$line" + done < "$ReleasePath/$BetaKeyFile" + + UpdateFile="${UpdateFile}_${BetaSignature}" + SetupFile="tbeta${BetaVersion}_${BetaSignature}.zip" + fi + fi + + if [ ! -d "$ReleasePath/deploy" ]; then + mkdir "$ReleasePath/deploy" + fi + + if [ ! -d "$ReleasePath/deploy/$AppVersionStrMajor" ]; then + mkdir "$ReleasePath/deploy/$AppVersionStrMajor" + fi + + if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ]; then + echo "Copying $BinaryName.app and $UpdateFile to deploy/$AppVersionStrMajor/$AppVersionStr.."; + mkdir "$DeployPath" + mkdir "$DeployPath/$BinaryName" + cp -r "$ReleasePath/$BinaryName.app" "$DeployPath/$BinaryName/" + if [ "$BetaVersion" != "0" ]; then + cd "$DeployPath" + zip -r "$SetupFile" "$BinaryName" + mv "$SetupFile" "$ReleasePath/" + mv "$ReleasePath/$BetaKeyFile" "$DeployPath/" + fi + mv "$ReleasePath/$BinaryName.app.dSYM" "$DeployPath/" + rm "$ReleasePath/$BinaryName.app/Contents/MacOS/$BinaryName" + rm "$ReleasePath/$BinaryName.app/Contents/Frameworks/Updater" + rm -rf "$ReleasePath/$BinaryName.app/Contents/_CodeSignature" + mv "$ReleasePath/$UpdateFile" "$DeployPath/" + mv "$ReleasePath/$SetupFile" "$DeployPath/" + + if [ "$BuildTarget" == "mac32" ]; then + ReleaseToPath="./../../tother/tmac32" + DeployToPath="$ReleaseToPath/$AppVersionStrMajor/$AppVersionStrFull" + if [ ! -d "$ReleaseToPath/$AppVersionStrMajor" ]; then + mkdir "$ReleaseToPath/$AppVersionStrMajor" + fi + + if [ ! -d "$DeployToPath" ]; then + mkdir "$DeployToPath" + fi + + cp -v "$DeployPath/$UpdateFile" "$DeployToPath/" + cp -v "$DeployPath/$SetupFile" "$DeployToPath/" + cp -rv "$DeployPath/$BinaryName.app.dSYM" "$DeployToPath/" + if [ "$BetaVersion" != "0" ]; then + cp -v "$DeployPath/$BetaKeyFile" "$DeployToPath/" + fi + fi + elif [ "$BuildTarget" == "macstore" ]; then + echo "Copying $BinaryName.app to deploy/$AppVersionStrMajor/$AppVersionStr.."; + mkdir "$DeployPath" + cp -r "$ReleasePath/$BinaryName.app" "$DeployPath/" + mv "$ReleasePath/$BinaryName.pkg" "$DeployPath/" + mv "$ReleasePath/$BinaryName.app.dSYM" "$DeployPath/" + rm "$ReleasePath/$BinaryName.app/Contents/MacOS/$BinaryName" + rm -rf "$ReleasePath/$BinaryName.app/Contents/_CodeSignature" + + mkdir -p "$DropboxDeployPath" + cp -v "$DeployPath/$BinaryName.app" "$DropboxDeployPath/" + cp -rv "$DeployPath/$BinaryName.app.dSYM" "$DropboxDeployPath/" + fi +fi + +echo "Version $AppVersionStrFull is ready!"; diff --git a/Telegram/build/deploy.sh b/Telegram/build/deploy.sh new file mode 100644 index 0000000000..245960fce6 --- /dev/null +++ b/Telegram/build/deploy.sh @@ -0,0 +1,224 @@ +set -e +FullExecPath=$PWD +pushd `dirname $0` > /dev/null +FullScriptPath=`pwd` +popd > /dev/null + +DeployTarget="$1" + +while IFS='' read -r line || [[ -n "$line" ]]; do + set $line + eval $1="$2" +done < Version + +if [ "$BetaVersion" != "0" ]; then + AppVersion="$BetaVersion" + AppVersionStrFull="${AppVersionStr}_${BetaVersion}" + DevParam="-beta $BetaVersion" + BetaKeyFile="tbeta_${AppVersion}_key" +elif [ "$DevChannel" == "0" ]; then + AppVersionStrFull="$AppVersionStr" + DevParam='' +else + AppVersionStrFull="$AppVersionStr.dev" + DevParam='-dev' +fi + +if [ ! -f "Target" ]; then + echo "Deploy target not found!" + exit 1 +fi + +while IFS='' read -r line || [[ -n "$line" ]]; do + BuildTarget="$line" +done < Target + +echo "" +if [ "$BuildTarget" == "linux" ]; then + echo "Deploying version $AppVersionStrFull for Linux 64bit.." + UpdateFile="tlinuxupd$AppVersion" + SetupFile="tsetup.$AppVersionStrFull.tar.xz" + ReleasePath="./../Linux/Release" + RemoteFolder="tlinux" +elif [ "$BuildTarget" == "linux32" ]; then + echo "Deploying version $AppVersionStrFull for Linux 32bit.." + UpdateFile="tlinux32upd$AppVersion" + SetupFile="tsetup32.$AppVersionStrFull.tar.xz" + ReleasePath="./../Linux/Release" + RemoteFolder="tlinux32" +elif [ "$BuildTarget" == "mac" ]; then + DeployMac="0" + DeployMac32="0" + DeployWin="0" + if [ "$DeployTarget" == "mac" ]; then + DeployMac="1" + echo "Deploying version $AppVersionStrFull for OS X 10.8+.." + elif [ "$DeployTarget" == "mac32" ]; then + DeployMac32="1" + echo "Deploying version $AppVersionStrFull for OS X 10.6 and 10.7.." + elif [ "$DeployTarget" == "win" ]; then + DeployWin="1" + echo "Deploying version $AppVersionStrFull for Windows.." + else + DeployMac="1" + if [ "$BetaVersion" != "0" ]; then + DeployMac32="0" + else + DeployMac32="1" + fi + DeployWin="1" + echo "Deploying three versions of $AppVersionStrFull: for Windows, OS X 10.6 and 10.7 and OS X 10.8+.." + fi + UpdateFile="tmacupd$AppVersion" + SetupFile="tsetup.$AppVersionStrFull.dmg" + ReleasePath="./../Mac/Release" + RemoteFolder="tmac" + Mac32DeployPath="./../../tother/tmac32/$AppVersionStrMajor/$AppVersionStrFull" + Mac32UpdateFile="tmac32upd$AppVersion" + Mac32SetupFile="tsetup32.$AppVersionStrFull.dmg" + Mac32RemoteFolder="tmac32" + WinDeployPath="./../../tother/tsetup/$AppVersionStrMajor/$AppVersionStrFull" + WinUpdateFile="tupdate$AppVersion" + WinSetupFile="tsetup.$AppVersionStrFull.exe" + WinPortableFile="tportable.$AppVersionStrFull.zip" + WinRemoteFolder="tsetup" + DropboxPath="./../../../Dropbox/Telegram/deploy/$AppVersionStrMajor" + DropboxDeployPath="$DropboxPath/$AppVersionStrFull" + DropboxSetupFile="$SetupFile" + DropboxMac32SetupFile="$Mac32SetupFile" +elif [ "$BuildTarget" == "mac32" ] || [ "$BuildTarget" = "macstore" ]; then + echo "No need to deploy this target." + exit +else + echo "Invalid target!" + exit 1 +fi + +DeployPath="$ReleasePath/deploy/$AppVersionStrMajor/$AppVersionStrFull" + +if [ "$BetaVersion" != "0" ]; then + if [ "$DeployTarget" == "win" ]; then + BetaFilePath="$WinDeployPath/$BetaKeyFile" + elif [ "$DeployTarget" == "mac32" ]; then + BetaFilePath="$Mac32DeployPath/$BetaKeyFile" + else + BetaFilePath="$DeployPath/$BetaKeyFile" + fi + if [ ! -f "$BetaFilePath" ]; then + echo "Beta key file for $AppVersionStrFull not found :(" + exit 1 + fi + + while IFS='' read -r line || [[ -n "$line" ]]; do + BetaSignature="$line" + done < "$BetaFilePath" + + UpdateFile="${UpdateFile}_${BetaSignature}" + if [ "$BuildTarget" == "linux" ] || [ "$BuildTarget" == "linux32" ]; then + SetupFile="tbeta${BetaVersion}_${BetaSignature}.tar.xz" + elif [ "$BuildTarget" == "mac" ]; then + SetupFile="tbeta${BetaVersion}_${BetaSignature}.zip" + DropboxSetupFile="tbeta${BetaVersion}_${BetaSignature}_mac.zip" + Mac32UpdateFile="${Mac32UpdateFile}_${BetaSignature}" + Mac32SetupFile="tbeta${BetaVersion}_${BetaSignature}.zip" + DropboxMac32SetupFile="tbeta${BetaVersion}_${BetaSignature}_mac32.zip" + WinUpdateFile="${WinUpdateFile}_${BetaSignature}" + WinPortableFile="tbeta${BetaVersion}_${BetaSignature}.zip" + fi +fi + +#if [ "$BuildTarget" == "linux" ] || [ "$BuildTarget" == "linux32" ] || [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ] || [ "$BuildTarget" == "macstore" ]; then + + if [ "$BuildTarget" != "mac" ] || [ "$DeployMac" == "1" ]; then + if [ ! -f "$DeployPath/$UpdateFile" ]; then + echo "$UpdateFile not found!"; + exit 1 + fi + + if [ ! -f "$DeployPath/$SetupFile" ]; then + echo "$SetupFile not found!" + exit 1 + fi + fi + + if [ "$BuildTarget" == "mac" ]; then + if [ "$DeployMac32" == "1" ]; then + if [ ! -f "$Mac32DeployPath/$Mac32UpdateFile" ]; then + echo "$Mac32UpdateFile not found!" + exit 1 + fi + + if [ ! -f "$Mac32DeployPath/$Mac32SetupFile" ]; then + echo "$Mac32SetupFile not found!" + exit 1 + fi + fi + + if [ "$DeployWin" == "1" ]; then + if [ ! -f "$WinDeployPath/$WinUpdateFile" ]; then + echo "$WinUpdateFile not found!" + exit 1 + fi + + if [ "$BetaVersion" == "0" ]; then + if [ ! -f "$WinDeployPath/$WinSetupFile" ]; then + echo "$WinSetupFile not found!" + exit 1 + fi + fi + + if [ ! -f "$WinDeployPath/$WinPortableFile" ]; then + echo "$WinPortableFile not found!" + exit 1 + fi + fi + + mkdir -p "$DropboxDeployPath" + fi +#fi + +if [ "$BuildTarget" == "linux" ] || [ "$BuildTarget" == "linux32" ] || [ "$BuildTarget" == "mac" ]; then + if [ "$BuildTarget" != "mac" ] || [ "$DeployMac" == "1" ]; then + scp "$DeployPath/$UpdateFile" "tmaster:tdesktop/www/$RemoteFolder/" + scp "$DeployPath/$SetupFile" "tmaster:tdesktop/www/$RemoteFolder/" + fi + if [ "$BuildTarget" == "mac" ]; then + if [ "$DeployMac32" == "1" ]; then + scp "$Mac32DeployPath/$Mac32UpdateFile" "tmaster:tdesktop/www/$Mac32RemoteFolder/" + scp "$Mac32DeployPath/$Mac32SetupFile" "tmaster:tdesktop/www/$Mac32RemoteFolder/" + fi + if [ "$DeployWin" == "1" ]; then + scp "$WinDeployPath/$WinUpdateFile" "tmaster:tdesktop/www/$WinRemoteFolder/" + if [ "$BetaVersion" == "0" ]; then + scp "$WinDeployPath/$WinSetupFile" "tmaster:tdesktop/www/$WinRemoteFolder/" + fi + scp "$WinDeployPath/$WinPortableFile" "tmaster:tdesktop/www/$WinRemoteFolder/" + fi + + if [ "$DeployMac" == "1" ]; then + cp -v "$DeployPath/$SetupFile" "$DropboxDeployPath/$DropboxSetupFile" + if [ -d "$DropboxDeployPath/Telegram.app.dSYM" ]; then + rm -rf "$DropboxDeployPath/Telegram.app.dSYM" + fi + cp -rv "$DeployPath/Telegram.app.dSYM" "$DropboxDeployPath/" + fi + if [ "$DeployMac32" == "1" ]; then + mv -v "$Mac32DeployPath/$Mac32SetupFile" "$DropboxDeployPath/$DropboxMac32SetupFile" + if [ -d "$DropboxDeployPath/Telegram32.app.dSYM" ]; then + rm -rf "$DropboxDeployPath/Telegram32.app.dSYM" + fi + mv -v "$Mac32DeployPath/Telegram.app.dSYM" "$DropboxDeployPath/Telegram32.app.dSYM" + fi + if [ "$DeployWin" == "1" ]; then + mv -v "$WinDeployPath/Telegram.pdb" "$DropboxDeployPath/" + mv -v "$WinDeployPath/Updater.exe" "$DropboxDeployPath/" + mv -v "$WinDeployPath/Updater.pdb" "$DropboxDeployPath/" + if [ "$BetaVersion" == "0" ]; then + mv -v "$WinDeployPath/$WinSetupFile" "$DropboxDeployPath/" + fi + mv -v "$WinDeployPath/$WinPortableFile" "$DropboxDeployPath/" + fi + fi +fi + +echo "Version $AppVersionStrFull was deployed!"; diff --git a/Telegram/build/makefile_static.sh b/Telegram/build/makefile_static.sh new file mode 100644 index 0000000000..f0a4c93c5a --- /dev/null +++ b/Telegram/build/makefile_static.sh @@ -0,0 +1,65 @@ +set -e +FullExecPath=$PWD +pushd `dirname $0` > /dev/null +FullScriptPath=`pwd` +popd > /dev/null + +if [ ! -d "$FullScriptPath/../../../TelegramPrivate" ]; then + echo "" + echo "This script is for building the production version of Telegram Desktop." + echo "" + echo "For building custom versions please visit the build instructions page at:" + echo "https://github.com/telegramdesktop/tdesktop/#build-instructions" + exit 1 +fi + +Error () { + cd $FullExecPath + echo "$1" + exit 1 +} + +if [ ! -f "$FullScriptPath/target" ]; then + Error "Build target not found." +fi + +while IFS='' read -r line || [[ -n "$line" ]]; do + BuildTarget="$line" +done < "$FullScriptPath/target" + +LocalDirPath="\/usr\/local\/lib" +if [ "$BuildTarget" == "linux" ]; then + ArchDirPath="\/usr\/lib\/x86_64\-linux\-gnu" +elif [ "$BuildTarget" == "linux32" ]; then + ArchDirPath="\/usr\/lib\/i386\-linux\-gnu" +else + Error "Bad build target." +fi + +Replace () { + CheckCommand="grep -ci '$1' Makefile" + CheckCount=$(eval $CheckCommand) + if [ "$CheckCount" -gt 0 ]; then + echo "Requested '$1' to '$2', found - replacing.." + ReplaceCommand="sed -i 's/$1/$2/g' Makefile" + eval $ReplaceCommand + else + echo "Skipping '$1' to '$2'" + fi +} + +Replace '\-llzma' "$ArchDirPath\/liblzma\.a" +Replace '\-lXi' '$ArchDirPath\/libXi\.a $ArchDirPath\/libXext\.a' +Replace '\-lSM' '$ArchDirPath\/libSM\.a' +Replace '\-lICE' '$ArchDirPath\/libICE\.a' +Replace '\-lfontconfig' '$ArchDirPath\/libfontconfig\.a $ArchDirPath\/libexpat\.a' +Replace '\-lfreetype' '$ArchDirPath\/libfreetype\.a' +Replace '\-lXext' '$ArchDirPath\/libXext\.a' +Replace '\-lopus' '$LocalDirPath\/libopus\.a' +Replace '\-lopenal' '$LocalDirPath\/libopenal\.a' +Replace '\-lavformat' '$LocalDirPath\/libavformat\.a' +Replace '\-lavcodec' '$LocalDirPath\/libavcodec\.a' +Replace '\-lswresample' '$LocalDirPath\/libswresample\.a' +Replace '\-lswscale' '$LocalDirPath\/libswscale\.a' +Replace '\-lavutil' '$LocalDirPath\/libavutil\.a' +Replace '\-lva' '$LocalDirPath\/libva\.a' diff --git a/Telegram/build/replace.vbs b/Telegram/build/replace.vbs new file mode 100644 index 0000000000..509445e2ad --- /dev/null +++ b/Telegram/build/replace.vbs @@ -0,0 +1,23 @@ +Dim pat, patparts, rxp, inp, found +pat = WScript.Arguments(0) +pat = Replace(pat, """, chr(34)) +pat = Replace(pat, "&hat;", "^") +pat = Replace(pat, "&", "&") +patparts = Split(pat,"/") +Set rxp = new RegExp +found = False +rxp.Global = True +rxp.Multiline = False +rxp.Pattern = patparts(0) +Do While Not WScript.StdIn.AtEndOfStream + inp = WScript.StdIn.ReadLine() + If not found Then + If rxp.Test(inp) Then + found = True + End If + End If + WScript.Echo rxp.Replace(inp, patparts(1)) +Loop +If not found Then + WScript.Quit(2) +End If diff --git a/Telegram/build/set_version.bat b/Telegram/build/set_version.bat new file mode 100644 index 0000000000..e5e69cdd87 --- /dev/null +++ b/Telegram/build/set_version.bat @@ -0,0 +1,139 @@ +@echo OFF +setlocal enabledelayedexpansion +set "FullScriptPath=%~dp0" + +set "InputVersion=%1" + +for /F "tokens=1,2,3,4 delims=. " %%a in ("%InputVersion%") do ( + set "VersionMajor=%%a" + set "VersionMinor=%%b" + set "VersionMicro=%%c" + if "%%d" == "" ( + set "VersionBeta=0" + set "VersionAlpha=0" + ) else if "%%d" == "alpha" ( + set "VersionBeta=0" + set "VersionAlpha=1" + ) else ( + set "VersionBeta=%%d" + set "VersionAlpha=0" + ) +) + +set /a "VersionMajorCleared=%VersionMajor% %% 1000" +if "%VersionMajorCleared%" neq "%VersionMajor%" ( + echo Bad major version! + exit /b 1 +) +set /a "VersionMinorCleared=%VersionMinor% %% 1000" +if "%VersionMinorCleared%" neq "%VersionMinor%" ( + echo Bad minor version! + exit /b 1 +) +set /a "VersionMicroCleared=%VersionMicro% %% 1000" +if "%VersionMicroCleared%" neq "%VersionMicro%" ( + echo Bad micro version! + exit /b 1 +) +if "%VersionAlpha%" neq "0" ( + if "%VersionAlpha%" neq "1" ( + echo Bad alpha version! + exit /b 1 + ) + set "VersionAlphaBool=true" +) else ( + set "VersionAlphaBool=false" +) + +set /a "VersionFull=%VersionMajor% * 1000000 + %VersionMinor% * 1000 + %VersionMicro%" +if "%VersionBeta%" neq "0" ( + set /a "VersionBetaCleared=%VersionBeta% %% 1000" + if "!VersionBetaCleared!" neq "%VersionBeta%" ( + echo Bad beta version! + exit /b 1 + ) + set /a "VersionBetaMul=1000 + %VersionBeta%" + set "VersionFullBeta=%VersionFull%!VersionBetaMul:~1!" +) else ( + set "VersionFullBeta=0" +) + +set "VersionStr=%VersionMajor%.%VersionMinor%.%VersionMicro%" +set "VersionStrSmall=%VersionMajor%.%VersionMinor%" +if "%VersionMicro%" neq "0" ( + set "VersionStrSmall=%VersionStrSmall%.%VersionMicro%" +) + +if "%VersionAlpha%" neq "0" ( + echo Setting version: %VersionMajor%.%VersionMinor%.%VersionMicro% alpha +) else if "%VersionBeta%" neq "0" ( + echo Setting version: %VersionMajor%.%VersionMinor%.%VersionMicro%.%VersionBeta% closed beta +) else ( + echo Setting version: %VersionMajor%.%VersionMinor%.%VersionMicro% stable +) + +echo Patching build/version... +set "VersionFilePath=%FullScriptPath%version" +call :repl "Replace=(AppVersion) (\s*)\d+/$1$2 %VersionFull%" "Filename=%VersionFilePath%" || goto :error +call :repl "Replace=(AppVersionStrMajor) (\s*)[\d\.]+/$1$2 %VersionMajor%.%VersionMinor%" "Filename=%VersionFilePath%" || goto :error +call :repl "Replace=(AppVersionStrSmall) (\s*)[\d\.]+/$1$2 %VersionStrSmall%" "Filename=%VersionFilePath%" || goto :error +call :repl "Replace=(AppVersionStr) (\s*)[\d\.]+/$1$2 %VersionStr%" "Filename=%VersionFilePath%" || goto :error +call :repl "Replace=(AlphaChannel) (\s*)[\d\.]+/$1$2 %VersionAlpha%" "Filename=%VersionFilePath%" || goto :error +call :repl "Replace=(BetaVersion) (\s*)\d+/$1$2 %VersionFullBeta%" "Filename=%VersionFilePath%" || goto :error + +echo Patching core/version.h... +set "VersionHeaderPath=%FullScriptPath%..\SourceFiles\core\version.h" +call :repl "Replace=(BETA_VERSION_MACRO\s+)\(\d+ULL\)/$1(%VersionFullBeta%ULL)" "Filename=%VersionHeaderPath%" || goto :error +call :repl "Replace=(AppVersion\s+=) (\s*)\d+/$1$2 %VersionFull%" "Filename=%VersionHeaderPath%" || goto :error +call :repl "Replace=(AppVersionStr\s+=) (\s*)[&hat;;]+/$1$2 "%VersionStrSmall%"" "Filename=%VersionHeaderPath%" || goto :error +call :repl "Replace=(AppAlphaVersion\s+=) (\s*)[a-z]+/$1$2 %VersionAlphaBool%" "Filename=%VersionHeaderPath%" || goto :error + +echo Patching project.pbxproj... +set "TelegramProjectPath=%FullScriptPath%..\Telegram.xcodeproj\project.pbxproj" +call :repl "Replace=(TDESKTOP_MAJOR_VERSION\s+=) (\s*)[&hat;;]+/$1$2 %VersionMajor%.%VersionMinor%" "Filename=%TelegramProjectPath%" || goto :error +call :repl "Replace=(TDESKTOP_VERSION\s+=) (\s*)[&hat;;]+/$1$2 %VersionStrSmall%" "Filename=%TelegramProjectPath%" || goto :error + +echo Patching Telegram.rc... +set "ResourcePath=%FullScriptPath%..\Resources\winrc\Telegram.rc" +call :repl "Replace=(FILEVERSION) (\s*)\d+,\d+,\d+,\d+/$1$2 %VersionMajor%,%VersionMinor%,%VersionMicro%,%VersionBeta%" "Filename=%ResourcePath%" || goto :error +call :repl "Replace=(PRODUCTVERSION) (\s*)\d+,\d+,\d+,\d+/$1$2 %VersionMajor%,%VersionMinor%,%VersionMicro%,%VersionBeta%" "Filename=%ResourcePath%" || goto :error +call :repl "Replace=("FileVersion",) (\s*)"\d+.\d+.\d+.\d+"/$1$2 "%VersionMajor%.%VersionMinor%.%VersionMicro%.%VersionBeta%"" "Filename=%ResourcePath%" || goto :error +call :repl "Replace=("ProductVersion",) (\s*)"\d+.\d+.\d+.\d+"/$1$2 "%VersionMajor%.%VersionMinor%.%VersionMicro%.%VersionBeta%"" "Filename=%ResourcePath%" || goto :error + +echo Patching Updater.rc... +set "ResourcePath=%FullScriptPath%..\Resources\winrc\Updater.rc" +call :repl "Replace=(FILEVERSION) (\s*)\d+,\d+,\d+,\d+/$1$2 %VersionMajor%,%VersionMinor%,%VersionMicro%,%VersionBeta%" "Filename=%ResourcePath%" || goto :error +call :repl "Replace=(PRODUCTVERSION) (\s*)\d+,\d+,\d+,\d+/$1$2 %VersionMajor%,%VersionMinor%,%VersionMicro%,%VersionBeta%" "Filename=%ResourcePath%" || goto :error +call :repl "Replace=("FileVersion",) (\s*)"\d+.\d+.\d+.\d+"/$1$2 "%VersionMajor%.%VersionMinor%.%VersionMicro%.%VersionBeta%"" "Filename=%ResourcePath%" || goto :error +call :repl "Replace=("ProductVersion",) (\s*)"\d+.\d+.\d+.\d+"/$1$2 "%VersionMajor%.%VersionMinor%.%VersionMicro%.%VersionBeta%"" "Filename=%ResourcePath%" || goto :error + +exit /b + +:error +( + set ErrorCode=%errorlevel% + echo Error !ErrorCode! + exit /b !ErrorCode! +) + +:repl +( + set %1 + set %2 + set "TempFilename=!Filename!__tmp__" + cscript //Nologo "%FullScriptPath%replace.vbs" "!Replace!" < "!Filename!" > "!TempFilename!" || goto :repl_finish + xcopy /Y !TempFilename! !Filename! >NUL || goto :repl_finish + goto :repl_finish +) + +:repl_finish +( + set ErrorCode=%errorlevel% + if !ErrorCode! neq 0 ( + echo Replace error !ErrorCode! + echo While replacing "%Replace%" + echo In file "%Filename%" + ) + del %TempFilename% + exit /b !ErrorCode! +) diff --git a/Telegram/build/setup.iss b/Telegram/build/setup.iss new file mode 100644 index 0000000000..ff2b393664 --- /dev/null +++ b/Telegram/build/setup.iss @@ -0,0 +1,118 @@ +#define MyAppShortName "Telegram" +#define MyAppName "Telegram Desktop" +#define MyAppPublisher "Telegram Messenger LLP" +#define MyAppURL "https://tdesktop.com" +#define MyAppExeName "Telegram.exe" +#define MyAppId "53F49750-6209-4FBF-9CA8-7A333C87D1ED" + +[Setup] +; NOTE: The value of AppId uniquely identifies this application. +; Do not use the same AppId value in installers for other applications. +; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) +AppId={{{#MyAppId}} +AppName={#MyAppName} +AppVersion={#MyAppVersion} +AppPublisher={#MyAppPublisher} +AppPublisherURL={#MyAppURL} +AppSupportURL={#MyAppURL} +AppUpdatesURL={#MyAppURL} +DefaultDirName={userappdata}\{#MyAppName} +DefaultGroupName={#MyAppName} +AllowNoIcons=yes +OutputDir={#SourcePath}..\..\Win32\Deploy +OutputBaseFilename=tsetup.{#MyAppVersionFull} +SetupIconFile={#SourcePath}..\Resources\art\icon256.ico +UninstallDisplayIcon={app}\Telegram.exe +Compression=lzma +SolidCompression=yes +DisableStartupPrompt=yes +PrivilegesRequired=lowest +VersionInfoVersion={#MyAppVersion}.0 + +[Languages] +Name: "english"; MessagesFile: "compiler:Default.isl" + +[Tasks] +Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}" +Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; OnlyBelowVersion: 0,6.1 + +[Files] +Source: "{#SourcePath}..\..\Win32\Deploy\Telegram.exe"; DestDir: "{app}"; Flags: ignoreversion +Source: "{#SourcePath}..\..\Win32\Deploy\Updater.exe"; DestDir: "{app}"; Flags: ignoreversion +; NOTE: Don't use "Flags: ignoreversion" on any shared system files + +[Icons] +Name: "{group}\{#MyAppShortName}"; Filename: "{app}\{#MyAppExeName}" +Name: "{group}\{cm:UninstallProgram,{#MyAppShortName}}"; Filename: "{uninstallexe}" +Name: "{userdesktop}\{#MyAppShortName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon +Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppShortName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon + +[Run] +Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppShortName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent + +[UninstallDelete] +Type: files; Name: "{app}\data" +Type: files; Name: "{app}\data_config" +Type: files; Name: "{app}\log.txt" +Type: filesandordirs; Name: "{app}\DebugLogs" +Type: filesandordirs; Name: "{app}\tupdates" +Type: filesandordirs; Name: "{app}\tdata" +Type: filesandordirs; Name: "{app}\tcache" +Type: filesandordirs; Name: "{app}\tdumps" +Type: dirifempty; Name: "{app}" +Type: files; Name: "{userappdata}\{#MyAppName}\data" +Type: files; Name: "{userappdata}\{#MyAppName}\data_config" +Type: files; Name: "{userappdata}\{#MyAppName}\log.txt" +Type: filesandordirs; Name: "{userappdata}\{#MyAppName}\DebugLogs" +Type: filesandordirs; Name: "{userappdata}\{#MyAppName}\tupdates" +Type: filesandordirs; Name: "{userappdata}\{#MyAppName}\tdata" +Type: filesandordirs; Name: "{userappdata}\{#MyAppName}\tcache" +Type: filesandordirs; Name: "{userappdata}\{#MyAppName}\tdumps" +Type: dirifempty; Name: "{userappdata}\{#MyAppName}" + +[Languages] +Name: "it"; MessagesFile: "compiler:Languages\Italian.isl" +Name: "es"; MessagesFile: "compiler:Languages\Spanish.isl" +Name: "de"; MessagesFile: "compiler:Languages\German.isl" +Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl" +Name: "pt"; MessagesFile: "compiler:Languages\Portuguese.isl" + +[Code] +procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); +var ResultCode: Integer; +begin + if CurUninstallStep = usUninstall then + begin + ShellExec('', ExpandConstant('{app}\{#MyAppExeName}'), '-cleanup', '', SW_SHOW, ewWaitUntilTerminated, ResultCode); + end; +end; + +const CSIDL_DESKTOPDIRECTORY = $0010; + CSIDL_COMMON_DESKTOPDIRECTORY = $0019; + +procedure CurStepChanged(CurStep: TSetupStep); +var ResultCode: Integer; + HasOldKey: Boolean; + HasNewKey: Boolean; + HasOldLnk: Boolean; + HasNewLnk: Boolean; + UserDesktopLnk: String; + CommonDesktopLnk: String; +begin + if CurStep = ssPostInstall then + begin + HasNewKey := RegKeyExists(HKEY_CURRENT_USER, 'Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{#MyAppId}}_is1') or RegKeyExists(HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{{#MyAppId}}_is1'); + HasOldKey := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{#MyAppId}}_is1') or RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{#MyAppId}}_is1'); + UserDesktopLnk := ExpandFileName(GetShellFolderByCSIDL(CSIDL_DESKTOPDIRECTORY, False) + '\{#MyAppShortName}.lnk'); + CommonDesktopLnk := ExpandFileName(GetShellFolderByCSIDL(CSIDL_COMMON_DESKTOPDIRECTORY, False) + '\{#MyAppShortName}.lnk'); + HasNewLnk := FileExists(UserDesktopLnk); + HasOldLnk := FileExists(CommonDesktopLnk) and (UserDesktopLnk <> CommonDesktopLnk); + if (HasOldKey and HasNewKey) or (HasOldLnk and HasNewLnk) then + begin + if (GetWindowsVersion >= $06000000) then // Vista or later + ShellExec('runas', ExpandConstant('{app}\{#MyAppExeName}'), '-fixprevious', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) + else + ShellExec('', ExpandConstant('{app}\{#MyAppExeName}'), '-fixprevious', '', SW_SHOW, ewWaitUntilTerminated, ResultCode); + end; + end; +end; diff --git a/Telegram/build/version b/Telegram/build/version new file mode 100644 index 0000000000..ccbaa4e17a --- /dev/null +++ b/Telegram/build/version @@ -0,0 +1,6 @@ +AppVersion 9046 +AppVersionStrMajor 0.9 +AppVersionStrSmall 0.9.46 +AppVersionStr 0.9.46 +AlphaChannel 1 +BetaVersion 0