initial set of Room entities
This commit is contained in:
parent
5d79cfbf0d
commit
94dde9f433
24
build.gradle
24
build.gradle
|
@ -42,6 +42,22 @@ spotless {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|
||||||
|
// Conversations 3.0 dependencies
|
||||||
|
|
||||||
|
def room_version = "2.4.3"
|
||||||
|
|
||||||
|
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.8'
|
||||||
|
|
||||||
|
implementation "androidx.room:room-runtime:$room_version"
|
||||||
|
annotationProcessor "androidx.room:room-compiler:$room_version"
|
||||||
|
implementation "androidx.room:room-guava:$room_version"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// legacy dependencies. Ideally everything below should be carefully reviewed and eventually moved up
|
||||||
|
|
||||||
|
|
||||||
implementation 'androidx.viewpager:viewpager:1.0.0'
|
implementation 'androidx.viewpager:viewpager:1.0.0'
|
||||||
|
|
||||||
playstoreImplementation('com.google.firebase:firebase-messaging:23.1.1') {
|
playstoreImplementation('com.google.firebase:firebase-messaging:23.1.1') {
|
||||||
|
@ -110,6 +126,13 @@ android {
|
||||||
def appName = "Conversations"
|
def appName = "Conversations"
|
||||||
resValue "string", "app_name", appName
|
resValue "string", "app_name", appName
|
||||||
buildConfigField "String", "APP_NAME", "\"$appName\""
|
buildConfigField "String", "APP_NAME", "\"$appName\""
|
||||||
|
|
||||||
|
javaCompileOptions {
|
||||||
|
annotationProcessorOptions {
|
||||||
|
arguments += ["room.schemaLocation": "$projectDir/schemas".toString()]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
splits {
|
splits {
|
||||||
|
@ -128,6 +151,7 @@ android {
|
||||||
}
|
}
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
|
coreLibraryDesugaringEnabled true
|
||||||
sourceCompatibility JavaVersion.VERSION_11
|
sourceCompatibility JavaVersion.VERSION_11
|
||||||
targetCompatibility JavaVersion.VERSION_11
|
targetCompatibility JavaVersion.VERSION_11
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,65 @@
|
||||||
|
package im.conversations.android.database;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import androidx.room.Database;
|
||||||
|
import androidx.room.Room;
|
||||||
|
import androidx.room.RoomDatabase;
|
||||||
|
import androidx.room.TypeConverters;
|
||||||
|
import im.conversations.android.database.entity.AccountEntity;
|
||||||
|
import im.conversations.android.database.entity.BlockedItemEntity;
|
||||||
|
import im.conversations.android.database.entity.ChatEntity;
|
||||||
|
import im.conversations.android.database.entity.DiscoEntity;
|
||||||
|
import im.conversations.android.database.entity.DiscoExtensionEntity;
|
||||||
|
import im.conversations.android.database.entity.DiscoExtensionFieldEntity;
|
||||||
|
import im.conversations.android.database.entity.DiscoExtensionFieldValueEntity;
|
||||||
|
import im.conversations.android.database.entity.DiscoFeatureEntity;
|
||||||
|
import im.conversations.android.database.entity.DiscoIdentityEntity;
|
||||||
|
import im.conversations.android.database.entity.MessageEntity;
|
||||||
|
import im.conversations.android.database.entity.MessagePartEntity;
|
||||||
|
import im.conversations.android.database.entity.MessageVersionEntity;
|
||||||
|
import im.conversations.android.database.entity.PresenceEntity;
|
||||||
|
import im.conversations.android.database.entity.ReactionEntity;
|
||||||
|
import im.conversations.android.database.entity.RosterItemEntity;
|
||||||
|
import im.conversations.android.database.entity.RosterItemGroupEntity;
|
||||||
|
|
||||||
|
@Database(
|
||||||
|
entities = {
|
||||||
|
AccountEntity.class,
|
||||||
|
BlockedItemEntity.class,
|
||||||
|
ChatEntity.class,
|
||||||
|
DiscoEntity.class,
|
||||||
|
DiscoExtensionEntity.class,
|
||||||
|
DiscoExtensionFieldEntity.class,
|
||||||
|
DiscoExtensionFieldValueEntity.class,
|
||||||
|
DiscoFeatureEntity.class,
|
||||||
|
DiscoIdentityEntity.class,
|
||||||
|
MessageEntity.class,
|
||||||
|
MessagePartEntity.class,
|
||||||
|
MessageVersionEntity.class,
|
||||||
|
PresenceEntity.class,
|
||||||
|
ReactionEntity.class,
|
||||||
|
RosterItemEntity.class,
|
||||||
|
RosterItemGroupEntity.class
|
||||||
|
},
|
||||||
|
version = 1)
|
||||||
|
@TypeConverters(Converters.class)
|
||||||
|
public abstract class ConversationsDatabase extends RoomDatabase {
|
||||||
|
|
||||||
|
private static volatile ConversationsDatabase INSTANCE = null;
|
||||||
|
|
||||||
|
public static ConversationsDatabase getInstance(final Context context) {
|
||||||
|
if (INSTANCE != null) {
|
||||||
|
return INSTANCE;
|
||||||
|
}
|
||||||
|
synchronized (ConversationsDatabase.class) {
|
||||||
|
if (INSTANCE != null) {
|
||||||
|
return INSTANCE;
|
||||||
|
}
|
||||||
|
final Context application = context.getApplicationContext();
|
||||||
|
INSTANCE =
|
||||||
|
Room.databaseBuilder(application, ConversationsDatabase.class, "conversations")
|
||||||
|
.build();
|
||||||
|
return INSTANCE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
package im.conversations.android.database;
|
||||||
|
|
||||||
|
import androidx.room.TypeConverter;
|
||||||
|
import eu.siacs.conversations.xmpp.Jid;
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
public final class Converters {
|
||||||
|
|
||||||
|
private Converters() {}
|
||||||
|
|
||||||
|
@TypeConverter
|
||||||
|
public static Instant toInstant(final Long timestamp) {
|
||||||
|
return timestamp == null ? null : Instant.ofEpochMilli(timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TypeConverter
|
||||||
|
public static Long fromInstant(final Instant instant) {
|
||||||
|
return instant == null ? null : instant.getEpochSecond() * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
@TypeConverter
|
||||||
|
public static Jid toJid(final String input) {
|
||||||
|
return input == null ? null : Jid.ofEscaped(input);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TypeConverter
|
||||||
|
public static String fromJid(final Jid jid) {
|
||||||
|
return jid == null ? null : jid.toEscapedString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
package im.conversations.android.database.entity;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.room.Embedded;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.Index;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
import im.conversations.android.database.model.Connection;
|
||||||
|
import im.conversations.android.database.model.Proxy;
|
||||||
|
|
||||||
|
@Entity(
|
||||||
|
tableName = "account",
|
||||||
|
indices = {
|
||||||
|
@Index(
|
||||||
|
value = {"address"},
|
||||||
|
unique = true)
|
||||||
|
})
|
||||||
|
public class AccountEntity {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
public Long id;
|
||||||
|
|
||||||
|
@NonNull public String address;
|
||||||
|
public String resource;
|
||||||
|
public byte[] randomSeed;
|
||||||
|
|
||||||
|
public boolean enabled;
|
||||||
|
|
||||||
|
public String rosterVersion;
|
||||||
|
|
||||||
|
@Embedded public Connection connection;
|
||||||
|
|
||||||
|
@Embedded(prefix = "proxy")
|
||||||
|
public Proxy proxy;
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
package im.conversations.android.database.entity;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.ForeignKey;
|
||||||
|
import androidx.room.Index;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
|
||||||
|
@Entity(
|
||||||
|
tableName = "blocked",
|
||||||
|
foreignKeys =
|
||||||
|
@ForeignKey(
|
||||||
|
entity = AccountEntity.class,
|
||||||
|
parentColumns = {"id"},
|
||||||
|
childColumns = {"accountId"},
|
||||||
|
onDelete = ForeignKey.CASCADE),
|
||||||
|
indices = {
|
||||||
|
@Index(
|
||||||
|
value = {"accountId", "address"},
|
||||||
|
unique = true)
|
||||||
|
})
|
||||||
|
public class BlockedItemEntity {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
public Long id;
|
||||||
|
|
||||||
|
@NonNull public Long accountId;
|
||||||
|
|
||||||
|
@NonNull public String address;
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
package im.conversations.android.database.entity;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.ForeignKey;
|
||||||
|
import androidx.room.Index;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
import im.conversations.android.database.model.ChatType;
|
||||||
|
|
||||||
|
@Entity(
|
||||||
|
tableName = "chat",
|
||||||
|
foreignKeys =
|
||||||
|
@ForeignKey(
|
||||||
|
entity = AccountEntity.class,
|
||||||
|
parentColumns = {"id"},
|
||||||
|
childColumns = {"accountId"},
|
||||||
|
onDelete = ForeignKey.CASCADE),
|
||||||
|
indices = {
|
||||||
|
@Index(
|
||||||
|
value = {"accountId", "address"},
|
||||||
|
unique = true)
|
||||||
|
})
|
||||||
|
public class ChatEntity {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
public Long id;
|
||||||
|
|
||||||
|
@NonNull public Long accountId;
|
||||||
|
|
||||||
|
@NonNull public String address;
|
||||||
|
|
||||||
|
public ChatType type;
|
||||||
|
|
||||||
|
public boolean archived;
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
package im.conversations.android.database.entity;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.ForeignKey;
|
||||||
|
import androidx.room.Index;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
|
||||||
|
@Entity(
|
||||||
|
tableName = "disco",
|
||||||
|
foreignKeys =
|
||||||
|
@ForeignKey(
|
||||||
|
entity = AccountEntity.class,
|
||||||
|
parentColumns = {"id"},
|
||||||
|
childColumns = {"accountId"},
|
||||||
|
onDelete = ForeignKey.CASCADE),
|
||||||
|
indices = {@Index(value = {"accountId"})})
|
||||||
|
public class DiscoEntity {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
public Long id;
|
||||||
|
|
||||||
|
public byte[] capsHash;
|
||||||
|
public byte[] caps2Hash;
|
||||||
|
public String caps2Algorithm;
|
||||||
|
@NonNull Long accountId;
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package im.conversations.android.database.entity;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.ForeignKey;
|
||||||
|
import androidx.room.Index;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
|
||||||
|
@Entity(
|
||||||
|
tableName = "disco_ext",
|
||||||
|
foreignKeys =
|
||||||
|
@ForeignKey(
|
||||||
|
entity = DiscoEntity.class,
|
||||||
|
parentColumns = {"id"},
|
||||||
|
childColumns = {"discoId"},
|
||||||
|
onDelete = ForeignKey.CASCADE),
|
||||||
|
indices = {@Index(value = {"discoId"})})
|
||||||
|
public class DiscoExtensionEntity {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
public Long id;
|
||||||
|
|
||||||
|
@NonNull public Long discoId;
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package im.conversations.android.database.entity;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.ForeignKey;
|
||||||
|
import androidx.room.Index;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
|
||||||
|
@Entity(
|
||||||
|
tableName = "disco_ext_field",
|
||||||
|
foreignKeys =
|
||||||
|
@ForeignKey(
|
||||||
|
entity = DiscoExtensionEntity.class,
|
||||||
|
parentColumns = {"id"},
|
||||||
|
childColumns = {"extensionId"},
|
||||||
|
onDelete = ForeignKey.CASCADE),
|
||||||
|
indices = {@Index(value = {"extensionId"})})
|
||||||
|
public class DiscoExtensionFieldEntity {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
public Long id;
|
||||||
|
|
||||||
|
@NonNull public Long extensionId;
|
||||||
|
|
||||||
|
public String field;
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package im.conversations.android.database.entity;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.ForeignKey;
|
||||||
|
import androidx.room.Index;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
|
||||||
|
@Entity(
|
||||||
|
tableName = "disco_ext_field_value",
|
||||||
|
foreignKeys =
|
||||||
|
@ForeignKey(
|
||||||
|
entity = DiscoExtensionEntity.class,
|
||||||
|
parentColumns = {"id"},
|
||||||
|
childColumns = {"fieldId"},
|
||||||
|
onDelete = ForeignKey.CASCADE),
|
||||||
|
indices = {@Index(value = {"fieldId"})})
|
||||||
|
public class DiscoExtensionFieldValueEntity {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
public Long id;
|
||||||
|
|
||||||
|
@NonNull public Long fieldId;
|
||||||
|
|
||||||
|
public String value;
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package im.conversations.android.database.entity;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.ForeignKey;
|
||||||
|
import androidx.room.Index;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
|
||||||
|
@Entity(
|
||||||
|
tableName = "disco_feature",
|
||||||
|
foreignKeys =
|
||||||
|
@ForeignKey(
|
||||||
|
entity = DiscoEntity.class,
|
||||||
|
parentColumns = {"id"},
|
||||||
|
childColumns = {"discoId"},
|
||||||
|
onDelete = ForeignKey.CASCADE),
|
||||||
|
indices = {@Index(value = {"discoId"})})
|
||||||
|
public class DiscoFeatureEntity {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
public Long id;
|
||||||
|
|
||||||
|
@NonNull public Long discoId;
|
||||||
|
|
||||||
|
@NonNull public String feature;
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
package im.conversations.android.database.entity;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.ForeignKey;
|
||||||
|
import androidx.room.Index;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
|
||||||
|
@Entity(
|
||||||
|
tableName = "disco_identity",
|
||||||
|
foreignKeys =
|
||||||
|
@ForeignKey(
|
||||||
|
entity = DiscoEntity.class,
|
||||||
|
parentColumns = {"id"},
|
||||||
|
childColumns = {"discoId"},
|
||||||
|
onDelete = ForeignKey.CASCADE),
|
||||||
|
indices = {@Index(value = {"discoId"})})
|
||||||
|
public class DiscoIdentityEntity {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
public Long id;
|
||||||
|
|
||||||
|
@NonNull public Long discoId;
|
||||||
|
|
||||||
|
public String category;
|
||||||
|
public String type;
|
||||||
|
public String name;
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package im.conversations.android.database.entity;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.ForeignKey;
|
||||||
|
import androidx.room.Index;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
@Entity(
|
||||||
|
tableName = "message",
|
||||||
|
foreignKeys =
|
||||||
|
@ForeignKey(
|
||||||
|
entity = ChatEntity.class,
|
||||||
|
parentColumns = {"id"},
|
||||||
|
childColumns = {"chatId"},
|
||||||
|
onDelete = ForeignKey.CASCADE),
|
||||||
|
indices = {@Index(value = "chatId")})
|
||||||
|
public class MessageEntity {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
public Long id;
|
||||||
|
|
||||||
|
@NonNull public Long chatId;
|
||||||
|
|
||||||
|
public Instant receivedAt;
|
||||||
|
public Instant sentAt;
|
||||||
|
|
||||||
|
public String bareTo;
|
||||||
|
public String toResource;
|
||||||
|
public String bareFrom;
|
||||||
|
public String fromResource;
|
||||||
|
|
||||||
|
public String occupantId;
|
||||||
|
|
||||||
|
public String messageId;
|
||||||
|
public String stanzaId;
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package im.conversations.android.database.entity;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.ForeignKey;
|
||||||
|
import androidx.room.Index;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
import im.conversations.android.database.model.PartType;
|
||||||
|
|
||||||
|
@Entity(
|
||||||
|
tableName = "message_part",
|
||||||
|
foreignKeys =
|
||||||
|
@ForeignKey(
|
||||||
|
entity = MessageVersionEntity.class,
|
||||||
|
parentColumns = {"id"},
|
||||||
|
childColumns = {"messageVersionId"},
|
||||||
|
onDelete = ForeignKey.CASCADE),
|
||||||
|
indices = {@Index(value = "messageVersionId")})
|
||||||
|
public class MessagePartEntity {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
public Long id;
|
||||||
|
|
||||||
|
@NonNull public Long messageVersionId;
|
||||||
|
|
||||||
|
public String language;
|
||||||
|
|
||||||
|
public PartType type;
|
||||||
|
|
||||||
|
public String body;
|
||||||
|
|
||||||
|
public String url;
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
package im.conversations.android.database.entity;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.ForeignKey;
|
||||||
|
import androidx.room.Index;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
import im.conversations.android.database.model.Modification;
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
@Entity(
|
||||||
|
tableName = "message_version",
|
||||||
|
foreignKeys =
|
||||||
|
@ForeignKey(
|
||||||
|
entity = MessageEntity.class,
|
||||||
|
parentColumns = {"id"},
|
||||||
|
childColumns = {"messageId"},
|
||||||
|
onDelete = ForeignKey.CASCADE),
|
||||||
|
indices = {@Index(value = "messageId")})
|
||||||
|
public class MessageVersionEntity {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
public Long id;
|
||||||
|
|
||||||
|
@NonNull public long messageEntityId;
|
||||||
|
public String messageId;
|
||||||
|
public String stanzaId;
|
||||||
|
public Modification modification;
|
||||||
|
public String modifiedBy;
|
||||||
|
public String modifiedByResource;
|
||||||
|
public String occupantId;
|
||||||
|
Instant receivedAt;
|
||||||
|
|
||||||
|
// the version order is determined by the receivedAt
|
||||||
|
// the actual display time and display order comes from the parent MessageEntity
|
||||||
|
// the original has a receivedAt = null and stanzaId = null and inherits it's timestamp from
|
||||||
|
// it's parent
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
package im.conversations.android.database.entity;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.ForeignKey;
|
||||||
|
import androidx.room.Index;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
import eu.siacs.conversations.entities.MucOptions;
|
||||||
|
import eu.siacs.conversations.xmpp.Jid;
|
||||||
|
import im.conversations.android.database.model.PresenceShow;
|
||||||
|
import im.conversations.android.database.model.PresenceType;
|
||||||
|
|
||||||
|
@Entity(
|
||||||
|
tableName = "presence",
|
||||||
|
foreignKeys =
|
||||||
|
@ForeignKey(
|
||||||
|
entity = AccountEntity.class,
|
||||||
|
parentColumns = {"id"},
|
||||||
|
childColumns = {"accountId"},
|
||||||
|
onDelete = ForeignKey.CASCADE),
|
||||||
|
indices = {
|
||||||
|
@Index(
|
||||||
|
value = {"accountId", "address", "resource"},
|
||||||
|
unique = true)
|
||||||
|
})
|
||||||
|
public class PresenceEntity {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
public Long id;
|
||||||
|
|
||||||
|
@NonNull public Long accountId;
|
||||||
|
|
||||||
|
@NonNull public String address;
|
||||||
|
|
||||||
|
@Nullable public String resource;
|
||||||
|
|
||||||
|
@Nullable public PresenceType type;
|
||||||
|
|
||||||
|
@Nullable public PresenceShow show;
|
||||||
|
|
||||||
|
@Nullable public String status;
|
||||||
|
|
||||||
|
@Nullable public String vCardPhoto;
|
||||||
|
|
||||||
|
@Nullable public String occupantId;
|
||||||
|
|
||||||
|
@Nullable public MucOptions.Affiliation mucUserAffiliation;
|
||||||
|
|
||||||
|
@Nullable public MucOptions.Role mucUserRole;
|
||||||
|
|
||||||
|
@Nullable public Jid mucUserJid;
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
package im.conversations.android.database.entity;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.ForeignKey;
|
||||||
|
import androidx.room.Index;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
@Entity(
|
||||||
|
tableName = "message_reaction",
|
||||||
|
foreignKeys =
|
||||||
|
@ForeignKey(
|
||||||
|
entity = MessageEntity.class,
|
||||||
|
parentColumns = {"id"},
|
||||||
|
childColumns = {"messageEntityId"},
|
||||||
|
onDelete = ForeignKey.CASCADE),
|
||||||
|
indices = {@Index(value = "messageEntityId")})
|
||||||
|
public class ReactionEntity {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
public Long id;
|
||||||
|
|
||||||
|
@NonNull public Long messageEntityId;
|
||||||
|
|
||||||
|
public String stanzaId;
|
||||||
|
public String messageId;
|
||||||
|
public String reactionBy;
|
||||||
|
public String reactionByResource;
|
||||||
|
public String occupantId;
|
||||||
|
|
||||||
|
public Instant receivedAt;
|
||||||
|
|
||||||
|
public String reaction;
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
package im.conversations.android.database.entity;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.ForeignKey;
|
||||||
|
import androidx.room.Index;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
import im.conversations.android.database.model.Subscription;
|
||||||
|
|
||||||
|
@Entity(
|
||||||
|
tableName = "roster",
|
||||||
|
foreignKeys =
|
||||||
|
@ForeignKey(
|
||||||
|
entity = AccountEntity.class,
|
||||||
|
parentColumns = {"id"},
|
||||||
|
childColumns = {"accountId"},
|
||||||
|
onDelete = ForeignKey.CASCADE),
|
||||||
|
indices = {
|
||||||
|
@Index(
|
||||||
|
value = {"accountId", "address"},
|
||||||
|
unique = true)
|
||||||
|
})
|
||||||
|
public class RosterItemEntity {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
public Long id;
|
||||||
|
|
||||||
|
@NonNull public Long accountId;
|
||||||
|
|
||||||
|
@NonNull public String address;
|
||||||
|
|
||||||
|
public Subscription subscription;
|
||||||
|
|
||||||
|
public boolean ask;
|
||||||
|
|
||||||
|
public String name;
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package im.conversations.android.database.entity;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.ForeignKey;
|
||||||
|
import androidx.room.Index;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
|
||||||
|
@Entity(
|
||||||
|
tableName = "roster_group",
|
||||||
|
foreignKeys =
|
||||||
|
@ForeignKey(
|
||||||
|
entity = RosterItemEntity.class,
|
||||||
|
parentColumns = {"id"},
|
||||||
|
childColumns = {"rosterItemId"},
|
||||||
|
onDelete = ForeignKey.CASCADE),
|
||||||
|
indices = {@Index(value = "rosterItemId")})
|
||||||
|
public class RosterItemGroupEntity {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
public Long id;
|
||||||
|
|
||||||
|
@NonNull public Long rosterItemId;
|
||||||
|
|
||||||
|
public String name;
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package im.conversations.android.database.model;
|
||||||
|
|
||||||
|
public enum ChatType {
|
||||||
|
INDIVIDUAL,
|
||||||
|
MUC,
|
||||||
|
MUC_PM,
|
||||||
|
MULTICAST
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package im.conversations.android.database.model;
|
||||||
|
|
||||||
|
public class Connection {
|
||||||
|
|
||||||
|
public final String hostname;
|
||||||
|
public final int port;
|
||||||
|
public final boolean directTls;
|
||||||
|
|
||||||
|
public Connection(final String hostname, final int port, final boolean directTls) {
|
||||||
|
this.hostname = hostname;
|
||||||
|
this.port = port;
|
||||||
|
this.directTls = directTls;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package im.conversations.android.database.model;
|
||||||
|
|
||||||
|
public enum Modification {
|
||||||
|
ORIGINAl,
|
||||||
|
EDIT, // XEP-0308: Last Message Correction
|
||||||
|
RETRACTION, // XEP-0424: Message Retraction
|
||||||
|
MODERATION // XEP-0425: Message Moderation
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
package im.conversations.android.database.model;
|
||||||
|
|
||||||
|
public enum PartType {
|
||||||
|
TEXT,
|
||||||
|
FILE
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package im.conversations.android.database.model;
|
||||||
|
|
||||||
|
public enum PresenceShow {
|
||||||
|
CHAT,
|
||||||
|
AWAY,
|
||||||
|
XA,
|
||||||
|
DND
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package im.conversations.android.database.model;
|
||||||
|
|
||||||
|
public enum PresenceType {
|
||||||
|
UNAVAILABLE,
|
||||||
|
ERROR,
|
||||||
|
SUBSCRIBE
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
package im.conversations.android.database.model;
|
||||||
|
|
||||||
|
import com.google.common.base.Preconditions;
|
||||||
|
|
||||||
|
public class Proxy {
|
||||||
|
|
||||||
|
public final Type type;
|
||||||
|
public final String hostname;
|
||||||
|
public final int port;
|
||||||
|
|
||||||
|
public Proxy(final Type type, final String hostname, final int port) {
|
||||||
|
Preconditions.checkNotNull(type);
|
||||||
|
Preconditions.checkNotNull(hostname);
|
||||||
|
this.type = type;
|
||||||
|
this.hostname = hostname;
|
||||||
|
this.port = port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum Type {
|
||||||
|
SOCKS5
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package im.conversations.android.database.model;
|
||||||
|
|
||||||
|
public enum Subscription {
|
||||||
|
NONE,
|
||||||
|
TO,
|
||||||
|
FROM,
|
||||||
|
BOTH
|
||||||
|
}
|
Loading…
Reference in a new issue