16
16
[Code]
17
17
18
18
type
19
- TElixirReleaseType = (rtRelease, rtPrerelease, rtLatestRelease, rtLatestPrerelease, rtIncompatible);
20
-
21
19
TElixirRelease = record
22
20
Version: String;
23
21
URL: String;
24
- ReleaseType: TElixirReleaseType ;
22
+ ReleaseType: String ;
25
23
Ref: TObject;
26
24
end ;
27
25
28
- // Given an Elixir release type, return its string representation
29
- function ReleaseTypeToString (ReleaseType: TElixirReleaseType): String;
30
- begin
31
- Result := ' Unknown' ;
32
- if ReleaseType = rtRelease then
33
- Result := ' Release' ;
34
- if ReleaseType = rtPrerelease then
35
- Result := ' Prerelease' ;
36
- if ReleaseType = rtLatestRelease then
37
- Result := ' Latest Release' ;
38
- if ReleaseType = rtLatestPrerelease then
39
- Result := ' Latest Prerelease' ;
40
- if ReleaseType = rtIncompatible then
41
- Result := ' Incompatible' ;
42
- end ;
43
-
44
26
// Given a filename to an elixir.csv file, return an array of Elixir releases corresponding to
45
27
// the data in the csv file.
46
28
function CSVToElixirReleases (Filename: String): array of TElixirRelease;
47
29
var
48
30
Rows: TArrayOfString;
49
31
RowValues: TStrings;
50
- i: Integer;
51
- LatestPrerelease: Boolean;
52
- LatestRelease: Boolean;
32
+ i: Integer;
53
33
begin
54
- // Initialize as one-way flags
55
- LatestPrerelease := True;
56
- LatestRelease := True;
57
-
58
34
// Read the file at Filename and store the lines in Rows
59
35
if LoadStringsFromFile(Filename, Rows) then begin
60
36
// Match length of return array to number of rows
@@ -69,104 +45,18 @@ begin
69
45
Version := RowValues[0 ];
70
46
URL := RowValues[1 ];
71
47
48
+ // Store release type unless incompatible with installer
72
49
if StrToInt(RowValues[3 ]) = { #COMPAT_MASK} then begin
73
- // Release has a compatibility mask matching this installer
74
- if RowValues[2 ] = ' prerelease' then begin
75
- // Release is designated as a prerelease
76
- if LatestPrerelease then begin
77
- // This is the first prerelease found, so it's the latest prerelease
78
- ReleaseType := rtLatestPrerelease;
79
- LatestPrerelease := False;
80
- end else begin
81
- // This is not the latest prerelease
82
- ReleaseType := rtPrerelease;
83
- end ;
84
- end else begin
85
- if LatestRelease then begin
86
- // This is the first release found, so it's the latest prerelease
87
- ReleaseType := rtLatestRelease;
88
- LatestRelease := False;
89
- end else begin
90
- // This is not the latest release
91
- ReleaseType := rtRelease;
92
- end ;
93
- end ;
50
+ ReleaseType := RowValues[2 ];
94
51
end else begin
95
- // Release can't be installed by this installer
96
- ReleaseType := rtIncompatible;
52
+ ReleaseType := ' incompatible' ;
97
53
end ;
98
54
99
55
// Assign this Elixir release a new reference object
100
- if Ref = nil then
101
- Ref := TObject.Create();
56
+ Ref := TObject.Create();
102
57
end ;
103
58
end ;
104
59
end else begin
105
60
SetArrayLength(Result, 0 );
106
61
end ;
107
62
end ;
108
-
109
- // Given an array of Elixir release and a list box, populate the list box with radio buttons
110
- // which describe and point to the releases in the Elixir release array
111
- procedure ElixirReleasesToListBox (Releases: array of TElixirRelease; ListBox: TNewCheckListBox);
112
- var
113
- i: Integer;
114
- begin
115
- ListBox.Items.Clear;
116
- for i := 0 to GetArrayLength(Releases) - 1 do begin
117
- with Releases[i] do begin
118
- ListBox.AddRadioButton(
119
- ' Elixir version ' + Version, // Label next to radio button
120
- ReleaseTypeToString(ReleaseType), // Label right-justified in list box
121
- 0 , // All choices on the same level
122
- (ReleaseType = rtLatestRelease), // Radio button selected by default if it's the latest release
123
- (ReleaseType <> rtIncompatible), // Incompatible releases can't be selected
124
- Ref // Pointer to release's reference object
125
- );
126
- end
127
- end ;
128
- end ;
129
-
130
- // Given an array of Elixir releases and a release type, return the first release in the array of that type
131
- function FindFirstReleaseOfType (Releases: array of TElixirRelease; ReleaseType: TElixirReleaseType): TElixirRelease;
132
- var
133
- i: Integer;
134
- begin
135
- for i := 0 to GetArrayLength(Releases) - 1 do begin
136
- if Releases[i].ReleaseType = ReleaseType then begin
137
- Result := Releases[i];
138
- exit;
139
- end ;
140
- end ;
141
- end ;
142
-
143
- // Given an array of Elixir releases and a reference object, return the first release in the array which
144
- // points to the same object
145
- function FindFirstReleaseMatchingRef (Releases: array of TElixirRelease; RefMatch: TObject): TElixirRelease;
146
- var
147
- i: Integer;
148
- begin
149
- for i := 0 to GetArrayLength(Releases) - 1 do begin
150
- if Releases[i].Ref = RefMatch then begin
151
- Result := Releases[i];
152
- exit;
153
- end ;
154
- end ;
155
- end ;
156
-
157
- // Given an array of list boxes and an array of Elixir releases, search for a selected radio button that
158
- // points to an Elixir release reference object, and return the Elixir release which shares that reference
159
- // object
160
- function FindSelectedRelease (ListBoxes: array of TNewCheckListBox; Releases: array of TElixirRelease): TElixirRelease;
161
- var
162
- i, j: Integer;
163
- begin
164
- for i := 0 to GetArrayLength(ListBoxes) - 1 do begin
165
- for j := 0 to ListBoxes[i].Items.Count - 1 do begin
166
- if ListBoxes[i].ItemObject[j] <> nil then begin
167
- Result := FindFirstReleaseMatchingRef(Releases, ListBoxes[i].ItemObject[j]);
168
- exit;
169
- end ;
170
- end ;
171
- end ;
172
- end ;
0 commit comments