website
website copied to clipboard
Let normal users add links via suggestions page
Links to pcgamingwiki, wikipedia, wine appdb etc. The options locked behind the admin site.
These: https://github.com/lutris/website/blob/master/games/models.py#L843
Maybe at least automatically generate the SteamDB and ProtonDB links for games that are available on Steam, as they all use the same APPID.
Apparently, Lutris does not load cover image if igdb is not linked.
https://lutris.net/games/heroes-of-might-and-magic-iii/ https://www.igdb.com/games/heroes-of-might-and-magic-iii-complete
@belkka I have merged heroes-of-might-and-magic-iii and heroes-of-might-and-magic-iii-complete so now the cover is available
@strycore thanks. What is the appropriate way report this kind of things? E. g. if I see that game could be linked to igdb, should I:
- create a GItHub issue? Or maybe write a comment to this one, until it's closed.
- press "suggest changes" at lutris.net and give a link in the "reason" field without changing any other fields? There is a warning that my account could be disabled if I abuse that form for reporting bugs, but it's not completely clear to me what exactly is considered "reporting bugs"
- write an email (what is the dedicated address?)
BTW, this game could be linked to igdb (same steamid): https://lutris.net/games/cossacks-art-of-war/ https://www.igdb.com/games/cossacks-the-art-of-war
@belkka we regularly sync with IGDB so we have every game that is on IGDB on the Lutris website. Sometimes, the names vary a little (like HOMM3 vs HOMM3 Complete), we can then merge pages together.
For Cossacks, it doesn't seem like this game was pulled from the sync so I'll have to inspect what went wrong here.
We also need something to let users submit merge requests for game pages as it's currently done manually via an admin dashboard.
merge pages together
I'm not sure I understand the meaning of "merge". From the lutris.net visitors' perspective there was no separate page for HOMM3 Complete from IGDB which one could request to "merge" with HOMM3 — it was only one HOMM3 visible if you search lutris.net/games by name. Thus, for site visitors it is only meaningful to "suggest links", as described in original issue.
For Cossacks, it doesn't seem like this game was pulled from the sync so I'll have to inspect what went wrong here
My assumption was that it's because the game is an expansion (category ≠ 0). I was investigating source code and noticed this: https://github.com/lutris/website/blob/54565d77c49d50daf92468cf842060b4dc67e8df/providers/tasks/igdb.py#L106
Apart from that, igdb and lutris slugs are different (note "the" before "art").
BTW, as I understand match_igdb_games() only matches igdb and lutris games by slug. It may be useful to also check steam id, i.e. if (igdb -> steamid == lutris -> steamid) then merge(lutris, igdb) (an idea for another feature request). I've not completely investigated sync lifecycle though and not sure how to deal with anomalies
You're right about why Cossacks isn't showing up. We only sync full games for now. But maybe we should at least sync DLC / extensions as well (we were syncing everything at first but it resulted in a lot of unwanted entries)
Now it's important to understand how the URLs in the sidebar work. We have both user provided URLs (Github, Wikipedia, WineHQ, or any URLs that can't be guessed from an ID). Then we have providers which are GOG, Steam, MAME, IGDB, .... We sync provider games from their original source, then match provider games to lutris games, creating them if necessary. Once a Lutris game has Provider Games, we can deduct some URLs from the provider game's ID. The Steam ID will allow to build links to ProtonDB, the Steam store, IGDB will allow building a link to... IGDB.
Merging 2 games in Lutris is done by taking 2 different Lutris games and filling the missing info of game A from game B, creating an alias with the slug of game B on game A then deleting game B. So if we have a game created by a Steam sync and another game created by an IGDB sync and they weren't matched, merging them will create a game with the Steam banner, the IGDB cover and all installers/screenshots/users for both games. Entering the URL of game B will do a redirect to game A, for example https://lutris.net/games/quake-2 redirects to https://lutris.net/games/quake-ii/
I have a bunch of games from itch.io that are popular on the platform and prequels to popular Steam games now. However, those prequels aren't sold on Steam. Is it possible to upload cover art for them?
I have pulled all the screenshots and cover art from their respective official websites.
We only sync full games for now
It worth noting that "cossacks the art of war" is rather a standalone expansion. It's installed as a separate game and does not require owning the original one (neither it includes the content from the "base" game), so it feels pretty "full". The steam page shows it a standalone game, not a "dlc" (I suppose steam has no these detailed categories from IGDB; also, steam DLC are sometimes called "expansions" themself).
There are 3 igdb categories mentioning "expansion" ("expansion": 2, "standalone_expansion": 4 and "expanded_game": 10):
https://github.com/lutris/website/blob/54565d77c49d50daf92468cf842060b4dc67e8df/providers/tasks/igdb.py#L25-L39
remove_dlcs_from_games() in tasks/igdb.py removes expansions of category 2 while keeping categories 4, 10 just like category 0 (main game):
https://github.com/lutris/website/blob/54565d77c49d50daf92468cf842060b4dc67e8df/providers/tasks/igdb.py#L287
I've logged in to igdb via twitch to press "edit game" and see that "cossacks the art of war" have category 2 (expansion). Do you think it's reasonable to make an edit at igdb suggesting that it should be category 4 (standalone expansion) instead?
Apparently, manipulating data in other services (igdb in particular) may be a work-around solution to indirectly add missing data on lutris.net... It may be worth mentioning somewhere at lutris.net, so that people can go edit IGDB or something else
This becomes more off topic, so I'm writing a separate comment (move to a new issue?)...
@strycore
But maybe we should at least sync DLC / extensions as well (we were syncing everything at first but it resulted in a lot of unwanted entries)
According to what I've managed to understand from the code:
- Lutris fetches games of all categories from IGDB in load_igdb_games() and saves them as
ProviderGame. - Lutris iterates over unlinked
ProviderGame-s of category 0 in match_igdb_games() and links them with lutrisGame-s ensuring thatigdb_game.igdb_slugequalslutris_game.slug. LutrisGamewith corresponding slug is created if missing.
current behavior can be described in this pseudcode:
igdb_game: ProviderGame = fetch_game_from_igdb()
if igdb_game.category == 0:
lutris_game = get_or_create(Game, slug=igdb_game.slug) # create non-existing
link(lutris_game, igdb_game)
else:
# keep lutris game and igdb game unlinked even if both DO exist
pass
- First of all, indeed, it may be worth considering more categories than just "0" (main game). I think people are interested in anything that can be installed as standalone game with lutris installation script (in particular any steam game that is not a DLC). BTW, "HOMM3: complete" has category "bunde" at igdb.
- Looks like Lutris anyway keeps "hidden" IGDB records of all igdb categories. Why not just give them a chance to be linked to existing Lutris games? If there already exists a lutris page for some standalone expansion and related igdb metadata is already stored in lutris DB, there is no reasons to keep them unlinked. I suggest that current behavior is changed to something like:
igdb_game: ProviderGame = fetch_game_from_igdb()
try:
lutris_game = get(Game, slug=igdb_game.slug) # existing lutris game
except GameDoesNotExist:
if carefully_consider_if_its_worth_to_create_new_lutris_game_from(igdb_game):
lutris_game = create(Game, slug=igdb_game.slug)
else:
skip # do not want to pollute DB with unwanted entries
# if not skipped:
link(lutris_game, igdb_game)
where
def carefully_consider_if_its_worth_to_create_new_lutris_game_from(igdb_game):
# implementation is subject for another discussion, stick with current behavior for now
reasonable_igdb_categories = (0,)
return igdb_game.category in reasonable_igdb_categories
I could try to contribute if the idea is approved. I also have some thoughts on improvements of "matching" algorithm (e. g. automatically finding lutris_games and igdb_games that have common steamid/gogid even if their slug is different), so maybe I can suggest something reasonable after I dive into code and understand the current state of things better. In the long run, this should reduce the amount of moderation required.