Added attachment subsequence

This commit is contained in:
M66B 2020-08-07 15:23:07 +02:00
parent 011b2884e0
commit dacdc16559
6 changed files with 2316 additions and 7 deletions

File diff suppressed because it is too large Load Diff

View File

@ -62,6 +62,7 @@ public class AdapterAttachment extends RecyclerView.Adapter<AdapterAttachment.Vi
private boolean readonly;
private boolean debug;
private int dp12;
private List<EntityAttachment> items = new ArrayList<>();
@ -111,6 +112,10 @@ public class AdapterAttachment extends RecyclerView.Adapter<AdapterAttachment.Vi
private void bindTo(EntityAttachment attachment) {
view.setAlpha(!attachment.isAttachment() ? Helper.LOW_LIGHT : 1.0f);
ViewGroup.MarginLayoutParams lparam = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
lparam.setMarginStart(attachment.subsequence == null ? 0 : dp12);
view.setLayoutParams(lparam);
ibDelete.setVisibility(readonly ? View.GONE : View.VISIBLE);
int resid = 0;
@ -316,6 +321,7 @@ public class AdapterAttachment extends RecyclerView.Adapter<AdapterAttachment.Vi
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
this.debug = prefs.getBoolean("debug", false);
this.dp12 = Helper.dp2pixels(context, 12);
setHasStableIds(true);

View File

@ -62,7 +62,7 @@ import io.requery.android.database.sqlite.SQLiteDatabase;
// https://developer.android.com/topic/libraries/architecture/room.html
@Database(
version = 172,
version = 173,
entities = {
EntityIdentity.class,
EntityAccount.class,
@ -1699,6 +1699,15 @@ public abstract class DB extends RoomDatabase {
Log.i("DB migration from version " + startVersion + " to " + endVersion);
db.execSQL("ALTER TABLE `account` ADD COLUMN `use_received` INTEGER NOT NULL DEFAULT 0");
}
})
.addMigrations(new Migration(172, 173) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase db) {
Log.i("DB migration from version " + startVersion + " to " + endVersion);
db.execSQL("ALTER TABLE `attachment` ADD COLUMN `subsequence` INTEGER");
db.execSQL("DROP INDEX `index_attachment_message_sequence`");
db.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_attachment_message_sequence_subsequence` ON `attachment` (`message`, `sequence`, `subsequence`)");
}
});
}

View File

@ -30,7 +30,7 @@ import java.util.List;
public interface DaoAttachment {
@Query("SELECT * FROM attachment" +
" WHERE message = :message" +
" ORDER BY sequence")
" ORDER BY sequence, subsequence")
LiveData<List<EntityAttachment>> liveAttachments(long message);
@Query("SELECT ifnull(MAX(sequence), 0)" +
@ -40,7 +40,7 @@ public interface DaoAttachment {
@Query("SELECT * FROM attachment" +
" WHERE message = :message" +
" ORDER BY sequence")
" ORDER BY sequence, subsequence")
List<EntityAttachment> getAttachments(long message);
@Query("SELECT * FROM attachment" +

View File

@ -45,7 +45,7 @@ import static androidx.room.ForeignKey.CASCADE;
},
indices = {
@Index(value = {"message"}),
@Index(value = {"message", "sequence"}, unique = true),
@Index(value = {"message", "sequence", "subsequence"}, unique = true),
@Index(value = {"message", "cid"})
}
)
@ -67,6 +67,7 @@ public class EntityAttachment {
public Long message;
@NonNull
public Integer sequence;
public Integer subsequence; // embedded messages
public String name;
@NonNull
public String type;

View File

@ -1954,12 +1954,13 @@ public class MessageHelper {
MessageHelper helper = new MessageHelper(imessage, context);
MessageHelper.MessageParts parts = helper.getMessageParts();
int sequence = db.attachment().getAttachmentSequence(local.message) + 1;
int subsequence = 1;
for (AttachmentPart epart : parts.getAttachmentParts())
try {
Log.i("Embedded attachment seq=" + local.sequence + ":" + sequence);
Log.i("Embedded attachment seq=" + local.sequence + ":" + subsequence);
epart.attachment.message = local.message;
epart.attachment.sequence = sequence++;
epart.attachment.sequence = local.sequence;
epart.attachment.subsequence = subsequence++;
epart.attachment.id = db.attachment().insertAttachment(epart.attachment);
File efile = epart.attachment.getFile(context);