mirror of
https://github.com/SimpleMobileTools/Simple-SMS-Messenger.git
synced 2025-02-18 12:40:46 +01:00
create a db table for attachments
This commit is contained in:
parent
4cad413478
commit
0f33d3677b
@ -4,14 +4,20 @@ import android.content.Context
|
|||||||
import androidx.room.Database
|
import androidx.room.Database
|
||||||
import androidx.room.Room
|
import androidx.room.Room
|
||||||
import androidx.room.RoomDatabase
|
import androidx.room.RoomDatabase
|
||||||
|
import androidx.room.migration.Migration
|
||||||
|
import androidx.sqlite.db.SupportSQLiteDatabase
|
||||||
|
import com.simplemobiletools.smsmessenger.interfaces.AttachmentsDao
|
||||||
import com.simplemobiletools.smsmessenger.interfaces.ConversationsDao
|
import com.simplemobiletools.smsmessenger.interfaces.ConversationsDao
|
||||||
|
import com.simplemobiletools.smsmessenger.models.Attachment
|
||||||
import com.simplemobiletools.smsmessenger.models.Conversation
|
import com.simplemobiletools.smsmessenger.models.Conversation
|
||||||
|
|
||||||
@Database(entities = [(Conversation::class)], version = 1)
|
@Database(entities = [Conversation::class, Attachment::class], version = 2)
|
||||||
abstract class MessagesDatabase : RoomDatabase() {
|
abstract class MessagesDatabase : RoomDatabase() {
|
||||||
|
|
||||||
abstract fun ConversationsDao(): ConversationsDao
|
abstract fun ConversationsDao(): ConversationsDao
|
||||||
|
|
||||||
|
abstract fun AttachmentsDao(): AttachmentsDao
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private var db: MessagesDatabase? = null
|
private var db: MessagesDatabase? = null
|
||||||
|
|
||||||
@ -20,11 +26,20 @@ abstract class MessagesDatabase : RoomDatabase() {
|
|||||||
synchronized(MessagesDatabase::class) {
|
synchronized(MessagesDatabase::class) {
|
||||||
if (db == null) {
|
if (db == null) {
|
||||||
db = Room.databaseBuilder(context.applicationContext, MessagesDatabase::class.java, "conversations.db")
|
db = Room.databaseBuilder(context.applicationContext, MessagesDatabase::class.java, "conversations.db")
|
||||||
|
.fallbackToDestructiveMigration()
|
||||||
|
.addMigrations(MIGRATION_1_2)
|
||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return db!!
|
return db!!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val MIGRATION_1_2 = object : Migration(1, 2) {
|
||||||
|
override fun migrate(database: SupportSQLiteDatabase) {
|
||||||
|
database.execSQL("CREATE TABLE IF NOT EXISTS `attachments` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `message_id` INTEGER NOT NULL, `uri_string` TEXT NOT NULL, `mimetype` TEXT NOT NULL, `width` INTEGER NOT NULL, `height` INTEGER NOT NULL, `filename` TEXT NOT NULL)")
|
||||||
|
database.execSQL("CREATE UNIQUE INDEX `index_attachments_message_id` ON `attachments` (`message_id`)")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ import com.simplemobiletools.smsmessenger.R
|
|||||||
import com.simplemobiletools.smsmessenger.activities.ThreadActivity
|
import com.simplemobiletools.smsmessenger.activities.ThreadActivity
|
||||||
import com.simplemobiletools.smsmessenger.databases.MessagesDatabase
|
import com.simplemobiletools.smsmessenger.databases.MessagesDatabase
|
||||||
import com.simplemobiletools.smsmessenger.helpers.*
|
import com.simplemobiletools.smsmessenger.helpers.*
|
||||||
|
import com.simplemobiletools.smsmessenger.interfaces.AttachmentsDao
|
||||||
import com.simplemobiletools.smsmessenger.interfaces.ConversationsDao
|
import com.simplemobiletools.smsmessenger.interfaces.ConversationsDao
|
||||||
import com.simplemobiletools.smsmessenger.models.*
|
import com.simplemobiletools.smsmessenger.models.*
|
||||||
import com.simplemobiletools.smsmessenger.receivers.DirectReplyReceiver
|
import com.simplemobiletools.smsmessenger.receivers.DirectReplyReceiver
|
||||||
@ -41,6 +42,8 @@ fun Context.getMessagessDB() = MessagesDatabase.getInstance(this)
|
|||||||
|
|
||||||
val Context.conversationsDB: ConversationsDao get() = getMessagessDB().ConversationsDao()
|
val Context.conversationsDB: ConversationsDao get() = getMessagessDB().ConversationsDao()
|
||||||
|
|
||||||
|
val Context.attachmentsDB: AttachmentsDao get() = getMessagessDB().AttachmentsDao()
|
||||||
|
|
||||||
fun Context.getMessages(threadId: Int): ArrayList<Message> {
|
fun Context.getMessages(threadId: Int): ArrayList<Message> {
|
||||||
val uri = Sms.CONTENT_URI
|
val uri = Sms.CONTENT_URI
|
||||||
val projection = arrayOf(
|
val projection = arrayOf(
|
||||||
@ -257,15 +260,15 @@ fun Context.getMmsAttachment(id: Long): MessageAttachment {
|
|||||||
|
|
||||||
var attachmentName = ""
|
var attachmentName = ""
|
||||||
queryCursor(uri, projection, selection, selectionArgs, showErrors = true) { cursor ->
|
queryCursor(uri, projection, selection, selectionArgs, showErrors = true) { cursor ->
|
||||||
val partId = cursor.getStringValue(Mms._ID)
|
val partId = cursor.getLongValue(Mms._ID)
|
||||||
val mimetype = cursor.getStringValue(Mms.Part.CONTENT_TYPE)
|
val mimetype = cursor.getStringValue(Mms.Part.CONTENT_TYPE)
|
||||||
if (mimetype == "text/plain") {
|
if (mimetype == "text/plain") {
|
||||||
messageAttachment.text = cursor.getStringValue(Mms.Part.TEXT) ?: ""
|
messageAttachment.text = cursor.getStringValue(Mms.Part.TEXT) ?: ""
|
||||||
} else if (mimetype.startsWith("image/") || mimetype.startsWith("video/")) {
|
} else if (mimetype.startsWith("image/") || mimetype.startsWith("video/")) {
|
||||||
val attachment = Attachment(Uri.withAppendedPath(uri, partId).toString(), mimetype, 0, 0, "")
|
val attachment = Attachment(partId, id, Uri.withAppendedPath(uri, partId.toString()).toString(), mimetype, 0, 0, "")
|
||||||
messageAttachment.attachments.add(attachment)
|
messageAttachment.attachments.add(attachment)
|
||||||
} else if (mimetype != "application/smil") {
|
} else if (mimetype != "application/smil") {
|
||||||
val attachment = Attachment(Uri.withAppendedPath(uri, partId).toString(), mimetype, 0, 0, attachmentName)
|
val attachment = Attachment(partId, id, Uri.withAppendedPath(uri, partId.toString()).toString(), mimetype, 0, 0, attachmentName)
|
||||||
messageAttachment.attachments.add(attachment)
|
messageAttachment.attachments.add(attachment)
|
||||||
} else {
|
} else {
|
||||||
val text = cursor.getStringValue(Mms.Part.TEXT)
|
val text = cursor.getStringValue(Mms.Part.TEXT)
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
package com.simplemobiletools.smsmessenger.interfaces
|
||||||
|
|
||||||
|
import androidx.room.Dao
|
||||||
|
import androidx.room.Query
|
||||||
|
import com.simplemobiletools.smsmessenger.models.Attachment
|
||||||
|
|
||||||
|
@Dao
|
||||||
|
interface AttachmentsDao {
|
||||||
|
@Query("SELECT * FROM attachments")
|
||||||
|
fun getAll(): List<Attachment>
|
||||||
|
}
|
@ -1,7 +1,20 @@
|
|||||||
package com.simplemobiletools.smsmessenger.models
|
package com.simplemobiletools.smsmessenger.models
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import androidx.room.ColumnInfo
|
||||||
|
import androidx.room.Entity
|
||||||
|
import androidx.room.Index
|
||||||
|
import androidx.room.PrimaryKey
|
||||||
|
|
||||||
|
@Entity(tableName = "attachments", indices = [(Index(value = ["message_id"], unique = true))])
|
||||||
|
data class Attachment(
|
||||||
|
@PrimaryKey(autoGenerate = true) var id: Long?,
|
||||||
|
@ColumnInfo(name = "message_id") var messageId: Long,
|
||||||
|
@ColumnInfo(name = "uri_string") var uriString: String,
|
||||||
|
@ColumnInfo(name = "mimetype") var mimetype: String,
|
||||||
|
@ColumnInfo(name = "width") var width: Int,
|
||||||
|
@ColumnInfo(name = "height") var height: Int,
|
||||||
|
@ColumnInfo(name = "filename") var filename: String) {
|
||||||
|
|
||||||
data class Attachment(var uriString: String, var mimetype: String, var width: Int, var height: Int, var filename: String) {
|
|
||||||
fun getUri() = Uri.parse(uriString)
|
fun getUri() = Uri.parse(uriString)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user