@@ -55,21 +55,19 @@ Filename: "{tmp}\_offlineinstaller\Output\elixir-v0.14.1-setup.exe"; Flags: wait
55
55
56
56
[Code]
57
57
type
58
- TElixirVersion = record
58
+ TElixirRelease = record
59
59
Version: String;
60
60
URL: String;
61
- Prerelease: Boolean ;
62
- CompatType : Integer;
61
+ ReleaseType: String ;
62
+ CompatMask : Integer;
63
63
end ;
64
- TArrayOfElixirVersion = array of TElixirVersion ;
64
+ TArrayOfElixirRelease = array of TElixirRelease ;
65
65
66
66
var
67
67
PSelectVerPage: TWizardPage;
68
- PSelectVerFetchText: TNewStaticText;
69
- PSelectVerFetchProgress: TNewProgressBar;
70
68
PSelectVerListBox: TNewCheckListBox;
71
-
72
- ElixirVersions: TArrayOfElixirVersion ;
69
+ ReleasesProcessed: Boolean;
70
+ ElixirReleases: TArrayOfElixirRelease ;
73
71
74
72
function SplitStringRec (Str: String; Delim: String; StrList: TStringList): TStringList;
75
73
var
@@ -101,61 +99,64 @@ begin
101
99
Result := SplitStringRec(Str, Delim, StrList)
102
100
end ;
103
101
104
- procedure GetVersionsFromFile (FileName: String) ;
102
+ procedure ParseReleasesCSV ;
105
103
var
106
- VersionStrings : TArrayOfString;
107
- NumVersions : Integer;
104
+ ReleaseStrings : TArrayOfString;
105
+ NumReleases : Integer;
108
106
i: Integer;
109
107
LineValues: TStringList;
110
108
begin
111
- LoadStringsFromFile(FileName, VersionStrings);
112
- NumVersions := GetArrayLength(VersionStrings);
113
- SetArrayLength(ElixirVersions, NumVersions);
114
-
115
- for i := 0 to NumVersions - 1 do begin
116
- LineValues := SplitString(VersionStrings[i], ' ,' );
117
- ElixirVersions[i].Version := LineValues.Strings[0 ];
118
- ElixirVersions[i].URL := LineValues.Strings[1 ];
119
- if LineValues.Strings[2 ] = ' true' then begin
120
- ElixirVersions[i].Prerelease := True;
121
- end else begin
122
- ElixirVersions[i].Prerelease := False;
123
- end ;
124
- ElixirVersions[i].CompatType := StrToInt(LineValues.Strings[3 ]);
109
+ LoadStringsFromFile(ExpandConstant(' {tmp}\releases.csv' ), ReleaseStrings);
110
+ NumReleases := GetArrayLength(ReleaseStrings);
111
+ SetArrayLength(ElixirReleases, NumReleases);
112
+
113
+ for i := 0 to NumReleases - 1 do begin
114
+ LineValues := SplitString(ReleaseStrings[i], ' ,' );
115
+ ElixirReleases[i].Version := LineValues.Strings[0 ];
116
+ ElixirReleases[i].URL := LineValues.Strings[1 ];
117
+ ElixirReleases[i].ReleaseType := LineValues.Strings[2 ];
118
+ ElixirReleases[i].CompatMask := StrToInt(LineValues.Strings[3 ]);
125
119
end ;
126
120
end ;
127
121
128
- procedure DoPSelectVer ();
122
+ procedure PopulateListOfReleases ();
129
123
var
130
- ElixirVersions: TArrayOfElixirVersion;
124
+ LatestRelease: Boolean;
125
+ VersionLabel: String;
126
+ i: Integer;
131
127
begin
132
- WizardForm.NextButton.Enabled := False;
133
- PSelectVerFetchProgress.Visible := True;
134
-
135
- if not (FileExists(ExpandConstant(' {tmp}\releases.csv' ))) then begin
136
- idpDownloadFile(' http://elixir-lang.org/releases.csv' , ExpandConstant(' {tmp}\releases.csv' ));
137
- GetVersionsFromFile(ExpandConstant(' {tmp}\releases.csv' ));
128
+ LatestRelease := True;
129
+ for i := 0 to GetArrayLength(ElixirReleases) - 1 do begin
130
+ VersionLabel := ' Version ' + ElixirReleases[i].Version;
131
+ if LatestRelease then
132
+ VersionLabel := VersionLabel + ' (Latest)' ;
133
+
134
+ PSelectVerListBox.AddRadioButton(VersionLabel, ElixirReleases[i].ReleaseType, 0 , LatestRelease, True, nil );
135
+ LatestRelease := False;
138
136
end ;
139
-
140
-
141
-
142
- PSelectVerFetchProgress.Visible := False;
143
- WizardForm.NextButton.Enabled := True;
144
137
end ;
145
138
146
139
procedure CurPageChanged (CurPageID: Integer);
147
140
begin
148
- if CurPageID = PSelectVerPage.ID then
149
- DoPSelectVer;
141
+ if CurPageID = PSelectVerPage.ID then begin
142
+ if not ReleasesProcessed then begin
143
+ idpDownloadFile(' http://elixir-lang.org/releases.csv' , ExpandConstant(' {tmp}\releases.csv' ));
144
+ ParseReleasesCSV;
145
+ PopulateListOfReleases;
146
+
147
+ ReleasesProcessed := True;
148
+ end ;
149
+ end ;
150
150
end ;
151
151
152
152
procedure CreatePages ();
153
153
begin
154
154
PSelectVerPage := CreateCustomPage(wpWelcome, ' Select Elixir version' , ' Setup will download and install the Elixir version you select.' );
155
- PSelectVerFetchProgress := TNewProgressBar.Create(PSelectVerPage);
156
- PSelectVerFetchProgress.Width := PSelectVerPage.SurfaceWidth;
157
- PSelectVerFetchProgress.Parent := PSelectVerPage.Surface;
158
- PSelectVerFetchProgress.Style := npbstMarquee;
155
+
156
+ PSelectVerListBox := TNewCheckListBox.Create(PSelectVerPage);
157
+ PSelectVerListBox.Width := PSelectVerPage.SurfaceWidth;
158
+ PSelectVerListBox.Height := PSelectVerPage.SurfaceHeight - 10 ;
159
+ PSelectVerListBox.Parent := PSelectVerPage.Surface;
159
160
end ;
160
161
161
162
function ErlangIsInstalled : Boolean;
167
168
168
169
procedure InitializeWizard ();
169
170
begin
171
+ ReleasesProcessed := False;
170
172
CreatePages;
171
173
idpAddFile(' https://github.com/elixir-lang/elixir/releases/download/v0.14.1/Precompiled.zip' , ExpandConstant(' {tmp}\Precompiled.zip' ));
172
174
idpDownloadAfter(wpPreparing);
@@ -190,7 +192,6 @@ begin
190
192
end ;
191
193
end ;
192
194
193
- [Code]
194
195
procedure ExtractPrecompiled ();
195
196
var
196
197
ResultCode: Integer;
0 commit comments