set timezone in JSON. Computes/displays with JSON Timezone (not local)

remotes/origin/devel
yattoz 2019-12-18 21:51:16 +01:00
parent a4669716b0
commit c1451f264a
6 changed files with 47 additions and 27 deletions

View File

@ -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)
}

View File

@ -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())
}

View File

@ -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)

View File

@ -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) =

View File

@ -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)

View File

@ -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>