mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-03-22 06:10:09 +01:00
adding some initial task related code
This commit is contained in:
parent
565c0439a3
commit
6113ab55b8
@ -13,13 +13,15 @@ import com.simplemobiletools.calendar.pro.helpers.Converters
|
|||||||
import com.simplemobiletools.calendar.pro.helpers.REGULAR_EVENT_TYPE_ID
|
import com.simplemobiletools.calendar.pro.helpers.REGULAR_EVENT_TYPE_ID
|
||||||
import com.simplemobiletools.calendar.pro.interfaces.EventTypesDao
|
import com.simplemobiletools.calendar.pro.interfaces.EventTypesDao
|
||||||
import com.simplemobiletools.calendar.pro.interfaces.EventsDao
|
import com.simplemobiletools.calendar.pro.interfaces.EventsDao
|
||||||
|
import com.simplemobiletools.calendar.pro.interfaces.TasksDao
|
||||||
import com.simplemobiletools.calendar.pro.interfaces.WidgetsDao
|
import com.simplemobiletools.calendar.pro.interfaces.WidgetsDao
|
||||||
import com.simplemobiletools.calendar.pro.models.Event
|
import com.simplemobiletools.calendar.pro.models.Event
|
||||||
import com.simplemobiletools.calendar.pro.models.EventType
|
import com.simplemobiletools.calendar.pro.models.EventType
|
||||||
|
import com.simplemobiletools.calendar.pro.models.Task
|
||||||
import com.simplemobiletools.calendar.pro.models.Widget
|
import com.simplemobiletools.calendar.pro.models.Widget
|
||||||
import java.util.concurrent.Executors
|
import java.util.concurrent.Executors
|
||||||
|
|
||||||
@Database(entities = [Event::class, EventType::class, Widget::class], version = 5)
|
@Database(entities = [Event::class, EventType::class, Widget::class, Task::class], version = 6)
|
||||||
@TypeConverters(Converters::class)
|
@TypeConverters(Converters::class)
|
||||||
abstract class EventsDatabase : RoomDatabase() {
|
abstract class EventsDatabase : RoomDatabase() {
|
||||||
|
|
||||||
@ -29,6 +31,8 @@ abstract class EventsDatabase : RoomDatabase() {
|
|||||||
|
|
||||||
abstract fun WidgetsDao(): WidgetsDao
|
abstract fun WidgetsDao(): WidgetsDao
|
||||||
|
|
||||||
|
abstract fun TasksDao(): TasksDao
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private var db: EventsDatabase? = null
|
private var db: EventsDatabase? = null
|
||||||
|
|
||||||
@ -47,6 +51,7 @@ abstract class EventsDatabase : RoomDatabase() {
|
|||||||
.addMigrations(MIGRATION_2_3)
|
.addMigrations(MIGRATION_2_3)
|
||||||
.addMigrations(MIGRATION_3_4)
|
.addMigrations(MIGRATION_3_4)
|
||||||
.addMigrations(MIGRATION_4_5)
|
.addMigrations(MIGRATION_4_5)
|
||||||
|
.addMigrations(MIGRATION_5_6)
|
||||||
.build()
|
.build()
|
||||||
db!!.openHelper.setWriteAheadLoggingEnabled(true)
|
db!!.openHelper.setWriteAheadLoggingEnabled(true)
|
||||||
}
|
}
|
||||||
@ -103,5 +108,14 @@ abstract class EventsDatabase : RoomDatabase() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val MIGRATION_5_6 = object : Migration(5, 6) {
|
||||||
|
override fun migrate(database: SupportSQLiteDatabase) {
|
||||||
|
database.apply {
|
||||||
|
execSQL("CREATE TABLE IF NOT EXISTS `tasks` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `start_ts` INTEGER NOT NULL, `title` TEXT NOT NULL, `description` TEXT NOT NULL, `import_id` TEXT NOT NULL, `time_zone` TEXT NOT NULL, `flags` INTEGER NOT NULL, `event_type` INTEGER NOT NULL, `last_updated` INTEGER NOT NULL, `source` TEXT NOT NULL, `color` INTEGER NOT NULL)")
|
||||||
|
execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_tasks_id` ON `tasks` (`id`)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,7 @@ import com.simplemobiletools.calendar.pro.helpers.*
|
|||||||
import com.simplemobiletools.calendar.pro.helpers.Formatter
|
import com.simplemobiletools.calendar.pro.helpers.Formatter
|
||||||
import com.simplemobiletools.calendar.pro.interfaces.EventTypesDao
|
import com.simplemobiletools.calendar.pro.interfaces.EventTypesDao
|
||||||
import com.simplemobiletools.calendar.pro.interfaces.EventsDao
|
import com.simplemobiletools.calendar.pro.interfaces.EventsDao
|
||||||
|
import com.simplemobiletools.calendar.pro.interfaces.TasksDao
|
||||||
import com.simplemobiletools.calendar.pro.interfaces.WidgetsDao
|
import com.simplemobiletools.calendar.pro.interfaces.WidgetsDao
|
||||||
import com.simplemobiletools.calendar.pro.models.*
|
import com.simplemobiletools.calendar.pro.models.*
|
||||||
import com.simplemobiletools.calendar.pro.receivers.CalDAVSyncReceiver
|
import com.simplemobiletools.calendar.pro.receivers.CalDAVSyncReceiver
|
||||||
@ -48,6 +49,7 @@ val Context.config: Config get() = Config.newInstance(applicationContext)
|
|||||||
val Context.eventsDB: EventsDao get() = EventsDatabase.getInstance(applicationContext).EventsDao()
|
val Context.eventsDB: EventsDao get() = EventsDatabase.getInstance(applicationContext).EventsDao()
|
||||||
val Context.eventTypesDB: EventTypesDao get() = EventsDatabase.getInstance(applicationContext).EventTypesDao()
|
val Context.eventTypesDB: EventTypesDao get() = EventsDatabase.getInstance(applicationContext).EventTypesDao()
|
||||||
val Context.widgetsDB: WidgetsDao get() = EventsDatabase.getInstance(applicationContext).WidgetsDao()
|
val Context.widgetsDB: WidgetsDao get() = EventsDatabase.getInstance(applicationContext).WidgetsDao()
|
||||||
|
val Context.tasksDB: TasksDao get() = EventsDatabase.getInstance(applicationContext).TasksDao()
|
||||||
val Context.eventsHelper: EventsHelper get() = EventsHelper(this)
|
val Context.eventsHelper: EventsHelper get() = EventsHelper(this)
|
||||||
val Context.calDAVHelper: CalDAVHelper get() = CalDAVHelper(this)
|
val Context.calDAVHelper: CalDAVHelper get() = CalDAVHelper(this)
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ const val REPEAT_ORDER_WEEKDAY = 4 // i.e. every 4th sunday
|
|||||||
|
|
||||||
// special event flags
|
// special event flags
|
||||||
const val FLAG_ALL_DAY = 1
|
const val FLAG_ALL_DAY = 1
|
||||||
const val FLAG_IS_PAST_EVENT = 2
|
const val FLAG_IS_IN_PAST = 2
|
||||||
const val FLAG_MISSING_YEAR = 4
|
const val FLAG_MISSING_YEAR = 4
|
||||||
|
|
||||||
// constants related to ICS file exporting / importing
|
// constants related to ICS file exporting / importing
|
||||||
|
@ -0,0 +1,16 @@
|
|||||||
|
package com.simplemobiletools.calendar.pro.interfaces
|
||||||
|
|
||||||
|
import androidx.room.Dao
|
||||||
|
import androidx.room.Insert
|
||||||
|
import androidx.room.OnConflictStrategy
|
||||||
|
import androidx.room.Query
|
||||||
|
import com.simplemobiletools.calendar.pro.models.Task
|
||||||
|
|
||||||
|
@Dao
|
||||||
|
interface TasksDao {
|
||||||
|
@Query("SELECT * FROM tasks")
|
||||||
|
fun getAllTasks(): List<Task>
|
||||||
|
|
||||||
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
|
fun insertOrUpdate(task: Task): Long
|
||||||
|
}
|
@ -39,7 +39,7 @@ data class Event(
|
|||||||
@ColumnInfo(name = "last_updated") var lastUpdated: Long = 0L,
|
@ColumnInfo(name = "last_updated") var lastUpdated: Long = 0L,
|
||||||
@ColumnInfo(name = "source") var source: String = SOURCE_SIMPLE_CALENDAR,
|
@ColumnInfo(name = "source") var source: String = SOURCE_SIMPLE_CALENDAR,
|
||||||
@ColumnInfo(name = "availability") var availability: Int = 0,
|
@ColumnInfo(name = "availability") var availability: Int = 0,
|
||||||
var color: Int = 0,
|
@ColumnInfo(name = "color") var color: Int = 0
|
||||||
) : Serializable {
|
) : Serializable {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@ -48,8 +48,7 @@ data class Event(
|
|||||||
|
|
||||||
fun addIntervalTime(original: Event) {
|
fun addIntervalTime(original: Event) {
|
||||||
val oldStart = Formatter.getDateTimeFromTS(startTS)
|
val oldStart = Formatter.getDateTimeFromTS(startTS)
|
||||||
val newStart: DateTime
|
val newStart = when (repeatInterval) {
|
||||||
newStart = when (repeatInterval) {
|
|
||||||
DAY -> oldStart.plusDays(1)
|
DAY -> oldStart.plusDays(1)
|
||||||
else -> {
|
else -> {
|
||||||
when {
|
when {
|
||||||
@ -192,9 +191,9 @@ data class Event(
|
|||||||
}
|
}
|
||||||
|
|
||||||
var isPastEvent: Boolean
|
var isPastEvent: Boolean
|
||||||
get() = flags and FLAG_IS_PAST_EVENT != 0
|
get() = flags and FLAG_IS_IN_PAST != 0
|
||||||
set(isPastEvent) {
|
set(isPastEvent) {
|
||||||
flags = flags.addBitIf(isPastEvent, FLAG_IS_PAST_EVENT)
|
flags = flags.addBitIf(isPastEvent, FLAG_IS_IN_PAST)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getTimeZoneString(): String {
|
fun getTimeZoneString(): String {
|
||||||
|
@ -0,0 +1,47 @@
|
|||||||
|
package com.simplemobiletools.calendar.pro.models
|
||||||
|
|
||||||
|
import androidx.room.ColumnInfo
|
||||||
|
import androidx.room.Entity
|
||||||
|
import androidx.room.Index
|
||||||
|
import androidx.room.PrimaryKey
|
||||||
|
import com.simplemobiletools.calendar.pro.extensions.seconds
|
||||||
|
import com.simplemobiletools.calendar.pro.helpers.*
|
||||||
|
import com.simplemobiletools.commons.extensions.addBitIf
|
||||||
|
import java.io.Serializable
|
||||||
|
|
||||||
|
@Entity(tableName = "tasks", indices = [(Index(value = ["id"], unique = true))])
|
||||||
|
data class Task(
|
||||||
|
@PrimaryKey(autoGenerate = true) var id: Long?,
|
||||||
|
@ColumnInfo(name = "start_ts") var startTS: Long = 0L,
|
||||||
|
@ColumnInfo(name = "title") var title: String = "",
|
||||||
|
@ColumnInfo(name = "description") var description: String = "",
|
||||||
|
@ColumnInfo(name = "import_id") var importId: String = "",
|
||||||
|
@ColumnInfo(name = "time_zone") var timeZone: String = "",
|
||||||
|
@ColumnInfo(name = "flags") var flags: Int = 0,
|
||||||
|
@ColumnInfo(name = "event_type") var eventType: Long = REGULAR_EVENT_TYPE_ID,
|
||||||
|
@ColumnInfo(name = "last_updated") var lastUpdated: Long = 0L,
|
||||||
|
@ColumnInfo(name = "source") var source: String = SOURCE_SIMPLE_CALENDAR,
|
||||||
|
@ColumnInfo(name = "color") var color: Int = 0
|
||||||
|
) : Serializable {
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private const val serialVersionUID = -32456795132345616L
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getIsAllDay() = flags and FLAG_ALL_DAY != 0
|
||||||
|
|
||||||
|
// properly return the start time of all-day tasks as midnight
|
||||||
|
fun getTaskStartTS(): Long {
|
||||||
|
return if (getIsAllDay()) {
|
||||||
|
Formatter.getDateTimeFromTS(startTS).withTime(0, 0, 0, 0).seconds()
|
||||||
|
} else {
|
||||||
|
startTS
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var isPastTask: Boolean
|
||||||
|
get() = flags and FLAG_IS_IN_PAST != 0
|
||||||
|
set(isPastTask) {
|
||||||
|
flags = flags.addBitIf(isPastTask, FLAG_IS_IN_PAST)
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user