<div align="center">
  <img src="https://raw.githubusercontent.com/Castro-Fidel/PortWINE/master/data_from_portwine/img/gui/portproton.svg" width="64">
  <h1 align="center">PortProtonQt</h1>
  <p align="center">Современный, удобный графический интерфейс, написанный с использованием PySide6(Qt6) и предназначенный для упрощения управления и запуска игр на различных платформах, включая PortProton, Steam и Epic Games Store.</p>
</div>

## В планах

- [X] Адаптировать структуру проекта для поддержки инструментов сборки
- [ ] Добавить возможность управление с геймпада
- [ ] Добавить возможность управление с тачскрина
- [X] Добавить возможность управление с мыши и клавиатуры
- [X] Добавить систему тем [Документация](documentation/theme_guide)
- [X] Вынести все константы такие как уровень закругления карточек в темы (Частично вынесено)
- [X] Добавить метадату для тем (скришоты, описание, домащняя страница и автор)
- [ ] Продумать систему вкладок вместо той что есть сейчас
- [ ] Добавить Gamescope сессию на подобие той что есть в SteamOS
- [ ] Написать адаптивный дизайн (За эталон берём SteamDeck с разрешением 1280х800)
- [X] Брать описание и названия игр с базы данных Steam
- [X] Брать обложки для игр со SteamGridDB или CDN Steam
- [X] Оптимизировать работу со SteamApi что бы ускорить время запуска
- [X] Улучшить функцию поиска SteamApi что бы исправить некорректное определение ID (Graven определается как ENGRAVEN или GRAVENFALL, Spore определается как SporeBound или Spore Valley)
- [ ] Убрать логи со SteamApi в релизной версии потому что логи замедляют код
- [X] Что-то придумать с ограничением SteamApi в 50 тысяч игр за один запрос (иногда туда не попадают нужные игры и остаются без обложки)
- [X] Избавится от любого вызова yad
- [X] Написать свою реализацию запрета ухода в сон, а не использовать ту что в PortProton (Оставим это [PortProton 2.0](https://github.com/Castro-Fidel/PortProton_2.0))
- [X] Написать свою реализацию трея, а не использовать ту что в PortProton
- [X] Добавить в поиск экранную клавиатуру (Реализовавывать собственную клавиатуру слишком затратно, лучше положится на встроенную в DE клавиатуру malit в 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/)
- [X] Добавить в карточку игры сведения о поддержке геймадов
- [X] Добавить в карточки данные с ProtonDB
- [X] Добавить в карточки данные с Are We Anti-Cheat Yet?
- [X] Продублировать бейджы с карточки на страницу с деталями игрыы
- [X] Добавить парсинг ярлыков со Steam
- [X] Добавить парсинг ярлыков с EGS
- [ ] Избавится от бинарника legendary
- [ ] Добавить запуск и скачивание игр с EGS
- [ ] Добавить авторизацию в EGS через WebView, а не вручную
- [X] Брать описания для игр с EGS из их [api](https://store-content.ak.epicgames.com/api)
- [X] Брать slug через Graphql [запрос](https://launcher.store.epicgames.com/graphql)
- [X] Добавить на карточку бейдж того что игра со стима
- [X] Добавить поддержку Flatpak и Snap версии Steam
- [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] Стилизовать все элементы без стилей(QMessageBox, QSlider, QDialog)
- [X] Убрать жёсткую привязку путей на стрелочки QComboBox в styles.py
- [X] Исправить частичное применение тем на лету
- [X] Исправить наложение подписей скриншотов при первом перелистывание в полноэкранном режиме
- [ ] Добавить GOG (?)
- [ ] Определится уже наконец с названием (PortProtonQt или PortProtonQT)

### Установка (debug)

```sh
uv python install 3.10
uv sync
source .venv/bin/activate
```

Запуск производится по команде 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://github.com/Boria138) - Программист
* [BlackSnaker](https://github.com/BlackSnaker) - Дизайнер - программист
* [Mikhail Tergoev(Castro-Fidel)](https://github.com/Castro-Fidel) - Автор оригинального проекта PortProton

> [!WARNING]
> Проект находится на стадии WIP (work in progress) корректная работоспособность не гарантирована


> [!WARNING]
> **Будьте осторожны!** Если вы берёте тему не из официального репозитория или надёжного источника, убедитесь, что в её файле `styles.py` нет вредоносного или нежелательного кода. Поскольку `styles.py` — это обычный Python-файл, он может содержать любые инструкции. Всегда проверяйте содержимое чужих тем перед использованием.
