PortProtonQt

Удобный графический интерфейс для управления и запуска игр из PortProton, Steam и Epic Games Store. Оно объединяет библиотеки игр в единый центр для лёгкой навигации и организации. Лёгкая структура и кроссплатформенная поддержка обеспечивают цельный игровой опыт без необходимости использования нескольких лаунчеров. Интеграция с PortProton упрощает запуск Windows-игр на Linux с минимальной настройкой.

## В планах - [X] Адаптировать структуру проекта для поддержки инструментов сборки - [X] Добавить возможность управления с геймпада - [ ] Добавить возможность управления с тачскрина - [X] Добавить возможность управления с мыши и клавиатуры - [X] Добавить систему тем [Документация](documentation/theme_guide) - [X] Вынести все константы, такие как уровень закругления карточек, в темы (частично выполнено) - [X] Добавить метаданные для тем (скриншоты, описание, домашняя страница и автор) - [ ] Продумать систему вкладок вместо текущей - [ ] [Добавить сессию Gamescope, аналогичную той, что используется в SteamOS](https://git.linux-gaming.ru/Boria138/gamescope-session-portprotonqt) - [X] Разобраться почему теряется часть стилей в Gamescope - [ ] Разработать адаптивный дизайн (за эталон берётся Steam Deck с разрешением 1280×800) - [ ] Переделать скриншоты для соответствия [гайдлайнам Flathub](https://docs.flathub.org/docs/for-app-authors/metainfo-guidelines/quality-guidelines#screenshots) - [X] Получать описания и названия игр из базы данных Steam - [X] Получать обложки для игр из SteamGridDB или CDN Steam - [X] Оптимизировать работу со Steam API для ускорения времени запуска - [X] Улучшить функцию поиска в Steam API для исправления некорректного определения ID (например, Graven определялся как ENGRAVEN или GRAVENFALL, Spore — как SporeBound или Spore Valley) - [ ] Убрать логи Steam API в релизной версии, так как они замедляют выполнение кода - [X] Решить проблему с ограничением Steam API в 50 тысяч игр за один запрос (иногда нужные игры не попадают в выборку и остаются без обложки) - [X] Избавиться от вызовов yad - [X] Реализовать собственный механизм запрета ухода в спящий режим вместо использования механизма PortProton (оставлено для [PortProton 2.0](https://github.com/Castro-Fidel/PortProton_2.0)) - [X] Реализовать собственный системный трей вместо использования трея PortProton - [X] Добавить экранную клавиатуру в поиск (реализация собственной клавиатуры слишком затратна, поэтому используется встроенная в DE клавиатура: Maliit в KDE, gjs-osk в GNOME, Squeekboard в Phosh, клавиатура SteamOS и т.д.) - [X] Добавить сортировку карточек по различным критериям (доступны: по недавности, количеству наигранного времени, избранному или алфавиту) - [X] Добавить индикацию запуска приложения - [X] Достигнуть паритета функциональности с Ingame - [ ] Достигнуть паритета функциональности с PortProton - [X] Добавить возможность изменения названия, описания и обложки через файлы `.local/share/PortProtonQT/custom_data/exe_name/{desc,name,cover}` - [X] Добавить встроенное переопределение названия, описания и обложки, например, по пути `portprotonqt/custom_data` [Документация](documentation/metadata_override/) - [ ] Добавить переводы в переопределения - [ ] Придумать как переопределять launcher.exe - [X] Добавить в карточку игры сведения о поддержке геймпада - [X] Добавить в карточки данные с ProtonDB - [X] Добавить в карточки данные с AreWeAntiCheatYet - [X] Продублировать бейджи с карточки на страницу с деталями игры - [X] Добавить парсинг ярлыков из Steam - [X] Добавить парсинг ярлыков из EGS - [ ] Избавиться от бинарника legendary - [X] Добавить запуск игр из EGS - [ ] Добавить скачивание игр из EGS - [ ] Добавить поддержку запуска сторонних игр из EGS - [ ] Добавить авторизацию в EGS через WebView вместо ручного ввода - [X] Получать описания для игр из EGS через их [API](https://store-content.ak.epicgames.com/api) - [X] Получать slug через GraphQL [запрос](https://launcher.store.epicgames.com/graphql) - [X] Добавить на карточку бейдж, указывающий, что игра из Steam - [X] Добавить поддержку версий Steam для Flatpak и Snap - [X] Отображать данные о самом последнем пользователе Steam, а не первом попавшемся - [X] Исправить склонения в детальном выводе времени, например, не «3 часов назад», а «3 часа назад» - [X] Добавить перевод через gettext [Документация](documentation/localization_guide) - [X] Отображать описания игр и другие данные на языке системы - [X] Добавить недокументированные параметры конфигурации в GUI (time_detail_level, games_sort_method, games_display_filter) - [X] Добавить систему избранного для карточек - [X] Заменить все `print` на `logging` - [ ] Привести все логи к единому языку - [X] Уменьшить количество подстановок в переводах - [X] Стилизовать все элементы без стилей (QMessageBox, QSlider, QDialog) - [X] Убрать жёсткую привязку путей к стрелочкам QComboBox в `styles.py` - [X] Исправить частичное применение тем на лету - [X] Исправить наложение подписей скриншотов при первом перелистывании в полноэкранном режиме - [ ] Добавить поддержку GOG (?) - [X] Определиться с названием (PortProtonQt или PortProtonQT или вообще третий вариант) - [ ] Добавить данные с HowLongToBeat на страницу с деталями игры (?) - [X] Добавить виброотдачу на геймпаде при запуске игры - [X] Исправить некорректную работу слайдера увеличения размера карточек([Последствия регрессии после этого коммита](https://github.com/Boria138/PortProtonQt/commit/aebdd60b5537280f06a922ff80469cd4ab27bc63) - [X] Исправить баг с наложением карточек друг на друга при изменении фильтра отображения ([Последствия регрессии после этого коммита](https://github.com/Boria138/PortProtonQt/commit/aebdd60b5537280f06a922ff80469cd4ab27bc63)) - [X] Скопировать логику управления с D-pad на стрелки с клавиатуры - [ ] Доделать светлую тему - [ ] Добавить подсказки к управлению с геймпада - [ ] Добавить загрузку звуков в темы например для добавления звука запуска в тему и тд - [X] Добавить миниатюры к выбору файлов в диалоге добавления игры - [X] Добавить быстрый доступ к смонтированным дискам к выбору файлов в диалоге добавления игры ### Установка (devel) ```sh uv python install 3.10 uv sync source .venv/bin/activate ``` Запуск производится по команде portprotonqt ### Установка (release) Выберите подходящий пакет для вашей системы или AppImage. Запуск производится по команде portprotonqt или по ярлыку в меню ### Разработка В проект встроен линтер (ruff), статический анализатор (pyright) и проверка lock файла, если эти проверки не пройдут PR не будет принят, поэтому перед коммитом введите такую команду ```sh uv python install 3.10 uv sync --all-extras --dev source .venv/bin/activate pre-commit install ``` pre-commit сам запустится при коммите, если вы хотите запустить его вручную введите команду ```sh pre-commit run --all-files ``` ## Авторы * [Boria138](https://git.linux-gaming.ru/Boria138) - Основной разработчик * [BlackSnaker](https://git.linux-gaming.ru/BlackSnaker) - Автор идеи, а так же начальной реализации проекта * [Mikhail Tergoev (Castro-Fidel)](https://git.linux-gaming.ru/CastroFidel) - Автор оригинального проекта PortProton ### Контрибьюторы Мы благодарим всех, кто внёс вклад в развитие PortProtonQt, включая тех, кто участвует через коммиты, а также тех, кто помогает другими способами (тестирование, идеи, переводы, документация и т.д.). Полный список участников, можно найти в [списке активности репозитория](https://git.linux-gaming.ru/Boria138/PortProtonQt/activity/contributors). Дополнительные участники также перечислены в файле [CHANGELOG.md](CHANGELOG.md). Если вы внесли вклад, но не указаны, свяжитесь с основными разработчиками, чтобы мы могли вас отметить! ## Зависимости и лицензии PortProtonQt использует код и зависимости от следующих проектов: - [Legendary](https://github.com/derrod/legendary) — инструмент для работы с Epic Games Store, лицензия [GPL-3.0](https://www.gnu.org/licenses/gpl-3.0.html). - [Icoextract](https://github.com/jlu5/icoextract) — библиотека для извлечения иконок, лицензия [MIT](https://opensource.org/licenses/MIT). - [PortProton 2.0](https://git.linux-gaming.ru/CastroFidel/PortProton_2.0) — библиотека для взаимодействия с PortProton, лицензия [MIT](https://opensource.org/licenses/MIT). Полный текст лицензий см. в файлах [LICENSE](LICENSE), [LICENSE-icoextract](documentation/licenses/icoextract), [LICENSE-portproton](documentation/licenses/portproton), [LICENSE-legendary](documentation/licenses/legendary). > [!WARNING] > Проект находится на стадии WIP (work in progress) корректная работоспособность не гарантирована > [!WARNING] > **Будьте осторожны!** Если вы берёте тему не из официального репозитория или надёжного источника, убедитесь, что в её файле `styles.py` нет вредоносного или нежелательного кода. Поскольку `styles.py` — это обычный Python-файл, он может содержать любые инструкции. Всегда проверяйте содержимое чужих тем перед использованием.