Castro-Fidel / PortWINE

MIT License
488 stars 35 forks source link

Переписал скрипт скачивания обложек для steam #417

Open alex2844 opened 3 weeks ago

alex2844 commented 3 weeks ago

Полностью переписан скрипт отвечающий за скачивание обложек и вынесен Теперь в приоритете обложки из сайта Steam, а уже если там не будет обложек, то из SteamGridDBId В steam_scripts/*.sh теперь добавляется AppId, чтоб не пришлось парсить shortcuts.vdf

Htylol commented 3 weeks ago

@alex2844. Доброй ночи. Несколько вопросов по пр. Зачем нужно было создавать ещё отдельный файл, когда и так уже вынесено в один отдельный (можно было просто в нём (в одном файле) оставить комментарий что к чему соотносится и всё). И второй, зачем парсить Steam, когда уже есть SteamGridDBId. В чём бонус и есть ли смысл?))

alex2844 commented 3 weeks ago

Были игры к которым обложки не подтягивались, оказалось не для всех игр есть обложки в steamgriddb А были случаи что не верные обложки грузились

А отдельный скрипт, для того чтоб если что можно было скрипт по загрузке обложек вызвать напрямую, например если не верное имя игры будет использоваться для поиска

Сейчас поищу в истории браузера названия этих игр

alex2844 commented 3 weeks ago

Нашел, вот например у этой нет никаких обложек https://www.steamgriddb.com/game/5442320 Но в steam обложки есть

As dusk falls - у этой игры насколько помню исполняемый файл dusk.exe И грузились вроде вот эти обложки https://www.steamgriddb.com/game/13790

alex2844 commented 1 week ago

@Htylol обновил теперь как вы и хотели все в 1 файле а так же по умолчанию используется steamgriddb - но с правильным соотношением сторон, а steam используется только если в steamgriddb не найдет обложек помимо этого добавил проверку на наличие игры в стиме в текущем аккаунте, для того чтоб игра не дублировалась при редактировании ярлыка

Castro-Fidel commented 1 week ago

Отлично. Приму при следующем обновлении скриптов (сегодня-завтра)

У меня к тебе вопрос. Можешь реализовать функционал такого типа: Имея только SteamGameID, надо как то получить название .exe файла игры. Как считаешь, возможно?

alex2844 commented 1 week ago

@Castro-Fidel да, возможно ок, вечером сделаю

alex2844 commented 1 week ago

@Castro-Fidel готово getAppTarget ${AppId}

Htylol commented 1 week ago

@alex2844 это получается, он парсит то что нужен чтобы в системе был steam и в нём чтобы была установлена или добавлена игра?

Htylol commented 1 week ago

@Castro-Fidel Так то по идее по названию .exe файла нужно находить SteamGameID, чтобы SteamGameID можно было экспортировать, чтобы работали разного рода фиксы и хуки в proton. Хотя может Фиделю для другого нужно, по SteamGameID находить .exe файл))

alex2844 commented 1 week ago

чтобы была установлена или добавлена игра?

добавлена как non-steam, хотя сейчас добавлю и чтоб установленные тоже можно было получить

по названию .exe файла нужно находить SteamGameID

сначала думал что под SteamGameID имеется в виду AppId - (под каким id добалена игра в steam), но судя по всему имеется в виду SteamAppId ок, сейчас сделаю

Имея только SteamGameID, надо как то получить название .exe файла игры. Как считаешь, возможно?

тут тоже имеется в виду SteamAppId? по которому получить путь к exe файлу впринципе такую функцию тоже можно сделать, но для этого тянуть манифест от ludusavi, и распарсить надо будет


На случай если подумали что я навыдумывал всякие AppId и тд, то нет https://raw.githubusercontent.com/ValveSoftware/Proton/master/proton AppId, SteamAppId, SteamGameId и SteamOverlayGameId

Если посмотреть на переменные при запуске игры, то AppId - id которое получается перед добавлением в shortcuts.vdf SteamAppId - будет 0, т.к. добавлен не из магазина стима, а так тут id из магазина SteamGameId - id игры, этот же id используется для steam://rungameid/${SteamGameId}

# AppId=4180723417
# SteamAppId=0
# SteamGameId=17956070349669924864
# SteamOverlayGameId=17956070349669924864
alex2844 commented 1 week ago
./yq_linux_amd64 e '. | tojson' manifest.yaml > manifest.json # https://raw.githubusercontent.com/mtkennerly/ludusavi-manifest/master/data/manifest.yaml

name='Shadow of the Tomb Raider'
jq -r --arg name "${name}" '(getpath([$name]) | .alias) as $alias | if $alias then getpath([$alias]) else getpath([$name]) end | .launch' manifest.json

SteamAppId=750920
jq -r --arg id "${SteamAppId}" 'to_entries[] | select(.value.steam?.id == ($id | tonumber)) | .value.launch' manifest.json
{
  "<base>/SOTTR.exe": [
    {
      "when": [
        {
          "bit": 64,
          "os": "windows",
          "store": "steam"
        }
      ]
    }
  ],
  "<base>/Shadow of the Tomb Raider.app": [
    {
      "when": [
        {
          "os": "mac",
          "store": "steam"
        }
      ]
    }
  ],
  "<base>/ShadowOfTheTombRaider.sh": [
    {
      "when": [
        {
          "bit": 64,
          "os": "linux",
          "store": "steam"
        }
      ]
    }
  ]
}

в принципе можно было бы наверное добавить... не знаю... но либо yq придется добавить в data/tmp/plugins_v17/portable/bin/ либо предварительно конвертировать из yaml в json