Skip to content

Commit

Permalink
v2.25
Browse files Browse the repository at this point in the history
Updated program to version 2.25
  • Loading branch information
Skrepysh committed Dec 9, 2023
1 parent e760a94 commit ff3e80e
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 48 deletions.
3 changes: 2 additions & 1 deletion config.ini
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
[options]
; this is EXAMPLE config file!!!!
game_path = E:/Minecraft/game2
game_path = default
custom_username = skrepysh.dll
err_pause = 1
38 changes: 28 additions & 10 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import configparser
from os import system
import time
from argparse import ArgumentParser
from minesquid import MineSquid, ZeroSelector, Restart
from tkinter import messagebox as msg
from colorama import Fore


parser = ArgumentParser(description='Привет!')
group1 = parser.add_mutually_exclusive_group()
group1.add_argument("--mpname", default=0, help="используйте --mpname [имя модпака] для создания ярлыков быстрого "
Expand All @@ -20,7 +21,7 @@
group1.add_argument("--restore", default=0, nargs='?', const=1, help="используйте --restore, чтобы восстановить бэкап")
args = parser.parse_args()

program_version = "2.24"
program_version = "2.25"
program = MineSquid(program_version)
logging = program.logging
if __name__ == "__main__":
Expand All @@ -46,12 +47,23 @@
except KeyError as err:
logging.error("KeyError")
logging.exception(err)
program.repair_config()
a = program.repair_config()
if a == 'restart_required':
program.repair_config()
except configparser.ParsingError as err:
logging.error("ParsingError")
logging.exception(err)
a = program.repair_config()
if a == 'restart_required':
program.repair_config()
except IndexError as err:
logging.error("IndexError")
logging.exception(err)
print(Fore.RED + f"Неверное значение!{Fore.MAGENTA}\nПерезапуск")
program.error()
print(Fore.RED + "Неверное значение!")
a = program.err_pause()
if a == 'disabled':
print(f"{Fore.MAGENTA}Перезапуск")
program.error(nosleep=True)
except PermissionError as err:
logging.error("PermissionError")
logging.exception(err)
Expand All @@ -62,13 +74,19 @@
exit()
except ZeroSelector:
logging.error("ZeroSelector")
print(Fore.RED + f"Неверное значение!{Fore.MAGENTA}\nПерезапуск")
program.error()
print(Fore.RED + "Неверное значение")
a = program.err_pause()
if a == 'disabled':
print(f"{Fore.MAGENTA}Перезапуск")
program.error(nosleep=True)
except ValueError as err:
logging.error("ValueError")
logging.exception(err)
print(Fore.RED + f"Неверное значение!{Fore.MAGENTA}\nПерезапуск")
program.error()
print(Fore.RED + "Неверное значение!")
a = program.err_pause()
if a == 'disabled':
print(f"{Fore.MAGENTA}Перезапуск")
program.error(nosleep=True)
except FileNotFoundError as err:
logging.error("FileNotFoundError")
logging.exception(err)
Expand All @@ -87,5 +105,5 @@
logging.error("Неизвестная ошибка!!")
print(Fore.RED + f"Неизвестная ошибка, смотри {Fore.MAGENTA}логи")
logging.exception(err)
time.sleep(7)
program.err_pause()
break
103 changes: 67 additions & 36 deletions minesquid.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,23 +27,26 @@ class DiskRoot(Exception):


class MineSquid:
def __init__(self, version):
self.username = os.getlogin()
self.dt = datetime.now()
self.user_choice = ""
self.list = []
self.version = str(version)
self.game_directory = 'не назначена'
self.program_directory = os.path.dirname(os.path.abspath(argv[0]))
self.userappdata = f'{os.environ["appdata"]}\\mineSquid'
self.config = ConfigParser()
self.logging = logging
init(autoreset=True)
def __init__(self, version='none'):
self.username = os.getlogin() # пользовательское имя, отображается при запуске программы
self.dt = datetime.now() # текущее время
self.user_choice = "" # имя выбранного пользователем модпака
self.list = [] # список модпаков (пуст при запуске)
self.version = str(version) # версия программы
self.game_directory = 'не назначена' # папка с игрой, по умолчанию не назначена
self.program_directory = os.path.dirname(os.path.abspath(argv[0])) # папка, где расположена сама программа
self.userappdata = f'{os.environ["appdata"]}\\mineSquid' # папка с данными (модпаками, бэкапом, настройками)
self.wait_on_error = 1 # ожидание enter при ошибке, включено по умолчанию
self.config = ConfigParser() # конфиг
self.logging = logging # логирование
init(autoreset=True) # инит модуля Colorama. Внесение настройки автосброса цвета после каждого print()
# noinspection PyGlobalUndefined

@staticmethod
def error():
sleep(0.5)
def error(self, nosleep):
if not nosleep:
sleep(0.5)
elif self.wait_on_error == 0:
sleep(0.5)
os.system("cls")

@staticmethod
Expand All @@ -53,16 +56,22 @@ def finish():
logging.info("Работа программы завершена")
exit()

def err_pause(self):
if self.wait_on_error == 1:
string = str(Fore.RED + '>>>' + Fore.RESET)
input(string)
else:
return 'disabled'

def settings(self):
logging.info('Открыты настройки')
print('1 - изменить путь к папке с игрой\n2 - изменить имя пользователя, '
'отображаемое в программе\n3 - выход\n*')
'отображаемое в программе\n3 - включить/выключить ожидание enter при ошибке\n4 - выход\n*')
input1 = input(f"Выберите настройку: {Fore.RED}")
print(Fore.RESET, end='\r')
if str(input1) == '1':
logging.info('Начат процесс изменения пути к папке с игрой')
self.edit_config('options', 'game_path', self.enter_path())
time.sleep(0.5)
elif str(input1) == '2':
logging.info('Начат процесс изменения пользовательского никнейма')
username = input(f'Введите новое имя пользователя(default - сбросить имя): {Fore.RED}')
Expand All @@ -71,20 +80,29 @@ def settings(self):
self.edit_config('options', 'custom_username', username)
else:
self.edit_config('options', 'custom_username', 'default')
time.sleep(0.5)
time.sleep(0.2)
elif str(input1) == '3':
wait_on_errss = input(f'Включить/выключить ожидание enter при ошибке (1 - вкл, 0 - выкл): {Fore.RED}')
if wait_on_errss == "1":
self.edit_config('options', 'err_pause', '1')
elif wait_on_errss == "0":
self.edit_config('options', 'err_pause', '0')
else:
print(Fore.RED + 'Неверное значение!')
time.sleep(0.2)
elif str(input1) == '4':
logging.info('Выход из настроек...')
time.sleep(0.5)
time.sleep(0.2)
else:
print('Неизвестный параметр')
time.sleep(0.5)
self.err_pause()

