@@ -123,6 +123,9 @@ containing the C<courseID>, file C<size>, and C<lastModified> time. For example,
123123 }
124124 }
125125
126+ Note that archive files that contain the same C<courseID > will also have the
127+ C<duplicateCourseID > key set to 1.
128+
126129=cut
127130
128131sub listArchivedCourses {
@@ -135,6 +138,7 @@ sub listArchivedCourses {
135138 my $archiveDataFile = $archivesDir -> child(' archive-cache.json' );
136139 my $archiveData = eval { decode_json($archiveDataFile -> slurp) } || {};
137140
141+ my %seenCourseIDs ;
138142 my %updatedArchiveData ;
139143 my %return ;
140144 for (@$archives ) {
@@ -143,7 +147,16 @@ sub listArchivedCourses {
143147
144148 if ($archiveData -> {$basename } && $archiveData -> {$basename }{lastModified } >= $lastModified ) {
145149 $updatedArchiveData {$basename } = $archiveData -> {$basename };
146- $return {$basename } = $updatedArchiveData {$basename } if defined $archiveData -> {$basename }{courseID };
150+ if (defined $archiveData -> {$basename }{courseID }) {
151+ $return {$basename } = $updatedArchiveData {$basename };
152+
153+ if ($seenCourseIDs { $updatedArchiveData {$basename }{courseID } }) {
154+ $return {$basename }{duplicateCourseID } = 1;
155+ $return { $seenCourseIDs { $updatedArchiveData {$basename }{courseID } } }{duplicateCourseID } = 1;
156+ } else {
157+ $seenCourseIDs { $updatedArchiveData {$basename }{courseID } } = $basename ;
158+ }
159+ }
147160 next ;
148161 }
149162
@@ -164,6 +177,13 @@ sub listArchivedCourses {
164177 $updatedArchiveData {$basename }{courseID } = $currCourseID ;
165178 $updatedArchiveData {$basename }{size } = getHumanReadableFileSize($_ );
166179 $return {$basename } = $updatedArchiveData {$basename };
180+
181+ if ($seenCourseIDs { $updatedArchiveData {$basename }{courseID } }) {
182+ $return {$basename }{duplicateCourseID } = 1;
183+ $return { $seenCourseIDs { $updatedArchiveData {$basename }{courseID } } }{duplicateCourseID } = 1;
184+ } else {
185+ $seenCourseIDs { $updatedArchiveData {$basename }{courseID } } = $basename ;
186+ }
167187 }
168188
169189 $archiveDataFile -> spew(encode_json(\%updatedArchiveData ));
0 commit comments