Add Java API for managing subscriptions

This commit is contained in:
Jeremy Lakeman 2017-01-11 13:20:24 +10:30
parent d2dfe71f26
commit a0dbe115aa
4 changed files with 79 additions and 6 deletions

View File

@ -25,6 +25,7 @@ import org.servalproject.servaldna.keyring.KeyringCommon;
import org.servalproject.servaldna.keyring.KeyringIdentity; import org.servalproject.servaldna.keyring.KeyringIdentity;
import org.servalproject.servaldna.keyring.KeyringIdentityList; import org.servalproject.servaldna.keyring.KeyringIdentityList;
import org.servalproject.servaldna.meshmb.MeshMBCommon; import org.servalproject.servaldna.meshmb.MeshMBCommon;
import org.servalproject.servaldna.meshmb.MeshMBSubscriptionList;
import org.servalproject.servaldna.meshmb.MessagePlyList; import org.servalproject.servaldna.meshmb.MessagePlyList;
import org.servalproject.servaldna.meshms.MeshMSCommon; import org.servalproject.servaldna.meshms.MeshMSCommon;
import org.servalproject.servaldna.meshms.MeshMSConversationList; import org.servalproject.servaldna.meshms.MeshMSConversationList;
@ -204,14 +205,20 @@ public class ServalDClient implements ServalDHttpConnectionFactory {
return list; return list;
} }
public int meshmbFollow(SigningKey id, SigningKey peer) throws ServalDInterfaceException, IOException { public int meshmbFollow(Subscriber id, SigningKey peer) throws ServalDInterfaceException, IOException {
return MeshMBCommon.follow(this, id, peer); return MeshMBCommon.follow(this, id, peer);
} }
public int meshmbIgnore(SigningKey id, SigningKey peer) throws ServalDInterfaceException, IOException { public int meshmbIgnore(Subscriber id, SigningKey peer) throws ServalDInterfaceException, IOException {
return MeshMBCommon.ignore(this, id, peer); return MeshMBCommon.ignore(this, id, peer);
} }
public MeshMBSubscriptionList meshmbSubscriptions(Subscriber identity) throws IOException, ServalDInterfaceException {
MeshMBSubscriptionList list = new MeshMBSubscriptionList(this, identity);
list.connect();
return list;
}
// interface ServalDHttpConnectionFactory // interface ServalDHttpConnectionFactory
public HttpURLConnection newServalDHttpConnection(String path) throws ServalDInterfaceException, IOException public HttpURLConnection newServalDHttpConnection(String path) throws ServalDInterfaceException, IOException
{ {

View File

@ -5,6 +5,7 @@ import org.servalproject.servaldna.ServalDClient;
import org.servalproject.servaldna.ServalDHttpConnectionFactory; import org.servalproject.servaldna.ServalDHttpConnectionFactory;
import org.servalproject.servaldna.ServalDInterfaceException; import org.servalproject.servaldna.ServalDInterfaceException;
import org.servalproject.servaldna.SigningKey; import org.servalproject.servaldna.SigningKey;
import org.servalproject.servaldna.Subscriber;
import java.io.IOException; import java.io.IOException;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
@ -27,15 +28,15 @@ public class MeshMBCommon {
return conn.getResponseCode(); return conn.getResponseCode();
} }
public static int ignore(ServalDHttpConnectionFactory connector, SigningKey id, SigningKey peer) throws ServalDInterfaceException, IOException { public static int ignore(ServalDHttpConnectionFactory connector, Subscriber id, SigningKey peer) throws ServalDInterfaceException, IOException {
HttpURLConnection conn = connector.newServalDHttpConnection("/restful/meshmb/" + id.toHex() + "/follow/" + peer.toHex()); HttpURLConnection conn = connector.newServalDHttpConnection("/restful/meshmb/" + id.signingKey.toHex() + "/follow/" + peer.toHex());
conn.setRequestMethod("POST"); conn.setRequestMethod("POST");
conn.connect(); conn.connect();
return conn.getResponseCode(); return conn.getResponseCode();
} }
public static int follow(ServalDHttpConnectionFactory connector, SigningKey id, SigningKey peer) throws ServalDInterfaceException, IOException { public static int follow(ServalDHttpConnectionFactory connector, Subscriber id, SigningKey peer) throws ServalDInterfaceException, IOException {
HttpURLConnection conn = connector.newServalDHttpConnection("/restful/meshmb/" + id.toHex() + "/ignore/" + peer.toHex()); HttpURLConnection conn = connector.newServalDHttpConnection("/restful/meshmb/" + id.signingKey.toHex() + "/ignore/" + peer.toHex());
conn.setRequestMethod("POST"); conn.setRequestMethod("POST");
conn.connect(); conn.connect();
return conn.getResponseCode(); return conn.getResponseCode();

View File

@ -0,0 +1,21 @@
package org.servalproject.servaldna.meshmb;
import org.servalproject.servaldna.BundleId;
import org.servalproject.servaldna.SigningKey;
/**
* Created by jeremy on 11/01/17.
*/
public class MeshMBSubscription {
public final SigningKey id;
public final String name;
public final long timestamp;
public final String lastMessage;
public MeshMBSubscription(SigningKey id, String name, long timestamp, String lastMessage){
this.id = id;
this.name = name;
this.lastMessage = lastMessage;
this.timestamp = timestamp;
}
}

View File

@ -0,0 +1,44 @@
package org.servalproject.servaldna.meshmb;
import org.servalproject.json.JSONTableScanner;
import org.servalproject.servaldna.AbstractJsonList;
import org.servalproject.servaldna.ServalDHttpConnectionFactory;
import org.servalproject.servaldna.ServalDInterfaceException;
import org.servalproject.servaldna.SigningKey;
import org.servalproject.servaldna.Subscriber;
import java.io.IOException;
import java.util.Map;
/**
* Created by jeremy on 11/01/17.
*/
public class MeshMBSubscriptionList extends AbstractJsonList<MeshMBSubscription, IOException> {
public final Subscriber identity;
public MeshMBSubscriptionList(ServalDHttpConnectionFactory httpConnector, Subscriber identity){
super(httpConnector, new JSONTableScanner()
.addColumn("id", SigningKey.class)
.addColumn("name", String.class)
.addColumn("timestamp", Long.class)
.addColumn("last_message", String.class)
);
this.identity = identity;
}
@Override
protected String getUrl() {
return "/restful/meshmb/" + identity.signingKey.toHex() + "/feedlist.json";
}
@Override
protected MeshMBSubscription factory(Map<String, Object> row, long rowCount) throws ServalDInterfaceException {
return new MeshMBSubscription(
(SigningKey) row.get("id"),
(String) row.get("name"),
(Long) row.get("timestamp"),
(String) row.get("last_message")
);
}
}