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

com.github.insanusmokrassar.AutoPostRatingsAnalyzePlugin.config.RatingAnalyzeSendSettings.kt Maven / Gradle / Ivy

package com.github.insanusmokrassar.AutoPostRatingsAnalyzePlugin.config

import com.github.insanusmokrassar.AutoPostRatingsAnalyzePlugin.ChartsBuilders.*
import com.github.insanusmokrassar.AutoPostRatingsAnalyzePlugin.database.CountOfRatedPostsTable
import com.github.insanusmokrassar.AutoPostRatingsAnalyzePlugin.database.RatingsChangesTable
import com.github.insanusmokrassar.AutoPostRatingsAnalyzePlugin.tasks.*
import com.github.insanusmokrassar.AutoPostTelegramBot.utils.extensions.executeSync
import com.pengrad.telegrambot.TelegramBot
import com.pengrad.telegrambot.request.SendPhoto
import kotlinx.coroutines.experimental.launch
import java.lang.ref.WeakReference
import java.util.concurrent.TimeUnit

data class RatingAnalyzeSendSettings (
    val delay: Long? = null,
    val dayTime: String? = null,
    val sendRatingsChanging: Boolean = true,
    val sendCountOfRatings: Boolean = true,
    val chartsPeriod: Long = TimeUnit.DAYS.toMillis(30)
) {
    fun build(
        bot: TelegramBot,
        ratingsChangesTable: RatingsChangesTable,
        countOfRatedPostsTable: CountOfRatedPostsTable,
        chartsChatId: Long
    ): List {
        val ratingChangedChartBuilder: RatingChangesChartBuilder? = if (sendRatingsChanging) {
            RatingChangesChartBuilder(
                chartsPeriod,
                ratingsChangesTable
            )
        } else {
            null
        }

        val ratingCountChartBuilder: RatingCountChartBuilder? = if (sendCountOfRatings) {
            RatingCountChartBuilder(
                chartsPeriod,
                countOfRatedPostsTable
            )
        } else {
            null
        }

        val botWR = WeakReference(bot)

        val taskToExecute = Runnable {
            botWR.get() ?.let {
                bot ->
                launch {
                    listOfNotNull(
                        ratingChangedChartBuilder ?.build(),
                        ratingCountChartBuilder ?.build()
                    ).forEach {
                        chartBytesArray ->
                        bot.executeSync(
                            SendPhoto(
                                chartsChatId,
                                chartBytesArray
                            )
                        )
                    }
                }
            }
        }

        return listOfNotNull(
            delay ?.let {
                DelayTask(
                    it,
                    taskToExecute
                )
            },
            dayTime ?.let {
                TimeTask(
                    it,
                    taskToExecute
                )
            }
        )
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy