mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-17 21:29:54 +01:00
SocialBackupManager implements a ConverationClient for shard message headers
This commit is contained in:
@@ -7,6 +7,7 @@ import org.briarproject.bramble.api.lifecycle.LifecycleManager;
|
|||||||
import org.briarproject.bramble.api.sync.validation.ValidationManager;
|
import org.briarproject.bramble.api.sync.validation.ValidationManager;
|
||||||
import org.briarproject.bramble.api.system.Clock;
|
import org.briarproject.bramble.api.system.Clock;
|
||||||
import org.briarproject.bramble.api.versioning.ClientVersioningManager;
|
import org.briarproject.bramble.api.versioning.ClientVersioningManager;
|
||||||
|
import org.briarproject.briar.api.conversation.ConversationManager;
|
||||||
import org.briarproject.briar.api.socialbackup.DarkCrystal;
|
import org.briarproject.briar.api.socialbackup.DarkCrystal;
|
||||||
import org.briarproject.briar.api.socialbackup.SocialBackupManager;
|
import org.briarproject.briar.api.socialbackup.SocialBackupManager;
|
||||||
|
|
||||||
@@ -37,13 +38,15 @@ public class DefaultSocialBackupModule {
|
|||||||
ContactManager contactManager,
|
ContactManager contactManager,
|
||||||
ValidationManager validationManager,
|
ValidationManager validationManager,
|
||||||
ClientVersioningManager clientVersioningManager,
|
ClientVersioningManager clientVersioningManager,
|
||||||
SocialBackupManagerImpl socialBackupManager) {
|
SocialBackupManagerImpl socialBackupManager,
|
||||||
|
ConversationManager conversationManager) {
|
||||||
lifecycleManager.registerOpenDatabaseHook(socialBackupManager);
|
lifecycleManager.registerOpenDatabaseHook(socialBackupManager);
|
||||||
contactManager.registerContactHook(socialBackupManager);
|
contactManager.registerContactHook(socialBackupManager);
|
||||||
validationManager.registerIncomingMessageHook(CLIENT_ID,
|
validationManager.registerIncomingMessageHook(CLIENT_ID,
|
||||||
MAJOR_VERSION, socialBackupManager);
|
MAJOR_VERSION, socialBackupManager);
|
||||||
clientVersioningManager.registerClient(CLIENT_ID, MAJOR_VERSION,
|
clientVersioningManager.registerClient(CLIENT_ID, MAJOR_VERSION,
|
||||||
MINOR_VERSION, socialBackupManager);
|
MINOR_VERSION, socialBackupManager);
|
||||||
|
conversationManager.registerConversationClient(socialBackupManager);
|
||||||
return socialBackupManager;
|
return socialBackupManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ public interface SocialBackupConstants {
|
|||||||
String GROUP_KEY_VERSION = "version";
|
String GROUP_KEY_VERSION = "version";
|
||||||
|
|
||||||
// Message metadata keys
|
// Message metadata keys
|
||||||
|
String MSG_KEY_TIMESTAMP = "timestamp";
|
||||||
String MSG_KEY_MESSAGE_TYPE = "messageType";
|
String MSG_KEY_MESSAGE_TYPE = "messageType";
|
||||||
String MSG_KEY_LOCAL = "local";
|
String MSG_KEY_LOCAL = "local";
|
||||||
String MSG_KEY_VERSION = "version";
|
String MSG_KEY_VERSION = "version";
|
||||||
|
|||||||
@@ -37,11 +37,18 @@ import org.briarproject.bramble.api.sync.MessageId;
|
|||||||
import org.briarproject.bramble.api.system.Clock;
|
import org.briarproject.bramble.api.system.Clock;
|
||||||
import org.briarproject.bramble.api.versioning.ClientVersioningManager;
|
import org.briarproject.bramble.api.versioning.ClientVersioningManager;
|
||||||
import org.briarproject.bramble.api.versioning.ClientVersioningManager.ClientVersioningHook;
|
import org.briarproject.bramble.api.versioning.ClientVersioningManager.ClientVersioningHook;
|
||||||
|
import org.briarproject.briar.api.attachment.AttachmentHeader;
|
||||||
|
import org.briarproject.briar.api.client.MessageTracker;
|
||||||
|
import org.briarproject.briar.api.conversation.ConversationManager;
|
||||||
|
import org.briarproject.briar.api.conversation.ConversationMessageHeader;
|
||||||
|
import org.briarproject.briar.api.conversation.DeletionResult;
|
||||||
import org.briarproject.briar.api.socialbackup.BackupExistsException;
|
import org.briarproject.briar.api.socialbackup.BackupExistsException;
|
||||||
import org.briarproject.briar.api.socialbackup.BackupMetadata;
|
import org.briarproject.briar.api.socialbackup.BackupMetadata;
|
||||||
import org.briarproject.briar.api.socialbackup.DarkCrystal;
|
import org.briarproject.briar.api.socialbackup.DarkCrystal;
|
||||||
import org.briarproject.briar.api.socialbackup.Shard;
|
import org.briarproject.briar.api.socialbackup.Shard;
|
||||||
|
import org.briarproject.briar.api.socialbackup.ShardMessageHeader;
|
||||||
import org.briarproject.briar.api.socialbackup.SocialBackupManager;
|
import org.briarproject.briar.api.socialbackup.SocialBackupManager;
|
||||||
|
import org.briarproject.briar.client.ConversationClientImpl;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -49,6 +56,7 @@ import java.util.List;
|
|||||||
import java.util.ListIterator;
|
import java.util.ListIterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -61,10 +69,11 @@ import static org.briarproject.briar.socialbackup.SocialBackupConstants.GROUP_KE
|
|||||||
import static org.briarproject.briar.socialbackup.SocialBackupConstants.GROUP_KEY_VERSION;
|
import static org.briarproject.briar.socialbackup.SocialBackupConstants.GROUP_KEY_VERSION;
|
||||||
import static org.briarproject.briar.socialbackup.SocialBackupConstants.MSG_KEY_LOCAL;
|
import static org.briarproject.briar.socialbackup.SocialBackupConstants.MSG_KEY_LOCAL;
|
||||||
import static org.briarproject.briar.socialbackup.SocialBackupConstants.MSG_KEY_MESSAGE_TYPE;
|
import static org.briarproject.briar.socialbackup.SocialBackupConstants.MSG_KEY_MESSAGE_TYPE;
|
||||||
|
import static org.briarproject.briar.socialbackup.SocialBackupConstants.MSG_KEY_TIMESTAMP;
|
||||||
import static org.briarproject.briar.socialbackup.SocialBackupConstants.MSG_KEY_VERSION;
|
import static org.briarproject.briar.socialbackup.SocialBackupConstants.MSG_KEY_VERSION;
|
||||||
|
|
||||||
@NotNullByDefault
|
@NotNullByDefault
|
||||||
class SocialBackupManagerImpl extends BdfIncomingMessageHook
|
class SocialBackupManagerImpl extends ConversationClientImpl
|
||||||
implements SocialBackupManager, OpenDatabaseHook, ContactHook,
|
implements SocialBackupManager, OpenDatabaseHook, ContactHook,
|
||||||
ClientVersioningHook {
|
ClientVersioningHook {
|
||||||
|
|
||||||
@@ -100,8 +109,11 @@ class SocialBackupManagerImpl extends BdfIncomingMessageHook
|
|||||||
ContactManager contactManager,
|
ContactManager contactManager,
|
||||||
CryptoComponent crypto,
|
CryptoComponent crypto,
|
||||||
DarkCrystal darkCrystal,
|
DarkCrystal darkCrystal,
|
||||||
Clock clock) {
|
Clock clock,
|
||||||
super(db, clientHelper, metadataParser);
|
MessageTracker messageTracker,
|
||||||
|
ConversationManager conversationManager
|
||||||
|
) {
|
||||||
|
super(db, clientHelper, metadataParser, messageTracker);
|
||||||
this.clientVersioningManager = clientVersioningManager;
|
this.clientVersioningManager = clientVersioningManager;
|
||||||
this.transportPropertyManager = transportPropertyManager;
|
this.transportPropertyManager = transportPropertyManager;
|
||||||
this.contactGroupFactory = contactGroupFactory;
|
this.contactGroupFactory = contactGroupFactory;
|
||||||
@@ -257,18 +269,66 @@ class SocialBackupManagerImpl extends BdfIncomingMessageHook
|
|||||||
BdfDictionary meta =
|
BdfDictionary meta =
|
||||||
backupMetadataEncoder.encodeBackupMetadata(backupMetadata);
|
backupMetadataEncoder.encodeBackupMetadata(backupMetadata);
|
||||||
|
|
||||||
if (!db.containsGroup(txn, localGroup.getId())) db.addGroup(txn, localGroup);
|
if (!db.containsGroup(txn, localGroup.getId()))
|
||||||
|
db.addGroup(txn, localGroup);
|
||||||
clientHelper.mergeGroupMetadata(txn, localGroup.getId(), meta);
|
clientHelper.mergeGroupMetadata(txn, localGroup.getId(), meta);
|
||||||
} catch (FormatException e) {
|
} catch (FormatException e) {
|
||||||
throw new AssertionError(e);
|
throw new AssertionError(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Group getContactGroup(Contact c) {
|
public Group getContactGroup(Contact c) {
|
||||||
return contactGroupFactory.createContactGroup(CLIENT_ID,
|
return contactGroupFactory.createContactGroup(CLIENT_ID,
|
||||||
MAJOR_VERSION, c);
|
MAJOR_VERSION, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<ConversationMessageHeader> getMessageHeaders(
|
||||||
|
Transaction txn, ContactId contactId) throws DbException {
|
||||||
|
try {
|
||||||
|
Contact contact = db.getContact(txn, contactId);
|
||||||
|
GroupId contactGroupId = getContactGroup(contact).getId();
|
||||||
|
Map<MessageId, BdfDictionary> messages = clientHelper
|
||||||
|
.getMessageMetadataAsDictionary(txn, contactGroupId);
|
||||||
|
List<ConversationMessageHeader> headers =
|
||||||
|
new ArrayList<>();
|
||||||
|
List<AttachmentHeader> attachmentHeaders = new ArrayList<>();
|
||||||
|
for (Entry<MessageId, BdfDictionary> messageEntry : messages
|
||||||
|
.entrySet()) {
|
||||||
|
BdfDictionary message = messageEntry.getValue();
|
||||||
|
if (message.getLong(MSG_KEY_MESSAGE_TYPE).intValue() ==
|
||||||
|
SHARD.getValue()) {
|
||||||
|
long timestamp = message.getLong(MSG_KEY_TIMESTAMP);
|
||||||
|
ShardMessageHeader shardHeader = new ShardMessageHeader(
|
||||||
|
messageEntry.getKey(), contactGroupId, timestamp,
|
||||||
|
false, false, false, false, attachmentHeaders);
|
||||||
|
headers.add(shardHeader);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return headers;
|
||||||
|
} catch (FormatException e) {
|
||||||
|
throw new DbException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<MessageId> getMessageIds(Transaction txn, ContactId contactId)
|
||||||
|
throws DbException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DeletionResult deleteAllMessages(Transaction txn, ContactId c)
|
||||||
|
throws DbException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DeletionResult deleteMessages(Transaction txn, ContactId c,
|
||||||
|
Set<MessageId> messageIds) throws DbException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private void setContactId(Transaction txn, GroupId g, ContactId c)
|
private void setContactId(Transaction txn, GroupId g, ContactId c)
|
||||||
throws DbException {
|
throws DbException {
|
||||||
BdfDictionary d = new BdfDictionary();
|
BdfDictionary d = new BdfDictionary();
|
||||||
|
|||||||
Reference in New Issue
Block a user