|
|
|
|
@ -21,6 +21,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 |
|
|
|
|
@ -87,6 +88,14 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
|
|
|
|
|
|
val baseId = this::class.simpleName ?: throw PokerAnalyticsException.FilterElementUnknownName |
|
|
|
|
|
|
|
|
|
val groupId: String |
|
|
|
|
get() { |
|
|
|
|
when (this.operator) { |
|
|
|
|
Operator.MORE, Operator.LESS -> return "${this.operator.name.toLowerCase().capitalize()}$baseId" |
|
|
|
|
} |
|
|
|
|
return baseId |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
val id: List<String> get() { |
|
|
|
|
when (this.operator) { |
|
|
|
|
Operator.MORE, Operator.LESS -> return listOf("$baseId+${this.operator.name}") |
|
|
|
|
@ -164,10 +173,14 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
|
override fun labelForValue(value: Date, context: Context): String { |
|
|
|
|
return value.toString() |
|
|
|
|
} |
|
|
|
|
override var listOfValues = ArrayList<Date>() |
|
|
|
|
|
|
|
|
|
override var singleValue: Date |
|
|
|
|
get() { return listOfValues.firstOrNull() ?: Date() } |
|
|
|
|
set(value) { listOfValues.add(value) } |
|
|
|
|
set(value) { |
|
|
|
|
listOfValues.removeAll(this.listOfValues) |
|
|
|
|
listOfValues.add(value) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun updateValueBy(filterCondition: FilterCondition) { |
|
|
|
|
super.updateValueBy(filterCondition) |
|
|
|
|
@ -181,7 +194,10 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
|
} |
|
|
|
|
override var singleValue: Int |
|
|
|
|
get() { return listOfValues.firstOrNull() ?: 0 } |
|
|
|
|
set(value) { listOfValues.add(value) } |
|
|
|
|
set(value) { |
|
|
|
|
listOfValues.removeAll(this.listOfValues) |
|
|
|
|
listOfValues.add(value) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun updateValueBy(filterCondition: FilterCondition) { |
|
|
|
|
super.updateValueBy(filterCondition) |
|
|
|
|
@ -398,23 +414,23 @@ sealed class QueryCondition : FilterElementRow { |
|
|
|
|
class Duration: SingleInt() { |
|
|
|
|
var minutes:Int |
|
|
|
|
get() { return singleValue } |
|
|
|
|
set(value) { singleValue = value } |
|
|
|
|
set(value) { listOfValues = arrayListOf(value) } |
|
|
|
|
|
|
|
|
|
override val viewType: Int = RowViewType.TITLE_VALUE_CHECK.ordinal |
|
|
|
|
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.listOfValues = arrayListOf(startTime) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
class EndedToTime: TimeQuery() { |
|
|
|
|
class EndedToTime(endTime:Date = Date().endOfDay()): TimeQuery() { |
|
|
|
|
override var operator = Operator.LESS |
|
|
|
|
init { |
|
|
|
|
this.singleValue = Date().endOfDay() |
|
|
|
|
this.listOfValues = arrayListOf(endTime) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -422,7 +438,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 |
|
|
|
|
|
|
|
|
|
@ -430,54 +446,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) { |
|
|
|
|
|