示例#1
0
        public async Task DowngradeAsync(RepositoryOptions options, CancellationToken cancel = default)
        {
            var path   = Path.Combine(options.Folder, "pins");
            var folder = new DirectoryInfo(path);

            if (!folder.Exists)
            {
                return;
            }

            var store = new FileStore <Cid, Pin1>
            {
                Folder    = path,
                NameToKey = (cid) => cid.Hash.ToBase32(),
                KeyToName = (key) => new MultiHash(Base32.FromBase32(key))
            };

            var files = folder.EnumerateFiles().Where(fi => fi.Length != 0);

            foreach (var fi in files)
            {
                try
                {
                    var name = store.KeyToName(fi.Name);
                    var pin  = await store.GetAsync(name, cancel).ConfigureAwait(false);

                    File.Create(Path.Combine(store.Folder, pin.Id));
                    File.Delete(store.GetPath(name));
                }
                catch
                {
                    // ignored
                }
            }
        }