All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dev.forcetower.breaker.operation.MessagesOperation.kt Maven / Gradle / Ivy

There is a newer version: 2.1.1
Show newest version
package dev.forcetower.breaker.operation

import dev.forcetower.breaker.model.Message
import dev.forcetower.breaker.model.MessagesDataPage
import dev.forcetower.breaker.model.Semester
import dev.forcetower.breaker.result.Outcome
import dev.forcetower.breaker.service.TechNoAPI
import retrofit2.HttpException

class MessagesOperation(
    private val profileId: Long,
    private val until: String = ""
) : Operation {
    override suspend fun execute(service: TechNoAPI): Outcome {
        return try {
            val messages = service.messages(profileId, until)
            val mapped = messages.items.map {
                Message(it.id, it.message, it.sender.name, it.timestamp, it.profileType)
            }
            val regex = Regex("ate=(\\d+-\\d+)")
            val next = messages.nextPage?.link?.href?.let { ref ->
                val groups = regex.find(ref)?.groups
                val size = groups?.size ?: 0
                if (size > 1) {
                    groups?.get(1)?.value
                } else {
                    null
                }
            }
            Outcome.success(MessagesDataPage(mapped, next))
        } catch (error: HttpException) {
            Outcome.error(error, error.code())
        } catch (error: Throwable) {
            Outcome.error(error, 500)
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy