From 8b6bbd77ab6c2ba75e990be7f121c499855e7293 Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
Date: Fri, 15 Mar 2013 16:34:38 +0000
Subject: [PATCH] Attach the IDs of expired messages to MessageExpiredEvent.

---
 .../briar/api/db/event/MessageExpiredEvent.java  | 13 +++++++++++++
 .../net/sf/briar/db/DatabaseComponentImpl.java   | 16 ++++++++--------
 2 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/briar-api/src/net/sf/briar/api/db/event/MessageExpiredEvent.java b/briar-api/src/net/sf/briar/api/db/event/MessageExpiredEvent.java
index 5f130f78a7..1c1e11ef91 100644
--- a/briar-api/src/net/sf/briar/api/db/event/MessageExpiredEvent.java
+++ b/briar-api/src/net/sf/briar/api/db/event/MessageExpiredEvent.java
@@ -1,9 +1,22 @@
 package net.sf.briar.api.db.event;
 
+import java.util.Collection;
+
+import net.sf.briar.api.messaging.MessageId;
+
 /**
  * An event that is broadcast when one or messages expire from the database,
  * potentially changing the database's retention time.
  */
 public class MessageExpiredEvent extends DatabaseEvent {
 
+	private final Collection<MessageId> expired;
+
+	public MessageExpiredEvent(Collection<MessageId> expired) {
+		this.expired = expired;
+	}
+
+	public Collection<MessageId> getMessageIds() {
+		return expired;
+	}
 }
diff --git a/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java b/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java
index 67287cd99a..15c3013352 100644
--- a/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java
+++ b/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java
@@ -1895,20 +1895,19 @@ DatabaseCleaner.Callback {
 	 * removed.
 	 */
 	private boolean expireMessages(int size) throws DbException {
-		boolean removed = false;
+		Collection<MessageId> expired;
 		messageLock.writeLock().lock();
 		try {
 			retentionLock.writeLock().lock();
 			try {
 				T txn = db.startTransaction();
 				try {
-					Collection<MessageId> old = db.getOldMessages(txn, size);
-					if(!old.isEmpty()) {
-						for(MessageId m : old) removeMessage(txn, m);
+					expired = db.getOldMessages(txn, size);
+					if(!expired.isEmpty()) {
+						for(MessageId m : expired) removeMessage(txn, m);
 						db.incrementRetentionVersions(txn);
-						removed = true;
 						if(LOG.isLoggable(INFO))
-							LOG.info("Expired " + old.size() + " messages");
+							LOG.info("Expired " + expired.size() + " messages");
 					}
 					db.commitTransaction(txn);
 				} catch(DbException e) {
@@ -1921,8 +1920,9 @@ DatabaseCleaner.Callback {
 		} finally {
 			messageLock.writeLock().unlock();
 		}
-		if(removed) callListeners(new MessageExpiredEvent());
-		return removed;
+		if(expired.isEmpty()) return false;
+		callListeners(new MessageExpiredEvent(expired));
+		return true;
 	}
 
 	/**
-- 
GitLab