2019-04-22 18:11:00 +10:00
|
|
|
package com.keylesspalace.tusky.entity
|
|
|
|
|
|
|
|
import com.google.gson.annotations.SerializedName
|
|
|
|
import java.util.*
|
2019-05-03 03:44:35 +10:00
|
|
|
import kotlin.math.roundToInt
|
2019-04-22 18:11:00 +10:00
|
|
|
|
|
|
|
data class Poll(
|
|
|
|
val id: String,
|
|
|
|
@SerializedName("expires_at") val expiresAt: Date?,
|
|
|
|
val expired: Boolean,
|
|
|
|
val multiple: Boolean,
|
|
|
|
@SerializedName("votes_count") val votesCount: Int,
|
|
|
|
val options: List<PollOption>,
|
|
|
|
val voted: Boolean
|
|
|
|
) {
|
|
|
|
|
|
|
|
fun votedCopy(choices: List<Int>): Poll {
|
|
|
|
val newOptions = options.mapIndexed { index, option ->
|
|
|
|
if(choices.contains(index)) {
|
|
|
|
option.copy(votesCount = option.votesCount + 1)
|
|
|
|
} else {
|
|
|
|
option
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-04-28 17:58:17 +10:00
|
|
|
return copy(options = newOptions, votesCount = votesCount + choices.size, voted = true)
|
2019-04-22 18:11:00 +10:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
data class PollOption(
|
|
|
|
val title: String,
|
|
|
|
@SerializedName("votes_count") val votesCount: Int
|
2019-05-03 03:44:35 +10:00
|
|
|
) {
|
|
|
|
fun getPercent(totalVotes: Int): Int {
|
|
|
|
return if (votesCount == 0) {
|
|
|
|
0
|
|
|
|
} else {
|
|
|
|
(votesCount / totalVotes.toDouble() * 100).roundToInt()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|