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 local.properties
# Proguard folder generated by Eclipse # Proguard folder generated by Eclipse
proguard/ #proguard/
# Log Files # Log Files
*.log *.log

6
.idea/copyright/Kacper.xml generated Normal file
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>

8
.idea/misc.xml generated
View File

@ -10,7 +10,7 @@
<option name="myDefaultNotNull" value="androidx.annotation.RecentlyNonNull" /> <option name="myDefaultNotNull" value="androidx.annotation.RecentlyNonNull" />
<option name="myNullables"> <option name="myNullables">
<value> <value>
<list size="10"> <list size="12">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" /> <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="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
<item index="2" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" /> <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="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="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="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> </list>
</value> </value>
</option> </option>
<option name="myNotNulls"> <option name="myNotNulls">
<value> <value>
<list size="9"> <list size="11">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" /> <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="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.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="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="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="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> </list>
</value> </value>
</option> </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> </intent-filter>
</activity> </activity>
<activity <activity
android:name=".messages.MessagesComposeActivity" android:name="pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeActivity"
android:configChanges="orientation|screenSize" android:configChanges="orientation|screenSize"
android:label="@string/messages_compose_title" android:label="@string/messages_compose_title"
android:theme="@style/AppTheme.Black" /> android:theme="@style/AppTheme.Black" />
<activity <activity
android:name=".activities.FeedbackActivity" android:name=".ui.modules.feedback.FeedbackActivity"
android:configChanges="orientation|screenSize|keyboardHidden" android:configChanges="orientation|screenSize|keyboardHidden"
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@style/AppTheme" /> android:theme="@style/AppTheme" />
<activity <activity
android:name=".login.LoginActivity" android:name="pl.szczodrzynski.edziennik.ui.modules.login.LoginActivity"
android:configChanges="orientation|screenSize" android:configChanges="orientation|screenSize"
android:launchMode="singleTop" android:launchMode="singleTop"
android:theme="@style/AppTheme.Light" /> android:theme="@style/AppTheme.Light" />
<activity <activity
android:name=".intro.ChangelogIntroActivity" android:name=".ui.modules.intro.ChangelogIntroActivity"
android:configChanges="orientation|keyboardHidden" android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@style/Theme.Intro" /> android:theme="@style/Theme.Intro" />
@ -57,7 +57,7 @@
|_| |_|_| \___|_.__/ \__,_|___/\___/ |_| |_|_| \___|_.__/ \__,_|___/\___/
--> -->
<activity <activity
android:name=".activities.CrashActivity" android:name=".ui.modules.base.CrashActivity"
android:configChanges="orientation|screenSize|keyboardHidden" android:configChanges="orientation|screenSize|keyboardHidden"
android:process=":error_activity" android:process=":error_activity"
android:theme="@style/DeadTheme" /> android:theme="@style/DeadTheme" />
@ -72,7 +72,7 @@
|___/ |___/
--> -->
<activity <activity
android:name=".activities.CrashGtfoActivity" android:name=".ui.modules.base.CrashGtfoActivity"
android:configChanges="orientation|screenSize|keyboardHidden" android:configChanges="orientation|screenSize|keyboardHidden"
android:theme="@style/DeadTheme" /> android:theme="@style/DeadTheme" />
<activity <activity
@ -103,7 +103,7 @@
android:theme="@style/AppTheme.NoDisplay" /> android:theme="@style/AppTheme.NoDisplay" />
<activity <activity
android:name=".activities.SettingsLicenseActivity" android:name=".ui.modules.settings.SettingsLicenseActivity"
android:configChanges="orientation|keyboardHidden" android:configChanges="orientation|keyboardHidden"
android:theme="@style/AppTheme" /> android:theme="@style/AppTheme" />
@ -113,14 +113,14 @@
android:theme="@style/Base.Theme.AppCompat" /> android:theme="@style/Base.Theme.AppCompat" />
<activity <activity
android:name=".activities.WebPushConfigActivity" android:name=".ui.modules.webpush.WebPushConfigActivity"
android:configChanges="orientation|keyboardHidden" android:configChanges="orientation|keyboardHidden"
android:theme="@style/AppTheme.Dark" /> android:theme="@style/AppTheme.Dark" />
<activity <activity
android:name=".activities.CounterActivity" android:name=".ui.modules.home.CounterActivity"
android:theme="@style/AppTheme.Black" /> android:theme="@style/AppTheme.Black" />
<activity android:name=".activities.QrScannerActivity" /> <activity android:name=".ui.modules.webpush.QrScannerActivity" />
<provider <provider
android:name="androidx.core.content.FileProvider" android:name="androidx.core.content.FileProvider"

View File

