github.com/TrueBlocks/trueblocks-core/src/apps/chifra@v0.0.0-20241022031540-b362680128f7/internal/chunks/handle_manifest.go (about) 1 // Copyright 2021 The TrueBlocks Authors. All rights reserved. 2 // Use of this source code is governed by a license that can 3 // be found in the LICENSE file. 4 5 package chunksPkg 6 7 import ( 8 "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base" 9 "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/manifest" 10 "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/output" 11 "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/tslib" 12 "github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/types" 13 ) 14 15 var sourceMap = map[bool]manifest.Source{ 16 false: manifest.LocalCache, 17 true: manifest.FromContract, 18 } 19 20 func (opts *ChunksOptions) HandleManifest(rCtx *output.RenderCtx, blockNums []base.Blknum) error { 21 chain := opts.Globals.Chain 22 testMode := opts.Globals.TestMode 23 man, err := manifest.LoadManifest(chain, opts.PublisherAddr, sourceMap[opts.Remote]) 24 if err != nil { 25 return err 26 } 27 if testMode { 28 if len(man.Chunks) > 10 { 29 man.Chunks = man.Chunks[:10] 30 } 31 man.Specification = "--testing-hash--" 32 } 33 34 if opts.Globals.Format == "txt" || opts.Globals.Format == "csv" { 35 fetchData := func(modelChan chan types.Modeler, errorChan chan error) { 36 for _, chunk := range man.Chunks { 37 rng := base.RangeFromRangeString(chunk.Range) 38 s := types.ChunkRecord{ 39 Range: rng.String(), 40 BloomHash: chunk.BloomHash, 41 BloomSize: chunk.BloomSize, 42 IndexHash: chunk.IndexHash, 43 IndexSize: chunk.IndexSize, 44 } 45 rd := tslib.RangeToBounds(chain, &rng) 46 s.RangeDates = &rd 47 modelChan <- &s 48 } 49 } 50 51 return output.StreamMany(rCtx, fetchData, opts.Globals.OutputOpts()) 52 53 } else { 54 fetchData := func(modelChan chan types.Modeler, errorChan chan error) { 55 s := types.Manifest{ 56 Version: man.Version, 57 Chain: man.Chain, 58 Specification: man.Specification, 59 } 60 for _, chunk := range man.Chunks { 61 rng := base.RangeFromRangeString(chunk.Range) 62 ch := types.ChunkRecord{ 63 Range: rng.String(), 64 BloomHash: chunk.BloomHash, 65 BloomSize: chunk.BloomSize, 66 IndexHash: chunk.IndexHash, 67 IndexSize: chunk.IndexSize, 68 } 69 rd := tslib.RangeToBounds(chain, &rng) 70 ch.RangeDates = &rd 71 s.Chunks = append(s.Chunks, ch) 72 } 73 modelChan <- &s 74 } 75 76 return output.StreamMany(rCtx, fetchData, opts.Globals.OutputOpts()) 77 } 78 }