diff options
| author | Peter Stone <thepeterstone@gmail.com> | 2026-07-12 11:18:37 +0000 |
|---|---|---|
| committer | Peter Stone <thepeterstone@gmail.com> | 2026-07-12 11:18:37 +0000 |
| commit | 4126fe4f56a6eb9703a084d4793a597f37bf2867 (patch) | |
| tree | b2b7c07ed7376a5c31495d37bd35dfece3e2643c /android/app/src/main/java/org/terst/doot/widget/data | |
| parent | 6fdd09bfe030ce91ee188f18c198fd6a57c7b42f (diff) | |
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VTUSAEKfsPc6WGDq45yPHD
Diffstat (limited to 'android/app/src/main/java/org/terst/doot/widget/data')
| -rw-r--r-- | android/app/src/main/java/org/terst/doot/widget/data/WidgetItem.kt | 3 | ||||
| -rw-r--r-- | android/app/src/main/java/org/terst/doot/widget/data/WidgetRepository.kt | 20 |
2 files changed, 22 insertions, 1 deletions
diff --git a/android/app/src/main/java/org/terst/doot/widget/data/WidgetItem.kt b/android/app/src/main/java/org/terst/doot/widget/data/WidgetItem.kt index ff2ff28..50cfddc 100644 --- a/android/app/src/main/java/org/terst/doot/widget/data/WidgetItem.kt +++ b/android/app/src/main/java/org/terst/doot/widget/data/WidgetItem.kt @@ -15,7 +15,8 @@ data class WidgetItem( @SerialName("is_overdue") val isOverdue: Boolean = false, @SerialName("due_date") val dueDate: String? = null, val url: String = "", - val completable: Boolean = false + val completable: Boolean = false, + @SerialName("recurring_event_id") val recurringEventId: String? = null ) @Serializable diff --git a/android/app/src/main/java/org/terst/doot/widget/data/WidgetRepository.kt b/android/app/src/main/java/org/terst/doot/widget/data/WidgetRepository.kt index 39f2a55..b604d39 100644 --- a/android/app/src/main/java/org/terst/doot/widget/data/WidgetRepository.kt +++ b/android/app/src/main/java/org/terst/doot/widget/data/WidgetRepository.kt @@ -17,6 +17,9 @@ private val json = Json { ignoreUnknownKeys = true } @Serializable private data class WidgetAddRequest(val title: String) +@Serializable +private data class RecurrenceResponse(val recurrence: String) + class WidgetRepository( private val client: OkHttpClient, private val serverUrl: String, @@ -100,4 +103,21 @@ class WidgetRepository( check(response.isSuccessful) { "HTTP ${response.code}" } } } + + /** GETs the formatted recurrence schedule for a recurring event. */ + suspend fun getRecurrence(recurringEventId: String): Result<String> = + withContext(Dispatchers.IO) { + val encodedId = java.net.URLEncoder.encode(recurringEventId, "UTF-8") + val request = Request.Builder() + .url("$serverUrl/api/widget/recurrence?recurring_event_id=$encodedId") + .header("Authorization", "Bearer $token") + .build() + runCatching { + val response = client.newCall(request).execute() + check(response.isSuccessful) { "HTTP ${response.code}" } + val body = checkNotNull(response.body?.string()) { "Empty body" } + val parsed = json.decodeFromString<RecurrenceResponse>(body) + parsed.recurrence + } + } } |
