mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-06-05 21:59:17 +02:00
improve search performance, use search text in query itself
This commit is contained in:
@@ -70,7 +70,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.github.SimpleMobileTools:Simple-Commons:449b24c6a4'
|
implementation 'com.github.SimpleMobileTools:Simple-Commons:edb874aa8f'
|
||||||
implementation 'androidx.multidex:multidex:2.0.1'
|
implementation 'androidx.multidex:multidex:2.0.1'
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
||||||
|
@@ -1212,7 +1212,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
|||||||
maxFetchedSearchTS = DateTime().plusYears(1).seconds()
|
maxFetchedSearchTS = DateTime().plusYears(1).seconds()
|
||||||
}
|
}
|
||||||
|
|
||||||
eventsHelper.getEvents(minFetchedSearchTS, maxFetchedSearchTS) { events ->
|
eventsHelper.getEvents(minFetchedSearchTS, maxFetchedSearchTS, searchQuery = text) { events ->
|
||||||
if (text == mLatestSearchQuery) {
|
if (text == mLatestSearchQuery) {
|
||||||
showSearchResultEvents(events, INITIAL_EVENTS)
|
showSearchResultEvents(events, INITIAL_EVENTS)
|
||||||
}
|
}
|
||||||
|
@@ -248,13 +248,27 @@ class EventsHelper(val context: Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getEvents(fromTS: Long, toTS: Long, eventId: Long = -1L, applyTypeFilter: Boolean = true, callback: (events: ArrayList<Event>) -> Unit) {
|
fun getEvents(
|
||||||
|
fromTS: Long,
|
||||||
|
toTS: Long,
|
||||||
|
eventId: Long = -1L,
|
||||||
|
applyTypeFilter: Boolean = true,
|
||||||
|
searchQuery: String = "",
|
||||||
|
callback: (events: ArrayList<Event>) -> Unit
|
||||||
|
) {
|
||||||
ensureBackgroundThread {
|
ensureBackgroundThread {
|
||||||
getEventsSync(fromTS, toTS, eventId, applyTypeFilter, callback)
|
getEventsSync(fromTS, toTS, eventId, applyTypeFilter, searchQuery, callback)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getEventsSync(fromTS: Long, toTS: Long, eventId: Long = -1L, applyTypeFilter: Boolean, callback: (events: ArrayList<Event>) -> Unit) {
|
fun getEventsSync(
|
||||||
|
fromTS: Long,
|
||||||
|
toTS: Long,
|
||||||
|
eventId: Long = -1L,
|
||||||
|
applyTypeFilter: Boolean,
|
||||||
|
searchQuery: String = "",
|
||||||
|
callback: (events: ArrayList<Event>) -> Unit
|
||||||
|
) {
|
||||||
val birthDayEventId = getLocalBirthdaysEventTypeId(createIfNotExists = false)
|
val birthDayEventId = getLocalBirthdaysEventTypeId(createIfNotExists = false)
|
||||||
val anniversaryEventId = getAnniversariesEventTypeId(createIfNotExists = false)
|
val anniversaryEventId = getAnniversariesEventTypeId(createIfNotExists = false)
|
||||||
|
|
||||||
@@ -268,7 +282,13 @@ class EventsHelper(val context: Context) {
|
|||||||
try {
|
try {
|
||||||
val typesList = context.config.getDisplayEventTypessAsList()
|
val typesList = context.config.getDisplayEventTypessAsList()
|
||||||
|
|
||||||
|
if (searchQuery.isEmpty()) {
|
||||||
events.addAll(eventsDB.getOneTimeEventsFromToWithTypes(toTS, fromTS, typesList).toMutableList() as ArrayList<Event>)
|
events.addAll(eventsDB.getOneTimeEventsFromToWithTypes(toTS, fromTS, typesList).toMutableList() as ArrayList<Event>)
|
||||||
|
} else {
|
||||||
|
events.addAll(
|
||||||
|
eventsDB.getOneTimeEventsFromToWithTypesForSearch(toTS, fromTS, typesList, "%$searchQuery%").toMutableList() as ArrayList<Event>
|
||||||
|
)
|
||||||
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -284,7 +304,7 @@ class EventsHelper(val context: Context) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
events.addAll(getRepeatableEventsFor(fromTS, toTS, eventId, applyTypeFilter))
|
events.addAll(getRepeatableEventsFor(fromTS, toTS, eventId, applyTypeFilter, searchQuery))
|
||||||
|
|
||||||
events = events
|
events = events
|
||||||
.asSequence()
|
.asSequence()
|
||||||
@@ -298,7 +318,10 @@ class EventsHelper(val context: Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
events.forEach {
|
events.forEach {
|
||||||
if (it.isTask()) updateIsTaskCompleted(it)
|
if (it.isTask()) {
|
||||||
|
updateIsTaskCompleted(it)
|
||||||
|
}
|
||||||
|
|
||||||
it.updateIsPastEvent()
|
it.updateIsPastEvent()
|
||||||
val originalEvent = eventsDB.getEventWithId(it.id!!)
|
val originalEvent = eventsDB.getEventWithId(it.id!!)
|
||||||
if (originalEvent != null &&
|
if (originalEvent != null &&
|
||||||
@@ -354,13 +377,16 @@ class EventsHelper(val context: Context) {
|
|||||||
return eventTypeId
|
return eventTypeId
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getRepeatableEventsFor(fromTS: Long, toTS: Long, eventId: Long = -1L, applyTypeFilter: Boolean = false): List<Event> {
|
fun getRepeatableEventsFor(fromTS: Long, toTS: Long, eventId: Long = -1L, applyTypeFilter: Boolean = false, searchQuery: String = ""): List<Event> {
|
||||||
val events = if (applyTypeFilter) {
|
val events = if (applyTypeFilter) {
|
||||||
val displayEventTypes = context.config.displayEventTypes
|
val displayEventTypes = context.config.displayEventTypes
|
||||||
if (displayEventTypes.isEmpty()) {
|
if (displayEventTypes.isEmpty()) {
|
||||||
return ArrayList()
|
return ArrayList()
|
||||||
} else {
|
} else if (searchQuery.isEmpty()) {
|
||||||
eventsDB.getRepeatableEventsOrTasksWithTypes(toTS, context.config.getDisplayEventTypessAsList()).toMutableList() as ArrayList<Event>
|
eventsDB.getRepeatableEventsOrTasksWithTypes(toTS, context.config.getDisplayEventTypessAsList()).toMutableList() as ArrayList<Event>
|
||||||
|
} else {
|
||||||
|
eventsDB.getRepeatableEventsOrTasksWithTypesForSearch(toTS, context.config.getDisplayEventTypessAsList(), "%$searchQuery%")
|
||||||
|
.toMutableList() as ArrayList<Event>
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (eventId == -1L) {
|
if (eventId == -1L) {
|
||||||
|
@@ -39,6 +39,9 @@ interface EventsDao {
|
|||||||
@Query("SELECT * FROM events WHERE start_ts <= :toTS AND end_ts >= :fromTS AND start_ts != 0 AND repeat_interval = 0 AND event_type IN (:eventTypeIds)")
|
@Query("SELECT * FROM events WHERE start_ts <= :toTS AND end_ts >= :fromTS AND start_ts != 0 AND repeat_interval = 0 AND event_type IN (:eventTypeIds)")
|
||||||
fun getOneTimeEventsFromToWithTypes(toTS: Long, fromTS: Long, eventTypeIds: List<Long>): List<Event>
|
fun getOneTimeEventsFromToWithTypes(toTS: Long, fromTS: Long, eventTypeIds: List<Long>): List<Event>
|
||||||
|
|
||||||
|
@Query("SELECT * FROM events WHERE start_ts <= :toTS AND end_ts >= :fromTS AND start_ts != 0 AND repeat_interval = 0 AND event_type IN (:eventTypeIds) AND (title LIKE :searchQuery OR location LIKE :searchQuery OR description LIKE :searchQuery)")
|
||||||
|
fun getOneTimeEventsFromToWithTypesForSearch(toTS: Long, fromTS: Long, eventTypeIds: List<Long>, searchQuery: String): List<Event>
|
||||||
|
|
||||||
@Query("SELECT * FROM events WHERE end_ts > :toTS AND repeat_interval = 0 AND event_type IN (:eventTypeIds) AND type = $TYPE_EVENT")
|
@Query("SELECT * FROM events WHERE end_ts > :toTS AND repeat_interval = 0 AND event_type IN (:eventTypeIds) AND type = $TYPE_EVENT")
|
||||||
fun getOneTimeFutureEventsWithTypes(toTS: Long, eventTypeIds: List<Long>): List<Event>
|
fun getOneTimeFutureEventsWithTypes(toTS: Long, eventTypeIds: List<Long>): List<Event>
|
||||||
|
|
||||||
@@ -51,6 +54,9 @@ interface EventsDao {
|
|||||||
@Query("SELECT * FROM events WHERE start_ts <= :toTS AND start_ts != 0 AND repeat_interval != 0 AND event_type IN (:eventTypeIds)")
|
@Query("SELECT * FROM events WHERE start_ts <= :toTS AND start_ts != 0 AND repeat_interval != 0 AND event_type IN (:eventTypeIds)")
|
||||||
fun getRepeatableEventsOrTasksWithTypes(toTS: Long, eventTypeIds: List<Long>): List<Event>
|
fun getRepeatableEventsOrTasksWithTypes(toTS: Long, eventTypeIds: List<Long>): List<Event>
|
||||||
|
|
||||||
|
@Query("SELECT * FROM events WHERE start_ts <= :toTS AND start_ts != 0 AND repeat_interval != 0 AND event_type IN (:eventTypeIds) AND (title LIKE :searchQuery OR location LIKE :searchQuery OR description LIKE :searchQuery)")
|
||||||
|
fun getRepeatableEventsOrTasksWithTypesForSearch(toTS: Long, eventTypeIds: List<Long>, searchQuery: String): List<Event>
|
||||||
|
|
||||||
@Query("SELECT * FROM events WHERE repeat_interval != 0 AND (repeat_limit == 0 OR repeat_limit > :currTS) AND event_type IN (:eventTypeIds) AND type = $TYPE_EVENT")
|
@Query("SELECT * FROM events WHERE repeat_interval != 0 AND (repeat_limit == 0 OR repeat_limit > :currTS) AND event_type IN (:eventTypeIds) AND type = $TYPE_EVENT")
|
||||||
fun getRepeatableFutureEventsWithTypes(currTS: Long, eventTypeIds: List<Long>): List<Event>
|
fun getRepeatableFutureEventsWithTypes(currTS: Long, eventTypeIds: List<Long>): List<Event>
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user