From 89087a32c38c003ecb42c2574129b598819c11d2 Mon Sep 17 00:00:00 2001 From: akwizgran <michael@briarproject.org> Date: Mon, 11 Mar 2013 17:33:28 +0000 Subject: [PATCH] Added new database events to support updating the UI. --- .../api/db/event/SubscriptionAddedEvent.java | 17 +++++++++++++++++ .../api/db/event/SubscriptionRemovedEvent.java | 17 +++++++++++++++++ .../net/sf/briar/db/DatabaseComponentImpl.java | 9 ++++++--- .../net/sf/briar/db/DatabaseComponentTest.java | 7 +++++++ 4 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 briar-api/src/net/sf/briar/api/db/event/SubscriptionAddedEvent.java create mode 100644 briar-api/src/net/sf/briar/api/db/event/SubscriptionRemovedEvent.java diff --git a/briar-api/src/net/sf/briar/api/db/event/SubscriptionAddedEvent.java b/briar-api/src/net/sf/briar/api/db/event/SubscriptionAddedEvent.java new file mode 100644 index 0000000000..76b39be75b --- /dev/null +++ b/briar-api/src/net/sf/briar/api/db/event/SubscriptionAddedEvent.java @@ -0,0 +1,17 @@ +package net.sf.briar.api.db.event; + +import net.sf.briar.api.messaging.GroupId; + +/** An event that is broadcast when the user subscribes to a group. */ +public class SubscriptionAddedEvent extends DatabaseEvent { + + private final GroupId groupId; + + public SubscriptionAddedEvent(GroupId groupId) { + this.groupId = groupId; + } + + public GroupId getGroupId() { + return groupId; + } +} diff --git a/briar-api/src/net/sf/briar/api/db/event/SubscriptionRemovedEvent.java b/briar-api/src/net/sf/briar/api/db/event/SubscriptionRemovedEvent.java new file mode 100644 index 0000000000..df7f5bf934 --- /dev/null +++ b/briar-api/src/net/sf/briar/api/db/event/SubscriptionRemovedEvent.java @@ -0,0 +1,17 @@ +package net.sf.briar.api.db.event; + +import net.sf.briar.api.messaging.GroupId; + +/** An event that is broadcast when the user unsubscribes from a group. */ +public class SubscriptionRemovedEvent extends DatabaseEvent { + + private final GroupId groupId; + + public SubscriptionRemovedEvent(GroupId groupId) { + this.groupId = groupId; + } + + public GroupId getGroupId() { + return groupId; + } +} diff --git a/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java b/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java index 471f7306b2..bd34f2e3f5 100644 --- a/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java +++ b/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java @@ -50,6 +50,8 @@ import net.sf.briar.api.db.event.RatingChangedEvent; import net.sf.briar.api.db.event.RemoteRetentionTimeUpdatedEvent; import net.sf.briar.api.db.event.RemoteSubscriptionsUpdatedEvent; import net.sf.briar.api.db.event.RemoteTransportsUpdatedEvent; +import net.sf.briar.api.db.event.SubscriptionAddedEvent; +import net.sf.briar.api.db.event.SubscriptionRemovedEvent; import net.sf.briar.api.db.event.TransportAddedEvent; import net.sf.briar.api.db.event.TransportRemovedEvent; import net.sf.briar.api.lifecycle.ShutdownManager; @@ -1778,15 +1780,14 @@ DatabaseCleaner.Callback { } public boolean subscribe(Group g) throws DbException { + boolean added = false; subscriptionLock.writeLock().lock(); try { T txn = db.startTransaction(); try { - boolean added = false; if(!db.containsSubscription(txn, g.getId())) added = db.addSubscription(txn, g); db.commitTransaction(txn); - return added; } catch(DbException e) { db.abortTransaction(txn); throw e; @@ -1794,7 +1795,8 @@ DatabaseCleaner.Callback { } finally { subscriptionLock.writeLock().unlock(); } - // Listeners will be notified when the group's visibility is set + if(added) callListeners(new SubscriptionAddedEvent(g.getId())); + return added; } public void unsubscribe(GroupId g) throws DbException { @@ -1820,6 +1822,7 @@ DatabaseCleaner.Callback { } finally { messageLock.writeLock().unlock(); } + callListeners(new SubscriptionRemovedEvent(g)); callListeners(new LocalSubscriptionsUpdatedEvent(affected)); } diff --git a/briar-tests/src/net/sf/briar/db/DatabaseComponentTest.java b/briar-tests/src/net/sf/briar/db/DatabaseComponentTest.java index 5a585bac33..63d8330ada 100644 --- a/briar-tests/src/net/sf/briar/db/DatabaseComponentTest.java +++ b/briar-tests/src/net/sf/briar/db/DatabaseComponentTest.java @@ -27,6 +27,8 @@ import net.sf.briar.api.db.event.DatabaseListener; import net.sf.briar.api.db.event.LocalSubscriptionsUpdatedEvent; import net.sf.briar.api.db.event.MessageAddedEvent; import net.sf.briar.api.db.event.RatingChangedEvent; +import net.sf.briar.api.db.event.SubscriptionAddedEvent; +import net.sf.briar.api.db.event.SubscriptionRemovedEvent; import net.sf.briar.api.lifecycle.ShutdownManager; import net.sf.briar.api.messaging.Ack; import net.sf.briar.api.messaging.Author; @@ -150,6 +152,9 @@ public abstract class DatabaseComponentTest extends BriarTestCase { oneOf(database).containsSubscription(txn, groupId); will(returnValue(false)); oneOf(database).addSubscription(txn, group); + will(returnValue(true)); + oneOf(listener).eventOccurred(with(any( + SubscriptionAddedEvent.class))); // subscribe(group) again oneOf(database).containsSubscription(txn, groupId); will(returnValue(true)); @@ -167,6 +172,8 @@ public abstract class DatabaseComponentTest extends BriarTestCase { oneOf(database).getVisibility(txn, groupId); will(returnValue(Collections.emptyList())); oneOf(database).removeSubscription(txn, groupId); + oneOf(listener).eventOccurred(with(any( + SubscriptionRemovedEvent.class))); oneOf(listener).eventOccurred(with(any( LocalSubscriptionsUpdatedEvent.class))); // removeContact(contactId) -- GitLab