diff --git a/data/icons/archives.svg b/data/icons/archives.svg new file mode 100644 index 00000000..4c76158c --- /dev/null +++ b/data/icons/archives.svg @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + diff --git a/data/icons/consoles.svg b/data/icons/consoles.svg new file mode 100644 index 00000000..bad8c7c4 --- /dev/null +++ b/data/icons/consoles.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + + diff --git a/data/icons/engines.svg b/data/icons/engines.svg new file mode 100644 index 00000000..0f7a53de --- /dev/null +++ b/data/icons/engines.svg @@ -0,0 +1,61 @@ + + diff --git a/data/icons/installers.svg b/data/icons/installers.svg new file mode 100644 index 00000000..e3838e8b --- /dev/null +++ b/data/icons/installers.svg @@ -0,0 +1,70 @@ + + + + + + + + + + diff --git a/data/icons/quick_open.svg b/data/icons/quick_open.svg index c507b779..e0e4dceb 100644 --- a/data/icons/quick_open.svg +++ b/data/icons/quick_open.svg @@ -1,104 +1,56 @@ - -image/svg+xml + + + + + + + + diff --git a/data/icons/video.svg b/data/icons/video.svg new file mode 100644 index 00000000..9caaebf5 --- /dev/null +++ b/data/icons/video.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dev_tools/add_to_bd.py b/dev_tools/add_to_bd.py new file mode 100644 index 00000000..25d53ae0 --- /dev/null +++ b/dev_tools/add_to_bd.py @@ -0,0 +1,49 @@ +import sqlalchemy +from sqlalchemy import Table, Column, Integer, String +import requests +from bs4 import BeautifulSoup + + +def get_release_date(game_name): + game_name = (game_name.replace(' ', '_') + .replace(':', '') + .replace("'", '') + .replace("-", '') + .lower()) + + response = requests.get('https://www.playground.ru/' + game_name) + + if response.status_code == 200: + soup = BeautifulSoup(response.text, 'html.parser') + release_date = soup.select('.release-item')[0].text.replace(' ', '').strip() + return release_date.split('\n')[0].split('.')[-1] + + +engine = sqlalchemy.create_engine('sqlite:///game_base.db') +conn = engine.connect() +metadata = sqlalchemy.MetaData() + +game_list = Table('game_list', metadata, + Column('id', Integer, primary_key=True), + Column('game_name', String), + Column('release_year', String), + Column('func_name', String), + Column('ext_list', String), + extend_existing=True) + +with open('ue4_list.txt', 'r') as ue4: + table_data = ue4.readlines() + +for i, t in enumerate(table_data): + name, hex_value = t.strip().split(' 0x') + release_year = get_release_date(name.strip().split(' (')[0]) + print(i, name, release_year) + ins = game_list.insert().values(game_name=name.strip(), + release_year=release_year, + func_name='_Unreal4', + ext_list=f'0x{hex_value}' + ) + conn.execute(ins) + +conn.commit() +conn.close() diff --git a/game_base.db b/game_base.db index 3c14ab00..a3a9f127 100644 Binary files a/game_base.db and b/game_base.db differ diff --git a/main.py b/main.py index 9154103a..03924417 100644 --- a/main.py +++ b/main.py @@ -15,6 +15,8 @@ from source.reapers import * from source.delete import DeleteThread +ic.disable() + class UnpackerMain(MainWindow, QuickOpen): @@ -117,6 +119,7 @@ def __init__(self): self.pb = custom_ui.ProgressBar(self.setting["Main"]["theme"]) self.last_run = None self.file_list = [sys.argv[1], ] + self.func_name = None self.find_reaper() diff --git a/poetry.lock b/poetry.lock index 7740e28c..1f22161b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -40,6 +40,27 @@ six = ">=1.12.0" astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] +[[package]] +name = "beautifulsoup4" +version = "4.12.3" +description = "Screen-scraping library" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, + {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +cchardet = ["cchardet"] +chardet = ["chardet"] +charset-normalizer = ["charset-normalizer"] +html5lib = ["html5lib"] +lxml = ["lxml"] + [[package]] name = "certifi" version = "2024.2.2" @@ -943,6 +964,17 @@ files = [ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] +[[package]] +name = "soupsieve" +version = "2.6" +description = "A modern CSS selector implementation for Beautiful Soup." +optional = false +python-versions = ">=3.8" +files = [ + {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, + {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"}, +] + [[package]] name = "sqlalchemy" version = "2.0.31" @@ -1094,4 +1126,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = ">=3.11,<3.13" -content-hash = "fc1b06add9a27c3743a0a173fab2360f70ccf685fcdef424f40ad05cff7b738e" +content-hash = "61492143f4959345622557fca430c76a3527f1a3b68062d091bf1b89ac61f8af" diff --git a/pyproject.toml b/pyproject.toml index bdaedbff..2fc5447b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,6 +19,7 @@ pyinstaller = "^6.4.0" sqlalchemy = "^2.0.31" pylint = "^3.2.5" ruff = "^0.5.0" +beautifulsoup4 = "^4.12.3" [build-system] diff --git a/source/ui/main_ui.py b/source/ui/main_ui.py index 815a9428..b03371fd 100644 --- a/source/ui/main_ui.py +++ b/source/ui/main_ui.py @@ -352,6 +352,15 @@ def __init__(self): self.menubar.addAction(self.menu_about.menuAction()) self.setCentralWidget(self.centralwidget) + # Set icons + # self.menu_disk_images.setIcon(QIcon('./data/icons/disk_image.svg')) + # self.quickOpen.setIcon(QIcon('./data/icons/quick_open.svg')) + # self.consolesMenu.setIcon(QIcon('./data/icons/consoles.svg')) + # self.menu_archives.setIcon(QIcon('./data/icons/archives.svg')) + # self.menu_installers.setIcon(QIcon('./data/icons/installers.svg')) + # self.menu_game_engines.setIcon(QIcon('./data/icons/engines.svg')) + # self.videoConverters.setIcon(QIcon('./data/icons/video.svg')) + self.all_games = 0 self.download = True self.current_game = 0 diff --git a/source/ui/setting.py b/source/ui/setting.py index 7bb960a6..a6df6b6d 100644 --- a/source/ui/setting.py +++ b/source/ui/setting.py @@ -196,7 +196,7 @@ def apply_setting(self, style): with winreg.CreateKey(winreg.HKEY_CLASSES_ROOT, r'*\shell\BFGUnp') as key: winreg.SetValueEx(key, '', 0, winreg.REG_SZ, 'Open with BFG Unpacker') - winreg.SetValueEx(key, 'Icon', 0, winreg.REG_SZ, f'{script_dir}\\data\\icons\\i.ico, 0') + winreg.SetValueEx(key, 'Icon', 0, winreg.REG_SZ, f'{script_dir}\\data\\icons\\i.ico, 2') with winreg.CreateKey(winreg.HKEY_CLASSES_ROOT, r'*\shell\BFGUnp\command') as key: winreg.SetValueEx(key, '', 0, winreg.REG_SZ, f'"{script_dir}\\bfg_unpacker.exe" "%1"') diff --git a/whats_new.txt b/whats_new.txt index d3809d95..0084106e 100644 --- a/whats_new.txt +++ b/whats_new.txt @@ -1,4 +1,10 @@ +September 18, 2024 - 2.0.0 beta_2 version release + + - Fixed icon showing in explorer's context menu + - Fixed program crash by try unpacking file from explorer's context menu + - The game base was updated (updated UE4 game list, added 200+ release years) + September 17, 2024 - Added support to unpack archives from "Of orc and human" game diff --git a/whats_new_ru.txt b/whats_new_ru.txt index e186f644..2c68f512 100644 --- a/whats_new_ru.txt +++ b/whats_new_ru.txt @@ -1,4 +1,10 @@ +18.09.2024 - релиз версии 2.0.0 beta_2 + + - Исправлено отображение иконки программы в контекстном меню проводника + - Исправлен вылет при попытке распаковать файл из контекстного меню проводника + - Обновлена база игр (обновлен список игр на UE4, добавлены годы релизов 200+ игр) + 17.09.2024 - Обновлена база игр (добавлены годы релизов 500+ игр, удалены повторы игр)