Files
AAS_NewGeneration/src/database/table/Table_Adzan.kt
2026-02-13 17:04:20 +07:00

255 lines
9.5 KiB
Kotlin

package database.table
import codes.Somecodes.Companion.timeformat2
import com.batoulapps.adhan.CalculationMethod
import com.batoulapps.adhan.CalculationParameters
import com.batoulapps.adhan.Coordinates
import com.batoulapps.adhan.Madhab
import com.batoulapps.adhan.PrayerTimes
import com.batoulapps.adhan.data.DateComponents
import content.Language
import messageDB
import org.tinylog.Logger
import java.text.SimpleDateFormat
import java.time.LocalTime
import java.util.Date
import java.util.TimeZone
/**
* Class for calculating prayer times (Adzan) based on latitude, longitude, and time zone.
* @param latitude The latitude of the location. Default is Monas, Jakarta (latitude: -6.1751).
* @param longitude The longitude of the location. Default is Monas, Jakarta (longitude: 106.8272).
* @param timezone The time zone for formatting prayer times. Default is "Asia/Jakarta".
*/
class Table_Adzan(val latitude: Double = -6.1751, val longitude: Double = 106.8272, val timezone : TimeZone = TimeZone.getTimeZone("Asia/Jakarta")) {
var coordinate: Coordinates = Coordinates(latitude, longitude)
val params : CalculationParameters = CalculationMethod.OTHER.parameters
val timeformatter = SimpleDateFormat("HH:mm")
val dateformatter = SimpleDateFormat("dd/MM/yyyy")
var fajar_enable = false
var dzuhur_enable = false
var ashar_enable = false
var maghrib_enable = false
var isya_enable = false
var fajar_message = ""
var dzuhur_message = ""
var ashar_message = ""
var maghrib_message = ""
var isya_message = ""
var fajar_time = ""
var dzuhur_time = ""
var ashar_time = ""
var maghrib_time = ""
var isya_time = ""
var adzan_broadcastzones = ""
var adzan_language = Language.DEFAULT.value
init{
// sumber chatgpt Kemenag
params.fajrAngle = 20.0
params.ishaAngle = 18.0
params.madhab = Madhab.SHAFI
timeformatter.timeZone = timezone
}
data class AdzanTask(
val prayerName : String,
val timeString : String,
val message : String,
val sb_tags : String
)
fun CheckTime() : AdzanTask?{
val hhmm = LocalTime.now().format(timeformat2)
if (hhmm == fajar_time){
if (fajar_enable){
val mb = messageDB.Find_Messagebank(fajar_message, adzan_language)
if (mb!=null){
return AdzanTask(
"Fajar",
fajar_time,
mb.Description,
mb.Message_TAGS
)
} else Logger.error { "Skipped Adzan Fajar because Unable to find $fajar_message in messageDB" }
} else Logger.info{"Skipped Adzan Fajar because fajr_enable is false"}
}
if (hhmm == dzuhur_time){
if (dzuhur_enable){
val mb = messageDB.Find_Messagebank(dzuhur_message, adzan_language)
if (mb!=null){
return AdzanTask(
"Dzuhur",
dzuhur_time,
mb.Description,
mb.Message_TAGS
)
} else Logger.error { "Skipped Adzan Dzuhur because Unable to find $dzuhur_message in messageDB" }
} else Logger.info{"Skipped Adzan Dzuhur because dzuhur_enable is false"}
}
if (hhmm == ashar_time) {
if (ashar_enable){
val mb = messageDB.Find_Messagebank(ashar_message, adzan_language)
if (mb!=null){
return AdzanTask(
"Ashar",
ashar_time,
mb.Description,
mb.Message_TAGS
)
} else Logger.error { "Skipped Adzan Ashar because Unable to find $ashar_message in messageDB" }
} else Logger.info{"Skipped Adzan Ashar because ashar_enable is false"}
}
if (hhmm == maghrib_time){
if (maghrib_enable){
val mb = messageDB.Find_Messagebank(maghrib_message, adzan_language)
if (mb!=null){
return AdzanTask(
"Maghrib",
maghrib_time,
mb.Description,
mb.Message_TAGS
)
} else Logger.error { "Skipped Adzan Maghrib because Unable to find $maghrib_message in messageDB" }
} else Logger.info{"Skipped Adzan Maghrib because maghrib_enable is false"}
}
if (hhmm == isya_time) {
if (isya_enable){
val mb = messageDB.Find_Messagebank(isya_message, adzan_language)
if (mb!=null){
return AdzanTask(
"Isya",
isya_time,
mb.Description,
mb.Message_TAGS
)
} else Logger.error { "Skipped Adzan Isya because Unable to find $isya_message in messageDB" }
} else Logger.info{"Skipped Adzan Isya because isya_enable is false"}
}
return null
}
// /**
// * Change the time zone used for formatting prayer times.
// * @param timezone The new AdzanTimeZone.
// */
// fun ChangeTimezone(timezone: AdzanTimeZone) {
// ChangeTimeZone(timezone.toTimeZoneString())
// }
/**
* Change the time zone used for formatting prayer times.
* @param timezoneString The new time zone string (e.g., "Asia/Jakarta").
*/
fun ChangeTimeZone(timezoneString: String) {
timeformatter.timeZone = TimeZone.getTimeZone(timezoneString)
}
// /**
// * Set prayer time adjustments in minutes.
// * @param fajrMinute Adjustment for Fajr prayer time in minutes.
// * @param dhuhrMinute Adjustment for Dhuhr prayer time in minutes.
// * @param asrMinute Adjustment for Asr prayer time in minutes.
// * @param maghribMinute Adjustment for Maghrib prayer time in minutes.
// * @param ishaMinute Adjustment for Isha prayer time in minutes.
// */
// fun SetPrayerAdjustment(fajrMinute: Int = 0, dhuhrMinute: Int = 0, asrMinute: Int = 0,maghribMinute: Int = 0, ishaMinute: Int = 0) {
// params.adjustments.fajr = fajrMinute
// params.adjustments.dhuhr = dhuhrMinute
// params.adjustments.asr = asrMinute
// params.adjustments.maghrib = maghribMinute
// params.adjustments.isha = ishaMinute
// }
// /**
// * Change the coordinates used for Adzan calculations.
// * @param lat The new latitude.
// * @param long The new longitude.
// */
// fun ChangeCoordinate(lat: Double, long: Double) {
// coordinate = Coordinates(lat, long)
// }
fun ChangeLatitude(lat: Double) {
coordinate = Coordinates(lat, coordinate.longitude)
}
fun ChangeLongitude(long: Double) {
coordinate = Coordinates(coordinate.latitude, long)
}
// /**
// * Get prayer times for a specific date string in the format "dd/MM/yyyy".
// * @param date_string The date string for which to get prayer times.
// * @return An AdzanPrayerTime object containing the prayer times, or null if the date string is invalid.
// */
// fun GetPrayerTimes(date_string: String) : AdzanPrayerTime?{
// try{
// val date = dateformatter.parse(date_string)
// return GetPrayerTimes(date)
// } catch (_: Exception){
// return null
// }
// }
/**
* Get prayer times for a specific date.
* @param date The date for which to get prayer times.
* @return An AdzanPrayerTime object containing the prayer times.
*/
fun GetPrayerTimes(date: Date) : AdzanPrayerTime{
val prayer = PrayerTimes(coordinate, DateComponents.from(date), params)
return AdzanPrayerTime(
dateformatter.format(date),
timeformatter.format(prayer.fajr),
timeformatter.format(prayer.dhuhr),
timeformatter.format(prayer.asr),
timeformatter.format(prayer.maghrib),
timeformatter.format(prayer.isha)
)
}
/**
* Get prayer times for the current date.
* this will update fajar_time, dzuhur_time, ashar_time, maghrib_time, isya_time properties
* @return An AdzanPrayerTime object containing the prayer times for today.
*/
fun GetTodayPrayerTimes() : AdzanPrayerTime{
val result = GetPrayerTimes(Date())
fajar_time = result.fajr
dzuhur_time = result.dhuhr
ashar_time = result.asr
maghrib_time = result.maghrib
isya_time = result.isha
return result
}
// /**
// * Get prayer times for all days in a specific month and year.
// * @param month The month (1-12) for which to get prayer times.
// * @param year The year for which to get prayer times.
// * @return A list of AdzanPrayerTime objects for each day in the specified month and year.
// */
// fun GetMonthlyPrayerTimes(month: Int, year: Int) : List<AdzanPrayerTime>{
// val prayerTimesList = mutableListOf<AdzanPrayerTime>()
// val calendar = java.util.Calendar.getInstance()
// calendar.set(year, month - 1, 1) // Month is 0-based in Calendar
// val daysInMonth = calendar.getActualMaximum(java.util.Calendar.DAY_OF_MONTH)
//
// for (day in 1..daysInMonth) {
// calendar.set(year, month - 1, day)
// val date = calendar.time
// val prayerTimes = GetPrayerTimes(date)
// prayerTimesList.add(prayerTimes)
// }
//
// return prayerTimesList
// }
}