tdesktop/Telegram/build/set_version.py
John Preston 7ce8b42216 Version 3.1.
- Some animated emoji now have extra effects.
- Send 🎆 🎉, 🎈, :like:, 💩 or ❤️
to any private chat, then click on the animated emoji
to launch the effect.
- If your chat partner also has the chat open,
you will both see the effects.
- See the "Watching" status
when your chat partner is enjoying emoji effects with you.
- More interactive emoji coming soon.
- Right click one of your outgoing messages in small groups
to see who recently viewed it.
- To protect privacy, read receipts are only stored for 7 days
after the message was sent.
- Record video and audio from live broadcasts in your group or channel.
- Admins can start recording from the '...' menu.
- Choose between recording in portrait or landscape orientation.
- Finished recordings are sent to the admin's Saved Messages
and can be easily shared.
2021-09-19 18:21:31 +03:00

154 lines
5.1 KiB
Python

'''
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
'''
import sys, os, re, subprocess, io
def finish(code):
global executePath
os.chdir(executePath)
sys.exit(code)
if sys.platform == 'win32' and not 'COMSPEC' in os.environ:
print('[ERROR] COMSPEC environment variable is not set.')
finish(1)
executePath = os.getcwd()
scriptPath = os.path.dirname(os.path.realpath(__file__))
inputVersion = ''
versionOriginal = ''
versionMajor = ''
versionMinor = ''
versionPatch = ''
versionAlpha = '0'
versionBeta = False
for arg in sys.argv:
match = re.match(r'^\s*(\d+)\.(\d+)(\.(\d+)(\.(\d+|beta))?)?\s*$', arg)
if match:
inputVersion = arg
versionOriginal = inputVersion
versionMajor = match.group(1)
versionMinor = match.group(2)
versionPatch = match.group(4) if match.group(4) else '0'
versionAlphaBeta = match.group(5) if match.group(5) else ''
if len(versionAlphaBeta) > 0:
if match.group(6) == 'beta':
versionBeta = True
else:
versionAlpha = match.group(6)
if not len(versionMajor):
print("Wrong version parameter")
finish(1)
def checkVersionPart(part):
cleared = int(part) % 1000 if len(part) > 0 else 0
if str(cleared) != part:
print("Bad version part: " + part)
finish(1)
checkVersionPart(versionMajor)
checkVersionPart(versionMinor)
checkVersionPart(versionPatch)
checkVersionPart(versionAlpha)
versionFull = str(int(versionMajor) * 1000000 + int(versionMinor) * 1000 + int(versionPatch))
versionFullAlpha = '0'
if versionAlpha != '0':
versionFullAlpha = str(int(versionFull) * 1000 + int(versionAlpha))
versionStr = versionMajor + '.' + versionMinor + '.' + versionPatch
versionStrSmall = versionStr if versionPatch != '0' else versionMajor + '.' + versionMinor
if versionBeta:
print('Setting version: ' + versionStr + ' beta')
elif versionAlpha != '0':
print('Setting version: ' + versionStr + '.' + versionAlpha + ' closed alpha')
else:
print('Setting version: ' + versionStr + ' stable')
#def replaceInFile(path, replaces):
def checkChangelog():
global scriptPath, versionStr, versionStrSmall
count = 0
with io.open(scriptPath + '/../../changelog.txt', encoding='utf-8') as f:
for line in f:
if line.startswith(versionStr + ' ') or line.startswith(versionStrSmall + ' '):
count = count + 1
if count == 0:
print('Changelog entry not found!')
finish(1)
elif count != 1:
print('Wrong changelog entries count found: ' + count)
finish(1)
checkChangelog()
def replaceInFile(path, replacements):
content = ''
foundReplacements = {}
updated = False
with open(path, 'r') as f:
for line in f:
for replacement in replacements:
if re.search(replacement[0], line):
changed = re.sub(replacement[0], replacement[1], line)
if changed != line:
line = changed
updated = True
foundReplacements[replacement[0]] = True
content = content + line
for replacement in replacements:
if not replacement[0] in foundReplacements:
print('Could not find "' + replacement[0] + '" in "' + path + '".')
finish(1)
if updated:
with open(path, 'w') as f:
f.write(content)
print('Patching build/version...')
replaceInFile(scriptPath + '/version', [
[ r'(AppVersion\s+)\d+', r'\g<1>' + versionFull ],
[ r'(AppVersionStrMajor\s+)\d[\d\.]*', r'\g<1>' + versionMajor + '.' + versionMinor ],
[ r'(AppVersionStrSmall\s+)\d[\d\.]*', r'\g<1>' + versionStrSmall ],
[ r'(AppVersionStr\s+)\d[\d\.]*', r'\g<1>' + versionStr ],
[ r'(BetaChannel\s+)\d', r'\g<1>' + ('1' if versionBeta else '0') ],
[ r'(AlphaVersion\s+)\d+', r'\g<1>' + versionFullAlpha ],
[ r'(AppVersionOriginal\s+)\d[\d\.beta]*', r'\g<1>' + versionOriginal ],
])
print('Patching core/version.h...')
replaceInFile(scriptPath + '/../SourceFiles/core/version.h', [
[ r'(TDESKTOP_REQUESTED_ALPHA_VERSION\s+)\(\d+ULL\)', r'\g<1>(' + versionFullAlpha + 'ULL)' ],
[ r'(AppVersion\s+=\s+)\d+', r'\g<1>' + versionFull ],
[ r'(AppVersionStr\s+=\s+)[^;]+', r'\g<1>"' + versionStrSmall + '"' ],
[ r'(AppBetaVersion\s+=\s+)[a-z]+', r'\g<1>' + ('true' if versionBeta else 'false') ],
])
parts = [versionMajor, versionMinor, versionPatch, versionAlpha]
withcomma = ','.join(parts)
withdot = '.'.join(parts)
rcReplaces = [
[ r'(FILEVERSION\s+)\d+,\d+,\d+,\d+', r'\g<1>' + withcomma ],
[ r'(PRODUCTVERSION\s+)\d+,\d+,\d+,\d+', r'\g<1>' + withcomma ],
[ r'("FileVersion",\s+)"\d+\.\d+\.\d+\.\d+"', r'\g<1>"' + withdot + '"' ],
[ r'("ProductVersion",\s+)"\d+\.\d+\.\d+\.\d+"', r'\g<1>"' + withdot + '"' ],
]
print('Patching Telegram.rc...')
replaceInFile(scriptPath + '/../Resources/winrc/Telegram.rc', rcReplaces)
print('Patching Updater.rc...')
replaceInFile(scriptPath + '/../Resources/winrc/Updater.rc', rcReplaces)
print('Patching appxmanifest.xml...')
replaceInFile(scriptPath + '/../Resources/uwp/AppX/AppxManifest.xml', [
[ r'( Version=)"\d+\.\d+\.\d+\.\d+"', r'\g<1>"' + withdot + '"' ],
])