Convert Tag to data class

pull/2906/head
Alex Baker 2 weeks ago
parent ad833b5f49
commit 64e05c9f8f

@ -10,13 +10,10 @@ import org.junit.Assert.assertTrue
import org.junit.Test
import org.tasks.data.dao.TagDao
import org.tasks.data.dao.TagDataDao
import org.tasks.data.entity.Tag
import org.tasks.data.entity.TagData
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.makers.TagMaker.TAGDATA
import org.tasks.makers.TagMaker.TAGUID
import org.tasks.makers.TagMaker.TASK
import org.tasks.makers.TagMaker.newTag
import org.tasks.makers.TaskMaker.ID
import org.tasks.makers.TaskMaker.newTask
import javax.inject.Inject
@ -71,8 +68,8 @@ class TagDataDaoTest : InjectingTestCase() {
taskDao.createNew(taskTwo)
val tagOne = TagData(name = "one").let { it.copy(id = tagDataDao.insert(it)) }
val tagTwo = TagData(name = "two").let { it.copy(id = tagDataDao.insert(it)) }
tagDao.insert(newTag(with(TAGDATA, tagOne), with(TASK, taskOne)))
tagDao.insert(newTag(with(TAGDATA, tagTwo), with(TASK, taskTwo)))
tagDao.insert(Tag(task = taskOne.id, taskUid = taskOne.uuid, tagUid = tagOne.remoteId))
tagDao.insert(Tag(task = taskTwo.id, taskUid = taskTwo.uuid, tagUid = tagTwo.remoteId))
assertEquals(listOf(tagOne), tagDataDao.getTagDataForTask(taskOne.id))
}
@ -133,7 +130,7 @@ class TagDataDaoTest : InjectingTestCase() {
val task = newTask(with(ID, taskId))
taskDao.createNew(task)
for (tag in tags) {
tagDao.insert(newTag(with(TASK, task), with(TAGUID, tag)))
tagDao.insert(Tag(task = task.id, taskUid = task.uuid, tagUid = tag))
}
}
}

@ -13,10 +13,10 @@ import org.tasks.data.dao.TagDao
import org.tasks.data.dao.TagDataDao
import org.tasks.data.dao.UpgraderDao
import org.tasks.data.entity.CaldavTask
import org.tasks.data.entity.Tag
import org.tasks.data.entity.TagData
import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule
import org.tasks.makers.TagMaker
import org.tasks.makers.TaskMaker
import javax.inject.Inject
@ -38,8 +38,8 @@ class UpgraderDaoTests : InjectingTestCase() {
val two = TagData()
tagDataDao.insert(one)
tagDataDao.insert(two)
tagDao.insert(TagMaker.newTag(MakeItEasy.with(TagMaker.TASK, task), MakeItEasy.with(TagMaker.TAGDATA, one)))
tagDao.insert(TagMaker.newTag(MakeItEasy.with(TagMaker.TASK, task), MakeItEasy.with(TagMaker.TAGDATA, two)))
tagDao.insert(Tag(task = task.id, taskUid = task.uuid, tagUid = one.remoteId))
tagDao.insert(Tag(task = task.id, taskUid = task.uuid, tagUid = two.remoteId))
caldavDao.insert(CaldavTask(task = task.id, calendar = "calendar"))
assertEquals(listOf(task.id), upgraderDao.tasksWithTags())
}
@ -50,7 +50,7 @@ class UpgraderDaoTests : InjectingTestCase() {
taskDao.createNew(task)
val tag = TagData()
tagDataDao.insert(tag)
tagDao.insert(TagMaker.newTag(MakeItEasy.with(TagMaker.TASK, task), MakeItEasy.with(TagMaker.TAGDATA, tag)))
tagDao.insert(Tag(task = task.id, taskUid = task.uuid, tagUid = tag.remoteId))
assertTrue(upgraderDao.tasksWithTags().isEmpty())
}

