80 lines
1.6 KiB
ObjectPascal
80 lines
1.6 KiB
ObjectPascal
unit Persist.GameList;
|
|
|
|
interface
|
|
uses
|
|
Game.List;
|
|
|
|
|
|
type
|
|
TGameListPersist = class(TObject)
|
|
public
|
|
class procedure Load(const AFileName: string; AList: TGameList);
|
|
class procedure Save(const AFileName: string; AList: TGameList);
|
|
end;
|
|
|
|
|
|
implementation
|
|
uses
|
|
System.IOUtils,
|
|
System.SysUtils,
|
|
|
|
superobject,
|
|
|
|
Game.Base,
|
|
Game.Registry;
|
|
|
|
|
|
const
|
|
KeyClassName = 'className';
|
|
KeyLocation = 'location';
|
|
|
|
|
|
{ TGameListPersist }
|
|
class procedure TGameListPersist.Load(const AFileName: string; AList: TGameList);
|
|
var
|
|
inputList: ISuperObject;
|
|
inputGame: ISuperObject;
|
|
gameClass: TCustomGameClass;
|
|
|
|
begin
|
|
if not FileExists(AFileName) then
|
|
exit;
|
|
|
|
inputList := SO(TFile.ReadAllText(AFileName));
|
|
if Assigned(inputList) then
|
|
begin
|
|
for inputGame in inputList do
|
|
begin
|
|
gameClass := TGameRegistry.ByClassName(inputGame.S[KeyClassName]);
|
|
if Assigned(gameClass) then
|
|
AList.Add(gameClass.Create(inputGame.S[KeyLocation]));
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
class procedure TGameListPersist.Save(const AFileName: string; AList: TGameList);
|
|
var
|
|
outputList: ISuperObject;
|
|
outputGame: ISuperObject;
|
|
game: TCustomGame;
|
|
|
|
begin
|
|
outputList := SA([]);
|
|
|
|
for game in AList do
|
|
begin
|
|
outputGame := SO();
|
|
outputGame.S[KeyClassName] := game.ClassName;
|
|
outputGame.S[KeyLocation] := game.Location;
|
|
// outputGame.B['active'] := True;
|
|
|
|
outputList.AsArray.Add(outputGame);
|
|
end;
|
|
|
|
if ForceDirectories(ExtractFilePath(AFileName)) then
|
|
TFile.WriteAllText(AFileName, outputList.AsJSon(True));
|
|
end;
|
|
|
|
end.
|