Skip to content

Commit f94c932

Browse files
committed
Merge isFinished/isLive/isUpcoming into an enum
1 parent 60f43a7 commit f94c932

File tree

8 files changed

+48
-32
lines changed

8 files changed

+48
-32
lines changed

shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/ConferenceService.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,13 @@ val UNKNOWN_SESSION_CARD: SessionCardView = SessionCardView(
2424
locationLine = "unknown",
2525
startsAt = GMTDate.START,
2626
endsAt = GMTDate.START,
27-
isLive = false,
2827
speakerIds = emptyList(),
29-
isFinished = false,
3028
isFavorite = false,
31-
isUpcoming = false,
3229
description = "unknown",
3330
vote = null,
3431
tags = emptyList(),
35-
startsInMinutes = null
32+
startsInMinutes = null,
33+
state = SessionState.Upcoming,
3634
)
3735

3836
val UNKNOWN_SPEAKER: Speaker = Speaker(

shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/SessionCardView.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package org.jetbrains.kotlinconf
22

3-
import io.ktor.util.date.*
4-
import org.jetbrains.kotlinconf.utils.*
3+
import io.ktor.util.date.GMTDate
4+
import org.jetbrains.kotlinconf.utils.dayAndMonth
5+
import org.jetbrains.kotlinconf.utils.time
56

67
data class SessionCardView(
78
val id: SessionId,
@@ -10,7 +11,7 @@ data class SessionCardView(
1011
val locationLine: String,
1112
val startsAt: GMTDate,
1213
val endsAt: GMTDate,
13-
val isLive: Boolean,
14+
val state: SessionState,
1415
val speakerIds: List<SpeakerId>,
1516
val vote: Score?,
1617
val timeLine: String = buildString {
@@ -21,8 +22,6 @@ data class SessionCardView(
2122
append(endsAt.time())
2223
},
2324
val isFavorite: Boolean,
24-
val isFinished: Boolean,
25-
val isUpcoming: Boolean,
2625
val description: String,
2726
val tags: List<String>,
2827
val badgeTimeLine: String = buildString {
@@ -34,4 +33,8 @@ data class SessionCardView(
3433
val startsInMinutes: Int?,
3534
)
3635

36+
val SessionCardView.isLive get() = state == SessionState.Live
37+
val SessionCardView.isUpcoming get() = state == SessionState.Upcoming
38+
val SessionCardView.isPast get() = state == SessionState.Past
39+
3740
val Session.isLightning: Boolean get() = endsAt.timestamp - startsAt.timestamp <= 15 * 60 * 1000
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.jetbrains.kotlinconf
2+
3+
import io.ktor.util.date.GMTDate
4+
5+
enum class SessionState {
6+
Live,
7+
Past,
8+
Upcoming,
9+
;
10+
11+
companion object {
12+
fun from(startsAt: GMTDate, endsAt: GMTDate, now: GMTDate): SessionState = when {
13+
startsAt <= now && now < endsAt -> Live
14+
endsAt <= now -> Past
15+
else -> Upcoming
16+
}
17+
}
18+
}

shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/View.kt

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,15 @@ data class Day(
4343
data class TimeSlot(
4444
val startsAt: GMTDate,
4545
val endsAt: GMTDate,
46-
val isLive: Boolean,
47-
val isFinished: Boolean,
48-
val isUpcoming: Boolean,
46+
val state: SessionState,
4947
val sessions: List<SessionCardView>,
5048
val title: String = "${startsAt.time()}-${endsAt.time()}",
5149
)
5250

51+
val TimeSlot.isLive get() = state == SessionState.Live
52+
val TimeSlot.isUpcoming get() = state == SessionState.Upcoming
53+
val TimeSlot.isPast get() = state == SessionState.Past
54+
5355
fun Conference.buildAgenda(
5456
favorites: Set<SessionId>,
5557
votes: List<VoteInfo>,
@@ -90,16 +92,10 @@ fun List<Session>.groupByTime(
9092
it.asSessionCard(conference, now, favorites, votes)
9193
}
9294

93-
val isLive = start <= now && now < end
94-
val isFinished = end <= now
95-
val isUpcoming = start > now
96-
9795
TimeSlot(
9896
startsAt = start,
9997
endsAt = end,
100-
isLive = isLive,
101-
isFinished = isFinished,
102-
isUpcoming = isUpcoming,
98+
state = SessionState.from(start, end, now),
10399
sessions = cards,
104100
)
105101
}
@@ -119,10 +115,8 @@ fun Session.asSessionCard(
119115
isFavorite = id in favorites,
120116
startsAt = startsAt,
121117
endsAt = endsAt,
122-
isLive = startsAt <= now && now < endsAt,
118+
state = SessionState.from(startsAt, endsAt, now),
123119
speakerIds = speakerIds,
124-
isFinished = endsAt <= now,
125-
isUpcoming = startsAt > now,
126120
vote = votes.find { it.sessionId == id }?.score,
127121
description = description,
128122
tags = tags ?: emptyList(),
@@ -155,6 +149,6 @@ data class ServiceEvent(
155149
val title: String,
156150
val startsAt: GMTDate,
157151
val endsAt: GMTDate,
158-
val isLive: Boolean,
152+
val state: SessionState,
159153
val startsInMinutes: Int?,
160154
)

shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/ScheduleScreen.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import kotlinx.coroutines.launch
4141
import org.jetbrains.compose.resources.stringResource
4242
import org.jetbrains.kotlinconf.SessionCardView
4343
import org.jetbrains.kotlinconf.SessionId
44+
import org.jetbrains.kotlinconf.SessionState
4445
import org.jetbrains.kotlinconf.ui.components.DayHeader
4546
import org.jetbrains.kotlinconf.ui.components.Divider
4647
import org.jetbrains.kotlinconf.ui.components.Emotion
@@ -401,11 +402,10 @@ private fun SessionCard(
401402
timeNote = session.startsInMinutes?.let { count ->
402403
stringResource(Res.string.schedule_in_x_minutes, count)
403404
},
404-
status = when {
405-
session.isFinished -> TalkStatus.Past
406-
session.isLive -> TalkStatus.Now
407-
session.isUpcoming -> TalkStatus.Upcoming
408-
else -> TalkStatus.Upcoming // Shouldn't happen
405+
status = when (session.state) {
406+
SessionState.Live -> TalkStatus.Live
407+
SessionState.Past -> TalkStatus.Past
408+
SessionState.Upcoming -> TalkStatus.Upcoming
409409
},
410410
onSubmitFeedback = { emotion ->
411411
onSubmitFeedback(session.id, emotion)

shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/ScheduleViewModel.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import org.jetbrains.kotlinconf.Score
1919
import org.jetbrains.kotlinconf.SessionCardView
2020
import org.jetbrains.kotlinconf.SessionId
2121
import org.jetbrains.kotlinconf.TimeSlot
22+
import org.jetbrains.kotlinconf.isLive
23+
import org.jetbrains.kotlinconf.isUpcoming
2224
import org.jetbrains.kotlinconf.ui.components.Emotion
2325
import org.jetbrains.kotlinconf.ui.components.FilterItem
2426
import org.jetbrains.kotlinconf.ui.components.FilterItemType

shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/SessionScreen.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import kotlinconfapp.shared.generated.resources.session_your_feedback
4545
import kotlinconfapp.shared.generated.resources.up_24
4646
import org.jetbrains.compose.resources.stringResource
4747
import org.jetbrains.kotlinconf.SessionId
48+
import org.jetbrains.kotlinconf.SessionState
4849
import org.jetbrains.kotlinconf.ui.components.Action
4950
import org.jetbrains.kotlinconf.ui.components.ActionSize
5051
import org.jetbrains.kotlinconf.ui.components.Divider
@@ -111,7 +112,7 @@ fun SessionScreen(
111112
modifier = Modifier.padding(vertical = 24.dp),
112113
)
113114

114-
if (session.isFinished || session.isLive) {
115+
if (session.state != SessionState.Upcoming) {
115116
FeedbackPanel(
116117
onFeedback = { emotion ->
117118
viewModel.submitFeedback(emotion)

ui-components/src/commonMain/kotlin/org/jetbrains/kotlinconf/ui/components/TalkCard.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ private fun buildHighlightedString(
8181
}
8282

8383
enum class TalkStatus {
84-
Past, Now, Upcoming,
84+
Past, Live, Upcoming,
8585
}
8686

8787
private val CardTalkShape = RoundedCornerShape(8.dp)
@@ -263,7 +263,7 @@ private fun TimeBlock(
263263
)
264264
}
265265

266-
if (status == TalkStatus.Now) {
266+
if (status == TalkStatus.Live) {
267267
NowLabel()
268268
}
269269

@@ -391,7 +391,7 @@ internal fun TalkCardPreview() {
391391
lightning = true,
392392
time = "9:00 – 10:00",
393393
timeNote = null,
394-
status = TalkStatus.Now,
394+
status = TalkStatus.Live,
395395
onSubmitFeedbackWithComment = { e, s -> println("Feedback, emotion + comment: $e, $s") },
396396
onSubmitFeedback = { e -> println("Feedback, emotion only: $e") },
397397
onClick = { "Clicked session" },

0 commit comments

Comments
 (0)