Skip to content

Commit 7fac9c5

Browse files
feat: swarm persistence
1 parent 3f5c4c8 commit 7fac9c5

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

src/CoreApi/SwarmApi.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ TimeSpan ParseLatency(string latency)
105105

106106
public async Task<MultiAddress> AddAddressFilterAsync(MultiAddress address, bool persist = false, CancellationToken cancel = default(CancellationToken))
107107
{
108+
// go-ipfs always does persist, https://github.com/ipfs/go-ipfs/issues/4605
108109
var json = await ipfs.DoCommandAsync("swarm/filters/add", cancel, address.ToString());
109110
var addrs = (JArray)(JObject.Parse(json)["Strings"]);
110111
var a = addrs.FirstOrDefault();
@@ -115,15 +116,25 @@ TimeSpan ParseLatency(string latency)
115116

116117
public async Task<IEnumerable<MultiAddress>> ListAddressFiltersAsync(bool persist = false, CancellationToken cancel = default(CancellationToken))
117118
{
118-
var json = await ipfs.DoCommandAsync("swarm/filters", cancel);
119-
var addrs = (JObject.Parse(json)["Strings"]) as JArray;
119+
JArray addrs;
120+
if (persist)
121+
{
122+
addrs = await ipfs.Config.GetAsync("Swarm.AddrFilters", cancel) as JArray;
123+
}
124+
else
125+
{
126+
var json = await ipfs.DoCommandAsync("swarm/filters", cancel);
127+
addrs = (JObject.Parse(json)["Strings"]) as JArray;
128+
}
129+
120130
if (addrs == null)
121131
return new MultiAddress[0];
122132
return addrs.Select(a => new MultiAddress((string)a));
123133
}
124134

125135
public async Task<MultiAddress> RemoveAddressFilterAsync(MultiAddress address, bool persist = false, CancellationToken cancel = default(CancellationToken))
126136
{
137+
// go-ipfs always does persist, https://github.com/ipfs/go-ipfs/issues/4605
127138
var json = await ipfs.DoCommandAsync("swarm/filters/rm", cancel, address.ToString());
128139
var addrs = (JArray)(JObject.Parse(json)["Strings"]);
129140
var a = addrs.FirstOrDefault();

test/CoreApi/SwarmApiTest.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,18 +84,22 @@ public async Task Connection()
8484
public async Task Filter_Add_Remove()
8585
{
8686
var ipfs = TestFixture.Ipfs;
87-
var somewhere = new MultiAddress("/ip4/192.168.0.0/ipcidr/16");
88-
var filter = await ipfs.Swarm.AddAddressFilterAsync(somewhere);
87+
var somewhere = new MultiAddress("/ip4/192.127.0.0/ipcidr/16");
88+
var filter = await ipfs.Swarm.AddAddressFilterAsync(somewhere, true);
8989
Assert.IsNotNull(filter);
9090
Assert.AreEqual(somewhere, filter);
9191
var filters = await ipfs.Swarm.ListAddressFiltersAsync();
9292
Assert.IsTrue(filters.Any(a => a == somewhere));
93+
filters = await ipfs.Swarm.ListAddressFiltersAsync(true);
94+
Assert.IsTrue(filters.Any(a => a == somewhere));
9395

94-
filter = await ipfs.Swarm.RemoveAddressFilterAsync(somewhere);
96+
filter = await ipfs.Swarm.RemoveAddressFilterAsync(somewhere, true);
9597
Assert.IsNotNull(filter);
9698
Assert.AreEqual(somewhere, filter);
9799
filters = await ipfs.Swarm.ListAddressFiltersAsync();
98100
Assert.IsFalse(filters.Any(a => a == somewhere));
101+
filters = await ipfs.Swarm.ListAddressFiltersAsync(true);
102+
Assert.IsFalse(filters.Any(a => a == somewhere));
99103
}
100104

101105
[TestMethod]

0 commit comments

Comments
 (0)