def enter_path(self):
while True:
path = filedialog.askdirectory(initialdir=f'{os.environ["appdata"]}\\.minecraft')
if path == '':
print(Fore.RED + "Редактирование отменено")
time.sleep(1)
self.err_pause()
return self.game_directory
elif path.replace('\\', '').replace('/', '') == path[:2]:
logging.warning('Пользователь попытался выбрать корень диска в качестве пути к игре!')
Expand Down Expand Up @@ -118,6 +136,7 @@ def read_config(self):
self.config.read(f"{self.userappdata}\\config.ini", encoding="windows-1251")
game_directory = self.config['options']['game_path'].replace('"', '').replace('/', '\\')
custom_username = self.config['options']['custom_username']
wait_on_errs = self.config['options']['err_pause']
logging.info("Конфиг прочитан")
if game_directory == "default" and os.path.exists(f'{os.environ["appdata"]}\\.minecraft'):
self.game_directory = f'{os.environ["appdata"]}\\.minecraft'
Expand All @@ -134,6 +153,10 @@ def read_config(self):
self.username = os.getlogin()
else:
self.username = custom_username
if int(wait_on_errs) == 1:
self.wait_on_error = 1
else:
self.wait_on_error = 0
logging.info("Конфиг обработан")

def checker(self):
Expand Down Expand Up @@ -239,16 +262,15 @@ def edit_config(self, section, option, what):
logging.info('Конфиг отредактирован успешно')

def repair_config(self):
tempparser = ConfigParser()
logging.warning('Запуск восстановление конфига!')
if os.path.exists(f"{self.userappdata}\\config.ini"):
os.remove(f"{self.userappdata}\\config.ini")
else:
pass
with open(f"{self.userappdata}\\config.ini", "w") as cfg:
self.config.add_section("options")
self.config.set("options", "game_path", "default")
self.config.set("options", "custom_username", "default")
self.config.write(cfg)
tempparser.add_section("options")
tempparser.set("options", "game_path", "default")
tempparser.set("options", "custom_username", "default")
tempparser.set("options", "err_pause", "1")
tempparser.write(cfg)
self.read_config()
self.edit_config('options', 'game_path', self.enter_path())
logging.info('Конфиг восстановлен')