@ -20,6 +20,7 @@ import org.tasks.data.dao.TagDao
import org.tasks.data.dao.TagDataDao
import org.tasks.data.entity.Alarm
import org.tasks.data.entity.Alarm.Companion.TYPE_SNOOZE
import org.tasks.data.entity.Tag
import org.tasks.data.entity.TagData
import org.tasks.data.entity.Task
import org.tasks.injection.ProductionModule
@ -27,9 +28,6 @@ import org.tasks.makers.CaldavTaskMaker
import org.tasks.makers.CaldavTaskMaker.CALENDAR
import org.tasks.makers.CaldavTaskMaker.REMOTE_ID
import org.tasks.makers.CaldavTaskMaker.newCaldavTask
import org.tasks.makers.TagMaker.TAGDATA
import org.tasks.makers.TagMaker.TASK
import org.tasks.makers.TagMaker.newTag
import org.tasks.makers.TaskMaker
import org.tasks.makers.TaskMaker.COLLAPSED
import org.tasks.makers.TaskMaker.ORDER
@ -302,9 +300,9 @@ class OpenTasksPropertiesTests : OpenTasksTest() {
}
private suspend fun insertTag(task: Task, name: String) =
TagData(name = name)
.apply { tagDataDao.insert(this) }
.let { tagDao.insert(newTag(with(TASK, task), with(TAGDATA, it))) }
TagData(name = name)
.apply { tagDataDao.insert(this) }
.let { tagDao.insert(Tag(task = task.id, taskUid = task.uuid, tagUid = it.remoteId)) }
companion object {
private val CHICAGO = TimeZone.getTimeZone("America/Chicago")

@ -201,7 +201,14 @@ class TaskCreator @Inject constructor(
for (tag in task.tags) {
val tagData = tagDataDao.getTagByName(tag)
?: TagData(name = tag).also { tagDataDao.insert(it) }
tagDao.insert(Tag(task, tagData))
tagDao.insert(
Tag(
task = task.id,
taskUid = task.uuid,
name = tagData.name,
tagUid = tagData.remoteId
)
)
}
}

@ -64,7 +64,16 @@ class TaskDuplicator @Inject constructor(
val newId = taskDao.createNew(clone)
val tags = tagDataDao.getTagDataForTask(task.id)
if (tags.isNotEmpty()) {
tagDao.insert(tags.map { Tag(clone, it) })
tagDao.insert(
tags.map {
Tag(
task = clone.id,
taskUid = clone.uuid,
name = it.name,
tagUid = it.remoteId
)
}
)
}
val googleTask = googleTaskDao.getByTaskId(task.id)
val caldavTask = caldavDao.getTask(task.id)

@ -258,10 +258,13 @@ class TasksJsonImporter @Inject constructor(
}
for (tag in backup.tags) {
val tagData = findTagData(tag) ?: continue
tag.task = taskId
tag.tagUid = tagData.remoteId
tag.setTaskUid(taskUuid)
tagDao.insert(tag)
tagDao.insert(
tag.copy(
task = taskId,
taskUid = task.remoteId,
tagUid = tagData.remoteId
)
)
}
backup.geofences?.forEach { geofence ->
locationDao.insert(

@ -1,35 +0,0 @@
package org.tasks.makers
import com.natpryce.makeiteasy.Instantiator
import com.natpryce.makeiteasy.Property
import com.natpryce.makeiteasy.Property.newProperty
import com.natpryce.makeiteasy.PropertyLookup
import com.natpryce.makeiteasy.PropertyValue
import org.tasks.data.entity.Task
import org.tasks.data.entity.Tag
import org.tasks.data.entity.TagData
import org.tasks.makers.Maker.make
object TagMaker {
val TAGDATA: Property<Tag, TagData?> = newProperty()
val TASK: Property<Tag, Task?> = newProperty()
val TAGUID: Property<Tag, String?> = newProperty()
private val instantiator = Instantiator { lookup: PropertyLookup<Tag> ->
val tag = Tag()
val task = lookup.valueOf(TASK, null as Task?)!!
tag.task = task.id
tag.setTaskUid(task.uuid)
tag.tagUid = lookup.valueOf(TAGUID, null as String?)
val tagData = lookup.valueOf(TAGDATA, null as TagData?)
if (tagData != null) {
tag.tagUid = tagData.remoteId
}
assert(tag.tagUid != null)
tag
}
fun newTag(vararg properties: PropertyValue<in Tag?, *>): Tag {
return make(instantiator, *properties)
}
}

@ -1,9 +1,13 @@
package org.tasks.data.dao
import androidx.room.*
import org.tasks.data.entity.Task
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Transaction
import org.tasks.data.entity.Tag
import org.tasks.data.entity.TagData
import org.tasks.data.entity.Task
@Dao
abstract class TagDao {
@ -44,7 +48,16 @@ abstract class TagDao {
suspend fun insert(task: Task, tags: Collection<TagData>) {
if (!tags.isEmpty()) {
insert(tags.map { Tag(task, it) })
insert(
tags.map {
Tag(
task = task.id,
taskUid = task.uuid,
name = it.name,
tagUid = it.remoteId
)
}
)
}
}
}

@ -93,7 +93,16 @@ abstract class TagDataDao {
val added = selected subtract getTagDataForTask(task.id)
if (added.isNotEmpty()) {
modified.add(task.id)
insert(added.map { Tag(task, it) })
insert(
added.map {
Tag(
task = task.id,
taskUid = task.uuid,
name = it.name,
tagUid = it.remoteId
)
}
)
}
}
return ArrayList(modified)

@ -3,7 +3,6 @@ package org.tasks.data.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.Ignore
import androidx.room.PrimaryKey
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
@ -21,51 +20,22 @@ import org.tasks.data.db.Table
),
]
)
class Tag {
data class Tag(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "_id")
@Transient
var id: Long = 0
val id: Long = 0,
@ColumnInfo(name = "task", index = true)
@Transient
var task: Long = 0
val task: Long = 0,
@ColumnInfo(name = "name")
var name: String? = null
val name: String? = null,
@ColumnInfo(name = "tag_uid")
var tagUid: String? = null
val tagUid: String? = null,
@ColumnInfo(name = "task_uid")
@Transient
private var taskUid: String? = null
constructor()
@Ignore
constructor(task: Task, tagData: TagData) : this(task, tagData.name, tagData.remoteId)
@Ignore
constructor(task: Task, name: String?, tagUid: String?) : this(task.id, task.uuid, name, tagUid)
@Ignore
constructor(taskId: Long, taskUid: String?, name: String?, tagUid: String?) {
task = taskId
this.taskUid = taskUid
this.name = name
this.tagUid = tagUid
}
fun getTaskUid(): String = taskUid!!
fun setTaskUid(taskUid: String) {
this.taskUid = taskUid
}
override fun toString(): String =
"Tag(id=$id, task=$task, name=$name, tagUid=$tagUid, taskUid=$taskUid)"
val taskUid: String? = null,
) {
companion object {
const val KEY = "tags-tag" // $NON-NLS-1$
@JvmField val TABLE = Table("tags")

Loading…
Cancel
Save