Open The-Ducktor opened 1 year ago
I think this is a bit tricky to do. Spelling is not always the same, there are games, demos, dlcs, artwork and other things that have to match. I also think we need to consider priorities, what if a game is not installed, where should we install from? If it is installed from more than one store, where should we run it from? Should you get access to gog artwork if it is not available from epic? Not sure what kind of collisions and edgecases we get here. The Galaxy Client is doing this already so if we have a gog account in the mix we can tap into its data. In the future if more platforms are involved we might have to fallback to partial name matching though.
fair points i was thinking it could be a hierarchy of sorts. but i can see it would be hard to implement in terms of the different cover art and such.
I know there was some ideas and work for this. The first issue is matching the same game in different stores, the next issue is how to handle that in a non-confusing way for the end user.
For now, as a workaround, you can always hide the ones you don't want to show: right click > hide. And you can filter hidden games using the eye
icon at the top right of the library.
Game title matching isn't that reliable, sure we can calculate some sort of similarity score and match it on some high threshold.
Here are the options I suggest for this feature:
build custom server able to join game IDs from multiple stores (based on igdb and games metadata from APIs both public and those that don't need authorization), data could be automatically updated thanks to igdb's websockets
adapt GOG Galaxy account linking and implement library synchronization based completely on Galaxy's gamesdb
I'm personally more in favor of the first one, we could quickly solve bugs in data, add missing releases etc.. Also we want to avoid any privacy issues the second one may have (uploading owned games list to external service).
UI and UX of this is an after thought for now in my opinion
Ultimately, at bare minimum even if auto matching is too hard, it should be possible to simply select two or more library entries and click a button to combine them manually. That would work for a lot of people even if not automated. Of course first, that would require implementing a multi-select feature in the first place (which could also be used to bulk install, move, categorize, hide, etc.)
As for how to handle which store, if installed, simply open the installed version's store page and there could be a menu option at the top to switch to the other if needed for some reason. If not installed, throw up a dialog prompt asking the user to pick to enter the game details page, install, etc. with an option to "remember this choice"
Maybe the PC Gaming Wiki Availability list can be a good source? (Example: https://www.pcgamingwiki.com/wiki/Iratus:_Lord_of_the_Dead#Availability)
However, it might not be machine parseable.
However, it might not be machine parseable.
it doesn't provide us with given store's internal id at all
There is a plugin for playnite that does this. Could we duplicate its functionality?
There is a plugin for playnite that does this. Could we duplicate its functionality?
I doubt any of the functionality from playnite is reusable by heroic since most of the changes needed are tied to heroic's code.
The only thing that could be re-usable (maybe, I don't know that code) could be how to match games that are the same (we would need a big database with all games ids for each store and match them together).
It's not that this is hard to do, but it has to be coded and that database with ids to match is the most complicated part (it's not hard either, but somebody has to create it)
Twitch appears to have a games database with the relevant information machine-parseable:
Appears to require a Twitch client-id, and agreeing to a non-commercial licence. So, if built on this, this feature would be probably optional.
I think the relevant IGDB endpoint is:
https://api.igdb.com/v4/external_games
It uses a vaguely-SQL-inspired query language: a single query can contain multiple gameIDs in its filters, and can get (multiple) results as a table.
The rate limit is 4 qps -- so, you can't share/hardcode a single developer clientID; each user will have to get their own clientID. I don't expect this to be too surprising a requirement: several other programs for managing media collections (ebooks, music) require using per-user API keys, etc.
If we decide to make such a database in the future IGDB would be one source, a lot of things would need to be contributed manually, IGDB doesn't match all platforms we support/want to support. We'd call that API with some proxy that would have its own set of data.
Problem description
having to so that when you have a game on say fallout on gog and also having it on epic it would be nice it it was only one icon in the combined view
Feature description
combine together when you have the same game from deferent stores
Alternatives
No response
Additional information
No response