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 android.content.Context
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import fr.forum_thalie.tsumugi.Async
|
import fr.forum_thalie.tsumugi.Async
|
||||||
|
import fr.forum_thalie.tsumugi.R
|
||||||
import fr.forum_thalie.tsumugi.weekdays
|
import fr.forum_thalie.tsumugi.weekdays
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.net.URL
|
import java.net.URL
|
||||||
|
import java.util.*
|
||||||
|
import kotlin.collections.ArrayList
|
||||||
|
|
||||||
class Planning {
|
class Planning {
|
||||||
|
|
||||||
val programmes: ArrayList<Programme> = ArrayList()
|
val programmes: ArrayList<Programme> = ArrayList()
|
||||||
private var regularProgramme: String? = null
|
private var regularProgramme: String? = null
|
||||||
val currentProgramme: MutableLiveData<String> = MutableLiveData()
|
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
|
private fun findCurrentProgramme(): String
|
||||||
{
|
{
|
||||||
|
|
@ -21,7 +26,7 @@ class Planning {
|
||||||
if (it.isCurrent())
|
if (it.isCurrent())
|
||||||
return it.title
|
return it.title
|
||||||
}
|
}
|
||||||
return regularProgramme ?: "none"
|
return regularProgramme ?: "-"
|
||||||
}
|
}
|
||||||
|
|
||||||
fun checkProgramme()
|
fun checkProgramme()
|
||||||
|
|
@ -81,9 +86,17 @@ class Planning {
|
||||||
programmes.add(Programme(title, periodicity, hourBegin, hourEnd))
|
programmes.add(Programme(title, periodicity, hourBegin, hourEnd))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (result.has("regular_programme"))
|
regularProgramme = if (result.has("regular_programme"))
|
||||||
regularProgramme = result.getString("regular_programme")
|
result.getString("regular_programme")
|
||||||
isProgrammeUpdated.value = true
|
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)
|
Async(scrape, post)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ class Programme (val title: String, private val periodicity: Int, private val ho
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isCurrent(): Boolean {
|
fun isCurrent(): Boolean {
|
||||||
val now = Calendar.getInstance(TimeZone.getTimeZone("GMT+1"))
|
val now = Calendar.getInstance(Planning.instance.timeZone)
|
||||||
val currentDay =
|
val currentDay =
|
||||||
if (now.get(Calendar.DAY_OF_WEEK) - 1 == 0) 6 else now.get(Calendar.DAY_OF_WEEK) - 2
|
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)
|
// 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"
|
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 {
|
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 {
|
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 {
|
fun days(): String {
|
||||||
val res = ArrayList<String>()
|
val res = ArrayList<String>()
|
||||||
for (i in 0 until weekdays.size) {
|
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 ']'
|
return res.toString().drop(1).dropLast(1) // drop '[' and ']'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
init {
|
init {
|
||||||
Log.d(tag, this.toString())
|
Log.d(tag, this.toString())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import androidx.constraintlayout.widget.ConstraintLayout
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import fr.forum_thalie.tsumugi.R
|
import fr.forum_thalie.tsumugi.R
|
||||||
import fr.forum_thalie.tsumugi.colorBlue
|
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.planning.Programme
|
||||||
import fr.forum_thalie.tsumugi.weekdays
|
import fr.forum_thalie.tsumugi.weekdays
|
||||||
import fr.forum_thalie.tsumugi.weekdaysSundayFirst
|
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
|
programmeName.text = dataSet[position].title
|
||||||
programmeEnd.text = dataSet[position].end()
|
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)
|
programmeStart.setTextColor(colorBlue)
|
||||||
programmeEnd.setTextColor(colorBlue)
|
programmeEnd.setTextColor(colorBlue)
|
||||||
|
|
|
||||||
|
|
@ -41,22 +41,19 @@ class ProgrammeDayFragment(private val day: String) : Fragment() {
|
||||||
layoutManager = viewManager
|
layoutManager = viewManager
|
||||||
adapter = viewAdapter
|
adapter = viewAdapter
|
||||||
}
|
}
|
||||||
Planning.instance.currentProgramme.observeForever(isProgrammeUpdatedObserver)
|
Planning.instance.currentProgramme.observe(viewLifecycleOwner, Observer<String> {
|
||||||
return root
|
|
||||||
}
|
|
||||||
|
|
||||||
private val isProgrammeUpdatedObserver = Observer<String> {
|
|
||||||
programmeOfTheDay.clear()
|
programmeOfTheDay.clear()
|
||||||
Planning.instance.programmes.forEach {
|
Planning.instance.programmes.forEach {
|
||||||
if (it.isThisDay(day = weekdays.indexOf(day)))
|
if (it.isThisDay(day = weekdays.indexOf(day)))
|
||||||
programmeOfTheDay.add(it)
|
programmeOfTheDay.add(it)
|
||||||
}
|
}
|
||||||
viewAdapter.notifyDataSetChanged()
|
viewAdapter.notifyDataSetChanged()
|
||||||
}
|
})
|
||||||
|
|
||||||
override fun onDestroyView() {
|
Planning.instance.isDataFetched.observe(viewLifecycleOwner, Observer<Boolean> {
|
||||||
super.onDestroyView()
|
viewAdapter.notifyDataSetChanged()
|
||||||
Planning.instance.currentProgramme.removeObserver(isProgrammeUpdatedObserver)
|
})
|
||||||
|
return root
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,9 @@ import androidx.fragment.app.FragmentPagerAdapter
|
||||||
import androidx.viewpager.widget.ViewPager
|
import androidx.viewpager.widget.ViewPager
|
||||||
import com.google.android.material.tabs.TabLayout
|
import com.google.android.material.tabs.TabLayout
|
||||||
import fr.forum_thalie.tsumugi.R
|
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.ui.APagerAdapter
|
||||||
import fr.forum_thalie.tsumugi.weekdays
|
import fr.forum_thalie.tsumugi.weekdays
|
||||||
import fr.forum_thalie.tsumugi.weekdaysSundayFirst
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class ProgrammeFragment : Fragment() {
|
class ProgrammeFragment : Fragment() {
|
||||||
|
|
@ -36,7 +36,7 @@ class ProgrammeFragment : Fragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
viewPager.adapter = adapter
|
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
|
viewPager.currentItem = (todaySundayFirst - 1)%7
|
||||||
|
|
||||||
val tabLayout : TabLayout = root.findViewById(R.id.dayTabLayout)
|
val tabLayout : TabLayout = root.findViewById(R.id.dayTabLayout)
|
||||||
|
|
|
||||||
|
|
@ -43,11 +43,12 @@
|
||||||
<string name="disable">Disable</string>
|
<string name="disable">Disable</string>
|
||||||
<string name="website_url">https://tsumugi.forum-thalie.fr/</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="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="select_one_day">Select at least one day</string>
|
||||||
<string name="no_alarm_set">No alarm set</string>
|
<string name="no_alarm_set">No alarm set</string>
|
||||||
<string name="next_alarm">Next alarm:</string>
|
<string name="next_alarm">Next alarm:</string>
|
||||||
<string name="lp">Last played</string>
|
<string name="lp">Last played</string>
|
||||||
<string name="programme">Programme</string>
|
<string name="programme">Programme</string>
|
||||||
|
<string name="regular_programme">Programme régulier</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue