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 5f130f78a7f5fb00f80c0197549168c2d69c2e02..1c1e11ef914f2582d1369bf744f27f744ab45999 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 67287cd99a2036e072755b639be0d9b96a91d5a8..15c30133520209044f7190e7234c43549dd4caff 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; } /**