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

📄 analysercmd.pas

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

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, Update;

type
  TAnalyseCmd = class(TObject)
  protected
    function CreateUpdateDecorator(UpDate: TUpdate): TUpdateDecorator; virtual;
  public
    function Run(Update: TUpdate): TUpdate; virtual; abstract;
  end;
  
  TVersionAnalyse = class(TAnalyseCmd)
  public
    function Run(Update: TUpdate): TUpdate; override;
  end;
  
  TDefaultAnalyse = class(TAnalyseCmd)
  public
    function Run(Update: TUpdate): TUpdate; override;
  end;
  
  TAnalyseCmdClass = Class of TAnalyseCmd;

  TDateAnalyse = class(TAnalyseCmd)
  public
    function Run(Update: TUpdate): TUpdate; override;
  end;
  
  TSizeAnalyse = class(TAnalyseCmd)
  public
    function Run(Update: TUpdate): TUpdate; override;
  end;
  
  TAnalyseCmdFactory = class(TObject)
  public
    class function CreateAnalyseCmd(AnalyseCmdClass: TAnalyseCmdClass):
            TAnalyseCmd;
  end;
  
  const
    ChkTypeArrar:array[0..3] of TAnalyseCmdClass=(TDefaultAnalyse,
                                                  TVersionAnalyse,
                                                  TDateAnalyse,
                                                  TSizeAnalyse);


implementation

uses uFileAction;

{
********************************* TAnalyseCmd **********************************
}
function TAnalyseCmd.CreateUpdateDecorator(UpDate: TUpdate): TUpdateDecorator;
begin
  try
    Result := TUpdateDecoratorFactory.CreateUpdateDecorator(UpdateClassArray[Integer(Update.UpdateType)], Update);
  except
    Raise;
  end;
end;

{
******************************* TVersionAnalyse ********************************
}
function TVersionAnalyse.Run(Update: TUpdate): TUpdate;
var
  NewUpdate: TUpdate;
  FileAction: TFileAction;
begin
  //Update.LocalFile
  Result := nil;
  FileAction := TFileAction.Create(Update.LocalFile);
  try
    if (FileAction.FileExit) then
      begin
      if Update.NewVersion > FileAction.GetFileVersionAsText then
      begin
        NewUpdate := TFileUpdate.Create;
        NewUpdate.Assign(Update);
        Result := CreateUpdateDecorator(NewUpdate);
      end;
    end;
  finally
    FreeAndNil(FileAction);
  end;
end;

{
******************************* TDefaultAnalyse ********************************
}
function TDefaultAnalyse.Run(Update: TUpdate): TUpdate;
var
  NewUpdate: TUpdate;
begin
  // TODO -cMM: TDefaultAnalyse.Run default body inserted
  NewUpdate := TFileUpdate.Create;
  NewUpdate.Assign(Update);
  Result := CreateUpdateDecorator(NewUpdate);
end;

{
********************************* TDateAnalyse *********************************
}
function TDateAnalyse.Run(Update: TUpdate): TUpdate;
var
  FileAction : TFileAction;
  NewUpdate: TUpdate;
begin
  Result := nil;
  FileAction := TFileAction.Create(Update.LocalFile);
  if (FileAction.FileExit) then
  begin
    if (FileAction.GetFileDate > Update.NewDate) then
    begin
      NewUpdate := TFileUpdate.Create;
      NewUpdate.Assign(Update);
      Result := CreateUpdateDecorator(NewUpdate);
    end;
  end;
end;

{
********************************* TSizeAnalyse *********************************
}
function TSizeAnalyse.Run(Update: TUpdate): TUpdate;
var
  FileAction : TFileAction;
  NewUpdate: TUpdate;
begin
  Result := nil;
  FileAction := TFileAction.Create(Update.LocalFile);
  if (FileAction.FileExit) then
  begin
    if (FileAction.GetFileSize > Update.NewSize) then
    begin
      NewUpdate := TFileUpdate.Create;
      NewUpdate.Assign(Update);
      Result := CreateUpdateDecorator(NewUpdate);
    end;
  end;
end;

{
****************************** TAnalyseCmdFactory ******************************
}
class function TAnalyseCmdFactory.CreateAnalyseCmd(AnalyseCmdClass:
        TAnalyseCmdClass): TAnalyseCmd;
begin
  // TODO -cMM: TAnalyseCmdFactory.CreateAnalyseCmd default body inserted
  Result := AnalyseCmdClass.Create;
end;

end.

⌨️ 快捷键说明

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