Advertisement
Guest User

Untitled

a guest
Nov 16th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.86 KB | None | 0 0
  1. unit uGameManager;
  2.  
  3. interface
  4.  
  5. uses
  6.   System.Classes, System.SysUtils, System.Generics.Collections, ufrmMain, FMX.ListBox,
  7.   FMX.Devgear.HelperClass;
  8.  
  9. type
  10.   TGameInfo = record
  11.     name: string;
  12.     slug: string;
  13.     description: string;
  14.     game_url: string;
  15.     snapshot_url: string;
  16.     icon_url: string;
  17.     repository: string;
  18.     server_appid: string;
  19.     client_appid: string;
  20.     buildable: Boolean;
  21.     installation_paths: string;
  22.     target_framework: string;
  23.     public_branch_name: string;
  24.     public_branch_description: string;
  25.     preprocessor_symbol: string;
  26.     download_url: string;
  27.     url: string;
  28.     plugin_count: Integer;
  29.     extension_count: Integer;
  30.     product_count: Integer;
  31.     steam_branches: string; // UNKNOWN
  32.     latest_release_version: string;
  33.     latest_release_version_formatted: string;
  34.     latest_release_at: string;
  35.     latest_release_at_atom: string;
  36.     watchers: Integer;
  37.     watchers_shortened: string;
  38.     index: Integer;
  39.   end;
  40.  
  41.   TGameManager = class
  42.   public
  43.     procedure CreateList;
  44.     procedure FreeList;
  45.     procedure FetchGames;
  46.   end;
  47.  
  48.   TFetchGamesList = class(TThread)
  49.   protected
  50.     procedure Execute; override;
  51.   end;
  52.  
  53. var
  54.   gamelist: TList<TGameInfo>;
  55.   gamemanager: TGameManager;
  56.  
  57. implementation
  58.  
  59. uses
  60.   IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
  61.   IdSSLOpenSSL, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL, Math,
  62.   djson;
  63.  
  64. { TPluginManager }
  65.  
  66. procedure TGameManager.CreateList;
  67. begin
  68.   if gamelist = nil then
  69.     gamelist := TList<TGameInfo>.Create;
  70. end;
  71.  
  72. procedure TGameManager.FetchGames;
  73. begin
  74.   with TFetchGamesList.Create do
  75.     FreeOnTerminate := True;
  76. end;
  77.  
  78. procedure TGameManager.FreeList;
  79. begin
  80.   if gamelist <> nil then
  81.     gamelist.Free;
  82. end;
  83.  
  84. { TFetchGamesList }
  85.  
  86. procedure TFetchGamesList.Execute;
  87. var
  88.   jdata, jgame: TdJSON;
  89.   http: TIdHTTP;
  90.   ssl: TIdSSLIOHandlerSocketOpenSSL;
  91.   game: TGameInfo;
  92. begin
  93.   gamelist.Clear;
  94.   Synchronize(
  95.     procedure
  96.     begin
  97.       frmMain.frmLoading.StartLoadingAnimation;
  98.       frmMain.cbbGame.Items.Clear;
  99.       frmMain.cbbGame.Items.Add('All');
  100.     end);
  101.   http := TIdHTTP.Create(nil);
  102.   try
  103.     http.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0';
  104.     http.HandleRedirects := True;
  105.  
  106.     ssl := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  107.     try
  108.       ssl.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
  109.       http.IOHandler := ssl;
  110.  
  111.       jdata := TdJSON.Parse(http.Get('https://umod.org/games.json'));
  112.       try
  113.         for jgame in jdata do
  114.         begin
  115.           with game do
  116.           begin
  117.             name := jgame['name'].AsString;
  118.             slug := jgame['slug'].AsString;
  119.             description := jgame['description'].AsString;
  120.             game_url := jgame['game_url'].AsString;
  121.             snapshot_url := jgame['snapshot_url'].AsString;
  122.             icon_url := jgame['icon_url'].AsString;
  123.             repository := jgame['repository'].AsString;
  124.             server_appid := jgame['server_appid'].AsString;
  125.             client_appid := jgame['client_appid'].AsString;
  126.             buildable := jgame['buildable'].AsBoolean;
  127.             installation_paths := jgame['installation_paths'].AsString;
  128.             target_framework := jgame['target_framework'].AsString;
  129.             public_branch_name := jgame['public_branch_name'].AsString;
  130.             public_branch_description := jgame['public_branch_description'].AsString;
  131.             preprocessor_symbol := jgame['preprocessor_symbol'].AsString;
  132.             download_url := jgame['download_url'].AsString;
  133.             url := jgame['url'].AsString;
  134.             plugin_count := jgame['plugin_count'].AsInteger;
  135.             extension_count := jgame['extension_count'].AsInteger;
  136.             product_count := jgame['product_count'].AsInteger;
  137.             // steam_branches := jgame['steam_branches'].AsString;
  138.             latest_release_version := jgame['latest_release_version'].AsString;
  139.             latest_release_version_formatted := jgame['latest_release_version_formatted'].AsString;
  140.             latest_release_at := jgame['latest_release_at'].AsString;
  141.             latest_release_at_atom := jgame['latest_release_at_atom'].AsString;
  142.             watchers := jgame['watchers'].AsInteger;
  143.             watchers_shortened := jgame['watchers_shortened'].AsString;
  144.           end;
  145.  
  146.           gamelist.Add(game);
  147.  
  148.           Synchronize(
  149.             procedure
  150.             begin
  151.               frmMain.cbbGame.Items.Add(game.name);
  152.             end);
  153.         end;
  154.       finally
  155.         jdata.Free;
  156.       end;
  157.     finally
  158.       ssl.Free;
  159.     end;
  160.   finally
  161.     http.Free;
  162.   end;
  163.  
  164.   Synchronize(
  165.     procedure
  166.     begin
  167.      // frmMain.cbbGame.ItemIndex := 0;
  168.       frmMain.frmLoading.StopLoadingAnimation;
  169.     end);
  170. end;
  171.  
  172. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement