@@ -55,21 +55,19 @@ Filename: "{tmp}\_offlineinstaller\Output\elixir-v0.14.1-setup.exe"; Flags: wait
5555
5656[Code]
5757type
58- TElixirVersion = record
58+ TElixirRelease = record
5959 Version: String;
6060 URL: String;
61- Prerelease: Boolean ;
62- CompatType : Integer;
61+ ReleaseType: String ;
62+ CompatMask : Integer;
6363 end ;
64- TArrayOfElixirVersion = array of TElixirVersion ;
64+ TArrayOfElixirRelease = array of TElixirRelease ;
6565
6666var
6767 PSelectVerPage: TWizardPage;
68- PSelectVerFetchText: TNewStaticText;
69- PSelectVerFetchProgress: TNewProgressBar;
7068 PSelectVerListBox: TNewCheckListBox;
71-
72- ElixirVersions: TArrayOfElixirVersion ;
69+ ReleasesProcessed: Boolean;
70+ ElixirReleases: TArrayOfElixirRelease ;
7371
7472function SplitStringRec (Str: String; Delim: String; StrList: TStringList): TStringList;
7573var
@@ -101,61 +99,64 @@ begin
10199 Result := SplitStringRec(Str, Delim, StrList)
102100end ;
103101
104- procedure GetVersionsFromFile (FileName: String) ;
102+ procedure ParseReleasesCSV ;
105103var
106- VersionStrings : TArrayOfString;
107- NumVersions : Integer;
104+ ReleaseStrings : TArrayOfString;
105+ NumReleases : Integer;
108106 i: Integer;
109107 LineValues: TStringList;
110108begin
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 ]);
125119 end ;
126120end ;
127121
128- procedure DoPSelectVer ();
122+ procedure PopulateListOfReleases ();
129123var
130- ElixirVersions: TArrayOfElixirVersion;
124+ LatestRelease: Boolean;
125+ VersionLabel: String;
126+ i: Integer;
131127begin
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;
138136 end ;
139-
140-
141-
142- PSelectVerFetchProgress.Visible := False;
143- WizardForm.NextButton.Enabled := True;
144137end ;
145138
146139procedure CurPageChanged (CurPageID: Integer);
147140begin
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 ;
150150end ;
151151
152152procedure CreatePages ();
153153begin
154154 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;
159160end ;
160161
161162function ErlangIsInstalled : Boolean;
167168
168169procedure InitializeWizard ();
169170begin
171+ ReleasesProcessed := False;
170172 CreatePages;
171173 idpAddFile(' https://github.com/elixir-lang/elixir/releases/download/v0.14.1/Precompiled.zip' , ExpandConstant(' {tmp}\Precompiled.zip' ));
172174 idpDownloadAfter(wpPreparing);
@@ -190,7 +192,6 @@ begin
190192 end ;
191193end ;
192194
193- [Code]
194195procedure ExtractPrecompiled ();
195196var
196197 ResultCode: Integer;
0 commit comments