Skip to content

Commit 685a9bc

Browse files
committed
added Frequency::serialize + Frequency::deserialize functions
1 parent b81cb26 commit 685a9bc

File tree

4 files changed

+53
-35
lines changed

4 files changed

+53
-35
lines changed

library/modules/frequency/api/android/frequency.api

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,19 @@ public final class com/michaelflisar/composedialogs/dialogs/frequency/DialogFreq
3131

3232
public abstract class com/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency {
3333
public static final field $stable I
34+
public static final field Companion Lcom/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency$Companion;
3435
public abstract fun calcNextOccurrence (Lkotlinx/datetime/LocalDate;Lkotlinx/datetime/TimeZone;I)Lkotlinx/datetime/LocalDateTime;
3536
public static synthetic fun calcNextOccurrence$default (Lcom/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency;Lkotlinx/datetime/LocalDate;Lkotlinx/datetime/TimeZone;IILjava/lang/Object;)Lkotlinx/datetime/LocalDateTime;
3637
public final fun calcNextOccurrences (Lkotlinx/datetime/LocalDate;IILkotlinx/datetime/TimeZone;)Ljava/util/List;
3738
public static synthetic fun calcNextOccurrences$default (Lcom/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency;Lkotlinx/datetime/LocalDate;IILkotlinx/datetime/TimeZone;ILjava/lang/Object;)Ljava/util/List;
3839
public abstract fun getInterval ()I
3940
public abstract fun getTime ()Lkotlinx/datetime/LocalTime;
4041
public abstract fun getType ()Lcom/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency$Type;
42+
public final fun serialize ()Ljava/lang/String;
43+
}
44+
45+
public final class com/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency$Companion {
46+
public final fun deserialize (Ljava/lang/String;)Lcom/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency;
4147
}
4248

