mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-02-17 04:10:45 +01:00
improve search performance, use search text in query itself
This commit is contained in:
parent
e40fbb9c77
commit
0d7f08786d
@ -70,7 +70,7 @@ android {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.github.SimpleMobileTools:Simple-Commons:449b24c6a4'
|
||||
implementation 'com.github.SimpleMobileTools:Simple-Commons:edb874aa8f'
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
||||
|
@ -1212,7 +1212,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
maxFetchedSearchTS = DateTime().plusYears(1).seconds()
|
||||
}
|
||||
|
||||
eventsHelper.getEvents(minFetchedSearchTS, maxFetchedSearchTS) { events ->
|
||||
eventsHelper.getEvents(minFetchedSearchTS, maxFetchedSearchTS, searchQuery = text) { events ->
|
||||
if (text == mLatestSearchQuery) {
|
||||
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 {
|
||||
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 anniversaryEventId = getAnniversariesEventTypeId(createIfNotExists = false)
|
||||
|
||||
@ -268,7 +282,13 @@ class EventsHelper(val context: Context) {
|
||||
try {
|
||||
val typesList = context.config.getDisplayEventTypessAsList()
|
||||
|
||||
events.addAll(eventsDB.getOneTimeEventsFromToWithTypes(toTS, fromTS, typesList).toMutableList() as ArrayList<Event>)
|
||||
if (searchQuery.isEmpty()) {
|
||||
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) {
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
.asSequence()
|
||||
@ -298,7 +318,10 @@ class EventsHelper(val context: Context) {
|
||||
}
|
||||
|
||||
events.forEach {
|
||||
if (it.isTask()) updateIsTaskCompleted(it)
|
||||
if (it.isTask()) {
|
||||
updateIsTaskCompleted(it)
|
||||
}
|
||||
|
||||
it.updateIsPastEvent()
|
||||
val originalEvent = eventsDB.getEventWithId(it.id!!)
|
||||
if (originalEvent != null &&
|
||||
@ -354,13 +377,16 @@ class EventsHelper(val context: Context) {
|
||||
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 displayEventTypes = context.config.displayEventTypes
|
||||
if (displayEventTypes.isEmpty()) {
|
||||
return ArrayList()
|
||||
} else {
|
||||
} else if (searchQuery.isEmpty()) {
|
||||
eventsDB.getRepeatableEventsOrTasksWithTypes(toTS, context.config.getDisplayEventTypessAsList()).toMutableList() as ArrayList<Event>
|
||||
} else {
|
||||
eventsDB.getRepeatableEventsOrTasksWithTypesForSearch(toTS, context.config.getDisplayEventTypessAsList(), "%$searchQuery%")
|
||||
.toMutableList() as ArrayList<Event>
|
||||
}
|
||||
} else {
|
||||
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)")
|
||||
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")
|
||||
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)")
|
||||
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")
|
||||
fun getRepeatableFutureEventsWithTypes(currTS: Long, eventTypeIds: List<Long>): List<Event>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user