mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-08 07:21:34 +02:00
233 lines
5.8 KiB
ObjectPascal
233 lines
5.8 KiB
ObjectPascal
unit MonitorCfg;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
sysutils, strutils, contnrs, dom, xmlread;
|
|
|
|
type
|
|
TServerType = (stFtp, stHttp);
|
|
|
|
TServer = class;
|
|
TFile = class;
|
|
|
|
TReplaceStringEvent = function (const value: string):string of object;
|
|
|
|
{ TMonitorConfig }
|
|
|
|
TMonitorConfig = class
|
|
private
|
|
FFileName: string;
|
|
FFPCDevelVersion: string;
|
|
FFPCFixesVersion: string;
|
|
FFPCReleaseVersion: string;
|
|
FLazVersion: string;
|
|
FServers: TFPObjectList;
|
|
function GetServer(index: integer): TServer;
|
|
function GetServerCount: integer;
|
|
procedure AddServer(const ServerNode: TDOMNode);
|
|
procedure ReadVersions(const VersionNode: TDOMNode);
|
|
function ServerReplaceString(const value: string): string;
|
|
public
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
procedure Load(const AFileName: string);
|
|
procedure AddServer(AServer: TServer);
|
|
property FileName: string read FFileName write FFileName;
|
|
property LazVersion: string read FLazVersion;
|
|
property FPCReleaseVersion: string read FFPCReleaseVersion;
|
|
property FPCFixesVersion: string read FFPCFixesVersion;
|
|
property FPCDevelVersion: string read FFPCDevelVersion;
|
|
property Servers[index: integer] : TServer read GetServer;
|
|
property ServerCount: integer read GetServerCount;
|
|
end;
|
|
|
|
{ TServer }
|
|
|
|
TServer = class
|
|
private
|
|
FFiles: TFPObjectList;
|
|
FDescription: string;
|
|
FOnReplaceString: TReplaceStringEvent;
|
|
FServerType: TServerType;
|
|
function GetFile(index: integer): TFile;
|
|
function GetFileCount: integer;
|
|
procedure AddFile(const ServerNode: TDOMNode);
|
|
public
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
procedure AddFile(AFile: TFile);
|
|
property Description : string read FDescription write FDescription;
|
|
property ServerType : TServerType read FServerType write FServerType;
|
|
property Files[index: integer] : TFile read GetFile;
|
|
property FileCount: integer read GetFileCount;
|
|
property OnReplaceString: TReplaceStringEvent read FOnReplaceString write FOnReplaceString;
|
|
end;
|
|
|
|
{ TFile }
|
|
|
|
TFile = class
|
|
private
|
|
FDescription: string;
|
|
FMask: string;
|
|
FUpdated: boolean;
|
|
public
|
|
constructor Create;
|
|
property Mask: string read FMask write FMask;
|
|
property Description: string read FDescription write FDescription;
|
|
property Updated: boolean read FUpdated write FUpdated;
|
|
end;
|
|
|
|
implementation
|
|
|
|
function GetAttributeValue(const ANode: TDomNode; const AName: string): string;
|
|
var
|
|
Attribute: TDOMNode;
|
|
begin
|
|
Attribute := ANode.Attributes.GetNamedItem(AName);
|
|
if assigned(Attribute) then
|
|
Result := Attribute.NodeValue;
|
|
end;
|
|
|
|
{ TServer }
|
|
|
|
function TServer.GetFile(index: integer): TFile;
|
|
begin
|
|
Result := TFile(FFiles[index]);
|
|
end;
|
|
|
|
function TServer.GetFileCount: integer;
|
|
begin
|
|
Result := FFiles.Count;
|
|
end;
|
|
|
|
procedure TServer.AddFile(const ServerNode: TDOMNode);
|
|
var
|
|
NewFile: TFile;
|
|
begin
|
|
NewFile := TFile.Create;
|
|
NewFile.Description := OnReplaceString(GetAttributeValue(ServerNode, 'Description'));
|
|
NewFile.Mask := OnReplaceString(GetAttributeValue(ServerNode, 'Mask'));
|
|
NewFile.Updated := StrToBoolDef(GetAttributeValue(ServerNode, 'Updated'), true);
|
|
AddFile(NewFile);
|
|
end;
|
|
|
|
constructor TServer.Create;
|
|
begin
|
|
FFiles := TFPObjectList.Create;
|
|
end;
|
|
|
|
destructor TServer.Destroy;
|
|
begin
|
|
FFiles.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TServer.AddFile(AFile: TFile);
|
|
begin
|
|
FFiles.Add(AFile);
|
|
end;
|
|
|
|
{ TFile }
|
|
|
|
constructor TFile.Create;
|
|
begin
|
|
end;
|
|
|
|
{ TMonitorConfig }
|
|
|
|
function TMonitorConfig.GetServer(index: integer): TServer;
|
|
begin
|
|
Result := TServer(FServers[index]);
|
|
end;
|
|
|
|
function TMonitorConfig.GetServerCount: integer;
|
|
begin
|
|
Result := FServers.Count;
|
|
end;
|
|
|
|
procedure TMonitorConfig.AddServer(const ServerNode: TDOMNode);
|
|
var
|
|
Server: TServer;
|
|
Attribute: TDOMNode;
|
|
Node: TDomNode;
|
|
begin
|
|
Server := TServer.Create;
|
|
Server.OnReplaceString := @ServerReplaceString;
|
|
Attribute := ServerNode.Attributes.GetNamedItem('Name');
|
|
if assigned(Attribute) then
|
|
Server.Description := Attribute.NodeValue;
|
|
Attribute := ServerNode.Attributes.GetNamedItem('Type');
|
|
if assigned(Attribute) then
|
|
if Attribute.NodeValue='ftp' then
|
|
Server.ServerType := stFtp
|
|
else if Attribute.NodeValue='http' then
|
|
Server.ServerType := stHttp;
|
|
Node := ServerNode.FirstChild;
|
|
while Node<>nil do begin
|
|
if Node.NodeName='File' then
|
|
Server.AddFile(Node);
|
|
Node := Node.NextSibling;
|
|
end;
|
|
AddServer(Server);
|
|
end;
|
|
|
|
procedure TMonitorConfig.ReadVersions(const VersionNode: TDOMNode);
|
|
begin
|
|
FLazVersion := GetAttributeValue(VersionNode, 'Lazarus');
|
|
FFPCReleaseVersion := GetAttributeValue(VersionNode, 'FPC_Release');
|
|
FFPCFixesVersion := GetAttributeValue(VersionNode, 'FPC_Fixes');
|
|
FFPCDevelVersion := GetAttributeValue(VersionNode, 'FPC_Devel');
|
|
end;
|
|
|
|
function TMonitorConfig.ServerReplaceString(const value: string): string;
|
|
begin
|
|
Result := AnsiReplaceStr(Value, '$LAZVER', LazVersion);
|
|
Result := AnsiReplaceStr(Result, '$FPCRELEASEVER', FPCReleaseVersion);
|
|
Result := AnsiReplaceStr(Result, '$FPCFIXESVER', FPCFixesVersion);
|
|
Result := AnsiReplaceStr(Result, '$FPCDEVELVER', FPCDevelVersion);
|
|
end;
|
|
|
|
constructor TMonitorConfig.Create;
|
|
begin
|
|
FServers := TFPObjectList.Create;
|
|
end;
|
|
|
|
destructor TMonitorConfig.Destroy;
|
|
begin
|
|
FServers.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TMonitorConfig.Load(const AFileName: string);
|
|
var
|
|
XmlDoc: TXMLDocument;
|
|
Node: TDomNode;
|
|
begin
|
|
FFileName := AFileName;
|
|
XmlDoc := nil;
|
|
try
|
|
ReadXMLFile(XmlDoc, FileName);
|
|
Node := XmlDoc.DocumentElement.FirstChild;
|
|
while Node<>nil do begin
|
|
if Node.NodeName='Server' then
|
|
AddServer(Node)
|
|
else if Node.NodeName='Version' then
|
|
ReadVersions(Node);
|
|
Node := Node.NextSibling;
|
|
end;
|
|
finally
|
|
XmlDoc.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TMonitorConfig.AddServer(AServer: TServer);
|
|
begin
|
|
FServers.Add(AServer);
|
|
end;
|
|
|
|
end.
|
|
|