set timezone in JSON. Computes/displays with JSON Timezone (not local)
parent
a4669716b0
commit
c1451f264a
|
|
@ -3,17 +3,22 @@ package fr.forum_thalie.tsumugi.planning
|
|||
import android.content.Context
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import fr.forum_thalie.tsumugi.Async
|
||||
import fr.forum_thalie.tsumugi.R
|
||||
import fr.forum_thalie.tsumugi.weekdays
|
||||
import org.json.JSONObject
|
||||
import java.io.IOException
|
||||
import java.net.URL
|
||||
import java.util.*
|
||||
import kotlin.collections.ArrayList
|
||||
|
||||
class Planning {
|
||||
|
||||
val programmes: ArrayList<Programme> = ArrayList()
|
||||
private var regularProgramme: String? = null
|
||||
val currentProgramme: MutableLiveData<String> = MutableLiveData()
|
||||
val isProgrammeUpdated: MutableLiveData<Boolean> = MutableLiveData()
|
||||
val isDataFetched: MutableLiveData<Boolean> = MutableLiveData()
|
||||
|
||||
var timeZone: TimeZone = Calendar.getInstance().timeZone
|
||||
|
||||
private fun findCurrentProgramme(): String
|
||||
{
|
||||
|
|
@ -21,7 +26,7 @@ class Planning {
|
|||
if (it.isCurrent())
|
||||
return it.title
|
||||
}
|
||||
return regularProgramme ?: "none"
|
||||
return regularProgramme ?: "-"
|
||||
}
|
||||
|
||||
fun checkProgramme()
|
||||
|
|
@ -81,9 +86,17 @@ class Planning {
|
|||
programmes.add(Programme(title, periodicity, hourBegin, hourEnd))
|
||||
}
|
||||
}
|
||||
if (result.has("regular_programme"))
|
||||
regularProgramme = result.getString("regular_programme")
|
||||
isProgrammeUpdated.value = true
|
||||
regularProgramme = if (result.has("regular_programme"))
|
||||
result.getString("regular_programme")
|
||||
else
|
||||
context?.getString(R.string.regular_programme)
|
||||
|
||||
timeZone = if (result.has("timezone"))
|
||||
TimeZone.getTimeZone(result.getString("timezone"))
|
||||
else
|
||||
Calendar.getInstance().timeZone
|
||||
|
||||
isDataFetched.value = true
|
||||
}
|
||||
Async(scrape, post)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ class Programme (val title: String, private val periodicity: Int, private val ho
|
|||
}
|
||||
|
||||
fun isCurrent(): Boolean {
|
||||
val now = Calendar.getInstance(TimeZone.getTimeZone("GMT+1"))
|
||||
val now = Calendar.getInstance(Planning.instance.timeZone)
|
||||
val currentDay =
|
||||
if (now.get(Calendar.DAY_OF_WEEK) - 1 == 0) 6 else now.get(Calendar.DAY_OF_WEEK) - 2
|
||||
// 0 (Monday) to 5 (Saturday) + 6 (Sunday)
|
||||
|
|
@ -59,14 +59,20 @@ class Programme (val title: String, private val periodicity: Int, private val ho
|
|||
return "Title: $title, time info (periodicity, begin, end): $periodicity, $hourBegin, $hourEnd"
|
||||
}
|
||||
|
||||
private val offset1 = (Planning.instance.timeZone.getOffset(System.currentTimeMillis())) / (60*1000)
|
||||
private val offset2 = (Calendar.getInstance().timeZone.getOffset(System.currentTimeMillis())) / (60*1000)
|
||||
|
||||
fun begin(): String {
|
||||
return "%02d:%02d".format(hourBegin/60, hourBegin%60)
|
||||
val hourBeginTZCorrect = hourBegin // + offset1 - offset2
|
||||
return "%02d:%02d".format(hourBeginTZCorrect/60, hourBeginTZCorrect%60)
|
||||
}
|
||||
|
||||
fun end(): String {
|
||||
return "%02d:%02d".format(hourEnd/60, hourEnd%60)
|
||||
val hourEndTZCorrect = hourEnd // + offset1 - offset2
|
||||
return "%02d:%02d".format(hourEndTZCorrect/60, hourEndTZCorrect%60)
|
||||
}
|
||||
|
||||
/*
|
||||
fun days(): String {
|
||||
val res = ArrayList<String>()
|
||||
for (i in 0 until weekdays.size) {
|
||||
|
|
@ -78,6 +84,8 @@ class Programme (val title: String, private val periodicity: Int, private val ho
|
|||
return res.toString().drop(1).dropLast(1) // drop '[' and ']'
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
init {
|
||||
Log.d(tag, this.toString())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import androidx.constraintlayout.widget.ConstraintLayout
|
|||
import androidx.recyclerview.widget.RecyclerView
|
||||
import fr.forum_thalie.tsumugi.R
|
||||
import fr.forum_thalie.tsumugi.colorBlue
|
||||
import fr.forum_thalie.tsumugi.planning.Planning
|
||||
import fr.forum_thalie.tsumugi.planning.Programme
|
||||
import fr.forum_thalie.tsumugi.weekdays
|
||||
import fr.forum_thalie.tsumugi.weekdaysSundayFirst
|
||||
|
|
@ -45,7 +46,7 @@ class ProgrammeAdapter(private val dataSet: ArrayList<Programme>, private val da
|
|||
programmeName.text = dataSet[position].title
|
||||
programmeEnd.text = dataSet[position].end()
|
||||
|
||||
if (dataSet[position].isCurrent() && (Calendar.getInstance(TimeZone.getTimeZone("GMT+1")).get(Calendar.DAY_OF_WEEK) - 1 == weekdaysSundayFirst.indexOf(day)))
|
||||
if (dataSet[position].isCurrent() && (Calendar.getInstance(Planning.instance.timeZone).get(Calendar.DAY_OF_WEEK) - 1 == weekdaysSundayFirst.indexOf(day)))
|
||||
{
|
||||
programmeStart.setTextColor(colorBlue)
|
||||
programmeEnd.setTextColor(colorBlue)
|
||||
|
|
|
|||
|
|
@ -41,24 +41,21 @@ class ProgrammeDayFragment(private val day: String) : Fragment() {
|
|||
layoutManager = viewManager
|
||||
adapter = viewAdapter
|
||||
}
|
||||
Planning.instance.currentProgramme.observeForever(isProgrammeUpdatedObserver)
|
||||
Planning.instance.currentProgramme.observe(viewLifecycleOwner, Observer<String> {
|
||||
programmeOfTheDay.clear()
|
||||
Planning.instance.programmes.forEach {
|
||||
if (it.isThisDay(day = weekdays.indexOf(day)))
|
||||
programmeOfTheDay.add(it)
|
||||
}
|
||||
viewAdapter.notifyDataSetChanged()
|
||||
})
|
||||
|
||||
Planning.instance.isDataFetched.observe(viewLifecycleOwner, Observer<Boolean> {
|
||||
viewAdapter.notifyDataSetChanged()
|
||||
})
|
||||
return root
|
||||
}
|
||||
|
||||
private val isProgrammeUpdatedObserver = Observer<String> {
|
||||
programmeOfTheDay.clear()
|
||||
Planning.instance.programmes.forEach {
|
||||
if (it.isThisDay(day = weekdays.indexOf(day)))
|
||||
programmeOfTheDay.add(it)
|
||||
}
|
||||
viewAdapter.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
Planning.instance.currentProgramme.removeObserver(isProgrammeUpdatedObserver)
|
||||
}
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun newInstance(day: String) =
|
||||
|
|
|
|||
|
|
@ -10,9 +10,9 @@ import androidx.fragment.app.FragmentPagerAdapter
|
|||
import androidx.viewpager.widget.ViewPager
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
import fr.forum_thalie.tsumugi.R
|
||||
import fr.forum_thalie.tsumugi.planning.Planning
|
||||
import fr.forum_thalie.tsumugi.ui.APagerAdapter
|
||||
import fr.forum_thalie.tsumugi.weekdays
|
||||
import fr.forum_thalie.tsumugi.weekdaysSundayFirst
|
||||
import java.util.*
|
||||
|
||||
class ProgrammeFragment : Fragment() {
|
||||
|
|
@ -36,7 +36,7 @@ class ProgrammeFragment : Fragment() {
|
|||
}
|
||||
|
||||
viewPager.adapter = adapter
|
||||
val todaySundayFirst = Calendar.getInstance(TimeZone.getTimeZone("GMT+1")).get(Calendar.DAY_OF_WEEK) - 1
|
||||
val todaySundayFirst = Calendar.getInstance(Planning.instance.timeZone).get(Calendar.DAY_OF_WEEK) - 1
|
||||
viewPager.currentItem = (todaySundayFirst - 1)%7
|
||||
|
||||
val tabLayout : TabLayout = root.findViewById(R.id.dayTabLayout)
|
||||
|
|
|
|||
|
|
@ -43,11 +43,12 @@
|
|||
<string name="disable">Disable</string>
|
||||
<string name="website_url">https://tsumugi.forum-thalie.fr/</string>
|
||||
<string name="rss_url">https://tsumugi.forum-thalie.fr/?feed=rss2</string>
|
||||
<string name="planning_url">ADD SOME URL HERE...</string>
|
||||
<string name="planning_url">ADD SOME URL HERE</string>
|
||||
<string name="select_one_day">Select at least one day</string>
|
||||
<string name="no_alarm_set">No alarm set</string>
|
||||
<string name="next_alarm">Next alarm:</string>
|
||||
<string name="lp">Last played</string>
|
||||
<string name="programme">Programme</string>
|
||||
<string name="regular_programme">Programme régulier</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
|||
Loading…
Reference in New Issue