255 lines
9.5 KiB
Kotlin
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
|
|
// }
|
|
} |