- 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.
		
			
				
	
	
		
			153 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			153 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 + '"' ],
 | 
						|
])
 |