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

com.github.insanusmokrassar.AutoPostTelegramBot.plugins.scheduler.Converters.kt Maven / Gradle / Ivy

package com.github.insanusmokrassar.AutoPostTelegramBot.plugins.scheduler

import org.joda.time.DateTime
import org.joda.time.DateTimeZone
import org.joda.time.format.DateTimeFormat

internal val converters = listOf(
    TimeConverter(),
    SimpleDayTimeConverter(),
    SimpleDayMonthTimeConverter(),
    SimpleDayMonthYearTimeConverter()
)

private class TimeConverter : DateTimeConverter {
    override val formatPattern: String = "HH:mm"
    private val dateTimeFormat = DateTimeFormat.forPattern(formatPattern).withZone(DateTimeZone.getDefault())
    override val timeZoneId: String = dateTimeFormat.zone.id

    override fun tryConvert(from: String): DateTime? {
        return try {
            val parsed = dateTimeFormat.parseDateTime(from)
            val now = DateTime.now()
            parsed
                .withDate(
                    now.year,
                    now.monthOfYear,
                    now.dayOfMonth
                ).let {
                    if (it.isBefore(now)) {
                        it.plusDays(1)
                    } else {
                        it
                    }
                }
        } catch (e: IllegalArgumentException) {
            null
        }
    }
}

private class SimpleDayTimeConverter : DateTimeConverter {
    override val formatPattern: String = "dd HH:mm"
    private val dateTimeFormat = DateTimeFormat.forPattern(formatPattern).withZone(DateTimeZone.getDefault())
    override val timeZoneId: String = dateTimeFormat.zone.id

    override fun tryConvert(from: String): DateTime? {
        return try {
            val parsed = dateTimeFormat.parseDateTime(from)
            val now = DateTime.now()
            parsed
                .withYear(
                    now.year
                )
                .withMonthOfYear(
                    now.monthOfYear
                ).let {
                    if (it.isBefore(now)) {
                        it.plusMonths(1)
                    } else {
                        it
                    }
                }
        } catch (e: IllegalArgumentException) {
            null
        }
    }
}

private class SimpleDayMonthTimeConverter : DateTimeConverter {
    override val formatPattern: String = "dd.MM HH:mm"
    private val dateTimeFormat = DateTimeFormat.forPattern(formatPattern).withZone(DateTimeZone.getDefault())
    override val timeZoneId: String = dateTimeFormat.zone.id

    override fun tryConvert(from: String): DateTime? {
        return try {
            val parsed = dateTimeFormat.parseDateTime(from)
            val now = DateTime.now()
            parsed
                .withYear(
                    now.year
                )
                .let {
                    if (it.isBefore(now)) {
                        it.plusYears(1)
                    } else {
                        it
                    }
                }
        } catch (e: IllegalArgumentException) {
            null
        }
    }
}

private class SimpleDayMonthYearTimeConverter : DateTimeConverter {
    override val formatPattern: String = "dd.MM.yy HH:mm"
    private val dateTimeFormat = DateTimeFormat.forPattern(formatPattern).withZone(DateTimeZone.getDefault())
    override val timeZoneId: String = dateTimeFormat.zone.id

    override fun tryConvert(from: String): DateTime? {
        return try {
            val parsed = dateTimeFormat.parseDateTime(from)
            val now = DateTime.now()
            parsed
                .let {
                    if (it.isBefore(now)) {
                        it.plusYears(100)
                    } else {
                        it
                    }
                }
        } catch (e: IllegalArgumentException) {
            null
        }
    }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy