#!/usr/bin/env python3 import os.path import sys import importlib.machinery # Workaround so it can be imported in cryselect.py import json import win32api import win32con from win32com.shell import shell, shellcon import ctypes import uuid import tkinter as tk from tkinter import ttk from tkinter import filedialog import crypath if __name__ == '__main__': path = crypath.get_script_dir() sys.path.insert(0, path) cryselect = importlib.machinery.SourceFileLoader( 'cryselect', os.path.join(path, 'cryselect.py')).load_module() cryselect.main()
def cmd_upgrade(args): if not os.path.isfile(args.project_file): error_project_not_found(args.project_file) try: file = open(args.project_file, 'r') project = configparser.ConfigParser() project.read_string('[project]\n' + file.read()) file.close() except ValueError: error_project_json_decode(args.project_file) engine_version = project['project'].get('engine_version') restore_version = { '5.0.0': '5.0.0', '5.1.0': '5.1.0', '5.1.1': '5.1.0' }.get(engine_version) if restore_version is None: error_upgrade_engine_version(engine_version) template_name = None if restore_version == '5.0.0': template_name = upgrade_identify50(args.project_file) elif restore_version == '5.1.0': template_name = upgrade_identify51(args.project_file) if template_name is None: error_upgrade_template_unknown(args.project_file) restore_path = os.path.abspath( os.path.join(crypath.get_script_dir(), 'upgrade', restore_version, * template_name) + '.zip') if not os.path.isfile(restore_path): error_upgrade_template_missing(restore_path) # --- (dirname, basename) = os.path.split(os.path.abspath(args.project_file)) prevcwd = os.getcwd() os.chdir(dirname) if not os.path.isdir('Backup'): os.mkdir('Backup') (fd, zfilename) = tempfile.mkstemp( '.zip', datetime.date.today().strftime('upgrade_%y%m%d_'), os.path.join('Backup', dirname)) file = os.fdopen(fd, 'wb') backup = zipfile.ZipFile(file, 'w', zipfile.ZIP_DEFLATED) restore = zipfile.ZipFile(restore_path, 'r') # .bat for filename in (basename, 'Code_CPP.bat', 'Code_CS.bat', 'Editor.bat', 'Game.bat', 'CMakeLists.txt'): if os.path.isfile(filename): backup.write(filename) # bin for (dirpath, dirnames, filenames) in os.walk('bin'): for filename in filter( lambda a: os.path.splitext(a)[1] in ('.exe', '.dll'), filenames): backup.write(os.path.join(dirpath, filename)) # Solutions for (dirpath, dirnames, filenames) in os.walk('Code'): for filename in filter( lambda a: os.path.splitext(a)[1] in ('.sln', '.vcxproj', '.filters', '.user', '.csproj'), filenames): path = os.path.join(dirpath, filename) backup.write(path) backup_list = backup.namelist() # Files to be restored for filename in restore.namelist(): if os.path.isfile(filename) and filename not in backup_list: backup.write(filename) # --- backup.close() file.close() # Delete files backed up z = zipfile.ZipFile(zfilename, 'r') for filename in z.namelist(): os.chmod(filename, stat.S_IWRITE) os.remove(filename) z.close() restore.extractall() restore.close() os.chdir(prevcwd)
def get_filepath(self): dir = os.path.realpath(crypath.get_script_dir()) return os.path.join(dir, "settings.cfg")