4349
public final class com/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency$Daily : com/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency {

library/modules/frequency/api/jvm/frequency.api

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,19 @@ public final class com/michaelflisar/composedialogs/dialogs/frequency/DialogFreq
3535

3636
public abstract class com/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency {
3737
public static final field $stable I
38+
public static final field Companion Lcom/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency$Companion;
3839
public abstract fun calcNextOccurrence (Lkotlinx/datetime/LocalDate;Lkotlinx/datetime/TimeZone;I)Lkotlinx/datetime/LocalDateTime;
3940
public static synthetic fun calcNextOccurrence$default (Lcom/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency;Lkotlinx/datetime/LocalDate;Lkotlinx/datetime/TimeZone;IILjava/lang/Object;)Lkotlinx/datetime/LocalDateTime;
4041
public final fun calcNextOccurrences (Lkotlinx/datetime/LocalDate;IILkotlinx/datetime/TimeZone;)Ljava/util/List;
4142
public static synthetic fun calcNextOccurrences$default (Lcom/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency;Lkotlinx/datetime/LocalDate;IILkotlinx/datetime/TimeZone;ILjava/lang/Object;)Ljava/util/List;
4243
public abstract fun getInterval ()I
4344
public abstract fun getTime ()Lkotlinx/datetime/LocalTime;
4445
public abstract fun getType ()Lcom/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency$Type;
46+
public final fun serialize ()Ljava/lang/String;
47+
}
48+
49+
public final class com/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency$Companion {
50+
public final fun deserialize (Ljava/lang/String;)Lcom/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency;
4551
}
4652

4753
public final class com/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency$Daily : com/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency {

library/modules/frequency/src/commonMain/kotlin/com/michaelflisar/composedialogs/dialogs/frequency/classes/Frequency.kt

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,45 @@ import kotlin.time.ExperimentalTime
2121
@Immutable
2222
sealed class Frequency {
2323

24+
fun serialize() : String {
25+
return when (this) {
26+
is Frequency.Daily -> "D|${time}|${interval}"
27+
is Frequency.Weekly -> "W|${dayOfWeek}|${time}|${interval}"
28+
is Frequency.Monthly -> "M|${dayOfMonth}|${time}|${interval}"
29+
is Frequency.Yearly -> "Y|${month}|${dayOfMonth}|${time}|${interval}"
30+
}
31+
}
32+
33+
companion object {
34+
35+
fun deserialize(value: String): Frequency {
36+
val parts = value.split("|")
37+
return when (parts[0]) {
38+
"D" -> Daily(
39+
time = LocalTime.parse(parts[1]),
40+
interval = parts[2].toInt()
41+
)
42+
"W" -> Weekly(
43+
dayOfWeek = DayOfWeek.valueOf(parts[1]),
44+
time = LocalTime.parse(parts[2]),
45+
interval = parts[3].toInt()
46+
)
47+
"M" -> Monthly(
48+
dayOfMonth = parts[1].toInt(),
49+
time = LocalTime.parse(parts[2]),
50+
interval = parts[3].toInt()
51+
)
52+
"Y" -> Yearly(
53+
month = Month.valueOf(parts[1]),
54+
dayOfMonth = parts[2].toInt(),
55+
time = LocalTime.parse(parts[3]),
56+
interval = parts[4].toInt()
57+
)
58+
else -> error("Unknown Frequency type")
59+
}
60+
}
61+
}
62+
2463
/**
2564
* Represents the types of frequency intervals available for scheduling events.
2665
*/

library/modules/frequency/src/commonMain/kotlin/com/michaelflisar/composedialogs/dialogs/frequency/classes/FrequencyStateSaver.kt

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,46 +4,13 @@ import androidx.compose.runtime.MutableState
44
import androidx.compose.runtime.mutableStateOf
55
import androidx.compose.runtime.saveable.Saver
66
import androidx.compose.runtime.saveable.SaverScope
7-
import kotlinx.datetime.DayOfWeek
8-
import kotlinx.datetime.LocalTime
9-
import kotlinx.datetime.Month
107

118
object FrequencyStateSaver : Saver<MutableState<Frequency>, String> {
129
override fun restore(value: String): MutableState<Frequency> {
13-
val parts = value.split("|")
14-
return mutableStateOf(
15-
when (parts[0]) {
16-
"D" -> Frequency.Daily(
17-
time = LocalTime.parse(parts[1]),
18-
interval = parts[2].toInt()
19-
)
20-
"W" -> Frequency.Weekly(
21-
dayOfWeek = DayOfWeek.valueOf(parts[1]),
22-
time = LocalTime.parse(parts[2]),
23-
interval = parts[3].toInt()
24-
)
25-
"M" -> Frequency.Monthly(
26-
dayOfMonth = parts[1].toInt(),
27-
time = LocalTime.parse(parts[2]),
28-
interval = parts[3].toInt()
29-
)
30-
"Y" -> Frequency.Yearly(
31-
month = Month.valueOf(parts[1]),
32-
dayOfMonth = parts[2].toInt(),
33-
time = LocalTime.parse(parts[3]),
34-
interval = parts[4].toInt()
35-
)
36-
else -> error("Unknown Frequency type")
37-
}
38-
)
10+
return mutableStateOf(Frequency.deserialize(value))
3911
}
4012

4113
override fun SaverScope.save(value: MutableState<Frequency>): String {
42-
return when (val freq = value.value) {
43-
is Frequency.Daily -> "D|${freq.time}|${freq.interval}"
44-
is Frequency.Weekly -> "W|${freq.dayOfWeek}|${freq.time}|${freq.interval}"
45-
is Frequency.Monthly -> "M|${freq.dayOfMonth}|${freq.time}|${freq.interval}"
46-
is Frequency.Yearly -> "Y|${freq.month}|${freq.dayOfMonth}|${freq.time}|${freq.interval}"
47-
}
14+
return value.value.serialize()
4815
}
4916
}

0 commit comments

Comments
 (0)