Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit uGameManager;
- interface
- uses
- System.Classes, System.SysUtils, System.Generics.Collections, ufrmMain, FMX.ListBox,
- FMX.Devgear.HelperClass;
- type
- TGameInfo = record
- name: string;
- slug: string;
- description: string;
- game_url: string;
- snapshot_url: string;
- icon_url: string;
- repository: string;
- server_appid: string;
- client_appid: string;
- buildable: Boolean;
- installation_paths: string;
- target_framework: string;
- public_branch_name: string;
- public_branch_description: string;
- preprocessor_symbol: string;
- download_url: string;
- url: string;
- plugin_count: Integer;
- extension_count: Integer;
- product_count: Integer;
- steam_branches: string; // UNKNOWN
- latest_release_version: string;
- latest_release_version_formatted: string;
- latest_release_at: string;
- latest_release_at_atom: string;
- watchers: Integer;
- watchers_shortened: string;
- index: Integer;
- end;
- TGameManager = class
- public
- procedure CreateList;
- procedure FreeList;
- procedure FetchGames;
- end;
- TFetchGamesList = class(TThread)
- protected
- procedure Execute; override;
- end;
- var
- gamelist: TList<TGameInfo>;
- gamemanager: TGameManager;
- implementation
- uses
- IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
- IdSSLOpenSSL, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL, Math,
- djson;
- { TPluginManager }
- procedure TGameManager.CreateList;
- begin
- if gamelist = nil then
- gamelist := TList<TGameInfo>.Create;
- end;
- procedure TGameManager.FetchGames;
- begin
- with TFetchGamesList.Create do
- FreeOnTerminate := True;
- end;
- procedure TGameManager.FreeList;
- begin
- if gamelist <> nil then
- gamelist.Free;
- end;
- { TFetchGamesList }
- procedure TFetchGamesList.Execute;
- var
- jdata, jgame: TdJSON;
- http: TIdHTTP;
- ssl: TIdSSLIOHandlerSocketOpenSSL;
- game: TGameInfo;
- begin
- gamelist.Clear;
- Synchronize(
- procedure
- begin
- frmMain.frmLoading.StartLoadingAnimation;
- frmMain.cbbGame.Items.Clear;
- frmMain.cbbGame.Items.Add('All');
- end);
- http := TIdHTTP.Create(nil);
- try
- http.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0';
- http.HandleRedirects := True;
- ssl := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
- try
- ssl.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
- http.IOHandler := ssl;
- jdata := TdJSON.Parse(http.Get('https://umod.org/games.json'));
- try
- for jgame in jdata do
- begin
- with game do
- begin
- name := jgame['name'].AsString;
- slug := jgame['slug'].AsString;
- description := jgame['description'].AsString;
- game_url := jgame['game_url'].AsString;
- snapshot_url := jgame['snapshot_url'].AsString;
- icon_url := jgame['icon_url'].AsString;
- repository := jgame['repository'].AsString;
- server_appid := jgame['server_appid'].AsString;
- client_appid := jgame['client_appid'].AsString;
- buildable := jgame['buildable'].AsBoolean;
- installation_paths := jgame['installation_paths'].AsString;
- target_framework := jgame['target_framework'].AsString;
- public_branch_name := jgame['public_branch_name'].AsString;
- public_branch_description := jgame['public_branch_description'].AsString;
- preprocessor_symbol := jgame['preprocessor_symbol'].AsString;
- download_url := jgame['download_url'].AsString;
- url := jgame['url'].AsString;
- plugin_count := jgame['plugin_count'].AsInteger;
- extension_count := jgame['extension_count'].AsInteger;
- product_count := jgame['product_count'].AsInteger;
- // steam_branches := jgame['steam_branches'].AsString;
- latest_release_version := jgame['latest_release_version'].AsString;
- latest_release_version_formatted := jgame['latest_release_version_formatted'].AsString;
- latest_release_at := jgame['latest_release_at'].AsString;
- latest_release_at_atom := jgame['latest_release_at_atom'].AsString;
- watchers := jgame['watchers'].AsInteger;
- watchers_shortened := jgame['watchers_shortened'].AsString;
- end;
- gamelist.Add(game);
- Synchronize(
- procedure
- begin
- frmMain.cbbGame.Items.Add(game.name);
- end);
- end;
- finally
- jdata.Free;
- end;
- finally
- ssl.Free;
- end;
- finally
- http.Free;
- end;
- Synchronize(
- procedure
- begin
- // frmMain.cbbGame.ItemIndex := 0;
- frmMain.frmLoading.StopLoadingAnimation;
- end);
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement