Merge branch 'develop' into api-v2

This commit is contained in:
Kuba Szczodrzyński 2019-10-03 21:07:17 +02:00
commit 48a2ae3599
268 changed files with 3573 additions and 2962 deletions

2
.gitignore vendored
View File

@ -23,7 +23,7 @@ build/
local.properties
# Proguard folder generated by Eclipse
proguard/
#proguard/
# Log Files
*.log

View File

@ -0,0 +1,6 @@
<component name="CopyrightManager">
<copyright>
<option name="notice" value="Copyright (c) Kacper Ziubryniewicz &amp;#36;{today.year}-&amp;#36;{today.month}-&amp;#36;{today.day}" />
<option name="myName" value="Kacper" />
</copyright>
</component>

View File

@ -10,7 +10,7 @@
<option name="myDefaultNotNull" value="androidx.annotation.RecentlyNonNull" />
<option name="myNullables">
<value>
<list size="10">
<list size="12">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
<item index="2" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" />
@ -21,12 +21,14 @@
<item index="7" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.Nullable" />
<item index="8" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableDecl" />
<item index="9" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableType" />
<item index="10" class="java.lang.String" itemvalue="android.annotation.Nullable" />
<item index="11" class="java.lang.String" itemvalue="com.android.annotations.Nullable" />
</list>
</value>
</option>
<option name="myNotNulls">
<value>
<list size="9">
<list size="11">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
@ -36,6 +38,8 @@
<item index="6" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.NonNull" />
<item index="7" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullDecl" />
<item index="8" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullType" />
<item index="9" class="java.lang.String" itemvalue="android.annotation.NonNull" />
<item index="10" class="java.lang.String" itemvalue="com.android.annotations.NonNull" />
</list>
</value>
</option>

View File

@ -0,0 +1,14 @@
-dontwarn com.evernote.android.job.gcm.**
-dontwarn com.evernote.android.job.GcmAvailableHelper
-dontwarn com.evernote.android.job.work.**
-dontwarn com.evernote.android.job.WorkManagerAvailableHelper
-keep public class com.evernote.android.job.v21.PlatformJobService
-keep public class com.evernote.android.job.v14.PlatformAlarmService
-keep public class com.evernote.android.job.v14.PlatformAlarmReceiver
-keep public class com.evernote.android.job.JobBootReceiver
-keep public class com.evernote.android.job.JobRescheduleService
-keep public class com.evernote.android.job.gcm.PlatformGcmService
-keep public class com.evernote.android.job.work.PlatformWorker
-keep class com.evernote.android.job.** { *; }

42
app/proguard/app.pro Normal file
View File

@ -0,0 +1,42 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
-keep class android.support.v7.widget.** { *; }
-keep class pl.szczodrzynski.edziennik.utils.models.** { *; }
-keep class pl.szczodrzynski.edziennik.data.db.modules.events.Event { *; }
-keep class pl.szczodrzynski.edziennik.data.db.modules.events.EventFull { *; }
-keepclassmembers class pl.szczodrzynski.edziennik.widgets.WidgetConfig { public *; }
-keepnames class pl.szczodrzynski.edziennik.WidgetTimetable
-keepnames class pl.szczodrzynski.edziennik.notifications.WidgetNotifications
-keepnames class pl.szczodrzynski.edziennik.luckynumber.WidgetLuckyNumber
-keep class .R
-keep class **.R$* {
<fields>;
}
-keepattributes SourceFile,LineNumberTable
#-printmapping mapping.txt
-keep class okhttp3.** { *; }
-keep class com.google.android.material.tabs.** {*;}

1
app/proguard/blurry.pro Normal file
View File

@ -0,0 +1 @@
-keep class android.support.v8.renderscript.** { *; }

25
app/proguard/cafebar.pro Normal file
View File

@ -0,0 +1,25 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in D:\AndroidSDK/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
-keep class !android.support.v7.internal.view.menu.**,android.support.** {*;}
-keep class android.support.v7.graphics.** { *; }
-dontwarn android.support.v7.graphics.**
-keep class android.support.design.widget.** { *; }
-keep interface android.support.design.widget.** { *; }
-dontwarn android.support.design.**

10
app/proguard/eventbus.pro Normal file
View File

@ -0,0 +1,10 @@
-keepattributes *Annotation*
-keepclassmembers class * {
@org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
<init>(java.lang.Throwable);
}

14
app/proguard/iconics.pro Normal file
View File

@ -0,0 +1,14 @@
# Android iconics library - https://github.com/mikepenz/Android-Iconics
# Warning: works ONLY with iconics > 1.0.0
#
# Tested on gradle config:
#
# compile 'com.mikepenz:iconics-core:1.7.1@aar'
#
-keep class com.mikepenz.iconics.** { *; }
-keep class com.mikepenz.community_material_typeface_library.CommunityMaterial
-keep class com.mikepenz.fontawesome_typeface_library.FontAwesome
-keep class com.mikepenz.google_material_typeface_library.GoogleMaterial
-keep class com.mikepenz.meteocons_typeface_library.Meteoconcs
-keep class com.mikepenz.octicons_typeface_library.Octicons

1
app/proguard/jsoup.pro Normal file
View File

@ -0,0 +1 @@
-keep class org.jsoup.**

48
app/proguard/mhttp.pro Normal file
View File

@ -0,0 +1,48 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Users/wangchao/Work/android-sdk/sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
-dontwarn im.wangchao.**
-dontwarn okio.**
-dontwarn javax.annotation.Nullable
-dontwarn javax.annotation.ParametersAreNonnullByDefault
-keep class im.wangchao.** { *; }
-keep class **_HttpBinder { *; }
-keepclasseswithmembernames class * {
@im.wangchao.* <fields>;
}
-keepclasseswithmembernames class * {
@im.wangchao.* <methods>;
}
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
!static !transient <fields>;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
# okhttp
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn javax.annotation.**
-dontwarn org.conscrypt.**
# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
# If you do not use Rx:
-dontwarn rx.**

19
app/proguard/okhttp3.pro Normal file
View File

@ -0,0 +1,19 @@
# JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.**
# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*
# OkHttp platform used only on JVM and when Conscrypt dependency is available.
-dontwarn okhttp3.internal.platform.ConscryptPlatform
# This is added for okhttp 3.1.2 bug fix as shown at https://github.com/square/okhttp/issues/2323
-keepclassmembers class * implements javax.net.ssl.SSLSocketFactory {
private javax.net.ssl.SSLSocketFactory delegate;
}
-keepnames class sun.security.ssl.SSLContextImpl
-keepnames class javax.net.ssl.SSLSocketFactory

View File

@ -0,0 +1 @@
-keep class com.mikepenz.szkolny_font_typeface_library.SzkolnyFont { *; }

21
app/proguard/wear.pro Normal file
View File

@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View File

@ -29,22 +29,22 @@
</intent-filter>
</activity>
<activity
android:name=".messages.MessagesComposeActivity"
android:name="pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeActivity"
android:configChanges="orientation|screenSize"
android:label="@string/messages_compose_title"
android:theme="@style/AppTheme.Black" />
<activity
android:name=".activities.FeedbackActivity"
android:name=".ui.modules.feedback.FeedbackActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:label="@string/app_name"
android:theme="@style/AppTheme" />
<activity
android:name=".login.LoginActivity"
android:name="pl.szczodrzynski.edziennik.ui.modules.login.LoginActivity"
android:configChanges="orientation|screenSize"
android:launchMode="singleTop"
android:theme="@style/AppTheme.Light" />
<activity
android:name=".intro.ChangelogIntroActivity"
android:name=".ui.modules.intro.ChangelogIntroActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name"
android:theme="@style/Theme.Intro" />
@ -57,7 +57,7 @@
|_| |_|_| \___|_.__/ \__,_|___/\___/
-->
<activity
android:name=".activities.CrashActivity"
android:name=".ui.modules.base.CrashActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:process=":error_activity"
android:theme="@style/DeadTheme" />
@ -72,7 +72,7 @@
|___/
-->
<activity
android:name=".activities.CrashGtfoActivity"
android:name=".ui.modules.base.CrashGtfoActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:theme="@style/DeadTheme" />
<activity
@ -103,7 +103,7 @@
android:theme="@style/AppTheme.NoDisplay" />
<activity
android:name=".activities.SettingsLicenseActivity"
android:name=".ui.modules.settings.SettingsLicenseActivity"
android:configChanges="orientation|keyboardHidden"
android:theme="@style/AppTheme" />
@ -113,14 +113,14 @@
android:theme="@style/Base.Theme.AppCompat" />
<activity
android:name=".activities.WebPushConfigActivity"
android:name=".ui.modules.webpush.WebPushConfigActivity"
android:configChanges="orientation|keyboardHidden"
android:theme="@style/AppTheme.Dark" />
<activity
android:name=".activities.CounterActivity"
android:name=".ui.modules.home.CounterActivity"
android:theme="@style/AppTheme.Black" />
<activity android:name=".activities.QrScannerActivity" />
<activity android:name=".ui.modules.webpush.QrScannerActivity" />
<provider
android:name="androidx.core.content.FileProvider"
@ -240,4 +240,4 @@
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
</manifest>
</manifest>

View File

@ -31,6 +31,38 @@
</head>
<body>
<h3>Wersja 3.1, 2019-09-29</h3>
<ul>
<li>Poprawiony interfejs zadań domowych.</li>
<li>Librus: wyświetlanie komentarzy ocen.</li>
<li>Librus: wyświetlanie nieobecności nauczycieli w Terminarzu.</li>
<li>Librus: usprawniona synchronizacja ocen.</li>
<li>Poprawki angielskiego tłumaczenia.</li>
</ul>
<h3>Wersja 3.0.3, 2019-09-26</h3>
<ul>
<li>Librus: poprawka kilku błędów synchronizacji.</li>
<li>Vulcan: prawidłowe oznaczanie wiadomości jako przeczytana.</li>
<li>Vulcan: poprawiona synchronizacja wiadomości i frekwencji.</li>
<li>Vulcan: poprawka błędów logowania.</li>
</ul>
<h3>Wersja 3.0.2, 2019-09-24</h3>
<ul>
<li>Librus: pobieranie Bieżących ocen opisowych.</li>
<li>Poprawki UI: kolor ikon paska statusu w jasnym motywie.</li>
<li>Poprawka braku skanera QR do przekazywania powiadomień.</li>
<li>Poprawka wyboru koloru i daty własnego wydarzenia, które crashowały aplikację.</li>
</ul>
<h3>Wersja 3.0.1, 2019-09-19</h3>
<ul>
<li>Librus: Poprawa błędu synchronizacji.</li>
<li>Poprawki UI związane z paskiem nawigacji.</li>
<li>Mobidziennik: Pobieranie ocen w niektórych przedmiotach.</li>
</ul>
<h3>Wersja 3.0, 2019-09-13</h3>
<ul>
<li><b>Nowy wygląd i sposób nawigacji</b> w całej aplikacji.</li>

View File

