diff --git a/node/node.go b/node/node.go index 6322796..d2e6108 100644 --- a/node/node.go +++ b/node/node.go @@ -247,42 +247,44 @@ func (n *NodeImpl) DownloadBytesByHash(hash *encoding.Multihash) ([]byte, error) } } -func (n *NodeImpl) GetMetadataByCID(cid *encoding.CID) (metadata.Metadata, error) { - var md metadata.Metadata - +func (n *NodeImpl) GetMetadataByCID(cid *encoding.CID) (md metadata.Metadata, err error) { hashStr, err := cid.Hash.ToString() if err != nil { return nil, err } if n.metadataCache.Contains(hashStr) { - bytes, err := n.DownloadBytesByHash(&cid.Hash) + md, _ := n.metadataCache.Get(hashStr) + + return md.(metadata.Metadata), nil + } + + bytes, err := n.DownloadBytesByHash(&cid.Hash) + if err != nil { + return nil, err + } + + switch cid.Type { + case types.CIDTypeMetadataMedia, types.CIDTypeBridge: // Both cases use the same deserialization method + md = metadata.NewEmptyMediaMetadata() + + err = msgpack.Unmarshal(bytes, md) if err != nil { return nil, err } + case types.CIDTypeMetadataWebapp: + md = metadata.NewEmptyWebAppMetadata() - switch cid.Type { - case types.CIDTypeMetadataMedia, types.CIDTypeBridge: // Both cases use the same deserialization method - md = metadata.NewEmptyMediaMetadata() - - err = msgpack.Unmarshal(bytes, md) - if err != nil { - return nil, err - } - case types.CIDTypeMetadataWebapp: - md = metadata.NewEmptyWebAppMetadata() - - err = msgpack.Unmarshal(bytes, md) - if err != nil { - return nil, err - } - default: - return nil, errors.New("unsupported metadata format") + err = msgpack.Unmarshal(bytes, md) + if err != nil { + return nil, err } - - n.metadataCache.Put(hashStr, md) + default: + return nil, errors.New("unsupported metadata format") } + n.metadataCache.Put(hashStr, md) + return md, nil } func (n *NodeImpl) WaitOnConnectedPeers() {