@@ -322,6 +322,17 @@ func downloadRegistry() (io.ReadCloser, error) {
322322 log .Fatalln ("Error unmarshalling metadata" , err )
323323 return nil , err
324324 }
325+ // If timestamp is not today, skip
326+ // "timestamp": "Tue Sep 30 08:00:50 UTC 2025"
327+ metadataTimestamp := metadata ["timestamp" ]
328+ timestamp , err := time .Parse ("Mon Jan 2 15:04:05 MST 2006" , metadataTimestamp )
329+ if err != nil {
330+ log .Printf ("Error parsing metadata timestamp: %s\n " , err )
331+ return nil , err
332+ }
333+ if timestamp .Year () != time .Now ().Year () || timestamp .Month () != time .Now ().Month () || timestamp .Day () != time .Now ().Day () {
334+ return nil , errors .New ("registry is not updated today, skipping" )
335+ }
325336 registerUrl := metadata ["golden_copy_path_context" ] + metadata ["latest_version_relative_zip_path" ]
326337 registerReq , err := http .Get (registerUrl )
327338 if err != nil {
@@ -377,20 +388,39 @@ func unzipFile(f *zip.File) error {
377388}
378389
379390func parseRegistry () (<- chan models.TPP , error ) {
380- file , err := os .ReadFile (RegisterJsonName )
391+ file , err := os .Open (RegisterJsonName )
381392 if err != nil {
382393 return nil , err
383394 }
384395
385396 res := make (chan models.TPP )
386397 go func () {
387- var registry [][]RawTPP
388- err = json .Unmarshal (file , & registry )
389- if err != nil {
390- log .Fatal (err )
398+ defer file .Close ()
399+ defer close (res )
400+ dec := json .NewDecoder (file )
401+
402+ // Expect the outer array
403+ t , err := dec .Token ()
404+ if err != nil || t != json .Delim ('[' ) {
405+ log .Printf ("Expected outer array: %v" , err )
406+ return
391407 }
392- for _ , tpps := range registry {
393- for _ , rawTpp := range tpps {
408+
409+ // Iterate over each inner array
410+ for dec .More () {
411+ // Expect inner array
412+ t , err := dec .Token ()
413+ if err != nil || t != json .Delim ('[' ) {
414+ log .Printf ("Expected inner array: %v" , err )
415+ return
416+ }
417+ // Iterate over RawTPP objects in inner array
418+ for dec .More () {
419+ var rawTpp RawTPP
420+ if err := dec .Decode (& rawTpp ); err != nil {
421+ log .Printf ("Error decoding RawTPP: %v" , err )
422+ continue
423+ }
394424 if rawTpp .CA_OwnerID == "" || rawTpp .Code == "" {
395425 continue
396426 }
@@ -405,8 +435,14 @@ func parseRegistry() (<-chan models.TPP, error) {
405435 }
406436 res <- rawTpp .toTPP ()
407437 }
438+ // End of inner array
439+ if t , err := dec .Token (); err != nil || t != json .Delim (']' ) {
440+ log .Printf ("Expected end of inner array: %v" , err )
441+ return
442+ }
408443 }
409- close (res )
444+ // End of outer array
445+ _ , _ = dec .Token ()
410446 }()
411447 return res , nil
412448}
0 commit comments