@ -66,18 +66,18 @@ import me.leolin.shortcutbadger.ShortcutBadger;
import okhttp3.ConnectionSpec;
import okhttp3.OkHttpClient;
import okhttp3.TlsVersion;
import pl.szczodrzynski.edziennik.activities.CrashActivity;
import pl.szczodrzynski.edziennik.api.Edziennik;
import pl.szczodrzynski.edziennik.api.Iuczniowie;
import pl.szczodrzynski.edziennik.api.Librus;
import pl.szczodrzynski.edziennik.api.Mobidziennik;
import pl.szczodrzynski.edziennik.api.Vulcan;
import pl.szczodrzynski.edziennik.datamodels.AppDb;
import pl.szczodrzynski.edziennik.datamodels.DebugLog;
import pl.szczodrzynski.edziennik.datamodels.LoginStore;
import pl.szczodrzynski.edziennik.datamodels.Profile;
import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
import pl.szczodrzynski.edziennik.models.AppConfig;
import pl.szczodrzynski.edziennik.ui.modules.base.CrashActivity;
import pl.szczodrzynski.edziennik.data.api.Edziennik;
import pl.szczodrzynski.edziennik.data.api.Iuczniowie;
import pl.szczodrzynski.edziennik.data.api.Librus;
import pl.szczodrzynski.edziennik.data.api.Mobidziennik;
import pl.szczodrzynski.edziennik.data.api.Vulcan;
import pl.szczodrzynski.edziennik.data.db.AppDb;
import pl.szczodrzynski.edziennik.data.db.modules.debuglog.DebugLog;
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
import pl.szczodrzynski.edziennik.utils.models.AppConfig;
import pl.szczodrzynski.edziennik.network.NetworkUtils;
import pl.szczodrzynski.edziennik.network.TLSSocketFactory;
import pl.szczodrzynski.edziennik.receivers.JobsCreator;
@ -86,8 +86,8 @@ import pl.szczodrzynski.edziennik.utils.PermissionChecker;
import pl.szczodrzynski.edziennik.utils.Themes;
import pl.szczodrzynski.edziennik.utils.Utils;
import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_VULCAN;
import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_VULCAN;
public class App extends androidx.multidex.MultiDexApplication {
private static final String TAG = "App";
@ -351,7 +351,7 @@ public class App extends androidx.multidex.MultiDexApplication {
.setIcon(Icon.createWithResource(this, R.mipmap.ic_shortcut_homework))
//.setIcon(getDesktopIconFromIconics(SzkolnyFont.Icon.szf_file_document_edit))
.setIntent(new Intent(Intent.ACTION_MAIN, null, this, MainActivity.class)
.putExtra("fragmentId", MainActivity.DRAWER_ITEM_HOMEWORKS))
.putExtra("fragmentId", MainActivity.DRAWER_ITEM_HOMEWORK))
.build();
ShortcutInfo shortcutMessages = new ShortcutInfo.Builder(mContext, "item_messages")

View File

@ -11,8 +11,9 @@ import com.google.gson.JsonArray
import com.google.gson.JsonElement
import com.google.gson.JsonObject
import im.wangchao.mhttp.Response
import pl.szczodrzynski.edziennik.datamodels.Profile
import pl.szczodrzynski.edziennik.datamodels.Teacher
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
import pl.szczodrzynski.navlib.R
import pl.szczodrzynski.navlib.crc16
import pl.szczodrzynski.navlib.getColorFromRes
import java.text.SimpleDateFormat

View File

@ -19,7 +19,7 @@ import com.mikepenz.iconics.typeface.library.community.material.CommunityMateria
import com.mikepenz.iconics.typeface.library.szkolny.font.SzkolnyFont
import com.mikepenz.materialdrawer.model.ProfileSettingDrawerItem
import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem
import pl.szczodrzynski.edziennik.datamodels.Metadata.*
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.*
import pl.szczodrzynski.edziennik.utils.Themes
import pl.szczodrzynski.navlib.NavView
import pl.szczodrzynski.navlib.SystemBarsUtil
@ -30,6 +30,7 @@ import pl.szczodrzynski.navlib.drawer.items.DrawerPrimaryItem
import pl.szczodrzynski.navlib.drawer.items.withAppTitle
import pl.szczodrzynski.navlib.getColorFromAttr
import androidx.appcompat.widget.PopupMenu
import androidx.core.graphics.ColorUtils
import androidx.navigation.NavOptions
import com.danimahardhika.cafebar.CafeBar
import com.mikepenz.iconics.IconicsColor
@ -40,21 +41,35 @@ import com.mikepenz.materialdrawer.model.ProfileDrawerItem
import com.mikepenz.materialdrawer.model.interfaces.IProfile
import pl.droidsonroids.gif.GifDrawable
import pl.szczodrzynski.edziennik.App.APP_URL
import pl.szczodrzynski.edziennik.api.AppError
import pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.*
import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback
import pl.szczodrzynski.edziennik.data.api.AppError
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.*
import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback
import pl.szczodrzynski.edziennik.databinding.ActivitySzkolnyBinding
import pl.szczodrzynski.edziennik.datamodels.LoginStore
import pl.szczodrzynski.edziennik.datamodels.Profile
import pl.szczodrzynski.edziennik.datamodels.ProfileFull
import pl.szczodrzynski.edziennik.dialogs.ChangelogDialog
import pl.szczodrzynski.edziennik.fragments.*
import pl.szczodrzynski.edziennik.login.LoginActivity
import pl.szczodrzynski.edziennik.messages.MessagesDetailsFragment
import pl.szczodrzynski.edziennik.messages.MessagesFragment
import pl.szczodrzynski.edziennik.models.NavTarget
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull
import pl.szczodrzynski.edziennik.ui.dialogs.changelog.ChangelogDialog
import pl.szczodrzynski.edziennik.ui.modules.homework.HomeworkFragment
import pl.szczodrzynski.edziennik.ui.modules.login.LoginActivity
import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesDetailsFragment
import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesFragment
import pl.szczodrzynski.edziennik.utils.models.NavTarget
import pl.szczodrzynski.edziennik.network.ServerRequest
import pl.szczodrzynski.edziennik.sync.SyncJob
import pl.szczodrzynski.edziennik.ui.modules.agenda.AgendaFragment
import pl.szczodrzynski.edziennik.ui.modules.announcements.AnnouncementsFragment
import pl.szczodrzynski.edziennik.ui.modules.attendance.AttendanceFragment
import pl.szczodrzynski.edziennik.ui.modules.base.DebugFragment
import pl.szczodrzynski.edziennik.ui.modules.feedback.FeedbackFragment
import pl.szczodrzynski.edziennik.ui.modules.feedback.HelpFragment
import pl.szczodrzynski.edziennik.ui.modules.grades.editor.GradesEditorFragment
import pl.szczodrzynski.edziennik.ui.modules.grades.GradesFragment
import pl.szczodrzynski.edziennik.ui.modules.home.HomeFragment
import pl.szczodrzynski.edziennik.ui.modules.behaviour.BehaviourFragment
import pl.szczodrzynski.edziennik.ui.modules.notifications.NotificationsFragment
import pl.szczodrzynski.edziennik.ui.modules.settings.ProfileManagerFragment
import pl.szczodrzynski.edziennik.ui.modules.settings.SettingsNewFragment
import pl.szczodrzynski.edziennik.ui.modules.timetable.TimetableFragment
import pl.szczodrzynski.edziennik.utils.SwipeRefreshLayoutNoTouch
import pl.szczodrzynski.edziennik.utils.Utils
import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem
@ -82,9 +97,9 @@ class MainActivity : AppCompatActivity() {
const val DRAWER_ITEM_AGENDA = 12
const val DRAWER_ITEM_GRADES = 13
const val DRAWER_ITEM_MESSAGES = 17
const val DRAWER_ITEM_HOMEWORKS = 14
const val DRAWER_ITEM_NOTICES = 15
const val DRAWER_ITEM_ATTENDANCES = 16
const val DRAWER_ITEM_HOMEWORK = 14
const val DRAWER_ITEM_BEHAVIOUR = 15
const val DRAWER_ITEM_ATTENDANCE = 16
const val DRAWER_ITEM_ANNOUNCEMENTS = 18
const val DRAWER_ITEM_NOTIFICATIONS = 20
const val DRAWER_ITEM_SETTINGS = 101
@ -108,17 +123,17 @@ class MainActivity : AppCompatActivity() {
.isStatic(true)
.withPopToHome(false)
list += NavTarget(DRAWER_ITEM_TIMETABLE, R.string.menu_timetable, RegisterTimetableFragment::class)
list += NavTarget(DRAWER_ITEM_TIMETABLE, R.string.menu_timetable, TimetableFragment::class)
.withIcon(CommunityMaterial.Icon2.cmd_timetable)
.withBadgeTypeId(TYPE_LESSON_CHANGE)
.isInDrawer(true)
list += NavTarget(DRAWER_ITEM_AGENDA, R.string.menu_agenda, RegisterAgendaDefaultFragment::class)
list += NavTarget(DRAWER_ITEM_AGENDA, R.string.menu_agenda, AgendaFragment::class)
.withIcon(CommunityMaterial.Icon.cmd_calendar)
.withBadgeTypeId(TYPE_EVENT)
.isInDrawer(true)
list += NavTarget(DRAWER_ITEM_GRADES, R.string.menu_grades, RegisterGradesFragment::class)
list += NavTarget(DRAWER_ITEM_GRADES, R.string.menu_grades, GradesFragment::class)
.withIcon(CommunityMaterial.Icon2.cmd_numeric_5_box)
.withBadgeTypeId(TYPE_GRADE)
.isInDrawer(true)
@ -128,29 +143,29 @@ class MainActivity : AppCompatActivity() {
.withBadgeTypeId(TYPE_MESSAGE)
.isInDrawer(true)
list += NavTarget(DRAWER_ITEM_HOMEWORKS, R.string.menu_homework, RegisterHomeworksFragment::class)
list += NavTarget(DRAWER_ITEM_HOMEWORK, R.string.menu_homework, HomeworkFragment::class)
.withIcon(SzkolnyFont.Icon.szf_file_document_edit)
.withBadgeTypeId(TYPE_HOMEWORK)
.isInDrawer(true)
list += NavTarget(DRAWER_ITEM_NOTICES, R.string.menu_notices, RegisterNoticesFragment::class)
list += NavTarget(DRAWER_ITEM_BEHAVIOUR, R.string.menu_notices, BehaviourFragment::class)
.withIcon(CommunityMaterial.Icon2.cmd_message_alert)
.withBadgeTypeId(TYPE_NOTICE)
.isInDrawer(true)
list += NavTarget(DRAWER_ITEM_ATTENDANCES, R.string.menu_attendances, RegisterAttendancesFragment::class)
list += NavTarget(DRAWER_ITEM_ATTENDANCE, R.string.menu_attendance, AttendanceFragment::class)
.withIcon(CommunityMaterial.Icon.cmd_calendar_remove)
.withBadgeTypeId(TYPE_ATTENDANCE)
.isInDrawer(true)
list += NavTarget(DRAWER_ITEM_ANNOUNCEMENTS, R.string.menu_announcements, RegisterAnnouncementsFragment::class)
list += NavTarget(DRAWER_ITEM_ANNOUNCEMENTS, R.string.menu_announcements, AnnouncementsFragment::class)
.withIcon(CommunityMaterial.Icon.cmd_bulletin_board)
.withBadgeTypeId(TYPE_ANNOUNCEMENT)
.isInDrawer(true)
// static drawer items
list += NavTarget(DRAWER_ITEM_NOTIFICATIONS, R.string.menu_notifications, RegisterNotificationsFragment::class)
list += NavTarget(DRAWER_ITEM_NOTIFICATIONS, R.string.menu_notifications, NotificationsFragment::class)
.withIcon(CommunityMaterial.Icon.cmd_bell_ring)
.isInDrawer(true)
.isStatic(true)
@ -229,8 +244,8 @@ class MainActivity : AppCompatActivity() {
drawer.init(this@MainActivity)
SystemBarsUtil(this@MainActivity).run {
paddingByKeyboard = b.navView
appFullscreen = true
//paddingByKeyboard = b.navView
appFullscreen = false
statusBarColor = getColorFromAttr(context, android.R.attr.colorBackground)
statusBarDarker = false
statusBarFallbackLight = COLOR_HALF_TRANSPARENT
@ -239,6 +254,16 @@ class MainActivity : AppCompatActivity() {
b.navView.configSystemBarsUtil(this)
// fix for setting status bar color to window color, outside of navlib
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.statusBarColor = statusBarColor
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && ColorUtils.calculateLuminance(statusBarColor) > 0.6) {
window.decorView.systemUiVisibility = window.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
}
// TODO fix navlib navbar detection, orientation change issues, status bar color setting if not fullscreen
commit()
}
@ -511,9 +536,9 @@ class MainActivity : AppCompatActivity() {
DRAWER_ITEM_TIMETABLE -> FEATURE_TIMETABLE
DRAWER_ITEM_AGENDA -> FEATURE_AGENDA
DRAWER_ITEM_GRADES -> FEATURE_GRADES
DRAWER_ITEM_HOMEWORKS -> FEATURE_HOMEWORKS
DRAWER_ITEM_NOTICES -> FEATURE_NOTICES
DRAWER_ITEM_ATTENDANCES -> FEATURE_ATTENDANCES
DRAWER_ITEM_HOMEWORK -> FEATURE_HOMEWORK
DRAWER_ITEM_BEHAVIOUR -> FEATURE_NOTICES
DRAWER_ITEM_ATTENDANCE -> FEATURE_ATTENDANCE
DRAWER_ITEM_MESSAGES -> when (MessagesFragment.pageSelection) {
1 -> FEATURE_MESSAGES_OUTBOX
else -> FEATURE_MESSAGES_INBOX
@ -527,9 +552,9 @@ class MainActivity : AppCompatActivity() {
DRAWER_ITEM_TIMETABLE -> R.string.sync_feature_timetable
DRAWER_ITEM_AGENDA -> R.string.sync_feature_agenda
DRAWER_ITEM_GRADES -> R.string.sync_feature_grades
DRAWER_ITEM_HOMEWORKS -> R.string.sync_feature_homeworks
DRAWER_ITEM_NOTICES -> R.string.sync_feature_notices
DRAWER_ITEM_ATTENDANCES -> R.string.sync_feature_attendances
DRAWER_ITEM_HOMEWORK -> R.string.sync_feature_homework
DRAWER_ITEM_BEHAVIOUR -> R.string.sync_feature_notices
DRAWER_ITEM_ATTENDANCE -> R.string.sync_feature_attendance
DRAWER_ITEM_MESSAGES -> when (MessagesFragment.pageSelection) {
1 -> R.string.sync_feature_messages_outbox
else -> R.string.sync_feature_messages_inbox
@ -729,6 +754,9 @@ class MainActivity : AppCompatActivity() {
drawer.close()
drawer.setSelection(target.id, fireOnClick = false)
navView.toolbar.setTitle(target.title ?: target.name)
navView.bottomBar.fabEnable = false
navView.bottomBar.fabExtended = false
navView.bottomBar.setFabOnClickListener(null)
Log.d("NavDebug", "Navigating from ${navTarget.fragmentClass?.java?.simpleName} to ${target.fragmentClass?.java?.simpleName}")
@ -837,7 +865,19 @@ class MainActivity : AppCompatActivity() {
fun gainAttention() {
b.navView.postDelayed({
navView.gainAttentionOnBottomBar()
}, 2000)
}
fun gainAttentionFAB() {
navView.bottomBar.fabExtended = false
b.navView.postDelayed({
navView.bottomBar.fabExtended = true
}, 1000)
b.navView.postDelayed({
navView.bottomBar.fabExtended = false
}, 3000)
}
/* _____ _ _

View File

@ -16,9 +16,9 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.models.Time;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.utils.models.Time;
import pl.szczodrzynski.edziennik.receivers.BootReceiver;
import pl.szczodrzynski.edziennik.sync.SyncJob;
import pl.szczodrzynski.edziennik.sync.SyncService;
@ -221,7 +221,7 @@ public class Notifier {
| . ` |/ _ \| __| | _| |/ __/ _` | __| |/ _ \| '_ \
| |\ | (_) | |_| | | | | (_| (_| | |_| | (_) | | | |
|_| \_|\___/ \__|_|_| |_|\___\__,_|\__|_|\___/|_| |*/
public void add(pl.szczodrzynski.edziennik.models.Notification notification) {
public void add(pl.szczodrzynski.edziennik.utils.models.Notification notification) {
app.appConfig.notifications.add(notification);
}
@ -235,8 +235,8 @@ public class Notifier {
}
int unreadCount = 0;
List<pl.szczodrzynski.edziennik.models.Notification> notificationList = new ArrayList<>();
for (pl.szczodrzynski.edziennik.models.Notification notification: app.appConfig.notifications) {
List<pl.szczodrzynski.edziennik.utils.models.Notification> notificationList = new ArrayList<>();
for (pl.szczodrzynski.edziennik.utils.models.Notification notification: app.appConfig.notifications) {
if (!notification.notified) {
notification.seen = false;
notification.notified = true;
@ -250,7 +250,7 @@ public class Notifier {
}
}
for (pl.szczodrzynski.edziennik.models.Notification notification: notificationList) {
for (pl.szczodrzynski.edziennik.utils.models.Notification notification: notificationList) {
Intent intent = new Intent(app, MainActivity.class);
notification.fillIntent(intent);
PendingIntent pendingIntent = PendingIntent.getActivity(app, notification.id, intent, 0);
@ -258,9 +258,9 @@ public class Notifier {
// title, text, type, date
.setContentTitle(notification.title)
.setContentText(notification.text)
.setSubText(pl.szczodrzynski.edziennik.models.Notification.stringType(app, notification.type))
.setSubText(pl.szczodrzynski.edziennik.utils.models.Notification.stringType(app, notification.type))
.setWhen(notification.addedDate)
.setTicker(app.getString(R.string.notification_ticker_format, pl.szczodrzynski.edziennik.models.Notification.stringType(app, notification.type)))
.setTicker(app.getString(R.string.notification_ticker_format, pl.szczodrzynski.edziennik.utils.models.Notification.stringType(app, notification.type)))
// icon, color, lights, priority
.setSmallIcon(R.drawable.ic_notification)
.setColor(notificationColor)
@ -349,7 +349,7 @@ public class Notifier {
}
public void dump() {
for (pl.szczodrzynski.edziennik.models.Notification notification: app.appConfig.notifications) {
for (pl.szczodrzynski.edziennik.utils.models.Notification notification: app.appConfig.notifications) {
Log.d(TAG, "Profile"+notification.profileId+" Notification from "+ Date.fromMillis(notification.addedDate).getFormattedString()+" "+ Time.fromMillis(notification.addedDate).getStringHMS()+" - "+notification.text);
}
}

View File

@ -28,22 +28,22 @@ import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import pl.szczodrzynski.edziennik.datamodels.EventFull;
import pl.szczodrzynski.edziennik.datamodels.LessonChange;
import pl.szczodrzynski.edziennik.datamodels.LessonFull;
import pl.szczodrzynski.edziennik.datamodels.Profile;
import pl.szczodrzynski.edziennik.fragments.HomeFragment;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.models.ItemWidgetTimetableModel;
import pl.szczodrzynski.edziennik.models.Time;
import pl.szczodrzynski.edziennik.models.Week;
import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull;
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.ui.modules.home.HomeFragment;
import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.utils.models.ItemWidgetTimetableModel;
import pl.szczodrzynski.edziennik.utils.models.Time;
import pl.szczodrzynski.edziennik.utils.models.Week;
import pl.szczodrzynski.edziennik.widgets.WidgetConfig;
import pl.szczodrzynski.edziennik.sync.SyncJob;
import pl.szczodrzynski.edziennik.widgets.timetable.LessonDetailsActivity;
import pl.szczodrzynski.edziennik.widgets.timetable.WidgetTimetableService;
import static pl.szczodrzynski.edziennik.ExtensionsKt.filterOutArchived;
import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK;
import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK;
import static pl.szczodrzynski.edziennik.utils.Utils.bs;

View File

@ -1,9 +0,0 @@
package pl.szczodrzynski.edziennik.api.interfaces;
import java.util.List;
import pl.szczodrzynski.edziennik.datamodels.MessageFull;
public interface MessageListCallback {
void onSuccess(List<MessageFull> messageList);
}

View File

@ -1,9 +0,0 @@
package pl.szczodrzynski.edziennik.api.interfaces;
import java.util.List;
import pl.szczodrzynski.edziennik.datamodels.Teacher;
public interface RecipientListGetCallback {
void onSuccess(List<Teacher> teacherList);
}

View File

@ -1,20 +0,0 @@
/*
* Copyright (c) Kuba Szczodrzyński 2019-9-21.
*/
package pl.szczodrzynski.edziennik.api.v2
import com.crashlytics.android.Crashlytics
import pl.szczodrzynski.edziennik.api.AppError
import pl.szczodrzynski.edziennik.api.v2.models.Data
open class Api(open val data: Data) {
fun finishWithError(error: AppError) {
try {
data.saveData()
} catch (e: Exception) {
Crashlytics.logException(e)
}
}
}

View File

@ -8,7 +8,6 @@ import android.app.Service
import android.content.Intent
import android.os.IBinder
import android.util.Log
import androidx.core.app.NotificationCompat
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
@ -21,8 +20,8 @@ import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikInterface
import pl.szczodrzynski.edziennik.api.v2.librus.Librus
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
import pl.szczodrzynski.edziennik.api.v2.models.ApiTask
import pl.szczodrzynski.edziennik.datamodels.LoginStore
import pl.szczodrzynski.edziennik.datamodels.Profile
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
import kotlin.math.min
class ApiService : Service() {

View File

@ -6,17 +6,16 @@ package pl.szczodrzynski.edziennik.api.v2
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_AGENDA
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_ANNOUNCEMENTS
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_ATTENDANCES
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_ATTENDANCE
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_GRADES
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_HOME
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_HOMEWORKS
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_HOMEWORK
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_MESSAGES
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_NOTICES
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_BEHAVIOUR
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_TIMETABLE
import pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED
import pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT
import pl.szczodrzynski.edziennik.messages.MessagesFragment
import pl.szczodrzynski.edziennik.messages.MessagesListFragment
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT
import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesFragment
const val FEATURE_ALL = 0
const val FEATURE_TIMETABLE = 1
@ -77,9 +76,9 @@ object Features {
TYPE_SENT -> listOf(FEATURE_MESSAGES_OUTBOX)
else -> listOf(FEATURE_MESSAGES_INBOX, FEATURE_MESSAGES_OUTBOX)
}
DRAWER_ITEM_HOMEWORKS -> listOf(FEATURE_HOMEWORK)
DRAWER_ITEM_NOTICES -> listOf(FEATURE_NOTICES)
DRAWER_ITEM_ATTENDANCES -> listOf(FEATURE_ATTENDANCES)
DRAWER_ITEM_HOMEWORK -> listOf(FEATURE_HOMEWORK)
DRAWER_ITEM_BEHAVIOUR -> listOf(FEATURE_NOTICES)
DRAWER_ITEM_ATTENDANCE -> listOf(FEATURE_ATTENDANCES)
DRAWER_ITEM_ANNOUNCEMENTS -> listOf(FEATURE_ANNOUNCEMENTS)
else -> getAllFeatures()
} + getAllNecessary()

View File

@ -6,16 +6,17 @@ package pl.szczodrzynski.edziennik.api.v2.librus
import android.util.Log
import pl.szczodrzynski.edziennik.App
import pl.szczodrzynski.edziennik.R
import pl.szczodrzynski.edziennik.api.v2.*
import pl.szczodrzynski.edziennik.api.v2.CODE_INTERNAL_LIBRUS_ACCOUNT_410
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_NOT_NEEDED
import pl.szczodrzynski.edziennik.api.v2.endpoints
import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikCallback
import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikInterface
import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus
import pl.szczodrzynski.edziennik.api.v2.librus.login.*
import pl.szczodrzynski.edziennik.api.v2.librusLoginMethods
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
import pl.szczodrzynski.edziennik.api.v2.models.Endpoint
import pl.szczodrzynski.edziennik.datamodels.LoginStore
import pl.szczodrzynski.edziennik.datamodels.Profile
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
import pl.szczodrzynski.edziennik.utils.Utils.d
class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, val callback: EdziennikCallback) : EdziennikInterface {

View File

@ -5,13 +5,9 @@
package pl.szczodrzynski.edziennik.api.v2.librus
import pl.szczodrzynski.edziennik.R
import pl.szczodrzynski.edziennik.api.v2.*
import pl.szczodrzynski.edziennik.api.v2.ENDPOINT_LIBRUS_API_ME
import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApiMe
import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginLibrusApi
import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginLibrusMessages
import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginLibrusPortal
import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginLibrusSynergia
import pl.szczodrzynski.edziennik.utils.Utils
class LibrusEndpoints(val data: DataLibrus, val onSuccess: () -> Unit) {

View File

@ -1,170 +0,0 @@
package pl.szczodrzynski.edziennik.api.v2.librus
import android.content.Context
import pl.szczodrzynski.edziennik.App
import pl.szczodrzynski.edziennik.api.AppError
import pl.szczodrzynski.edziennik.api.interfaces.*
import pl.szczodrzynski.edziennik.api.v2.*
import pl.szczodrzynski.edziennik.api.v2.librus.firstlogin.FirstLoginLibrus
import pl.szczodrzynski.edziennik.api.v2.librus.firstlogin.FirstLoginSynergia
import pl.szczodrzynski.edziennik.api.v2.models.Data
import pl.szczodrzynski.edziennik.datamodels.LoginStore
import pl.szczodrzynski.edziennik.datamodels.MessageFull
import pl.szczodrzynski.edziennik.datamodels.Profile
import pl.szczodrzynski.edziennik.datamodels.ProfileFull
import pl.szczodrzynski.edziennik.messages.MessagesComposeInfo
import pl.szczodrzynski.edziennik.models.Endpoint
import java.lang.Exception
class LibrusOld(val app: App, val profile: Profile?, val loginStore: LoginStore) : OldEdziennikInterface {
private val TAG = "librus.Librus"
lateinit var syncCallback: SyncCallback
lateinit var featureList: ArrayList<Int>
lateinit var data: Data
var onLogin: (() -> Unit)? = null
val internalErrorList = ArrayList<Int>()
fun isError(error: AppError?): Boolean {
if (error == null)
return false
syncCallback.onError(null, error)
return true
}
/* _ _ _
| | (_) |
| | _| |__ _ __ _ _ ___
| | | | '_ \| '__| | | / __|
| |____| | |_) | | | |_| \__ \
|______|_|_.__/|_| \__,_|__*/
private fun firstLoginLibrus() {
FirstLoginLibrus(app, loginStore, syncCallback) { profileList ->
syncCallback.onLoginFirst(profileList, loginStore)
}
}
private fun synergiaTokenExtractor() {
if (profile == null) {
throw Exception("Profile may not be null")
}
}
/* _____ _
/ ____| (_)
| (___ _ _ _ __ ___ _ __ __ _ _ __ _
\___ \| | | | '_ \ / _ \ '__/ _` | |/ _` |
____) | |_| | | | | __/ | | (_| | | (_| |
|_____/ \__, |_| |_|\___|_| \__, |_|\__,_|
__/ | __/ |
|___/ |__*/
private fun loginSynergia() {
}
private fun firstLoginSynergia() {
FirstLoginSynergia(app, loginStore, syncCallback) { profileList ->
syncCallback.onLoginFirst(profileList, loginStore)
}
}
/* _ _____ _______
| |/ ____|__ __|
| | (___ | |
_ | |\___ \ | |
| |__| |____) | | |
\____/|_____/ |*/
private fun loginJst() {
}
private fun wrapCallback(callback: SyncCallback): SyncCallback {
return object : SyncCallback {
override fun onSuccess(activityContext: Context?, profileFull: ProfileFull?) {
callback.onSuccess(activityContext, profileFull)
}
override fun onProgress(progressStep: Int) {
callback.onProgress(progressStep)
}
override fun onActionStarted(stringResId: Int) {
callback.onActionStarted(stringResId)
}
override fun onLoginFirst(profileList: MutableList<Profile>?, loginStore: LoginStore?) {
callback.onLoginFirst(profileList, loginStore)
}
override fun onError(activityContext: Context?, error: AppError) {
when (error.errorCode) {
in internalErrorList -> {
// finish immediately if the same error occurs twice during the same sync
callback.onError(activityContext, error)
}
/* CODE_INTERNAL_LIBRUS_ACCOUNT_410 -> {
internalErrorList.add(error.errorCode)
loginStore.removeLoginData("refreshToken") // force a clean login
//loginLibrus()
}*/
else -> callback.onError(activityContext, error)
}
}
}
}
fun login(callback: SyncCallback) {
this.internalErrorList.clear()
this.syncCallback = wrapCallback(callback)
when (loginStore.mode) {
LOGIN_MODE_LIBRUS_EMAIL -> {
//loginLibrus()
}
LOGIN_MODE_LIBRUS_SYNERGIA -> {
}
LOGIN_MODE_LIBRUS_JST -> {
}
}
}
fun getData() {
}
override fun sync(activityContext: Context, callback: SyncCallback, profileId: Int, profile: Profile?, loginStore: LoginStore) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun syncMessages(activityContext: Context, errorCallback: SyncCallback, profile: ProfileFull) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun syncFeature(activityContext: Context, callback: SyncCallback, profile: ProfileFull, vararg featureList: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun getMessage(activityContext: Context, errorCallback: SyncCallback, profile: ProfileFull, message: MessageFull, messageCallback: MessageGetCallback) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun getAttachment(activityContext: Context, errorCallback: SyncCallback, profile: ProfileFull, message: MessageFull, attachmentId: Long, attachmentCallback: AttachmentGetCallback) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun getRecipientList(activityContext: Context, errorCallback: SyncCallback, profile: ProfileFull, recipientListGetCallback: RecipientListGetCallback) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun getComposeInfo(profile: ProfileFull): MessagesComposeInfo {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun getConfigurableEndpoints(profile: Profile?): MutableMap<String, Endpoint> {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun isEndpointEnabled(profile: Profile?, defaultActive: Boolean, name: String?): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}

View File

@ -4,21 +4,14 @@
package pl.szczodrzynski.edziennik.api.v2.librus
import android.content.Context
import android.content.Intent
import com.google.gson.JsonObject
import pl.szczodrzynski.edziennik.App
import pl.szczodrzynski.edziennik.api.AppError
import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback
import pl.szczodrzynski.edziennik.api.v2.*
import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikCallback
import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus
import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginLibrus
import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginLibrusPortal
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
import pl.szczodrzynski.edziennik.datamodels.LoginStore
import pl.szczodrzynski.edziennik.datamodels.Profile
import pl.szczodrzynski.edziennik.utils.Utils.d
import pl.szczodrzynski.edziennik.api.v2.ApiService
import pl.szczodrzynski.edziennik.api.v2.LOGIN_MODE_LIBRUS_EMAIL
import pl.szczodrzynski.edziennik.api.v2.LOGIN_TYPE_LIBRUS
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
class LibrusTest(val app: App) {
companion object {

View File

@ -13,8 +13,8 @@ import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_LIBRUS_PORTAL
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_LIBRUS_SYNERGIA
import pl.szczodrzynski.edziennik.api.v2.models.Data
import pl.szczodrzynski.edziennik.currentTimeUnix
import pl.szczodrzynski.edziennik.datamodels.LoginStore
import pl.szczodrzynski.edziennik.datamodels.Profile
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
import pl.szczodrzynski.edziennik.isNotNullNorEmpty
class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app, profile, loginStore) {

View File

@ -4,22 +4,13 @@
package pl.szczodrzynski.edziennik.api.v2.librus.data
import com.google.gson.JsonNull
import com.google.gson.JsonObject
import im.wangchao.mhttp.Request
import im.wangchao.mhttp.Response
import im.wangchao.mhttp.callback.JsonCallbackHandler
import io.fabric.sdk.android.services.network.HttpRequest.post
import pl.szczodrzynski.edziennik.api.AppError
import pl.szczodrzynski.edziennik.api.AppError.CODE_MAINTENANCE
import pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER
import pl.szczodrzynski.edziennik.api.v2.*
import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginLibrusSynergia
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
import pl.szczodrzynski.edziennik.getString
import pl.szczodrzynski.edziennik.utils.Utils.d
import java.lang.Exception
import java.net.HttpURLConnection
import java.net.HttpURLConnection.*
open class LibrusApi(open val data: DataLibrus) {

View File

@ -1,10 +1,11 @@
package pl.szczodrzynski.edziennik.api.v2.librus.data
import pl.szczodrzynski.edziennik.App
import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback
import pl.szczodrzynski.edziennik.api.v2.models.Data
import pl.szczodrzynski.edziennik.datamodels.LoginStore
import pl.szczodrzynski.edziennik.datamodels.Profile
import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
class LibrusApiGrades(val app: App,
val profile: Profile,

View File

@ -5,10 +5,6 @@
package pl.szczodrzynski.edziennik.api.v2.librus.data
import pl.szczodrzynski.edziennik.*
import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback
import pl.szczodrzynski.edziennik.api.v2.models.Data
import pl.szczodrzynski.edziennik.datamodels.LoginStore
import pl.szczodrzynski.edziennik.datamodels.Profile
class LibrusApiMe(override val data: DataLibrus,
val onSuccess: () -> Unit) : LibrusApi(data) {

View File

@ -1,10 +1,10 @@
package pl.szczodrzynski.edziennik.api.v2.librus.data
import pl.szczodrzynski.edziennik.App
import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback
import pl.szczodrzynski.edziennik.api.v2.models.Data
import pl.szczodrzynski.edziennik.datamodels.LoginStore
import pl.szczodrzynski.edziennik.datamodels.Profile
import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
class LibrusSynergiaGrades(val app: App,
val profile: Profile,

View File

@ -1,12 +0,0 @@
package pl.szczodrzynski.edziennik.api.v2.librus.firstlogin
import pl.szczodrzynski.edziennik.App
import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback
import pl.szczodrzynski.edziennik.datamodels.LoginStore
import pl.szczodrzynski.edziennik.datamodels.Profile
class FirstLoginLibrus(val app: App, val loginStore: LoginStore, val progressCallback: ProgressCallback, val onSuccess: (profileList: List<Profile>) -> Unit) {
init {
}
}

View File

@ -1,12 +0,0 @@
package pl.szczodrzynski.edziennik.api.v2.librus.firstlogin
import pl.szczodrzynski.edziennik.App
import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback
import pl.szczodrzynski.edziennik.datamodels.LoginStore
import pl.szczodrzynski.edziennik.datamodels.Profile
class FirstLoginSynergia(val app: App, val loginStore: LoginStore, val progressCallback: ProgressCallback, val onSuccess: (profileList: List<Profile>) -> Unit) {
init {
}
}

View File

@ -8,12 +8,9 @@ import im.wangchao.mhttp.body.MediaTypeUtils
import im.wangchao.mhttp.callback.JsonCallbackHandler
import im.wangchao.mhttp.callback.TextCallbackHandler
import pl.szczodrzynski.edziennik.*
import pl.szczodrzynski.edziennik.api.AppError
import pl.szczodrzynski.edziennik.api.AppError.*
import pl.szczodrzynski.edziennik.api.v2.*
import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
import pl.szczodrzynski.edziennik.utils.Utils.c
import java.net.HttpURLConnection.HTTP_UNAUTHORIZED
import java.util.ArrayList
import java.util.regex.Pattern

View File

@ -10,15 +10,11 @@ import im.wangchao.mhttp.Response
import im.wangchao.mhttp.callback.JsonCallbackHandler
import im.wangchao.mhttp.callback.TextCallbackHandler
import okhttp3.Cookie
import okhttp3.HttpUrl
import pl.szczodrzynski.edziennik.api.v2.*
import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
import pl.szczodrzynski.edziennik.currentTimeUnix
import pl.szczodrzynski.edziennik.getString
import pl.szczodrzynski.edziennik.getUnixDate
import pl.szczodrzynski.edziennik.isNotNullNorEmpty
import java.lang.Exception
import java.net.HttpURLConnection
class LoginLibrusSynergia(val data: DataLibrus, val onSuccess: () -> Unit) {

View File

@ -6,8 +6,6 @@ import im.wangchao.mhttp.Request
import im.wangchao.mhttp.Response
import im.wangchao.mhttp.callback.JsonCallbackHandler
import pl.szczodrzynski.edziennik.*
import pl.szczodrzynski.edziennik.api.AppError
import pl.szczodrzynski.edziennik.api.AppError.*
import pl.szczodrzynski.edziennik.api.v2.*
import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus
import pl.szczodrzynski.edziennik.api.v2.models.ApiError

View File

@ -6,12 +6,26 @@ import androidx.core.util.isNotEmpty
import com.google.gson.JsonObject
import im.wangchao.mhttp.Response
import pl.szczodrzynski.edziennik.App
import pl.szczodrzynski.edziennik.api.AppError
import pl.szczodrzynski.edziennik.api.AppError.*
import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback
import pl.szczodrzynski.edziennik.api.v2.interfaces.EndpointCallback
import pl.szczodrzynski.edziennik.datamodels.*
import pl.szczodrzynski.edziennik.models.Date
import pl.szczodrzynski.edziennik.data.api.AppError.*
import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement
import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance
import pl.szczodrzynski.edziennik.data.db.modules.events.Event
import pl.szczodrzynski.edziennik.data.db.modules.events.EventType
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade
import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory
import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher
import pl.szczodrzynski.edziennik.data.db.modules.teams.Team
import pl.szczodrzynski.edziennik.utils.models.Date
import java.io.InterruptedIOException
import java.net.SocketTimeoutException
import java.net.UnknownHostException

View File

@ -1,8 +1,5 @@
package pl.szczodrzynski.edziennik.api.v2.models
import pl.szczodrzynski.edziennik.datamodels.LoginStore
import pl.szczodrzynski.edziennik.datamodels.Profile
/**
* A Endpoint descriptor class.
*

View File

@ -5,8 +5,8 @@
package pl.szczodrzynski.edziennik.api.v2.models
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_NOT_NEEDED
import pl.szczodrzynski.edziennik.datamodels.LoginStore
import pl.szczodrzynski.edziennik.datamodels.Profile
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
/**
* A Login Method descriptor class.

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.api;
package pl.szczodrzynski.edziennik.data.api;
import android.content.Context;
import android.os.AsyncTask;

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.api;
package pl.szczodrzynski.edziennik.data.api;
import android.app.Activity;
import android.appwidget.AppWidgetManager;
@ -43,27 +43,27 @@ import pl.szczodrzynski.edziennik.BuildConfig;
import pl.szczodrzynski.edziennik.R;
import pl.szczodrzynski.edziennik.MainActivity;
import pl.szczodrzynski.edziennik.WidgetTimetable;
import pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface;
import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback;
import pl.szczodrzynski.edziennik.datamodels.AnnouncementFull;
import pl.szczodrzynski.edziennik.datamodels.Attendance;
import pl.szczodrzynski.edziennik.datamodels.AttendanceFull;
import pl.szczodrzynski.edziennik.datamodels.Event;
import pl.szczodrzynski.edziennik.datamodels.EventFull;
import pl.szczodrzynski.edziennik.datamodels.EventType;
import pl.szczodrzynski.edziennik.datamodels.GradeFull;
import pl.szczodrzynski.edziennik.datamodels.LessonFull;
import pl.szczodrzynski.edziennik.datamodels.LoginStore;
import pl.szczodrzynski.edziennik.datamodels.Message;
import pl.szczodrzynski.edziennik.datamodels.MessageFull;
import pl.szczodrzynski.edziennik.datamodels.Metadata;
import pl.szczodrzynski.edziennik.datamodels.Notice;
import pl.szczodrzynski.edziennik.datamodels.NoticeFull;
import pl.szczodrzynski.edziennik.datamodels.Profile;
import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
import pl.szczodrzynski.edziennik.datamodels.Team;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.models.Notification;
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface;
import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
import pl.szczodrzynski.edziennik.data.db.modules.announcements.AnnouncementFull;
import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
import pl.szczodrzynski.edziennik.data.db.modules.attendance.AttendanceFull;
import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull;
import pl.szczodrzynski.edziennik.data.db.modules.events.EventType;
import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeFull;
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
import pl.szczodrzynski.edziennik.data.db.modules.notices.NoticeFull;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.utils.models.Notification;
import pl.szczodrzynski.edziennik.network.ServerRequest;
import pl.szczodrzynski.edziennik.sync.SyncJob;
import pl.szczodrzynski.edziennik.utils.Themes;
@ -75,34 +75,34 @@ import static com.mikepenz.iconics.utils.IconicsConvertersKt.colorInt;
import static com.mikepenz.iconics.utils.IconicsConvertersKt.sizeDp;
import static pl.szczodrzynski.edziennik.App.APP_URL;
import static pl.szczodrzynski.edziennik.MainActivity.DRAWER_ITEM_HOME;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_OK;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_PROFILE_ARCHIVED;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_PROFILE_NOT_FOUND;
import static pl.szczodrzynski.edziennik.api.AppError.stringErrorCode;
import static pl.szczodrzynski.edziennik.api.AppError.stringErrorType;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_AGENDA;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_ALL;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_ANNOUNCEMENTS;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_ATTENDANCES;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_GRADES;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_HOMEWORKS;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_MESSAGES_INBOX;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_MESSAGES_OUTBOX;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_NOTICES;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_TIMETABLE;
import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_HOMEWORK;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_IUCZNIOWIE;
import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_LIBRUS;
import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_VULCAN;
import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OK;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_PROFILE_ARCHIVED;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_PROFILE_NOT_FOUND;
import static pl.szczodrzynski.edziennik.data.api.AppError.stringErrorCode;
import static pl.szczodrzynski.edziennik.data.api.AppError.stringErrorType;
import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_AGENDA;
import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_ALL;
import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_ANNOUNCEMENTS;
import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_ATTENDANCE;
import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_GRADES;
import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_HOMEWORK;
import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_MESSAGES_INBOX;
import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_MESSAGES_OUTBOX;
import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_NOTICES;
import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_TIMETABLE;
import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_FINAL;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_PROPOSED;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_FINAL;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED;
import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_IUCZNIOWIE;
import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_LIBRUS;
import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_VULCAN;
import static pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.REGISTRATION_ENABLED;
import static pl.szczodrzynski.edziennik.sync.SyncService.PROFILE_MAX_PROGRESS;
import static pl.szczodrzynski.edziennik.utils.Utils.d;
import static pl.szczodrzynski.edziennik.utils.Utils.ns;
@ -115,7 +115,7 @@ public class Edziennik {
private static boolean registerEmpty;
public static int oldLuckyNumber;
public static OldEdziennikInterface getApi(App app, int loginType) {
public static EdziennikInterface getApi(App app, int loginType) {
switch (loginType) {
default:
case LOGIN_TYPE_MOBIDZIENNIK:
@ -306,7 +306,7 @@ public class Edziennik {
app.notifier.add(new Notification(app.getContext(), text)
.withProfileData(profile.getId(), profile.getName())
.withType(event.type == TYPE_HOMEWORK ? Notification.TYPE_NEW_HOMEWORK : Notification.TYPE_NEW_EVENT)
.withFragmentRedirect(event.type == TYPE_HOMEWORK ? MainActivity.DRAWER_ITEM_HOMEWORKS : MainActivity.DRAWER_ITEM_AGENDA)
.withFragmentRedirect(event.type == TYPE_HOMEWORK ? MainActivity.DRAWER_ITEM_HOMEWORK : MainActivity.DRAWER_ITEM_AGENDA)
.withLongExtra("eventId", event.id)
.withLongExtra("eventDate", event.eventDate.getValue())
.withAddedDate(event.addedDate)
@ -354,7 +354,7 @@ public class Edziennik {
app.notifier.add(new Notification(app.getContext(), text)
.withProfileData(profile.getId(), profile.getName())
.withType(Notification.TYPE_NEW_NOTICE)
.withFragmentRedirect(MainActivity.DRAWER_ITEM_NOTICES)
.withFragmentRedirect(MainActivity.DRAWER_ITEM_BEHAVIOUR)
.withLongExtra("noticeId", notice.id)
.withAddedDate(notice.addedDate)
);
@ -382,7 +382,7 @@ public class Edziennik {
app.notifier.add(new Notification(app.getContext(), text)
.withProfileData(profile.getId(), profile.getName())
.withType(Notification.TYPE_NEW_ATTENDANCE)
.withFragmentRedirect(MainActivity.DRAWER_ITEM_ATTENDANCES)
.withFragmentRedirect(MainActivity.DRAWER_ITEM_ATTENDANCE)
.withLongExtra("attendanceId", attendance.id)
.withAddedDate(attendance.addedDate)
);
@ -521,7 +521,7 @@ public class Edziennik {
app.notifier.add(new Notification(app.getContext(), app.getString(R.string.notification_shared_event_format, event.sharedByName, type != null ? type.name : "wydarzenie", event.eventDate == null ? "nieznana data" : event.eventDate.getFormattedString(), event.topic))
.withProfileData(profile.getId(), profile.getName())
.withType(event.type == TYPE_HOMEWORK ? Notification.TYPE_NEW_SHARED_HOMEWORK : Notification.TYPE_NEW_SHARED_EVENT)
.withFragmentRedirect(event.type == TYPE_HOMEWORK ? MainActivity.DRAWER_ITEM_HOMEWORKS : MainActivity.DRAWER_ITEM_AGENDA)
.withFragmentRedirect(event.type == TYPE_HOMEWORK ? MainActivity.DRAWER_ITEM_HOMEWORK : MainActivity.DRAWER_ITEM_AGENDA)
.withLongExtra("eventDate", event.eventDate.getValue())
);
}
@ -625,7 +625,7 @@ public class Edziennik {
* Used in services, login form and {@code guiSync}
* <p>
* May be ran on worker thread.
* {@link OldEdziennikInterface}.sync is ran always on worker thread.
* {@link EdziennikInterface}.sync is ran always on worker thread.
* Every callback is ran on the UI thread.
*
* @param app
@ -676,7 +676,7 @@ public class Edziennik {
}
};
AsyncTask.execute(() -> {
ProfileFull profile = app.db.profileDao().getFullByIdNow(profileId);
ProfileFull profile = app.db.profileDao().getByIdNow(profileId);
if (profile != null) {
if (profile.getArchived()) {
@ -849,7 +849,7 @@ public class Edziennik {
app.getString(R.string.menu_grades),
app.getString(R.string.menu_homework),
app.getString(R.string.menu_notices),
app.getString(R.string.menu_attendances),
app.getString(R.string.menu_attendance),
app.getString(R.string.title_messages_inbox_single),
app.getString(R.string.title_messages_sent_single),
app.getString(R.string.menu_announcements)
@ -858,9 +858,9 @@ public class Edziennik {
FEATURE_TIMETABLE,
FEATURE_AGENDA,
FEATURE_GRADES,
FEATURE_HOMEWORKS,
FEATURE_HOMEWORK,
FEATURE_NOTICES,
FEATURE_ATTENDANCES,
FEATURE_ATTENDANCE,
FEATURE_MESSAGES_INBOX,
FEATURE_MESSAGES_OUTBOX,
FEATURE_ANNOUNCEMENTS
@ -1130,7 +1130,7 @@ public class Edziennik {
.show();
}
public void removeProfile(int profileId) {
Profile profileObject = app.db.profileDao().getFullByIdNow(profileId);
Profile profileObject = app.db.profileDao().getByIdNow(profileId);
if (profileObject == null)
return;
app.db.announcementDao().clear(profileId);

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.api;
package pl.szczodrzynski.edziennik.data.api;
import android.content.Context;
import android.graphics.Color;
@ -34,64 +34,64 @@ import okhttp3.HttpUrl;
import pl.szczodrzynski.edziennik.App;
import pl.szczodrzynski.edziennik.BuildConfig;
import pl.szczodrzynski.edziennik.R;
import pl.szczodrzynski.edziennik.api.interfaces.AttachmentGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface;
import pl.szczodrzynski.edziennik.api.interfaces.LoginCallback;
import pl.szczodrzynski.edziennik.api.interfaces.MessageGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.RecipientListGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback;
import pl.szczodrzynski.edziennik.datamodels.Announcement;
import pl.szczodrzynski.edziennik.datamodels.Attendance;
import pl.szczodrzynski.edziennik.datamodels.Event;
import pl.szczodrzynski.edziennik.datamodels.Grade;
import pl.szczodrzynski.edziennik.datamodels.Lesson;
import pl.szczodrzynski.edziennik.datamodels.LessonChange;
import pl.szczodrzynski.edziennik.datamodels.LoginStore;
import pl.szczodrzynski.edziennik.datamodels.LuckyNumber;
import pl.szczodrzynski.edziennik.datamodels.Message;
import pl.szczodrzynski.edziennik.datamodels.MessageFull;
import pl.szczodrzynski.edziennik.datamodels.MessageRecipient;
import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull;
import pl.szczodrzynski.edziennik.datamodels.Metadata;
import pl.szczodrzynski.edziennik.datamodels.Notice;
import pl.szczodrzynski.edziennik.datamodels.Profile;
import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
import pl.szczodrzynski.edziennik.datamodels.Subject;
import pl.szczodrzynski.edziennik.datamodels.Teacher;
import pl.szczodrzynski.edziennik.datamodels.Team;
import pl.szczodrzynski.edziennik.messages.MessagesComposeInfo;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.models.Endpoint;
import pl.szczodrzynski.edziennik.models.Time;
import pl.szczodrzynski.edziennik.models.Week;
import pl.szczodrzynski.edziennik.data.api.interfaces.AttachmentGetCallback;
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface;
import pl.szczodrzynski.edziennik.data.api.interfaces.LoginCallback;
import pl.szczodrzynski.edziennik.data.api.interfaces.MessageGetCallback;
import pl.szczodrzynski.edziennik.data.api.interfaces.RecipientListGetCallback;
import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement;
import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson;
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber;
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull;
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo;
import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.utils.models.Endpoint;
import pl.szczodrzynski.edziennik.utils.models.Time;
import pl.szczodrzynski.edziennik.utils.models.Week;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_SCHOOL_NAME;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_MAINTENANCE;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED;
import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_DELETED;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT;
import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEGATIVE;
import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEUTRAL;
import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_POSITIVE;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_LOGIN;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_SCHOOL_NAME;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_MAINTENANCE;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_FINAL;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED;
import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED;
import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE;
import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_DELETED;
import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED;
import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT;
import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEGATIVE;
import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEUTRAL;
import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_POSITIVE;
import static pl.szczodrzynski.edziennik.utils.Utils.crc16;
import static pl.szczodrzynski.edziennik.utils.Utils.crc32;
import static pl.szczodrzynski.edziennik.utils.Utils.d;
import static pl.szczodrzynski.edziennik.utils.Utils.getWordGradeValue;
public class Iuczniowie implements OldEdziennikInterface {
public class Iuczniowie implements EdziennikInterface {
public Iuczniowie(App app) {
this.app = app;
}
@ -200,7 +200,7 @@ public class Iuczniowie implements OldEdziennikInterface {
targetEndpoints.add("Exams");
targetEndpoints.add("Notices");
targetEndpoints.add("Announcements");
targetEndpoints.add("Attendances");
targetEndpoints.add("Attendance");
targetEndpoints.add("MessagesInbox");
targetEndpoints.add("MessagesOutbox");
targetEndpoints.add("Finish");
@ -235,14 +235,14 @@ public class Iuczniowie implements OldEdziennikInterface {
targetEndpoints.add("Grades");
targetEndpoints.add("PropositionGrades");
break;
case FEATURE_HOMEWORKS:
targetEndpoints.add("Homeworks");
case FEATURE_HOMEWORK:
targetEndpoints.add("Homework");
break;
case FEATURE_NOTICES:
targetEndpoints.add("Notices");
break;
case FEATURE_ATTENDANCES:
targetEndpoints.add("Attendances");
case FEATURE_ATTENDANCE:
targetEndpoints.add("Attendance");
break;
case FEATURE_MESSAGES_INBOX:
targetEndpoints.add("MessagesInbox");
@ -300,9 +300,9 @@ public class Iuczniowie implements OldEdziennikInterface {
}
}
this.attendancesMonth = today.month;
this.attendancesYear = today.year;
this.attendancesPrevMonthChecked = false;
this.attendanceMonth = today.month;
this.attendanceYear = today.year;
this.attendancePrevMonthChecked = false;
this.examsMonth = today.month;
this.examsYear = today.year;
this.examsMonthsChecked = 0;
@ -352,8 +352,8 @@ public class Iuczniowie implements OldEdziennikInterface {
case "Announcements":
getAnnouncements();
break;
case "Attendances":
getAttendances();
case "Attendance":
getAttendance();
break;
case "MessagesInbox":
getMessagesInbox();
@ -880,11 +880,17 @@ public class Iuczniowie implements OldEdziennikInterface {
boolean countToTheAverage = jGrade.get("DoSredniej").getAsBoolean();
float value = jGrade.get("WartoscDoSred").getAsFloat();
String gradeColor = jGrade.get("Kolor").getAsString();
int colorInt = 0xff2196f3;
if (!gradeColor.isEmpty()) {
colorInt = Color.parseColor("#"+gradeColor);
}
Grade gradeObject = new Grade(
profileId,
jGrade.get("idK").getAsLong(),
jGrade.get("Kategoria").getAsString(),
Color.parseColor("#"+jGrade.get("Kolor").getAsString()),
colorInt,
"",
jGrade.get("Ocena").getAsString(),
value,
@ -1190,17 +1196,17 @@ public class Iuczniowie implements OldEdziennikInterface {
});
}
private int attendancesYear;
private int attendancesMonth;
private boolean attendancesPrevMonthChecked = false;
private void getAttendances() {
callback.onActionStarted(R.string.sync_action_syncing_attendances);
private int attendanceYear;
private int attendanceMonth;
private boolean attendancePrevMonthChecked = false;
private void getAttendance() {
callback.onActionStarted(R.string.sync_action_syncing_attendance);
apiRequest(Request.builder()
.url(IDZIENNIK_URL +"/mod_panelRodzica/obecnosci/WS_obecnosciUcznia.asmx/pobierzObecnosciUcznia")
.userAgent(userAgent)
.addParameter("idPozDziennika", loginRegisterId)
.addParameter("mc", attendancesMonth)
.addParameter("rok", attendancesYear)
.addParameter("mc", attendanceMonth)
.addParameter("rok", attendanceYear)
.addParameter("dataTygodnia", "")
.postJson(), (result, response) -> {
JsonObject data = result.getAsJsonObject("d");
@ -1275,25 +1281,25 @@ public class Iuczniowie implements OldEdziennikInterface {
}
}
int attendancesDateValue = attendancesYear*10000 + attendancesMonth*100;
if (profile.getEmpty() && attendancesDateValue > profile.getSemesterStart(1).getValue()) {
attendancesPrevMonthChecked = true; // do not need to check prev month later
attendancesMonth--;
if (attendancesMonth < 1) {
attendancesMonth = 12;
attendancesYear--;
int attendanceDateValue = attendanceYear *10000 + attendanceMonth *100;
if (profile.getEmpty() && attendanceDateValue > profile.getSemesterStart(1).getValue()) {
attendancePrevMonthChecked = true; // do not need to check prev month later
attendanceMonth--;
if (attendanceMonth < 1) {
attendanceMonth = 12;
attendanceYear--;
}
r("get", "Attendances");
} else if (!attendancesPrevMonthChecked /* get also the previous month */) {
attendancesMonth--;
if (attendancesMonth < 1) {
attendancesMonth = 12;
attendancesYear--;
r("get", "Attendance");
} else if (!attendancePrevMonthChecked /* get also the previous month */) {
attendanceMonth--;
if (attendanceMonth < 1) {
attendanceMonth = 12;
attendanceYear--;
}
attendancesPrevMonthChecked = true;
r("get", "Attendances");
attendancePrevMonthChecked = true;
r("get", "Attendance");
} else {
r("finish", "Attendances");
r("finish", "Attendance");
}
});
}

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.api;
package pl.szczodrzynski.edziennik.data.api;
import android.content.Context;
import android.graphics.Color;
@ -45,38 +45,40 @@ import im.wangchao.mhttp.callback.TextCallbackHandler;
import pl.szczodrzynski.edziennik.App;
import pl.szczodrzynski.edziennik.BuildConfig;
import pl.szczodrzynski.edziennik.R;
import pl.szczodrzynski.edziennik.api.interfaces.AttachmentGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface;
import pl.szczodrzynski.edziennik.api.interfaces.LoginCallback;
import pl.szczodrzynski.edziennik.api.interfaces.MessageGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.RecipientListGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback;
import pl.szczodrzynski.edziennik.datamodels.Announcement;
import pl.szczodrzynski.edziennik.datamodels.Attendance;
import pl.szczodrzynski.edziennik.datamodels.Event;
import pl.szczodrzynski.edziennik.datamodels.EventType;
import pl.szczodrzynski.edziennik.datamodels.Grade;
import pl.szczodrzynski.edziennik.datamodels.GradeCategory;
import pl.szczodrzynski.edziennik.datamodels.Lesson;
import pl.szczodrzynski.edziennik.datamodels.LessonChange;
import pl.szczodrzynski.edziennik.datamodels.LoginStore;
import pl.szczodrzynski.edziennik.datamodels.LuckyNumber;
import pl.szczodrzynski.edziennik.datamodels.Message;
import pl.szczodrzynski.edziennik.datamodels.MessageFull;
import pl.szczodrzynski.edziennik.datamodels.MessageRecipient;
import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull;
import pl.szczodrzynski.edziennik.datamodels.Metadata;
import pl.szczodrzynski.edziennik.datamodels.Notice;
import pl.szczodrzynski.edziennik.datamodels.Profile;
import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
import pl.szczodrzynski.edziennik.datamodels.Subject;
import pl.szczodrzynski.edziennik.datamodels.Teacher;
import pl.szczodrzynski.edziennik.datamodels.Team;
import pl.szczodrzynski.edziennik.messages.MessagesComposeInfo;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.models.Endpoint;
import pl.szczodrzynski.edziennik.models.Time;
import pl.szczodrzynski.edziennik.models.Week;
import pl.szczodrzynski.edziennik.data.api.interfaces.AttachmentGetCallback;
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface;
import pl.szczodrzynski.edziennik.data.api.interfaces.LoginCallback;
import pl.szczodrzynski.edziennik.data.api.interfaces.MessageGetCallback;
import pl.szczodrzynski.edziennik.data.api.interfaces.RecipientListGetCallback;
import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
import pl.szczodrzynski.edziennik.data.api.v2.models.DataStore;
import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement;
import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
import pl.szczodrzynski.edziennik.data.db.modules.events.EventType;
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory;
import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson;
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber;
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull;
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsence;
import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo;
import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.utils.models.Endpoint;
import pl.szczodrzynski.edziennik.utils.models.Time;
import pl.szczodrzynski.edziennik.utils.models.Week;
import pl.szczodrzynski.edziennik.utils.Utils;
import static java.net.HttpURLConnection.HTTP_BAD_REQUEST;
@ -85,44 +87,44 @@ import static java.net.HttpURLConnection.HTTP_GONE;
import static java.net.HttpURLConnection.HTTP_NOT_FOUND;
import static java.net.HttpURLConnection.HTTP_OK;
import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_LIBRUS_DISCONNECTED;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_LIBRUS_NOT_ACTIVATED;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_MAINTENANCE;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_PROFILE_NOT_FOUND;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_SYNERGIA_NOT_ACTIVATED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED;
import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_PT_MEETING;
import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_TEACHER_ABSENCE;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_NORMAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED;
import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT;
import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEGATIVE;
import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEUTRAL;
import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_POSITIVE;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_EDUCATOR;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_LIBRARIAN;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_OTHER;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_PARENTS_COUNCIL;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_PEDAGOGUE;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_SCHOOL_ADMIN;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_SCHOOL_PARENTS_COUNCIL;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_SECRETARIAT;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_SUPER_ADMIN;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_TEACHER;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_LOGIN;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_LIBRUS_DISCONNECTED;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_LIBRUS_NOT_ACTIVATED;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_MAINTENANCE;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_PROFILE_NOT_FOUND;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_SYNERGIA_NOT_ACTIVATED;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED;
import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_PT_MEETING;
import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_TEACHER_ABSENCE;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_NORMAL;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_FINAL;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_PROPOSED;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_FINAL;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED;
import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED;
import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE;
import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED;
import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT;
import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEGATIVE;
import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEUTRAL;
import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_POSITIVE;
import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_EDUCATOR;
import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_LIBRARIAN;
import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_OTHER;
import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_PARENTS_COUNCIL;
import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_PEDAGOGUE;
import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_SCHOOL_ADMIN;
import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_SCHOOL_PARENTS_COUNCIL;
import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_SECRETARIAT;
import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_SUPER_ADMIN;
import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_TEACHER;
import static pl.szczodrzynski.edziennik.utils.Utils.bs;
import static pl.szczodrzynski.edziennik.utils.Utils.c;
import static pl.szczodrzynski.edziennik.utils.Utils.contains;
@ -131,7 +133,7 @@ import static pl.szczodrzynski.edziennik.utils.Utils.d;
import static pl.szczodrzynski.edziennik.utils.Utils.getGradeValue;
import static pl.szczodrzynski.edziennik.utils.Utils.strToInt;
public class Librus implements OldEdziennikInterface {
public class Librus implements EdziennikInterface {
public Librus(App app) {
this.app = app;
}
@ -169,6 +171,7 @@ public class Librus implements OldEdziennikInterface {
private List<Team> teamList;
private List<Teacher> teacherList;
private List<TeacherAbsence> teacherAbsenceList;
private List<Subject> subjectList;
private List<Lesson> lessonList;
private List<LessonChange> lessonChangeList;
@ -198,6 +201,7 @@ public class Librus implements OldEdziennikInterface {
private boolean enableDescriptiveGrades = false;
private boolean enableTextGrades = false;
private boolean enableBehaviourGrades = true;
private long unitId = -1;
private int startPointsSemester1 = 0;
private int startPointsSemester2 = 0;
@ -212,6 +216,8 @@ public class Librus implements OldEdziennikInterface {
this.fullSync = profile == null || profile.getEmpty() || profile.shouldFullSync(activityContext);
this.today = Date.getToday();
DataStore ds = new DataStore(app.db, profileId);
this.librusEmail = loginStore.getLoginData("email", "");
this.librusPassword = loginStore.getLoginData("password", "");
if (profile == null) {
@ -236,6 +242,7 @@ public class Librus implements OldEdziennikInterface {
teamList = profileId == -1 ? new ArrayList<>() : app.db.teamDao().getAllNow(profileId);
teacherList = profileId == -1 ? new ArrayList<>() : app.db.teacherDao().getAllNow(profileId);
teacherAbsenceList = new ArrayList<>();
subjectList = new ArrayList<>();
lessonList = new ArrayList<>();
lessonChangeList = new ArrayList<>();
@ -285,15 +292,18 @@ public class Librus implements OldEdziennikInterface {
targetEndpoints.add("Grades");
targetEndpoints.add("PointGrades");
targetEndpoints.add("DescriptiveGrades");
targetEndpoints.add("TextGrades");
targetEndpoints.add("BehaviourGrades");
targetEndpoints.add("GradesComments");
targetEndpoints.add("Events");
targetEndpoints.add("TeacherFreeDays");
targetEndpoints.add("CustomTypes");
targetEndpoints.add("Homeworks");
targetEndpoints.add("Homework");
targetEndpoints.add("LuckyNumbers");
targetEndpoints.add("Notices");
targetEndpoints.add("AttendancesTypes");
targetEndpoints.add("Attendances");
targetEndpoints.add("AttendanceTypes");
targetEndpoints.add("Attendance");
targetEndpoints.add("Announcements");
targetEndpoints.add("PtMeetings");
@ -343,6 +353,8 @@ public class Librus implements OldEdziennikInterface {
targetEndpoints.add("Events");
targetEndpoints.add("CustomTypes");
targetEndpoints.add("PtMeetings");
targetEndpoints.add("SchoolFreeDays");
targetEndpoints.add("TeacherFreeDays");
break;
case FEATURE_GRADES:
targetEndpoints.add("SavedGradeCategories");
@ -356,17 +368,20 @@ public class Librus implements OldEdziennikInterface {
targetEndpoints.add("Grades");
targetEndpoints.add("PointGrades");
targetEndpoints.add("DescriptiveGrades");
targetEndpoints.add("TextGrades");
targetEndpoints.add("BehaviourGrades");
targetEndpoints.add("GradesComments");
break;
case FEATURE_HOMEWORKS:
targetEndpoints.add("Homeworks");
case FEATURE_HOMEWORK:
targetEndpoints.add("Homework");
break;
case FEATURE_NOTICES:
targetEndpoints.add("Notices");
break;
case FEATURE_ATTENDANCES:
targetEndpoints.add("AttendancesTypes");
targetEndpoints.add("Attendances");
case FEATURE_ATTENDANCE:
targetEndpoints.add("AttendanceTypes");
targetEndpoints.add("Attendance");
break;
case FEATURE_MESSAGES_INBOX:
if (!hasMessagesLogin) {
@ -430,6 +445,10 @@ public class Librus implements OldEdziennikInterface {
callback.onProgress(PROGRESS_STEP);
index++;
}
if (index > targetEndpoints.size()) {
finish();
return;
}
d(TAG, "Called r("+type+", "+endpoint+"). Getting "+targetEndpoints.get(index));
switch (targetEndpoints.get(index)) {
case "Me":
@ -495,6 +514,12 @@ public class Librus implements OldEdziennikInterface {
case "DescriptiveGrades":
getDescriptiveGrades();
break;
case "TextGrades":
getTextGrades();
break;
case "GradesComments":
getGradesComments();
break;
case "BehaviourGrades":
getBehaviourGrades();
break;
@ -504,8 +529,8 @@ public class Librus implements OldEdziennikInterface {
case "CustomTypes":
getCustomTypes();
break;
case "Homeworks":
getHomeworks();
case "Homework":
getHomework();
break;
case "LuckyNumbers":
getLuckyNumbers();
@ -513,11 +538,11 @@ public class Librus implements OldEdziennikInterface {
case "Notices":
getNotices();
break;
case "AttendancesTypes":
getAttendancesTypes();
case "AttendanceTypes":
getAttendanceTypes();
break;
case "Attendances":
getAttendances();
case "Attendance":
getAttendance();
break;
case "Announcements":
getAnnouncements();
@ -531,6 +556,9 @@ public class Librus implements OldEdziennikInterface {
case "TeacherFreeDays":
getTeacherFreeDays();
break;
case "SchoolFreeDays":
getSchoolFreeDays();
break;
case "MessagesLogin":
getMessagesLogin();
break;
@ -572,6 +600,8 @@ public class Librus implements OldEdziennikInterface {
}
if (eventTypeList.size() > 0)
app.db.eventTypeDao().addAll(eventTypeList);
if (teacherAbsenceList.size() > 0)
app.db.teacherAbsenceDao().addAll(teacherAbsenceList);
if (noticeList.size() > 0) {
app.db.noticeDao().clear(profileId);
app.db.noticeDao().addAll(noticeList);
@ -641,7 +671,7 @@ public class Librus implements OldEdziennikInterface {
};
librusLoginCallback = redirectUrl -> {
fakeAuthorize = "authorize2";
fakeAuthorize = "authorize";
authorize(AUTHORIZE_URL, authorizeCallback);
};
@ -1400,7 +1430,8 @@ public class Librus implements OldEdziennikInterface {
}
JsonElement unit = myClass.get("Unit");
if (unit != null && !(unit instanceof JsonNull)) {
profile.putStudentData("unitId", unit.getAsJsonObject().get("Id").getAsLong());
unitId = unit.getAsJsonObject().get("Id").getAsLong();
profile.putStudentData("unitId", unitId);
}
r("finish", "Classes");
}
@ -1597,6 +1628,10 @@ public class Librus implements OldEdziennikInterface {
r("finish", "Classrooms");
return;
}
if (data.get("Classrooms") == null) {
r("finish", "Classrooms");
return;
}
JsonArray jClassrooms = data.get("Classrooms").getAsJsonArray();
//d("Got Classrooms: "+jClassrooms.toString());
classrooms.clear();
@ -1655,11 +1690,32 @@ public class Librus implements OldEdziennikInterface {
continue;
}
Time startTime = null;
Time endTime = null;
try {
startTime = Time.fromH_m(lesson.get(substitution && !cancelled ? "OrgHourFrom" : "HourFrom").getAsString());
endTime = Time.fromH_m(lesson.get(substitution && !cancelled ? "OrgHourTo" : "HourTo").getAsString());
}
catch (Exception ignore) {
try {
JsonElement lessonNo;
if (!((lessonNo = lesson.get("LessonNo")) instanceof JsonNull)) {
Pair<Time, Time> timePair = lessonRanges.get(strToInt(lessonNo.getAsString()));
if (timePair != null) {
startTime = timePair.first;
endTime = timePair.second;
}
}
}
catch (Exception ignore2) { }
}
Lesson lessonObject = new Lesson(
profileId,
lesson.get("DayNo").getAsInt() - 1,
Time.fromH_m(lesson.get(substitution && !cancelled ? "OrgHourFrom" : "HourFrom").getAsString()),
Time.fromH_m(lesson.get(substitution && !cancelled ? "OrgHourTo" : "HourTo").getAsString())
startTime,
endTime
);
JsonElement subject;
@ -1704,7 +1760,7 @@ public class Librus implements OldEdziennikInterface {
r("finish", "Substitutions");
return;
}
JsonArray substitutions = data.get("Substitutions").getAsJsonArray();
try {
List<Long> ignoreList = new ArrayList<>();
@ -1873,7 +1929,7 @@ public class Librus implements OldEdziennikInterface {
}
private void getGradesCategories() {
if (!fullSync) {
if (!fullSync && false) {
// cancel every not-full sync; no need to download categories again
// every full sync it'll be enabled to make sure there are no grades - by getUnits
r("finish", "GradesCategories");
@ -1927,6 +1983,32 @@ public class Librus implements OldEdziennikInterface {
});
}
private void getGradesComments() {
callback.onActionStarted(R.string.sync_action_syncing_grade_comments);
apiRequest("Grades/Comments", data -> {
if (data == null) {
r("finish", "GradesComments");
return;
}
JsonArray comments = data.get("Comments").getAsJsonArray();
for (JsonElement commentEl : comments) {
JsonObject comment = commentEl.getAsJsonObject();
long gradeId = comment.get("Grade").getAsJsonObject().get("Id").getAsLong();
String text = comment.get("Text").getAsString();
for (Grade grade : gradeList) {
if (grade.id == gradeId) {
grade.description = text;
break;
}
}
}
r("finish", "GradesComments");
});
}
private void getPointGradesCategories() {
if (!fullSync || !enablePointGrades) {
// cancel every not-full sync; no need to download categories again
@ -2382,6 +2464,70 @@ public class Librus implements OldEdziennikInterface {
});
}
private void getTextGrades() {
callback.onActionStarted(R.string.sync_action_syncing_descriptive_grades);
apiRequest("DescriptiveGrades", data -> {
if (data == null) {
r("finish", "TextGrades");
return;
}
JsonArray grades = data.get("Grades").getAsJsonArray();
//d("Got Grades: "+grades.toString());
for (JsonElement gradeEl : grades) {
JsonObject grade = gradeEl.getAsJsonObject();
long id = grade.get("Id").getAsLong();
long teacherId = grade.get("AddedBy").getAsJsonObject().get("Id").getAsLong();
int semester = grade.get("Semester").getAsInt();
long subjectId = grade.get("Subject").getAsJsonObject().get("Id").getAsLong();
JsonElement map = grade.get("Map");
JsonElement realGrade = grade.get("RealGradeValue");
String description = "";
if (map != null) {
description = map.getAsString();
}
else if (realGrade != null) {
description = realGrade.getAsString();
}
long categoryId = -1;
JsonElement skillEl = grade.get("Skill");
if (skillEl != null) {
categoryId = skillEl.getAsJsonObject().get("Id").getAsLong();
}
String str_date = grade.get("AddDate").getAsString();
long addedDate = Date.fromIso(str_date);
String category = "";
int color = -1;
GradeCategory gradeCategory = GradeCategory.search(gradeCategoryList, categoryId);
if (gradeCategory != null) {
category = gradeCategory.text;
color = gradeCategory.color;
}
Grade gradeObject = new Grade(
profileId,
id,
category,
color,
"",
description,
0.0f,
0,
semester,
teacherId,
subjectId
);
gradeObject.type = Grade.TYPE_DESCRIPTIVE;
gradeList.add(gradeObject);
metadataList.add(new Metadata(profileId, Metadata.TYPE_GRADE, gradeObject.id, profile.getEmpty(), profile.getEmpty(), addedDate));
}
r("finish", "TextGrades");
});
}
private void getBehaviourGrades() {
d(TAG, "Grades settings: "+enableStandardGrades+", "+enablePointGrades+", "+enableDescriptiveGrades);
if (!enableBehaviourGrades) {
@ -2537,7 +2683,7 @@ public class Librus implements OldEdziennikInterface {
&& (el = obj.get("Id")) != null) {
type = el.getAsInt();
}
/*EventType typeObject = app.db.eventTypeDao().getFullByIdNow(profileId, type);
/*EventType typeObject = app.db.eventTypeDao().getByIdNow(profileId, type);
if (typeObject == null) {
getCustomTypes = true;
}*/
@ -2615,21 +2761,21 @@ public class Librus implements OldEdziennikInterface {
});
}
private void getHomeworks() {
private void getHomework() {
if (!premium) {
r("finish", "Homeworks");
r("finish", "Homework");
return;
}
callback.onActionStarted(R.string.sync_action_syncing_homework);
apiRequest("HomeWorkAssignments", data -> {
if (data == null) {
r("finish", "Homeworks");
r("finish", "Homework");
return;
}
JsonArray homeworks = data.get("HomeWorkAssignments").getAsJsonArray();
JsonArray homeworkList = data.get("HomeWorkAssignments").getAsJsonArray();
//d("Got Grades: "+events.toString());
try {
for (JsonElement homeworkEl : homeworks) {
for (JsonElement homeworkEl : homeworkList) {
JsonObject homework = homeworkEl.getAsJsonObject();
JsonElement el;
@ -2680,7 +2826,7 @@ public class Librus implements OldEdziennikInterface {
eventList.add(eventObject);
metadataList.add(new Metadata(profileId, Metadata.TYPE_EVENT, eventObject.id, profile.getEmpty(), profile.getEmpty(), addedDate.getInMillis()));
}
r("finish", "Homeworks");
r("finish", "Homework");
}
catch (Exception e) {
finishWithError(new AppError(TAG, 2648, CODE_OTHER, e, data));
@ -2781,11 +2927,11 @@ public class Librus implements OldEdziennikInterface {
}
private SparseArray<Pair<Integer, String>> attendanceTypes = new SparseArray<>();
private void getAttendancesTypes() {
private void getAttendanceTypes() {
callback.onActionStarted(R.string.sync_action_syncing_attendance_types);
apiRequest("Attendances/Types", data -> {
if (data == null) {
r("finish", "AttendancesTypes");
r("finish", "AttendanceTypes");
return;
}
try {
@ -2800,7 +2946,7 @@ public class Librus implements OldEdziennikInterface {
)
);
}
r("finish", "AttendancesTypes");
r("finish", "AttendanceTypes");
}
catch (Exception e) {
finishWithError(new AppError(TAG, 2782, CODE_OTHER, e, data));
@ -2808,18 +2954,18 @@ public class Librus implements OldEdziennikInterface {
});
}
private void getAttendances() {
callback.onActionStarted(R.string.sync_action_syncing_attendances);
private void getAttendance() {
callback.onActionStarted(R.string.sync_action_syncing_attendance);
apiRequest("Attendances"+(fullSync ? "" : "?dateFrom="+ Date.getToday().stepForward(0, -1, 0).getStringY_m_d()), data -> {
if (data == null) {
r("finish", "Attendances");
r("finish", "Attendance");
return;
}
try {
JsonArray jAttendances = data.get("Attendances").getAsJsonArray();
JsonArray jAttendance = data.get("Attendances").getAsJsonArray();
for (JsonElement attendanceEl : jAttendances) {
for (JsonElement attendanceEl : jAttendance) {
JsonObject attendance = attendanceEl.getAsJsonObject();
int type = attendance.getAsJsonObject("Type").get("Id").getAsInt();
@ -2885,7 +3031,7 @@ public class Librus implements OldEdziennikInterface {
metadataList.add(new Metadata(profileId, Metadata.TYPE_ATTENDANCE, attendanceObject.id, profile.getEmpty(), profile.getEmpty(), addedDate));
}
}
r("finish", "Attendances");
r("finish", "Attendance");
}
catch (Exception e) {
finishWithError(new AppError(TAG, 2872, CODE_OTHER, e, data));
@ -3000,6 +3146,10 @@ public class Librus implements OldEdziennikInterface {
private SparseArray<String> teacherFreeDaysTypes = new SparseArray<>();
private void getTeacherFreeDaysTypes() {
if (!fullSync) {
r("finish", "TeacherFreeDaysTypes");
return;
}
callback.onActionStarted(R.string.sync_action_syncing_teacher_free_days_types);
apiRequest("TeacherFreeDays/Types", data -> {
if (data == null) {
@ -3034,27 +3184,45 @@ public class Librus implements OldEdziennikInterface {
JsonObject freeDay = freeDayEl.getAsJsonObject();
long id = freeDay.get("Id").getAsLong();
long teacherId = freeDay.getAsJsonObject("Teacher").get("Id").getAsLong();
Date dateFrom = Date.fromY_m_d(freeDay.get("DateFrom").getAsString());
Date dateTo = Date.fromY_m_d(freeDay.get("DateTo").getAsString());
int type = freeDay.getAsJsonObject("Type").get("Id").getAsInt();
String topic = teacherFreeDaysTypes.get(type)+"\n"+(dateFrom.getValue() != dateTo.getValue() ? dateFrom.getFormattedString()+" - "+dateTo.getFormattedString() : "");
Event eventObject = new Event(
Time timeFrom = null;
Time timeTo = null;
if (freeDay.get("TimeFrom") != null && freeDay.get("TimeTo") != null) {
timeFrom = Time.fromH_m_s(freeDay.get("TimeFrom").getAsString());
timeTo = Time.fromH_m_s(freeDay.get("TimeTo").getAsString());
}
long type = freeDay.getAsJsonObject("Type").get("Id").getAsLong();
//String topic = teacherFreeDaysTypes.get(type)+"\n"+(dateFrom.getValue() != dateTo.getValue() ? dateFrom.getFormattedString()+" - "+dateTo.getFormattedString() : "");
TeacherAbsence teacherAbsence = new TeacherAbsence(
profileId,
id,
teacherId,
type,
dateFrom,
null,
topic,
-1,
TYPE_TEACHER_ABSENCE,
false,
freeDay.getAsJsonObject("Teacher").get("Id").getAsLong(),
-1,
-1
dateTo,
timeFrom,
timeTo
);
eventList.add(eventObject);
metadataList.add(new Metadata(profileId, Metadata.TYPE_EVENT, eventObject.id, profile.getEmpty(), profile.getEmpty(), System.currentTimeMillis()));
teacherAbsenceList.add(teacherAbsence);
metadataList.add(
new Metadata(
profileId,
Metadata.TYPE_TEACHER_ABSENCE,
teacherAbsence.getId(),
true,
true,
System.currentTimeMillis())
);
}
r("finish", "TeacherFreeDays");
}
@ -3064,6 +3232,26 @@ public class Librus implements OldEdziennikInterface {
});
}
private void getSchoolFreeDays() {
callback.onActionStarted(R.string.sync_action_syncing_school_free_days);
apiRequest("SchoolFreeDays" + (unitId != -1 ? "?unit=" + unitId : ""), data -> {
if (data == null) {
r("finish", "SchoolFreeDays");
return;
}
try {
JsonArray jFreeDays = data.get("SchoolFreeDays").getAsJsonArray();
for (JsonElement freeDayEl: jFreeDays) {
continue;
}
r("finish", "SchoolFreeDays");
} catch (Exception e) {
finishWithError(new AppError(TAG, 3069, CODE_OTHER, e, data));
}
});
}
private void getMessagesLogin() {
if (synergiaPassword == null) {
// skip messages
@ -3250,10 +3438,10 @@ public class Librus implements OldEdziennikInterface {
configurableEndpoints.put("Grades", new Endpoint("Grades",true, false, profile.getChangedEndpoints()));
configurableEndpoints.put("PointGrades", new Endpoint("PointGrades",true, false, profile.getChangedEndpoints()));
configurableEndpoints.put("Events", new Endpoint("Events",true, false, profile.getChangedEndpoints()));
configurableEndpoints.put("Homeworks", new Endpoint("Homeworks",true, false, profile.getChangedEndpoints()));
configurableEndpoints.put("Homework", new Endpoint("Homework",true, false, profile.getChangedEndpoints()));
configurableEndpoints.put("LuckyNumbers", new Endpoint("LuckyNumbers",true, false, profile.getChangedEndpoints()));
configurableEndpoints.put("Notices", new Endpoint("Notices",true, false, profile.getChangedEndpoints()));
configurableEndpoints.put("Attendances", new Endpoint("Attendances",true, false, profile.getChangedEndpoints()));
configurableEndpoints.put("Attendance", new Endpoint("Attendance",true, false, profile.getChangedEndpoints()));
configurableEndpoints.put("Announcements", new Endpoint("Announcements",true, true, profile.getChangedEndpoints()));
configurableEndpoints.put("PtMeetings", new Endpoint("PtMeetings",true, true, profile.getChangedEndpoints()));
configurableEndpoints.put("TeacherFreeDays", new Endpoint("TeacherFreeDays",false, false, profile.getChangedEndpoints()));
@ -3661,4 +3849,4 @@ public class Librus implements OldEdziennikInterface {
public MessagesComposeInfo getComposeInfo(@NonNull ProfileFull profile) {
return new MessagesComposeInfo(0, 0, 150, 20000);
}
}
}

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.api;
package pl.szczodrzynski.edziennik.data.api;
import android.content.Context;
import android.graphics.Color;
@ -40,66 +40,66 @@ import im.wangchao.mhttp.callback.TextCallbackHandler;
import pl.szczodrzynski.edziennik.App;
import pl.szczodrzynski.edziennik.BuildConfig;
import pl.szczodrzynski.edziennik.R;
import pl.szczodrzynski.edziennik.api.interfaces.AttachmentGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface;
import pl.szczodrzynski.edziennik.api.interfaces.LoginCallback;
import pl.szczodrzynski.edziennik.api.interfaces.MessageGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.RecipientListGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback;
import pl.szczodrzynski.edziennik.datamodels.Attendance;
import pl.szczodrzynski.edziennik.datamodels.Event;
import pl.szczodrzynski.edziennik.datamodels.Grade;
import pl.szczodrzynski.edziennik.datamodels.GradeCategory;
import pl.szczodrzynski.edziennik.datamodels.Lesson;
import pl.szczodrzynski.edziennik.datamodels.LessonChange;
import pl.szczodrzynski.edziennik.datamodels.LoginStore;
import pl.szczodrzynski.edziennik.datamodels.LuckyNumber;
import pl.szczodrzynski.edziennik.datamodels.Message;
import pl.szczodrzynski.edziennik.datamodels.MessageFull;
import pl.szczodrzynski.edziennik.datamodels.MessageRecipient;
import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull;
import pl.szczodrzynski.edziennik.datamodels.Metadata;
import pl.szczodrzynski.edziennik.datamodels.Notice;
import pl.szczodrzynski.edziennik.datamodels.Profile;
import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
import pl.szczodrzynski.edziennik.datamodels.Subject;
import pl.szczodrzynski.edziennik.datamodels.Teacher;
import pl.szczodrzynski.edziennik.datamodels.Team;
import pl.szczodrzynski.edziennik.messages.MessagesComposeInfo;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.models.Endpoint;
import pl.szczodrzynski.edziennik.models.Time;
import pl.szczodrzynski.edziennik.models.Week;
import pl.szczodrzynski.edziennik.data.api.interfaces.AttachmentGetCallback;
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface;
import pl.szczodrzynski.edziennik.data.api.interfaces.LoginCallback;
import pl.szczodrzynski.edziennik.data.api.interfaces.MessageGetCallback;
import pl.szczodrzynski.edziennik.data.api.interfaces.RecipientListGetCallback;
import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory;
import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson;
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber;
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull;
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo;
import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.utils.models.Endpoint;
import pl.szczodrzynski.edziennik.utils.models.Time;
import pl.szczodrzynski.edziennik.utils.models.Week;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_MAINTENANCE;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_CUSTOM;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED;
import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_DEFAULT;
import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_EXAM;
import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_SHORT_QUIZ;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_DELETED;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_LOGIN;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_MAINTENANCE;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_CUSTOM;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED;
import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_DEFAULT;
import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_EXAM;
import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_SHORT_QUIZ;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_FINAL;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_PROPOSED;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_FINAL;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED;
import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_DELETED;
import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED;
import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT;
import static pl.szczodrzynski.edziennik.utils.Utils.bs;
import static pl.szczodrzynski.edziennik.utils.Utils.crc16;
import static pl.szczodrzynski.edziennik.utils.Utils.d;
import static pl.szczodrzynski.edziennik.utils.Utils.monthFromName;
import static pl.szczodrzynski.edziennik.utils.Utils.strToInt;
public class Mobidziennik implements OldEdziennikInterface {
public class Mobidziennik implements EdziennikInterface {
public Mobidziennik(App app) {
this.app = app;
}
@ -150,7 +150,7 @@ public class Mobidziennik implements OldEdziennikInterface {
private String loginPassword = null;
private int studentId = -1;
private long attendancesLastSync = 0;
private long attendanceLastSync = 0;
private boolean prepare(@NonNull Context activityContext, @NonNull SyncCallback callback, int profileId, @Nullable Profile profile, @NonNull LoginStore loginStore) {
this.activityContext = activityContext;
@ -171,7 +171,7 @@ public class Mobidziennik implements OldEdziennikInterface {
return false;
}
this.studentId = profile == null ? -1 : profile.getStudentData("studentId", -1);
this.attendancesLastSync = profile == null ? 0 : profile.getStudentData("attendancesLastSync", (long)0);
this.attendanceLastSync = profile == null ? 0 : profile.getStudentData("attendanceLastSync", (long)0);
fakeLogin = BuildConfig.DEBUG && loginUsername.toLowerCase().startsWith("fake");
teamList = profileId == -1 ? new ArrayList<>() : app.db.teamDao().getAllNow(profileId);
@ -204,7 +204,7 @@ public class Mobidziennik implements OldEdziennikInterface {
targetEndpoints = new ArrayList<>();
targetEndpoints.add("GetData");
targetEndpoints.add("ProcessData");
targetEndpoints.add("Attendances");
targetEndpoints.add("Attendance");
targetEndpoints.add("ClassCalendar");
targetEndpoints.add("GradeDetails");
targetEndpoints.add("NoticeDetails");
@ -256,8 +256,8 @@ public class Mobidziennik implements OldEdziennikInterface {
case FEATURE_NOTICES:
targetEndpoints.add("NoticeDetails");
break;
case FEATURE_ATTENDANCES:
targetEndpoints.add("Attendances");
case FEATURE_ATTENDANCE:
targetEndpoints.add("Attendance");
break;
case FEATURE_MESSAGES_INBOX:
targetEndpoints.add("MessagesInbox");
@ -314,8 +314,8 @@ public class Mobidziennik implements OldEdziennikInterface {
case "NoticeDetails":
getNoticeDetails();
break;
case "Attendances":
getAttendances();
case "Attendance":
getAttendance();
break;
case "Messages":
getAllMessages();
@ -597,7 +597,7 @@ public class Mobidziennik implements OldEdziennikInterface {
processLessons(table);
}
if (i == 16) {
processAttendances(table);
processAttendance(table);
}
if (i == 17) {
processNotices(table);
@ -609,7 +609,7 @@ public class Mobidziennik implements OldEdziennikInterface {
processEvents(table);
}
if (i == 23) {
processHomeworks(table);
processHomework(table);
}
if (i == 24) {
processTimetable(table);
@ -794,7 +794,7 @@ public class Mobidziennik implements OldEdziennikInterface {
switch (e.tagName()) {
case "div": {
//d(TAG, "Outer HTML "+e.outerHtml());
Matcher matcher = Pattern.compile("<div.*?>\\n*\\s*(.+?)\\n*(?:<.*?)??</div>", Pattern.DOTALL).matcher(e.outerHtml());
Matcher matcher = Pattern.compile("<div.*?>\\n*\\s*(.+?)\\s*\\n*(?:<.*?)??</div>", Pattern.DOTALL).matcher(e.outerHtml());
if (matcher.find()) {
subjectName = matcher.group(1);
}
@ -1051,20 +1051,20 @@ public class Mobidziennik implements OldEdziennikInterface {
this.lessonId = lessonId;
}
}
private Date attendancesCheckDate = Week.getWeekStart();
private void getAttendances() {
r("finish", "Attendances");
// TODO: 2019-09-10 please download attendances from /dziennik/frekwencja. /mobile does not work above v13.0
private Date attendanceCheckDate = Week.getWeekStart();
private void getAttendance() {
r("finish", "Attendance");
// TODO: 2019-09-10 please download attendance from /dziennik/frekwencja. /mobile does not work above v13.0
if (true) {
return;
}
callback.onActionStarted(R.string.sync_action_syncing_attendances);
d(TAG, "Get attendances for week "+attendancesCheckDate.getStringY_m_d());
callback.onActionStarted(R.string.sync_action_syncing_attendance);
d(TAG, "Get attendance for week "+ attendanceCheckDate.getStringY_m_d());
Request.builder()
.url(fakeLogin ? "https://szkolny.eu/mobimobi/mobi_mod_frekwencja.php" : "https://" + loginServerName + ".mobidziennik.pl/mobile/frekwencja")
.userAgent(System.getProperty("http.agent"))
.addParameter("uczen", studentId)
.addParameter("data_poniedzialek", attendancesCheckDate.getStringY_m_d())
.addParameter("data_poniedzialek", attendanceCheckDate.getStringY_m_d())
.post()
.callback(new TextCallbackHandler() {
@Override
@ -1076,11 +1076,11 @@ public class Mobidziennik implements OldEdziennikInterface {
public void onSuccess(String data, Response response) {
// just skip any failures here
if (data == null || data.equals("")) {
r("finish", "Attendances");
r("finish", "Attendance");
return;
}
if (data.contains("nie-pamietam-hasla")) {
r("finish", "Attendances");
r("finish", "Attendance");
return;
}
@ -1135,7 +1135,7 @@ public class Mobidziennik implements OldEdziennikInterface {
continue;
AttendanceLessonRange range = ranges.get(currentIndex);
Date date = attendancesCheckDate.clone().stepForward(0, 0, range.weekDay);
Date date = attendanceCheckDate.clone().stepForward(0, 0, range.weekDay);
long addedDate = date.combineWith(range.startTime);
int markerIndex = 0;
@ -1201,7 +1201,7 @@ public class Mobidziennik implements OldEdziennikInterface {
markerIndex++;
attendanceList.add(attendanceObject);
if (attendanceObject.type != TYPE_PRESENT) {
boolean markAsRead = onlyFeature == FEATURE_ATTENDANCES && attendancesLastSync == 0;
boolean markAsRead = onlyFeature == FEATURE_ATTENDANCE && attendanceLastSync == 0;
metadataList.add(new Metadata(profileId, Metadata.TYPE_ATTENDANCE, attendanceObject.id, profile.getEmpty() || markAsRead, profile.getEmpty() || markAsRead, addedDate));
}
}
@ -1209,40 +1209,40 @@ public class Mobidziennik implements OldEdziennikInterface {
} catch (Exception e) {
Crashlytics.logException(e);
e.printStackTrace();
if (onlyFeature == FEATURE_ATTENDANCES)
if (onlyFeature == FEATURE_ATTENDANCE)
finishWithError(new AppError(TAG, 955, CODE_OTHER, response, e, data));
else
r("finish", "Attendances");
r("finish", "Attendance");
return;
}
if (onlyFeature == FEATURE_ATTENDANCES) {
// syncing attendances exclusively
if (attendancesLastSync == 0) {
// first sync - get attendances until it's start of the school year
attendancesLastSync = profile.getSemesterStart(1).getInMillis();
if (onlyFeature == FEATURE_ATTENDANCE) {
// syncing attendance exclusively
if (attendanceLastSync == 0) {
// first sync - get attendance until it's start of the school year
attendanceLastSync = profile.getSemesterStart(1).getInMillis();
}
Date lastSyncDate = Date.fromMillis(attendancesLastSync);
Date lastSyncDate = Date.fromMillis(attendanceLastSync);
lastSyncDate.stepForward(0, 0, -7);
if (lastSyncDate.getValue() < attendancesCheckDate.getValue()) {
attendancesCheckDate.stepForward(0, 0, -7);
r("get", "Attendances");
if (lastSyncDate.getValue() < attendanceCheckDate.getValue()) {
attendanceCheckDate.stepForward(0, 0, -7);
r("get", "Attendance");
}
else {
profile.putStudentData("attendancesLastSync", System.currentTimeMillis());
r("finish", "Attendances");
profile.putStudentData("attendanceLastSync", System.currentTimeMillis());
r("finish", "Attendance");
}
}
else {
if (attendancesLastSync != 0) {
if (attendanceLastSync != 0) {
// not a first sync
Date lastSyncDate = Date.fromMillis(attendancesLastSync);
Date lastSyncDate = Date.fromMillis(attendanceLastSync);
lastSyncDate.stepForward(0, 0, 2);
if (lastSyncDate.getValue() >= attendancesCheckDate.getValue()) {
profile.putStudentData("attendancesLastSync", System.currentTimeMillis());
if (lastSyncDate.getValue() >= attendanceCheckDate.getValue()) {
profile.putStudentData("attendanceLastSync", System.currentTimeMillis());
}
}
r("finish", "Attendances");
r("finish", "Attendance");
}
}
})
@ -1456,8 +1456,8 @@ public class Mobidziennik implements OldEdziennikInterface {
}
String[] user = userStr.split("\\|", Integer.MAX_VALUE);
teachersMap.put(strToInt(user[0]), user[5]+" "+user[4]);
teacherList.add(new Teacher(profileId, strToInt(user[0]), user[4], user[5]));
teachersMap.put(strToInt(user[0]), user[5].trim()+" "+user[4].trim());
teacherList.add(new Teacher(profileId, strToInt(user[0]), user[4].trim(), user[5].trim()));
}
}
@ -1675,12 +1675,12 @@ public class Mobidziennik implements OldEdziennikInterface {
}
}
private void processAttendances(String table)
private void processAttendance(String table)
{
if (true)
return;
String[] attendances = table.split("\n");
for (String attendanceStr: attendances)
String[] attendanceList = table.split("\n");
for (String attendanceStr: attendanceList)
{
if (attendanceStr.isEmpty()) {
continue;
@ -1718,7 +1718,7 @@ public class Mobidziennik implements OldEdziennikInterface {
mobiLesson.date,
mobiLesson.startTime,
type);
attendanceList.add(attendanceObject);
this.attendanceList.add(attendanceObject);
metadataList.add(new Metadata(profileId, Metadata.TYPE_ATTENDANCE, attendanceObject.id, profile.getEmpty(), profile.getEmpty(), System.currentTimeMillis()));
}
}
@ -1891,11 +1891,11 @@ public class Mobidziennik implements OldEdziennikInterface {
}
}
private void processHomeworks(String table)
private void processHomework(String table)
{
String[] homeworks = table.split("\n");
String[] homeworkList = table.split("\n");
Date today = Date.getToday();
for (String homeworkStr: homeworks)
for (String homeworkStr: homeworkList)
{
if (homeworkStr.isEmpty()) {
continue;
@ -1958,7 +1958,7 @@ public class Mobidziennik implements OldEdziennikInterface {
for(int i = 0; i < teachersMap.size(); i++) {
int key = teachersMap.keyAt(i);
String str = teachersMap.valueAt(i);
if ((lesson[7] + " " + lesson[6]).equalsIgnoreCase(str)) {
if ((lesson[7].trim() + " " + lesson[6].trim()).equalsIgnoreCase(str)) {
lessonObject.teacherId = key;
}
}
@ -2001,7 +2001,7 @@ public class Mobidziennik implements OldEdziennikInterface {
for(int i = 0; i < teachersMap.size(); i++) {
int key = teachersMap.keyAt(i);
String str = teachersMap.valueAt(i);
if ((lesson[7] + " " + lesson[6]).equalsIgnoreCase(str)) {
if ((lesson[7].trim() + " " + lesson[6].trim()).equalsIgnoreCase(str)) {
lessonChange.teacherId = key;
}
}

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.api;
package pl.szczodrzynski.edziennik.data.api;
import android.content.Context;
import android.os.Build;
@ -35,57 +35,57 @@ import okhttp3.OkHttpClient;
import okio.Buffer;
import pl.szczodrzynski.edziennik.App;
import pl.szczodrzynski.edziennik.R;
import pl.szczodrzynski.edziennik.api.interfaces.AttachmentGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface;
import pl.szczodrzynski.edziennik.api.interfaces.LoginCallback;
import pl.szczodrzynski.edziennik.api.interfaces.MessageGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.RecipientListGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback;
import pl.szczodrzynski.edziennik.datamodels.Attendance;
import pl.szczodrzynski.edziennik.datamodels.Event;
import pl.szczodrzynski.edziennik.datamodels.Grade;
import pl.szczodrzynski.edziennik.datamodels.GradeCategory;
import pl.szczodrzynski.edziennik.datamodels.Lesson;
import pl.szczodrzynski.edziennik.datamodels.LessonChange;
import pl.szczodrzynski.edziennik.datamodels.LoginStore;
import pl.szczodrzynski.edziennik.datamodels.Message;
import pl.szczodrzynski.edziennik.datamodels.MessageFull;
import pl.szczodrzynski.edziennik.datamodels.MessageRecipient;
import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull;
import pl.szczodrzynski.edziennik.datamodels.Metadata;
import pl.szczodrzynski.edziennik.datamodels.Notice;
import pl.szczodrzynski.edziennik.datamodels.Profile;
import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
import pl.szczodrzynski.edziennik.datamodels.Subject;
import pl.szczodrzynski.edziennik.datamodels.Teacher;
import pl.szczodrzynski.edziennik.datamodels.Team;
import pl.szczodrzynski.edziennik.messages.MessagesComposeInfo;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.models.Endpoint;
import pl.szczodrzynski.edziennik.models.Time;
import pl.szczodrzynski.edziennik.models.Week;
import pl.szczodrzynski.edziennik.data.api.interfaces.AttachmentGetCallback;
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface;
import pl.szczodrzynski.edziennik.data.api.interfaces.LoginCallback;
import pl.szczodrzynski.edziennik.data.api.interfaces.MessageGetCallback;
import pl.szczodrzynski.edziennik.data.api.interfaces.RecipientListGetCallback;
import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory;
import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson;
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull;
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo;
import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.utils.models.Endpoint;
import pl.szczodrzynski.edziennik.utils.models.Time;
import pl.szczodrzynski.edziennik.utils.models.Week;
import pl.szczodrzynski.edziennik.utils.Utils;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED_EXCUSED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED;
import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_EXAM;
import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_SHORT_QUIZ;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED;
import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE;
import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_VULCAN;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT;
import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_MESSAGE;
import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEUTRAL;
import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED_EXCUSED;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT;
import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED;
import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_EXAM;
import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_SHORT_QUIZ;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_FINAL;
import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_PROPOSED;
import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED;
import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE;
import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_VULCAN;
import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED;
import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT;
import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_MESSAGE;
import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEUTRAL;
import static pl.szczodrzynski.edziennik.utils.Utils.c;
import static pl.szczodrzynski.edziennik.utils.Utils.crc16;
import static pl.szczodrzynski.edziennik.utils.Utils.d;
@ -93,7 +93,7 @@ import static pl.szczodrzynski.edziennik.utils.Utils.getGradeValue;
import static pl.szczodrzynski.edziennik.utils.Utils.getVulcanGradeColor;
import static pl.szczodrzynski.edziennik.utils.Utils.intToStr;
public class Vulcan implements OldEdziennikInterface {
public class Vulcan implements EdziennikInterface {
public Vulcan(App app) {
this.app = app;
}
@ -108,11 +108,12 @@ public class Vulcan implements OldEdziennikInterface {
private static final String ENDPOINT_GRADES = "mobile-api/Uczen.v3.Uczen/Oceny";
private static final String ENDPOINT_GRADES_PROPOSITIONS = "mobile-api/Uczen.v3.Uczen/OcenyPodsumowanie";
private static final String ENDPOINT_EVENTS = "mobile-api/Uczen.v3.Uczen/Sprawdziany";
private static final String ENDPOINT_HOMEWORKS = "mobile-api/Uczen.v3.Uczen/ZadaniaDomowe";
private static final String ENDPOINT_HOMEWORK = "mobile-api/Uczen.v3.Uczen/ZadaniaDomowe";
private static final String ENDPOINT_NOTICES = "mobile-api/Uczen.v3.Uczen/UwagiUcznia";
private static final String ENDPOINT_ATTENDANCES = "mobile-api/Uczen.v3.Uczen/Frekwencje";
private static final String ENDPOINT_ATTENDANCE = "mobile-api/Uczen.v3.Uczen/Frekwencje";
private static final String ENDPOINT_MESSAGES_RECEIVED = "mobile-api/Uczen.v3.Uczen/WiadomosciOdebrane";
private static final String ENDPOINT_MESSAGES_SENT = "mobile-api/Uczen.v3.Uczen/WiadomosciWyslane";
private static final String ENDPOINT_MESSAGES_CHANGE_STATUS = "mobile-api/Uczen.v3.Uczen/ZmienStatusWiadomosci";
private static final String ENDPOINT_PUSH = "mobile-api/Uczen.v3.Uczen/UstawPushToken";
private static final String userAgent = "MobileUserAgent";
@ -258,9 +259,9 @@ public class Vulcan implements OldEdziennikInterface {
targetEndpoints.add("Grades");
targetEndpoints.add("ProposedGrades");
targetEndpoints.add("Events");
targetEndpoints.add("Homeworks");
targetEndpoints.add("Homework");
targetEndpoints.add("Notices");
targetEndpoints.add("Attendances");
targetEndpoints.add("Attendance");
targetEndpoints.add("MessagesInbox");
targetEndpoints.add("MessagesOutbox");
targetEndpoints.add("Finish");
@ -296,14 +297,14 @@ public class Vulcan implements OldEdziennikInterface {
targetEndpoints.add("Grades");
targetEndpoints.add("ProposedGrades");
break;
case FEATURE_HOMEWORKS:
targetEndpoints.add("Homeworks");
case FEATURE_HOMEWORK:
targetEndpoints.add("Homework");
break;
case FEATURE_NOTICES:
targetEndpoints.add("Notices");
break;
case FEATURE_ATTENDANCES:
targetEndpoints.add("Attendances");
case FEATURE_ATTENDANCE:
targetEndpoints.add("Attendance");
break;
case FEATURE_MESSAGES_INBOX:
targetEndpoints.add("MessagesInbox");
@ -379,14 +380,14 @@ public class Vulcan implements OldEdziennikInterface {
case "Events":
getEvents();
break;
case "Homeworks":
getHomeworks();
case "Homework":
getHomework();
break;
case "Notices":
getNotices();
break;
case "Attendances":
getAttendances();
case "Attendance":
getAttendance();
break;
case "MessagesInbox":
getMessagesInbox();
@ -427,8 +428,10 @@ public class Vulcan implements OldEdziennikInterface {
app.db.noticeDao().clearForSemester(profileId, studentSemesterNumber);
app.db.noticeDao().addAll(noticeList);
}
if (attendanceList.size() > 0)
if (attendanceList.size() > 0) {
app.db.attendanceDao().clearAfterDate(profileId, getCurrentSemesterStartDate());
app.db.attendanceDao().addAll(attendanceList);
}
if (messageList.size() > 0)
app.db.messageDao().addAllIgnore(messageList);
if (messageRecipientList.size() > 0)
@ -742,7 +745,7 @@ public class Vulcan implements OldEdziennikInterface {
studentLoginId = account.get("UzytkownikLoginId").getAsInt();
studentClassId = account.get("IdOddzial").getAsInt();
studentSemesterId = account.get("IdOkresKlasyfikacyjny").getAsInt();
String studentClassName = account.get("OddzialKod").getAsString();
String studentClassName = account.get("OkresPoziom").getAsInt()+account.get("OddzialSymbol").getAsString();
targetProfile.putStudentData("userName", account.get("UzytkownikNazwa").getAsString());
targetProfile.putStudentData("schoolName", schoolName);
targetProfile.putStudentData("schoolSymbol", schoolSymbol);
@ -1149,7 +1152,7 @@ public class Vulcan implements OldEdziennikInterface {
int subjectId = grade.get("IdPrzedmiot").getAsInt();
int teacherId = grade.get("IdPracownikD").getAsInt();
int categoryId = grade.get("IdKategoria").getAsInt();
long addedDate = Date.fromY_m_d(grade.get("DataModyfikacjiTekst").getAsString()).getInMillis();
long addedDate = grade.get("DataModyfikacji").getAsLong() * 1000;
float finalValue = 0.0f;
String finalName;
@ -1240,9 +1243,9 @@ public class Vulcan implements OldEdziennikInterface {
Grade gradeObject = new Grade(
profileId,
id,
finalDescription,
color,
category,
color,
finalDescription,
finalName,
finalValue,
weight,
@ -1371,7 +1374,7 @@ public class Vulcan implements OldEdziennikInterface {
});
}
private void getHomeworks() {
private void getHomework() {
callback.onActionStarted(R.string.sync_action_syncing_homework);
JsonObject json = new JsonObject();
json.addProperty("DataPoczatkowa", profile.getEmpty() ? getCurrentSemesterStartDate().getStringY_m_d() : oneMonthBack.getStringY_m_d());
@ -1379,10 +1382,10 @@ public class Vulcan implements OldEdziennikInterface {
json.addProperty("IdOddzial", studentClassId);
json.addProperty("IdUczen", studentId);
json.addProperty("IdOkresKlasyfikacyjny", studentSemesterId);
apiRequest(schoolSymbol+"/"+ENDPOINT_HOMEWORKS, json, result -> {
JsonArray homeworks = result.getAsJsonArray("Data");
apiRequest(schoolSymbol+"/"+ ENDPOINT_HOMEWORK, json, result -> {
JsonArray homeworkList = result.getAsJsonArray("Data");
for (JsonElement homeworkEl: homeworks) {
for (JsonElement homeworkEl: homeworkList) {
JsonObject homework = homeworkEl.getAsJsonObject();
int id = homework.get("Id").getAsInt();
@ -1416,7 +1419,7 @@ public class Vulcan implements OldEdziennikInterface {
eventList.add(eventObject);
metadataList.add(new Metadata(profileId, Metadata.TYPE_HOMEWORK, eventObject.id, profile.getEmpty(), profile.getEmpty(), System.currentTimeMillis()));
}
r("finish", "Homeworks");
r("finish", "Homework");
});
}
@ -1456,18 +1459,18 @@ public class Vulcan implements OldEdziennikInterface {
});
}
private void getAttendances() {
callback.onActionStarted(R.string.sync_action_syncing_attendances);
private void getAttendance() {
callback.onActionStarted(R.string.sync_action_syncing_attendance);
JsonObject json = new JsonObject();
json.addProperty("DataPoczatkowa", profile.getEmpty() ? getCurrentSemesterStartDate().getStringY_m_d() : oneMonthBack.getStringY_m_d());
json.addProperty("DataPoczatkowa", true ? getCurrentSemesterStartDate().getStringY_m_d() : oneMonthBack.getStringY_m_d());
json.addProperty("DataKoncowa", getCurrentSemesterEndDate().getStringY_m_d());
json.addProperty("IdOddzial", studentClassId);
json.addProperty("IdUczen", studentId);
json.addProperty("IdOkresKlasyfikacyjny", studentSemesterId);
apiRequest(schoolSymbol+"/"+ENDPOINT_ATTENDANCES, json, result -> {
JsonArray attendances = result.getAsJsonObject("Data").getAsJsonArray("Frekwencje");
apiRequest(schoolSymbol+"/"+ ENDPOINT_ATTENDANCE, json, result -> {
JsonArray attendanceList = result.getAsJsonObject("Data").getAsJsonArray("Frekwencje");
for (JsonElement attendanceEl: attendances) {
for (JsonElement attendanceEl: attendanceList) {
JsonObject attendance = attendanceEl.getAsJsonObject();
Pair<Integer, String> attendanceCategory = attendanceCategories.get(attendance.get("IdKategoria").getAsInt());
@ -1494,20 +1497,20 @@ public class Vulcan implements OldEdziennikInterface {
lessonRanges.get(attendance.get("IdPoraLekcji").getAsInt()).first,
type);
attendanceList.add(attendanceObject);
this.attendanceList.add(attendanceObject);
if (attendanceObject.type != TYPE_PRESENT) {
metadataList.add(new Metadata(profileId, Metadata.TYPE_ATTENDANCE, attendanceObject.id, profile.getEmpty(), profile.getEmpty(), attendanceObject.lessonDate.combineWith(attendanceObject.startTime)));
}
}
r("finish", "Attendances");
r("finish", "Attendance");
});
}
private void getMessagesInbox() {
callback.onActionStarted(R.string.sync_action_syncing_messages_inbox);
JsonObject json = new JsonObject();
json.addProperty("DataPoczatkowa", profile.getEmpty() ? getCurrentSemesterStartDate().getInUnix() : oneMonthBack.getInUnix());
json.addProperty("DataKoncowa", Date.getToday().getInUnix());
json.addProperty("DataPoczatkowa", true ? getCurrentSemesterStartDate().getInUnix() : oneMonthBack.getInUnix());
json.addProperty("DataKoncowa", getCurrentSemesterEndDate().getInUnix());
json.addProperty("LoginId", studentLoginId);
json.addProperty("IdUczen", studentId);
apiRequest(schoolSymbol+"/"+ENDPOINT_MESSAGES_RECEIVED, json, result -> {
@ -1557,8 +1560,8 @@ public class Vulcan implements OldEdziennikInterface {
}
callback.onActionStarted(R.string.sync_action_syncing_messages_outbox);
JsonObject json = new JsonObject();
json.addProperty("DataPoczatkowa", profile.getEmpty() ? getCurrentSemesterStartDate().getInUnix() : oneMonthBack.getInUnix());
json.addProperty("DataKoncowa", Date.getToday().getInUnix());
json.addProperty("DataPoczatkowa", true ? getCurrentSemesterStartDate().getInUnix() : oneMonthBack.getInUnix());
json.addProperty("DataKoncowa", getCurrentSemesterEndDate().getInUnix());
json.addProperty("LoginId", studentLoginId);
json.addProperty("IdUczen", studentId);
apiRequest(schoolSymbol+"/"+ENDPOINT_MESSAGES_SENT, json, result -> {
@ -1632,6 +1635,15 @@ public class Vulcan implements OldEdziennikInterface {
recipient.fullName = profile.getStudentNameLong();
}
if (!message.seen) {
studentId = profile.getStudentData("studentId", -1);
studentLoginId = profile.getStudentData("studentLoginId", -1);
JsonObject json = new JsonObject();
json.addProperty("WiadomoscId", message.id);
json.addProperty("FolderWiadomosci", "Odebrane");
json.addProperty("Status", "Widoczna");
json.addProperty("LoginId", studentLoginId);
json.addProperty("IdUczen", studentId);
apiRequest(schoolSymbol+"/"+ENDPOINT_MESSAGES_CHANGE_STATUS, json, result -> { });
app.db.metadataDao().setSeen(profile.getId(), message, true);
if (message.type != TYPE_SENT) {
app.db.messageRecipientDao().add(new MessageRecipient(profile.getId(), -1, -1, System.currentTimeMillis(), message.id));

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.api.interfaces;
package pl.szczodrzynski.edziennik.data.api.interfaces;
import im.wangchao.mhttp.Request;

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.api.interfaces;
package pl.szczodrzynski.edziennik.data.api.interfaces;
import android.content.Context;
import androidx.annotation.NonNull;
@ -6,15 +6,15 @@ import androidx.annotation.Nullable;
import java.util.Map;
import pl.szczodrzynski.edziennik.datamodels.LoginStore;
import pl.szczodrzynski.edziennik.datamodels.Message;
import pl.szczodrzynski.edziennik.datamodels.MessageFull;
import pl.szczodrzynski.edziennik.datamodels.Profile;
import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
import pl.szczodrzynski.edziennik.messages.MessagesComposeInfo;
import pl.szczodrzynski.edziennik.models.Endpoint;
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo;
import pl.szczodrzynski.edziennik.utils.models.Endpoint;
public interface OldEdziennikInterface {
public interface EdziennikInterface {
/**
* Sync all Edziennik data.
@ -34,9 +34,9 @@ public interface OldEdziennikInterface {
int FEATURE_TIMETABLE = 1;
int FEATURE_AGENDA = 2;
int FEATURE_GRADES = 3;
int FEATURE_HOMEWORKS = 4;
int FEATURE_HOMEWORK = 4;
int FEATURE_NOTICES = 5;
int FEATURE_ATTENDANCES = 6;
int FEATURE_ATTENDANCE = 6;
int FEATURE_MESSAGES_INBOX = 7;
int FEATURE_MESSAGES_OUTBOX = 8;
int FEATURE_ANNOUNCEMENTS = 9;
@ -60,7 +60,7 @@ public interface OldEdziennikInterface {
*
* Updates a database-saved {@code teacherList} with {@code loginId}s.
*
* A {@link pl.szczodrzynski.edziennik.datamodels.Teacher} is considered as a recipient when its {@code loginId} is not null.
* A {@link Teacher} is considered as a recipient when its {@code loginId} is not null.
*
* May be executed on any thread.
*

View File

@ -1,10 +1,10 @@
package pl.szczodrzynski.edziennik.api.interfaces;
package pl.szczodrzynski.edziennik.data.api.interfaces;
import android.content.Context;
import androidx.annotation.NonNull;
import pl.szczodrzynski.edziennik.api.AppError;
import pl.szczodrzynski.edziennik.data.api.AppError;
public interface ErrorCallback {
void onError(Context activityContext, @NonNull AppError error);

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.api.interfaces;
package pl.szczodrzynski.edziennik.data.api.interfaces;
public interface LoginCallback {
void onSuccess();

View File

@ -1,7 +1,6 @@
package pl.szczodrzynski.edziennik.api.interfaces;
package pl.szczodrzynski.edziennik.data.api.interfaces;
import pl.szczodrzynski.edziennik.datamodels.Message;
import pl.szczodrzynski.edziennik.datamodels.MessageFull;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
/**
* Callback containing a {@link MessageFull} which already has its {@code body} and {@code recipients}.

View File

@ -0,0 +1,9 @@
package pl.szczodrzynski.edziennik.data.api.interfaces;
import java.util.List;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
public interface MessageListCallback {
void onSuccess(List<MessageFull> messageList);
}

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.api.interfaces;
package pl.szczodrzynski.edziennik.data.api.interfaces;
import androidx.annotation.StringRes;

View File

@ -0,0 +1,9 @@
package pl.szczodrzynski.edziennik.data.api.interfaces;
import java.util.List;
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
public interface RecipientListGetCallback {
void onSuccess(List<Teacher> teacherList);
}

View File

@ -1,15 +1,12 @@
package pl.szczodrzynski.edziennik.api.interfaces;
package pl.szczodrzynski.edziennik.data.api.interfaces;
import android.content.Context;
import java.util.List;
import androidx.annotation.StringRes;
import pl.szczodrzynski.edziennik.api.AppError;
import pl.szczodrzynski.edziennik.datamodels.LoginStore;
import pl.szczodrzynski.edziennik.datamodels.Profile;
import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
/**
* A callback used for error reporting, progress information.

View File

@ -0,0 +1,6 @@
package pl.szczodrzynski.edziennik.data.api.v2
import pl.szczodrzynski.edziennik.data.api.AppError
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
data class ApiLoginResult(val loginStore: LoginStore, val error: AppError?)

View File

@ -0,0 +1,6 @@
package pl.szczodrzynski.edziennik.data.api.v2
import pl.szczodrzynski.edziennik.data.api.AppError
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
data class FirstLoginResult(val profileList: ArrayList<Profile>, val error: AppError?)

View File

@ -0,0 +1,12 @@
package pl.szczodrzynski.edziennik.data.api.v2.librus.firstlogin
import pl.szczodrzynski.edziennik.App
import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
class FirstLoginLibrus(val app: App, val loginStore: LoginStore, val progressCallback: ProgressCallback, val onSuccess: (profileList: List<Profile>) -> Unit) {
init {
}
}

View File

@ -0,0 +1,12 @@
package pl.szczodrzynski.edziennik.data.api.v2.librus.firstlogin
import pl.szczodrzynski.edziennik.App
import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
class FirstLoginSynergia(val app: App, val loginStore: LoginStore, val progressCallback: ProgressCallback, val onSuccess: (profileList: List<Profile>) -> Unit) {
init {
}
}

View File

@ -1,12 +1,61 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db;
import androidx.annotation.NonNull;
import androidx.sqlite.db.SupportSQLiteDatabase;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import androidx.room.TypeConverters;
import androidx.room.migration.Migration;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement;
import pl.szczodrzynski.edziennik.data.db.modules.announcements.AnnouncementDao;
import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
import pl.szczodrzynski.edziennik.data.db.modules.attendance.AttendanceDao;
import pl.szczodrzynski.edziennik.data.db.converters.ConverterDate;
import pl.szczodrzynski.edziennik.data.db.converters.ConverterJsonObject;
import pl.szczodrzynski.edziennik.data.db.converters.ConverterListLong;
import pl.szczodrzynski.edziennik.data.db.converters.ConverterListString;
import pl.szczodrzynski.edziennik.data.db.converters.ConverterTime;
import pl.szczodrzynski.edziennik.data.db.modules.debuglog.DebugLog;
import pl.szczodrzynski.edziennik.data.db.modules.debuglog.DebugLogDao;
import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
import pl.szczodrzynski.edziennik.data.db.modules.events.EventDao;
import pl.szczodrzynski.edziennik.data.db.modules.events.EventType;
import pl.szczodrzynski.edziennik.data.db.modules.events.EventTypeDao;
import pl.szczodrzynski.edziennik.data.db.modules.feedback.FeedbackMessage;
import pl.szczodrzynski.edziennik.data.db.modules.feedback.FeedbackMessageDao;
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory;
import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategoryDao;
import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeDao;
import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson;
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChangeDao;
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonDao;
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStoreDao;
import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber;
import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumberDao;
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageDao;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient;
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientDao;
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
import pl.szczodrzynski.edziennik.data.db.modules.metadata.MetadataDao;
import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
import pl.szczodrzynski.edziennik.data.db.modules.notices.NoticeDao;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileDao;
import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
import pl.szczodrzynski.edziennik.data.db.modules.subjects.SubjectDao;
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsence;
import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsenceDao;
import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherDao;
import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
import pl.szczodrzynski.edziennik.data.db.modules.teams.TeamDao;
import pl.szczodrzynski.edziennik.utils.models.Date;
import android.content.Context;
@ -14,6 +63,7 @@ import android.content.Context;
Grade.class,
//GradeCategory.class,
Teacher.class,
TeacherAbsence.class,
Subject.class,
Notice.class,
Lesson.class,
@ -31,7 +81,7 @@ import android.content.Context;
Message.class,
MessageRecipient.class,
DebugLog.class,
Metadata.class}, version = 52)
Metadata.class}, version = 54)
@TypeConverters({
ConverterTime.class,
ConverterDate.class,
@ -43,6 +93,7 @@ public abstract class AppDb extends RoomDatabase {
public abstract GradeDao gradeDao();
//public abstract GradeCategoryDao gradeCategoryDao();
public abstract TeacherDao teacherDao();
public abstract TeacherAbsenceDao teacherAbsenceDao();
public abstract SubjectDao subjectDao();
public abstract NoticeDao noticeDao();
public abstract LessonDao lessonDao();
@ -486,6 +537,27 @@ public abstract class AppDb extends RoomDatabase {
database.execSQL("ALTER TABLE teachers ADD teacherTypeDescription TEXT DEFAULT NULL");
}
};
private static final Migration MIGRATION_52_53 = new Migration(52, 53) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE IF NOT EXISTS teacherAbsence (" +
"profileId INTEGER NOT NULL," +
"teacherAbsenceId INTEGER NOT NULL," +
"teacherId INTEGER NOT NULL," +
"teacherAbsenceType INTEGER NOT NULL," +
"teacherAbsenceDateFrom TEXT NOT NULL," +
"teacherAbsenceDateTo TEXT NOT NULL," +
"PRIMARY KEY(profileId, teacherAbsenceId)" +
")");
}
};
private static final Migration MIGRATION_53_54 = new Migration(53, 54) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE teacherAbsence ADD teacherAbsenceTimeFrom TEXT DEFAULT NULL");
database.execSQL("ALTER TABLE teacherAbsence ADD teacherAbsenceTimeTo TEXT DEFAULT NULL");
}
};
public static AppDb getDatabase(final Context context) {
@ -535,7 +607,10 @@ public abstract class AppDb extends RoomDatabase {
MIGRATION_48_49,
MIGRATION_49_50,
MIGRATION_50_51,
MIGRATION_51_52)
MIGRATION_51_52,
MIGRATION_52_53,
MIGRATION_53_54
)
.allowMainThreadQueries()
//.fallbackToDestructiveMigration()
.build();

View File

@ -1,8 +1,8 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.converters;
import androidx.room.TypeConverter;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.utils.models.Date;
public class ConverterDate {

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.converters;
import androidx.room.TypeConverter;

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.converters;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.converters;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

View File

@ -1,8 +1,8 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.converters;
import androidx.room.TypeConverter;
import pl.szczodrzynski.edziennik.models.Time;
import pl.szczodrzynski.edziennik.utils.models.Time;
public class ConverterTime {

View File

@ -1,11 +1,11 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.announcements;
import androidx.annotation.Nullable;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.Ignore;
import androidx.room.Index;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.utils.models.Date;
@Entity(tableName = "announcements",
primaryKeys = {"profileId", "announcementId"},

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.announcements;
import java.util.List;
@ -11,7 +11,9 @@ import androidx.room.RawQuery;
import androidx.sqlite.db.SimpleSQLiteQuery;
import androidx.sqlite.db.SupportSQLiteQuery;
import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_ANNOUNCEMENT;
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_ANNOUNCEMENT;
@Dao
public abstract class AnnouncementDao {

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.announcements;
public class AnnouncementFull extends Announcement {
public String teacherFullName = "";

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.attendance;
import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
@ -6,8 +6,8 @@ import androidx.room.Entity;
import androidx.room.Ignore;
import androidx.room.Index;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.models.Time;
import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.utils.models.Time;
@Entity(tableName = "attendances",
primaryKeys = {"profileId", "attendanceId", "attendanceLessonDate", "attendanceStartTime"},

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.attendance;
import androidx.lifecycle.LiveData;
import androidx.sqlite.db.SimpleSQLiteQuery;
@ -8,12 +8,11 @@ import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import androidx.room.RawQuery;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.utils.models.Date;
import java.util.List;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT;
import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_ATTENDANCE;
import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_ATTENDANCE;
@Dao
public abstract class AttendanceDao {

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.attendance;
public class AttendanceFull extends Attendance {
public String teacherFullName = "";

View File

@ -1,7 +1,6 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.debuglog;
import androidx.room.Entity;
import androidx.room.Index;
import androidx.room.PrimaryKey;
import static pl.szczodrzynski.edziennik.utils.Utils.d;

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.debuglog;
import androidx.room.Dao;
import androidx.room.Insert;

View File

@ -1,11 +1,11 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.events;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.Ignore;
import androidx.room.Index;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.models.Time;
import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.utils.models.Time;
@Entity(tableName = "events",
primaryKeys = {"profileId", "eventId"},

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.events;
import androidx.lifecycle.LiveData;
import androidx.sqlite.db.SimpleSQLiteQuery;
@ -14,12 +14,12 @@ import android.util.Log;
import java.util.List;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.models.Time;
import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.utils.models.Time;
import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_EVENT;
import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_HOMEWORK;
import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_LESSON_CHANGE;
import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_EVENT;
import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_HOMEWORK;
import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_LESSON_CHANGE;
@Dao
public abstract class EventDao {

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.events;
public class EventFull extends Event {
public String typeName = "";

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.events;
import android.graphics.Color;
@ -28,4 +28,4 @@ public class EventType {
public EventType(int profileId, int id, String name, String color) {
this(profileId, id, name, Color.parseColor(color));
}
}
}

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.events;
import java.util.List;

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.feedback;
import androidx.room.Entity;
import androidx.room.Ignore;

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.feedback;
import java.util.List;

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.feedback;
public class FeedbackMessageWithCount extends FeedbackMessage {
public int messageCount = 0;

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.grades;
import androidx.room.ColumnInfo;
import androidx.room.Entity;

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.grades;
import java.util.ArrayList;
import java.util.List;

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.grades;
import java.util.List;

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.grades;
import androidx.lifecycle.LiveData;
import androidx.sqlite.db.SimpleSQLiteQuery;
@ -14,7 +14,7 @@ import android.util.SparseIntArray;
import java.util.List;
import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_GRADE;
import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_GRADE;
@Dao
public abstract class GradeDao {

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.grades;
public class GradeFull extends Grade {
//public String category = "";

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.lessons;
import java.util.List;
@ -8,8 +8,8 @@ import androidx.room.Ignore;
import androidx.room.Index;
import androidx.annotation.NonNull;
import pl.szczodrzynski.edziennik.models.Time;
import pl.szczodrzynski.edziennik.models.Week;
import pl.szczodrzynski.edziennik.utils.models.Time;
import pl.szczodrzynski.edziennik.utils.models.Week;
@Entity(tableName = "lessons",
primaryKeys = {"profileId", "lessonWeekDay", "lessonStartTime", "lessonEndTime"},

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.lessons;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
@ -7,8 +7,8 @@ import androidx.annotation.NonNull;
import java.util.List;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.models.Time;
import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.utils.models.Time;
@Entity(tableName = "lessonChanges",
primaryKeys = {"profileId", "lessonChangeDate", "lessonChangeStartTime", "lessonChangeEndTime"},

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.lessons;
import androidx.lifecycle.LiveData;
import androidx.sqlite.db.SimpleSQLiteQuery;
@ -11,10 +11,10 @@ import androidx.room.RawQuery;
import java.util.List;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.models.db.LessonChangeCounter;
import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.ui.modules.agenda.lessonchange.LessonChangeCounter;
import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_LESSON_CHANGE;
import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_LESSON_CHANGE;
import static pl.szczodrzynski.edziennik.utils.Utils.d;
@Dao

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.lessons;
public class LessonChangeFull extends LessonChange {
/*public String changeTeacherFullName = "";

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.lessons;
import androidx.lifecycle.LiveData;
import androidx.sqlite.db.SimpleSQLiteQuery;
@ -9,12 +9,11 @@ import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import androidx.room.RawQuery;
import androidx.annotation.NonNull;
import android.util.Log;
import java.util.List;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.models.Time;
import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.utils.models.Time;
@Dao
public abstract class LessonDao {

View File

@ -1,15 +1,15 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.lessons;
import androidx.room.ColumnInfo;
import android.content.Context;
import androidx.annotation.Nullable;
import pl.szczodrzynski.edziennik.R;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.utils.models.Date;
import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_ADDED;
import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED;
import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE;
import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_ADDED;
import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED;
import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE;
import static pl.szczodrzynski.edziennik.utils.Utils.bs;
public class LessonFull extends Lesson {

View File

@ -1,16 +1,17 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.login;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.annotation.NonNull;
import androidx.room.Ignore;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
@Entity(tableName = "loginStores",
primaryKeys = {"loginStoreId"})
public class LoginStore {

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.login;
import androidx.lifecycle.LiveData;
import androidx.room.Dao;
@ -8,6 +8,8 @@ import androidx.room.Query;
import java.util.List;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
@Dao
public abstract class LoginStoreDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)

View File

@ -1,10 +1,10 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.luckynumber;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.annotation.NonNull;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.utils.models.Date;
@Entity(tableName = "luckyNumbers",
primaryKeys = {"profileId", "luckyNumberDate"})

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.luckynumber;
import androidx.lifecycle.LiveData;
import androidx.room.Dao;
@ -8,7 +8,7 @@ import androidx.room.Query;
import java.util.List;
import pl.szczodrzynski.edziennik.models.Date;
import pl.szczodrzynski.edziennik.utils.models.Date;
@Dao
public interface LuckyNumberDao {

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels;
package pl.szczodrzynski.edziennik.data.db.modules.messages;
import java.util.ArrayList;
import java.util.List;

Some files were not shown because too many files have changed in this diff Show More