示例#1
0
        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);
        }
示例#2
0
        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);
        }