diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Errors.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Errors.kt index 2dff48ec..b0e79707 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Errors.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Errors.kt @@ -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_OTHER = 510 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_SESSION_EXPIRED = 522 const val ERROR_EDUDZIENNIK_WEB_TEAM_MISSING = 530 diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/DataEdudziennik.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/DataEdudziennik.kt index 056a06f4..059bfd70 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/DataEdudziennik.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/DataEdudziennik.kt @@ -88,11 +88,6 @@ class DataEdudziennik(app: App, profile: Profile?, loginStore: LoginStore) : Dat get() { mSchoolName = mSchoolName ?: profile?.getStudentData("schoolName", null); return mSchoolName } 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 get() = "Students/$studentId/" diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/Edudziennik.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/Edudziennik.kt index 697beacc..8980d1a1 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/Edudziennik.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/Edudziennik.kt @@ -124,8 +124,7 @@ class Edudziennik(val app: App, val profile: Profile?, val loginStore: LoginStor ERROR_LOGIN_EDUDZIENNIK_WEB_NO_SESSION_ID -> { login() } - ERROR_EDUDZIENNIK_WEB_TIMETABLE_NOT_PUBLIC -> { - data.timetableNotPublic = true + ERROR_EDUDZIENNIK_WEB_LIMITED_ACCESS -> { data() } else -> callback.onError(apiError) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebTimetable.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebTimetable.kt index 79879fc9..72862060 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebTimetable.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebTimetable.kt @@ -5,13 +5,11 @@ package pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.data.web 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_TEACHER_ID 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.data.EdudziennikWeb -import pl.szczodrzynski.edziennik.data.api.models.ApiError 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.lessons.LessonRange @@ -56,17 +54,7 @@ class EdudziennikWebTimetable(override val data: DataEdudziennik, val table = doc.select("#Schedule tbody").first() - if (table.text().trim() == "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 { + if (!table.text().contains("Brak planu lekcji.")) { table.children().forEach { row -> 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") - if (data.timetableNotPublic) data.timetableNotPublic = false - data.toRemove.add(DataRemoveModel.Timetable.between(weekStart, weekEnd)) data.setSyncNext(ENDPOINT_EDUDZIENNIK_WEB_TIMETABLE, SYNC_ALWAYS) onSuccess() diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/v2/TimetableFragment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/v2/TimetableFragment.kt index 76fdabba..37d9e77c 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/v2/TimetableFragment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/timetable/v2/TimetableFragment.kt @@ -15,6 +15,7 @@ import androidx.lifecycle.Observer import androidx.viewpager.widget.ViewPager 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.Icon2 import com.mikepenz.iconics.typeface.library.szkolny.font.SzkolnyFont import kotlinx.coroutines.* 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.databinding.FragmentTimetableV2Binding import pl.szczodrzynski.edziennik.observeOnce +import pl.szczodrzynski.edziennik.ui.dialogs.event.EventManualDialog import pl.szczodrzynski.edziennik.utils.Themes import pl.szczodrzynski.edziennik.utils.models.Date 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 yearStart = app.profile.dateSemester1Start?.clone() ?: return@async - val yearEnd = app.profile.dateYearEnd ?: return@async + val yearStart = app.profile.dateSemester1Start.clone() ?: return@async + val yearEnd = app.profile.dateYearEnd while (yearStart.value <= yearEnd.value) { items += yearStart.clone() var maxDays = monthDayCount[yearStart.month-1] @@ -180,6 +182,22 @@ class TimetableFragment : Fragment(), CoroutineScope { 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), BottomSheetPrimaryItem(true) .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 -> app.db.timetableDao().getForDate(App.profileId, date).observeOnce(this@TimetableFragment, Observer { lessons -> lessons.forEach { lesson -> diff --git a/app/src/main/res/values/errors.xml b/app/src/main/res/values/errors.xml index 6494d8a7..1943fce8 100644 --- a/app/src/main/res/values/errors.xml +++ b/app/src/main/res/values/errors.xml @@ -142,7 +142,6 @@ ERROR_LOGIN_EDUDZIENNIK_WEB_INVALID_LOGIN ERROR_LOGIN_EDUDZIENNIK_WEB_OTHER ERROR_LOGIN_EDUDZIENNIK_WEB_NO_SESSION_ID - ERROR_EDUDZIENNIK_WEB_TIMETABLE_NOT_PUBLIC ERROR_EDUDZIENNIK_WEB_LIMITED_ACCESS ERROR_EDUDZIENNIK_WEB_SESSION_EXPIRED ERROR_EDUDZIENNIK_WEB_TEAM_MISSING @@ -307,7 +306,6 @@ Błędny email lub hasło Inny błąd logowania Brak ID sesji - Plan lekcji niedostępny Ograniczony dostęp do dziennika Sesja wygasła Nie można pobrać informacji o klasie i szkole