⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 analyse.pas

📁 AutoUpdate 自动更新系统
💻 PAS
字号:
unit Analyse;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, Transfer, XMLIntf;

type
  TOnAnalyse = procedure (Sender: TObject; Count, Current: Integer) of object;
  TAnalyse = class(TPersistent)
  private
    FOnAnalyse: TOnAnalyse;
    FTransfer: TTransfer;
    FUpdateList: string;
  public
    destructor Destroy; override;
    function GetUpdateList: TStrings; virtual; abstract;
    property Transfer: TTransfer read FTransfer write FTransfer;
    property UpdateList: string read FUpdateList write FUpdateList;
  published
    property OnAnalyse: TOnAnalyse read FOnAnalyse write FOnAnalyse;
  end;
  
  TXMLAnalyse = class(TAnalyse)
  private
    function Analyse(Stream: TStream): TStrings;
  public
    function GetUpdateList: TStrings; override;
  end;
  

implementation

uses
  IdUri, XMLDoc, Update;
{
********************************* TXMLAnalyse **********************************
}
function TXMLAnalyse.Analyse(Stream: TStream): TStrings;
var
  Xml: IXMLDocument;
  RootNode, Node: IXMLNode;
  i, Index: Integer;
  Update: TUpdate;
  tmpUpdate: TUpdate;
  RetList: TStringList;
begin
  // TODO -cMM: TXMLAnalyse.Analyse default body inserted
  Xml := NewXmlDocument();
  Xml.LoadFromStream(Stream);
  RootNode := Xml.DocumentElement;
  RetList := TStringList.Create;
  for i := 0 to RootNode.ChildNodes.Count - 1 do
  begin
  
    if (Assigned(OnAnalyse)) then
      OnAnalyse(self, RootNode.ChildNodes.Count, i);
  
    Node := RootNode.ChildNodes[i];
   // ShowMessage(Node.ChildNodes['chkType'].Text);
    Update := TFileUpdate.Create;
    Update.ChkType := TChkType(StrToInt(Node.ChildNodes['chkType'].Text));
    UPdate.LocalFile := Node.ChildNodes['DeskFile'].text;
    Update.NewDate := StrToDateTime(Node.ChildNodes['DateTime'].text);
    Update.NewVersion := Node.ChildNodes['Version'].Text;
    //Update.TempPath := GetSystemTempPath();
    Update.UpdateType := TUpdateType(StrToInt(Node.ChildNodes['UpdateType'].Text));
    Update.UpdateURL := Node.ChildNodes['FileURL'].Text;
    Update.FileName := Node.ChildNodes['FileName'].Text;
    Update.NewSize := StrToInt(Node.ChildNodes['FileSize'].Text);
    tmpUpdate := Update.Analyse;
    if (Assigned(tmpUpdate)) then
    begin
      Index := RetList.Add(tmpUpdate.FileName + '    版本: ' + tmpUpdate.NewVersion);
      RetList.Objects[Index] := tmpUpdate;
    end;
  end;
  Xml := nil;
  Result := RetList;
  FreeAndNil(Update);
end;

function TXMLAnalyse.GetUpdateList: TStrings;
var
  Mem: TMemoryStream;
  URI: TIdURI;
begin
  Result := nil;
  if (Assigned(Transfer)) then
  begin
    URI := TIdURI.Create(UpdateList);
    Mem := TMemoryStream.Create;
    Transfer.URI := URI;
    try
      Transfer.Get(Mem);
      Result := Analyse(Mem);
    finally
      FreeAndNil(Mem);
      FreeAndNil(URI);
    end;
  end;
end;

{
*********************************** TAnalyse ***********************************
}
destructor TAnalyse.Destroy;
begin
  // TODO -cMM: TAnalyse.Destory default body inserted
  FTransfer := nil;
  inherited;
end;


end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -