|
|
|
|
@ -20,6 +20,7 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow |
|
|
|
|
import net.pokeranalytics.android.util.NULL_TEXT |
|
|
|
|
import net.pokeranalytics.android.util.UserDefaults |
|
|
|
|
import net.pokeranalytics.android.util.extensions.endOfDay |
|
|
|
|
import net.pokeranalytics.android.util.extensions.hourMinute |
|
|
|
|
import net.pokeranalytics.android.util.extensions.startOfDay |
|
|
|
|
import net.pokeranalytics.android.util.extensions.toCurrency |
|
|
|
|
import java.text.DateFormatSymbols |
|
|
|
|
@ -403,17 +404,17 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
|
override val bottomSheetType: BottomSheetType = BottomSheetType.DOUBLE_EDIT_TEXT |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
class StartedFromTime: TimeQuery() { |
|
|
|
|
class StartedFromTime(startTime:Date = Date().startOfDay()): TimeQuery() { |
|
|
|
|
override var operator = Operator.MORE |
|
|
|
|
init { |
|
|
|
|
this.singleValue = Date().startOfDay() |
|
|
|
|
this.singleValue = startTime |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
class EndedToTime: TimeQuery() { |
|
|
|
|
class EndedToTime(endTime:Date = Date().endOfDay()): TimeQuery() { |
|
|
|
|
override var operator = Operator.LESS |
|
|
|
|
init { |
|
|
|
|
this.singleValue = Date().endOfDay() |
|
|
|
|
this.singleValue = endTime |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -421,7 +422,7 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
|
* main method of the enum |
|
|
|
|
* providing a base RealmQuery [realmQuery], the method is able to attached the corresponding query and returns the newly formed [RealmQuery] |
|
|
|
|
*/ |
|
|
|
|
inline fun <reified T : Filterable> queryWith(realmQuery: RealmQuery<T>): RealmQuery<T> { |
|
|
|
|
inline fun <reified T : Filterable> queryWith(realmQuery: RealmQuery<T>, otherQueryCondition:QueryCondition? = null): RealmQuery<T> { |
|
|
|
|
val fieldName = FilterHelper.fieldNameForQueryType<T>(this::class.java) |
|
|
|
|
fieldName ?: throw PokerAnalyticsException.QueryValueMapUnknown |
|
|
|
|
|
|
|
|
|
@ -429,54 +430,74 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
|
//is Between -> realmQuery.between(fieldName, leftValue, rightValue) |
|
|
|
|
//is BetweenLeftExclusive -> realmQuery.greaterThan(fieldName, leftValue).and().lessThanOrEqualTo(fieldName, rightValue) |
|
|
|
|
//is BetweenRightExclusive -> realmQuery.greaterThanOrEqualTo(fieldName, leftValue).and().lessThan(fieldName, rightValue) |
|
|
|
|
IsLive, IsOnline -> return realmQuery.equalTo(fieldName, this == IsLive) |
|
|
|
|
IsCash -> return realmQuery.equalTo(fieldName, Session.Type.CASH_GAME.ordinal) |
|
|
|
|
IsTournament -> return realmQuery.equalTo(fieldName, Session.Type.TOURNAMENT.ordinal) |
|
|
|
|
IsWeekEnd, IsWeekDay -> { |
|
|
|
|
is IsLive, is IsOnline -> return realmQuery.equalTo(fieldName, this == IsLive) |
|
|
|
|
is IsCash -> return realmQuery.equalTo(fieldName, Session.Type.CASH_GAME.ordinal) |
|
|
|
|
is IsTournament -> return realmQuery.equalTo(fieldName, Session.Type.TOURNAMENT.ordinal) |
|
|
|
|
is IsWeekEnd, is IsWeekDay -> { |
|
|
|
|
var query = realmQuery |
|
|
|
|
if (this == IsWeekDay) { |
|
|
|
|
query = realmQuery.not() |
|
|
|
|
} |
|
|
|
|
return query.`in`(fieldName, arrayOf(Calendar.SATURDAY, Calendar.SUNDAY)) |
|
|
|
|
} |
|
|
|
|
IsToday -> { |
|
|
|
|
is IsToday -> { |
|
|
|
|
val startDate = Date() |
|
|
|
|
return realmQuery.greaterThanOrEqualTo(fieldName, startDate.startOfDay()).and().lessThanOrEqualTo(fieldName, startDate.endOfDay()) |
|
|
|
|
} |
|
|
|
|
WasTodayAndYesterday-> { |
|
|
|
|
is WasTodayAndYesterday -> { |
|
|
|
|
val startDate = Date() |
|
|
|
|
val calendar = Calendar.getInstance() |
|
|
|
|
calendar.time = startDate |
|
|
|
|
calendar.add(Calendar.HOUR_OF_DAY, -24) |
|
|
|
|
return realmQuery.greaterThanOrEqualTo(fieldName, calendar.time.startOfDay()).and().lessThanOrEqualTo(fieldName, startDate.endOfDay()) |
|
|
|
|
} |
|
|
|
|
WasYesterday -> { |
|
|
|
|
is WasYesterday -> { |
|
|
|
|
val calendar = Calendar.getInstance() |
|
|
|
|
calendar.time = Date() |
|
|
|
|
calendar.add(Calendar.HOUR_OF_DAY, -24) |
|
|
|
|
return realmQuery.greaterThanOrEqualTo(fieldName, calendar.time.startOfDay()).and().lessThanOrEqualTo(fieldName, calendar.time.endOfDay()) |
|
|
|
|
} |
|
|
|
|
DuringThisWeek -> { |
|
|
|
|
is DuringThisWeek -> { |
|
|
|
|
val startDate = Date() |
|
|
|
|
val calendar = Calendar.getInstance() |
|
|
|
|
calendar.time = startDate |
|
|
|
|
calendar.set(Calendar.DAY_OF_WEEK_IN_MONTH, Calendar.SUNDAY) |
|
|
|
|
return realmQuery.greaterThanOrEqualTo(fieldName, calendar.time.startOfDay()).and().lessThanOrEqualTo(fieldName, startDate.endOfDay()) |
|
|
|
|
} |
|
|
|
|
DuringThisMonth -> { |
|
|
|
|
is DuringThisMonth -> { |
|
|
|
|
val startDate = Date() |
|
|
|
|
val calendar = Calendar.getInstance() |
|
|
|
|
calendar.time = startDate |
|
|
|
|
calendar.set(Calendar.DAY_OF_MONTH, 1) |
|
|
|
|
return realmQuery.greaterThanOrEqualTo(fieldName, calendar.time.startOfDay()).and().lessThanOrEqualTo(fieldName, startDate.endOfDay()) |
|
|
|
|
} |
|
|
|
|
DuringThisYear -> { |
|
|
|
|
is DuringThisYear -> { |
|
|
|
|
val startDate = Date() |
|
|
|
|
val calendar = Calendar.getInstance() |
|
|
|
|
calendar.time = startDate |
|
|
|
|
calendar.set(Calendar.DAY_OF_YEAR, 1) |
|
|
|
|
return realmQuery.greaterThanOrEqualTo(fieldName, calendar.time.startOfDay()).and().lessThanOrEqualTo(fieldName, startDate.endOfDay()) |
|
|
|
|
} |
|
|
|
|
is StartedFromTime -> { |
|
|
|
|
val calendar = Calendar.getInstance() |
|
|
|
|
calendar.time = singleValue |
|
|
|
|
realmQuery.greaterThanOrEqualTo(fieldName, calendar.hourMinute()) |
|
|
|
|
if (otherQueryCondition is EndedToTime) { |
|
|
|
|
calendar.time = otherQueryCondition.singleValue |
|
|
|
|
realmQuery.lessThanOrEqualTo(fieldName, calendar.hourMinute()) |
|
|
|
|
} |
|
|
|
|
return realmQuery |
|
|
|
|
} |
|
|
|
|
is EndedToTime -> { |
|
|
|
|
val calendar = Calendar.getInstance() |
|
|
|
|
calendar.time = singleValue |
|
|
|
|
realmQuery.lessThanOrEqualTo(fieldName, calendar.hourMinute()) |
|
|
|
|
if (otherQueryCondition is StartedFromTime) { |
|
|
|
|
calendar.time = otherQueryCondition.singleValue |
|
|
|
|
realmQuery.greaterThanOrEqualTo(fieldName, calendar.hourMinute()) |
|
|
|
|
} |
|
|
|
|
return realmQuery |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return when (operator) { |
|
|
|
|
|