Преглед на файлове

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

yattoz преди 4 години
родител
ревизия
c1451f264a

+ 18 - 5
app/src/main/java/fr/forum_thalie/tsumugi/planning/Planning.kt Целия файл

@@ -3,17 +3,22 @@ package fr.forum_thalie.tsumugi.planning
3 3
 import android.content.Context
4 4
 import androidx.lifecycle.MutableLiveData
5 5
 import fr.forum_thalie.tsumugi.Async
6
+import fr.forum_thalie.tsumugi.R
6 7
 import fr.forum_thalie.tsumugi.weekdays
7 8
 import org.json.JSONObject
8 9
 import java.io.IOException
9 10
 import java.net.URL
11
+import java.util.*
12
+import kotlin.collections.ArrayList
10 13
 
11 14
 class Planning {
12 15
 
13 16
     val programmes: ArrayList<Programme> = ArrayList()
14 17
     private var regularProgramme: String? = null
15 18
     val currentProgramme: MutableLiveData<String> = MutableLiveData()
16
-    val isProgrammeUpdated: MutableLiveData<Boolean> = MutableLiveData()
19
+    val isDataFetched: MutableLiveData<Boolean> = MutableLiveData()
20
+
21
+    var timeZone: TimeZone = Calendar.getInstance().timeZone
17 22
 
18 23
     private fun findCurrentProgramme(): String
19 24
     {
@@ -21,7 +26,7 @@ class Planning {
21 26
             if (it.isCurrent())
22 27
                 return it.title
23 28
         }
24
-        return regularProgramme ?: "none"
29
+        return regularProgramme ?: "-"
25 30
     }
26 31
 
27 32
     fun checkProgramme()
@@ -81,9 +86,17 @@ class Planning {
81 86
                     programmes.add(Programme(title, periodicity, hourBegin, hourEnd))
82 87
                 }
83 88
             }
84
-            if (result.has("regular_programme"))
85
-                regularProgramme = result.getString("regular_programme")
86
-            isProgrammeUpdated.value = true
89
+            regularProgramme = if (result.has("regular_programme"))
90
+                result.getString("regular_programme")
91
+            else
92
+                context?.getString(R.string.regular_programme)
93
+
94
+            timeZone = if (result.has("timezone"))
95
+                TimeZone.getTimeZone(result.getString("timezone"))
96
+            else
97
+                Calendar.getInstance().timeZone
98
+
99
+            isDataFetched.value = true
87 100
         }
88 101
         Async(scrape, post)
89 102
     }

+ 11 - 3
app/src/main/java/fr/forum_thalie/tsumugi/planning/Programme.kt Целия файл

@@ -21,7 +21,7 @@ class Programme (val title: String, private val periodicity: Int, private val ho
21 21
     }
22 22
 