@ -31,6 +31,38 @@
</head> </head>
<body> <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> <h3>Wersja 3.0, 2019-09-13</h3>
<ul> <ul>
<li><b>Nowy wygląd i sposób nawigacji</b> w całej aplikacji.</li> <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.ConnectionSpec;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.TlsVersion; import okhttp3.TlsVersion;
import pl.szczodrzynski.edziennik.activities.CrashActivity; import pl.szczodrzynski.edziennik.ui.modules.base.CrashActivity;
import pl.szczodrzynski.edziennik.api.Edziennik; import pl.szczodrzynski.edziennik.data.api.Edziennik;
import pl.szczodrzynski.edziennik.api.Iuczniowie; import pl.szczodrzynski.edziennik.data.api.Iuczniowie;
import pl.szczodrzynski.edziennik.api.Librus; import pl.szczodrzynski.edziennik.data.api.Librus;
import pl.szczodrzynski.edziennik.api.Mobidziennik; import pl.szczodrzynski.edziennik.data.api.Mobidziennik;
import pl.szczodrzynski.edziennik.api.Vulcan; import pl.szczodrzynski.edziennik.data.api.Vulcan;
import pl.szczodrzynski.edziennik.datamodels.AppDb; import pl.szczodrzynski.edziennik.data.db.AppDb;
import pl.szczodrzynski.edziennik.datamodels.DebugLog; import pl.szczodrzynski.edziennik.data.db.modules.debuglog.DebugLog;
import pl.szczodrzynski.edziennik.datamodels.LoginStore; import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
import pl.szczodrzynski.edziennik.datamodels.Profile; import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.datamodels.ProfileFull; import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
import pl.szczodrzynski.edziennik.models.AppConfig; import pl.szczodrzynski.edziennik.utils.models.AppConfig;
import pl.szczodrzynski.edziennik.network.NetworkUtils; import pl.szczodrzynski.edziennik.network.NetworkUtils;
import pl.szczodrzynski.edziennik.network.TLSSocketFactory; import pl.szczodrzynski.edziennik.network.TLSSocketFactory;
import pl.szczodrzynski.edziennik.receivers.JobsCreator; 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.Themes;
import pl.szczodrzynski.edziennik.utils.Utils; import pl.szczodrzynski.edziennik.utils.Utils;
import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; import static pl.szczodrzynski.edziennik.data.db.modules.login.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_VULCAN;
public class App extends androidx.multidex.MultiDexApplication { public class App extends androidx.multidex.MultiDexApplication {
private static final String TAG = "App"; 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(Icon.createWithResource(this, R.mipmap.ic_shortcut_homework))
//.setIcon(getDesktopIconFromIconics(SzkolnyFont.Icon.szf_file_document_edit)) //.setIcon(getDesktopIconFromIconics(SzkolnyFont.Icon.szf_file_document_edit))
.setIntent(new Intent(Intent.ACTION_MAIN, null, this, MainActivity.class) .setIntent(new Intent(Intent.ACTION_MAIN, null, this, MainActivity.class)
.putExtra("fragmentId", MainActivity.DRAWER_ITEM_HOMEWORKS)) .putExtra("fragmentId", MainActivity.DRAWER_ITEM_HOMEWORK))
.build(); .build();
ShortcutInfo shortcutMessages = new ShortcutInfo.Builder(mContext, "item_messages") 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.JsonElement
import com.google.gson.JsonObject import com.google.gson.JsonObject
import im.wangchao.mhttp.Response import im.wangchao.mhttp.Response
import pl.szczodrzynski.edziennik.datamodels.Profile import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher
import pl.szczodrzynski.edziennik.datamodels.Teacher import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
import pl.szczodrzynski.navlib.R
import pl.szczodrzynski.navlib.crc16 import pl.szczodrzynski.navlib.crc16
import pl.szczodrzynski.navlib.getColorFromRes import pl.szczodrzynski.navlib.getColorFromRes
import java.text.SimpleDateFormat 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.iconics.typeface.library.szkolny.font.SzkolnyFont
import com.mikepenz.materialdrawer.model.ProfileSettingDrawerItem import com.mikepenz.materialdrawer.model.ProfileSettingDrawerItem
import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem 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.edziennik.utils.Themes
import pl.szczodrzynski.navlib.NavView import pl.szczodrzynski.navlib.NavView
import pl.szczodrzynski.navlib.SystemBarsUtil 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.drawer.items.withAppTitle
import pl.szczodrzynski.navlib.getColorFromAttr import pl.szczodrzynski.navlib.getColorFromAttr
import androidx.appcompat.widget.PopupMenu import androidx.appcompat.widget.PopupMenu
import androidx.core.graphics.ColorUtils
import androidx.navigation.NavOptions import androidx.navigation.NavOptions
import com.danimahardhika.cafebar.CafeBar import com.danimahardhika.cafebar.CafeBar
import com.mikepenz.iconics.IconicsColor import com.mikepenz.iconics.IconicsColor
@ -40,21 +41,35 @@ import com.mikepenz.materialdrawer.model.ProfileDrawerItem
import com.mikepenz.materialdrawer.model.interfaces.IProfile import com.mikepenz.materialdrawer.model.interfaces.IProfile
import pl.droidsonroids.gif.GifDrawable import pl.droidsonroids.gif.GifDrawable
import pl.szczodrzynski.edziennik.App.APP_URL import pl.szczodrzynski.edziennik.App.APP_URL
import pl.szczodrzynski.edziennik.api.AppError import pl.szczodrzynski.edziennik.data.api.AppError
import pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.* import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.*
import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback
import pl.szczodrzynski.edziennik.databinding.ActivitySzkolnyBinding import pl.szczodrzynski.edziennik.databinding.ActivitySzkolnyBinding
import pl.szczodrzynski.edziennik.datamodels.LoginStore import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
import pl.szczodrzynski.edziennik.datamodels.Profile import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
import pl.szczodrzynski.edziennik.datamodels.ProfileFull import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull
import pl.szczodrzynski.edziennik.dialogs.ChangelogDialog import pl.szczodrzynski.edziennik.ui.dialogs.changelog.ChangelogDialog
import pl.szczodrzynski.edziennik.fragments.* import pl.szczodrzynski.edziennik.ui.modules.homework.HomeworkFragment
import pl.szczodrzynski.edziennik.login.LoginActivity import pl.szczodrzynski.edziennik.ui.modules.login.LoginActivity
import pl.szczodrzynski.edziennik.messages.MessagesDetailsFragment import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesDetailsFragment
import pl.szczodrzynski.edziennik.messages.MessagesFragment import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesFragment
import pl.szczodrzynski.edziennik.models.NavTarget import pl.szczodrzynski.edziennik.utils.models.NavTarget
import pl.szczodrzynski.edziennik.network.ServerRequest import pl.szczodrzynski.edziennik.network.ServerRequest
import pl.szczodrzynski.edziennik.sync.SyncJob 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.SwipeRefreshLayoutNoTouch
import pl.szczodrzynski.edziennik.utils.Utils import pl.szczodrzynski.edziennik.utils.Utils
import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem
@ -82,9 +97,9 @@ class MainActivity : AppCompatActivity() {
const val DRAWER_ITEM_AGENDA = 12 const val DRAWER_ITEM_AGENDA = 12
const val DRAWER_ITEM_GRADES = 13 const val DRAWER_ITEM_GRADES = 13
const val DRAWER_ITEM_MESSAGES = 17 const val DRAWER_ITEM_MESSAGES = 17
const val DRAWER_ITEM_HOMEWORKS = 14 const val DRAWER_ITEM_HOMEWORK = 14
const val DRAWER_ITEM_NOTICES = 15 const val DRAWER_ITEM_BEHAVIOUR = 15
const val DRAWER_ITEM_ATTENDANCES = 16 const val DRAWER_ITEM_ATTENDANCE = 16
const val DRAWER_ITEM_ANNOUNCEMENTS = 18 const val DRAWER_ITEM_ANNOUNCEMENTS = 18
const val DRAWER_ITEM_NOTIFICATIONS = 20 const val DRAWER_ITEM_NOTIFICATIONS = 20
const val DRAWER_ITEM_SETTINGS = 101 const val DRAWER_ITEM_SETTINGS = 101
@ -108,17 +123,17 @@ class MainActivity : AppCompatActivity() {
.isStatic(true) .isStatic(true)
.withPopToHome(false) .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) .withIcon(CommunityMaterial.Icon2.cmd_timetable)
.withBadgeTypeId(TYPE_LESSON_CHANGE) .withBadgeTypeId(TYPE_LESSON_CHANGE)
.isInDrawer(true) .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) .withIcon(CommunityMaterial.Icon.cmd_calendar)
.withBadgeTypeId(TYPE_EVENT) .withBadgeTypeId(TYPE_EVENT)
.isInDrawer(true) .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) .withIcon(CommunityMaterial.Icon2.cmd_numeric_5_box)
.withBadgeTypeId(TYPE_GRADE) .withBadgeTypeId(TYPE_GRADE)
.isInDrawer(true) .isInDrawer(true)
@ -128,29 +143,29 @@ class MainActivity : AppCompatActivity() {
.withBadgeTypeId(TYPE_MESSAGE) .withBadgeTypeId(TYPE_MESSAGE)
.isInDrawer(true) .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) .withIcon(SzkolnyFont.Icon.szf_file_document_edit)
.withBadgeTypeId(TYPE_HOMEWORK) .withBadgeTypeId(TYPE_HOMEWORK)
.isInDrawer(true) .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) .withIcon(CommunityMaterial.Icon2.cmd_message_alert)
.withBadgeTypeId(TYPE_NOTICE) .withBadgeTypeId(TYPE_NOTICE)
.isInDrawer(true) .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) .withIcon(CommunityMaterial.Icon.cmd_calendar_remove)
.withBadgeTypeId(TYPE_ATTENDANCE) .withBadgeTypeId(TYPE_ATTENDANCE)
.isInDrawer(true) .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) .withIcon(CommunityMaterial.Icon.cmd_bulletin_board)
.withBadgeTypeId(TYPE_ANNOUNCEMENT) .withBadgeTypeId(TYPE_ANNOUNCEMENT)
.isInDrawer(true) .isInDrawer(true)
// static drawer items // 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) .withIcon(CommunityMaterial.Icon.cmd_bell_ring)
.isInDrawer(true) .isInDrawer(true)
.isStatic(true) .isStatic(true)
@ -229,8 +244,8 @@ class MainActivity : AppCompatActivity() {
drawer.init(this@MainActivity) drawer.init(this@MainActivity)
SystemBarsUtil(this@MainActivity).run { SystemBarsUtil(this@MainActivity).run {
paddingByKeyboard = b.navView //paddingByKeyboard = b.navView
appFullscreen = true appFullscreen = false
statusBarColor = getColorFromAttr(context, android.R.attr.colorBackground) statusBarColor = getColorFromAttr(context, android.R.attr.colorBackground)
statusBarDarker = false statusBarDarker = false
statusBarFallbackLight = COLOR_HALF_TRANSPARENT statusBarFallbackLight = COLOR_HALF_TRANSPARENT
@ -239,6 +254,16 @@ class MainActivity : AppCompatActivity() {
b.navView.configSystemBarsUtil(this) 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() commit()
} }
@ -511,9 +536,9 @@ class MainActivity : AppCompatActivity() {
DRAWER_ITEM_TIMETABLE -> FEATURE_TIMETABLE DRAWER_ITEM_TIMETABLE -> FEATURE_TIMETABLE
DRAWER_ITEM_AGENDA -> FEATURE_AGENDA DRAWER_ITEM_AGENDA -> FEATURE_AGENDA
DRAWER_ITEM_GRADES -> FEATURE_GRADES DRAWER_ITEM_GRADES -> FEATURE_GRADES
DRAWER_ITEM_HOMEWORKS -> FEATURE_HOMEWORKS DRAWER_ITEM_HOMEWORK -> FEATURE_HOMEWORK
DRAWER_ITEM_NOTICES -> FEATURE_NOTICES DRAWER_ITEM_BEHAVIOUR -> FEATURE_NOTICES
DRAWER_ITEM_ATTENDANCES -> FEATURE_ATTENDANCES DRAWER_ITEM_ATTENDANCE -> FEATURE_ATTENDANCE
DRAWER_ITEM_MESSAGES -> when (MessagesFragment.pageSelection) { DRAWER_ITEM_MESSAGES -> when (MessagesFragment.pageSelection) {
1 -> FEATURE_MESSAGES_OUTBOX 1 -> FEATURE_MESSAGES_OUTBOX
else -> FEATURE_MESSAGES_INBOX else -> FEATURE_MESSAGES_INBOX
@ -527,9 +552,9 @@ class MainActivity : AppCompatActivity() {
DRAWER_ITEM_TIMETABLE -> R.string.sync_feature_timetable DRAWER_ITEM_TIMETABLE -> R.string.sync_feature_timetable
DRAWER_ITEM_AGENDA -> R.string.sync_feature_agenda DRAWER_ITEM_AGENDA -> R.string.sync_feature_agenda
DRAWER_ITEM_GRADES -> R.string.sync_feature_grades DRAWER_ITEM_GRADES -> R.string.sync_feature_grades
DRAWER_ITEM_HOMEWORKS -> R.string.sync_feature_homeworks DRAWER_ITEM_HOMEWORK -> R.string.sync_feature_homework
DRAWER_ITEM_NOTICES -> R.string.sync_feature_notices DRAWER_ITEM_BEHAVIOUR -> R.string.sync_feature_notices
DRAWER_ITEM_ATTENDANCES -> R.string.sync_feature_attendances DRAWER_ITEM_ATTENDANCE -> R.string.sync_feature_attendance
DRAWER_ITEM_MESSAGES -> when (MessagesFragment.pageSelection) { DRAWER_ITEM_MESSAGES -> when (MessagesFragment.pageSelection) {
1 -> R.string.sync_feature_messages_outbox 1 -> R.string.sync_feature_messages_outbox
else -> R.string.sync_feature_messages_inbox else -> R.string.sync_feature_messages_inbox
@ -729,6 +754,9 @@ class MainActivity : AppCompatActivity() {
drawer.close() drawer.close()
drawer.setSelection(target.id, fireOnClick = false) drawer.setSelection(target.id, fireOnClick = false)
navView.toolbar.setTitle(target.title ?: target.name) 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}") Log.d("NavDebug", "Navigating from ${navTarget.fragmentClass?.java?.simpleName} to ${target.fragmentClass?.java?.simpleName}")
@ -837,7 +865,19 @@ class MainActivity : AppCompatActivity() {
fun gainAttention() { fun gainAttention() {
b.navView.postDelayed({ b.navView.postDelayed({
navView.gainAttentionOnBottomBar() navView.gainAttentionOnBottomBar()
}, 2000)
}
fun gainAttentionFAB() {
navView.bottomBar.fabExtended = false
b.navView.postDelayed({
navView.bottomBar.fabExtended = true
}, 1000) }, 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.Collections;
import java.util.List; import java.util.List;
import pl.szczodrzynski.edziennik.datamodels.ProfileFull; import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
import pl.szczodrzynski.edziennik.models.Date; import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.models.Time; import pl.szczodrzynski.edziennik.utils.models.Time;
import pl.szczodrzynski.edziennik.receivers.BootReceiver; import pl.szczodrzynski.edziennik.receivers.BootReceiver;
import pl.szczodrzynski.edziennik.sync.SyncJob; import pl.szczodrzynski.edziennik.sync.SyncJob;
import pl.szczodrzynski.edziennik.sync.SyncService; 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); app.appConfig.notifications.add(notification);
} }
@ -235,8 +235,8 @@ public class Notifier {
} }
int unreadCount = 0; int unreadCount = 0;
List<pl.szczodrzynski.edziennik.models.Notification> notificationList = new ArrayList<>(); List<pl.szczodrzynski.edziennik.utils.models.Notification> notificationList = new ArrayList<>();
for (pl.szczodrzynski.edziennik.models.Notification notification: app.appConfig.notifications) { for (pl.szczodrzynski.edziennik.utils.models.Notification notification: app.appConfig.notifications) {
if (!notification.notified) { if (!notification.notified) {
notification.seen = false; notification.seen = false;
notification.notified = true; 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); Intent intent = new Intent(app, MainActivity.class);
notification.fillIntent(intent); notification.fillIntent(intent);
PendingIntent pendingIntent = PendingIntent.getActivity(app, notification.id, intent, 0); PendingIntent pendingIntent = PendingIntent.getActivity(app, notification.id, intent, 0);
@ -258,9 +258,9 @@ public class Notifier {
// title, text, type, date // title, text, type, date
.setContentTitle(notification.title) .setContentTitle(notification.title)
.setContentText(notification.text) .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) .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 // icon, color, lights, priority
.setSmallIcon(R.drawable.ic_notification) .setSmallIcon(R.drawable.ic_notification)
.setColor(notificationColor) .setColor(notificationColor)
@ -349,7 +349,7 @@ public class Notifier {
} }
public void dump() { 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); 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.ArrayList;
import java.util.List; import java.util.List;
import pl.szczodrzynski.edziennik.datamodels.EventFull; import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull;
import pl.szczodrzynski.edziennik.datamodels.LessonChange; import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
import pl.szczodrzynski.edziennik.datamodels.LessonFull; import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
import pl.szczodrzynski.edziennik.datamodels.Profile; import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.fragments.HomeFragment; import pl.szczodrzynski.edziennik.ui.modules.home.HomeFragment;
import pl.szczodrzynski.edziennik.models.Date; import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.models.ItemWidgetTimetableModel; import pl.szczodrzynski.edziennik.utils.models.ItemWidgetTimetableModel;
import pl.szczodrzynski.edziennik.models.Time; import pl.szczodrzynski.edziennik.utils.models.Time;
import pl.szczodrzynski.edziennik.models.Week; import pl.szczodrzynski.edziennik.utils.models.Week;
import pl.szczodrzynski.edziennik.widgets.WidgetConfig; import pl.szczodrzynski.edziennik.widgets.WidgetConfig;
import pl.szczodrzynski.edziennik.sync.SyncJob; import pl.szczodrzynski.edziennik.sync.SyncJob;
import pl.szczodrzynski.edziennik.widgets.timetable.LessonDetailsActivity; import pl.szczodrzynski.edziennik.widgets.timetable.LessonDetailsActivity;
import pl.szczodrzynski.edziennik.widgets.timetable.WidgetTimetableService; import pl.szczodrzynski.edziennik.widgets.timetable.WidgetTimetableService;
import static pl.szczodrzynski.edziennik.ExtensionsKt.filterOutArchived; 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; 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.content.Intent
import android.os.IBinder import android.os.IBinder
import android.util.Log import android.util.Log
import androidx.core.app.NotificationCompat
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode 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.librus.Librus
import pl.szczodrzynski.edziennik.api.v2.models.ApiError import pl.szczodrzynski.edziennik.api.v2.models.ApiError
import pl.szczodrzynski.edziennik.api.v2.models.ApiTask import pl.szczodrzynski.edziennik.api.v2.models.ApiTask
import pl.szczodrzynski.edziennik.datamodels.LoginStore import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
import pl.szczodrzynski.edziennik.datamodels.Profile import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
import kotlin.math.min import kotlin.math.min
class ApiService : Service() { 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_AGENDA
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_ANNOUNCEMENTS 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_GRADES
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_HOME 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_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.MainActivity.Companion.DRAWER_ITEM_TIMETABLE
import pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED import pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED
import pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT import pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT
import pl.szczodrzynski.edziennik.messages.MessagesFragment import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesFragment
import pl.szczodrzynski.edziennik.messages.MessagesListFragment
const val FEATURE_ALL = 0 const val FEATURE_ALL = 0
const val FEATURE_TIMETABLE = 1 const val FEATURE_TIMETABLE = 1
@ -77,9 +76,9 @@ object Features {
TYPE_SENT -> listOf(FEATURE_MESSAGES_OUTBOX) TYPE_SENT -> listOf(FEATURE_MESSAGES_OUTBOX)
else -> listOf(FEATURE_MESSAGES_INBOX, FEATURE_MESSAGES_OUTBOX) else -> listOf(FEATURE_MESSAGES_INBOX, FEATURE_MESSAGES_OUTBOX)
} }
DRAWER_ITEM_HOMEWORKS -> listOf(FEATURE_HOMEWORK) DRAWER_ITEM_HOMEWORK -> listOf(FEATURE_HOMEWORK)
DRAWER_ITEM_NOTICES -> listOf(FEATURE_NOTICES) DRAWER_ITEM_BEHAVIOUR -> listOf(FEATURE_NOTICES)
DRAWER_ITEM_ATTENDANCES -> listOf(FEATURE_ATTENDANCES) DRAWER_ITEM_ATTENDANCE -> listOf(FEATURE_ATTENDANCES)
DRAWER_ITEM_ANNOUNCEMENTS -> listOf(FEATURE_ANNOUNCEMENTS) DRAWER_ITEM_ANNOUNCEMENTS -> listOf(FEATURE_ANNOUNCEMENTS)
else -> getAllFeatures() else -> getAllFeatures()
} + getAllNecessary() } + getAllNecessary()

View File

@ -6,16 +6,17 @@ package pl.szczodrzynski.edziennik.api.v2.librus
import android.util.Log import android.util.Log
import pl.szczodrzynski.edziennik.App import pl.szczodrzynski.edziennik.App
import pl.szczodrzynski.edziennik.R import pl.szczodrzynski.edziennik.api.v2.CODE_INTERNAL_LIBRUS_ACCOUNT_410
import pl.szczodrzynski.edziennik.api.v2.* 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.EdziennikCallback
import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikInterface import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikInterface
import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus 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.ApiError
import pl.szczodrzynski.edziennik.api.v2.models.Endpoint import pl.szczodrzynski.edziennik.api.v2.models.Endpoint
import pl.szczodrzynski.edziennik.datamodels.LoginStore import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
import pl.szczodrzynski.edziennik.datamodels.Profile import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
import pl.szczodrzynski.edziennik.utils.Utils.d import pl.szczodrzynski.edziennik.utils.Utils.d
class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, val callback: EdziennikCallback) : EdziennikInterface { 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 package pl.szczodrzynski.edziennik.api.v2.librus
import pl.szczodrzynski.edziennik.R 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.DataLibrus
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApiMe 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 import pl.szczodrzynski.edziennik.utils.Utils
class LibrusEndpoints(val data: DataLibrus, val onSuccess: () -> Unit) { 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 package pl.szczodrzynski.edziennik.api.v2.librus
import android.content.Context
import android.content.Intent import android.content.Intent
import com.google.gson.JsonObject import com.google.gson.JsonObject
import pl.szczodrzynski.edziennik.App import pl.szczodrzynski.edziennik.App
import pl.szczodrzynski.edziennik.api.AppError import pl.szczodrzynski.edziennik.api.v2.ApiService
import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback import pl.szczodrzynski.edziennik.api.v2.LOGIN_MODE_LIBRUS_EMAIL
import pl.szczodrzynski.edziennik.api.v2.* import pl.szczodrzynski.edziennik.api.v2.LOGIN_TYPE_LIBRUS
import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikCallback import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
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
class LibrusTest(val app: App) { class LibrusTest(val app: App) {
companion object { 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.LOGIN_METHOD_LIBRUS_SYNERGIA
import pl.szczodrzynski.edziennik.api.v2.models.Data import pl.szczodrzynski.edziennik.api.v2.models.Data
import pl.szczodrzynski.edziennik.currentTimeUnix import pl.szczodrzynski.edziennik.currentTimeUnix
import pl.szczodrzynski.edziennik.datamodels.LoginStore import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
import pl.szczodrzynski.edziennik.datamodels.Profile import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
import pl.szczodrzynski.edziennik.isNotNullNorEmpty import pl.szczodrzynski.edziennik.isNotNullNorEmpty
class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app, profile, loginStore) { 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 package pl.szczodrzynski.edziennik.api.v2.librus.data
import com.google.gson.JsonNull
import com.google.gson.JsonObject import com.google.gson.JsonObject
import im.wangchao.mhttp.Request import im.wangchao.mhttp.Request
import im.wangchao.mhttp.Response import im.wangchao.mhttp.Response
import im.wangchao.mhttp.callback.JsonCallbackHandler 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.*
import pl.szczodrzynski.edziennik.api.v2.librus.login.LoginLibrusSynergia
import pl.szczodrzynski.edziennik.api.v2.models.ApiError import pl.szczodrzynski.edziennik.api.v2.models.ApiError
import pl.szczodrzynski.edziennik.getString import pl.szczodrzynski.edziennik.getString
import pl.szczodrzynski.edziennik.utils.Utils.d
import java.lang.Exception
import java.net.HttpURLConnection
import java.net.HttpURLConnection.* import java.net.HttpURLConnection.*
open class LibrusApi(open val data: DataLibrus) { open class LibrusApi(open val data: DataLibrus) {

View File

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

View File

@ -5,10 +5,6 @@
package pl.szczodrzynski.edziennik.api.v2.librus.data package pl.szczodrzynski.edziennik.api.v2.librus.data
import pl.szczodrzynski.edziennik.* 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, class LibrusApiMe(override val data: DataLibrus,
val onSuccess: () -> Unit) : LibrusApi(data) { val onSuccess: () -> Unit) : LibrusApi(data) {

View File

@ -1,10 +1,10 @@
package pl.szczodrzynski.edziennik.api.v2.librus.data package pl.szczodrzynski.edziennik.api.v2.librus.data
import pl.szczodrzynski.edziennik.App import pl.szczodrzynski.edziennik.App
import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback
import pl.szczodrzynski.edziennik.api.v2.models.Data import pl.szczodrzynski.edziennik.api.v2.models.Data
import pl.szczodrzynski.edziennik.datamodels.LoginStore import pl.szczodrzynski.edziennik.data.api.interfaces.ProgressCallback
import pl.szczodrzynski.edziennik.datamodels.Profile import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
class LibrusSynergiaGrades(val app: App, class LibrusSynergiaGrades(val app: App,
val profile: Profile, 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.JsonCallbackHandler
import im.wangchao.mhttp.callback.TextCallbackHandler import im.wangchao.mhttp.callback.TextCallbackHandler
import pl.szczodrzynski.edziennik.* 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.*
import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus
import pl.szczodrzynski.edziennik.api.v2.models.ApiError import pl.szczodrzynski.edziennik.api.v2.models.ApiError
import pl.szczodrzynski.edziennik.utils.Utils.c
import java.net.HttpURLConnection.HTTP_UNAUTHORIZED import java.net.HttpURLConnection.HTTP_UNAUTHORIZED
import java.util.ArrayList import java.util.ArrayList
import java.util.regex.Pattern 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.JsonCallbackHandler
import im.wangchao.mhttp.callback.TextCallbackHandler import im.wangchao.mhttp.callback.TextCallbackHandler
import okhttp3.Cookie import okhttp3.Cookie
import okhttp3.HttpUrl
import pl.szczodrzynski.edziennik.api.v2.* import pl.szczodrzynski.edziennik.api.v2.*
import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus
import pl.szczodrzynski.edziennik.api.v2.models.ApiError import pl.szczodrzynski.edziennik.api.v2.models.ApiError
import pl.szczodrzynski.edziennik.currentTimeUnix
import pl.szczodrzynski.edziennik.getString import pl.szczodrzynski.edziennik.getString
import pl.szczodrzynski.edziennik.getUnixDate import pl.szczodrzynski.edziennik.getUnixDate
import pl.szczodrzynski.edziennik.isNotNullNorEmpty
import java.lang.Exception
import java.net.HttpURLConnection import java.net.HttpURLConnection
class LoginLibrusSynergia(val data: DataLibrus, val onSuccess: () -> Unit) { 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.Response
import im.wangchao.mhttp.callback.JsonCallbackHandler import im.wangchao.mhttp.callback.JsonCallbackHandler
import pl.szczodrzynski.edziennik.* 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.*
import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus
import pl.szczodrzynski.edziennik.api.v2.models.ApiError 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 com.google.gson.JsonObject
import im.wangchao.mhttp.Response import im.wangchao.mhttp.Response
import pl.szczodrzynski.edziennik.App 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.api.v2.interfaces.EndpointCallback
import pl.szczodrzynski.edziennik.datamodels.* import pl.szczodrzynski.edziennik.data.api.AppError.*
import pl.szczodrzynski.edziennik.models.Date 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.io.InterruptedIOException
import java.net.SocketTimeoutException import java.net.SocketTimeoutException
import java.net.UnknownHostException import java.net.UnknownHostException

View File

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

View File

@ -5,8 +5,8 @@
package pl.szczodrzynski.edziennik.api.v2.models package pl.szczodrzynski.edziennik.api.v2.models
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_NOT_NEEDED import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_NOT_NEEDED
import pl.szczodrzynski.edziennik.datamodels.LoginStore import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
import pl.szczodrzynski.edziennik.datamodels.Profile import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
/** /**
* A Login Method descriptor class. * 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.content.Context;
import android.os.AsyncTask; 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.app.Activity;
import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetManager;
@ -43,27 +43,27 @@ import pl.szczodrzynski.edziennik.BuildConfig;
import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.R;
import pl.szczodrzynski.edziennik.MainActivity; import pl.szczodrzynski.edziennik.MainActivity;
import pl.szczodrzynski.edziennik.WidgetTimetable; import pl.szczodrzynski.edziennik.WidgetTimetable;
import pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface; import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface;
import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
import pl.szczodrzynski.edziennik.datamodels.AnnouncementFull; import pl.szczodrzynski.edziennik.data.db.modules.announcements.AnnouncementFull;
import pl.szczodrzynski.edziennik.datamodels.Attendance; import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
import pl.szczodrzynski.edziennik.datamodels.AttendanceFull; import pl.szczodrzynski.edziennik.data.db.modules.attendance.AttendanceFull;
import pl.szczodrzynski.edziennik.datamodels.Event; import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
import pl.szczodrzynski.edziennik.datamodels.EventFull; import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull;
import pl.szczodrzynski.edziennik.datamodels.EventType; import pl.szczodrzynski.edziennik.data.db.modules.events.EventType;
import pl.szczodrzynski.edziennik.datamodels.GradeFull; import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeFull;
import pl.szczodrzynski.edziennik.datamodels.LessonFull; import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonFull;
import pl.szczodrzynski.edziennik.datamodels.LoginStore; import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
import pl.szczodrzynski.edziennik.datamodels.Message; import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
import pl.szczodrzynski.edziennik.datamodels.MessageFull; import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
import pl.szczodrzynski.edziennik.datamodels.Metadata; import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
import pl.szczodrzynski.edziennik.datamodels.Notice; import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
import pl.szczodrzynski.edziennik.datamodels.NoticeFull; import pl.szczodrzynski.edziennik.data.db.modules.notices.NoticeFull;
import pl.szczodrzynski.edziennik.datamodels.Profile; import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.datamodels.ProfileFull; import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
import pl.szczodrzynski.edziennik.datamodels.Team; import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
import pl.szczodrzynski.edziennik.models.Date; import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.models.Notification; import pl.szczodrzynski.edziennik.utils.models.Notification;
import pl.szczodrzynski.edziennik.network.ServerRequest; import pl.szczodrzynski.edziennik.network.ServerRequest;
import pl.szczodrzynski.edziennik.sync.SyncJob; import pl.szczodrzynski.edziennik.sync.SyncJob;
import pl.szczodrzynski.edziennik.utils.Themes; 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 com.mikepenz.iconics.utils.IconicsConvertersKt.sizeDp;
import static pl.szczodrzynski.edziennik.App.APP_URL; import static pl.szczodrzynski.edziennik.App.APP_URL;
import static pl.szczodrzynski.edziennik.MainActivity.DRAWER_ITEM_HOME; import static pl.szczodrzynski.edziennik.MainActivity.DRAWER_ITEM_HOME;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_OK; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OK;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_PROFILE_ARCHIVED; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_PROFILE_ARCHIVED;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_PROFILE_NOT_FOUND; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_PROFILE_NOT_FOUND;
import static pl.szczodrzynski.edziennik.api.AppError.stringErrorCode; import static pl.szczodrzynski.edziennik.data.api.AppError.stringErrorCode;
import static pl.szczodrzynski.edziennik.api.AppError.stringErrorType; import static pl.szczodrzynski.edziennik.data.api.AppError.stringErrorType;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_AGENDA; import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_AGENDA;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_ALL; import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_ALL;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_ANNOUNCEMENTS; import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_ANNOUNCEMENTS;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_ATTENDANCES; import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_ATTENDANCE;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_GRADES; import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_GRADES;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_HOMEWORKS; import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_HOMEWORK;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_MESSAGES_INBOX; import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_MESSAGES_INBOX;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_MESSAGES_OUTBOX; import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_MESSAGES_OUTBOX;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_NOTICES; import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_NOTICES;
import static pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface.FEATURE_TIMETABLE; import static pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface.FEATURE_TIMETABLE;
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.datamodels.Grade.TYPE_SEMESTER1_FINAL; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_FINAL; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_PROPOSED; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_FINAL; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_PROPOSED; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_IUCZNIOWIE; import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_IUCZNIOWIE;
import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_LIBRUS; import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_LIBRUS;
import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; import static pl.szczodrzynski.edziennik.data.db.modules.login.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_VULCAN;
import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED; 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.sync.SyncService.PROFILE_MAX_PROGRESS;
import static pl.szczodrzynski.edziennik.utils.Utils.d; import static pl.szczodrzynski.edziennik.utils.Utils.d;
import static pl.szczodrzynski.edziennik.utils.Utils.ns; import static pl.szczodrzynski.edziennik.utils.Utils.ns;
@ -115,7 +115,7 @@ public class Edziennik {
private static boolean registerEmpty; private static boolean registerEmpty;
public static int oldLuckyNumber; public static int oldLuckyNumber;
public static OldEdziennikInterface getApi(App app, int loginType) { public static EdziennikInterface getApi(App app, int loginType) {
switch (loginType) { switch (loginType) {
default: default:
case LOGIN_TYPE_MOBIDZIENNIK: case LOGIN_TYPE_MOBIDZIENNIK:
@ -306,7 +306,7 @@ public class Edziennik {
app.notifier.add(new Notification(app.getContext(), text) app.notifier.add(new Notification(app.getContext(), text)
.withProfileData(profile.getId(), profile.getName()) .withProfileData(profile.getId(), profile.getName())
.withType(event.type == TYPE_HOMEWORK ? Notification.TYPE_NEW_HOMEWORK : Notification.TYPE_NEW_EVENT) .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("eventId", event.id)
.withLongExtra("eventDate", event.eventDate.getValue()) .withLongExtra("eventDate", event.eventDate.getValue())
.withAddedDate(event.addedDate) .withAddedDate(event.addedDate)
@ -354,7 +354,7 @@ public class Edziennik {
app.notifier.add(new Notification(app.getContext(), text) app.notifier.add(new Notification(app.getContext(), text)
.withProfileData(profile.getId(), profile.getName()) .withProfileData(profile.getId(), profile.getName())
.withType(Notification.TYPE_NEW_NOTICE) .withType(Notification.TYPE_NEW_NOTICE)
.withFragmentRedirect(MainActivity.DRAWER_ITEM_NOTICES) .withFragmentRedirect(MainActivity.DRAWER_ITEM_BEHAVIOUR)
.withLongExtra("noticeId", notice.id) .withLongExtra("noticeId", notice.id)
.withAddedDate(notice.addedDate) .withAddedDate(notice.addedDate)
); );
@ -382,7 +382,7 @@ public class Edziennik {
app.notifier.add(new Notification(app.getContext(), text) app.notifier.add(new Notification(app.getContext(), text)
.withProfileData(profile.getId(), profile.getName()) .withProfileData(profile.getId(), profile.getName())
.withType(Notification.TYPE_NEW_ATTENDANCE) .withType(Notification.TYPE_NEW_ATTENDANCE)
.withFragmentRedirect(MainActivity.DRAWER_ITEM_ATTENDANCES) .withFragmentRedirect(MainActivity.DRAWER_ITEM_ATTENDANCE)
.withLongExtra("attendanceId", attendance.id) .withLongExtra("attendanceId", attendance.id)
.withAddedDate(attendance.addedDate) .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)) 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()) .withProfileData(profile.getId(), profile.getName())
.withType(event.type == TYPE_HOMEWORK ? Notification.TYPE_NEW_SHARED_HOMEWORK : Notification.TYPE_NEW_SHARED_EVENT) .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()) .withLongExtra("eventDate", event.eventDate.getValue())
); );
} }
@ -625,7 +625,7 @@ public class Edziennik {
* Used in services, login form and {@code guiSync} * Used in services, login form and {@code guiSync}
* <p> * <p>
* May be ran on worker thread. * 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. * Every callback is ran on the UI thread.
* *
* @param app * @param app
@ -676,7 +676,7 @@ public class Edziennik {
} }
}; };
AsyncTask.execute(() -> { AsyncTask.execute(() -> {
ProfileFull profile = app.db.profileDao().getFullByIdNow(profileId); ProfileFull profile = app.db.profileDao().getByIdNow(profileId);
if (profile != null) { if (profile != null) {
if (profile.getArchived()) { if (profile.getArchived()) {
@ -849,7 +849,7 @@ public class Edziennik {
app.getString(R.string.menu_grades), app.getString(R.string.menu_grades),
app.getString(R.string.menu_homework), app.getString(R.string.menu_homework),
app.getString(R.string.menu_notices), 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_inbox_single),
app.getString(R.string.title_messages_sent_single), app.getString(R.string.title_messages_sent_single),
app.getString(R.string.menu_announcements) app.getString(R.string.menu_announcements)
@ -858,9 +858,9 @@ public class Edziennik {
FEATURE_TIMETABLE, FEATURE_TIMETABLE,
FEATURE_AGENDA, FEATURE_AGENDA,
FEATURE_GRADES, FEATURE_GRADES,
FEATURE_HOMEWORKS, FEATURE_HOMEWORK,
FEATURE_NOTICES, FEATURE_NOTICES,
FEATURE_ATTENDANCES, FEATURE_ATTENDANCE,
FEATURE_MESSAGES_INBOX, FEATURE_MESSAGES_INBOX,
FEATURE_MESSAGES_OUTBOX, FEATURE_MESSAGES_OUTBOX,
FEATURE_ANNOUNCEMENTS FEATURE_ANNOUNCEMENTS
@ -1130,7 +1130,7 @@ public class Edziennik {
.show(); .show();
} }
public void removeProfile(int profileId) { public void removeProfile(int profileId) {
Profile profileObject = app.db.profileDao().getFullByIdNow(profileId); Profile profileObject = app.db.profileDao().getByIdNow(profileId);
if (profileObject == null) if (profileObject == null)
return; return;
app.db.announcementDao().clear(profileId); 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.content.Context;
import android.graphics.Color; import android.graphics.Color;
@ -34,64 +34,64 @@ import okhttp3.HttpUrl;
import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.App;
import pl.szczodrzynski.edziennik.BuildConfig; import pl.szczodrzynski.edziennik.BuildConfig;
import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.R;
import pl.szczodrzynski.edziennik.api.interfaces.AttachmentGetCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.AttachmentGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface; import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface;
import pl.szczodrzynski.edziennik.api.interfaces.LoginCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.LoginCallback;
import pl.szczodrzynski.edziennik.api.interfaces.MessageGetCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.MessageGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.RecipientListGetCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.RecipientListGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
import pl.szczodrzynski.edziennik.datamodels.Announcement; import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement;
import pl.szczodrzynski.edziennik.datamodels.Attendance; import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
import pl.szczodrzynski.edziennik.datamodels.Event; import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
import pl.szczodrzynski.edziennik.datamodels.Grade; import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
import pl.szczodrzynski.edziennik.datamodels.Lesson; import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson;
import pl.szczodrzynski.edziennik.datamodels.LessonChange; import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
import pl.szczodrzynski.edziennik.datamodels.LoginStore; import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
import pl.szczodrzynski.edziennik.datamodels.LuckyNumber; import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber;
import pl.szczodrzynski.edziennik.datamodels.Message; import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
import pl.szczodrzynski.edziennik.datamodels.MessageFull; import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
import pl.szczodrzynski.edziennik.datamodels.MessageRecipient; import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient;
import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull; import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull;
import pl.szczodrzynski.edziennik.datamodels.Metadata; import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
import pl.szczodrzynski.edziennik.datamodels.Notice; import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
import pl.szczodrzynski.edziennik.datamodels.Profile; import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.datamodels.ProfileFull; import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
import pl.szczodrzynski.edziennik.datamodels.Subject; import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
import pl.szczodrzynski.edziennik.datamodels.Teacher; import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
import pl.szczodrzynski.edziennik.datamodels.Team; import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
import pl.szczodrzynski.edziennik.messages.MessagesComposeInfo; import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo;
import pl.szczodrzynski.edziennik.models.Date; import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.models.Endpoint; import pl.szczodrzynski.edziennik.utils.models.Endpoint;
import pl.szczodrzynski.edziennik.models.Time; import pl.szczodrzynski.edziennik.utils.models.Time;
import pl.szczodrzynski.edziennik.models.Week; import pl.szczodrzynski.edziennik.utils.models.Week;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_LOGIN;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_SCHOOL_NAME; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_SCHOOL_NAME;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_MAINTENANCE; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_MAINTENANCE;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_FINAL; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_PROPOSED; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED; import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED;
import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE; import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_DELETED; import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_DELETED;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED; import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT; import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT;
import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEGATIVE; import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEGATIVE;
import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEUTRAL; import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEUTRAL;
import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_POSITIVE; 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.crc16;
import static pl.szczodrzynski.edziennik.utils.Utils.crc32; import static pl.szczodrzynski.edziennik.utils.Utils.crc32;
import static pl.szczodrzynski.edziennik.utils.Utils.d; import static pl.szczodrzynski.edziennik.utils.Utils.d;
import static pl.szczodrzynski.edziennik.utils.Utils.getWordGradeValue; import static pl.szczodrzynski.edziennik.utils.Utils.getWordGradeValue;
public class Iuczniowie implements OldEdziennikInterface { public class Iuczniowie implements EdziennikInterface {
public Iuczniowie(App app) { public Iuczniowie(App app) {
this.app = app; this.app = app;
} }
@ -200,7 +200,7 @@ public class Iuczniowie implements OldEdziennikInterface {
targetEndpoints.add("Exams"); targetEndpoints.add("Exams");
targetEndpoints.add("Notices"); targetEndpoints.add("Notices");
targetEndpoints.add("Announcements"); targetEndpoints.add("Announcements");
targetEndpoints.add("Attendances"); targetEndpoints.add("Attendance");
targetEndpoints.add("MessagesInbox"); targetEndpoints.add("MessagesInbox");
targetEndpoints.add("MessagesOutbox"); targetEndpoints.add("MessagesOutbox");
targetEndpoints.add("Finish"); targetEndpoints.add("Finish");
@ -235,14 +235,14 @@ public class Iuczniowie implements OldEdziennikInterface {
targetEndpoints.add("Grades"); targetEndpoints.add("Grades");
targetEndpoints.add("PropositionGrades"); targetEndpoints.add("PropositionGrades");
break; break;
case FEATURE_HOMEWORKS: case FEATURE_HOMEWORK:
targetEndpoints.add("Homeworks"); targetEndpoints.add("Homework");
break; break;
case FEATURE_NOTICES: case FEATURE_NOTICES:
targetEndpoints.add("Notices"); targetEndpoints.add("Notices");
break; break;
case FEATURE_ATTENDANCES: case FEATURE_ATTENDANCE:
targetEndpoints.add("Attendances"); targetEndpoints.add("Attendance");
break; break;
case FEATURE_MESSAGES_INBOX: case FEATURE_MESSAGES_INBOX:
targetEndpoints.add("MessagesInbox"); targetEndpoints.add("MessagesInbox");
@ -300,9 +300,9 @@ public class Iuczniowie implements OldEdziennikInterface {
} }
} }
this.attendancesMonth = today.month; this.attendanceMonth = today.month;
this.attendancesYear = today.year; this.attendanceYear = today.year;
this.attendancesPrevMonthChecked = false; this.attendancePrevMonthChecked = false;
this.examsMonth = today.month; this.examsMonth = today.month;
this.examsYear = today.year; this.examsYear = today.year;
this.examsMonthsChecked = 0; this.examsMonthsChecked = 0;
@ -352,8 +352,8 @@ public class Iuczniowie implements OldEdziennikInterface {
case "Announcements": case "Announcements":
getAnnouncements(); getAnnouncements();
break; break;
case "Attendances": case "Attendance":
getAttendances(); getAttendance();
break; break;
case "MessagesInbox": case "MessagesInbox":
getMessagesInbox(); getMessagesInbox();
@ -880,11 +880,17 @@ public class Iuczniowie implements OldEdziennikInterface {
boolean countToTheAverage = jGrade.get("DoSredniej").getAsBoolean(); boolean countToTheAverage = jGrade.get("DoSredniej").getAsBoolean();
float value = jGrade.get("WartoscDoSred").getAsFloat(); 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( Grade gradeObject = new Grade(
profileId, profileId,
jGrade.get("idK").getAsLong(), jGrade.get("idK").getAsLong(),
jGrade.get("Kategoria").getAsString(), jGrade.get("Kategoria").getAsString(),
Color.parseColor("#"+jGrade.get("Kolor").getAsString()), colorInt,
"", "",
jGrade.get("Ocena").getAsString(), jGrade.get("Ocena").getAsString(),
value, value,
@ -1190,17 +1196,17 @@ public class Iuczniowie implements OldEdziennikInterface {
}); });
} }
private int attendancesYear; private int attendanceYear;
private int attendancesMonth; private int attendanceMonth;
private boolean attendancesPrevMonthChecked = false; private boolean attendancePrevMonthChecked = false;
private void getAttendances() { private void getAttendance() {
callback.onActionStarted(R.string.sync_action_syncing_attendances); callback.onActionStarted(R.string.sync_action_syncing_attendance);
apiRequest(Request.builder() apiRequest(Request.builder()
.url(IDZIENNIK_URL +"/mod_panelRodzica/obecnosci/WS_obecnosciUcznia.asmx/pobierzObecnosciUcznia") .url(IDZIENNIK_URL +"/mod_panelRodzica/obecnosci/WS_obecnosciUcznia.asmx/pobierzObecnosciUcznia")
.userAgent(userAgent) .userAgent(userAgent)
.addParameter("idPozDziennika", loginRegisterId) .addParameter("idPozDziennika", loginRegisterId)
.addParameter("mc", attendancesMonth) .addParameter("mc", attendanceMonth)
.addParameter("rok", attendancesYear) .addParameter("rok", attendanceYear)
.addParameter("dataTygodnia", "") .addParameter("dataTygodnia", "")
.postJson(), (result, response) -> { .postJson(), (result, response) -> {
JsonObject data = result.getAsJsonObject("d"); JsonObject data = result.getAsJsonObject("d");
@ -1275,25 +1281,25 @@ public class Iuczniowie implements OldEdziennikInterface {
} }
} }
int attendancesDateValue = attendancesYear*10000 + attendancesMonth*100; int attendanceDateValue = attendanceYear *10000 + attendanceMonth *100;
if (profile.getEmpty() && attendancesDateValue > profile.getSemesterStart(1).getValue()) { if (profile.getEmpty() && attendanceDateValue > profile.getSemesterStart(1).getValue()) {
attendancesPrevMonthChecked = true; // do not need to check prev month later attendancePrevMonthChecked = true; // do not need to check prev month later
attendancesMonth--; attendanceMonth--;
if (attendancesMonth < 1) { if (attendanceMonth < 1) {
attendancesMonth = 12; attendanceMonth = 12;
attendancesYear--; attendanceYear--;
} }
r("get", "Attendances"); r("get", "Attendance");
} else if (!attendancesPrevMonthChecked /* get also the previous month */) { } else if (!attendancePrevMonthChecked /* get also the previous month */) {
attendancesMonth--; attendanceMonth--;
if (attendancesMonth < 1) { if (attendanceMonth < 1) {
attendancesMonth = 12; attendanceMonth = 12;
attendancesYear--; attendanceYear--;
} }
attendancesPrevMonthChecked = true; attendancePrevMonthChecked = true;
r("get", "Attendances"); r("get", "Attendance");
} else { } 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.content.Context;
import android.graphics.Color; import android.graphics.Color;
@ -45,38 +45,40 @@ import im.wangchao.mhttp.callback.TextCallbackHandler;
import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.App;
import pl.szczodrzynski.edziennik.BuildConfig; import pl.szczodrzynski.edziennik.BuildConfig;
import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.R;
import pl.szczodrzynski.edziennik.api.interfaces.AttachmentGetCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.AttachmentGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface; import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface;
import pl.szczodrzynski.edziennik.api.interfaces.LoginCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.LoginCallback;
import pl.szczodrzynski.edziennik.api.interfaces.MessageGetCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.MessageGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.RecipientListGetCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.RecipientListGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
import pl.szczodrzynski.edziennik.datamodels.Announcement; import pl.szczodrzynski.edziennik.data.api.v2.models.DataStore;
import pl.szczodrzynski.edziennik.datamodels.Attendance; import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement;
import pl.szczodrzynski.edziennik.datamodels.Event; import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
import pl.szczodrzynski.edziennik.datamodels.EventType; import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
import pl.szczodrzynski.edziennik.datamodels.Grade; import pl.szczodrzynski.edziennik.data.db.modules.events.EventType;
import pl.szczodrzynski.edziennik.datamodels.GradeCategory; import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
import pl.szczodrzynski.edziennik.datamodels.Lesson; import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory;
import pl.szczodrzynski.edziennik.datamodels.LessonChange; import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson;
import pl.szczodrzynski.edziennik.datamodels.LoginStore; import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
import pl.szczodrzynski.edziennik.datamodels.LuckyNumber; import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
import pl.szczodrzynski.edziennik.datamodels.Message; import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber;
import pl.szczodrzynski.edziennik.datamodels.MessageFull; import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
import pl.szczodrzynski.edziennik.datamodels.MessageRecipient; import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull; import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient;
import pl.szczodrzynski.edziennik.datamodels.Metadata; import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull;
import pl.szczodrzynski.edziennik.datamodels.Notice; import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
import pl.szczodrzynski.edziennik.datamodels.Profile; import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
import pl.szczodrzynski.edziennik.datamodels.ProfileFull; import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.datamodels.Subject; import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
import pl.szczodrzynski.edziennik.datamodels.Teacher; import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
import pl.szczodrzynski.edziennik.datamodels.Team; import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
import pl.szczodrzynski.edziennik.messages.MessagesComposeInfo; import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsence;
import pl.szczodrzynski.edziennik.models.Date; import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
import pl.szczodrzynski.edziennik.models.Endpoint; import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo;
import pl.szczodrzynski.edziennik.models.Time; import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.models.Week; 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 pl.szczodrzynski.edziennik.utils.Utils;
import static java.net.HttpURLConnection.HTTP_BAD_REQUEST; 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_NOT_FOUND;
import static java.net.HttpURLConnection.HTTP_OK; import static java.net.HttpURLConnection.HTTP_OK;
import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED; import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_LOGIN;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_LIBRUS_DISCONNECTED; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_LIBRUS_DISCONNECTED;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_LIBRUS_NOT_ACTIVATED; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_LIBRUS_NOT_ACTIVATED;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_MAINTENANCE; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_MAINTENANCE;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_PROFILE_NOT_FOUND; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_PROFILE_NOT_FOUND;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_SYNERGIA_NOT_ACTIVATED; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_SYNERGIA_NOT_ACTIVATED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED;
import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_PT_MEETING; import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_PT_MEETING;
import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_TEACHER_ABSENCE; import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_TEACHER_ABSENCE;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_NORMAL; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_NORMAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_FINAL; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_PROPOSED; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_FINAL; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_PROPOSED; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED; import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED;
import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE; import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED; import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT; import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT;
import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEGATIVE; import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEGATIVE;
import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEUTRAL; import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_NEUTRAL;
import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_POSITIVE; import static pl.szczodrzynski.edziennik.data.db.modules.notices.Notice.TYPE_POSITIVE;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_EDUCATOR; import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_EDUCATOR;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_LIBRARIAN; import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_LIBRARIAN;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_OTHER; import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_OTHER;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_PARENTS_COUNCIL; import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_PARENTS_COUNCIL;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_PEDAGOGUE; import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_PEDAGOGUE;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_SCHOOL_ADMIN; import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_SCHOOL_ADMIN;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_SCHOOL_PARENTS_COUNCIL; import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_SCHOOL_PARENTS_COUNCIL;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_SECRETARIAT; import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_SECRETARIAT;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_SUPER_ADMIN; import static pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher.TYPE_SUPER_ADMIN;
import static pl.szczodrzynski.edziennik.datamodels.Teacher.TYPE_TEACHER; 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.bs;
import static pl.szczodrzynski.edziennik.utils.Utils.c; import static pl.szczodrzynski.edziennik.utils.Utils.c;
import static pl.szczodrzynski.edziennik.utils.Utils.contains; 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.getGradeValue;
import static pl.szczodrzynski.edziennik.utils.Utils.strToInt; import static pl.szczodrzynski.edziennik.utils.Utils.strToInt;
public class Librus implements OldEdziennikInterface { public class Librus implements EdziennikInterface {
public Librus(App app) { public Librus(App app) {
this.app = app; this.app = app;
} }
@ -169,6 +171,7 @@ public class Librus implements OldEdziennikInterface {
private List<Team> teamList; private List<Team> teamList;
private List<Teacher> teacherList; private List<Teacher> teacherList;
private List<TeacherAbsence> teacherAbsenceList;
private List<Subject> subjectList; private List<Subject> subjectList;
private List<Lesson> lessonList; private List<Lesson> lessonList;
private List<LessonChange> lessonChangeList; private List<LessonChange> lessonChangeList;
@ -198,6 +201,7 @@ public class Librus implements OldEdziennikInterface {
private boolean enableDescriptiveGrades = false; private boolean enableDescriptiveGrades = false;
private boolean enableTextGrades = false; private boolean enableTextGrades = false;
private boolean enableBehaviourGrades = true; private boolean enableBehaviourGrades = true;
private long unitId = -1;
private int startPointsSemester1 = 0; private int startPointsSemester1 = 0;
private int startPointsSemester2 = 0; private int startPointsSemester2 = 0;
@ -212,6 +216,8 @@ public class Librus implements OldEdziennikInterface {
this.fullSync = profile == null || profile.getEmpty() || profile.shouldFullSync(activityContext); this.fullSync = profile == null || profile.getEmpty() || profile.shouldFullSync(activityContext);
this.today = Date.getToday(); this.today = Date.getToday();
DataStore ds = new DataStore(app.db, profileId);
this.librusEmail = loginStore.getLoginData("email", ""); this.librusEmail = loginStore.getLoginData("email", "");
this.librusPassword = loginStore.getLoginData("password", ""); this.librusPassword = loginStore.getLoginData("password", "");
if (profile == null) { if (profile == null) {
@ -236,6 +242,7 @@ public class Librus implements OldEdziennikInterface {
teamList = profileId == -1 ? new ArrayList<>() : app.db.teamDao().getAllNow(profileId); teamList = profileId == -1 ? new ArrayList<>() : app.db.teamDao().getAllNow(profileId);
teacherList = profileId == -1 ? new ArrayList<>() : app.db.teacherDao().getAllNow(profileId); teacherList = profileId == -1 ? new ArrayList<>() : app.db.teacherDao().getAllNow(profileId);
teacherAbsenceList = new ArrayList<>();
subjectList = new ArrayList<>(); subjectList = new ArrayList<>();
lessonList = new ArrayList<>(); lessonList = new ArrayList<>();
lessonChangeList = new ArrayList<>(); lessonChangeList = new ArrayList<>();
@ -285,15 +292,18 @@ public class Librus implements OldEdziennikInterface {
targetEndpoints.add("Grades"); targetEndpoints.add("Grades");
targetEndpoints.add("PointGrades"); targetEndpoints.add("PointGrades");
targetEndpoints.add("DescriptiveGrades"); targetEndpoints.add("DescriptiveGrades");
targetEndpoints.add("TextGrades");
targetEndpoints.add("BehaviourGrades"); targetEndpoints.add("BehaviourGrades");
targetEndpoints.add("GradesComments");
targetEndpoints.add("Events"); targetEndpoints.add("Events");
targetEndpoints.add("TeacherFreeDays");
targetEndpoints.add("CustomTypes"); targetEndpoints.add("CustomTypes");
targetEndpoints.add("Homeworks"); targetEndpoints.add("Homework");
targetEndpoints.add("LuckyNumbers"); targetEndpoints.add("LuckyNumbers");
targetEndpoints.add("Notices"); targetEndpoints.add("Notices");
targetEndpoints.add("AttendancesTypes"); targetEndpoints.add("AttendanceTypes");
targetEndpoints.add("Attendances"); targetEndpoints.add("Attendance");
targetEndpoints.add("Announcements"); targetEndpoints.add("Announcements");
targetEndpoints.add("PtMeetings"); targetEndpoints.add("PtMeetings");
@ -343,6 +353,8 @@ public class Librus implements OldEdziennikInterface {
targetEndpoints.add("Events"); targetEndpoints.add("Events");
targetEndpoints.add("CustomTypes"); targetEndpoints.add("CustomTypes");
targetEndpoints.add("PtMeetings"); targetEndpoints.add("PtMeetings");
targetEndpoints.add("SchoolFreeDays");
targetEndpoints.add("TeacherFreeDays");
break; break;
case FEATURE_GRADES: case FEATURE_GRADES:
targetEndpoints.add("SavedGradeCategories"); targetEndpoints.add("SavedGradeCategories");
@ -356,17 +368,20 @@ public class Librus implements OldEdziennikInterface {
targetEndpoints.add("Grades"); targetEndpoints.add("Grades");
targetEndpoints.add("PointGrades"); targetEndpoints.add("PointGrades");
targetEndpoints.add("DescriptiveGrades"); targetEndpoints.add("DescriptiveGrades");
targetEndpoints.add("TextGrades");
targetEndpoints.add("BehaviourGrades"); targetEndpoints.add("BehaviourGrades");
targetEndpoints.add("GradesComments");
break; break;
case FEATURE_HOMEWORKS: case FEATURE_HOMEWORK:
targetEndpoints.add("Homeworks"); targetEndpoints.add("Homework");
break; break;
case FEATURE_NOTICES: case FEATURE_NOTICES:
targetEndpoints.add("Notices"); targetEndpoints.add("Notices");
break; break;
case FEATURE_ATTENDANCES: case FEATURE_ATTENDANCE:
targetEndpoints.add("AttendancesTypes"); targetEndpoints.add("AttendanceTypes");
targetEndpoints.add("Attendances"); targetEndpoints.add("Attendance");
break; break;
case FEATURE_MESSAGES_INBOX: case FEATURE_MESSAGES_INBOX:
if (!hasMessagesLogin) { if (!hasMessagesLogin) {
@ -430,6 +445,10 @@ public class Librus implements OldEdziennikInterface {
callback.onProgress(PROGRESS_STEP); callback.onProgress(PROGRESS_STEP);
index++; index++;
} }
if (index > targetEndpoints.size()) {
finish();
return;
}
d(TAG, "Called r("+type+", "+endpoint+"). Getting "+targetEndpoints.get(index)); d(TAG, "Called r("+type+", "+endpoint+"). Getting "+targetEndpoints.get(index));
switch (targetEndpoints.get(index)) { switch (targetEndpoints.get(index)) {
case "Me": case "Me":
@ -495,6 +514,12 @@ public class Librus implements OldEdziennikInterface {
case "DescriptiveGrades": case "DescriptiveGrades":
getDescriptiveGrades(); getDescriptiveGrades();
break; break;
case "TextGrades":
getTextGrades();
break;
case "GradesComments":
getGradesComments();
break;
case "BehaviourGrades": case "BehaviourGrades":
getBehaviourGrades(); getBehaviourGrades();
break; break;
@ -504,8 +529,8 @@ public class Librus implements OldEdziennikInterface {
case "CustomTypes": case "CustomTypes":
getCustomTypes(); getCustomTypes();
break; break;
case "Homeworks": case "Homework":
getHomeworks(); getHomework();
break; break;
case "LuckyNumbers": case "LuckyNumbers":
getLuckyNumbers(); getLuckyNumbers();
@ -513,11 +538,11 @@ public class Librus implements OldEdziennikInterface {
case "Notices": case "Notices":
getNotices(); getNotices();
break; break;
case "AttendancesTypes": case "AttendanceTypes":
getAttendancesTypes(); getAttendanceTypes();
break; break;
case "Attendances": case "Attendance":
getAttendances(); getAttendance();
break; break;
case "Announcements": case "Announcements":
getAnnouncements(); getAnnouncements();
@ -531,6 +556,9 @@ public class Librus implements OldEdziennikInterface {
case "TeacherFreeDays": case "TeacherFreeDays":
getTeacherFreeDays(); getTeacherFreeDays();
break; break;
case "SchoolFreeDays":
getSchoolFreeDays();
break;
case "MessagesLogin": case "MessagesLogin":
getMessagesLogin(); getMessagesLogin();
break; break;
@ -572,6 +600,8 @@ public class Librus implements OldEdziennikInterface {
} }
if (eventTypeList.size() > 0) if (eventTypeList.size() > 0)
app.db.eventTypeDao().addAll(eventTypeList); app.db.eventTypeDao().addAll(eventTypeList);
if (teacherAbsenceList.size() > 0)
app.db.teacherAbsenceDao().addAll(teacherAbsenceList);
if (noticeList.size() > 0) { if (noticeList.size() > 0) {
app.db.noticeDao().clear(profileId); app.db.noticeDao().clear(profileId);
app.db.noticeDao().addAll(noticeList); app.db.noticeDao().addAll(noticeList);
@ -641,7 +671,7 @@ public class Librus implements OldEdziennikInterface {
}; };
librusLoginCallback = redirectUrl -> { librusLoginCallback = redirectUrl -> {
fakeAuthorize = "authorize2"; fakeAuthorize = "authorize";
authorize(AUTHORIZE_URL, authorizeCallback); authorize(AUTHORIZE_URL, authorizeCallback);
}; };
@ -1400,7 +1430,8 @@ public class Librus implements OldEdziennikInterface {
} }
JsonElement unit = myClass.get("Unit"); JsonElement unit = myClass.get("Unit");
if (unit != null && !(unit instanceof JsonNull)) { 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"); r("finish", "Classes");
} }
@ -1597,6 +1628,10 @@ public class Librus implements OldEdziennikInterface {
r("finish", "Classrooms"); r("finish", "Classrooms");
return; return;
} }
if (data.get("Classrooms") == null) {
r("finish", "Classrooms");
return;
}
JsonArray jClassrooms = data.get("Classrooms").getAsJsonArray(); JsonArray jClassrooms = data.get("Classrooms").getAsJsonArray();
//d("Got Classrooms: "+jClassrooms.toString()); //d("Got Classrooms: "+jClassrooms.toString());
classrooms.clear(); classrooms.clear();
@ -1655,11 +1690,32 @@ public class Librus implements OldEdziennikInterface {
continue; 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( Lesson lessonObject = new Lesson(
profileId, profileId,
lesson.get("DayNo").getAsInt() - 1, lesson.get("DayNo").getAsInt() - 1,
Time.fromH_m(lesson.get(substitution && !cancelled ? "OrgHourFrom" : "HourFrom").getAsString()), startTime,
Time.fromH_m(lesson.get(substitution && !cancelled ? "OrgHourTo" : "HourTo").getAsString()) endTime
); );
JsonElement subject; JsonElement subject;
@ -1873,7 +1929,7 @@ public class Librus implements OldEdziennikInterface {
} }
private void getGradesCategories() { private void getGradesCategories() {
if (!fullSync) { if (!fullSync && false) {
// cancel every not-full sync; no need to download categories again // 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 // every full sync it'll be enabled to make sure there are no grades - by getUnits
r("finish", "GradesCategories"); 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() { private void getPointGradesCategories() {
if (!fullSync || !enablePointGrades) { if (!fullSync || !enablePointGrades) {
// cancel every not-full sync; no need to download categories again // 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() { private void getBehaviourGrades() {
d(TAG, "Grades settings: "+enableStandardGrades+", "+enablePointGrades+", "+enableDescriptiveGrades); d(TAG, "Grades settings: "+enableStandardGrades+", "+enablePointGrades+", "+enableDescriptiveGrades);
if (!enableBehaviourGrades) { if (!enableBehaviourGrades) {
@ -2537,7 +2683,7 @@ public class Librus implements OldEdziennikInterface {
&& (el = obj.get("Id")) != null) { && (el = obj.get("Id")) != null) {
type = el.getAsInt(); type = el.getAsInt();
} }
/*EventType typeObject = app.db.eventTypeDao().getFullByIdNow(profileId, type); /*EventType typeObject = app.db.eventTypeDao().getByIdNow(profileId, type);
if (typeObject == null) { if (typeObject == null) {
getCustomTypes = true; getCustomTypes = true;
}*/ }*/
@ -2615,21 +2761,21 @@ public class Librus implements OldEdziennikInterface {
}); });
} }
private void getHomeworks() { private void getHomework() {
if (!premium) { if (!premium) {
r("finish", "Homeworks"); r("finish", "Homework");
return; return;
} }
callback.onActionStarted(R.string.sync_action_syncing_homework); callback.onActionStarted(R.string.sync_action_syncing_homework);
apiRequest("HomeWorkAssignments", data -> { apiRequest("HomeWorkAssignments", data -> {
if (data == null) { if (data == null) {
r("finish", "Homeworks"); r("finish", "Homework");
return; return;
} }
JsonArray homeworks = data.get("HomeWorkAssignments").getAsJsonArray(); JsonArray homeworkList = data.get("HomeWorkAssignments").getAsJsonArray();
//d("Got Grades: "+events.toString()); //d("Got Grades: "+events.toString());
try { try {
for (JsonElement homeworkEl : homeworks) { for (JsonElement homeworkEl : homeworkList) {
JsonObject homework = homeworkEl.getAsJsonObject(); JsonObject homework = homeworkEl.getAsJsonObject();
JsonElement el; JsonElement el;
@ -2680,7 +2826,7 @@ public class Librus implements OldEdziennikInterface {
eventList.add(eventObject); eventList.add(eventObject);
metadataList.add(new Metadata(profileId, Metadata.TYPE_EVENT, eventObject.id, profile.getEmpty(), profile.getEmpty(), addedDate.getInMillis())); 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) { catch (Exception e) {
finishWithError(new AppError(TAG, 2648, CODE_OTHER, e, data)); 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 SparseArray<Pair<Integer, String>> attendanceTypes = new SparseArray<>();
private void getAttendancesTypes() { private void getAttendanceTypes() {
callback.onActionStarted(R.string.sync_action_syncing_attendance_types); callback.onActionStarted(R.string.sync_action_syncing_attendance_types);
apiRequest("Attendances/Types", data -> { apiRequest("Attendances/Types", data -> {
if (data == null) { if (data == null) {
r("finish", "AttendancesTypes"); r("finish", "AttendanceTypes");
return; return;
} }
try { try {
@ -2800,7 +2946,7 @@ public class Librus implements OldEdziennikInterface {
) )
); );
} }
r("finish", "AttendancesTypes"); r("finish", "AttendanceTypes");
} }
catch (Exception e) { catch (Exception e) {
finishWithError(new AppError(TAG, 2782, CODE_OTHER, e, data)); finishWithError(new AppError(TAG, 2782, CODE_OTHER, e, data));
@ -2808,18 +2954,18 @@ public class Librus implements OldEdziennikInterface {
}); });
} }
private void getAttendances() { private void getAttendance() {
callback.onActionStarted(R.string.sync_action_syncing_attendances); callback.onActionStarted(R.string.sync_action_syncing_attendance);
apiRequest("Attendances"+(fullSync ? "" : "?dateFrom="+ Date.getToday().stepForward(0, -1, 0).getStringY_m_d()), data -> { apiRequest("Attendances"+(fullSync ? "" : "?dateFrom="+ Date.getToday().stepForward(0, -1, 0).getStringY_m_d()), data -> {
if (data == null) { if (data == null) {
r("finish", "Attendances"); r("finish", "Attendance");
return; return;
} }
try { 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(); JsonObject attendance = attendanceEl.getAsJsonObject();
int type = attendance.getAsJsonObject("Type").get("Id").getAsInt(); 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)); metadataList.add(new Metadata(profileId, Metadata.TYPE_ATTENDANCE, attendanceObject.id, profile.getEmpty(), profile.getEmpty(), addedDate));
} }
} }
r("finish", "Attendances"); r("finish", "Attendance");
} }
catch (Exception e) { catch (Exception e) {
finishWithError(new AppError(TAG, 2872, CODE_OTHER, e, data)); 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 SparseArray<String> teacherFreeDaysTypes = new SparseArray<>();
private void getTeacherFreeDaysTypes() { private void getTeacherFreeDaysTypes() {
if (!fullSync) {
r("finish", "TeacherFreeDaysTypes");
return;
}
callback.onActionStarted(R.string.sync_action_syncing_teacher_free_days_types); callback.onActionStarted(R.string.sync_action_syncing_teacher_free_days_types);
apiRequest("TeacherFreeDays/Types", data -> { apiRequest("TeacherFreeDays/Types", data -> {
if (data == null) { if (data == null) {
@ -3034,27 +3184,45 @@ public class Librus implements OldEdziennikInterface {
JsonObject freeDay = freeDayEl.getAsJsonObject(); JsonObject freeDay = freeDayEl.getAsJsonObject();
long id = freeDay.get("Id").getAsLong(); 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 dateFrom = Date.fromY_m_d(freeDay.get("DateFrom").getAsString());
Date dateTo = Date.fromY_m_d(freeDay.get("DateTo").getAsString()); Date dateTo = Date.fromY_m_d(freeDay.get("DateTo").getAsString());
int type = freeDay.getAsJsonObject("Type").get("Id").getAsInt(); Time timeFrom = null;
String topic = teacherFreeDaysTypes.get(type)+"\n"+(dateFrom.getValue() != dateTo.getValue() ? dateFrom.getFormattedString()+" - "+dateTo.getFormattedString() : ""); Time timeTo = null;
Event eventObject = new Event(
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, profileId,
id, id,
teacherId,
type,
dateFrom, dateFrom,
null, dateTo,
topic, timeFrom,
-1, timeTo
TYPE_TEACHER_ABSENCE,
false,
freeDay.getAsJsonObject("Teacher").get("Id").getAsLong(),
-1,
-1
); );
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"); 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() { private void getMessagesLogin() {
if (synergiaPassword == null) { if (synergiaPassword == null) {
// skip messages // skip messages
@ -3250,10 +3438,10 @@ public class Librus implements OldEdziennikInterface {
configurableEndpoints.put("Grades", new Endpoint("Grades",true, false, profile.getChangedEndpoints())); configurableEndpoints.put("Grades", new Endpoint("Grades",true, false, profile.getChangedEndpoints()));
configurableEndpoints.put("PointGrades", new Endpoint("PointGrades",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("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("LuckyNumbers", new Endpoint("LuckyNumbers",true, false, profile.getChangedEndpoints()));
configurableEndpoints.put("Notices", new Endpoint("Notices",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("Announcements", new Endpoint("Announcements",true, true, profile.getChangedEndpoints()));
configurableEndpoints.put("PtMeetings", new Endpoint("PtMeetings",true, true, profile.getChangedEndpoints())); configurableEndpoints.put("PtMeetings", new Endpoint("PtMeetings",true, true, profile.getChangedEndpoints()));
configurableEndpoints.put("TeacherFreeDays", new Endpoint("TeacherFreeDays",false, false, profile.getChangedEndpoints())); configurableEndpoints.put("TeacherFreeDays", new Endpoint("TeacherFreeDays",false, false, profile.getChangedEndpoints()));

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.api; package pl.szczodrzynski.edziennik.data.api;
import android.content.Context; import android.content.Context;
import android.graphics.Color; import android.graphics.Color;
@ -40,66 +40,66 @@ import im.wangchao.mhttp.callback.TextCallbackHandler;
import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.App;
import pl.szczodrzynski.edziennik.BuildConfig; import pl.szczodrzynski.edziennik.BuildConfig;
import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.R;
import pl.szczodrzynski.edziennik.api.interfaces.AttachmentGetCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.AttachmentGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface; import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface;
import pl.szczodrzynski.edziennik.api.interfaces.LoginCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.LoginCallback;
import pl.szczodrzynski.edziennik.api.interfaces.MessageGetCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.MessageGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.RecipientListGetCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.RecipientListGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
import pl.szczodrzynski.edziennik.datamodels.Attendance; import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
import pl.szczodrzynski.edziennik.datamodels.Event; import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
import pl.szczodrzynski.edziennik.datamodels.Grade; import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
import pl.szczodrzynski.edziennik.datamodels.GradeCategory; import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory;
import pl.szczodrzynski.edziennik.datamodels.Lesson; import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson;
import pl.szczodrzynski.edziennik.datamodels.LessonChange; import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
import pl.szczodrzynski.edziennik.datamodels.LoginStore; import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
import pl.szczodrzynski.edziennik.datamodels.LuckyNumber; import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber;
import pl.szczodrzynski.edziennik.datamodels.Message; import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
import pl.szczodrzynski.edziennik.datamodels.MessageFull; import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
import pl.szczodrzynski.edziennik.datamodels.MessageRecipient; import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient;
import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull; import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull;
import pl.szczodrzynski.edziennik.datamodels.Metadata; import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
import pl.szczodrzynski.edziennik.datamodels.Notice; import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
import pl.szczodrzynski.edziennik.datamodels.Profile; import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.datamodels.ProfileFull; import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
import pl.szczodrzynski.edziennik.datamodels.Subject; import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
import pl.szczodrzynski.edziennik.datamodels.Teacher; import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
import pl.szczodrzynski.edziennik.datamodels.Team; import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
import pl.szczodrzynski.edziennik.messages.MessagesComposeInfo; import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo;
import pl.szczodrzynski.edziennik.models.Date; import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.models.Endpoint; import pl.szczodrzynski.edziennik.utils.models.Endpoint;
import pl.szczodrzynski.edziennik.models.Time; import pl.szczodrzynski.edziennik.utils.models.Time;
import pl.szczodrzynski.edziennik.models.Week; import pl.szczodrzynski.edziennik.utils.models.Week;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_INVALID_LOGIN;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_MAINTENANCE; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_MAINTENANCE;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_CUSTOM; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_CUSTOM;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED;
import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_DEFAULT; import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_DEFAULT;
import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_EXAM; import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_EXAM;
import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_SHORT_QUIZ; import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_SHORT_QUIZ;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_FINAL; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_PROPOSED; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_FINAL; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_YEAR_PROPOSED; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK; import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_DELETED; import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_DELETED;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED; import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT; 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.bs;
import static pl.szczodrzynski.edziennik.utils.Utils.crc16; import static pl.szczodrzynski.edziennik.utils.Utils.crc16;
import static pl.szczodrzynski.edziennik.utils.Utils.d; import static pl.szczodrzynski.edziennik.utils.Utils.d;
import static pl.szczodrzynski.edziennik.utils.Utils.monthFromName; import static pl.szczodrzynski.edziennik.utils.Utils.monthFromName;
import static pl.szczodrzynski.edziennik.utils.Utils.strToInt; import static pl.szczodrzynski.edziennik.utils.Utils.strToInt;
public class Mobidziennik implements OldEdziennikInterface { public class Mobidziennik implements EdziennikInterface {
public Mobidziennik(App app) { public Mobidziennik(App app) {
this.app = app; this.app = app;
} }
@ -150,7 +150,7 @@ public class Mobidziennik implements OldEdziennikInterface {
private String loginPassword = null; private String loginPassword = null;
private int studentId = -1; 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) { private boolean prepare(@NonNull Context activityContext, @NonNull SyncCallback callback, int profileId, @Nullable Profile profile, @NonNull LoginStore loginStore) {
this.activityContext = activityContext; this.activityContext = activityContext;
@ -171,7 +171,7 @@ public class Mobidziennik implements OldEdziennikInterface {
return false; return false;
} }
this.studentId = profile == null ? -1 : profile.getStudentData("studentId", -1); 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"); fakeLogin = BuildConfig.DEBUG && loginUsername.toLowerCase().startsWith("fake");
teamList = profileId == -1 ? new ArrayList<>() : app.db.teamDao().getAllNow(profileId); teamList = profileId == -1 ? new ArrayList<>() : app.db.teamDao().getAllNow(profileId);
@ -204,7 +204,7 @@ public class Mobidziennik implements OldEdziennikInterface {
targetEndpoints = new ArrayList<>(); targetEndpoints = new ArrayList<>();
targetEndpoints.add("GetData"); targetEndpoints.add("GetData");
targetEndpoints.add("ProcessData"); targetEndpoints.add("ProcessData");
targetEndpoints.add("Attendances"); targetEndpoints.add("Attendance");
targetEndpoints.add("ClassCalendar"); targetEndpoints.add("ClassCalendar");
targetEndpoints.add("GradeDetails"); targetEndpoints.add("GradeDetails");
targetEndpoints.add("NoticeDetails"); targetEndpoints.add("NoticeDetails");
@ -256,8 +256,8 @@ public class Mobidziennik implements OldEdziennikInterface {
case FEATURE_NOTICES: case FEATURE_NOTICES:
targetEndpoints.add("NoticeDetails"); targetEndpoints.add("NoticeDetails");
break; break;
case FEATURE_ATTENDANCES: case FEATURE_ATTENDANCE:
targetEndpoints.add("Attendances"); targetEndpoints.add("Attendance");
break; break;
case FEATURE_MESSAGES_INBOX: case FEATURE_MESSAGES_INBOX:
targetEndpoints.add("MessagesInbox"); targetEndpoints.add("MessagesInbox");
@ -314,8 +314,8 @@ public class Mobidziennik implements OldEdziennikInterface {
case "NoticeDetails": case "NoticeDetails":
getNoticeDetails(); getNoticeDetails();
break; break;
case "Attendances": case "Attendance":
getAttendances(); getAttendance();
break; break;
case "Messages": case "Messages":
getAllMessages(); getAllMessages();
@ -597,7 +597,7 @@ public class Mobidziennik implements OldEdziennikInterface {
processLessons(table); processLessons(table);
} }
if (i == 16) { if (i == 16) {
processAttendances(table); processAttendance(table);
} }
if (i == 17) { if (i == 17) {
processNotices(table); processNotices(table);
@ -609,7 +609,7 @@ public class Mobidziennik implements OldEdziennikInterface {
processEvents(table); processEvents(table);
} }
if (i == 23) { if (i == 23) {
processHomeworks(table); processHomework(table);
} }
if (i == 24) { if (i == 24) {
processTimetable(table); processTimetable(table);
@ -794,7 +794,7 @@ public class Mobidziennik implements OldEdziennikInterface {
switch (e.tagName()) { switch (e.tagName()) {
case "div": { case "div": {
//d(TAG, "Outer HTML "+e.outerHtml()); //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()) { if (matcher.find()) {
subjectName = matcher.group(1); subjectName = matcher.group(1);
} }
@ -1051,20 +1051,20 @@ public class Mobidziennik implements OldEdziennikInterface {
this.lessonId = lessonId; this.lessonId = lessonId;
} }
} }
private Date attendancesCheckDate = Week.getWeekStart(); private Date attendanceCheckDate = Week.getWeekStart();
private void getAttendances() { private void getAttendance() {
r("finish", "Attendances"); r("finish", "Attendance");
// TODO: 2019-09-10 please download attendances from /dziennik/frekwencja. /mobile does not work above v13.0 // TODO: 2019-09-10 please download attendance from /dziennik/frekwencja. /mobile does not work above v13.0
if (true) { if (true) {
return; return;
} }
callback.onActionStarted(R.string.sync_action_syncing_attendances); callback.onActionStarted(R.string.sync_action_syncing_attendance);
d(TAG, "Get attendances for week "+attendancesCheckDate.getStringY_m_d()); d(TAG, "Get attendance for week "+ attendanceCheckDate.getStringY_m_d());
Request.builder() Request.builder()
.url(fakeLogin ? "https://szkolny.eu/mobimobi/mobi_mod_frekwencja.php" : "https://" + loginServerName + ".mobidziennik.pl/mobile/frekwencja") .url(fakeLogin ? "https://szkolny.eu/mobimobi/mobi_mod_frekwencja.php" : "https://" + loginServerName + ".mobidziennik.pl/mobile/frekwencja")
.userAgent(System.getProperty("http.agent")) .userAgent(System.getProperty("http.agent"))
.addParameter("uczen", studentId) .addParameter("uczen", studentId)
.addParameter("data_poniedzialek", attendancesCheckDate.getStringY_m_d()) .addParameter("data_poniedzialek", attendanceCheckDate.getStringY_m_d())
.post() .post()
.callback(new TextCallbackHandler() { .callback(new TextCallbackHandler() {
@Override @Override
@ -1076,11 +1076,11 @@ public class Mobidziennik implements OldEdziennikInterface {
public void onSuccess(String data, Response response) { public void onSuccess(String data, Response response) {
// just skip any failures here // just skip any failures here
if (data == null || data.equals("")) { if (data == null || data.equals("")) {
r("finish", "Attendances"); r("finish", "Attendance");
return; return;
} }
if (data.contains("nie-pamietam-hasla")) { if (data.contains("nie-pamietam-hasla")) {
r("finish", "Attendances"); r("finish", "Attendance");
return; return;
} }
@ -1135,7 +1135,7 @@ public class Mobidziennik implements OldEdziennikInterface {
continue; continue;
AttendanceLessonRange range = ranges.get(currentIndex); 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); long addedDate = date.combineWith(range.startTime);
int markerIndex = 0; int markerIndex = 0;
@ -1201,7 +1201,7 @@ public class Mobidziennik implements OldEdziennikInterface {
markerIndex++; markerIndex++;
attendanceList.add(attendanceObject); attendanceList.add(attendanceObject);
if (attendanceObject.type != TYPE_PRESENT) { 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)); 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) { } catch (Exception e) {
Crashlytics.logException(e); Crashlytics.logException(e);
e.printStackTrace(); e.printStackTrace();
if (onlyFeature == FEATURE_ATTENDANCES) if (onlyFeature == FEATURE_ATTENDANCE)
finishWithError(new AppError(TAG, 955, CODE_OTHER, response, e, data)); finishWithError(new AppError(TAG, 955, CODE_OTHER, response, e, data));
else else
r("finish", "Attendances"); r("finish", "Attendance");
return; return;
} }
if (onlyFeature == FEATURE_ATTENDANCES) { if (onlyFeature == FEATURE_ATTENDANCE) {
// syncing attendances exclusively // syncing attendance exclusively
if (attendancesLastSync == 0) { if (attendanceLastSync == 0) {
// first sync - get attendances until it's start of the school year // first sync - get attendance until it's start of the school year
attendancesLastSync = profile.getSemesterStart(1).getInMillis(); attendanceLastSync = profile.getSemesterStart(1).getInMillis();
} }
Date lastSyncDate = Date.fromMillis(attendancesLastSync); Date lastSyncDate = Date.fromMillis(attendanceLastSync);
lastSyncDate.stepForward(0, 0, -7); lastSyncDate.stepForward(0, 0, -7);
if (lastSyncDate.getValue() < attendancesCheckDate.getValue()) { if (lastSyncDate.getValue() < attendanceCheckDate.getValue()) {
attendancesCheckDate.stepForward(0, 0, -7); attendanceCheckDate.stepForward(0, 0, -7);
r("get", "Attendances"); r("get", "Attendance");
} }
else { else {
profile.putStudentData("attendancesLastSync", System.currentTimeMillis()); profile.putStudentData("attendanceLastSync", System.currentTimeMillis());
r("finish", "Attendances"); r("finish", "Attendance");
} }
} }
else { else {
if (attendancesLastSync != 0) { if (attendanceLastSync != 0) {
// not a first sync // not a first sync
Date lastSyncDate = Date.fromMillis(attendancesLastSync); Date lastSyncDate = Date.fromMillis(attendanceLastSync);
lastSyncDate.stepForward(0, 0, 2); lastSyncDate.stepForward(0, 0, 2);
if (lastSyncDate.getValue() >= attendancesCheckDate.getValue()) { if (lastSyncDate.getValue() >= attendanceCheckDate.getValue()) {
profile.putStudentData("attendancesLastSync", System.currentTimeMillis()); 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); String[] user = userStr.split("\\|", Integer.MAX_VALUE);
teachersMap.put(strToInt(user[0]), user[5]+" "+user[4]); teachersMap.put(strToInt(user[0]), user[5].trim()+" "+user[4].trim());
teacherList.add(new Teacher(profileId, strToInt(user[0]), user[4], user[5])); 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) if (true)
return; return;
String[] attendances = table.split("\n"); String[] attendanceList = table.split("\n");
for (String attendanceStr: attendances) for (String attendanceStr: attendanceList)
{ {
if (attendanceStr.isEmpty()) { if (attendanceStr.isEmpty()) {
continue; continue;
@ -1718,7 +1718,7 @@ public class Mobidziennik implements OldEdziennikInterface {
mobiLesson.date, mobiLesson.date,
mobiLesson.startTime, mobiLesson.startTime,
type); type);
attendanceList.add(attendanceObject); this.attendanceList.add(attendanceObject);
metadataList.add(new Metadata(profileId, Metadata.TYPE_ATTENDANCE, attendanceObject.id, profile.getEmpty(), profile.getEmpty(), System.currentTimeMillis())); 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(); Date today = Date.getToday();
for (String homeworkStr: homeworks) for (String homeworkStr: homeworkList)
{ {
if (homeworkStr.isEmpty()) { if (homeworkStr.isEmpty()) {
continue; continue;
@ -1958,7 +1958,7 @@ public class Mobidziennik implements OldEdziennikInterface {
for(int i = 0; i < teachersMap.size(); i++) { for(int i = 0; i < teachersMap.size(); i++) {
int key = teachersMap.keyAt(i); int key = teachersMap.keyAt(i);
String str = teachersMap.valueAt(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; lessonObject.teacherId = key;
} }
} }
@ -2001,7 +2001,7 @@ public class Mobidziennik implements OldEdziennikInterface {
for(int i = 0; i < teachersMap.size(); i++) { for(int i = 0; i < teachersMap.size(); i++) {
int key = teachersMap.keyAt(i); int key = teachersMap.keyAt(i);
String str = teachersMap.valueAt(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; 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.content.Context;
import android.os.Build; import android.os.Build;
@ -35,57 +35,57 @@ import okhttp3.OkHttpClient;
import okio.Buffer; import okio.Buffer;
import pl.szczodrzynski.edziennik.App; import pl.szczodrzynski.edziennik.App;
import pl.szczodrzynski.edziennik.R; import pl.szczodrzynski.edziennik.R;
import pl.szczodrzynski.edziennik.api.interfaces.AttachmentGetCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.AttachmentGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.OldEdziennikInterface; import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface;
import pl.szczodrzynski.edziennik.api.interfaces.LoginCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.LoginCallback;
import pl.szczodrzynski.edziennik.api.interfaces.MessageGetCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.MessageGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.RecipientListGetCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.RecipientListGetCallback;
import pl.szczodrzynski.edziennik.api.interfaces.SyncCallback; import pl.szczodrzynski.edziennik.data.api.interfaces.SyncCallback;
import pl.szczodrzynski.edziennik.datamodels.Attendance; import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance;
import pl.szczodrzynski.edziennik.datamodels.Event; import pl.szczodrzynski.edziennik.data.db.modules.events.Event;
import pl.szczodrzynski.edziennik.datamodels.Grade; import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade;
import pl.szczodrzynski.edziennik.datamodels.GradeCategory; import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory;
import pl.szczodrzynski.edziennik.datamodels.Lesson; import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson;
import pl.szczodrzynski.edziennik.datamodels.LessonChange; import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange;
import pl.szczodrzynski.edziennik.datamodels.LoginStore; import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
import pl.szczodrzynski.edziennik.datamodels.Message; import pl.szczodrzynski.edziennik.data.db.modules.messages.Message;
import pl.szczodrzynski.edziennik.datamodels.MessageFull; import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
import pl.szczodrzynski.edziennik.datamodels.MessageRecipient; import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient;
import pl.szczodrzynski.edziennik.datamodels.MessageRecipientFull; import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipientFull;
import pl.szczodrzynski.edziennik.datamodels.Metadata; import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata;
import pl.szczodrzynski.edziennik.datamodels.Notice; import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice;
import pl.szczodrzynski.edziennik.datamodels.Profile; import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.datamodels.ProfileFull; import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
import pl.szczodrzynski.edziennik.datamodels.Subject; import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject;
import pl.szczodrzynski.edziennik.datamodels.Teacher; import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
import pl.szczodrzynski.edziennik.datamodels.Team; import pl.szczodrzynski.edziennik.data.db.modules.teams.Team;
import pl.szczodrzynski.edziennik.messages.MessagesComposeInfo; import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo;
import pl.szczodrzynski.edziennik.models.Date; import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.models.Endpoint; import pl.szczodrzynski.edziennik.utils.models.Endpoint;
import pl.szczodrzynski.edziennik.models.Time; import pl.szczodrzynski.edziennik.utils.models.Time;
import pl.szczodrzynski.edziennik.models.Week; import pl.szczodrzynski.edziennik.utils.models.Week;
import pl.szczodrzynski.edziennik.utils.Utils; import pl.szczodrzynski.edziennik.utils.Utils;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_OTHER; import static pl.szczodrzynski.edziennik.data.api.AppError.CODE_OTHER;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_ABSENT_EXCUSED; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_ABSENT_EXCUSED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_BELATED_EXCUSED; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_BELATED_EXCUSED;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_PRESENT;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_RELEASED; import static pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance.TYPE_RELEASED;
import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_EXAM; import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_EXAM;
import static pl.szczodrzynski.edziennik.datamodels.Event.TYPE_SHORT_QUIZ; import static pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_SHORT_QUIZ;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_FINAL; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER1_PROPOSED; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_FINAL; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_FINAL;
import static pl.szczodrzynski.edziennik.datamodels.Grade.TYPE_SEMESTER2_PROPOSED; import static pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER2_PROPOSED;
import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED; import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED;
import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE; import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE;
import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_VULCAN; import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_VULCAN;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_RECEIVED; import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED;
import static pl.szczodrzynski.edziennik.datamodels.Message.TYPE_SENT; import static pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT;
import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_MESSAGE; import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_MESSAGE;
import static pl.szczodrzynski.edziennik.datamodels.Notice.TYPE_NEUTRAL; 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.c;
import static pl.szczodrzynski.edziennik.utils.Utils.crc16; import static pl.szczodrzynski.edziennik.utils.Utils.crc16;
import static pl.szczodrzynski.edziennik.utils.Utils.d; 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.getVulcanGradeColor;
import static pl.szczodrzynski.edziennik.utils.Utils.intToStr; import static pl.szczodrzynski.edziennik.utils.Utils.intToStr;
public class Vulcan implements OldEdziennikInterface { public class Vulcan implements EdziennikInterface {
public Vulcan(App app) { public Vulcan(App app) {
this.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 = "mobile-api/Uczen.v3.Uczen/Oceny";
private static final String ENDPOINT_GRADES_PROPOSITIONS = "mobile-api/Uczen.v3.Uczen/OcenyPodsumowanie"; 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_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_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_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_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 ENDPOINT_PUSH = "mobile-api/Uczen.v3.Uczen/UstawPushToken";
private static final String userAgent = "MobileUserAgent"; private static final String userAgent = "MobileUserAgent";
@ -258,9 +259,9 @@ public class Vulcan implements OldEdziennikInterface {
targetEndpoints.add("Grades"); targetEndpoints.add("Grades");
targetEndpoints.add("ProposedGrades"); targetEndpoints.add("ProposedGrades");
targetEndpoints.add("Events"); targetEndpoints.add("Events");
targetEndpoints.add("Homeworks"); targetEndpoints.add("Homework");
targetEndpoints.add("Notices"); targetEndpoints.add("Notices");
targetEndpoints.add("Attendances"); targetEndpoints.add("Attendance");
targetEndpoints.add("MessagesInbox"); targetEndpoints.add("MessagesInbox");
targetEndpoints.add("MessagesOutbox"); targetEndpoints.add("MessagesOutbox");
targetEndpoints.add("Finish"); targetEndpoints.add("Finish");
@ -296,14 +297,14 @@ public class Vulcan implements OldEdziennikInterface {
targetEndpoints.add("Grades"); targetEndpoints.add("Grades");
targetEndpoints.add("ProposedGrades"); targetEndpoints.add("ProposedGrades");
break; break;
case FEATURE_HOMEWORKS: case FEATURE_HOMEWORK:
targetEndpoints.add("Homeworks"); targetEndpoints.add("Homework");
break; break;
case FEATURE_NOTICES: case FEATURE_NOTICES:
targetEndpoints.add("Notices"); targetEndpoints.add("Notices");
break; break;
case FEATURE_ATTENDANCES: case FEATURE_ATTENDANCE:
targetEndpoints.add("Attendances"); targetEndpoints.add("Attendance");
break; break;
case FEATURE_MESSAGES_INBOX: case FEATURE_MESSAGES_INBOX:
targetEndpoints.add("MessagesInbox"); targetEndpoints.add("MessagesInbox");
@ -379,14 +380,14 @@ public class Vulcan implements OldEdziennikInterface {
case "Events": case "Events":
getEvents(); getEvents();
break; break;
case "Homeworks": case "Homework":
getHomeworks(); getHomework();
break; break;
case "Notices": case "Notices":
getNotices(); getNotices();
break; break;
case "Attendances": case "Attendance":
getAttendances(); getAttendance();
break; break;
case "MessagesInbox": case "MessagesInbox":
getMessagesInbox(); getMessagesInbox();
@ -427,8 +428,10 @@ public class Vulcan implements OldEdziennikInterface {
app.db.noticeDao().clearForSemester(profileId, studentSemesterNumber); app.db.noticeDao().clearForSemester(profileId, studentSemesterNumber);
app.db.noticeDao().addAll(noticeList); app.db.noticeDao().addAll(noticeList);
} }
if (attendanceList.size() > 0) if (attendanceList.size() > 0) {
app.db.attendanceDao().clearAfterDate(profileId, getCurrentSemesterStartDate());
app.db.attendanceDao().addAll(attendanceList); app.db.attendanceDao().addAll(attendanceList);
}
if (messageList.size() > 0) if (messageList.size() > 0)
app.db.messageDao().addAllIgnore(messageList); app.db.messageDao().addAllIgnore(messageList);
if (messageRecipientList.size() > 0) if (messageRecipientList.size() > 0)
@ -742,7 +745,7 @@ public class Vulcan implements OldEdziennikInterface {
studentLoginId = account.get("UzytkownikLoginId").getAsInt(); studentLoginId = account.get("UzytkownikLoginId").getAsInt();
studentClassId = account.get("IdOddzial").getAsInt(); studentClassId = account.get("IdOddzial").getAsInt();
studentSemesterId = account.get("IdOkresKlasyfikacyjny").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("userName", account.get("UzytkownikNazwa").getAsString());
targetProfile.putStudentData("schoolName", schoolName); targetProfile.putStudentData("schoolName", schoolName);
targetProfile.putStudentData("schoolSymbol", schoolSymbol); targetProfile.putStudentData("schoolSymbol", schoolSymbol);
@ -1149,7 +1152,7 @@ public class Vulcan implements OldEdziennikInterface {
int subjectId = grade.get("IdPrzedmiot").getAsInt(); int subjectId = grade.get("IdPrzedmiot").getAsInt();
int teacherId = grade.get("IdPracownikD").getAsInt(); int teacherId = grade.get("IdPracownikD").getAsInt();
int categoryId = grade.get("IdKategoria").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; float finalValue = 0.0f;
String finalName; String finalName;
@ -1240,9 +1243,9 @@ public class Vulcan implements OldEdziennikInterface {
Grade gradeObject = new Grade( Grade gradeObject = new Grade(
profileId, profileId,
id, id,
finalDescription,
color,
category, category,
color,
finalDescription,
finalName, finalName,
finalValue, finalValue,
weight, weight,
@ -1371,7 +1374,7 @@ public class Vulcan implements OldEdziennikInterface {
}); });
} }
private void getHomeworks() { private void getHomework() {
callback.onActionStarted(R.string.sync_action_syncing_homework); callback.onActionStarted(R.string.sync_action_syncing_homework);
JsonObject json = new JsonObject(); JsonObject json = new JsonObject();
json.addProperty("DataPoczatkowa", profile.getEmpty() ? getCurrentSemesterStartDate().getStringY_m_d() : oneMonthBack.getStringY_m_d()); 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("IdOddzial", studentClassId);
json.addProperty("IdUczen", studentId); json.addProperty("IdUczen", studentId);
json.addProperty("IdOkresKlasyfikacyjny", studentSemesterId); json.addProperty("IdOkresKlasyfikacyjny", studentSemesterId);
apiRequest(schoolSymbol+"/"+ENDPOINT_HOMEWORKS, json, result -> { apiRequest(schoolSymbol+"/"+ ENDPOINT_HOMEWORK, json, result -> {
JsonArray homeworks = result.getAsJsonArray("Data"); JsonArray homeworkList = result.getAsJsonArray("Data");
for (JsonElement homeworkEl: homeworks) { for (JsonElement homeworkEl: homeworkList) {
JsonObject homework = homeworkEl.getAsJsonObject(); JsonObject homework = homeworkEl.getAsJsonObject();
int id = homework.get("Id").getAsInt(); int id = homework.get("Id").getAsInt();
@ -1416,7 +1419,7 @@ public class Vulcan implements OldEdziennikInterface {
eventList.add(eventObject); eventList.add(eventObject);
metadataList.add(new Metadata(profileId, Metadata.TYPE_HOMEWORK, eventObject.id, profile.getEmpty(), profile.getEmpty(), System.currentTimeMillis())); 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() { private void getAttendance() {
callback.onActionStarted(R.string.sync_action_syncing_attendances); callback.onActionStarted(R.string.sync_action_syncing_attendance);
JsonObject json = new JsonObject(); 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("DataKoncowa", getCurrentSemesterEndDate().getStringY_m_d());
json.addProperty("IdOddzial", studentClassId); json.addProperty("IdOddzial", studentClassId);
json.addProperty("IdUczen", studentId); json.addProperty("IdUczen", studentId);
json.addProperty("IdOkresKlasyfikacyjny", studentSemesterId); json.addProperty("IdOkresKlasyfikacyjny", studentSemesterId);
apiRequest(schoolSymbol+"/"+ENDPOINT_ATTENDANCES, json, result -> { apiRequest(schoolSymbol+"/"+ ENDPOINT_ATTENDANCE, json, result -> {
JsonArray attendances = result.getAsJsonObject("Data").getAsJsonArray("Frekwencje"); JsonArray attendanceList = result.getAsJsonObject("Data").getAsJsonArray("Frekwencje");
for (JsonElement attendanceEl: attendances) { for (JsonElement attendanceEl: attendanceList) {
JsonObject attendance = attendanceEl.getAsJsonObject(); JsonObject attendance = attendanceEl.getAsJsonObject();
Pair<Integer, String> attendanceCategory = attendanceCategories.get(attendance.get("IdKategoria").getAsInt()); 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, lessonRanges.get(attendance.get("IdPoraLekcji").getAsInt()).first,
type); type);
attendanceList.add(attendanceObject); this.attendanceList.add(attendanceObject);
if (attendanceObject.type != TYPE_PRESENT) { if (attendanceObject.type != TYPE_PRESENT) {
metadataList.add(new Metadata(profileId, Metadata.TYPE_ATTENDANCE, attendanceObject.id, profile.getEmpty(), profile.getEmpty(), attendanceObject.lessonDate.combineWith(attendanceObject.startTime))); 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() { private void getMessagesInbox() {
callback.onActionStarted(R.string.sync_action_syncing_messages_inbox); callback.onActionStarted(R.string.sync_action_syncing_messages_inbox);
JsonObject json = new JsonObject(); JsonObject json = new JsonObject();
json.addProperty("DataPoczatkowa", profile.getEmpty() ? getCurrentSemesterStartDate().getInUnix() : oneMonthBack.getInUnix()); json.addProperty("DataPoczatkowa", true ? getCurrentSemesterStartDate().getInUnix() : oneMonthBack.getInUnix());
json.addProperty("DataKoncowa", Date.getToday().getInUnix()); json.addProperty("DataKoncowa", getCurrentSemesterEndDate().getInUnix());
json.addProperty("LoginId", studentLoginId); json.addProperty("LoginId", studentLoginId);
json.addProperty("IdUczen", studentId); json.addProperty("IdUczen", studentId);
apiRequest(schoolSymbol+"/"+ENDPOINT_MESSAGES_RECEIVED, json, result -> { 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); callback.onActionStarted(R.string.sync_action_syncing_messages_outbox);
JsonObject json = new JsonObject(); JsonObject json = new JsonObject();
json.addProperty("DataPoczatkowa", profile.getEmpty() ? getCurrentSemesterStartDate().getInUnix() : oneMonthBack.getInUnix()); json.addProperty("DataPoczatkowa", true ? getCurrentSemesterStartDate().getInUnix() : oneMonthBack.getInUnix());
json.addProperty("DataKoncowa", Date.getToday().getInUnix()); json.addProperty("DataKoncowa", getCurrentSemesterEndDate().getInUnix());
json.addProperty("LoginId", studentLoginId); json.addProperty("LoginId", studentLoginId);
json.addProperty("IdUczen", studentId); json.addProperty("IdUczen", studentId);
apiRequest(schoolSymbol+"/"+ENDPOINT_MESSAGES_SENT, json, result -> { apiRequest(schoolSymbol+"/"+ENDPOINT_MESSAGES_SENT, json, result -> {
@ -1632,6 +1635,15 @@ public class Vulcan implements OldEdziennikInterface {
recipient.fullName = profile.getStudentNameLong(); recipient.fullName = profile.getStudentNameLong();
} }
if (!message.seen) { 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); app.db.metadataDao().setSeen(profile.getId(), message, true);
if (message.type != TYPE_SENT) { if (message.type != TYPE_SENT) {
app.db.messageRecipientDao().add(new MessageRecipient(profile.getId(), -1, -1, System.currentTimeMillis(), message.id)); 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; 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 android.content.Context;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -6,15 +6,15 @@ import androidx.annotation.Nullable;
import java.util.Map; import java.util.Map;
import pl.szczodrzynski.edziennik.datamodels.LoginStore; import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
import pl.szczodrzynski.edziennik.datamodels.Message; import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull;
import pl.szczodrzynski.edziennik.datamodels.MessageFull; import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.datamodels.Profile; import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
import pl.szczodrzynski.edziennik.datamodels.ProfileFull; import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher;
import pl.szczodrzynski.edziennik.messages.MessagesComposeInfo; import pl.szczodrzynski.edziennik.ui.modules.messages.MessagesComposeInfo;
import pl.szczodrzynski.edziennik.models.Endpoint; import pl.szczodrzynski.edziennik.utils.models.Endpoint;
public interface OldEdziennikInterface { public interface EdziennikInterface {
/** /**
* Sync all Edziennik data. * Sync all Edziennik data.
@ -34,9 +34,9 @@ public interface OldEdziennikInterface {
int FEATURE_TIMETABLE = 1; int FEATURE_TIMETABLE = 1;
int FEATURE_AGENDA = 2; int FEATURE_AGENDA = 2;
int FEATURE_GRADES = 3; int FEATURE_GRADES = 3;
int FEATURE_HOMEWORKS = 4; int FEATURE_HOMEWORK = 4;
int FEATURE_NOTICES = 5; int FEATURE_NOTICES = 5;
int FEATURE_ATTENDANCES = 6; int FEATURE_ATTENDANCE = 6;
int FEATURE_MESSAGES_INBOX = 7; int FEATURE_MESSAGES_INBOX = 7;
int FEATURE_MESSAGES_OUTBOX = 8; int FEATURE_MESSAGES_OUTBOX = 8;
int FEATURE_ANNOUNCEMENTS = 9; int FEATURE_ANNOUNCEMENTS = 9;
@ -60,7 +60,7 @@ public interface OldEdziennikInterface {
* *
* Updates a database-saved {@code teacherList} with {@code loginId}s. * 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. * 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 android.content.Context;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import pl.szczodrzynski.edziennik.api.AppError; import pl.szczodrzynski.edziennik.data.api.AppError;
public interface ErrorCallback { public interface ErrorCallback {
void onError(Context activityContext, @NonNull AppError error); 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 { public interface LoginCallback {
void onSuccess(); 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.data.db.modules.messages.MessageFull;
import pl.szczodrzynski.edziennik.datamodels.MessageFull;
/** /**
* Callback containing a {@link MessageFull} which already has its {@code body} and {@code recipients}. * 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; 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 android.content.Context;
import java.util.List; import java.util.List;
import androidx.annotation.StringRes; import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
import pl.szczodrzynski.edziennik.api.AppError; import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
import pl.szczodrzynski.edziennik.datamodels.LoginStore;
import pl.szczodrzynski.edziennik.datamodels.Profile;
import pl.szczodrzynski.edziennik.datamodels.ProfileFull;
/** /**
* A callback used for error reporting, progress information. * 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.sqlite.db.SupportSQLiteDatabase;
import androidx.room.Database; import androidx.room.Database;
import androidx.room.Room; import androidx.room.Room;
import androidx.room.RoomDatabase; import androidx.room.RoomDatabase;
import androidx.room.TypeConverters; import androidx.room.TypeConverters;
import androidx.room.migration.Migration; 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; import android.content.Context;
@ -14,6 +63,7 @@ import android.content.Context;
Grade.class, Grade.class,
//GradeCategory.class, //GradeCategory.class,
Teacher.class, Teacher.class,
TeacherAbsence.class,
Subject.class, Subject.class,
Notice.class, Notice.class,
Lesson.class, Lesson.class,
@ -31,7 +81,7 @@ import android.content.Context;
Message.class, Message.class,
MessageRecipient.class, MessageRecipient.class,
DebugLog.class, DebugLog.class,
Metadata.class}, version = 52) Metadata.class}, version = 54)
@TypeConverters({ @TypeConverters({
ConverterTime.class, ConverterTime.class,
ConverterDate.class, ConverterDate.class,
@ -43,6 +93,7 @@ public abstract class AppDb extends RoomDatabase {
public abstract GradeDao gradeDao(); public abstract GradeDao gradeDao();
//public abstract GradeCategoryDao gradeCategoryDao(); //public abstract GradeCategoryDao gradeCategoryDao();
public abstract TeacherDao teacherDao(); public abstract TeacherDao teacherDao();
public abstract TeacherAbsenceDao teacherAbsenceDao();
public abstract SubjectDao subjectDao(); public abstract SubjectDao subjectDao();
public abstract NoticeDao noticeDao(); public abstract NoticeDao noticeDao();
public abstract LessonDao lessonDao(); public abstract LessonDao lessonDao();
@ -486,6 +537,27 @@ public abstract class AppDb extends RoomDatabase {
database.execSQL("ALTER TABLE teachers ADD teacherTypeDescription TEXT DEFAULT NULL"); 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) { public static AppDb getDatabase(final Context context) {
@ -535,7 +607,10 @@ public abstract class AppDb extends RoomDatabase {
MIGRATION_48_49, MIGRATION_48_49,
MIGRATION_49_50, MIGRATION_49_50,
MIGRATION_50_51, MIGRATION_50_51,
MIGRATION_51_52) MIGRATION_51_52,
MIGRATION_52_53,
MIGRATION_53_54
)
.allowMainThreadQueries() .allowMainThreadQueries()
//.fallbackToDestructiveMigration() //.fallbackToDestructiveMigration()
.build(); .build();

View File

@ -1,8 +1,8 @@
package pl.szczodrzynski.edziennik.datamodels; package pl.szczodrzynski.edziennik.data.db.converters;
import androidx.room.TypeConverter; import androidx.room.TypeConverter;
import pl.szczodrzynski.edziennik.models.Date; import pl.szczodrzynski.edziennik.utils.models.Date;
public class ConverterDate { 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; 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.Gson;
import com.google.gson.reflect.TypeToken; 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.Gson;
import com.google.gson.reflect.TypeToken; 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 androidx.room.TypeConverter;
import pl.szczodrzynski.edziennik.models.Time; import pl.szczodrzynski.edziennik.utils.models.Time;
public class ConverterTime { 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.annotation.Nullable;
import androidx.room.ColumnInfo; import androidx.room.ColumnInfo;
import androidx.room.Entity; import androidx.room.Entity;
import androidx.room.Ignore; import androidx.room.Ignore;
import androidx.room.Index; import androidx.room.Index;
import pl.szczodrzynski.edziennik.models.Date; import pl.szczodrzynski.edziennik.utils.models.Date;
@Entity(tableName = "announcements", @Entity(tableName = "announcements",
primaryKeys = {"profileId", "announcementId"}, 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; import java.util.List;
@ -11,7 +11,9 @@ import androidx.room.RawQuery;
import androidx.sqlite.db.SimpleSQLiteQuery; import androidx.sqlite.db.SimpleSQLiteQuery;
import androidx.sqlite.db.SupportSQLiteQuery; 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 @Dao
public abstract class AnnouncementDao { 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 class AnnouncementFull extends Announcement {
public String teacherFullName = ""; 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.annotation.NonNull;
import androidx.room.ColumnInfo; import androidx.room.ColumnInfo;
@ -6,8 +6,8 @@ import androidx.room.Entity;
import androidx.room.Ignore; import androidx.room.Ignore;
import androidx.room.Index; import androidx.room.Index;
import pl.szczodrzynski.edziennik.models.Date; import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.models.Time; import pl.szczodrzynski.edziennik.utils.models.Time;
@Entity(tableName = "attendances", @Entity(tableName = "attendances",
primaryKeys = {"profileId", "attendanceId", "attendanceLessonDate", "attendanceStartTime"}, 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.lifecycle.LiveData;
import androidx.sqlite.db.SimpleSQLiteQuery; import androidx.sqlite.db.SimpleSQLiteQuery;
@ -8,12 +8,11 @@ import androidx.room.Insert;
import androidx.room.OnConflictStrategy; import androidx.room.OnConflictStrategy;
import androidx.room.Query; import androidx.room.Query;
import androidx.room.RawQuery; import androidx.room.RawQuery;
import pl.szczodrzynski.edziennik.models.Date; import pl.szczodrzynski.edziennik.utils.models.Date;
import java.util.List; import java.util.List;
import static pl.szczodrzynski.edziennik.datamodels.Attendance.TYPE_PRESENT; import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_ATTENDANCE;
import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_ATTENDANCE;
@Dao @Dao
public abstract class AttendanceDao { 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 class AttendanceFull extends Attendance {
public String teacherFullName = ""; 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.Entity;
import androidx.room.Index;
import androidx.room.PrimaryKey; import androidx.room.PrimaryKey;
import static pl.szczodrzynski.edziennik.utils.Utils.d; 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.Dao;
import androidx.room.Insert; 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.ColumnInfo;
import androidx.room.Entity; import androidx.room.Entity;
import androidx.room.Ignore; import androidx.room.Ignore;
import androidx.room.Index; import androidx.room.Index;
import pl.szczodrzynski.edziennik.models.Date; import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.models.Time; import pl.szczodrzynski.edziennik.utils.models.Time;
@Entity(tableName = "events", @Entity(tableName = "events",
primaryKeys = {"profileId", "eventId"}, 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.lifecycle.LiveData;
import androidx.sqlite.db.SimpleSQLiteQuery; import androidx.sqlite.db.SimpleSQLiteQuery;
@ -14,12 +14,12 @@ import android.util.Log;
import java.util.List; import java.util.List;
import pl.szczodrzynski.edziennik.models.Date; import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.models.Time; import pl.szczodrzynski.edziennik.utils.models.Time;
import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_EVENT; import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_EVENT;
import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_HOMEWORK; import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_HOMEWORK;
import static pl.szczodrzynski.edziennik.datamodels.Metadata.TYPE_LESSON_CHANGE; import static pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.TYPE_LESSON_CHANGE;
@Dao @Dao
public abstract class EventDao { 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 class EventFull extends Event {
public String typeName = ""; 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; import android.graphics.Color;

View File

@ -1,4 +1,4 @@
package pl.szczodrzynski.edziennik.datamodels; package pl.szczodrzynski.edziennik.data.db.modules.events;
import java.util.List; 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.Entity;
import androidx.room.Ignore; 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; 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 class FeedbackMessageWithCount extends FeedbackMessage {
public int messageCount = 0; 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.ColumnInfo;
import androidx.room.Entity; 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.ArrayList;
import java.util.List; 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; 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.lifecycle.LiveData;
import androidx.sqlite.db.SimpleSQLiteQuery; import androidx.sqlite.db.SimpleSQLiteQuery;
@ -14,7 +14,7 @@ import android.util.SparseIntArray;
import java.util.List; 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 @Dao
public abstract class GradeDao { 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 class GradeFull extends Grade {
//public String category = ""; //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; import java.util.List;
@ -8,8 +8,8 @@ import androidx.room.Ignore;
import androidx.room.Index; import androidx.room.Index;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import pl.szczodrzynski.edziennik.models.Time; import pl.szczodrzynski.edziennik.utils.models.Time;
import pl.szczodrzynski.edziennik.models.Week; import pl.szczodrzynski.edziennik.utils.models.Week;
@Entity(tableName = "lessons", @Entity(tableName = "lessons",
primaryKeys = {"profileId", "lessonWeekDay", "lessonStartTime", "lessonEndTime"}, 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.ColumnInfo;
import androidx.room.Entity; import androidx.room.Entity;
@ -7,8 +7,8 @@ import androidx.annotation.NonNull;
import java.util.List; import java.util.List;
import pl.szczodrzynski.edziennik.models.Date; import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.models.Time; import pl.szczodrzynski.edziennik.utils.models.Time;
@Entity(tableName = "lessonChanges", @Entity(tableName = "lessonChanges",
primaryKeys = {"profileId", "lessonChangeDate", "lessonChangeStartTime", "lessonChangeEndTime"}, 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.lifecycle.LiveData;
import androidx.sqlite.db.SimpleSQLiteQuery; import androidx.sqlite.db.SimpleSQLiteQuery;
@ -11,10 +11,10 @@ import androidx.room.RawQuery;
import java.util.List; import java.util.List;
import pl.szczodrzynski.edziennik.models.Date; import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.models.db.LessonChangeCounter; 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; import static pl.szczodrzynski.edziennik.utils.Utils.d;
@Dao @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 class LessonChangeFull extends LessonChange {
/*public String changeTeacherFullName = ""; /*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.lifecycle.LiveData;
import androidx.sqlite.db.SimpleSQLiteQuery; import androidx.sqlite.db.SimpleSQLiteQuery;
@ -9,12 +9,11 @@ import androidx.room.OnConflictStrategy;
import androidx.room.Query; import androidx.room.Query;
import androidx.room.RawQuery; import androidx.room.RawQuery;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import android.util.Log;
import java.util.List; import java.util.List;
import pl.szczodrzynski.edziennik.models.Date; import pl.szczodrzynski.edziennik.utils.models.Date;
import pl.szczodrzynski.edziennik.models.Time; import pl.szczodrzynski.edziennik.utils.models.Time;
@Dao @Dao
public abstract class LessonDao { 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 androidx.room.ColumnInfo;
import android.content.Context; import android.content.Context;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import pl.szczodrzynski.edziennik.R; 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.data.db.modules.lessons.LessonChange.TYPE_ADDED;
import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CANCELLED; import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CANCELLED;
import static pl.szczodrzynski.edziennik.datamodels.LessonChange.TYPE_CHANGE; import static pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonChange.TYPE_CHANGE;
import static pl.szczodrzynski.edziennik.utils.Utils.bs; import static pl.szczodrzynski.edziennik.utils.Utils.bs;
public class LessonFull extends Lesson { 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 android.os.Bundle;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.room.ColumnInfo; import androidx.room.ColumnInfo;
import androidx.room.Entity; import androidx.room.Entity;
import androidx.annotation.NonNull;
import androidx.room.Ignore; import androidx.room.Ignore;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
@Entity(tableName = "loginStores", @Entity(tableName = "loginStores",
primaryKeys = {"loginStoreId"}) primaryKeys = {"loginStoreId"})
public class LoginStore { 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.lifecycle.LiveData;
import androidx.room.Dao; import androidx.room.Dao;
@ -8,6 +8,8 @@ import androidx.room.Query;
import java.util.List; import java.util.List;
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
@Dao @Dao
public abstract class LoginStoreDao { public abstract class LoginStoreDao {
@Insert(onConflict = OnConflictStrategy.REPLACE) @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.ColumnInfo;
import androidx.room.Entity; import androidx.room.Entity;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import pl.szczodrzynski.edziennik.models.Date; import pl.szczodrzynski.edziennik.utils.models.Date;
@Entity(tableName = "luckyNumbers", @Entity(tableName = "luckyNumbers",
primaryKeys = {"profileId", "luckyNumberDate"}) 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.lifecycle.LiveData;
import androidx.room.Dao; import androidx.room.Dao;
@ -8,7 +8,7 @@ import androidx.room.Query;
import java.util.List; import java.util.List;
import pl.szczodrzynski.edziennik.models.Date; import pl.szczodrzynski.edziennik.utils.models.Date;
@Dao @Dao
public interface LuckyNumberDao { 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.ArrayList;
import java.util.List; import java.util.List;

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