public async Task <IFileSystemNode> ListFileAsync(string path, CancellationToken cancel = default) { var r = await _nameApi.ResolveAsync(path, true, false, cancel).ConfigureAwait(false); var cid = Cid.Decode(r.Remove(0, 6)); var block = await _blockApi.GetAsync(cid, cancel).ConfigureAwait(false); switch (cid.ContentType) { // TODO: A content-type registry should be used. case "dag-pb": // fall thru break; case "raw": return(new UnixFsNode { Id = cid, Size = block.Size }); case "cms": return(new UnixFsNode { Id = cid, Size = block.Size }); default: throw new NotSupportedException($"Cannot read content type '{cid.ContentType}'."); } var dag = new DagNode(block.DataStream); var dm = Serializer.Deserialize <DataMessage>(dag.DataStream); var fsn = new UnixFsNode { Id = cid, Links = dag.Links.Select(l => new UnixFsLink { Id = l.Id, Name = l.Name, Size = l.Size }).ToArray(), IsDirectory = dm.Type == DataType.Directory, Size = (long)(dm.FileSize ?? 0) }; return(fsn); }
public void ToLink() { var node = new UnixFsNode { Name = "bar", Id = "Qmf412jQZiuVUtdgnB36FXFX7xg5V6KEbSJ4dpQuhkLyfD", IsDirectory = true, Size = 10, DagSize = 16 }; var link = node.ToLink("foo"); Assert.AreEqual(node.Id, link.Id); Assert.AreEqual(node.DagSize, link.Size); Assert.AreEqual("foo", link.Name); link = node.ToLink(); Assert.AreEqual(node.Id, link.Id); Assert.AreEqual(node.DagSize, link.Size); Assert.AreEqual("bar", link.Name); }