23 23
     fun isCurrent(): Boolean {
24
-        val now = Calendar.getInstance(TimeZone.getTimeZone("GMT+1"))
24
+        val now = Calendar.getInstance(Planning.instance.timeZone)
25 25
         val currentDay =
26 26
             if (now.get(Calendar.DAY_OF_WEEK) - 1 == 0) 6 else now.get(Calendar.DAY_OF_WEEK) - 2
27 27
         // 0 (Monday) to 5 (Saturday) + 6 (Sunday)
@@ -59,14 +59,20 @@ class Programme (val title: String, private val periodicity: Int, private val ho
59 59
         return "Title: $title, time info (periodicity, begin, end): $periodicity, $hourBegin, $hourEnd"
60 60
     }
61 61
 
62
+    private val offset1 = (Planning.instance.timeZone.getOffset(System.currentTimeMillis())) / (60*1000)
63
+    private val offset2 = (Calendar.getInstance().timeZone.getOffset(System.currentTimeMillis())) / (60*1000)
64
+
62 65
     fun begin(): String {
63
-        return "%02d:%02d".format(hourBegin/60, hourBegin%60)
66
+        val hourBeginTZCorrect = hourBegin // + offset1 - offset2
67
+        return "%02d:%02d".format(hourBeginTZCorrect/60, hourBeginTZCorrect%60)
64 68
     }
65 69
 
66 70
     fun end(): String {
67
-        return "%02d:%02d".format(hourEnd/60, hourEnd%60)
71
+        val hourEndTZCorrect = hourEnd // + offset1 - offset2
72
+        return "%02d:%02d".format(hourEndTZCorrect/60, hourEndTZCorrect%60)
68 73
     }
69 74
 
75
+    /*
70 76
     fun days(): String {
71 77
         val res = ArrayList<String>()
72 78
         for (i in 0 until weekdays.size) {
@@ -78,6 +84,8 @@ class Programme (val title: String, private val periodicity: Int, private val ho
78 84
         return res.toString().drop(1).dropLast(1) //  drop '[' and ']'
79 85
     }
80 86
 
87
+     */
88
+
81 89
     init {
82 90
         Log.d(tag, this.toString())
83 91
     }

+ 2 - 1
app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeAdapter.kt Целия файл

@@ -8,6 +8,7 @@ import androidx.constraintlayout.widget.ConstraintLayout
8 8
 import androidx.recyclerview.widget.RecyclerView
9 9
 import fr.forum_thalie.tsumugi.R
10 10
 import fr.forum_thalie.tsumugi.colorBlue
11
+import fr.forum_thalie.tsumugi.planning.Planning
11 12
 import fr.forum_thalie.tsumugi.planning.Programme
12 13
 import fr.forum_thalie.tsumugi.weekdays
13 14
 import fr.forum_thalie.tsumugi.weekdaysSundayFirst
@@ -45,7 +46,7 @@ class ProgrammeAdapter(private val dataSet: ArrayList<Programme>, private val da
45 46
         programmeName.text = dataSet[position].title
46 47
         programmeEnd.text = dataSet[position].end()
47 48
 
48
-        if (dataSet[position].isCurrent() && (Calendar.getInstance(TimeZone.getTimeZone("GMT+1")).get(Calendar.DAY_OF_WEEK) - 1 == weekdaysSundayFirst.indexOf(day)))
49
+        if (dataSet[position].isCurrent() && (Calendar.getInstance(Planning.instance.timeZone).get(Calendar.DAY_OF_WEEK) - 1 == weekdaysSundayFirst.indexOf(day)))
49 50
         {
50 51
             programmeStart.setTextColor(colorBlue)
51 52
             programmeEnd.setTextColor(colorBlue)

+ 12 - 15
app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeDayFragment.kt Целия файл

@@ -41,22 +41,19 @@ class ProgrammeDayFragment(private val day: String) : Fragment() {
41 41
             layoutManager = viewManager
42 42
             adapter = viewAdapter
43 43
         }
44
-        Planning.instance.currentProgramme.observeForever(isProgrammeUpdatedObserver)
45
-        return root
46
-    }
44
+        Planning.instance.currentProgramme.observe(viewLifecycleOwner,  Observer<String> {
45
+            programmeOfTheDay.clear()
46
+            Planning.instance.programmes.forEach {
47
+                if (it.isThisDay(day = weekdays.indexOf(day)))
48
+                    programmeOfTheDay.add(it)
49
+            }
50
+            viewAdapter.notifyDataSetChanged()
51
+        })
47 52
 
48
-    private val isProgrammeUpdatedObserver = Observer<String> {
49
-        programmeOfTheDay.clear()
50
-        Planning.instance.programmes.forEach {
51
-            if (it.isThisDay(day = weekdays.indexOf(day)))
52
-                programmeOfTheDay.add(it)
53
-        }
54
-        viewAdapter.notifyDataSetChanged()
55
-    }
56
-
57
-    override fun onDestroyView() {
58
-        super.onDestroyView()
59
-        Planning.instance.currentProgramme.removeObserver(isProgrammeUpdatedObserver)
53
+        Planning.instance.isDataFetched.observe(viewLifecycleOwner, Observer<Boolean> {
54
+            viewAdapter.notifyDataSetChanged()
55
+        })
56
+        return root
60 57
     }
61 58
 
62 59
     companion object {

+ 2 - 2
app/src/main/java/fr/forum_thalie/tsumugi/ui/programme/ProgrammeFragment.kt Целия файл

@@ -10,9 +10,9 @@ import androidx.fragment.app.FragmentPagerAdapter
10 10
 import androidx.viewpager.widget.ViewPager
11 11
 import com.google.android.material.tabs.TabLayout
12 12
 import fr.forum_thalie.tsumugi.R
13
+import fr.forum_thalie.tsumugi.planning.Planning
13 14
 import fr.forum_thalie.tsumugi.ui.APagerAdapter
14 15
 import fr.forum_thalie.tsumugi.weekdays
15
-import fr.forum_thalie.tsumugi.weekdaysSundayFirst
16 16
 import java.util.*
17 17
 
18 18
 class ProgrammeFragment : Fragment() {
@@ -36,7 +36,7 @@ class ProgrammeFragment : Fragment() {
36 36
         }
37 37
 
38 38
         viewPager.adapter = adapter
39
-        val todaySundayFirst = Calendar.getInstance(TimeZone.getTimeZone("GMT+1")).get(Calendar.DAY_OF_WEEK) - 1
39
+        val todaySundayFirst = Calendar.getInstance(Planning.instance.timeZone).get(Calendar.DAY_OF_WEEK) - 1
40 40
         viewPager.currentItem = (todaySundayFirst - 1)%7
41 41
 
42 42
         val tabLayout : TabLayout = root.findViewById(R.id.dayTabLayout)

+ 2 - 1
app/src/main/res/values/strings.xml Целия файл

@@ -43,11 +43,12 @@
43 43
     <string name="disable">Disable</string>
44 44
     <string name="website_url">https://tsumugi.forum-thalie.fr/</string>
45 45
     <string name="rss_url">https://tsumugi.forum-thalie.fr/?feed=rss2</string>
46
-    <string name="planning_url">ADD SOME URL HERE...</string>
46
+    <string name="planning_url">ADD SOME URL HERE</string>
47 47
     <string name="select_one_day">Select at least one day</string>
48 48
     <string name="no_alarm_set">No alarm set</string>
49 49
     <string name="next_alarm">Next alarm:</string>
50 50
     <string name="lp">Last played</string>
51 51
     <string name="programme">Programme</string>
52
+    <string name="regular_programme">Programme régulier</string>
52 53
 
53 54
 </resources>