-
Notifications
You must be signed in to change notification settings - Fork 65
/
Copy pathDN.Setup.Dependency.Processor.pas
96 lines (82 loc) · 2.58 KB
/
DN.Setup.Dependency.Processor.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
unit DN.Setup.Dependency.Processor;
interface
uses
DN.Types,
DN.Setup.Intf,
DN.Setup.Dependency.Intf,
DN.Setup.Dependency.Processor.Intf,
DN.Progress.Intf;
type
TDNSetupDependencyProcessor = class(TInterfacedObject, IDNSetupDependencyProcessor)
private
FSetup: IDNSetup;
FProgress: IDNProgress;
function GetOnMessage: TMessageEvent;
function GetOnProgress: TDNProgressEvent;
procedure SetOnMessage(const Value: TMessageEvent);
procedure SetOnProgress(const Value: TDNProgressEvent);
procedure HandleSetupProgress(const Task, Item: string; Progress, Max: Int64);
public
constructor Create(const ASetup: IDNSetup);
function Execute(const ADependencies: TArray<IDNSetupDependency>): Boolean;
property OnMessage: TMessageEvent read GetOnMessage write SetOnMessage;
property OnProgress: TDNProgressEvent read GetOnProgress write SetOnProgress;
end;
implementation
uses
DN.Progress;
{ TDNSetupDependencyProcessor }
constructor TDNSetupDependencyProcessor.Create(const ASetup: IDNSetup);
begin
inherited Create();
FSetup := ASetup;
FSetup.OnProgress := HandleSetupProgress;
FProgress := TDNProgress.Create();
end;
function TDNSetupDependencyProcessor.Execute(
const ADependencies: TArray<IDNSetupDependency>): Boolean;
var
LDependency: IDNSetupDependency;
begin
Result := True;
FProgress.Reset();
for LDependency in ADependencies do
if LDependency.Action <> daNone then
FProgress.AddTask(LDependency.Package.Name);
for LDependency in ADependencies do
begin
case LDependency.Action of
daInstall: Result := FSetup.Install(LDependency.Package, LDependency.Version);
daUpdate: Result := FSetup.Update(LDependency.Package, LDependency.Version);
daUninstall: Result := FSetup.Uninstall(LDependency.Package);
end;
if not Result then
Exit;
if LDependency.Action <> daNone then
FProgress.NextTask();
end;
FProgress.Completed();
end;
function TDNSetupDependencyProcessor.GetOnMessage: TMessageEvent;
begin
Result := FSetup.OnMessage;
end;
function TDNSetupDependencyProcessor.GetOnProgress: TDNProgressEvent;
begin
Result := FProgress.OnProgress;
end;
procedure TDNSetupDependencyProcessor.HandleSetupProgress(const Task,
Item: string; Progress, Max: Int64);
begin
FProgress.SetTaskProgress(Task + ' ' + Item, Progress, Max);
end;
procedure TDNSetupDependencyProcessor.SetOnMessage(const Value: TMessageEvent);
begin
FSetup.OnMessage := Value;
end;
procedure TDNSetupDependencyProcessor.SetOnProgress(
const Value: TDNProgressEvent);
begin
FProgress.OnProgress := Value;
end;
end.