Expand All @@ -261,7 +283,8 @@ def load_modpack(self, modpack_number):
print(Fore.RED + "Работаю...")
logging.info("Начата работа над модпаком...")
if len(fileslist2) > 1:
pb1 = Bar(Fore.LIGHTMAGENTA_EX + "Резервное коп-е" + Fore.CYAN, max=len(fileslist2), fill=Fore.GREEN + '@' + Fore.CYAN)
pb1 = Bar(Fore.LIGHTMAGENTA_EX + "Резервное коп-е" + Fore.CYAN,
max=len(fileslist2), fill=Fore.GREEN + '@' + Fore.CYAN)
for file in os.listdir(f'{self.userappdata}\\backup'):
if os.path.isfile(f'{self.userappdata}\\backup\\{file}'):
os.remove(f'{self.userappdata}\\backup\\{file}')
Expand All @@ -279,7 +302,8 @@ def load_modpack(self, modpack_number):
pb1.finish()
else:
logging.info('Папка модов пуста, бэкапить нечего')
pb2 = Bar(Fore.LIGHTMAGENTA_EX + "Выполнение" + Fore.CYAN, max=len(fileslist1) + 1, fill=Fore.GREEN + '@' + Fore.CYAN)
pb2 = Bar(Fore.LIGHTMAGENTA_EX + "Выполнение" + Fore.CYAN,
max=len(fileslist1) + 1, fill=Fore.GREEN + '@' + Fore.CYAN)
for file in os.listdir(f"{self.game_directory}\\mods\\"):
if os.path.isfile(f"{self.game_directory}\\mods\\{file}"):
os.remove(f"{self.game_directory}\\mods\\{file}")
Expand All @@ -303,7 +327,9 @@ def load_modpack(self, modpack_number):
self.finish()
else:
print(Fore.RED + "Папка с игрой не назначена!")
sleep(1.5)
a = self.err_pause()
if a == 'disabled':
sleep(1.5)
raise Restart

def restore_backup(self):
Expand All @@ -319,7 +345,8 @@ def restore_backup(self):
print(Fore.RED + "Работаю...")
logging.info("Пользователь запустил восстановление бэкапа")
if os.path.exists(f"{self.game_directory}\\mods") and len(os.listdir(f"{self.game_directory}\\mods")):
pb1 = Bar(Fore.LIGHTMAGENTA_EX + "Резервное коп-е" + Fore.CYAN, max=len(fileslist), fill=Fore.GREEN + '@' + Fore.CYAN)
pb1 = Bar(Fore.LIGHTMAGENTA_EX + "Резервное коп-е" + Fore.CYAN,
max=len(fileslist), fill=Fore.GREEN + '@' + Fore.CYAN)
bob = True
if not os.path.exists(f"{self.userappdata}\\bob\\"):
os.mkdir(f"{self.userappdata}\\bob\\")
Expand All @@ -341,7 +368,8 @@ def restore_backup(self):
pb1.finish()
else:
pass
pb2 = Bar(Fore.LIGHTMAGENTA_EX + "Восстановление" + Fore.CYAN, max=len(fileslist2), fill=Fore.GREEN + '@' + Fore.CYAN)
pb2 = Bar(Fore.LIGHTMAGENTA_EX + "Восстановление" + Fore.CYAN,
max=len(fileslist2)+2, fill=Fore.GREEN + '@' + Fore.CYAN)
for file in fileslist2:
if os.path.isfile(f'{self.userappdata}\\backup\\{file}'):
copy(f'{self.userappdata}\\backup\\{file}', f'{self.game_directory}\\mods')
Expand All @@ -363,7 +391,9 @@ def restore_backup(self):
self.finish()
else:
print(Fore.RED + "Папка с игрой не назначена!")
sleep(1.5)
a = self.err_pause()
if a == 'disabled':
sleep(1.5)
raise Restart

def update(self):
Expand All @@ -379,7 +409,8 @@ def update(self):
if float(version) > float(self.version):
print(f"Найдена новая версия программы: {Fore.GREEN + version}")
logging.info(f"Найдена новая версия программы: {version}!")
accept = input(f"Выполнить обновление? {Fore.GREEN}Y{Fore.RESET} - да, {Fore.RED}N{Fore.RESET} - нет: {Fore.CYAN}")
accept = input(f"Выполнить обновление? {Fore.GREEN}Y{Fore.RESET} - да, "
f"{Fore.RED}N{Fore.RESET} - нет: {Fore.CYAN}")
print(Fore.RESET, end='\r')
if accept.lower() == "y":
logging.info("Обновление подтверждено")
Expand Down
2 changes: 1 addition & 1 deletion version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.24
2.25

0 comments on commit ff3e80e

Please sign in to comment.