mirror of
https://github.com/szkolny-eu/szkolny-android.git
synced 2025-02-22 06:24:44 +01:00
[API/Edudziennik] Fix error when limited access. Remove timetable not public.
This commit is contained in:
parent
bce74a408c
commit
d626d98421
@ -168,7 +168,6 @@ const val ERROR_IDZIENNIK_API_NO_REGISTER = 452
|
|||||||
const val ERROR_LOGIN_EDUDZIENNIK_WEB_INVALID_LOGIN = 501
|
const val ERROR_LOGIN_EDUDZIENNIK_WEB_INVALID_LOGIN = 501
|
||||||
const val ERROR_LOGIN_EDUDZIENNIK_WEB_OTHER = 510
|
const val ERROR_LOGIN_EDUDZIENNIK_WEB_OTHER = 510
|
||||||
const val ERROR_LOGIN_EDUDZIENNIK_WEB_NO_SESSION_ID = 511
|
const val ERROR_LOGIN_EDUDZIENNIK_WEB_NO_SESSION_ID = 511
|
||||||
const val ERROR_EDUDZIENNIK_WEB_TIMETABLE_NOT_PUBLIC = 520
|
|
||||||
const val ERROR_EDUDZIENNIK_WEB_LIMITED_ACCESS = 521
|
const val ERROR_EDUDZIENNIK_WEB_LIMITED_ACCESS = 521
|
||||||
const val ERROR_EDUDZIENNIK_WEB_SESSION_EXPIRED = 522
|
const val ERROR_EDUDZIENNIK_WEB_SESSION_EXPIRED = 522
|
||||||
const val ERROR_EDUDZIENNIK_WEB_TEAM_MISSING = 530
|
const val ERROR_EDUDZIENNIK_WEB_TEAM_MISSING = 530
|
||||||
|
@ -88,11 +88,6 @@ class DataEdudziennik(app: App, profile: Profile?, loginStore: LoginStore) : Dat
|
|||||||
get() { mSchoolName = mSchoolName ?: profile?.getStudentData("schoolName", null); return mSchoolName }
|
get() { mSchoolName = mSchoolName ?: profile?.getStudentData("schoolName", null); return mSchoolName }
|
||||||
set(value) { profile?.putStudentData("schoolName", value) ?: return; mSchoolName = value }
|
set(value) { profile?.putStudentData("schoolName", value) ?: return; mSchoolName = value }
|
||||||
|
|
||||||
private var mTimetableNotPublic: Boolean? = null
|
|
||||||
var timetableNotPublic: Boolean
|
|
||||||
get() { mTimetableNotPublic = mTimetableNotPublic ?: profile?.getStudentData("timetableNotPublic", false); return mTimetableNotPublic ?: false }
|
|
||||||
set(value) { profile?.putStudentData("timetableNotPublic", value) ?: return; mTimetableNotPublic = value }
|
|
||||||
|
|
||||||
val studentEndpoint: String
|
val studentEndpoint: String
|
||||||
get() = "Students/$studentId/"
|
get() = "Students/$studentId/"
|
||||||
|
|
||||||
|
@ -124,8 +124,7 @@ class Edudziennik(val app: App, val profile: Profile?, val loginStore: LoginStor
|
|||||||
ERROR_LOGIN_EDUDZIENNIK_WEB_NO_SESSION_ID -> {
|
ERROR_LOGIN_EDUDZIENNIK_WEB_NO_SESSION_ID -> {
|
||||||
login()
|
login()
|
||||||
}
|
}
|
||||||
ERROR_EDUDZIENNIK_WEB_TIMETABLE_NOT_PUBLIC -> {
|
ERROR_EDUDZIENNIK_WEB_LIMITED_ACCESS -> {
|
||||||
data.timetableNotPublic = true
|
|
||||||
data()
|
data()
|
||||||
}
|
}
|
||||||
else -> callback.onError(apiError)
|
else -> callback.onError(apiError)
|
||||||
|
@ -5,13 +5,11 @@
|
|||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.web
|
package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.web
|
||||||
|
|
||||||
import org.jsoup.Jsoup
|
import org.jsoup.Jsoup
|
||||||
import pl.szczodrzynski.edziennik.data.api.ERROR_EDUDZIENNIK_WEB_TIMETABLE_NOT_PUBLIC
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_SUBJECT_ID
|
import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_SUBJECT_ID
|
||||||
import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_TEACHER_ID
|
import pl.szczodrzynski.edziennik.data.api.Regexes.EDUDZIENNIK_TEACHER_ID
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
|
import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.DataEdudziennik
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.ENDPOINT_EDUDZIENNIK_WEB_TIMETABLE
|
import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.ENDPOINT_EDUDZIENNIK_WEB_TIMETABLE
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb
|
import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.EdudziennikWeb
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
|
import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonRange
|
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonRange
|
||||||
@ -56,17 +54,7 @@ class EdudziennikWebTimetable(override val data: DataEdudziennik,
|
|||||||
|
|
||||||
val table = doc.select("#Schedule tbody").first()
|
val table = doc.select("#Schedule tbody").first()
|
||||||
|
|
||||||
if (table.text().trim() == "Brak planu lekcji.") {
|
if (!table.text().contains("Brak planu lekcji.")) {
|
||||||
val today = Date.getToday()
|
|
||||||
val schoolYearStart = if (today.month >= 9) today.year else today.year - 1
|
|
||||||
|
|
||||||
if (weekStart >= Date(schoolYearStart, 9, 1)) {
|
|
||||||
data.error(ApiError(TAG, ERROR_EDUDZIENNIK_WEB_TIMETABLE_NOT_PUBLIC)
|
|
||||||
.withApiResponse(text))
|
|
||||||
onSuccess()
|
|
||||||
return@webGet
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
table.children().forEach { row ->
|
table.children().forEach { row ->
|
||||||
val rowElements = row.children()
|
val rowElements = row.children()
|
||||||
|
|
||||||
@ -152,8 +140,6 @@ class EdudziennikWebTimetable(override val data: DataEdudziennik,
|
|||||||
|
|
||||||
d(TAG, "Clearing lessons between ${weekStart.stringY_m_d} and ${weekEnd.stringY_m_d} - timetable downloaded for $getDate")
|
d(TAG, "Clearing lessons between ${weekStart.stringY_m_d} and ${weekEnd.stringY_m_d} - timetable downloaded for $getDate")
|
||||||
|
|
||||||
if (data.timetableNotPublic) data.timetableNotPublic = false
|
|
||||||
|
|
||||||
data.toRemove.add(DataRemoveModel.Timetable.between(weekStart, weekEnd))
|
data.toRemove.add(DataRemoveModel.Timetable.between(weekStart, weekEnd))
|
||||||
data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_TIMETABLE, SYNC_ALWAYS)
|
data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_TIMETABLE, SYNC_ALWAYS)
|
||||||
onSuccess()
|
onSuccess()
|
||||||
|
@ -15,6 +15,7 @@ import androidx.lifecycle.Observer
|
|||||||
import androidx.viewpager.widget.ViewPager
|
import androidx.viewpager.widget.ViewPager
|
||||||
import com.google.android.material.datepicker.MaterialDatePicker
|
import com.google.android.material.datepicker.MaterialDatePicker
|
||||||
import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial
|
import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial
|
||||||
|
import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial.Icon2
|
||||||
import com.mikepenz.iconics.typeface.library.szkolny.font.SzkolnyFont
|
import com.mikepenz.iconics.typeface.library.szkolny.font.SzkolnyFont
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import pl.szczodrzynski.edziennik.App
|
import pl.szczodrzynski.edziennik.App
|
||||||
@ -24,6 +25,7 @@ import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
|||||||
import pl.szczodrzynski.edziennik.data.db.modules.timetable.Lesson
|
import pl.szczodrzynski.edziennik.data.db.modules.timetable.Lesson
|
||||||
import pl.szczodrzynski.edziennik.databinding.FragmentTimetableV2Binding
|
import pl.szczodrzynski.edziennik.databinding.FragmentTimetableV2Binding
|
||||||
import pl.szczodrzynski.edziennik.observeOnce
|
import pl.szczodrzynski.edziennik.observeOnce
|
||||||
|
import pl.szczodrzynski.edziennik.ui.dialogs.event.EventManualDialog
|
||||||
import pl.szczodrzynski.edziennik.utils.Themes
|
import pl.szczodrzynski.edziennik.utils.Themes
|
||||||
import pl.szczodrzynski.edziennik.utils.models.Date
|
import pl.szczodrzynski.edziennik.utils.models.Date
|
||||||
import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem
|
import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem
|
||||||
@ -103,8 +105,8 @@ class TimetableFragment : Fragment(), CoroutineScope {
|
|||||||
|
|
||||||
val monthDayCount = listOf(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
|
val monthDayCount = listOf(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
|
||||||
|
|
||||||
val yearStart = app.profile.dateSemester1Start?.clone() ?: return@async
|
val yearStart = app.profile.dateSemester1Start.clone() ?: return@async
|
||||||
val yearEnd = app.profile.dateYearEnd ?: return@async
|
val yearEnd = app.profile.dateYearEnd
|
||||||
while (yearStart.value <= yearEnd.value) {
|
while (yearStart.value <= yearEnd.value) {
|
||||||
items += yearStart.clone()
|
items += yearStart.clone()
|
||||||
var maxDays = monthDayCount[yearStart.month-1]
|
var maxDays = monthDayCount[yearStart.month-1]
|
||||||
@ -180,6 +182,22 @@ class TimetableFragment : Fragment(), CoroutineScope {
|
|||||||
show(this@TimetableFragment.activity.supportFragmentManager, "MaterialDatePicker")
|
show(this@TimetableFragment.activity.supportFragmentManager, "MaterialDatePicker")
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
BottomSheetPrimaryItem(true)
|
||||||
|
.withTitle(R.string.menu_add_event)
|
||||||
|
.withDescription(R.string.menu_add_event_desc)
|
||||||
|
.withIcon(SzkolnyFont.Icon.szf_calendar_plus_outline)
|
||||||
|
.withOnClickListener(View.OnClickListener {
|
||||||
|
activity.bottomSheet.close()
|
||||||
|
EventManualDialog(activity, App.profileId, defaultDate = pageSelection)
|
||||||
|
}),
|
||||||
|
BottomSheetPrimaryItem(true)
|
||||||
|
.withTitle(R.string.menu_generate_block_timetable)
|
||||||
|
.withDescription(R.string.menu_generate_block_timetable_desc)
|
||||||
|
.withIcon(Icon2.cmd_table_large)
|
||||||
|
.withOnClickListener(View.OnClickListener {
|
||||||
|
activity.bottomSheet.close()
|
||||||
|
//showBlockTimetableDialog()
|
||||||
|
}),
|
||||||
BottomSheetSeparatorItem(true),
|
BottomSheetSeparatorItem(true),
|
||||||
BottomSheetPrimaryItem(true)
|
BottomSheetPrimaryItem(true)
|
||||||
.withTitle(R.string.menu_mark_as_read)
|
.withTitle(R.string.menu_mark_as_read)
|
||||||
@ -199,6 +217,22 @@ class TimetableFragment : Fragment(), CoroutineScope {
|
|||||||
})
|
})
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
/*private fun showBlockTimetableDialog() {
|
||||||
|
val weekCurrentStart = Week.getWeekStart()
|
||||||
|
val weekCurrentEnd = Week.getWeekEnd()
|
||||||
|
val weekNextStart = weekCurrentEnd.clone().stepForward(0, 0, 1)
|
||||||
|
val weekNextEnd = weekNextStart.clone().stepForward(0, 0, 6)
|
||||||
|
|
||||||
|
MaterialAlertDialogBuilder(activity)
|
||||||
|
.setTitle(R.string.timetable_generate_range)
|
||||||
|
.setMultiChoiceItems(arrayOf(
|
||||||
|
getString(R.string.timetable_generate_current_week_format, weekCurrentStart.formattedStringShort, weekCurrentEnd.formattedStringShort),
|
||||||
|
getString(R.string.timetable_generate_next_week_format, weekNextStart.formattedStringShort, weekNextEnd.formattedStringShort)
|
||||||
|
), BooleanArray(2)) { dialog, which, isChecked ->
|
||||||
|
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
private fun markLessonsAsSeen() = pageSelection?.let { date ->
|
private fun markLessonsAsSeen() = pageSelection?.let { date ->
|
||||||
app.db.timetableDao().getForDate(App.profileId, date).observeOnce(this@TimetableFragment, Observer { lessons ->
|
app.db.timetableDao().getForDate(App.profileId, date).observeOnce(this@TimetableFragment, Observer { lessons ->
|
||||||
lessons.forEach { lesson ->
|
lessons.forEach { lesson ->
|
||||||
|
@ -142,7 +142,6 @@
|
|||||||
<string name="error_501" translatable="false">ERROR_LOGIN_EDUDZIENNIK_WEB_INVALID_LOGIN</string>
|
<string name="error_501" translatable="false">ERROR_LOGIN_EDUDZIENNIK_WEB_INVALID_LOGIN</string>
|
||||||
<string name="error_510" translatable="false">ERROR_LOGIN_EDUDZIENNIK_WEB_OTHER</string>
|
<string name="error_510" translatable="false">ERROR_LOGIN_EDUDZIENNIK_WEB_OTHER</string>
|
||||||
<string name="error_511" translatable="false">ERROR_LOGIN_EDUDZIENNIK_WEB_NO_SESSION_ID</string>
|
<string name="error_511" translatable="false">ERROR_LOGIN_EDUDZIENNIK_WEB_NO_SESSION_ID</string>
|
||||||
<string name="error_520" translatable="false">ERROR_EDUDZIENNIK_WEB_TIMETABLE_NOT_PUBLIC</string>
|
|
||||||
<string name="error_521" translatable="false">ERROR_EDUDZIENNIK_WEB_LIMITED_ACCESS</string>
|
<string name="error_521" translatable="false">ERROR_EDUDZIENNIK_WEB_LIMITED_ACCESS</string>
|
||||||
<string name="error_522" translatable="false">ERROR_EDUDZIENNIK_WEB_SESSION_EXPIRED</string>
|
<string name="error_522" translatable="false">ERROR_EDUDZIENNIK_WEB_SESSION_EXPIRED</string>
|
||||||
<string name="error_530" translatable="false">ERROR_EDUDZIENNIK_WEB_TEAM_MISSING</string>
|
<string name="error_530" translatable="false">ERROR_EDUDZIENNIK_WEB_TEAM_MISSING</string>
|
||||||
@ -307,7 +306,6 @@
|
|||||||
<string name="error_501_reason">Błędny email lub hasło</string>
|
<string name="error_501_reason">Błędny email lub hasło</string>
|
||||||
<string name="error_510_reason">Inny błąd logowania</string>
|
<string name="error_510_reason">Inny błąd logowania</string>
|
||||||
<string name="error_511_reason">Brak ID sesji</string>
|
<string name="error_511_reason">Brak ID sesji</string>
|
||||||
<string name="error_520_reason">Plan lekcji niedostępny</string>
|
|
||||||
<string name="error_521_reason">Ograniczony dostęp do dziennika</string>
|
<string name="error_521_reason">Ograniczony dostęp do dziennika</string>
|
||||||
<string name="error_522_reason">Sesja wygasła</string>
|
<string name="error_522_reason">Sesja wygasła</string>
|
||||||
<string name="error_530_reason">Nie można pobrać informacji o klasie i szkole</string>
|
<string name="error_530_reason">Nie można pobrać informacji o klasie i szkole</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user