4 namespace GameHub
.Data
.Sources
.Steam
6 public class SteamGame
: Game
8 private bool? _is_for_linux
= null;
9 private int metadata_tries
= 0;
11 public SteamGame(Steam src
, Json
.Object json
)
14 id
= json
.get_int_member("appid").to_string();
15 name
= json
.get_string_member("name");
16 var icon_hash
= json
.get_string_member("img_icon_url");
17 icon
= @
"https://media.steampowered.com/steamcommunity/public/images/apps/$(id)/$(icon_hash).jpg";
18 image
= @
"https://cdn.akamai.steamstatic.com/steam/apps/$(id)/header.jpg";
20 if(GamesDB
.get_instance().is_game_unsupported(src
, id
))
22 _is_for_linux
= false;
26 public SteamGame
.from_db(Steam src
, Sqlite
.Statement stmt
)
29 id
= stmt
.column_text(1);
30 name
= stmt
.column_text(2);
31 icon
= stmt
.column_text(3);
32 image
= stmt
.column_text(4);
33 custom_info
= stmt
.column_text(5);
37 public override async
bool is_for_linux()
39 if(_is_for_linux
!= null) return _is_for_linux
;
43 print("[Steam app %s] Checking for linux compatibility [%d]...\n", id
, metadata_tries
);
45 var url
= @
"https://store.steampowered.com/api/appdetails?appids=$(id)";
46 var root
= yield Parser
.parse_remote_json_file_async(url
);
47 var platforms
= Parser
.json_object(root
, {id
, "data", "platforms"});
51 if(metadata_tries
> 2)
53 print("[Steam app %s] No data, %d tries failed, assuming no linux support\n", id
, metadata_tries
);
54 _is_for_linux
= false;
55 GamesDB
.get_instance().add_unsupported_game(source
, id
);
59 print("[Steam app %s] No data, sleeping for 2.5s\n", id
);
60 yield Utils
.sleep_async(2500);
61 return yield
is_for_linux();
64 _is_for_linux
= platforms
.get_boolean_member("linux");
66 if(_is_for_linux
== false) GamesDB
.get_instance().add_unsupported_game(source
, id
);
71 public override bool is_installed()
73 foreach(var dir
in Steam
.LibraryFolders
)
75 var acf
= FSUtils
.file(dir
, @
"appmanifest_$(id).acf");
76 if(acf
.query_exists())
85 public override async
void install(DownloadProgress progress
= (d
, t
) => {})
90 public override async
void run()
92 Utils
.open_uri(@
"steam://rungameid/$(id)");