Heroic-Games-Launcher / HeroicGamesLauncher

A games launcher for GOG, Amazon and Epic Games for Linux, Windows and macOS.
https://heroicgameslauncher.com
GNU General Public License v3.0
7.9k stars 417 forks source link

Don't show duplicate of games if have same in different stores #3010

Open The-Ducktor opened 1 year ago

The-Ducktor commented 1 year ago

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

Lariaa commented 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.

The-Ducktor commented 1 year ago

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.

arielj commented 12 months ago

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.

imLinguin commented 12 months ago

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:

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

bgiesing commented 8 months ago

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"

harinath commented 6 months ago

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.

imLinguin commented 6 months ago

However, it might not be machine parseable.

it doesn't provide us with given store's internal id at all

Legion-is-life commented 4 months ago

There is a plugin for playnite that does this. Could we duplicate its functionality?

arielj commented 4 months ago

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)

harinath commented 4 months ago

Twitch appears to have a games database with the relevant information machine-parseable:

https://api-docs.igdb.com/

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.

harinath commented 4 months ago

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.

imLinguin commented 4 months ago

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.